fix things related to conditions
This commit is contained in:
parent
4670081040
commit
572d5c1061
2 changed files with 15 additions and 10 deletions
|
|
@ -107,7 +107,8 @@ class IFormatter(object):
|
||||||
|
|
||||||
def format_dict(self, item):
|
def format_dict(self, item):
|
||||||
"""
|
"""
|
||||||
Format an dict to be human-readable. The dict is already simplified if user provides selected fields.
|
Format a dict to be human-readable. The dict is already simplified
|
||||||
|
if user provides selected fields.
|
||||||
Called by format().
|
Called by format().
|
||||||
This method has to be overridden in child classes.
|
This method has to be overridden in child classes.
|
||||||
|
|
||||||
|
|
@ -121,7 +122,7 @@ class IFormatter(object):
|
||||||
print string.encode('utf-8')
|
print string.encode('utf-8')
|
||||||
|
|
||||||
def to_dict(self, obj, condition=None, selected_fields=None):
|
def to_dict(self, obj, condition=None, selected_fields=None):
|
||||||
def iter_select_and_decorate(d):
|
def iter_select(d):
|
||||||
if selected_fields is None or '*' in selected_fields:
|
if selected_fields is None or '*' in selected_fields:
|
||||||
fields = d.iterkeys()
|
fields = d.iterkeys()
|
||||||
else:
|
else:
|
||||||
|
|
@ -133,12 +134,16 @@ class IFormatter(object):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise FieldNotFound(obj, key)
|
raise FieldNotFound(obj, key)
|
||||||
|
|
||||||
|
yield key, value
|
||||||
|
|
||||||
|
def iter_decorate(d):
|
||||||
|
for key, value in d:
|
||||||
if key == 'id' and obj.backend is not None:
|
if key == 'id' and obj.backend is not None:
|
||||||
value = self.build_id(value, obj.backend)
|
value = self.build_id(value, obj.backend)
|
||||||
yield key, value
|
yield key, value
|
||||||
|
|
||||||
fields_iterator = obj.iter_fields()
|
fields_iterator = obj.iter_fields()
|
||||||
d = OrderedDict(fields_iterator)
|
d = OrderedDict(iter_decorate(fields_iterator))
|
||||||
if condition is not None and not condition.is_valid(d):
|
if condition is not None and not condition.is_valid(d):
|
||||||
return None
|
return None
|
||||||
return OrderedDict([(k, v) for k, v in iter_select_and_decorate(d)])
|
return OrderedDict([(k, v) for k, v in iter_select(d)])
|
||||||
|
|
|
||||||
|
|
@ -71,16 +71,16 @@ class ResultsCondition(object):
|
||||||
condition_str = None
|
condition_str = None
|
||||||
|
|
||||||
def __init__(self, condition_str):
|
def __init__(self, condition_str):
|
||||||
condition_str = condition_str.replace('OR', 'or') \
|
condition_str = condition_str.replace(' OR ', ' or ') \
|
||||||
.replace('AND', 'and') \
|
.replace(' AND ', ' and ') \
|
||||||
.replace('NOT', 'not')
|
.replace(' NOT ', ' not ')
|
||||||
or_list = []
|
or_list = []
|
||||||
for _or in condition_str.split('or'):
|
for _or in condition_str.split(' or '):
|
||||||
and_dict = {}
|
and_dict = {}
|
||||||
for _and in _or.split('and'):
|
for _and in _or.split(' and '):
|
||||||
if '!=' in _and:
|
if '!=' in _and:
|
||||||
k, v = _and.split('!=')
|
k, v = _and.split('!=')
|
||||||
k += '!'
|
k = k.strip() + '!'
|
||||||
elif '=' in _and:
|
elif '=' in _and:
|
||||||
k, v = _and.split('=')
|
k, v = _and.split('=')
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue