Changeset a6150a6ff96505da2602e2fff0d55e90e6acc784
- 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:
-
Legend:
- Unmodified
- Added
- Removed
-
|
rcf577ee
|
ra6150a6
|
|
| 36 | 36 | from creoleparser.dialects import create_dialect, creole10_base |
| 37 | 37 | |
| 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 | | |
| 48 | 38 | 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)) |
| 50 | 40 | |
| 51 | 41 | def wiki_links_class_func(page_name): |
| 52 | 42 | page_name = page_name.partition('#')[0].partition('?')[0] |
| 53 | | page_name = _handle_link_abbreviations(page_name) |
| 54 | 43 | |
| 55 | 44 | try: |
| … |
… |
|
| 68 | 57 | c = create_dialect(creole10_base, |
| 69 | 58 | no_wiki_monospace=True, |
| 70 | | wiki_links_base_url='/', |
| | 59 | wiki_links_base_url='/wiki/', |
| 71 | 60 | wiki_links_path_func=wiki_links_path_func, |
| 72 | 61 | wiki_links_class_func=wiki_links_class_func, |
-
|
rcdf0469
|
ra6150a6
|
|
| | 1 | # Don't index "special" pages |
| 1 | 2 | User-agent: * |
| 2 | | Disallow: /special/ |
| | 3 | Disallow: /+* |
-
|
rcdf0469
|
ra6150a6
|
|
| 8 | 8 | url(r'^$', 'django.views.generic.simple.redirect_to', {'url': settings.DUCTUS_FRONT_PAGE, 'permanent': False}), |
| 9 | 9 | url(r'^admin/', include(admin.site.urls)), |
| | 10 | url(r'^new/(.*)', 'ductus.wiki.views.creation_view'), |
| 10 | 11 | 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'), |
| 17 | 15 | url(r'^robots\.txt$', 'django.views.generic.simple.direct_to_template', {'template': 'robots.txt', 'mimetype': 'text/plain'}), |
| 18 | 16 | url(r'^login$', 'django.contrib.auth.views.login'), |
-
|
rbadd9c6
|
ra6150a6
|
|
| 15 | 15 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 16 | 16 | |
| 17 | | from ductus.wiki.decorators import register_wiki_permission |
| | 17 | from ductus.wiki import register_wiki_permission |
| 18 | 18 | |
| 19 | | @register_wiki_permission('user') |
| | 19 | @register_wiki_permission(u'~') |
| 20 | 20 | def user_permission_func(user, pagename): |
| 21 | 21 | return (user.is_authenticated() |
| 22 | | and pagename.split('/', 2)[1] == user.username) |
| | 22 | and pagename[1:].partition('/')[0] == user.username) |
| 23 | 23 | |
| 24 | 24 | from django.contrib.auth.models import User |
| 25 | 25 | |
| 26 | 26 | # fix User.get_absolute_url() to point to the right place |
| 27 | | User.get_absolute_url = lambda self: '/user/%s' % self.username |
| | 27 | User.get_absolute_url = lambda self: u'/wiki/~%s' % self.username |
-
|
r78edbca
|
ra6150a6
|
|
| 46 | 46 | |
| 47 | 47 | def user_has_edit_permission(user, pagename): |
| 48 | | if '/' not in pagename: |
| | 48 | if not pagename: |
| 49 | 49 | return False |
| 50 | 50 | |
| 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 |
| 54 | 66 | |
| 55 | 67 | def user_has_unlink_permission(user, pagename): |
| … |
… |
|
| 58 | 70 | registered_views = {} |
| 59 | 71 | registered_creation_views = {} |
| 60 | | wiki_permissions = {} |
| | 72 | __wiki_permissions = {} |
| 61 | 73 | |
| 62 | | wiki_permissions['wiki'] = lambda user, pagename: True |
| | 74 | def register_wiki_permission(prefix): |
| | 75 | def _register_wiki_permission(func): |
| | 76 | __wiki_permissions[prefix] = func |
| | 77 | return func |
| | 78 | return _register_wiki_permission |
-
|
ra52849d
|
ra6150a6
|
|
| 17 | 17 | from functools import wraps |
| 18 | 18 | |
| 19 | | from ductus.wiki import registered_views, registered_creation_views, wiki_permissions |
| | 19 | from ductus.wiki import registered_views, registered_creation_views |
| 20 | 20 | |
| 21 | 21 | def register_view(model, label=None, requires=(lambda d: d.resource)): |
| … |
… |
|
| 47 | 47 | return response |
| 48 | 48 | 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 |
-
|
r78edbca
|
ra6150a6
|
|
| 28 | 28 | |
| 29 | 29 | 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)) |
| 31 | 31 | |
| 32 | 32 | def get_latest_revision(self): |
-
|
r78edbca
|
ra6150a6
|
|
| 198 | 198 | # See if DUCTUS_WIKI_REMOTE has the page |
| 199 | 199 | 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))) |
| 201 | 201 | remote_urn = json.loads(urlopen(remote_url).read(1000))["urn"] |
| 202 | 202 | # we never actually save this WikiPage or WikiRevision to the database |