예제 #1
0
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.",
        )
예제 #3
0
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.')
예제 #7
0
    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
예제 #9
0
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]