コード例 #1
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_field_composed_filter():
    """
    Add a field to a tiddler and then make sure we can filter for it.
    """

    tiddler1 = Tiddler('one')
    tiddler1.fields = {'status': 'hot'}
    tiddler2 = Tiddler('two')
    tiddler2.fields = {'status': 'cold'}
    tiddler3 = Tiddler('three')

    filter_string = '[status[hot]]'
    filters = filter.compose_from_string(filter_string)
    found_tiddlers = filter.by_composition(filters, [tiddler1, tiddler2, tiddler3])
    assert [tiddler.title for tiddler in found_tiddlers] == ['one']

    filter_string = '[!status[hot]]'
    filters = filter.compose_from_string(filter_string)
    found_tiddlers = filter.by_composition(filters, [tiddler1, tiddler2, tiddler3])
    assert [tiddler.title for tiddler in found_tiddlers] == ['two', 'three']

    filter_string = '[status[cold]]'
    filters = filter.compose_from_string(filter_string)
    found_tiddlers = filter.by_composition(filters, [tiddler1, tiddler2, tiddler3])
    assert [tiddler.title for tiddler in found_tiddlers] == ['two']

    filter_string = '[barnabas[monkey]]'
    filters = filter.compose_from_string(filter_string)
    found_tiddlers = filter.by_composition(filters, [tiddler1, tiddler2, tiddler3])
    assert [tiddler.title for tiddler in found_tiddlers] == []

    filter_string = '[!barnabas[monkey]]'
    filters = filter.compose_from_string(filter_string)
    found_tiddlers = filter.by_composition(filters, [tiddler1, tiddler2, tiddler3])
    assert [tiddler.title for tiddler in found_tiddlers] == ['one', 'two', 'three']
コード例 #2
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_empty_composed_filters():

    filter_string = ''
    filters = filter.compose_from_string(filter_string)
    found_tiddlers = filter.by_composition(filters, tiddlers)

    assert found_tiddlers == tiddlers, 'empty filter returns all tiddlers'
コード例 #3
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_string_to_composed_filter_removal_bag():
    filter_string = 'TiddlerThree TiddlerTwo [-bag[TiddlerThree]]'
    filters = filter.compose_from_string(filter_string)

    found_tiddlers = filter.by_composition(filters, tiddlers)
    assert len(found_tiddlers) == 1
    assert found_tiddlers[0].title == 'TiddlerTwo'
コード例 #4
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_string_to_composed_filter_negative_bag():
    filter_string = '[!bag[TiddlerThree]]'
    filters = filter.compose_from_string(filter_string)

    found_tiddlers = filter.by_composition(filters, tiddlers)
    assert len(found_tiddlers) == 2
    assert 'TiddlerOne' in [tiddler.title for tiddler in found_tiddlers]
    assert 'TiddlerTwo' in [tiddler.title for tiddler in found_tiddlers]
コード例 #5
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_string_to_composed_filter_negative_title():
    filter_string = '[tag[tagthree]] !TiddlerOne'
    filters = filter.compose_from_string(filter_string)

    found_tiddlers = filter.by_composition(filters, tiddlers)
    assert len(found_tiddlers) == 2, 'two tiddlers should be found, got %s' % len(found_tiddlers)
    assert 'TiddlerThree' in [tiddler.title for tiddler in found_tiddlers], 'should get third tiddler'
    assert 'TiddlerTwo' in [tiddler.title for tiddler in found_tiddlers], 'should get second tiddler'
コード例 #6
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_string_to_composed_filter_positive_bag():
    filter_string = '[bag[TiddlerThree]]'
    filters = filter.compose_from_string(filter_string)

    found_tiddlers = filter.by_composition(filters, tiddlers)
    assert len(found_tiddlers) == 1
    assert found_tiddlers[0].bag == 'TiddlerThree'
    assert found_tiddlers[0].title == 'TiddlerThree'
コード例 #7
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_string_to_composed_filter_positive_tag():

    filter_string = 'TiddlerOne [tag[tagone]]'
    filters = filter.compose_from_string(filter_string)

    found_tiddlers = filter.by_composition(filters, tiddlers)
    assert len(found_tiddlers) == 2, 'two tiddlers should be found, got %s' % len(found_tiddlers)
    assert 'TiddlerOne' in [tiddler.title for tiddler in found_tiddlers], 'should get first tiddler'
    assert 'TiddlerThree' in [tiddler.title for tiddler in found_tiddlers], 'should get third tiddler'
コード例 #8
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_string_composed_filter_with_count():
    """
    Test count composed string filter.
    """

    filter_string = '[sort[-title]] [count[2]]'

    filters = filter.compose_from_string(filter_string)
    found_tiddlers = filter.by_composition(filters, tiddlers)
    assert [tiddler.title for tiddler in found_tiddlers] == ['TiddlerTwo', 'TiddlerThree']
コード例 #9
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_string_composed_filter_with_remove_by_tag():
    """
    Test complex composed string filter.
    """

    filter_string = '[!tag[mumbly]] [-tag[tagone]]'

    filters = filter.compose_from_string(filter_string)
    found_tiddlers = filter.by_composition(filters, tiddlers)
    assert len(found_tiddlers) == 1, 'one tiddler should be found, got %s' % len(found_tiddlers)
    assert found_tiddlers[0].title == 'TiddlerTwo', 'the found tiddler should be TiddlerTwo, got %s' % found_tiddlers[0].title
コード例 #10
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_string_composed_filter_with_remove_by_title():
    """
    Test removal of a built list.
    """

    filter_string = 'TiddlerTwo TiddlerOne -TiddlerTwo'

    filters = filter.compose_from_string(filter_string)
    found_tiddlers = filter.by_composition(filters, tiddlers)
    assert len(found_tiddlers) == 1, 'one tiddler should be found, got %s' % len(found_tiddlers)
    assert found_tiddlers[0].title == 'TiddlerOne', 'the found tiddler should be TiddlerOne, got %s' % found_tiddlers[0].title
コード例 #11
0
ファイル: test_filter.py プロジェクト: angeluseve/tiddlyweb
def test_string_composed_filter_with_spaces():
    """
    Test spaces in filter.
    """

    tiddlers = []
    for name in ['one', 'two', 'three']:
        tiddler = Tiddler('tiddler %s' % name)
        tiddler.text = name
        tiddlers.append(tiddler)

    filter_string = '[[tiddler one]]'

    filters = filter.compose_from_string(filter_string)
    found_tiddlers = filter.by_composition(filters, tiddlers)
    assert len(found_tiddlers) == 1, 'one tiddler should be found, got %s' % len(found_tiddlers)
    assert found_tiddlers[0].title == 'tiddler one'
コード例 #12
0
ファイル: control.py プロジェクト: angeluseve/tiddlyweb
def filter_tiddlers_from_bag(bag, filter, filterargs=None):
    """
    Return the list of tiddlers resulting from filtering
    bag by filter. filter may be a filter function, in
    which case filterags may need to be set, or may be
    a filter string.

    Probably can do some meta-programming here.
    """
    store = bag.store
    if callable(filter):
        if store:
            return filter(filterargs, get_tiddlers_from_bag(bag))
        return filter(filterargs, bag.list_tiddlers())
    else:
        filters = fl.compose_from_string(filter)
        if store:
            return fl.by_composition(filters, get_tiddlers_from_bag(bag))
        return fl.by_composition(filters, bag.list_tiddlers())