Source code for luna.util

import string
import random

import logging
logger = logging.getLogger()


[docs]def new_random_string(size=32, chars=string.ascii_uppercase + string.digits): """Generate a new random string of size ``size`` containing only the characters provided in ``chars``. Parameters ---------- size : int, optional The size of the new string. The default value is 32. chars : iterable, optional A sequence of characters to choose from. The default value is 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'. Returns ------- random_string : str The new random string. """ return ('').join((random.choice(chars) for i in range(size)))
[docs]def rgb2hex(r, g, b): return "#{:02x}{:02x}{:02x}".format(r, g, b)
[docs]def hex2rgb(hexcode): return tuple(map(ord, hexcode[1:].decode('hex')))
# TODO: Transform hex to rgb and vice versa
[docs]class ColorPallete: def __init__(self, color_map=None, default_color=(255, 255, 255)): self.color_map = color_map or {} self.default_color = default_color
[docs] def add_color(self, key, color): self.color_map[key] = color
[docs] def get_normalized_color(self, key): color = self.get_color(key) if isinstance(color, str): return color elif all([x < 1 for x in color]): return color return tuple(c / 255 for c in color)
[docs] def get_unnormalized_color(self, key): color = self.get_color(key) if isinstance(color, str): return color elif all([x > 1 for x in color]): return color return tuple(int(c * 255) for c in color)
[docs] def get_color(self, key): if key in self.color_map: return self.color_map[key] elif self.default_color: logger.warning("Key '%s' does not exist. Then, the default color will be used: %s." % (key, self.default_color)) return self.default_color else: raise KeyError("Key '%s' does not exist and no default color was defined." % key)
def __contains__(self, key): return key in self.color_map
[docs]def func_call_to_str(func, *args, **kwargs): arg_names = func.__code__.co_varnames[:func.__code__.co_argcount] args = args[:len(arg_names)] defaults = func.__defaults__ or () args = (args + defaults[len(defaults) - (func.__code__.co_argcount - len(args)):]) params = zip(arg_names, args) args = args[len(arg_names):] if args: params.append(('args', args)) if kwargs: params.append(('kwargs', kwargs)) args_as_str = ', '.join('%s=%r' % p for p in params) + ' )' func_as_str = "%s(%s)" % (func.__name__, args_as_str) return func_as_str
[docs]def iter_to_chunks(l, n): return [l[i:i + n] for i in range(0, len(l), n)]