- filter_list.extend(toFilterArgs(
- filter_op, obj, filter_key, filter_vals))
- logger.info('Filter list length: %d' % len(filter_list))
- return filter_list
-
-
-def toFilterArgs(operation: str, obj: ColumnElement, key: str, values: list):
- if not hasattr(obj, key):
- logger.warning('Filter attrName %s not in Object %s.' %
- (key, str(obj)))
- return []
-
- if operation in ['eq', 'neq', 'gt', 'lt', 'gte', 'lte']:
- if len(values) != 1:
- raise KeyError('Filter operation one is only support one value.')
- elif operation in ['in', 'nin', 'cont', 'ncont']:
- if len(values) == 0:
- raise KeyError('Filter operation value is needed.')
- else:
- raise KeyError('Filter operation value not support.')
-
- ll = list()
- if operation == 'eq':
- val = values[0]
- if val.lower() == 'null':
- val = None
- ll.append(getattr(obj, key) == val)
- elif operation == 'neq':
- val = values[0]
- if val.lower() == 'null':
- val = None
- ll.append(getattr(obj, key) != val)
- elif operation == 'gt':
- val = values[0]
- ll.append(getattr(obj, key) > val)
- elif operation == 'lt':
- val = values[0]
- ll.append(getattr(obj, key) < val)
- elif operation == 'gte':
- val = values[0]
- ll.append(getattr(obj, key) >= val)
- elif operation == 'lte':
- val = values[0]
- ll.append(getattr(obj, key) <= val)
- elif operation == 'in':
- ll.append(getattr(obj, key).in_(values))
- elif operation == 'nin':
- ll.append(~getattr(obj, key).in_(values))
- elif operation == 'cont':
- val_list = list()
- for val in values:
- val_list.append(getattr(obj, key).contains(val))
- ll.append(or_(*val_list))
- elif operation == 'ncont':
- val_list = list()
- for val in values:
- val_list.append(getattr(obj, key).contains(val))
- ll.append(~or_(*val_list))
- return ll
+ if filter_op in ["eq", "neq", "gt", "lt", "gte", "lte"]:
+ if len(filter_vals) != 1:
+ raise BadRequestException(
+ "Found {} values: {} while only single value"
+ " is allowed for operation {}".format(
+ len(filter_vals), filter_vals, filter_op)
+ )
+ elif filter_op not in ["in", "nin", "cont", "ncont"]:
+ raise BadRequestException(
+ 'Filter operation {} is invalid'.format(filter_op)
+ )
+ else:
+ pass
+ filter_key = transfer_filter_attr_name_in_special(obj, filter_key)
+ if not hasattr(obj, filter_key) or \
+ filter_key in ['hash', 'updatetime', 'createtime', 'events']:
+ raise BadRequestException(
+ 'Filter attrName {} is invalid'.format(filter_key))