- # return the new revision number
- return {
- "document": ndoc.id,
- "subview": "xml",
- "previous_revision": prev,
- "updated_revision": ndoc.revision
- }
-
- except (RevisionNotFound, KeyError):
- return response.EntityNotFound().django_response()
+ # TODO: provide useful routines to make this simpler
+ def xml_update_action(lib, resolve):
+ try:
+ f = lib._fileopen(resolve('parts'), 'r')
+ stored_includes = json.loads(f.read())
+ f.close()
+ except:
+ stored_includes = []
+
+ if stored_includes != includes:
+ f = lib._fileopen(resolve('parts'), 'w+')
+ f.write(json.dumps(includes))
+ f.close()
+
+ # update the parts cache
+ PartCache.update_cache(docid, current.owner,\
+ stored_includes, includes)
+
+ # now that the parts are ok, write xml
+ f = lib._fileopen(resolve('xml'), 'w+')
+ f.write(data)
+ f.close()
+
+ ndoc = current.invoke_and_commit(\
+ xml_update_action, lambda d: (msg, current.owner) )
+
+ try:
+ # return the new revision number
+ return {
+ "document": ndoc.id,
+ "subview": "xml",
+ "previous_revision": current.revision,
+ "updated_revision": ndoc.revision
+ }
+ except Exception, e:
+ lib._rollback()
+ raise e
+ except RevisionNotFound, e:
+ return response.EntityNotFound().django_response(e)