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 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: _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
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 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
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
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 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