documents = {}
for docid in lib.documents():
+ docid = docid.decode('utf-8')
documents[docid] = {
'url': reverse('document_view', args=[docid]),
'name': docid,
'parts': []
}
- related = PartCache.objects.defer('part_id')\
+ parts = PartCache.objects.defer('part_id')\
.values_list('part_id', 'document_id').distinct()
+
+ document_tree = dict(documents)
- for part, docid in related:
+ for part, docid in parts:
# this way, we won't display broken links
if not documents.has_key(part):
+ print "NOT FOUND:", part
continue
- child = documents[part]
parent = documents[docid]
+ child = documents[part]
+
+ # not top-level anymore
+ document_tree.pop(part)
+ parent['parts'].append(child)
- if isinstance(parent, dict): # the parent is top-level
- documents.pop(part)
- parent['parts'].append(child)
- documents[part] = child['parts']
- else: # not top-level
- parent.append(child)
-
- return {
- 'documents': [d for d in documents.itervalues() if isinstance(d, dict)]
- }
+ return {'documents': sorted(document_tree.values()) }
@validate_form(forms.DocumentUploadForm, 'POST')
@hglibrary
'html_url': reverse('dochtml_view', args=[udoc.id,udoc.revision]),
'text_url': reverse('doctext_view', args=[udoc.id,udoc.revision]),
'dc_url': reverse('docdc_view', args=[udoc.id,udoc.revision]),
+ #'gallery_url': reverse('docdc_view', args=[udoc.id,udoc.revision]),
'user_revision': udoc.revision,
'public_revision': doc.revision,
}
except RevisionNotFound:
return response.EntityNotFound().django_response()
-
-
-
#
# Document Text View
#
XINCLUDE_REGEXP = r"""<(?:\w+:)?include\s+[^>]*?href=("|')wlrepo://(?P<link>[^\1]+?)\1\s*[^>]*?>"""
#
#
+#
class DocumentTextHandler(BaseHandler):
allowed_methods = ('GET', 'PUT')
includes = [m.groupdict()['link'] for m in (re.finditer(\
XINCLUDE_REGEXP, data, flags=re.UNICODE) or []) ]
+ print "INCLUDES: ", includes
+
# TODO: provide useful routines to make this simpler
def xml_update_action(lib, resolve):
try:
# now that the parts are ok, write xml
f = lib._fileopen(resolve('xml'), 'w+')
- f.write(data)
+ f.write(data.encode('utf-8'))
f.close()
-
+
+ ndoc = None
ndoc = current.invoke_and_commit(\
xml_update_action, lambda d: (msg, current.owner) )
try:
# return the new revision number
- return {
+ return response.SuccessAllOk().django_response({
"document": ndoc.id,
"subview": "xml",
"previous_revision": current.revision,
- "updated_revision": ndoc.revision
- }
+ "updated_revision": ndoc.revision,
+ "url": reverse("doctext_view", args=[ndoc.id, ndoc.revision])
+ })
except Exception, e:
- lib._rollback()
+ if ndoc: lib._rollback()
raise e
except RevisionNotFound, e:
- return response.EntityNotFound().django_response(e)
+ return response.EntityNotFound(mimetype="text/plain").\
+ django_response(e.message)
+
#
# Dublin Core handlers
"document": ndoc.id,
"subview": "dc",
"previous_revision": current.revision,
- "updated_revision": ndoc.revision
+ "updated_revision": ndoc.revision,
+ "url": reverse("docdc_view", args=[ndoc.id, ndoc.revision])
}
except Exception, e:
- lib._rollback()
+ if ndoc: lib._rollback()
raise e
except RevisionNotFound:
return response.EntityNotFound().django_response()
-
-
class MergeHandler(BaseHandler):
allowed_methods = ('POST',)