Mercurial > jpath
changeset 7:8b9133467904
add unequality operators to filter
| author | sheep@wintermute |
|---|---|
| date | Wed, 14 Apr 2010 12:38:51 +0200 |
| parents | ba0f10adb44b |
| children | 1ad7cf9159dd |
| files | jpath.py |
| diffstat | 1 files changed, 17 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/jpath.py Wed Apr 14 12:14:55 2010 +0200 +++ b/jpath.py Wed Apr 14 12:38:51 2010 +0200 @@ -144,16 +144,25 @@ class FilterToken(Token): """(foo=3)""" - regexp = (r'[(](?P<filter_path>[^(=)]+)\s*=\s*' + regexp = (r'[(](?P<filter_path>[^(<=>)!]+)' + r'\s*(?P<filter_operator>[<=>]|>=|<=|!=)\s*' r'(?P<filter_value>"([^"]|\\")*"|-?[0-9]|true|false)[)]') name = '_filter' priority = 50 + op = { + '=': operator.eq, + '>': operator.gt, + '<': operator.lt, + '!=': operator.ne, + '>=': operator.ge, + '<=': operator.le, + } - def __init__(self, _filter, filter_path, filter_value): + def __init__(self, _filter, filter_path, filter_operator, filter_value): """ - >>> FilterToken(r'(foo="b\"ar")', r'foo', r'"b\"ar"').value + >>> FilterToken(r'(foo="b\"ar")', r'foo', r'=', r'"b\"ar"').value 'b"ar' - >>> FilterToken(r'(bar=-1)', r'bar', r'-1').value + >>> FilterToken(r'(bar=-1)', r'bar', r'=', r'-1').value -1 """ self.path = filter_path @@ -163,6 +172,7 @@ self.value = filter_value == 'true' else: self.value = int(filter_value) + self.operator = filter_operator def parse(self, tokens, data): try: @@ -175,7 +185,7 @@ except AttributeError: pass for item in data: - if get(self.path, item) == self.value: + if self.op[self.operator](get(self.path, item), self.value): try: for value in token.parse(tokens, item): yield value @@ -325,6 +335,8 @@ [[1, 3]] >>> get_all('(x=1).y', [{'x':1, 'y':2}, {'x':0, 'y':3}, {'x':1, 'y':4}]) [2, 4] + >>> get_all('(x>0).y', [{'x':1, 'y':2}, {'x':0, 'y':3}, {'x':1, 'y':4}]) + [2, 4] >>> get_all('(x=1).y', [{'x':1, 'y':2}, {'x':0, 'y':3}, {'x':1}]) [2] >>> get_all('..', {'a':1, 'x':[2], 'c':[{'b': '3'}]})
