示例#1
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
示例#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
示例#3
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
示例#4
0
def exportFolder(self, root, path, id, REQUEST, depth=0):
    if hasattr(root, id):
        folder = getattr(root, id)
        for ob in folder.objectValues():
            ob_id = ob.getId()
            if ob.meta_type == 'Folder':
                exportFolder(self, ob, '%s/%s' % (path, id), ob_id, REQUEST,
                             depth + 1)
            elif 'content' not in folder.objectIds(['ZMS']):
                if ob.meta_type in [
                        'DTML Document', 'DTML Method', 'Page Template',
                        'Script (Python)'
                ]:
                    try:
                        if ob.meta_type in [
                                'DTML Document', 'DTML Method', 'Page Template'
                        ]:
                            v = ob(ob, REQUEST)
                        elif ob.meta_type in ['Script (Python)']:
                            v = ob()
                        v = localHtml(ob, v)
                        v = localIndexHtml(
                            self, ob,
                            len(ob.absolute_url().split('/')) -
                            len(root.absolute_url().split('/')) + depth, v)
                        ob = v
                    except:
                        standard.writeError(self, "[exportFolder]")
                _fileutil.exportObj(ob, '%s/%s/%s' % (path, id, ob_id))
示例#5
0
def importTheme(folder, theme):
  
  filename = _fileutil.extractFilename(theme)
  id = filename[:filename.rfind('.')]
  
  if filename.endswith('.zexp'):
    ### Store copy of ZEXP in INSTANCE_HOME/import-folder.
    filepath = standard.getINSTANCE_HOME() + '/import/' + filename
    if theme.startswith('http://'):
      initutil = standard.initutil()
      initutil.setConfProperty('HTTP.proxy',REQUEST.get('http_proxy',''))
      zexp = standard.http_import( initutil, theme)
      _fileutil.exportObj( zexp, filepath)
    else:
      packagepath = package_home(globals()) + '/import/' + filename
      try:
        os.stat(_fileutil.getOSPath(filepath))
      except OSError:
        shutil.copy( packagepath, filepath)
    
    ### Import theme from ZEXP.
    _fileutil.importZexp( folder, filename)
  
  else:
    id = filename[:filename.find('-')]
    _confmanager.initConf(folder.content, id, remote=False)
  
  return id
示例#6
0
def addExternalMethod(container, id, title, data):
  """
  Add External Method to container.
  """
  m = id
  filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py'
  # Acquired external methods.
  if m.find('.') > 0 and os.path.exists(filepath):
    id = m[m.find('.')+1:]
    f = id
  # Other.
  else:
    m = getExternalMethodModuleName(container, id)
    f = id
    # If data is given then save to file in Extensions-folder.
    if data:
      filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py'
      _fileutil.exportObj( data, filepath)
    elif m != f:
      context = container
      while context is not None:
        m = getExternalMethodModuleName(context, id)
        filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py'
        if os.path.exists(filepath):
          break
        context = context.getParentNode()
  ExternalMethod.manage_addExternalMethod( container, id, title, m, f)
示例#7
0
def exportFiles(self, root, id, path):
    if hasattr(root, id):
        folder = getattr(root, id)
        for ob in folder.objectValues(['File', 'Image']):
            try:
                ob_id = ob.id()
            except:
                ob_id = str(ob.id)
            _fileutil.exportObj(ob, '%s/%s' % (path, ob_id))
示例#8
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
示例#9
0
文件: _mediadb.py 项目: cmeier76/ZMS5
 def storeFile(self, file):
     filepath = ''
     filename = _fileutil.extractFilename(file.filename)
     if len(filename) > 0:
         filename, fileext = os.path.splitext(filename)
         filename = filename + '_' + str(time.time()).replace('.',
                                                              '') + fileext
         filepath = self.targetFile(filename)
         _fileutil.exportObj(file, filepath)
     return filename
示例#10
0
 def execProcessFilter(self, ob_process, folder, filename, REQUEST):
   processId = ob_process.get( 'id')
   processOb = self.getFilterManager().getProcess(processId)
   if processOb is not None:
     processType = processOb.get( 'type', 'process')
     trans = ob_process.get('file')
     # Save transformation to file.
     if trans:
       transfilename = '%s/%s'%(folder,trans.getId())
       _fileutil.exportObj( trans, transfilename)
     if processType in [ 'DTML Method', 'External Method', 'Script (Python)']:
       filename = processMethod(self, processId, filename, trans, REQUEST)
     else:
       filename = processFile(self, processId, filename, trans)
   # Return filename.
   return filename
示例#11
0
 def execProcessFilter(self, ob_process, folder, filename, REQUEST):
   processId = ob_process.get( 'id')
   standard.writeBlock(self,"[execProcessFilter]: processId=%s"%(processId))
   processOb = self.getFilterManager().getProcess(processId)
   if processOb is not None:
     processType = processOb.get( 'type', 'process')
     standard.writeBlock(self,"[execProcessFilter]: processId=%s, processType=%s"%(processId,processType))
     trans = ob_process.get('file')
     # Save transformation to file.
     if trans:
       _fileutil.exportObj( trans, getTransFilename(self, folder, trans))
     if processType in [ 'DTML Method', 'External Method', 'Script (Python)']:
       filename = processMethod(self, processId, filename, trans, REQUEST)
     else:
       filename = processFile(self, processId, filename, trans)
   # Return filename.
   return filename
示例#12
0
文件: zmslog.py 项目: cmeier76/ZMS5
 def manage_submit(self, REQUEST, RESPONSE): 
   """ZMSLog.manage_submit"""
   
   path = self.getPath(REQUEST)
   message = ""
   
   if REQUEST.get("btn") == "Execute":
     command = REQUEST['command']
     _fileutil.executeCommand(path, command)
     message = "Command executed."
     
   elif REQUEST.get("btn") == "Upload":
     obj = REQUEST['file']
     type = 'b'
     filename = "%s%s%s"%(path, os.sep, _fileutil.extractFilename(obj.filename))
     _fileutil.exportObj( obj, filename, type)
     message = "Upload complete."
   
   return REQUEST.RESPONSE.redirect( self.url_append_params( REQUEST[ 'HTTP_REFERER'], { 'manage_tabs_message' :message }))
示例#13
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
示例#14
0
 def initExportFilter(self, id, REQUEST):
   # Set environment variables.
   instance_home = standard.getINSTANCE_HOME()
   package_home = standard.getPACKAGE_HOME()
   package_home = os.path.normpath(package_home)
   REQUEST.set( 'ZMS_FILTER', True)
   REQUEST.set( 'ZMS_FILTER_INSTANCE_HOME', instance_home)
   REQUEST.set( 'ZMS_FILTER_PACKAGE_HOME', package_home)
   # Set local variables.
   ob_filter = self.getFilterManager().getFilter(id)
   ob_filter_format = ob_filter.get('format', '')
   # Create temporary folder.
   tempfolder = tempfile.mktemp()
   ressources = self.exportRessources( tempfolder, REQUEST, from_zms=ob_filter_format=='XHTML', from_home=ob_filter_format=='XHTML')
   # Export data to file.
   if ob_filter_format == 'export':
     outfilename = _fileutil.getOSPath('%s/INDEX0'%tempfolder)
   elif ob_filter_format in ['XML', 'XML_incl_embedded']:
     # Set XML.
     data = self.toXml( REQUEST)
     outfilename = _fileutil.getOSPath('%s/export.xml'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   elif ob_filter_format == 'XHTML':
     # Set XHTML.
     data = self.toXhtml( REQUEST)
     outfilename = _fileutil.getOSPath('%s/export.html'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   elif ob_filter_format == 'myXML':
     # Set myXML.
     data = self.getXmlHeader() + getattr( self, 'getObjToXml_DocElmnt')(context=self)
     outfilename = _fileutil.getOSPath('%s/export.xml'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   else:
     raise zExceptions.InternalError("Unknown format '%s'"%ob_filter.get('format', ''))
   return tempfolder, outfilename
示例#15
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
示例#16
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
示例#17
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
示例#18
0
def recurse_downloadRessources(self, base_path, REQUEST):
    ressources = []
    # Check Constraints.
    root = getattr(self, '__root__', None)
    if root is not None:
        return ressources
    # Attributes.
    langs = self.getLangIds()
    prim_lang = self.getPrimaryLanguage()
    obj_attrs = self.getObjAttrs()
    for key in obj_attrs:
        obj_attr = self.getObjAttr(key)
        datatype = obj_attr['datatype_key']
        if datatype in _globals.DT_BLOBS:
            for lang in langs:
                try:
                    if obj_attr['multilang'] or lang == prim_lang or (
                            obj_attr['multilang'] == 0 and lang != prim_lang):
                        req = {'lang': lang, 'preview': 'preview'}
                        obj_vers = self.getObjVersion(req)
                        blob = self._getObjAttrValue(obj_attr, obj_vers, lang)
                        if blob is not None:
                            filename = blob.getFilename()
                            filename = getLangFilename(self, filename, lang)
                            filename = '%s%s' % (base_path, filename)
                            filename = _fileutil.getOSPath(filename)
                            _fileutil.exportObj(blob, filename)
                            ressources.append({
                                'filepath':
                                filename,
                                'content_type':
                                blob.getContentType()
                            })
                except:
                    standard.writeError(
                        self,
                        "[recurse_downloadRessources]: Can't export %s" % key)
        elif datatype == _globals.DT_LIST:
            for lang in langs:
                try:
                    if obj_attr['multilang'] or lang == prim_lang or (
                            obj_attr['multilang'] == 0 and lang != prim_lang):
                        req = {'lang': lang, 'preview': 'preview'}
                        obj_vers = self.getObjVersion(req)
                        v = self._getObjAttrValue(obj_attr, obj_vers, lang)
                        i = 0
                        for r in v:
                            uu = []
                            if isinstance(r, dict):
                                for k in r:
                                    u = r[k]
                                    if isinstance(u, MyImage) or isinstance(
                                            u, MyFile):
                                        uu.append(u)
                            elif isinstance(r, MyImage) or isinstance(
                                    r, MyFile):
                                uu.append(r)
                            for u in uu:
                                filename = u.getFilename()
                                filename = getLangFilename(
                                    self, filename, lang)
                                filename = '%s@%i/%s' % (base_path, i,
                                                         filename)
                                filename = _fileutil.getOSPath(filename)
                                _fileutil.exportObj(u, filename)
                                ressources.append({
                                    'filepath':
                                    filename,
                                    'content_type':
                                    u.getContentType()
                                })
                            i = i + 1
                except:
                    standard.writeError(
                        self,
                        "[recurse_downloadRessources]: Can't export %s" % key)
    # Process children.
    for child in self.getChildNodes():
        ressources.extend(
            recurse_downloadRessources(child, base_path + child.id + '/',
                                       REQUEST))
    # Return list of ressources.
    return ressources