Пример #1
0
    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))
Пример #2
0
    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))
Пример #3
0
    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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
        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)


#   ____ ___  __  __ ____ ___ _   _    _  _____ ___  ____  ____
#  / ___/ _ \|  \/  | __ )_ _| \ | |  / \|_   _/ _ \|  _ \/ ___|
Пример #7
0
        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)


#   ____ ___  __  __ ____ ___ _   _    _  _____ ___  ____  ____
#  / ___/ _ \|  \/  | __ )_ _| \ | |  / \|_   _/ _ \|  _ \/ ___|
# | |  | | | | |\/| |  _ \| ||  \| | / _ \ | || | | | |_) \___ \