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
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
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
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
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
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
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
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
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
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
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
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
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 }))
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
def getFile(self, REQUEST, RESPONSE): filename = _fileutil.extractFilename(self.getPath(REQUEST)) return self.retrieveFileStreamIterator(filename, REQUEST)