import logging
log = logging.getLogger('platforma.api.library')
-__author__= "Ćukasz Rekucki"
-__date__ = "$2009-09-25 15:49:50$"
-__doc__ = "Module documentation."
-
from piston.handler import BaseHandler, AnonymousBaseHandler
-from django.http import HttpResponse
+from piston.utils import rc
from datetime import date
import librarian
import librarian.html
import difflib
-from librarian import dcparser, parser
from wlrepo import *
-from api.models import PullRequest
from explorer.models import GalleryForDocument
# internal imports
from api.utils import validate_form, hglibrary, natural_order
from api.models import PartCache, PullRequest
+from pygments import highlight
+from pygments.lexers import DiffLexer
+from pygments.formatters import HtmlFormatter
+
#
import settings
#
# Document Handlers
#
-class BasicDocumentHandler(AnonymousBaseHandler):
- allowed_methods = ('GET',)
-
- @hglibrary
- def read(self, request, docid, lib):
- try:
- doc = lib.document(docid)
- except RevisionNotFound:
- return rc.NOT_FOUND
-
- result = {
- 'name': doc.id,
- 'html_url': reverse('dochtml_view', args=[doc.id]),
- 'text_url': reverse('doctext_view', args=[doc.id]),
- 'dc_url': reverse('docdc_view', args=[doc.id]),
- 'public_revision': doc.revision,
- }
-
- return result
-
-
class DiffHandler(BaseHandler):
allowed_methods = ('GET',)
@hglibrary
- def read(self, request, source_revision, target_revision, lib):
- '''Return diff between source_revision and target_revision)'''
- source_document = lib.document_for_revision(source_revision)
- target_document = lib.document_for_revision(target_revision)
- print source_document,
- print target_document
+ def read(self, request, docid, lib):
+ '''Return diff between source_revision and target_revision)'''
+ revision = request.GET.get('revision')
+ if not revision:
+ return ''
+ source_document = lib.document(docid)
+ target_document = lib.document_for_revision(revision)
+ print source_document, target_document
+
diff = difflib.unified_diff(
source_document.data('xml').splitlines(True),
target_document.data('xml').splitlines(True),
'source',
'target')
- return ''.join(list(diff))
+ s = ''.join(list(diff))
+ return highlight(s, DiffLexer(), HtmlFormatter(cssclass="pastie"))
#
#
class DocumentHandler(BaseHandler):
allowed_methods = ('GET', 'PUT')
- anonymous = BasicDocumentHandler
@validate_form(forms.DocumentRetrieveForm, 'GET')
@hglibrary
@validate_form(forms.DocumentRetrieveForm, 'GET')
@hglibrary
- def read(self, request, form, docid, lib, stylesheet='partial'):
+ def read(self, request, form, docid, lib, stylesheet='full'):
"""Read document as html text"""
try:
revision = form.cleaned_data['revision']
return error
return librarian.html.transform(document.data('xml'), is_file=False, \
- parse_dublincore=False, stylesheet='full',\
+ parse_dublincore=False, stylesheet=stylesheet,\
options={
"with-paths": 'boolean(1)',
})
#
class DocumentGalleryHandler(BaseHandler):
- allowed_methods = ('GET')
+ allowed_methods = ('GET', 'POST')
def read(self, request, docid):
return galleries
-
+ def create(self, request, docid):
+ if not request.user.is_superuser:
+ return rc.FORBIDDEN
+
+ new_path = request.POST.get('path')
+
+ if new_path:
+ gallery, created = GalleryForDocument.objects.get_or_create(
+ document = docid,
+ defaults = {
+ 'subpath': new_path,
+ }
+ )
+
+ if not created:
+ gallery.subpath = new_path
+ gallery.save()
+
+ return rc.CREATED
+
+ return rc.BAD_REQUEST
#
# Dublin Core handlers