Esempio n. 1
0
    def toZippedHtml(self, REQUEST, get_data=True):
        REQUEST.set('ZMS_INDEX_HTML', 1)
        REQUEST.set('ZMS_HTML_EXPORT', 1)

        #-- Create temporary folder.
        tempfolder = tempfile.mktemp()
        ressources = self.exportRessources(tempfolder,
                                           REQUEST,
                                           from_zms=self.getLevel() == 0,
                                           from_home=True)

        #-- Download HTML-pages.
        for lang in self.getLangIds():
            REQUEST.set('lang', lang)
            REQUEST.set('preview', None)
            self.recurse_downloadHtmlPages(self, tempfolder, lang, REQUEST)

        #-- Get zip-file.
        zipfiles = _fileutil.getOSPath('%s/*' % tempfolder)
        rtn = _fileutil.buildZipArchive(zipfiles, get_data)

        #-- Remove temporary folder.
        if not self.getConfProperty('ZMS.debug', 0):
            _fileutil.remove(tempfolder, deep=1)

        return rtn
Esempio n. 2
0
def optimize(img, qual=75):
  """
  Optimize image.
  @rtype: C{MyImage}
  """
  from PIL import Image, ImageFile
  ImageFile.LOAD_TRUNCATED_IMAGES = True
  
  # Save image in temp-folder
  context = img.aq_parent
  tempfolder = tempfile.mktemp()
  filepath = _fileutil.getOSPath('%s/%s'%(tempfolder, img.filename))
  _fileutil.exportObj(img, filepath)
  
  # Resize image
  im = Image.open(filepath)
  im = im.convert('RGB')
  im.convert('RGB').save(filepath, "JPEG", quality=qual, optimize=True)
  
  # Read optimized image from file-system
  f = open(filepath, 'rb')
  data = f.read()
  result = {'data':data,'filename':img.filename}
  f.close()
  
  # Remove temp-folder and images
  _fileutil.remove(tempfolder, deep=1)
  
  # Returns resulting image
  image = standard.ImageFromData(context, result['data'], result['filename'])
  return image
Esempio n. 3
0
def rotate(img, direction, qual=75):
    """
  Rotate image.
  """
    try:
        from PIL import Image
    except:
        import Image

    # Save image in temp-folder
    context = img.aq_parent
    tempfolder = tempfile.mktemp()
    filepath = _fileutil.getOSPath('%s/%s' % (tempfolder, img.filename))
    _fileutil.exportObj(img, filepath)

    # Rotate image
    im = Image.open(filepath)
    im = im.rotate(direction)
    im.convert('RGB').save(filepath, "JPEG", quality=qual, optimize=True)

    # Read rotated image from file-system
    f = open(filepath, 'rb')
    data = f.read()
    result_filename = _fileutil.extractFilename(filepath)
    result = {'data': data, 'filename': img.filename}
    f.close()

    # Remove temp-folder and images
    _fileutil.remove(tempfolder, deep=1)

    # Returns resulting image
    image = standard.ImageFromData(context, result['data'], result['filename'])
    return image
Esempio n. 4
0
def crop(img, box, qual=75):
    """
  Crop image.
  @rtype: C{MyImage}
  """
    try:
        from PIL import Image
    except:
        import Image

    # Save image in temp-folder
    context = img.aq_parent
    tempfolder = tempfile.mktemp()
    filepath = _fileutil.getOSPath('%s/%s' % (tempfolder, img.filename))
    _fileutil.exportObj(img, filepath)

    # Crop image
    im = Image.open(filepath)
    im = im.crop(box)
    im.convert('RGB').save(filepath, "JPEG", quality=qual)

    # Read resized image from file-system
    f = open(filepath, 'rb')
    result_data = f.read()
    result_filename = _fileutil.extractFilename(filepath)
    result = {'data': result_data, 'filename': result_filename}
    f.close()

    # Remove temp-folder and images
    _fileutil.remove(tempfolder, deep=1)

    # Returns resulting image
    image = standard.ImageFromData(context, result['data'], result['filename'])
    return image
Esempio n. 5
0
def importFile(self, file, REQUEST, handler):

    # Get filename.
    if isinstance(file, ZPublisher.HTTPRequest.FileUpload):
        filename = file.filename
    else:
        filename = file.name
    standard.writeBlock(self, '[importFile]: filename=' + filename)

    # Create temporary folder.
    folder = tempfile.mktemp()
    os.mkdir(folder)

    # Save to temporary file.
    filename = _fileutil.getOSPath(
        '%s/%s' % (folder, _fileutil.extractFilename(filename)))
    _fileutil.exportObj(file, filename)

    # Import ZEXP-file.
    if _fileutil.extractFileExt(filename) == 'zexp':
        ob = self._importObjectFromFile(filename, verify=0)
        # Remove temporary files.
        _fileutil.remove(folder, deep=1)
        # Refresh zcatalog_index
        standard.triggerEvent(self, '*.onImportObjEvt')
        return ob

    # Find XML-file.
    if _fileutil.extractFileExt(filename) == 'zip':
        _fileutil.extractZipArchive(filename)
        filename = None
        for deep in [0, 1]:
            for ext in ['xml', 'htm', 'html']:
                if filename is None:
                    filename = _fileutil.findExtension(ext, folder, deep)
            break
        if filename is None:
            raise zExceptions.InternalError('XML-File not found!')

    # Import Filter.
    if REQUEST.get('filter', '') in self.getFilterManager().getFilterIds():
        filename = _filtermanager.importFilter(self, filename,
                                               REQUEST.get('filter', ''),
                                               REQUEST)

    # Import XML-file.
    standard.writeBlock(self, '[importFile]: filename=' + filename)
    f = standard.pyopen(filename, 'r', encoding='utf-8')
    ob = handler(self, f)
    f.close()

    # Remove temporary files.
    _fileutil.remove(folder, deep=1)

    # Return imported object.
    return ob
Esempio n. 6
0
def processData(self, processId, data, trans=None):
  # Create temporary folder.
  folder = tempfile.mktemp()
  # Save data to file.
  filename = _fileutil.getOSPath('%s/in.dat'%folder)
  _fileutil.exportObj(data, filename)
  # Save transformation to file.
  if trans:
      _fileutil.exportObj(trans, getTransFilename(self, folder, trans))
  # Process file.
  filename = processFile(self, processId, filename, trans)
  # Read data from file.
  f = open(filename, 'rb')
  data = f.read()
  f.close()
  # Remove temporary folder.
  if not self.getConfProperty('ZMS.debug', 0):
      _fileutil.remove(folder, deep=1)
  # Return data.
  return data
Esempio n. 7
0
    def toZippedXml(self, REQUEST, get_data=True):

        #-- Create temporary folder.
        tempfolder = tempfile.mktemp()
        ressources = self.exportRessources(tempfolder, REQUEST)

        #-- Get xml-export.
        xml = self.toXml(REQUEST)

        #-- Write xml-export to file.
        xmlfilename = os.path.join(tempfolder, 'content.xml')
        _fileutil.exportObj(xml, xmlfilename)

        #-- Get zip-file.
        zipfiles = _fileutil.getOSPath('%s/*' % tempfolder)
        rtn = _fileutil.buildZipArchive(zipfiles, get_data)

        #-- Remove temporary folder.
        if not self.getConfProperty('ZMS.debug', 0):
            _fileutil.remove(tempfolder, deep=1)

        return rtn
Esempio n. 8
0
def exportFilter(self, id, REQUEST):
  # Set local variables.
  ob_filter = self.getFilterManager().getFilter(id)
  tempfolder, outfilename = self.initExportFilter( id, REQUEST)
  # Process filter.
  outfilename = processFilter(self, ob_filter, tempfolder, outfilename, REQUEST)
  # Return values.
  content_type = ob_filter.get('content_type', 'content/unknown')
  filename = 'exportFilter.%s'%content_type[content_type.find('/')+1:]
  # Zip File.
  if content_type == 'application/zip':
    data = _fileutil.buildZipArchive( outfilename, get_data=True)
  # Read File.
  else:
    standard.writeBlock( self, '[exportFilter]: Read %s'%outfilename)
    f = open(outfilename, 'rb')
    data = f.read()
    f.close()
  # Remove temporary folder.
  if not self.getConfProperty('ZMS.debug', 0):
    _fileutil.remove( tempfolder, deep=1)
  # Return.
  return filename, data, content_type
Esempio n. 9
0
 def commitChanges(self, ids):
     standard.writeLog(self, "[commitChanges]: ids=%s" % str(ids))
     standard.triggerEvent(self, 'beforeCommitRepositoryEvt')
     success = []
     failure = []
     for provider_id in list(set([x.split(':')[0] for x in ids])):
         provider = getattr(self, provider_id)
         basepath = self.get_conf_basepath(provider.id)
         for id in list(
                 set([
                     x.split(':')[1] for x in ids
                     if x.split(':')[0] == provider_id
                 ])):
             try:
                 # Read local-files from provider.
                 files = self.localFiles(provider, [id])
                 # Recreate folder.
                 if os.path.exists(basepath):
                     for name in os.listdir(basepath):
                         filepath = os.path.join(basepath, name)
                         if os.path.isdir(filepath) and name == id:
                             standard.writeLog(
                                 self,
                                 "[commitChanges]: clear dir %s" % filepath)
                             dir = [
                                 os.path.join(filepath, x)
                                 for x in os.listdir(filepath)
                             ]
                             [
                                 _fileutil.remove(x) for x in dir
                                 if os.path.isfile(x)
                             ]
                         elif os.path.isfile(
                                 filepath) and name == '%s.py' % id:
                             standard.writeLog(
                                 self, "[commitChanges]: remove file %s" %
                                 filepath)
                             _fileutil.remove(filepath)
                 # Clear folders.
                 dir = list(
                     set([
                         os.path.join(basepath, x[:x.rfind(os.path.sep)])
                         for x in files if x.endswith('__init__.py')
                     ]))
                 dir = [
                     x for x in dir if x.split(os.path.sep)[-1] in
                     [y.split(':')[-1] for y in ids]
                 ]
                 [[
                     os.remove(z)
                     for z in [os.path.join(x, y) for y in os.listdir(x)]
                     if os.path.isfile(z)
                 ] for x in dir if os.path.isdir(x)]
                 # Write files.
                 for file in files:
                     filepath = os.path.join(basepath, file)
                     folder = filepath[:filepath.rfind(os.path.sep)]
                     standard.writeLog(
                         self, "[commitChanges]: exists folder %s %s" %
                         (folder, str(os.path.exists(folder))))
                     if not os.path.exists(folder):
                         standard.writeLog(
                             self,
                             "[commitChanges]: create folder %s" % folder)
                         _fileutil.mkDir(folder)
                     standard.writeLog(
                         self, "[commitChanges]: write %s" % filepath)
                     data = files[file]['data']
                     if data is not None:
                         f = open(filepath, "wb")
                         try:
                             f.write(data.encode('utf-8'))
                         except:
                             f.write(data)
                         f.close()
                     else:
                         failure.append('%s is None' % file)
                 success.append(id)
             except:
                 standard.writeError(self, "[commitChanges]: can't %s" % id)
                 failure.append(id)
     standard.triggerEvent(self, 'afterCommitRepositoryEvt')
     return success, failure
Esempio n. 10
0
def toCdata(self, s, xhtml=False):
  rtn = ''

  # Return Text (HTML) in CDATA as XHTML.
  from Products.zms import _filtermanager
  processId = 'tidy'
  if not xhtml \
     and self.getConfProperty('ZMS.export.xml.tidy', 0) \
     and processId in self.getProcessIds():

    # Create temporary folder.
    folder = tempfile.mktemp()
    os.mkdir(folder)

    # Save <HTML> to file.
    filename = _fileutil.getOSPath('%s/xhtml.html' % folder)
    _fileutil.exportObj(s, filename)

    # Call <HTML>Tidy
    processOb = self.getProcess(processId)
    command = processOb.get('command')
    if command.find('{trans}') >= 0:
      trans = _fileutil.getOSPath(package_home(globals()) + '/conf/xsl/tidy.html2xhtml.conf')
      command = command.replace('{trans}', trans)
    filename = _filtermanager.processCommand(self, filename, command)

    # Read <XHTML> from file.
    f = open(htmfilename, 'rb')
    rtn = f.read().strip()
    f.close()

    # Read Error-Log from file.
    f = open(logfilename, 'rb')
    log = f.read().strip()
    f.close()

    # Remove temporary files.
    _fileutil.remove(folder, deep=1)

    # Process <XHTML>.
    prefix = '<p>'
    if s[:len(prefix)] != prefix and rtn[:len(prefix)] == prefix:
      rtn = rtn[len(prefix):]
      suffix = '</p>'
      if s[-len(suffix):] != suffix and rtn[-len(suffix):] == suffix:
        rtn = rtn[:-len(suffix)]
    f.close()

    # Process Error-Log.
    if log.find('0 errors') < 0:
      rtn += '<!-- ' + log + '-->'

  # Return Text.
  elif standard.is_str(s) and s.find(' ') < 0 and s.find('<') < 0 and s.find('&') < 0:
    rtn = s

  # Return Text in CDATA.
  elif s is not None:
    if standard.is_bytes(s):
      s = standard.pystr(s)
    # Hack for invalid characters
    s = s.replace(chr(30), '')
    # Hack for nested CDATA
    s = re.compile(r'\<\!\[CDATA\[(.*?)\]\]\>').sub(r'<!{CDATA{\1}}>', s)
    # Wrap with CDATA
    rtn = '<![CDATA[%s]]>' % s

  # Return.
  return rtn
Esempio n. 11
0
def resize(img, size, mode='resize', sffx='_thumbnail', qual=75):
  """
  Resize image.
  @rtype: C{MyImage}
  """
  from PIL import Image, ImageFile
  ImageFile.LOAD_TRUNCATED_IMAGES = True
  
  # Save image in temp-folder
  context = img.aq_parent
  tempfolder = tempfile.mktemp()
  filepath = _fileutil.getOSPath('%s/%s'%(tempfolder, img.filename))
  _fileutil.exportObj(img, filepath)
  
  # Resize SVG
  svg_dim = svgutil.get_dimensions(img)
  if svg_dim is not None:
    img = svgutil.set_dimensions(img,size)
    f = open(filepath, 'wb')
    f.write(img.getData())
    f.close()
  
  # Resize image
  else:
    im = Image.open(filepath)
    im = im.convert('RGB')
    maxdim = max(list(size))
    if mode == 'thumbnail':
      try:
        im.thumbnail((maxdim, maxdim), Image.ANTIALIAS)
      except:
        im.thumbnail((maxdim, maxdim))
    elif mode == 'resize':
      try:
        im = im.resize(size, Image.ANTIALIAS)
      except:
        im = im.resize(size)
    elif mode == 'square':
      try:
        width, height = im.size
        dst_width, dst_height = maxdim, maxdim
        if width > height:
          delta = width - height
          left = int(delta/2)
          upper = 0
          right = height + left
          lower = height
        else:
          delta = height - width
          left = 0
          upper = int(delta/2)
          right = width
          lower = width + upper
        im = im.crop(( left, upper, right, lower))
        im = im.resize((dst_width, dst_height), Image.ANTIALIAS)
      except:
        im.resize(size)
    im.convert('RGB').save(filepath, "JPEG", quality=qual, optimize=True)
  
  # Read resized image from file-system
  f = open(filepath, 'rb')
  result_data = f.read()
  f.close()
  
  # Remove temp-folder and images
  _fileutil.remove(tempfolder, deep=1)
  
  thumb_sffx = str(sffx)
  getfilename = _fileutil.extractFilename(filepath).split('.')
  filename = getfilename[0:-1]
  filename = ".".join(filename)
  filename = filename.replace('.', '_')
  extension = _fileutil.extractFileExt(filepath)
  result_filename = filename + thumb_sffx + '.' + extension
  result = {'data':result_data,'filename':result_filename}
  
  # Returns resulting image
  image = standard.ImageFromData(context, result['data'], result['filename'])
  return image