Exemple #1
0
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)
Exemple #2
0
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
Exemple #3
0
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)
Exemple #4
0
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
Exemple #5
0
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')