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
def zms_version(self, custom=False): file = open(_fileutil.getOSPath(package_home(globals())+'/version.txt'),'r') rtn = file.read() file.close() zms_custom_version = os.environ.get('ZMS_CUSTOM_VERSION', '') if custom and zms_custom_version != '': rtn += ' ({})'.format(zms_custom_version) if custom and os.path.exists(_fileutil.getOSPath(package_home(globals())+'/../../.git/FETCH_HEAD')): file = open(_fileutil.getOSPath(package_home(globals())+'/../../.git/FETCH_HEAD'),'r') FETCH_HEAD = file.read() file.close() FETCH_HEAD = FETCH_HEAD[0:7] rtn += ' git#%s'%(FETCH_HEAD) return rtn
def processCommand(self, filename, command): standard.writeBlock( self, '[processCommand]: infilename=%s'%filename) infilename = _fileutil.getOSPath( filename) outfilename = _fileutil.getOSPath( filename) mCurDir = '{cur_dir}' mIn = '{in}' mOut = '{out}' i = command.find(mOut[:-1]) if i >= 0: j = command.find('}', i) mExt = command[i+len(mOut[:-1]):j] mOut = command[i:j+1] if len(mExt) > 0: outfilename = outfilename[:outfilename.rfind('.')] + mExt else: outfilename += '.tmp' tmpoutfilename = outfilename + '~' instance_home = standard.getINSTANCE_HOME() package_home = standard.getPACKAGE_HOME() package_home = os.path.normpath(package_home) command = command.replace( '{package_home}', package_home) command = command.replace( '{instance_home}', instance_home) command = command.replace( mCurDir, _fileutil.getFilePath(infilename)) command = command.replace( mIn, infilename) command = command.replace( mOut, tmpoutfilename) # Change directory (deprecated!). if self.getConfProperty('ZMS.filtermanager.processCommand.chdir', 0): path = _fileutil.getFilePath(filename) standard.writeBlock( self, '[processCommand]: path=%s'%path) os.chdir(path) # Execute command. standard.writeBlock( self, '[processCommand]: command=%s'%command) os.system(command) # Check if output file exists. try: os.stat( _fileutil.getOSPath( tmpoutfilename)) standard.writeBlock( self, '[processCommand]: rename %s to %s'%( tmpoutfilename, outfilename)) try: os.remove( outfilename) except OSError: pass os.rename( tmpoutfilename, outfilename) except OSError: outfilename = infilename # Remove input file if it is the result of a transformation of output file. if outfilename != infilename: os.remove( infilename) # Return filename. standard.writeBlock( self, '[processCommand]: outfilename=%s'%( outfilename)) return outfilename
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 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 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
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
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
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
def zms_version(self): file = open(_fileutil.getOSPath(package_home(globals())+'/version.txt'),'r') rtn = file.read() file.close() zms_custom_version = os.environ.get('ZMS_CUSTOM_VERSION', '') if zms_custom_version != '': rtn += ' ({})'.format(zms_custom_version) 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 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: transfilename = _fileutil.getOSPath('%s/%s'%(folder, trans.getId())) _fileutil.exportObj(trans, transfilename) # 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
def recurse_importContent(self, folder): # Cleanup. for key in ['oRootTag', 'oCurrNode', 'oParent', 'dTagStack', 'dValueStack']: try: delattr(self, key) except: pass # Upload ressources. 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: req = {'lang':lang,'preview':'preview'} obj_vers = self.getObjVersion(req) blob = self._getObjAttrValue(obj_attr, obj_vers, lang) if blob is not None: filename = _fileutil.getOSPath('%s/%s'%(folder, blob.filename)) standard.writeBlock( self, '[recurse_importContent]: filename=%s'%filename) # Backup properties (otherwise manage_upload sets it). bk = {} for __xml_attr__ in blob.__xml_attrs__: bk[__xml_attr__] = getattr(blob, __xml_attr__, '') # Read file to ZODB. f = open( filename, 'rb') try: blob = _blobfields.createBlobField( self, datatype, file={'data':f,'filename':filename}) finally: f.close() # Restore properties. for __xml_attr__ in blob.__xml_attrs__: if bk.get(__xml_attr__, '') not in ['', 'text/x-unknown-content-type']: setattr(blob, __xml_attr__, bk[__xml_attr__]) blob.getFilename() # Normalize filename self.setObjProperty(key, blob, lang) except: standard.writeError(self, "[recurse_importContent]") # Commit object. self.onChangeObj( self.REQUEST, forced=1) transaction.commit() # Process children. for ob in self.getChildNodes(): recurse_importContent(ob, folder)
def __init__(self, filename='_language.xml'): """ Constructor """ manage_langs = [] lang_dict = {} filepath = package_home(globals()) + '/import/' xmlfile = open(_fileutil.getOSPath(filepath + filename), 'rb') builder = _xmllib.XmlBuilder() nWorkbook = builder.parse(xmlfile) for nWorksheet in _xmllib.xmlNodeSet(nWorkbook, 'Worksheet'): for nTable in _xmllib.xmlNodeSet(nWorksheet, 'Table'): for nRow in _xmllib.xmlNodeSet(nTable, 'Row'): lRow = [] currIndex = 0 for nCell in _xmllib.xmlNodeSet(nRow, 'Cell'): ssIndex = int( nCell.get('attrs', {}).get('ss:Index', currIndex + 1)) currData = None for i in range(currIndex + 1, ssIndex): lRow.append(currData) for nData in _xmllib.xmlNodeSet(nCell, 'Data'): currData = nData['cdata'] lRow.append(currData) currIndex = ssIndex if len(manage_langs) == 0: del lRow[0] manage_langs = lRow else: if len(lRow) > 0: key = lRow[0] value = {} for i in range(len(manage_langs)): if i + 1 < len(lRow): if lRow[i + 1] is not None: value[manage_langs[i]] = lRow[i + 1] lang_dict[key] = value xmlfile.close() self.manage_langs = manage_langs self.langdict = lang_dict
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
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
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
def manage_changeWorkflow(self, lang, btn='', key='properties', REQUEST=None, RESPONSE=None): """ ZMSWorkflowProvider.manage_changeWorkflow """ message = '' # Version Control. # ----------- if key == 'history': old_active = self.getConfProperty('ZMS.Version.active', 0) new_active = REQUEST.get('active', 0) old_nodes = self.getConfProperty('ZMS.Version.nodes', ['{$}']) new_nodes = standard.string_list(REQUEST.get('nodes', '')) self.setConfProperty('ZMS.Version.active', new_active) self.setConfProperty('ZMS.Version.nodes', new_nodes) nodes = [] if old_active == 1 and new_active == 0: nodes = old_nodes if old_active == 1 and new_active == 1: nodes = standard.difference_list( old_nodes, self.getConfProperty('ZMS.Version.nodes', ['{$}'])) for node in nodes: ob = self.getLinkObj(node) if ob is not None: try: message += '[%s: %i]' % (node, ob.packHistory()) except: message += '[%s: %s]' % (node, 'No history to pack') message = self.getZMILangStr('MSG_CHANGED') + message # Properties. # ----------- elif key == 'properties': # Save. # ------ if btn == 'BTN_SAVE': # Autocommit & Nodes. old_autocommit = self.autocommit new_autocommit = REQUEST.get('workflow', 0) == 0 self.revision = REQUEST.get('revision', '0.0.0') self.autocommit = new_autocommit self.nodes = standard.string_list(REQUEST.get('nodes', '')) if old_autocommit == 0 and new_autocommit == 1: self.doAutocommit(lang, REQUEST) message = self.getZMILangStr('MSG_CHANGED') # Clear. # ------ elif btn == 'BTN_CLEAR': self.doAutocommit(lang, REQUEST) self.autocommit = 1 self.activities = [] self.transitions = [] message = self.getZMILangStr('MSG_CHANGED') # Export. # ------- elif btn == 'BTN_EXPORT': return exportXml(self, REQUEST, RESPONSE) # Import. # ------- elif btn == 'BTN_IMPORT': f = REQUEST['file'] if f: filename = f.filename xml = f else: filename = REQUEST.get('init') xml = open(_fileutil.getOSPath(filename), 'rb') self.importXml(xml) message = self.getZMILangStr('MSG_IMPORTED') % ('<i>%s</i>' % filename) # Return with message. message = standard.url_quote(message) return RESPONSE.redirect( 'manage_main?lang=%s&key=%s&manage_tabs_message=%s#_properties' % (lang, key, message))
def zms_version(self): """ Try to obtain the version from package info if installed by pip otherwise read from version.txt and from svnversion 1. installed by pip from PyPI (revision 'XXXX' in version.txt - package info of official releases does not contain revision) 2. installed by pip from ZMSLabs w/ info by svn (revision 'svn-rXXXX' in package info due to setup.cfg) 3. installed by pip from TAR-Ball w/o info by svn (revision 'XXXX' in version.txt due to nightly build - 'svn0' in package info due to setup.cfg) 4. deployed to instance/Products (revision 'XXXX' in version.txt, maybe installed but unused package) 5. checked out to instance/Products as working copy from svn (revision 'REV' in version.txt, maybe installed but unused package) """ from pkg_resources import WorkingSet, Requirement zms = WorkingSet().find(Requirement.parse('ZMS3')) pth = _fileutil.getOSPath(package_home(globals())) file = open(_fileutil.getOSPath(pth + '/version.txt'), 'r') version_txt = file.read() version = version_txt.strip().split('.') file.close() # return plain version info if it is a deployment specific format like # ZMS3-3.Y.Z.XXXX.prj-ABCD if len(version) != 4: return version_txt # obtain revision and return formatted version info # ZMS3-3.Y.Z.XXXX else: revision = version.pop() # get revision from pip if running as package if (zms is not None) and ('site-packages' in pth): version_pip = str(zms.version) if ('.svn-r' in version_pip): # leave -r in revision to recognize as snapshot below revision = version_pip.strip().split('.svn', 1)[1] # get revision from svnversion elif (revision == 'REV'): import subprocess version_svn = subprocess.Popen("svnversion", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, cwd=pth, universal_newlines=True) revision = version_svn.communicate()[0].strip() # format revision info if (revision.startswith('export')): revision = ' (unknown build/snapshot)' # at moment there are 4-digits for builds elif len(revision) == 4: revision = ' (build #%s)' % revision # otherwise it is a development snapshot else: revision = ' (snapshot #%s)' % revision.replace('-r', '') return '.'.join(version) + revision
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 initContent(self, filename, REQUEST): file = open(_fileutil.getOSPath(package_home(globals())+'/import/'+filename), 'rb') _importable.importFile( self, file, REQUEST, _importable.importContent) file.close()