Пример #1
0
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
Пример #2
0
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
Пример #3
0
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)