url(r'^gallery/(?P<directory>[^/]+)/$',
'gallery', name="wiki_gallery"),
- url(r'^history/(?P<slug>[^/]+)/(?:(?P<chunk>[^/]+)/)?$',
+ url(r'^history/(?P<chunk_id>\d+)/$',
'history', name="wiki_history"),
- url(r'^rev/(?P<slug>[^/]+)/(?:(?P<chunk>[^/]+)/)?$',
+ url(r'^rev/(?P<chunk_id>\d+)/$',
'revision', name="wiki_revision"),
- url(r'^text/(?P<slug>[^/]+)/(?:(?P<chunk>[^/]+)/)?$',
+ url(r'^text/(?P<chunk_id>\d+)/$',
'text', name="wiki_text"),
- url(r'^revert/(?P<slug>[^/]+)/(?:(?P<chunk>[^/]+)/)?$',
+ url(r'^revert/(?P<chunk_id>\d+)/$',
'revert', name='wiki_revert'),
- url(r'^diff/(?P<slug>[^/]+)/(?:(?P<chunk>[^/]+)/)?$', 'diff', name="wiki_diff"),
- url(r'^pubmark/(?P<slug>[^/]+)/(?:(?P<chunk>[^/]+)/)?$', 'pubmark', name="wiki_pubmark"),
+ url(r'^diff/(?P<chunk_id>\d+)/$', 'diff', name="wiki_diff"),
+ url(r'^pubmark/(?P<chunk_id>\d+)/$', 'pubmark', name="wiki_pubmark"),
url(r'^themes$', 'themes', name="themes"),
)
from django.utils.translation import ugettext as _
from django.views.decorators.http import require_POST, require_GET
from django.views.generic.simple import direct_to_template
+from django.shortcuts import get_object_or_404
from catalogue.models import Book, Chunk
import nice_diff
@never_cache
@decorator_from_middleware(GZipMiddleware)
-def text(request, slug, chunk=None):
- try:
- doc = Chunk.get(slug, chunk)
- except (Chunk.MultipleObjectsReturned, Chunk.DoesNotExist):
- raise Http404
+def text(request, chunk_id):
+ doc = get_object_or_404(Chunk, pk=chunk_id)
if request.method == 'POST':
form = forms.DocumentTextSaveForm(request.POST, prefix="textsave")
@never_cache
@require_POST
-def revert(request, slug, chunk=None):
+def revert(request, chunk_id):
form = forms.DocumentTextRevertForm(request.POST, prefix="textrevert")
if form.is_valid():
- try:
- doc = Chunk.get(slug, chunk)
- except (Chunk.MultipleObjectsReturned, Chunk.DoesNotExist):
- raise Http404
+ doc = get_object_or_404(Chunk, pk=chunk_id)
revision = form.cleaned_data['revision']
author = None
before = doc.revision()
- logger.info("Reverting %s to %s", slug, revision)
+ logger.info("Reverting %s to %s", chunk_id, revision)
doc.at_revision(revision).revert(author=author, description=comment)
return JSONResponse({
@never_cache
-def diff(request, slug, chunk=None):
+def diff(request, chunk_id):
revA = int(request.GET.get('from', 0))
revB = int(request.GET.get('to', 0))
if revB == 0:
revB = None
- try:
- doc = Chunk.get(slug, chunk)
- except (Chunk.MultipleObjectsReturned, Chunk.DoesNotExist):
- raise Http404
+ doc = get_object_or_404(Chunk, pk=chunk_id)
# allow diff from the beginning
if revA:
docA = doc.at_revision(revA).materialize()
@never_cache
-def revision(request, slug, chunk=None):
- try:
- doc = Chunk.get(slug, chunk)
- except (Chunk.MultipleObjectsReturned, Chunk.DoesNotExist):
- raise Http404
+def revision(request, chunk_id):
+ doc = get_object_or_404(Chunk, pk=chunk_id)
return http.HttpResponse(str(doc.revision()))
@never_cache
-def history(request, slug, chunk=None):
+def history(request, chunk_id):
# TODO: pagination
- try:
- doc = Chunk.get(slug, chunk)
- except (Chunk.MultipleObjectsReturned, Chunk.DoesNotExist):
- raise Http404
+ doc = get_object_or_404(Chunk, pk=chunk_id)
changes = []
for change in doc.history().order_by('-created_at'):
@require_POST
@ajax_require_permission('catalogue.can_pubmark')
-def pubmark(request, slug, chunk=None):
+def pubmark(request, chunk_id):
form = forms.DocumentPubmarkForm(request.POST, prefix="pubmark")
if form.is_valid():
- try:
- doc = Chunk.get(slug, chunk)
- except (Chunk.MultipleObjectsReturned, Chunk.DoesNotExist):
- raise Http404
+ doc = get_object_or_404(Chunk, pk=chunk_id)
revision = form.cleaned_data['revision']
publishable = form.cleaned_data['publishable']