def filterByIntegerRestrictor(integerRestrictor, table): """Given a dictionary of integerRestrictor k-v pairs, returns an SQLAlchemy ORM filter string based on the integerRestrictor.""" location = integerRestrictor['location'] relation = integerRestrictor['relation'] relation = {'lt': '<', 'gt': '>', '==': '==', '!=': '!='}[relation] integer = integerRestrictor['integer'] if 'unit' in integerRestrictor: unit = integerRestrictor['unit'] if unit: integer = filesize_to_bytes(integer, unit) else: integer = int(integer.split('.')[0]) filterString = 'model.%s.%s %s %s' % (table, location, relation, integer) return filterString
def filterByIntegerRestrictor(integerRestrictor, table): """Given a dictionary of integerRestrictor k-v pairs, returns an SQLAlchemy ORM filter string based on the integerRestrictor.""" location = integerRestrictor['location'] relation = integerRestrictor['relation'] relation = {'lt':'<', 'gt':'>', '==':'==', '!=':'!='}[relation] integer = integerRestrictor['integer'] if 'unit' in integerRestrictor: unit = integerRestrictor['unit'] if unit: integer = filesize_to_bytes(integer, unit) else: integer = int(integer.split('.')[0]) filterString = 'model.%s.%s %s %s' % (table, location, relation, integer) return filterString
def filterQueryByIntegerRestrictor(query, integerRestrictor, tableName): """Filter the query according to the integer restrictors, e.g., 'ID is greater than 200' or 'file size is less than 200MB'. """ # integer will match the regex /^ *[0-9]+(\.[0-9]+)? *$/ integer = integerRestrictor['integer'].strip() location = integerRestrictor['location'] relation = integerRestrictor['relation'] if 'unit' in integerRestrictor: unit = integerRestrictor['unit'] else: unit = None if unit: integer = filesize_to_bytes(float(integer), unit) else: integer = int(integer.split('.')[0]) tbl = getattr(model, tableName) col = getattr(tbl, location) if relation == 'lt': filterCondition = col < integer elif relation == 'gt': filterCondition = col > integer elif relation == '==': filterCondition = col == integer else: filterCondition = col != integer return query.filter(filterCondition)