def execute_query(library): """ Run this query against the given library and return all the matching items. """ from models import MetaData, Item for polarity, subclause in self.as_list: for key, operator, value in subclause: if is_date_key(key): value = fuzzy_to_datetime(value) db_clause = MetaData.key == key if operator == 'exact': db_clause = MetaData.value == value and db_clause elif operator in ['after', 'greaterthan']: db_clause = MetaData.value > value and db_clause elif operator in ['before', 'lessthan']: db_clause = MetaData.value < value and db_clause else: raise NotImplementedError("no other operators implemented yet") if polarity == 'including': items = items.filter(db_clause) elif polarity == 'excluding': items = items.filter(not_(db_clause)) return items
def __init__(self, **kwargs): if is_date_key(kwargs['key']): kwargs['date_value'] = fuzzy_to_datetime(kwargs['value']) return super(MetaData, self).__init__(**kwargs)