def __init__(self, bad_input_checks, errors): '''Raises a random error if any input check returns True''' super().__init__() self._check = funcy.any_fn(*bad_input_checks) self._errors = errors self._random = random.Random() self._random.seed = hash(funcy.merge(bad_input_checks, errors))
def __init__(self, bad_input_checks, errors): """Raises a random error if any input check returns True""" super().__init__() self._check = any_fn(*bad_input_checks) self._errors = errors self._random = random.Random() self._random.seed = hash(merge(bad_input_checks, errors))
def __init__( self, bad_input_checks=(fy.constantly(True), ), errors=tuple(Exception.__subclasses__()), ): """Raises a random error if any input check returns True""" self.bad_input_checks = bad_input_checks self.errors = errors self._check = fy.any_fn(*self.bad_input_checks) seed = hash(fy.merge(self.bad_input_checks, self.errors)) self._random = random.Random(seed)
def monkey_mix(cls, mixin): """ Mixes a mixin into existing class. Does not use actual multi-inheritance mixins, just monkey patches methods. Mixin methods can call copies of original ones stored in `_no_monkey` proxy: class SomeMixin(object): def do_smth(self, arg): ... do smth else before self._no_monkey.do_smth(self, arg) ... do smth else after """ assert not hasattr(cls, '_no_monkey'), 'Multiple monkey mix not supported' cls._no_monkey = MonkeyProxy() test = any_fn(inspect.isfunction, inspect.ismethoddescriptor) methods = select_values(test, mixin.__dict__) for name, method in methods.items(): if hasattr(cls, name): setattr(cls._no_monkey, name, getattr(cls, name)) setattr(cls, name, method)
if is_single(obj): self.append(obj) else: self.extend(obj) @property def children(self): return self def as_node_set(self): return self def as_json(self): return [node.as_json() for node in self] is_nset = isa(NodeSet) is_single = any_fn(is_leaf, complement(isa(Node, NodeSet, list))) def nodify(name, data): _nodify = lambda (name, data): nodify(name, data) if isinstance(data, list): return Branch(name, NodeSet.from_seq(map(_nodify, enumerate(data)))) elif isinstance(data, dict): return Branch(name, NodeSet.from_seq(map(_nodify, data.iteritems()))) else: return Leaf(name, data) # ____ ___ __ __ ____ ___ _ _ _ _____ ___ ____ ____ # / ___/ _ \| \/ | __ )_ _| \ | | / \|_ _/ _ \| _ \/ ___|
else: self.extend(obj) @property def children(self): return self def as_node_set(self): return self def as_json(self): return [node.as_json() for node in self] is_nset = isa(NodeSet) is_single = any_fn(is_leaf, complement(isa(Node, NodeSet, list))) def nodify(name, data): _nodify = lambda (name, data): nodify(name, data) if isinstance(data, list): return Branch(name, NodeSet.from_seq(map(_nodify, enumerate(data)))) elif isinstance(data, dict): return Branch(name, NodeSet.from_seq(map(_nodify, data.iteritems()))) else: return Leaf(name, data) # ____ ___ __ __ ____ ___ _ _ _ _____ ___ ____ ____ # / ___/ _ \| \/ | __ )_ _| \ | | / \|_ _/ _ \| _ \/ ___| # | | | | | | |\/| | _ \| || \| | / _ \ | || | | | |_) \___ \