TiddlyWiki.org

Changeset 4957

Show
Ignore:
Timestamp:
15/05/08 15:14:37 (4 months ago)
Author:
cdent
Message:

tiddlyweb - enable GET of a specific revision of a tiddler.

Also: include the revision value in serialized tiddler output for
HTML, wiki and JSON.

next: gets lists of revisions off the web.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/test/test_serialize_recipe.py

    r4002 r4957  
    3838    assert string.startswith('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'), 'looks like we got an empty.html doc' 
    3939    assert 'c tiddler one' in string 
    40     assert '<div title="TiddlerOne" modifier="AuthorOne"' in string 
     40    assert '<div title="TiddlerOne" revision="None" modifier="AuthorOne"' in string 
    4141 
    4242def test_simple_recipe(): 
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/test/test_web_tiddler.py

    r4955 r4957  
    4444    assert 'i am tiddler 8' in content, 'tiddler should be correct content, is %s' % content 
    4545 
     46def test_get_tiddler_revision(): 
     47    http = httplib2.Http() 
     48    response, content = http.request('http://our_test_domain:8001/bags/bag0/tiddlers/tiddler8/revisions/1', 
     49            method='GET') 
     50 
     51    assert response['status'] == '200', 'response status should be 200' 
     52    assert 'i am tiddler 8' in content, 'tiddler should be correct content, is %s' % content 
     53    assert 'revision="1"' in content 
     54 
    4655def test_get_missing_tiddler(): 
    4756    http = httplib2.Http() 
    4857    response, content = http.request('http://our_test_domain:8001/bags/bag0/tiddlers/tiddler27', 
     58            method='GET') 
     59 
     60    assert response['status'] == '404', 'response status should be 404' 
     61 
     62def test_get_missing_tiddler_revision(): 
     63    http = httplib2.Http() 
     64    response, content = http.request('http://our_test_domain:8001/bags/bag0/tiddlers/tiddler27/revisions/99', 
    4965            method='GET') 
    5066 
     
    5975    assert response['content-type'] == 'text/html; charset=UTF-8', 'response content-type should be text/html; chareset=UTF-8 is %s' % response['content-type'] 
    6076    assert 'i am tiddler 8' in content, 'tiddler should be correct content, is %s' % content 
     77 
     78def test_get_tiddler_revision_wiki(): 
     79    http = httplib2.Http() 
     80    response, content = http.request('http://our_test_domain:8001/bags/bag0/tiddlers/tiddler8/revisions/1.wiki', 
     81            method='GET') 
     82 
     83    assert response['status'] == '200', 'response status should be 200 is %s' % response['status'] 
     84    assert response['content-type'] == 'text/html; charset=UTF-8', 'response content-type should be text/html; chareset=UTF-8 is %s' % response['content-type'] 
     85    assert 'i am tiddler 8' in content, 'tiddler should be correct content, is %s' % content 
     86    assert 'revision="1"' in content 
    6187 
    6288def test_put_tiddler_txt(): 
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/tiddlyweb/serializers/html.py

    r4053 r4957  
    7070 
    7171def tiddler_as(tiddler): 
    72     return """<div title="%s" modifier="%s" modified="%s" created="%s" tags="%s"> 
     72    return """<div title="%s" revision="%s" modifier="%s" modified="%s" created="%s" tags="%s"> 
    7373<pre>%s</pre> 
    7474</div> 
    75 """ % (tiddler.title, tiddler.modifier, tiddler.modified, tiddler.created, tags_as(tiddler.tags), tiddler.text) 
     75""" % (tiddler.title, tiddler.revision, tiddler.modifier, tiddler.modified, tiddler.created, tags_as(tiddler.tags), tiddler.text) 
    7676 
    7777def as_tiddler(tiddler, input): 
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/tiddlyweb/serializers/json.py

    r4131 r4957  
    4343def tiddler_as(tiddler): 
    4444    tiddler_dict = {} 
    45     for key in ['title', 'modifier', 'created', 'modified', 'tags', 'text', 'bag']: 
     45    for key in ['title', 'revision', 'modifier', 'created', 'modified', 'tags', 'text', 'bag']: 
    4646        tiddler_dict[key] = getattr(tiddler, key, None) 
    4747 
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/tiddlyweb/serializers/wiki.py

    r4129 r4957  
    6868        host = '' 
    6969 
    70     return """<div title="%s" modifier="%s" server.workspace="%s" server.type="tiddlyweb" server.host="%s" server.bag="%s" modified="%s" created="%s" tags="%s"> 
     70    return """<div title="%s" revision="%s" modifier="%s" server.workspace="%s" server.type="tiddlyweb" server.host="%s" server.bag="%s" modified="%s" created="%s" tags="%s"> 
    7171<pre>%s</pre> 
    7272</div> 
    73 """ % (tiddler.title, tiddler.modifier, recipe_name, \ 
     73""" % (tiddler.title, tiddler.revision, tiddler.modifier, recipe_name, \ 
    7474        host, tiddler.bag, tiddler.modified, tiddler.created, \ 
    7575        tags_as(tiddler.tags), tiddler.text) 
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/tiddlyweb/web/tiddler.py

    r4132 r4957  
    88from tiddlyweb import web 
    99 
     10# XXX duplication with get_by_recipe, refactor 
    1011def _tiddler_from_path(environ): 
    1112    bag_name = environ['wsgiorg.routing_args'][1]['bag_name'] 
    1213    tiddler_name = environ['wsgiorg.routing_args'][1]['tiddler_name'] 
    13     tiddler_name = web.handle_extension(environ, tiddler_name) 
     14    revision = environ['wsgiorg.routing_args'][1].get('revision', None) 
     15    if revision: 
     16        revision = web.handle_extension(environ, revision) 
     17    else: 
     18        tiddler_name = web.handle_extension(environ, tiddler_name) 
    1419 
    1520    tiddler = Tiddler(tiddler_name) 
     21    if revision: 
     22        try: 
     23            tiddler.revision = int(revision) 
     24        except ValueError, e: 
     25            raise HTTP404, '%s not a revision of %s: %s' % (revision, tiddler_name, e) 
    1626    tiddler.bag = bag_name 
    1727 
     
    2131    tiddler_name = environ['wsgiorg.routing_args'][1]['tiddler_name'] 
    2232    recipe_name = environ['wsgiorg.routing_args'][1]['recipe_name'] 
    23     tiddler_name = web.handle_extension(environ, tiddler_name) 
     33    revision = environ['wsgiorg.routing_args'][1].get('revision', None) 
     34    if revision: 
     35        revision = web.handle_extension(environ, revision) 
     36    else: 
     37        tiddler_name = web.handle_extension(environ, tiddler_name) 
    2438 
    2539    tiddler = Tiddler(tiddler_name) 
     40    if revision: 
     41        try: 
     42            tiddler.revision = int(revision) 
     43        except ValueError, e: 
     44            raise HTTP404, '%s not a revision of %s: %s' % (revision, tiddler_name, e) 
     45 
    2646    recipe = Recipe(recipe_name) 
    2747    store = environ['tiddlyweb.store'] 
  • Trunk/contributors/ChrisDent/experimental/TiddlyWeb/urls.map

    r4132 r4957  
    5353#   application/json: a JSON dict representing the tiddler 
    5454#   text/x-tiddlywiki: this tiddler wrapped up as a TiddlyWiki 
    55 # Does not yet support PUT 
    5655/recipes/{recipe_name:segment}/tiddlers/{tiddler_name:segment} 
    5756    GET tiddlyweb.web.tiddler:get_by_recipe 
    5857    PUT tiddlyweb.web.tiddler:put_by_recipe 
     58 
     59/recipes/{recipe_name:segment}/tiddlers/{tiddler_name:segment}/revisions/{revision:segment} 
     60    GET tiddlyweb.web.tiddler:get_by_recipe 
    5961 
    6062# list of bags 
     
    106108    PUT tiddlyweb.web.tiddler:put 
    107109 
     110/bags/{bag_name:segment}/tiddlers/{tiddler_name:segment}/revisions/{revision:segment} 
     111    GET tiddlyweb.web.tiddler:get 
     112