def test_boolean():
    """
    We expect a default AND but can do OR.
    """

    store.put(Bag('mybag'))

    tiddlera = Tiddler('a', 'mybag')
    tiddlera.tags = ['one', '@two']
    store.put(tiddlera)

    tiddlerb = Tiddler('b', 'mybag')
    tiddlerb.tags = ['@two', 'three']
    store.put(tiddlerb)

    tiddlerc = Tiddler('c', 'mybag')
    tiddlerc.tags = ['three', 'four']
    store.put(tiddlerc)

    tiddlers = list(search(config, 'tags:one'))
    assert len(tiddlers) == 1

    tiddlers = list(search(config, 'tags:@two'))
    assert len(tiddlers) == 2

    tiddlers = list(search(config, 'tags:one tags:@two'))
    assert len(tiddlers) == 1

    tiddlers = list(search(config, 'tags:one tags:four'))
    assert len(tiddlers) == 0

    tiddlers = list(search(config, 'tags:one OR tags:four'))
    assert len(tiddlers) == 2
Пример #2
0
def test_modified():
    """
    Note the multiple store.put in here are to create
    additional revisions to make sure that joins are
    sufficiently limited.
    """
    tiddler = Tiddler(u'GettingStarted', u'fnd_public')
    tiddler.modifier = u'fnd'
    store.put(tiddler)

    tiddlers = list(store.search(u'modifier:fnd'))

    assert len(tiddlers) == 1

    tiddler = Tiddler(u'GettingStarted', u'fnd_public')
    tiddler.tags = [u'monkey', u'cow', u'food']
    tiddler.modifier = u'cdent'
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)

    tiddlers = list(store.search(u'modifier:fnd'))

    assert len(tiddlers) == 0

    tiddler = Tiddler(u'GettingFancy', u'fnd_public')
    tiddler.tags = [u'cow', u'food']
    tiddler.modifier = u'fnd'
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)

    tiddlers = list(store.search(u'modifier:fnd OR modifier:cdent'))

    assert len(tiddlers) == 2

    tiddlers = list(store.search(u'modifier:fnd NOT modifier:cdent'))

    assert len(tiddlers) == 1

    tiddlers = list(
        store.search(
            u'modifier:fnd NOT (modifier:cdent OR title:GettingStarted)'))

    assert len(tiddlers) == 1

    tiddlers = list(store.search(u'modifier:fnd AND modified:20*'))

    assert len(tiddlers) == 1
def test_or_tags():
    tiddler = Tiddler("tagone", "fnd_public")
    tiddler.text = "hi @onething hello"
    tiddler.tags = ["one", "three", "five"]
    store.put(tiddler)

    tiddler = Tiddler("tagtwo", "fnd_public")
    tiddler.text = "hi @twothing hello"
    tiddler.tags = ["two", "four", "six"]
    store.put(tiddler)

    tiddlers = list(store.search(u"@twothing OR tag:one"))

    assert len(tiddlers) == 2
Пример #4
0
def test_or_tags():
    tiddler = Tiddler(u'tagone', u'fnd_public')
    tiddler.text = u'hi @onething hello'
    tiddler.tags = [u'one', u'three', u'five']
    store.put(tiddler)

    tiddler = Tiddler(u'tagtwo', u'fnd_public')
    tiddler.text = u'hi @twothing hello'
    tiddler.tags = [u'two', u'four', u'six']
    store.put(tiddler)

    tiddlers = list(store.search(u'@twothing OR tag:one'))

    assert len(tiddlers) == 2
def test_or_tags():
    tiddler = Tiddler(u'tagone', u'fnd_public')
    tiddler.text = 'hi @onething hello'
    tiddler.tags = ['one','three', 'five']
    store.put(tiddler)

    tiddler = Tiddler(u'tagtwo', u'fnd_public')
    tiddler.text = 'hi @twothing hello'
    tiddler.tags = ['two', 'four', 'six']
    store.put(tiddler)

    tiddlers = list(store.search(u'@twothing OR tag:one'))

    assert len(tiddlers) == 2
def test_modified():
    """
    Note the multiple store.put in here are to create
    additional revisions to make sure that joins are
    sufficiently limited.
    """
    tiddler = Tiddler("GettingStarted", "fnd_public")
    tiddler.modifier = u"fnd"
    store.put(tiddler)

    tiddlers = list(store.search(u"modifier:fnd"))

    assert len(tiddlers) == 1

    tiddler = Tiddler("GettingStarted", "fnd_public")
    tiddler.tags = [u"monkey", u"cow", u"food"]
    tiddler.modifier = u"cdent"
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)

    tiddlers = list(store.search(u"modifier:fnd"))

    assert len(tiddlers) == 0

    tiddler = Tiddler("GettingFancy", "fnd_public")
    tiddler.tags = [u"cow", u"food"]
    tiddler.modifier = u"fnd"
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)

    tiddlers = list(store.search(u"modifier:fnd OR modifier:cdent"))

    assert len(tiddlers) == 2

    tiddlers = list(store.search(u"modifier:fnd NOT modifier:cdent"))

    assert len(tiddlers) == 1

    tiddlers = list(store.search(u"modifier:fnd NOT (modifier:cdent OR title:GettingStarted)"))

    assert len(tiddlers) == 1

    tiddlers = list(store.search(u"modifier:fnd AND modified:20*"))

    assert len(tiddlers) == 1
def test_modified():
    """
    Note the multiple store.put in here are to create
    additional revisions to make sure that joins are
    sufficiently limited.
    """
    tiddler = Tiddler(u'GettingStarted', u'fnd_public')
    tiddler.modifier = u'fnd';
    store.put(tiddler)

    tiddlers = list(store.search(u'modifier:fnd'))

    assert len(tiddlers) == 1

    tiddler = Tiddler(u'GettingStarted', u'fnd_public')
    tiddler.tags = [u'monkey', u'cow', u'food']
    tiddler.modifier = u'cdent';
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)

    tiddlers = list(store.search(u'modifier:fnd'))

    assert len(tiddlers) == 0

    tiddler = Tiddler(u'GettingFancy', u'fnd_public')
    tiddler.tags = [u'cow', u'food']
    tiddler.modifier = u'fnd';
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)
    store.put(tiddler)

    tiddlers = list(store.search(u'modifier:fnd OR modifier:cdent'))

    assert len(tiddlers) == 2

    tiddlers = list(store.search(u'modifier:fnd NOT modifier:cdent'))

    assert len(tiddlers) == 1

    tiddlers = list(store.search(u'modifier:fnd NOT (modifier:cdent OR title:GettingStarted)'))

    assert len(tiddlers) == 1

    tiddlers = list(store.search(u'modifier:fnd AND modified:20*'))

    assert len(tiddlers) == 1
def test_post_existing():
    """
    testing posting an existing tiddler to check that it is overwritten
    """
    #setup
    setup(store)
    tiddler = Tiddler('i exist','jon_private')
    tiddler.fields['geo.lat'] = '20'
    tiddler.fields['geo.long'] = '2'
    tiddler.text = 'data'
    tiddler.tags = ['a', 'b']
    store.put(tiddler)
    
    #run
    mailer.handle_email({
        'to': '*****@*****.**',
        'from': '*****@*****.**',
        'subject': 'i exist',
        'body': 'wipeout'
    })

    #verify  
    tiddler = store.get(Tiddler('i exist', 'jon_private'))
    assert tiddler.text == 'wipeout'
    assert tiddler.fields.get('geo.lat') == None
Пример #9
0
def test_revisions_deletions():
    tiddler = Tiddler('tone', 'pone')
    tiddler.text = u'revision1'
    tiddler.tags = [u'1', u'2']
    STORE.put(tiddler)
    tiddler.text = u'revision2'
    tiddler.tags = [u'3', u'4']
    STORE.put(tiddler)

    revisions = STORE.list_tiddler_revisions(tiddler)

    assert len(revisions) == 2

    STORE.delete(tiddler)

    py.test.raises(NoTiddlerError, 'STORE.list_tiddler_revisions(tiddler)')
Пример #10
0
def url(args):
    """Add a URL via tiddlywebplugins.URLs. Redirect is optional. [--redirect] <selector_path> <destination_url>"""
    if 2 != len(args) != 3:
        print >> sys.stderr, ('you must include both the path you want to use (selector path) and the destination url')
        
    store = get_store(config)
    
    if args[0] == '--redirect':
        redirect = args.pop(0).lstrip('-')
    else:
        redirect = None
    
    selector_path = args[0]
    destination_url = args[1]
    
    tiddler = Tiddler(selector_path)
    tiddler.bag = config['url_bag']
    
    tiddler.text = destination_url
    if redirect:
        tiddler.tags = [redirect]
    
    if validate_url(tiddler):
        store.put(tiddler)
    
    return True
Пример #11
0
def test_cascade():
    bag = Bag(u'holder')
    store.put(bag)
    tiddler = Tiddler(u'one', u'holder')
    tiddler.text = u'text'
    tiddler.tags = [u'tag']
    tiddler.fields = {u'fieldone': u'valueone'}
    store.put(tiddler)

    def count_em(count, message):
        text_count = store.storage.session.query(sText).count()
        tag_count = store.storage.session.query(sTag).count()
        tiddler_count = store.storage.session.query(sTiddler).count()
        revision_count = store.storage.session.query(sRevision).count()
        field_count = store.storage.session.query(sField).count()
        store.storage.session.commit()

        message = ('%s, but got: text: %s, tag: %s, tiddler: %s, '
                   'revision: %s, field: %s') % (message, text_count,
                                                 tag_count, tiddler_count,
                                                 revision_count, field_count)

        assert (text_count == tag_count == tiddler_count == revision_count ==
                field_count == count), message

    count_em(1, '1 row for the tiddler everywhere')

    store.delete(tiddler)

    count_em(0, '0 rows for the tiddler everywhere')
def test_in_a_recipe():
    from tiddlyweb.config import config
    store = get_store(config)
    bag = Bag('hi')
    store.put(bag)
    tiddler = Tiddler('thing1', 'hi')
    tiddler.tags = ['research']
    store.put(tiddler)
    tiddler = Tiddler('thing2', 'hi')
    store.put(tiddler)

    recipe1 = Recipe('oi')
    recipe1.set_recipe([('hi', 'mselect=tag:research')])
    recipe1.store = store
    recipe2 = Recipe('coi')
    recipe2.set_recipe([('hi', 'select=tag:research')])
    recipe2.store = store
    recipe3 = Recipe('boi')
    recipe3.set_recipe([('hi', '')])
    recipe3.store = store
    environ = {'tiddlyweb.store': store}
    tiddlers = list(control.get_tiddlers_from_recipe(recipe1, environ))
    assert len(tiddlers) == 1
    tiddlers = list(control.get_tiddlers_from_recipe(recipe2, environ))
    assert len(tiddlers) == 1
    tiddlers = list(control.get_tiddlers_from_recipe(recipe3, environ))
    assert len(tiddlers) == 2
Пример #13
0
def test_view():
    """
    test a request for viewing a single tiddler
    """
    #setup
    setup(store)
    tiddler = Tiddler('GettingStarted', 'jon_private')
    tiddler.text = 'the cat jumped over the moon'
    tiddler.tags = ['hello', 'world']
    store.put(tiddler)

    #run
    email = mailer.handle_email({
        'to': '*****@*****.**',
        'from': '*****@*****.**',
        'subject': 'GettingStarted',
        'body': ''
    })

    #verify
    assert email == {
        'to': '*****@*****.**',
        'from': '*****@*****.**',
        'subject': 'GettingStarted',
        'body': 'the cat jumped over the moon'
    }
Пример #14
0
def test_tiddler_full_create():
    """
    Confirm we can populate a tiddler at create time.
    """

    tiddler = Tiddler('test tiddler')
    tiddler.modifier = '*****@*****.**'
    tiddler.text = test_tiddler_text
    tiddler.tags = ['foo', 'bar']
    tiddler.bag = u'bagone'

    assert type(tiddler) == Tiddler, \
            'Tiddler returns a Tiddler'
    assert tiddler.title == 'test tiddler', \
            'tiddler title should be test tiddler, got %s' \
            % tiddler.title
    assert tiddler.modifier == '*****@*****.**', \
            'tiddler modifier should [email protected], got %s' \
            % tiddler.modifier
    assert tiddler.text == test_tiddler_text, \
            'tiddler content is correct'
    assert tiddler.tags == ['foo', 'bar'], \
            'tiddler tags are correct'
    assert tiddler.bag == 'bagone', \
            'tiddler has a bag of bagone'
    assert tiddler.revision is None, \
            'tiddler revision is None'
    assert tiddler.creator == '*****@*****.**'
def test_html_attribute_escape_with_bag():
    tiddler = Tiddler('escape "double" quotes in tiddler field values')
    tiddler.bag = 'foo "bar" baz'
    tiddler.modifier = 'Chris "sensei" Dent'
    tiddler.tags = ["foo", 'xxx "yyy" zzz']
    tiddler.fields["custom"] = u"""lorem 'ipsum' dolor "sit" amet"""
    tiddler.text = ''
    serializer = Serializer('tiddlywebwiki.serialization', environ)
    serializer.object = tiddler
    string = serializer.to_string()

    assert ('title="escape &quot;double&quot; quotes in tiddler field values"'
        in string)
    assert ('server.title="escape &quot;double&quot; quotes in tiddler '
        'field values"' in string)
    assert 'bag="foo &quot;bar&quot; baz"' in string
    assert 'server.workspace="bags/foo &quot;bar&quot; baz"' in string
    assert 'modifier="Chris &quot;sensei&quot; Dent"' in string
    assert 'creator="Chris &quot;sensei&quot; Dent"' in string
    assert 'tags="foo [[xxx &quot;yyy&quot; zzz]]"' in string
    assert '''custom="lorem 'ipsum' dolor &quot;sit&quot; amet"''' in string
    # single tiddler's browse link is that tiddler in its bag
    assert ('you may still <a href="/bags/foo%20%22bar%22%20baz/tiddlers/'
            'escape%20%22double%22%20quotes%20in%20tiddler%20field%20'
            'values">browse' in string)
Пример #16
0
def test_for_tags():
    tiddler1 = Tiddler('one', 'bagone')
    tiddler2 = Tiddler('two', 'bagtwo')
    tiddler1.tags = ['alpha', 'beta']
    tiddler2.tags = ['alpha', 'gamma']
    store.put(tiddler1)
    store.put(tiddler2)

    tags = get_indexed_tags(config, None)

    assert len(tags) == 3
    assert sorted(tags) == ['alpha', 'beta', 'gamma']

    tags = get_indexed_tags(config, 'bag:"bagone"')
    assert len(tags) == 2
    assert sorted(tags) == ['alpha', 'beta']
Пример #17
0
def test_simple():
    bag = Bag('MAGICUSER')
    store.put(bag)
    extractor = Extractor()
    userinfo = {'name': 'cdent', 'roles': ['HELLO']}

    more_info = extractor.extract_more_info(environ, userinfo)

    assert 'modifier' in more_info
    assert 'name' in more_info
    assert 'roles' in more_info
    assert 'tags' in more_info
    assert 'fields' in more_info
    assert 'modified' in more_info

    assert more_info['tags'] == []
    assert more_info['fields'] == {}
    assert more_info['roles'] == ['HELLO']

    tiddler = Tiddler('cdent', 'MAGICUSER')
    tiddler.fields['roles'] = "GOODBYE CHRISTMAS EASTER ADMIN"
    tiddler.tags = ['monkey', 'hello', 'barney']
    tiddler.fields['spaces'] = "one two three"
    store.put(tiddler)

    more_info = extractor.extract_more_info(environ, userinfo)

    assert more_info['tags'] == ['monkey', 'hello', 'barney']
    assert len(more_info['roles']) == 5
    for role in ['HELLO', 'GOODBYE', 'CHRISTMAS', 'EASTER', 'ADMIN']:
        assert role in more_info['roles']
    assert more_info['fields']['spaces'] == 'one two three'
Пример #18
0
def test_simple_magic():
    bag = Bag('MAGICUSER')
    store.put(bag)
    extractor = Extractor()
    userinfo = {'name': 'cdent', 'roles': ['HELLO']}

    more_info = extractor.extract_more_info(environ, userinfo)

    assert 'modifier' in more_info
    assert 'name' in more_info
    assert 'roles' in more_info
    assert 'tags' in more_info
    assert 'fields' in more_info
    assert 'modified' in more_info

    assert more_info['tags'] == []
    assert more_info['fields'] == {}
    assert more_info['roles'] == ['HELLO']

    tiddler = Tiddler('cdent', 'MAGICUSER')
    tiddler.fields['roles'] = "GOODBYE CHRISTMAS EASTER ADMIN"
    tiddler.tags = ['monkey', 'hello', 'barney']
    tiddler.fields['spaces'] = "one two three"
    store.put(tiddler)

    more_info = extractor.extract_more_info(environ, userinfo)

    assert sorted(more_info['tags']) == [u'barney', u'hello', u'monkey']
    assert len(more_info['roles']) == 5
    for role in ['HELLO', 'GOODBYE', 'CHRISTMAS', 'EASTER', 'ADMIN']:
        assert role in more_info['roles']
    assert more_info['fields']['spaces'] == 'one two three'
Пример #19
0
def test_tiddler_full_create():
    """
    Confirm we can populate a tiddler at create time.
    """

    tiddler = Tiddler('test tiddler')
    tiddler.modifier = '*****@*****.**'
    tiddler.text = test_tiddler_text
    tiddler.tags = ['foo', 'bar']
    tiddler.bag = u'bagone'

    assert type(tiddler) == Tiddler, \
            'Tiddler returns a Tiddler'
    assert tiddler.title == 'test tiddler', \
            'tiddler title should be test tiddler, got %s' \
            % tiddler.title
    assert tiddler.modifier == '*****@*****.**', \
            'tiddler modifier should [email protected], got %s' \
            % tiddler.modifier
    assert tiddler.text == test_tiddler_text, \
            'tiddler content is correct'
    assert tiddler.tags == ['foo', 'bar'], \
            'tiddler tags are correct'
    assert tiddler.bag == 'bagone', \
            'tiddler has a bag of bagone'
    assert tiddler.revision is None, \
            'tiddler revision is None'
    assert tiddler.creator == '*****@*****.**'
Пример #20
0
def test_revisions_deletions():
    tiddler = Tiddler("tone", "pone")
    tiddler.text = u"revision1"
    tiddler.tags = [u"1", u"2"]
    store.put(tiddler)
    tiddler.text = u"revision2"
    tiddler.tags = [u"3", u"4"]
    store.put(tiddler)

    revisions = store.list_tiddler_revisions(tiddler)

    assert len(revisions) == 2

    store.delete(tiddler)

    py.test.raises(NoTiddlerError, "store.list_tiddler_revisions(tiddler)")
def test_tiddler_put():
    store_root = os.path.join(TMPDIR, "test_store")

    bag = Bag("alpha")
    tiddler = Tiddler("Foo", bag.name)
    tiddler.text = "lorem ipsum\ndolor sit amet"
    tiddler.tags = ["foo", "bar"]

    STORE.put(bag)

    bag_dir = os.path.join(store_root, "bags", "alpha")
    assert os.path.isdir(bag_dir)
    assert os.path.isdir(os.path.join(bag_dir, "tiddlers"))

    STORE.put(tiddler)

    tiddler_file = os.path.join(bag_dir, "tiddlers", "Foo")
    assert os.path.isfile(tiddler_file)
    assert len(tiddler.revision) == 40
    with open(tiddler_file) as fh:
        contents = fh.read()
        assert "tags: foo bar" in contents
        assert tiddler.text in contents
    info = run("git", "log", "-n1", "--format=%ae %ce: %s", cwd=store_root)
    assert info.strip() == "[email protected] [email protected]: tiddler put"
Пример #22
0
def setup_testdata():
  testdata = [
    {"title":u"Whiskers","tags":["I wRiTe lIke A fIvE yEaR oLd","Kitty","pet","lolcat"],"fields":{"read":"no","badfield":"z"}},
    {"title":u"Fred","tags":["dog","pet"],"fields":{"badfield":"xt"}},
    {"title":u"Chris","tags":["cat","animal","bogof"],"fields":{"badfield":"ks"}},
    {"title":u"Martin","tags":["fish","lion"],"fields":{"badfield":"zs"}},
    {"title":u"Jerm","tags":["monkey"],"fields":{"badfield":"z"}},
    {"title":u"Paul","tags":["dinosaurs rule","tiger"],"fields":{"badfield":"z"}},
    {"title":u"Ben","tags":["cAt","i love my cat"],"fields":{"badfield":"z"}},
    {"title":u"Andrew","tags":["Pet","Animal","kitty","ToysRUs"],"fields":{"badfield":"z","foo":"yes"}}
  
  ]
  tiddlers = []
  for tid in testdata:
    tiddler = Tiddler(tid["title"],"tmp")
    tiddler.fields = tid["fields"]
    tiddler.tags = tid["tags"]
    tiddlers.append(tiddler)

  
  bag = Bag("tmp")
  try:
    store.delete(bag)#delete any existing one
  except NoBagError:
    pass
    
  store.put(bag)
  for tiddler in tiddlers:
    store.put(tiddler)
Пример #23
0
def test_revisions_deletions():
    tiddler = Tiddler(u'tone', u'pone')
    tiddler.text = u'revision1'
    tiddler.tags = [u'1', u'2']
    store.put(tiddler)
    tiddler.text = u'revision2'
    tiddler.tags = [u'3', u'4']
    store.put(tiddler)

    revisions = store.list_tiddler_revisions(tiddler)

    assert len(revisions) == 2

    store.delete(tiddler)

    py.test.raises(NoTiddlerError, 'store.list_tiddler_revisions(tiddler)')
Пример #24
0
def test_revision_get():
    bag = Bag('alpha')
    STORE.put(bag)

    # create a bunch of revisions
    tiddler_data = [
        { 'text': 'hello world', 'tags': ['foo'] },
        { 'text': 'lorem ipsum', 'tags': ['foo', 'bar'] },
        { 'text': 'lorem ipsum\ndolor sit amet', 'tags': [] }
    ]
    for tid in tiddler_data:
        tiddler = Tiddler('Foo', bag.name)
        tiddler.text = tid['text']
        tiddler.tags = tid['tags']
        STORE.put(tiddler)
        tid['revision'] = tiddler.revision

    tiddler = Tiddler('Foo', bag.name)
    tiddler.revision = None
    tiddler = STORE.get(tiddler)
    assert tiddler.text == 'lorem ipsum\ndolor sit amet'
    assert len(tiddler.tags) == 0

    for i, tid in enumerate(tiddler_data):
        tiddler = Tiddler('Foo', bag.name)
        tiddler.revision = tid['revision']
        tiddler = STORE.get(tiddler)
        assert tiddler.text == tid['text']
        assert len(tiddler.revision) == 10
        assert len(tiddler.tags) == len(tid['tags'])

    tiddler = Tiddler('Foo', bag.name)
    tiddler.revision = 'N/A'
    with raises(NoTiddlerError):
        STORE.get(tiddler)
Пример #25
0
def test_emoji_title():
    """
    We expect this to fail because we're using a) old mysql
    b) without the utf8mb4 encoding type.
    See: https://github.com/TiddlySpace/tiddlyspace/issues/1033

    The fix is to use mysql 5.5 or beyond.
    """
    # emoji smiley of some sort
    title = '\xF0\x9F\x98\x97'.decode('utf-8')
    store.put(Bag(title))

    tiddler = Tiddler(title, title)
    tiddler.text = u'some stuff and zomg %s' % title
    tiddler.tags = [title]
    tiddler.fields[title] = title
    store.put(tiddler)

    tiddler2 = store.get(Tiddler(title, title))

    assert tiddler2.title == title
    assert tiddler2.text == tiddler.text
    assert tiddler2.tags == tiddler.tags
    assert tiddler2.tags[0] == title
    assert tiddler2.fields[title] == tiddler.fields[title]
    assert tiddler2.fields[title] == title
Пример #26
0
def test_revisions_deletions():
    tiddler = Tiddler(u'tone', u'pone')
    tiddler.text = u'revision1'
    tiddler.tags = [u'1', u'2']
    store.put(tiddler)
    tiddler.text = u'revision2'
    tiddler.tags = [u'3', u'4']
    store.put(tiddler)

    revisions = store.list_tiddler_revisions(tiddler)

    assert len(revisions) == 2

    store.delete(tiddler)

    py.test.raises(NoTiddlerError, 'store.list_tiddler_revisions(tiddler)')
def test_cascade():
    bag = Bag(u'holder')
    store.put(bag)
    tiddler = Tiddler(u'one', u'holder')
    tiddler.text = u'text'
    tiddler.tags = [u'tag']
    tiddler.fields = {u'fieldone': u'valueone'}
    store.put(tiddler)

    def count_em(count, message):
        text_count = store.storage.session.query(sText).count()
        tag_count = store.storage.session.query(sTag).count()
        tiddler_count = store.storage.session.query(sTiddler).count()
        revision_count = store.storage.session.query(sRevision).count()
        field_count = store.storage.session.query(sField).count()
        store.storage.session.commit()

        message = ('%s, but got: text: %s, tag: %s, tiddler: %s, '
            'revision: %s, field: %s') % (message, text_count, tag_count,
                    tiddler_count, revision_count, field_count)

        assert (text_count == tag_count == tiddler_count
                == revision_count == field_count == count), message

    count_em(1, '1 row for the tiddler everywhere')

    store.delete(tiddler)

    count_em(0, '0 rows for the tiddler everywhere')
Пример #28
0
def handle_tiddler_div(bagname, tiddler_div, store):
    """
    Create a new Tiddler from a tiddler div, in beautifulsoup
    form.
    """
    new_tiddler = Tiddler(tiddler_div['title'], bag=bagname)

    try:
        new_tiddler.text = _html_decode(tiddler_div.find('pre').contents[0])
    except IndexError:
        # there are no contents in the tiddler
        new_tiddler.text = ''

    for attr, value in tiddler_div.attrs:
        data = tiddler_div.get(attr, None)
        if data and attr != 'tags':
            if attr in (['modifier', 'created', 'modified']):
                new_tiddler.__setattr__(attr, data)
            else:
                new_tiddler.fields[attr] = data
    new_tiddler.tags = _tag_string_to_list(tiddler_div.get('tags', ''))

    try:
        store.put(new_tiddler)
    except OSError, exc:
        # This tiddler has a name that we can't yet write to the
        # store. For now we just state the error and carry on.
        import sys
        print >> sys.stderr, 'Unable to write %s: %s' % (new_tiddler.title, exc)
Пример #29
0
  def process_email(self,fromAddress,toAddress,subject,body):
    title,tags = self.get_tags_and_title(subject)

    tiddler = Tiddler(title)
    tiddler.tags = tags
    tiddler.modifier = fromAddress
    tiddler.text =body
    return tiddler
Пример #30
0
def test_tags():
    tid = Tiddler("foo","bar")
    tid.tags = ['ab', 'cd','ef gh']
    env = {}
    out = macros.tags(WikiContext(tid,env))
    assert '</li>' in out
    assert 'ab</a></li>' in out
    assert 'cd</a></li>' in out
    assert '</ul>' in out
Пример #31
0
def test_at_tags():
    tiddler = Tiddler(u'tagat', u'fnd_public')
    tiddler.text = u'new stuff to not mess'
    tiddler.tags = [u'one', u'three', u'five', u'@cdent']
    store.put(tiddler)

    tiddlers = list(store.search(u'tag:@cdent'))

    assert len(tiddlers) == 1
def test_at_tags():
    tiddler = Tiddler("tagat", "fnd_public")
    tiddler.text = "new stuff to not mess"
    tiddler.tags = ["one", "three", "five", "@cdent"]
    store.put(tiddler)

    tiddlers = list(store.search(u"tag:@cdent"))

    assert len(tiddlers) == 1
Пример #33
0
def test_tags():
    tid = Tiddler("foo", "bar")
    tid.tags = ['ab', 'cd', 'ef gh']
    env = {}
    out = macros.tags(WikiContext(tid, env))
    assert '</li>' in out
    assert 'ab</a></li>' in out
    assert 'cd</a></li>' in out
    assert '</ul>' in out
Пример #34
0
def _manage_update_routes(environ, gym):
    store = environ['tiddlyweb.store']
    query = environ['tiddlyweb.query']
    existing_titles = query.get('title', [])
    count = len(existing_titles)
    index = 0
    delete = query.get('delete', [])
    lead_route = query.get(LEAD_FIELD, [])
    while index < count:
        title = existing_titles[index]
        tiddler = Tiddler(title, '%s_climbs' % gym)
        try:
            tiddler = store.get(tiddler)
            if title in delete:
                original_bag = tiddler.bag
                tiddler.bag = '%s_archive' % gym
                store.put(tiddler)
                tiddler.bag = original_bag
                store.delete(tiddler)
                index += 1
                continue
        except StoreError:
            pass
        changed = False
        for key in ROUTE_FIELDS:
            value = query.get(key, [''])[index]
            if tiddler.fields[key] != value:
                tiddler.fields[key] = value
                changed = True
        if LEAD_FIELD in tiddler.fields and title not in lead_route:
            del tiddler.fields[LEAD_FIELD]
            changed = True
        elif title in lead_route and LEAD_FIELD not in tiddler.fields:
            tiddler.fields[LEAD_FIELD] = '1'
            changed = True
        if changed:
            store.put(tiddler)
        index += 1
    
    try:
        title = query.get('title', [])[index]
    except IndexError:
        title = str(uuid4())
    tiddler = Tiddler(title, '%s_climbs' % gym)
    new_route = False
    if 'new_one' in lead_route:
        tiddler.fields[LEAD_FIELD] = '1'
    for key in ROUTE_FIELDS:
        value = query.get(key, [''])[index]
        if value == '':
            continue
        new_route = True
        tiddler.fields[key] = value
    tiddler.tags = ['route']
    if new_route:
        store.put(tiddler)
    raise HTTP303(server_base_url(environ) + '/manager/%s' % gym)
def test_at_tags():
    tiddler = Tiddler(u'tagat', u'fnd_public')
    tiddler.text = 'new stuff to not mess'
    tiddler.tags = ['one','three', 'five', '@cdent']
    store.put(tiddler)

    tiddlers = list(store.search(u'tag:@cdent'))

    assert len(tiddlers) == 1
Пример #36
0
def test_sidebar_global():
    store.put(Bag('cdent'))
    tiddler = Tiddler('%s' % uuid4(), 'cdent')
    tiddler.tags = ['climb']
    tiddler.text = 'sweet'
    store.put(tiddler)

    tiddlers = list(get_sidebar(environ))

    assert len(tiddlers) == 5
Пример #37
0
def test_paren_title():
    tiddler = Tiddler(u'(i)', u'fnd_public')
    tiddler.text = u'hi @onething hello'
    tiddler.tags = [u'one', u'three', u'five']
    store.put(tiddler)

    tiddlers = list(store.search(u'title:(i)'))

    assert len(tiddlers) == 1
    assert tiddlers[0].title == '(i)'
def test_search_quoted_phrase():
    bag = Bag('bag1')
    store.put(bag)
    tiddler1 = Tiddler('tiddler1', 'bag1')
    tiddler1.text = 'There are five monkeys in this house'
    tiddler1.tags = ['oh', 'hai', 'you', 'five chimps']
    store.put(tiddler1)

    tiddlers = list(search(config, '"five monkeys"'))
    assert len(tiddlers) == 1
def test_paren_title():
    tiddler = Tiddler(u'(i)', u'fnd_public')
    tiddler.text = 'hi @onething hello'
    tiddler.tags = ['one','three', 'five']
    store.put(tiddler)

    tiddlers = list(store.search(u'title:(i)'))

    assert len(tiddlers) == 1
    assert tiddlers[0].title == '(i)'
Пример #40
0
def test_validate_tiddler():
    tiddler = Tiddler('foobar', 'barney')
    tiddler.text = 'I am a dinosaur'
    tiddler.tags = ['tag1', 'tag2']

    py.test.raises(InvalidTiddlerError, 'validate_tiddler(tiddler)')

    tiddler.text = 'I am a dinosaur who likes to foobar'

    validate_tiddler(tiddler)

    assert 'FOOBAR' in tiddler.text
Пример #41
0
def test_simple_store():
    bag = Bag(u'bag1')
    store.put(bag)
    tiddler = Tiddler(u'tiddler1', u'bag1')
    tiddler.text = u'oh hello i chrisdent have nothing to say here you know'
    tiddler.tags = [u'apple', u'orange', u'pear']
    tiddler.fields[u'house'] = u'cottage'
    store.put(tiddler)

    retrieved = Tiddler(u'tiddler1', u'bag1')
    retrieved = store.get(retrieved)

    assert retrieved.text == tiddler.text
Пример #42
0
def create_tiddler(store, bag, numeral):
    tiddler = Tiddler('tiddler%s' % numeral)
    tiddler.bag = bag.name
    tiddler.text = u'i am tiddler %s' % numeral
    tags = [u'basic tag']
    if not numeral % 2:
        tags.append(u'tagtwo')
    if not numeral % 3:
        tags.append(u'tagthree')
    if not numeral % 4:
        tags.append(u'tagfour')
    tiddler.tags = tags
    if tiddler.title == 'tiddler8':
        tiddler.modified = '200805230303'
    store.put(tiddler)
Пример #43
0
def test_html_attribute_escape():
    tiddler = Tiddler(
        'escape "double" quotes & &amp; in <tiddler> field values')
    tiddler.bag = u'foo "bar" baz'
    tiddler.modifier = 'Chris "sensei" Dent'
    tiddler.tags = ["foo", 'xxx "yyy" zzz']
    tiddler.fields["custom"] = u"""lorem 'ipsum' dolor "sit" amet"""
    tiddler.text = ''
    serializer = Serializer('html')
    serializer.object = tiddler
    string = serializer.to_string()

    assert r'''title="escape &quot;double&quot; quotes &amp; &amp;amp; in &lt;tiddler&gt; field values"''' in string
    assert r'''modifier="Chris &quot;sensei&quot; Dent"''' in string
    assert r'''tags="foo [[xxx &quot;yyy&quot; zzz]]"''' in string
    assert r'''custom="lorem 'ipsum' dolor &quot;sit&quot; amet"''' in string
Пример #44
0
def test_multi_same_tag_tiddler():
    bag = Bag(u'holder')
    store.put(bag)
    tiddler = Tiddler(u'me', u'holder')
    tiddler.text = u'hi'
    tiddler.tags = [u'foo']
    store.put(tiddler)

    tiddler2 = Tiddler(u'me', u'holder')
    tiddler2 = store.get(tiddler2)
    tiddler2.tags.append(u'bar')
    tiddler2.tags.append(u'bar')
    store.put(tiddler2)

    tiddler3 = store.get(Tiddler(u'me', u'holder'))
    assert sorted(tiddler3.tags) == ['bar', 'foo']
Пример #45
0
def test_tiddler_fields_ignore_server():
    bag = Bag('bag0')
    store.put(bag)
    tiddler = Tiddler('server\nimpostor', bag='bag0')
    tiddler.tags = [u'foo\nbar']
    tiddler.fields = {
        u'field1': u'value1\nafterlinefeed',
        u'server.host': u'value1',
        u'server.type': u'value2'
    }
    store.put(tiddler)

    tiddler_second = Tiddler('server\nimpostor', bag='bag0')
    tiddler_second = store.get(tiddler_second)
    assert tiddler_second.fields['field1'] == 'value1\nafterlinefeed'
    assert 'server.host' not in tiddler_second.fields.keys()
    assert 'server.type' not in tiddler_second.fields.keys()
Пример #46
0
def test_put_get_tiddler():
    bag = Bag(u'test1')
    store.put(bag)

    for i in xrange(5):
        tiddler = Tiddler(u'tid1', u'test1')
        tiddler.text = u'hello'
        tiddler.tags = [u'five', u'six']
        tiddler.fields[u'radar'] = u'green'

        store.put(tiddler)

    read_tiddler = Tiddler('tid1', 'test1')
    read_tiddler = store.get(read_tiddler)

    assert read_tiddler.title == 'tid1'
    assert read_tiddler.fields['radar'] == 'green'
Пример #47
0
def setup_module(module):
    make_test_env(module)
    httplib2_intercept.install()
    wsgi_intercept.add_wsgi_intercept('thing.0.0.0.0', 8080, app_fn)

    make_fake_space(store, 'thing')
    tiddler = Tiddler('ServerSettings', 'thing_public')
    tiddler.text = 'htmltemplate: clean1\n'
    store.put(tiddler)

    tiddler = Tiddler('TestMe', 'thing_public')
    tiddler.text = '# Hi\n\n# one\n# two'
    tiddler.tags = ['alpha', 'beta', '12th monkey']
    store.put(tiddler)

    module.tiddler_modified = tiddler.modified

    module.http = httplib2.Http()
Пример #48
0
def _make_tiddler(environ, user):
    """
    Slice and dice the input to make it into a tiddler.
    """
    posted_data = environ['tiddlyweb.query']
    charset = posted_data.get('charset', ['UTF-8'])[0]
    url = posted_data.get('url', [''])[0]
    title = posted_data.get('title', [''])[0]
    title = unicode(title, charset, 'replace')
    snip = posted_data.get('snip', [''])[0]
    snip = unicode(snip, charset, 'replace')
    tiddler_title = title.replace('.', '_')
    tiddler_text_title = title.replace('|', ' ')
    tiddler = Tiddler(tiddler_title)
    tiddler.tags = [u'twoted']
    tiddler.modifier = user
    tiddler.text = '[[%s|%s]]\n\n%s' % (tiddler_text_title, url, snip)
    return tiddler
Пример #49
0
def test_emoji_title():
    # emoji smiley of some sort
    title = '\xF0\x9F\x98\x97'.decode('utf-8')
    store.put(Bag(title))

    tiddler = Tiddler(title, title)
    tiddler.text = u'some stuff and zomg %s' % title
    tiddler.tags = [title]
    tiddler.fields[title] = title
    store.put(tiddler)

    tiddler2 = store.get(Tiddler(title, title))

    assert tiddler2.title == title
    assert tiddler2.text == tiddler.text
    assert tiddler2.tags == tiddler.tags
    assert tiddler2.tags[0] == title
    assert tiddler2.fields[title] == tiddler.fields[title]
    assert tiddler2.fields[title] == title
Пример #50
0
def _get_tiddler_from_div(node):
    """
    Create a Tiddler from an HTML div element.
    """
    tiddler = Tiddler(node.getAttribute('title'))
    tiddler.text = _html_decode(_get_text(node.getElementsByTagName('pre')))

    for attr, value in node.attributes.items():
        data = value
        if data and attr != 'tags':
            if attr in (['creator', 'modifier', 'created', 'modified']):
                tiddler.__setattr__(attr, data)
            elif (attr not in ['title', 'changecount']
                  and not attr.startswith('server.')):
                tiddler.fields[attr] = data
    if not node.attributes.get('modified', None) and tiddler.created:
        tiddler.modified = tiddler.created
    tiddler.tags = string_to_tags_list(node.getAttribute('tags'))

    return tiddler
def test_html_attribute_escape_with_bag():
    tiddler = Tiddler('escape "double" quotes in tiddler field values')
    tiddler.bag = 'foo "bar" baz'
    tiddler.modifier = 'Chris "sensei" Dent'
    tiddler.tags = ["foo", 'xxx "yyy" zzz']
    tiddler.fields["custom"] = u"""lorem 'ipsum' dolor "sit" amet"""
    tiddler.text = ''
    serializer = Serializer('tiddlywebwiki.serialization', environ)
    serializer.object = tiddler
    string = serializer.to_string()

    assert r'''title="escape &quot;double&quot; quotes in tiddler field values"''' in string
    assert r'''server.title="escape &quot;double&quot; quotes in tiddler field values"''' in string
    assert r'''bag="foo &quot;bar&quot; baz"''' in string
    assert r'''server.workspace="bags/foo &quot;bar&quot; baz"''' in string
    assert r'''modifier="Chris &quot;sensei&quot; Dent"''' in string
    assert r'''creator="Chris &quot;sensei&quot; Dent"''' in string
    assert r'''tags="foo [[xxx &quot;yyy&quot; zzz]]"''' in string
    assert r'''custom="lorem 'ipsum' dolor &quot;sit&quot; amet"''' in string
    assert r'''you may still <a href="http://our_test_domain:8001/bags/foo%20%22bar%22%20baz/tiddlers">browse''' in string
Пример #52
0
def test_in_a_recipe():
    bag = Bag('hi')
    store.put(bag)
    tiddler = Tiddler('thing1', 'hi')
    tiddler.tags = ['research']
    store.put(tiddler)
    tiddler = Tiddler('thing2', 'hi')
    store.put(tiddler)

    recipe1 = Recipe('oi')
    recipe1.set_recipe([('hi', 'select=tag:research')])
    recipe1.store = store
    recipe2 = Recipe('boi')
    recipe2.set_recipe([('hi', '')])
    recipe2.store = store
    environ = {'tiddlyweb.store': store}
    tiddlers = list(control.get_tiddlers_from_recipe(recipe1, environ))
    assert len(tiddlers) == 1
    tiddlers = list(control.get_tiddlers_from_recipe(recipe2, environ))
    assert len(tiddlers) == 2
Пример #53
0
def test_put_and_get_dotted_file():
    """
    store and retrieve a file beginning with '.'
    """
    tiddlers0 = list(store.list_bag_tiddlers(Bag('bagone')))
    tiddler1 = Tiddler('.profile', 'bagone')
    tiddler1.text = 'alias ls ls -a'
    tiddler1.tags = ['foo']
    store.put(tiddler1)
    tiddlers1 = list(store.list_bag_tiddlers(Bag('bagone')))

    tiddler2 = Tiddler('.profile', 'bagone')
    tiddler2 = store.get(tiddler2)

    assert tiddler1.title == tiddler2.title
    assert tiddler1.text == tiddler2.text
    assert tiddler1.tags == tiddler2.tags
    assert tiddler2.text == 'alias ls ls -a'
    assert tiddler2.tags == ['foo']

    assert len(tiddlers1) == len(tiddlers0) + 1
Пример #54
0
def test_put_tiddler_recipe_with_filter():
    recipe = Recipe('recipe1')
    bag1 = Bag('bag1')
    bag2 = Bag('bag2')
    recipe.set_recipe([('bag1', ''), ('bag2', 'select=tag:foo')])
    store.put(bag1)
    store.put(bag2)
    store.put(recipe)

    tiddler_json_one = simplejson.dumps(dict(text='hello', tags=[]))
    tiddler_json_two = simplejson.dumps(dict(text='hello', tags=['foo']))

    http = httplib2.Http()
    response, content = http.request(
        'http://our_test_domain:8001/recipes/recipe1/tiddlers/tiddler_one',
        headers={'Content-Type': 'application/json'},
        method='PUT',
        body=tiddler_json_one)
    assert response['status'] == '204'
    assert 'bag1' in response['etag']

    response, content = http.request(
        'http://our_test_domain:8001/recipes/recipe1/tiddlers/tiddler_two',
        headers={'Content-Type': 'application/json'},
        method='PUT',
        body=tiddler_json_two)
    assert response['status'] == '204'
    assert 'bag2' in response['etag']

    tiddler = Tiddler('tiddler_three', 'bag2')
    tiddler.tags = ['foo']
    store.put(tiddler)

    response, content = http.request(
        'http://our_test_domain:8001/recipes/recipe1/tiddlers/tiddler_two',
        headers={'Content-Type': 'application/json'},
        method='PUT',
        body=tiddler_json_two)
    assert response['status'] == '204'
    assert 'bag2' in response['etag']
Пример #55
0
def test_tiddler():
    #setup
    wikklytextplugins.init({})
    store.put(Bag("bar"))
    store.put(Bag("foo"))

    recipe = Recipe("foo")
    recipe.set_recipe([['foo', ''], ['bar', '']])
    store.put(recipe)

    tid = Tiddler("jon robson", "bar")
    tid.text = "My name is Jon Robson"
    store.put(tid)
    tid = Tiddler("a tiddler in foo", "foo")
    tid.text = "rainbow [[title]]"
    store.put(tid)

    tid = Tiddler("foo", "bar")
    tid.tags = ['ab', 'cd', 'ef gh']
    #run and verify
    out = macros.tiddler(WikiContext(tid, config), WikiArgument("jon robson"))
    assert 'My name is Jon Robson' in out

    out = macros.tiddler(WikiContext(tid, config),
                         WikiArgument("a tiddler in foo"))
    assert out == ""  #we are viewing from bag bar not foo.

    tid.recipe = "foo"
    out = macros.tiddler(WikiContext(tid, config),
                         WikiArgument("a tiddler in foo"))
    assert "rainbow" in out  #we are viewing from recipe now
    assert "title</a>" in out

    #teardown
    store.delete(Bag("foo"))
    store.delete(Bag("bar"))
    store.delete(Recipe("foo"))
Пример #56
0
def test_open_graph():
    """
    Make sure the open graph stuff is present in the right places.
    """
    http = httplib2.Http()
    tiddler = Tiddler('Open Graph', 'cdent_public')
    tiddler.text = 'I am the text'
    tiddler.modifier = 'cdent'
    tiddler.tags = ['alpha', 'beta', 'cat dog']
    store.put(tiddler)

    response, content = http.request('http://cdent.0.0.0.0:8080/Open%20Graph')
    assert response['status'] == '200'
    assert '<html prefix="og: http://ogp.me/ns#' in content
    assert '<meta property="og:title" content="Open Graph" />' in content
    assert '<meta property="og:url" content="http://cdent.0.0.0.0:8080/Open%20Graph" />' in content
    assert '<meta property="og:image" content="http://cdent.0.0.0.0:8080/SiteIcon" />' in content
    assert '<meta property="article:tag" content="alpha" />' in content
    assert '<meta property="article:modified_time"' in content
    assert '<meta property="article:published_time"' in content
    assert '<meta property="article:author"' in content
    assert '<meta property="og:site_name" content="TiddlySpace" />' in content

    response, content = http.request(
        'http://cdent.0.0.0.0:8080/bags/cdent_public/tiddlers/Open%20Graph')
    assert response['status'] == '200'
    assert '<html>' in content
    assert '<html prefix>' not in content

    # clean1 frields gets ogp too
    tiddler = Tiddler('ServerSettings', 'cdent_public')
    tiddler.text = 'htmltemplate: clean1\n'
    store.put(tiddler)
    response, content = http.request('http://cdent.0.0.0.0:8080/Open%20Graph')
    assert response['status'] == '200'
    assert '<html prefix="og: http://ogp.me/ns#' in content
Пример #57
0
def test_make_a_bunch():
    for x in xrange(RANGE):
        bag_name = u'bag%s' % x
        recipe_name = u'recipe%s' % x
        tiddler_name = u'tiddler%s' % x
        recipe_list = [(bag_name, '')]
        tiddler_text = u'hey ho %s' % x
        field_name = u'field%s' % x
        field_name2 = u'fieldone%s' % x
        tag_name = u'tag%s' % x
        user_name = u'user%s' % x
        user_pass = u'pass%s' % x
        user_note = u'note%s' % x
        user_roles = [u'rolehold', u'role%s' % x]

        bag = Bag(bag_name)
        bag.policy.owner = u'owner%s' % x
        bag.policy.read = [u'hi%s' % x, u'andextra']
        bag.policy.manage = [u'R:hi%s' % x, u'andmanage']
        store.put(bag)
        recipe = Recipe(recipe_name)
        recipe.policy.owner = u'owner%s' % x
        recipe.policy.read = [u'hi%s' % x, u'andextra']
        recipe.policy.manage = [u'R:hi%s' % x, u'andmanage']
        recipe.set_recipe(recipe_list)
        store.put(recipe)
        tiddler = Tiddler(tiddler_name, bag_name)
        tiddler.text = tiddler_text
        tiddler.fields[field_name] = field_name
        tiddler.fields[field_name2] = field_name2
        tiddler.fields['server.host'] = 'gunky'
        tiddler.tags = [tag_name]
        store.put(tiddler)
        store.put(tiddler)
        user = User(user_name)
        user.set_password(user_pass)
        user.note = user_note
        for role in user_roles:
            user.add_role(role)
        store.put(user)

    bags = [bag.name for bag in store.list_bags()]
    recipes = [recipe.name for recipe in store.list_recipes()]
    users = [user.usersign for user in store.list_users()]
    assert len(bags) == RANGE
    assert len(recipes) == RANGE
    assert len(users) == RANGE
    for x in xrange(RANGE):
        bname = 'bag%s' % x
        rname = 'recipe%s' % x
        uname = 'user%s' % x
        assert bname in bags
        assert rname in recipes
        assert uname in users

    tiddler = store.get(Tiddler(u'tiddler0', u'bag0'))
    assert tiddler.fields[u'field0'] == u'field0'
    assert tiddler.fields[u'fieldone0'] == u'fieldone0'

    bag = Bag(u'bag0')
    bag = store.get(bag)
    tiddlers = []
    for tiddler in store.list_bag_tiddlers(bag):
        tiddlers.append(store.get(tiddler))
    assert len(tiddlers) == 1
    assert tiddlers[0].title == 'tiddler0'
    assert tiddlers[0].fields['field0'] == 'field0'
    assert tiddlers[0].fields['fieldone0'] == 'fieldone0'
    assert tiddlers[0].tags == ['tag0']
    assert sorted(bag.policy.read) == ['andextra', 'hi0']
    assert sorted(bag.policy.manage) == ['R:hi0', u'andmanage']
    assert bag.policy.owner == 'owner0'

    user = User(u'user1')
    user = store.get(user)
    assert user.usersign == 'user1'
    assert user.check_password('pass1')
    assert user.note == 'note1'
    assert 'role1' in user.list_roles()
    assert 'rolehold' in user.list_roles()

    recipe = Recipe(u'recipe2')
    recipe = store.get(recipe)
    assert recipe.name == 'recipe2'
    bags = [bag_name for bag_name, filter in recipe.get_recipe()]
    assert len(bags) == 1
    assert 'bag2' in bags
    assert sorted(recipe.policy.read) == ['andextra', 'hi2']
    assert sorted(recipe.policy.manage) == ['R:hi2', u'andmanage']
    assert recipe.policy.owner == 'owner2'

    recipe.policy.manage = [u'andmanage']
    store.put(recipe)

    recipe = Recipe(u'recipe2')
    recipe = store.get(recipe)
    assert recipe.policy.manage == [u'andmanage']

    # delete the above things
    store.delete(bag)
    py.test.raises(NoBagError, 'store.delete(bag)')
    py.test.raises(NoBagError, 'store.get(bag)')
    store.delete(recipe)
    py.test.raises(NoRecipeError, 'store.delete(recipe)')
    py.test.raises(NoRecipeError, 'store.get(recipe)')
    store.delete(user)
    py.test.raises(NoUserError, 'store.delete(user)')
    py.test.raises(NoUserError, 'store.get(user)')

    tiddler = Tiddler(u'tiddler9', u'bag9')
    store.get(tiddler)
    assert tiddler.bag == 'bag9'
    assert tiddler.text == 'hey ho 9'
    assert tiddler.tags == ['tag9']
    assert tiddler.fields['field9'] == 'field9'
    assert 'server.host' not in tiddler.fields
    store.delete(tiddler)
    py.test.raises(NoTiddlerError, 'store.delete(tiddler)')
    py.test.raises(NoTiddlerError, 'store.get(tiddler)')
Пример #58
0
def edit(environ, start_response):
    """
    XXX: Lots of duplication from editor.
    """
    store = environ['tiddlyweb.store']
    usersign = environ['tiddlyweb.usersign']
    query = environ['tiddlyweb.query']

    try:
        bag_name = query['bag'][0]
        title = query['title'][0]
        text = query['text'][0]
        tiddler_type = query['type'][0]
        tags = query['tags'][0]
        etag = query['etag'][0]
    except KeyError as exc:
        raise HTTP400('bad query: incomplete form, %s' % exc)

    tags = [tag.strip() for tag in tags.split(',')]

    if not (bag_name and title):
        raise HTTP400('bad query: bag and title required')

    bag = Bag(bag_name)
    try:
        bag = store.get(bag)
    except NoBagError:
        raise HTTP404('that tank does not exist')

    tiddler = Tiddler(title, bag_name)
    tiddler_new = False
    conflict = False
    try:
        tiddler = store.get(tiddler)
        existing_etag = tiddler_etag(environ, tiddler).replace('"',
                '').split(':', 1)[0]
        if etag != existing_etag:
            conflict = True
    except NoTiddlerError:
        tiddler.type = tiddler_type
        tiddler_new = True

    if tiddler_new:
        bag.policy.allows(usersign, 'create')
    else:
        bag.policy.allows(usersign, 'write')

    tiddler.text = text
    tiddler.tags = tags
    tiddler.modifier = usersign['name']
    tiddler.modified = current_timestring()

    if conflict:
        return editor(environ, start_response, tiddler,
                message='conflict')

    try:
        validate_tiddler(tiddler, environ)
    except InvalidTiddlerError as exc:
        return editor(environ, start_response, tiddler,
                message='Tiddler content is invalid: %s' % exc)

    store.put(tiddler)

    redirect_uri = tank_page_uri(environ, tiddler.bag, tiddler.title)

    start_response('303 See Other', [
        ('Location', str(redirect_uri))])

    return []
Пример #59
0
        'host': 'our_test_domain',
        'port': '8001',
        }

def initialize_app():
    app = load_app()
    def app_fn():
        return app

    httplib2_intercept.install()
    wsgi_intercept.add_wsgi_intercept('our_test_domain', 8001, app_fn)

TiddlerOne = Tiddler('TiddlerOne')
TiddlerOne.modifier = 'AuthorOne'
TiddlerOne.text = u'c tiddler one content'
TiddlerOne.tags = ['tagone', 'tagtwo']

TiddlerTwo = Tiddler('TiddlerTwo')
TiddlerTwo.modifier = u'AuthorTwo'
TiddlerTwo.text = u'b tiddler two content'

TiddlerThree = Tiddler('TiddlerThree')
TiddlerThree.modifier = u'AuthorThree'
TiddlerThree.text = u'a tiddler three content'
TiddlerThree.tags = [u'tagone', u'tagthree']

tiddlers = [TiddlerOne, TiddlerTwo, TiddlerThree]

bagone = Bag(name='bagone')
container = Tiddlers()
container.add(tiddlers[0])