# HG changeset patch # User gibus # Date 1347609005 -7200 # Node ID 9c7de6dd1723da0c99acbf897ec34f9234973875 # Parent 189be4b3d71222aba005210cd18b5c92c9587c2e Fix import for use with api (with co_ment Drupal module for eg.). diff -r 189be4b3d712 -r 9c7de6dd1723 src/cm/api/handlers.py --- a/src/cm/api/handlers.py Fri Sep 14 09:49:27 2012 +0200 +++ b/src/cm/api/handlers.py Fri Sep 14 09:50:05 2012 +0200 @@ -7,7 +7,7 @@ has_perm_on_text_api from cm.security import get_viewable_comments from cm.utils.embed import embed_html -from cm.views.create import CreateTextContentForm, create_text +from cm.views.create import CreateTextContentForm, create_text, CreateTextImportForm, _text_create_import from cm.views.texts import client_exchange, text_view_frame, text_view_comments, text_export from cm.views.feeds import text_feed from piston.utils import validate @@ -209,7 +209,7 @@ return text_pre_edit(request, key=key) from cm.views.texts import text_edit - + class TextEditHandler(BaseHandler): allowed_methods = ('POST', ) type = "Text methods" @@ -430,6 +430,25 @@ def create(self, request, key, format, download, whichcomments, withcolor): return text_export(request, key, format, download, whichcomments, withcolor, adminkey=None) +class ImportHandler(BaseHandler): + allowed_methods = ('POST', ) + type = "Text methods" + title = "Import text and comments" + desc = "Import a previously exported text, along with comments and attachments in XML format." + args = """
+`xml`: Previously exported XML file of text, comments and attachments
+ """ + + @staticmethod + def endpoint(): + return URL_PREFIX + '/import/' + + + def create(self, request): + text, res = _text_create_import(request, CreateTextImportForm) + text_version = text.last_text_version + return {'key' : text.key , 'version_key' : text.last_text_version.key, 'html': text_version.content} + class AnonymousCommentsHandler(AnonymousBaseHandler): allowed_methods = ('GET',) type = "Comment methods" diff -r 189be4b3d712 -r 9c7de6dd1723 src/cm/api/urls.py --- a/src/cm/api/urls.py Fri Sep 14 09:49:27 2012 +0200 +++ b/src/cm/api/urls.py Fri Sep 14 09:50:05 2012 +0200 @@ -18,6 +18,7 @@ tv_delete_handler = Resource(handler=TextVersionDeleteHandler, authentication=auth) text_export_handler = Resource(handler=TextExportHandler, authentication=auth) +import_handler = Resource(handler=ImportHandler, authentication=auth) comments_handler = Resource(handler=CommentsHandler, authentication=auth) @@ -43,6 +44,7 @@ url(r'^text/(?P\w*)/comments/(?P\w*)/$', comment_handler), url(r'^text/(?P\w*)/export/(?P\w*)/(?P\w*)/(?P\w*)/(?P\w*)/$', text_export_handler), + url(r'^import/$', import_handler), url(r'^text/(?P\w*)/feed/$', text_feed_handler), url(r'^text/(?P\w*)/delete/$', text_delete_handler), diff -r 189be4b3d712 -r 9c7de6dd1723 src/cm/views/create.py --- a/src/cm/views/create.py Fri Sep 14 09:49:27 2012 +0200 +++ b/src/cm/views/create.py Fri Sep 14 09:50:05 2012 +0200 @@ -61,7 +61,7 @@ return cleaned_data uploaded_file = self.cleaned_data['file'] - if (uploaded_file.content_type != 'text/xml'): + if (uploaded_file.content_type != 'text/xml' and (uploaded_file.content_type != 'application/octet-stream' or cleaned_data.get('mime', 'application/xml') != 'application/xml')): msg = _("The imported file should be an XML file generated by co-ment when exporting a text and comments.") self._errors["file"] = ErrorList([msg]) return cleaned_data @@ -179,6 +179,7 @@ # Replaces attachements keys in content. for old_key in attachments_keys_map.keys(): form.cleaned_data['content'] = re.sub(old_key, attachments_keys_map[old_key], form.cleaned_data['content']) + form.cleaned_data['content'] = re.sub(r'src="/attach/', 'src="' + settings.SITE_URL + '/attach/', form.cleaned_data['content']) # Creates text. text = create_text(request.user, form.cleaned_data) @@ -242,7 +243,7 @@ # Logs on activity. register_activity(request, "text_imported", text) display_message(request, _(u'Text "%(text_title)s" has been imported')%{"text_title":text.get_latest_version().title}) - return None, HttpResponseRedirect(reverse('text-view', args=[text.key])) + return text, HttpResponseRedirect(reverse('text-view', args=[text.key])) else: form = createForm()