Пример #1
0
    def updateBaseMetadata(self, **kw):
        """
      Updates metadata information in the converted OOo document
      based on the values provided by the user. This is implemented
      through the invocation of the conversion server.
    """
        if not self.hasBaseData():
            # XXX please pass a meaningful description of error as argument
            raise NotConvertedError()

        server_proxy = DocumentConversionServerProxy(self)
        response_code, response_dict, response_message = \
              server_proxy.run_setmetadata(self.getId(),
                                           enc(str(self.getBaseData())),
                                           kw)
        if response_code == 200:
            # successful meta data extraction
            self._setBaseData(dec(response_dict['data']))
            self.updateFileMetadata(
            )  # record in workflow history # XXX must put appropriate comments.
        else:
            # Explicitly raise the exception!
            raise ConversionError(
                "OOoDocument: error getting document metadata (Code %s: %s)" %
                (response_code, response_message))
Пример #2
0
    def _getConversionFromProxyServer(self, format):
        """
      Communicates with server to convert a file
    """
        if not self.hasBaseData():
            # XXX please pass a meaningful description of error as argument
            raise NotConvertedError()
        if format == 'text-content':
            # Extract text from the ODF file
            cs = cStringIO.StringIO()
            cs.write(str(self.getBaseData()))
            z = zipfile.ZipFile(cs)
            s = z.read('content.xml')
            s = self.rx_strip.sub(" ", s)  # strip xml
            s = self.rx_compr.sub(" ", s)  # compress multiple spaces
            cs.close()
            z.close()
            return 'text/plain', s
        server_proxy = DocumentConversionServerProxy(self)
        orig_format = self.getBaseContentType()
        generate_result = server_proxy.run_generate(
            self.getId(), enc(str(self.getBaseData())), None, format,
            orig_format)
        try:
            _, response_dict, _ = generate_result
        except ValueError:
            # This is for backward compatibility with older oood version returning
            # only response_dict
            response_dict = generate_result

        # XXX: handle possible OOOd server failure
        return response_dict['mime'], Pdata(dec(response_dict['data']))
Пример #3
0
 def _convertToBaseFormat(self):
     """
   Converts the original document into ODF
   by invoking the conversion server. Store the result
   on the object. Update metadata information.
 """
     server_proxy = DocumentConversionServerProxy(self)
     response_code, response_dict, response_message = server_proxy.run_convert(
         self.getFilename() or self.getId(), enc(str(self.getData())), None,
         None, self.getContentType())
     if response_code == 200:
         # sucessfully converted document
         self._setBaseData(dec(response_dict['data']))
         metadata = response_dict['meta']
         self._base_metadata = metadata
         if metadata.get('MIMEType', None) is not None:
             self._setBaseContentType(metadata['MIMEType'])
     else:
         # Explicitly raise the exception!
         raise ConversionError(
             "OOoDocument: Error converting document to base format. (Code %s: %s)"
             % (response_code, response_message))
Пример #4
0
    def convert(self, orig, data, context=None, **kwargs):
        server_proxy = DocumentConversionServerProxy(context)

        source_mimetype = self._getAllowedSourceMimetypeFromConversionServer(
            server_proxy)
        if source_mimetype is None:
            raise ConversionError(
                "Format(s) not allowed on Conversion Server %r" % self.inputs)
        source_format = self._getFormatFromMimetype(source_mimetype)
        destination_format = self._getFormatFromMimetype(self.output)

        data.setData(
            dec(
                server_proxy.convertFile(
                    enc(orig),
                    source_format,
                    destination_format,
                    # Default values are ConversionServer default ones
                    kwargs.get('zip', False),
                    kwargs.get('refresh', False),
                    kwargs.get('conversion_kw', {}))))

        return data