예제 #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)
예제 #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
예제 #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)
예제 #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
예제 #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)