def select_relative_attribute(attribute, value, tiddlers, greater=False, lesser=False): """ Select tiddlers that sort greater or less than the provided value for the provided attribute. """ def normalize_value(value): try: return value.lower() except AttributeError: return value func = ATTRIBUTE_SORT_KEY.get(attribute, normalize_value) if greater: return (tiddler for tiddler in tiddlers if func(getattr(tiddler, attribute, tiddler.fields.get( attribute, None))) > func(value)) elif lesser: return (tiddler for tiddler in tiddlers if func(getattr(tiddler, attribute, tiddler.fields.get( attribute, None))) < func(value)) else: return (tiddler for tiddler in tiddlers)
def select_relative_attribute(attribute, value, tiddlers, greater=False, lesser=False): """ Select tiddlers that sort greater or less than the provided value for the provided attribute. """ func = ATTRIBUTE_SORT_KEY.get(attribute, lambda x : x.lower()) if greater: return [tiddler for tiddler in tiddlers if func(getattr(tiddler, attribute)) > func(value)] elif lesser: return [tiddler for tiddler in tiddlers if func(getattr(tiddler, attribute)) < func(value)] else: return tiddlers
def select_relative_attribute(attribute, value, entities, greater=False, lesser=False, environ=None): """ Select entities that sort greater or less than the provided ``value`` for the provided ``attribute``. """ if environ is None: environ = {} store = environ.get('tiddlyweb.store', None) def normalize_value(value): """lower case the value if it is a string""" try: return value.lower() except AttributeError: return value func = ATTRIBUTE_SORT_KEY.get(attribute, normalize_value) if greater: comparator = gt elif lesser: comparator = lt else: comparator = lambda x, y: True # noqa def _select(entity): """ Return true if entity's attribute is < or > (depending on comparator) the value in the filter. """ stored_entity = get_entity(entity, store) if hasattr(stored_entity, 'fields'): return comparator( func( getattr(stored_entity, attribute, stored_entity.fields.get(attribute, ''))), func(value)) else: return comparator(func(getattr(stored_entity, attribute, None)), func(value)) return filter(_select, entities)
def select_relative_attribute(attribute, value, entities, greater=False, lesser=False, environ=None): """ Select entities that sort greater or less than the provided value for the provided attribute. """ if environ == None: environ = {} store = environ.get('tiddlyweb.store', None) def normalize_value(value): """lower case the value if it is a string""" try: return value.lower() except AttributeError: return value func = ATTRIBUTE_SORT_KEY.get(attribute, normalize_value) for entity in entities: stored_entity = _get_entity(entity, store) if greater: if hasattr(stored_entity, 'fields'): if func( getattr(stored_entity, attribute, stored_entity.fields.get(attribute, None))) > func(value): yield entity else: if func(getattr(stored_entity, attribute, None)) > func(value): yield entity elif lesser: if hasattr(stored_entity, 'fields'): if func( getattr(stored_entity, attribute, stored_entity.fields.get(attribute, None))) < func(value): yield entity else: if func(getattr(stored_entity, attribute, None)) < func(value): yield entity else: yield entity
def select_relative_attribute(attribute, value, entities, greater=False, lesser=False, environ=None): """ Select entities that sort greater or less than the provided ``value`` for the provided ``attribute``. """ if environ is None: environ = {} store = environ.get('tiddlyweb.store', None) def normalize_value(value): """lower case the value if it is a string""" try: return value.lower() except AttributeError: return value func = ATTRIBUTE_SORT_KEY.get(attribute, normalize_value) if greater: comparator = gt elif lesser: comparator = lt else: comparator = lambda x, y: True # noqa def _select(entity): """ Return true if entity's attribute is < or > (depending on comparator) the value in the filter. """ stored_entity = get_entity(entity, store) if hasattr(stored_entity, 'fields'): return comparator(func(getattr(stored_entity, attribute, stored_entity.fields.get(attribute, ''))), func(value)) else: return comparator(func(getattr(stored_entity, attribute, None)), func(value)) return filter(_select, entities)
datestring = _parse_relative_time(datestring) return date_to_canonical(datestring) except ValueError, exc: raise FilterError("unable to handle datestring: %s" % datestring) def _parse_relative_time(datestring): time_type = datestring[-1] time_value = int(datestring[0:-1]) # clearly this can be cleared up if time_type == "y": time_type = "d" time_value = time_value * 365 if time_type == "d": delta = timedelta(days=time_value) elif time_type == "s": delta = timedelta(seconds=time_value) elif time_type == "m": delta = timedelta(minutes=time_value) elif time_type == "h": delta = timedelta(hours=time_value) else: raise FilterError("unknown time type in filter") time_object = datetime.utcnow() - delta datestring = unicode(time_object.strftime("%Y%m%d%H%M%S")) return datestring # reset ATTRIBUTE_SORT_KEY to local func ATTRIBUTE_SORT_KEY.update({"modified": parse_date, "created": parse_date})
if time_type == 'y': time_type = 'd' time_value = time_value * 365 if time_type == 'd': delta = timedelta(days=time_value) elif time_type == 's': delta = timedelta(seconds=time_value) elif time_type == 'm': delta = timedelta(minutes=time_value) elif time_type == 'h': delta = timedelta(hours=time_value) else: raise FilterError('unknown time type in filter') time_object = datetime.utcnow() - delta datestring = unicode(time_object.strftime('%Y%m%d%H%M%S')) return datestring # reset ATTRIBUTE_SORT_KEY to local func ATTRIBUTE_SORT_KEY.update({'modified': parse_date, 'created': parse_date}) if __name__ == '__main__': print parse_date('2009') print parse_date('1d') print parse_date('1h') print parse_date('1m') print parse_date('1s') print parse_date('1y') print parse_date('1x')