def editModule(self, **kwargs): rme = self context = self.context response = self.request.RESPONSE # Perform the import try: payload = context.REQUEST['BODY'] if payload: kwargs = {'original_file_name':'sword-import-file', 'user_name':getSecurityManager().getUser().getUserName()} text, subobjs, meta = doTransform(rme, "sword_to_folder", payload, meta=1, **kwargs) #context.plone_log("SWORD Import with id=%s: Transformed metadata and transformed document to cnxml." % (new_id)) if text: rme.manage_delObjects([rme.default_file,]) rme.invokeFactory('CNXML Document', rme.default_file, file=text, idprefix='zip-') makeContent(rme, subobjs) # Parse the returned mdml and set attributes up on the ModuleEditor object # Add any additional, unmatched, aka uncredited authors props = meta['properties'] rme.updateProperties(props) # Make sure the metadata gets into the cnxml rme.editMetadata() #context.plone_log("SWORD Import with id=%s: Completed." % (new_id)) response.setStatus('Created') return None#state.set(status='SwordImportSuccess', context=rme) except OOoImportError, e: transaction.abort() #context.plone_log("SWORD Import with id=%s: Aborted. There were problems transforming the openoffice or word document." % (new_id)) message = context.translate("message_could_not_import", {"errormsg":e}, domain="rhaptos", default="Could not import file. %s" % e) response.setStatus('BadRequest') return None#state.set(status='SwordImportError', portal_status_message=message)
def test_sword_to_folder(self): context = self.folder name = "sword_to_folder" filename = "module.zip" path = os.path.join(DIRNAME, "data", filename) file = open(path, "rb") data = file.read() file.close() meta = 1 kwargs = {} text, subobjs, meta = doTransform(context, name, data, meta=1, **kwargs) returned_text = text.read() path = os.path.join(DIRNAME, "data", "no_links_reference.xml") file = open(path, "rb") no_links_reference_text = file.read() file.close() self.assertEqual( returned_text, no_links_reference_text, "The text was not extracted correctly. (%s)" % diff(returned_text, no_links_reference_text), ) self.assertEqual(subobjs, {}, "There should be no sub objects.") self.assertEqual( meta, {"mimetype": "application/cmf+folderish", "featured_links": [], "properties": {}, "encoding": None}, "Metadata was not set correctly.", )
def editModule(self, **kwargs): rme = self context = self.context response = self.request.RESPONSE # Perform the import try: payload = context.REQUEST['BODY'] if payload: kwargs = { 'original_file_name': 'sword-import-file', 'user_name': getSecurityManager().getUser().getUserName() } text, subobjs, meta = doTransform(rme, "sword_to_folder", payload, meta=1, **kwargs) #context.plone_log("SWORD Import with id=%s: Transformed metadata and transformed document to cnxml." % (new_id)) if text: rme.manage_delObjects([ rme.default_file, ]) rme.invokeFactory('CNXML Document', rme.default_file, file=text, idprefix='zip-') makeContent(rme, subobjs) # Parse the returned mdml and set attributes up on the ModuleEditor object # Add any additional, unmatched, aka uncredited authors props = meta['properties'] rme.updateProperties(props) # Make sure the metadata gets into the cnxml rme.editMetadata() #context.plone_log("SWORD Import with id=%s: Completed." % (new_id)) response.setStatus('Created') return None #state.set(status='SwordImportSuccess', context=rme) except OOoImportError, e: transaction.abort() #context.plone_log("SWORD Import with id=%s: Aborted. There were problems transforming the openoffice or word document." % (new_id)) message = context.translate("message_could_not_import", {"errormsg": e}, domain="rhaptos", default="Could not import file. %s" % e) response.setStatus('BadRequest') return None #state.set(status='SwordImportError', portal_status_message=message)
def test_import_new_links(self): context = self.folder name = "sword_to_folder" filename = 'module_with_one_featured_link.zip' path = os.path.join(DIRNAME, 'data', filename) file = open(path, 'rb') data = file.read() file.close() meta = 1 kwargs = {} text, subobjs, meta = doTransform(context, name, data, meta=1, **kwargs) path = os.path.join(DIRNAME, 'data', 'one_link_reference.xml') file = open(path, 'rb') one_link_reference_text = file.read() file.close() returned_text = text.read() self.assertEqual( returned_text, one_link_reference_text, 'The text was not extracted correctly. (%s)' % \ diff(returned_text, one_link_reference_text) ) self.assertEqual(subobjs, {}, 'There should be no sub objects.') self.assertEqual( meta, { 'mimetype': 'application/cmf+folderish', 'featured_links': [{ 'url': 'http://localhost:8080/featured_module', 'strength': '3', 'type': 'example', 'title': 'Test feature link' }], 'properties': {}, 'encoding': None }, 'Metadata was not set correctly.')
def test_import_new_links(self): context = self.folder name = "sword_to_folder" filename = "module_with_one_featured_link.zip" path = os.path.join(DIRNAME, "data", filename) file = open(path, "rb") data = file.read() file.close() meta = 1 kwargs = {} text, subobjs, meta = doTransform(context, name, data, meta=1, **kwargs) path = os.path.join(DIRNAME, "data", "one_link_reference.xml") file = open(path, "rb") one_link_reference_text = file.read() file.close() returned_text = text.read() self.assertEqual( returned_text, one_link_reference_text, "The text was not extracted correctly. (%s)" % diff(returned_text, one_link_reference_text), ) self.assertEqual(subobjs, {}, "There should be no sub objects.") self.assertEqual( meta, { "mimetype": "application/cmf+folderish", "featured_links": [ { "url": "http://localhost:8080/featured_module", "strength": "3", "type": "example", "title": "Test feature link", } ], "properties": {}, "encoding": None, }, "Metadata was not set correctly.", )
def test_sword_to_folder(self): context = self.folder name = "sword_to_folder" filename = 'module.zip' path = os.path.join(DIRNAME, 'data', filename) file = open(path, 'rb') data = file.read() file.close() meta = 1 kwargs = {} text, subobjs, meta = doTransform(context, name, data, meta=1, **kwargs) returned_text = text.read() path = os.path.join(DIRNAME, 'data', 'no_links_reference.xml') file = open(path, 'rb') no_links_reference_text = file.read() file.close() self.assertEqual( returned_text, no_links_reference_text, 'The text was not extracted correctly. (%s)' % \ diff(returned_text, no_links_reference_text) ) self.assertEqual(subobjs, {}, 'There should be no sub objects.') self.assertEqual( meta, { 'mimetype': 'application/cmf+folderish', 'featured_links': [], 'properties': {}, 'encoding': None }, 'Metadata was not set correctly.')
def updateContent(self, obj, fp, content_type, cksum, merge=False): kwargs = { 'original_file_name': 'sword-import-file', 'user_name': getSecurityManager().getUser().getUserName() } content = fp.read() # check the md5sum, if provided if cksum is not None: h = md5.md5(content).hexdigest() if h != cksum: raise ErrorChecksumMismatch("Checksum does not match", "Calculated Checksum %s does not match %s" % (h, cksum)) transform = "sword_to_folder" if content_type.lower().startswith("application/msword"): transform = "oo_to_cnxml" try: text, subobjs, meta = doTransform(obj, transform, content, meta=1, **kwargs) except (CNXImportError, BadZipfile), e: raise TransformFailed(str(e))
## Script (Python) "cnxml_export" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters=format ##title=Export CNXML File from Products.CNXMLTransforms.helpers import doTransform f = context.getDefaultFile() source = f.getSource() objectId = context.objectId or context.getId().replace('.','-') name = "%s-%s.cnxml" % (objectId, format) context.REQUEST.RESPONSE.setHeader("Content-Disposition", "attachment; filename=%s" % name) context.REQUEST.RESPONSE.setHeader("Content-Type", "mozilla-ignores-content-disposition") if format == 'plain': result = source elif format == 'authentic': result = doTransform(context, "cnxml_to_authentic", source)[0] return result
from Products.CMFCore.utils import getToolByName f = context.getDefaultFile() source = f.getSource() objectId = context.objectId or context.getId().replace('.', '-') name = "%s-%s.cnxml" % (objectId, format) isPublished = (hasattr(context, 'state') and context.state == 'public') if format == 'plain': result = source if isPublished: objectVersion = context.getId( ) == 'latest' and context.version or context.getId() name = "%s_%s.cnxml" % (objectId, objectVersion) elif format == 'authentic': result = doTransform(context, "cnxml_to_authentic", source)[0] elif format == 'zip': if isPublished: objectVersion = context.getId( ) == 'latest' and context.version or context.getId() printTool = getToolByName(context, 'rhaptos_print') result = printTool.getFile(objectId, objectVersion, 'zip') if result is None: result = doTransform(context, "folder_to_zip", context)[0] if result is not None: printTool.setFile(objectId, objectVersion, 'zip', result) name = "%s_%s.zip" % (objectId, objectVersion) else: result = doTransform(context, "folder_to_zip", context)[0] name = "%s.zip" % objectId elif format == 'xhtml':
from Products.CNXMLTransforms.helpers import doTransform from Products.CMFCore.utils import getToolByName f = context.getDefaultFile() source = f.getSource() objectId = context.objectId or context.getId().replace('.','-') name = "%s-%s.cnxml" % (objectId, format) isPublished = ( hasattr(context, 'state') and context.state == 'public' ) if format == 'plain': result = source if isPublished: objectVersion = context.getId() == 'latest' and context.version or context.getId() name = "%s_%s.cnxml" % (objectId,objectVersion) elif format == 'authentic': result = doTransform(context, "cnxml_to_authentic", source)[0] elif format == 'zip': if isPublished: objectVersion = context.getId() == 'latest' and context.version or context.getId() printTool = getToolByName(context,'rhaptos_print') result = printTool.getFile(objectId, objectVersion, 'zip') if result is None: result = doTransform(context, "folder_to_zip", context)[0] if result is not None: printTool.setFile(objectId, objectVersion, 'zip', result) name = "%s_%s.zip" % (objectId,objectVersion) else: result = doTransform(context, "folder_to_zip", context)[0] name = "%s.zip" % objectId elif format == 'xhtml': result = doTransform(context, "module_to_xhtmlzip", context)[0]