Changeset a6150a6ff96505da2602e2fff0d55e90e6acc784

Show
Ignore:
Timestamp:
05/31/10 02:18:52 (3 months ago)
Author:
Jim Garrison <jim@…>
Children:
036de45e453fd3047a785de991d753fd98887461
Parents:
a9f66c816731c3fb616fd1be34a3e7e3b5ca01dd
git-committer:
Jim Garrison <jim@jimgarrison.org> / 2010-05-30T23:18:52Z-0700
Message:

reworked url scheme. got rid of duality between textwiki names and urls

Location:
ductus
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • ductus/modules/textwiki/templatetags/textwiki.py

    rcf577ee ra6150a6  
    3636    from creoleparser.dialects import create_dialect, creole10_base 
    3737 
    38     def _handle_link_abbreviations(page_name): 
    39         if page_name.startswith((u'urn/', u'special/')): 
    40             pass 
    41         elif page_name.startswith('~'): 
    42             page_name = u'user/%s' % page_name[1:] 
    43         else: 
    44             # normal wiki page 
    45             page_name = u'wiki/%s' % page_name 
    46         return page_name 
    47  
    4838    def wiki_links_path_func(page_name): 
    49         return iri_to_uri(urlquote(_handle_link_abbreviations(page_name))) 
     39        return iri_to_uri(urlquote(page_name)) 
    5040 
    5141    def wiki_links_class_func(page_name): 
    5242        page_name = page_name.partition('#')[0].partition('?')[0] 
    53         page_name = _handle_link_abbreviations(page_name) 
    5443 
    5544        try: 
     
    6857    c = create_dialect(creole10_base, 
    6958                       no_wiki_monospace=True, 
    70                        wiki_links_base_url='/', 
     59                       wiki_links_base_url='/wiki/', 
    7160                       wiki_links_path_func=wiki_links_path_func, 
    7261                       wiki_links_class_func=wiki_links_class_func, 
  • ductus/templates/robots.txt

    rcdf0469 ra6150a6  
     1# Don't index "special" pages 
    12User-agent: * 
    2 Disallow: /special/ 
     3Disallow: /+* 
  • ductus/urls.py

    rcdf0469 ra6150a6  
    88    url(r'^$', 'django.views.generic.simple.redirect_to', {'url': settings.DUCTUS_FRONT_PAGE, 'permanent': False}), 
    99    url(r'^admin/', include(admin.site.urls)), 
     10    url(r'^new/(.*)', 'ductus.wiki.views.creation_view'), 
    1011    url(r'^urn/(?P<hash_type>[-_\w]+)/(?P<hash_digest>[-_\w]+)$', 'ductus.wiki.views.view_urn'), 
    11     url(r'^(wiki/.+)$', 'ductus.wiki.views.view_wikipage'), 
    12     url(r'^new/(.*)', 'ductus.wiki.views.creation_view'), 
    13     url(r'^(user/.*/.+)$', 'ductus.wiki.views.view_wikipage'), 
    14     url(r'^user/(.*)$', 'ductus.user.views.view_userpage'), 
    15 #    url(r'^group/', include('ductus.group.urls')), 
    16     url(r'^special/(.*)', 'ductus.special.views.view_special_page'), 
     12    url(r'^wiki/\+(.*)', 'ductus.special.views.view_special_page'), 
     13    url(r'^wiki/~(\w+)$', 'ductus.user.views.view_userpage'), 
     14    url(r'^wiki/(.+)$', 'ductus.wiki.views.view_wikipage'), 
    1715    url(r'^robots\.txt$', 'django.views.generic.simple.direct_to_template', {'template': 'robots.txt', 'mimetype': 'text/plain'}), 
    1816    url(r'^login$', 'django.contrib.auth.views.login'), 
  • ductus/user/__init__.py

    rbadd9c6 ra6150a6  
    1515# along with this program.  If not, see <http://www.gnu.org/licenses/>. 
    1616 
    17 from ductus.wiki.decorators import register_wiki_permission 
     17from ductus.wiki import register_wiki_permission 
    1818 
    19 @register_wiki_permission('user') 
     19@register_wiki_permission(u'~') 
    2020def user_permission_func(user, pagename): 
    2121    return (user.is_authenticated() 
    22             and pagename.split('/', 2)[1] == user.username) 
     22            and pagename[1:].partition('/')[0] == user.username) 
    2323 
    2424from django.contrib.auth.models import User 
    2525 
    2626# fix User.get_absolute_url() to point to the right place 
    27 User.get_absolute_url = lambda self: '/user/%s' % self.username 
     27User.get_absolute_url = lambda self: u'/wiki/~%s' % self.username 
  • ductus/wiki/__init__.py

    r78edbca ra6150a6  
    4646 
    4747def user_has_edit_permission(user, pagename): 
    48     if '/' not in pagename: 
     48    if not pagename: 
    4949        return False 
    5050 
    51     permission_func = wiki_permissions.get(pagename.partition('/')[0], 
    52                                            lambda user, pagename: False) 
    53     return permission_func(user, pagename) 
     51    if pagename[-1] == u'/': 
     52        # pages shouldn't end with a slash 
     53        return False 
     54 
     55    prefix = pagename[0] 
     56    if prefix == u'+': 
     57        # can't edit (or create) special pages 
     58        return False 
     59 
     60    if prefix in (u'~',): 
     61        permission_func = __wiki_permissions[prefix] 
     62        return permission_func(user, pagename) 
     63 
     64    # regular wiki page; anyone can edit (for now) 
     65    return True 
    5466 
    5567def user_has_unlink_permission(user, pagename): 
     
    5870registered_views = {} 
    5971registered_creation_views = {} 
    60 wiki_permissions = {} 
     72__wiki_permissions = {} 
    6173 
    62 wiki_permissions['wiki'] = lambda user, pagename: True 
     74def register_wiki_permission(prefix): 
     75    def _register_wiki_permission(func): 
     76        __wiki_permissions[prefix] = func 
     77        return func 
     78    return _register_wiki_permission 
  • ductus/wiki/decorators.py

    ra52849d ra6150a6  
    1717from functools import wraps 
    1818 
    19 from ductus.wiki import registered_views, registered_creation_views, wiki_permissions 
     19from ductus.wiki import registered_views, registered_creation_views 
    2020 
    2121def register_view(model, label=None, requires=(lambda d: d.resource)): 
     
    4747        return response 
    4848    return wraps(func)(new_func) 
    49  
    50 def register_wiki_permission(prefix): 
    51     def _register_wiki_permission(func): 
    52         wiki_permissions[prefix] = func 
    53         return func 
    54     return _register_wiki_permission 
  • ductus/wiki/models.py

    r78edbca ra6150a6  
    2828 
    2929    def get_absolute_url(self): 
    30         return u'/%s' % iri_to_uri(urlquote(self.name)) 
     30        return u'/wiki/%s' % iri_to_uri(urlquote(self.name)) 
    3131 
    3232    def get_latest_revision(self): 
  • ductus/wiki/views.py

    r78edbca ra6150a6  
    198198        # See if DUCTUS_WIKI_REMOTE has the page 
    199199        try: 
    200             remote_url = "%s/%s?view=urn" % (settings.DUCTUS_WIKI_REMOTE, iri_to_uri(urlquote(pagename))) 
     200            remote_url = "%s%s?view=urn" % (settings.DUCTUS_WIKI_REMOTE, iri_to_uri(urlquote(pagename))) 
    201201            remote_urn = json.loads(urlopen(remote_url).read(1000))["urn"] 
    202202            # we never actually save this WikiPage or WikiRevision to the database