thorn.utils.functional
¶
Functional-style utilities.
-
thorn.utils.functional.
chunks
(it, n)[source]¶ Split an iterator into chunks with n elements each.
Example
# n == 2 >>> x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 2) >>> list(x) [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10]]
# n == 3 >>> x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 3) >>> list(x) [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]]
-
class
thorn.utils.functional.
Q
(*args, **kwargs)[source]¶ Object query node.
This class works like
django.db.models.Q
, but is used for filtering regular Python objects instead of database rows.Examples
>>> # Match object with `last_name` attribute set to "Costanza": >>> Q(last_name__eq="Costanza")
>>> # Match object with `author.last_name` attribute set to "Benes": >>> Q(author__last_name__eq="Benes")
>>> # You are not allowed to specify any key without an operator, >>> # even when the following would be fine using Django`s Q objects: >>> Q(author__last_name="Benes") # <-- ERROR, will raise ValueError
>>> # Attributes can be nested arbitrarily deep: >>> Q(a__b__c__d__e__f__g__x__gt=3.03)
>>> # The special `*__eq=True` means "match any *true-ish* value": >>> Q(author__account__is_staff__eq=True)
>>> # Similarly the `*__eq=False` means "match any *false-y*" value": >>> Q(author__account__is_disabled=False)
See also
Returns: - to match an object with the given predicates,
- call the return value with the object to match:
Q(x__eq==808)(obj)
.
Return type: Callable -
branches
= {False: <built-in function truth>, True: <built-in function not_>}¶ If the node is negated (
~a
/a.negate()
), branch will be True, and we reverse the query into anot a
one.
-
compile_node
(field)[source]¶ Compile node into a cached function that performs the match.
Returns: taking the object to match. Return type: Callable
-
gate
¶
-
gates
= {u'AND': <built-in function all>, u'OR': <built-in function any>}¶ The gate decides the boolean operator of this tree node. A node can either be OR (
a | b
), or an AND note (a & b
). - Default is AND.
-
operators
= {u'gt': <built-in function gt>, u'is': <built-in function is_>, u'now_eq': <function compare>, u'now_endswith': <function compare>, u'endswith': <function endswith>, u'now_gt': <function compare>, u'in': <function reversed>, u'eq': <built-in function eq>, u'now_ne': <function compare>, u'gte': <built-in function ge>, u'contains': <built-in function contains>, u'ne': <built-in function ne>, u'lt': <built-in function lt>, u'now_not_in': <function compare>, u'startswith': <function startswith>, u'now_lt': <function compare>, u'now_lte': <function compare>, u'now_gte': <function compare>, u'not': <function <lambda>>, u'true': <function <lambda>>, u'not_in': <function reversed>, u'is_not': <built-in function is_not>, u'now_in': <function compare>, u'now_is': <function compare>, u'now_is_not': <function compare>, u'lte': <built-in function le>, u'now_contains': <function compare>, u'now_startswith': <function compare>}¶ Mapping of opcode to binary operator function –
f(a, b)
. Operators may return any true-ish or false-y value.