Example #1
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
Example #2
0
def uploadBlobField(self, clazz, file=b'', filename=''):
    try:
        file = file.read()
    except:
        pass
    f = None
    if isinstance(file, six.string_types):
        f = re.findall('^data:(.*?);base64,([\s\S]*)$', file)
    if f:
        mt = f[0][0]
        file = base64.b64decode(f[0][1])
    else:
        mt, enc = standard.guess_content_type(filename, file)
    if clazz in [_globals.DT_IMAGE, 'image'] or mt.startswith('image'):
        clazz = MyImage
    elif clazz in [_globals.DT_FILE, 'file']:
        clazz = MyFile
    # blob = clazz( id='', title='', file='')
    blob = clazz(id='', title='', file=bytes('', 'utf-8'))
    blob.update_data(file, content_type=mt, size=len(file))
    blob.aq_parent = self
    blob.mediadbfile = None
    blob.filename = str(_fileutil.extractFilename(filename, undoable=True))
    # Check size.
    if self is not None:
        maxlength_prop = 'ZMS.input.%s.maxlength' % ['file', 'image'
                                                     ][isinstance(
                                                         blob, MyImage)]
        maxlength = self.getConfProperty(maxlength_prop, '')
        if len(maxlength) > 0:
            size = blob.get_size()
            if size > int(maxlength):
                raise zExceptions.Forbidden(
                    'size=%i > %s=%i' % (size, maxlength_prop, int(maxlength)))
    return blob
Example #3
0
def importTheme(self, theme):
  filename = _fileutil.extractFilename(theme)
  id = filename[:filename.rfind('-')]
  filepath = package_home(globals()) + '/import/'
  path = filepath + filename
  self.importConf(path)
  return id
Example #4
0
def crop(img, box, qual=75):
  """
  Crop 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)
  
  # 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
Example #5
0
 def toXml(self, sender=None, base_path='', data2hex=True):
     """
   Serialize this file to xml-string.
   @param sender: the sender-node
   @type sender: C{zmsobject.ZMSObject=None}
   @param base_path: the base-path
   @type base_path: C{str=''}
   @param data2hex: convert data inline to hex, otherwise saved to file in base-path
   @type data2hex: C{Bool=True}
   @return: the xml-string
   @rtype: C{str}
   """
     data = ''
     objtype = ''
     filename = _fileutil.getOSPath(
         _fileutil.extractFilename(getattr(self, 'filename', '')))
     content_type = getattr(self, 'content_type', '')
     if data2hex:
         if content_type.startswith('text/') or content_type in [
                 'application/css', 'application/javascript', 'image/svg'
         ]:
             data = '<![CDATA[%s]]>' % str(self.getData(sender), 'utf-8')
         else:
             data = standard.bin2hex(bytes(self.getData(sender)))
         objtype = ' type="file"'
     else:
         filename = self.getFilename()
         filename = getLangFilename(sender, filename, self.lang)
         filename = '%s%s' % (base_path, filename)
     xml = '\n<data'
     xml += ' content_type="%s"' % content_type
     xml += ' filename="%s"' % filename
     xml += objtype + '>' + data
     xml += '</data>'
     return xml
Example #6
0
def rotate(img, direction, qual=75):
  """
  Rotate image.
  """
  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)
  
  # 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
Example #7
0
    def manage_import(self, file, lang, REQUEST, RESPONSE=None):
        """ ZMSCustom.manage_import """
        ob = self
        message = ''

        if self.meta_id == 'ZMSSysFolder':
            _ziputil.importZip2Zodb(self, file)
            message = self.getZMILangStr('MSG_IMPORTED') % (
                '<em>%s</em>' % _fileutil.extractFilename(file.filename))

        elif self.getType() == 'ZMSRecordSet':
            message = parseXmlString(self, file)

        else:
            ob = _importable.importFile(self, file, REQUEST,
                                        _importable.importContent)
            message = self.getZMILangStr('MSG_IMPORTED') % (
                '<em>%s</em>' % ob.display_type(REQUEST))

        # Return with message.
        if RESPONSE is not None:
            message = standard.url_quote(message)
            return RESPONSE.redirect(
                'manage_main?lang=%s&manage_tabs_message=%s' % (lang, message))
        else:
            return ob
Example #8
0
 def manage_index_html(self, REQUEST, RESPONSE): 
   """ZMSLog.manage_index_html"""
   path = self.getPath( REQUEST)
   RESPONSE.setHeader( 'Content-Type', 'Unknown')
   RESPONSE.setHeader( 'Content-Disposition', 'inline;filename="%s"'%_fileutil.extractFilename( path))
   file = open( path, 'rb')
   rtn = file.read() 
   file.close()
   return rtn
Example #9
0
 def getLOG(self, REQUEST, RESPONSE=None):
   """ ZMSLog.getLOG """
   filename = os.path.join(standard.getINSTANCE_HOME(),'var','log','event.log')
   RESPONSE.setHeader( 'Content-Type','text/plain')
   RESPONSE.setHeader( 'Content-Disposition','inline;filename="%s"'%_fileutil.extractFilename( filename))
   file = open( filename, 'r')
   rtn = file.read() 
   file.close()
   return rtn
Example #10
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
Example #11
0
 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
Example #12
0
 def targetFile(self, filename):
     filepath = ''
     filename = _fileutil.extractFilename(filename)
     filename = filename.replace('..', '')
     if len(filename) > 0:
         fileext = filename[filename.rfind('.'):]
         filename = filename[:filename.rfind('.')]
         location = [self.getLocation()]
         for i in reversed(range(self.getStructure())):
             location.append(filename[-(i + 1)])
         location.append(filename + fileext)
         filepath = os.sep.join(location)
     return filepath
Example #13
0
 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 }))
Example #14
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
Example #15
0
 def getFile(self, REQUEST, RESPONSE):
     filename = _fileutil.extractFilename(self.getPath(REQUEST))
     return self.retrieveFileStreamIterator(filename, REQUEST)