def toZippedXml(self, REQUEST, get_data=True, incl_embedded=False): #-- Create temporary folder. tempfolder = tempfile.mktemp() ressources = self.exportRessources(tempfolder, REQUEST, incl_embedded=incl_embedded) #-- Get xml-export. xml = self.toXml(REQUEST, incl_embedded) #-- Write xml-export to file. xmlfilename = _fileutil.getOSPath( '%s/%s_%s.xml' % (tempfolder, self.getHome().id, self.meta_id)) _fileutil.exportObj(xml, xmlfilename) #-- Get zip-file. zipfiles = _fileutil.getOSPath('%s/*' % tempfolder) rtn = _fileutil.buildZipArchive(zipfiles, get_data) #-- Remove temporary folder. if not _globals.debug(self): _fileutil.remove(tempfolder, deep=1) return rtn
def rotate(self, img, direction, qual=75): """ Rotate image. """ try: from PIL import Image except: import Image # Save image in temp-folder 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.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 = self.context.ImageFromData(result['data'], result['filename']) return image ################################################################################
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 _globals.debug(self): _fileutil.remove(tempfolder, deep=1) return rtn
def importFile(self, file, REQUEST, handler): message = '' # Get filename. if isinstance(file,ZPublisher.HTTPRequest.FileUpload): filename = file.filename else: filename = file.name _globals.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) # 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.getFilterIds(): filename = _filtermanager.importFilter(self, filename, REQUEST.get('filter',''), REQUEST) # Import XML-file. _globals.writeBlock( self, '[importFile]: filename='+filename) f = open(filename, 'r') message += handler(self, f) f.close() # Remove temporary files. _fileutil.remove(folder, deep=1) # Return with message. message += self.getZMILangStr('MSG_IMPORTED')%('<i>%s</i>'%_fileutil.extractFilename(filename)) return message
def ftpToProvider(self, lang, REQUEST, RESPONSE): message = '' # Profile time. tStart = time.time() # Create temporary local-folder. tempfolder = tempfile.mktemp() ressources = self.exportRessources(tempfolder, REQUEST, from_content=self.getLevel() == 0, from_zms=True, from_home=True) # Download HTML-pages (to temporary local-folder). for lang in self.getLangIds(): REQUEST.set('ZMS_HTML_EXPORT', 1) REQUEST.set('lang', lang) REQUEST.set('preview', None) self.recurse_downloadHtmlPages(self, tempfolder, lang, REQUEST) # Connect to FTP-server. # ---------------------- dctFtp = self.getFtp(REQUEST) try: ftp = ftplib.FTP(dctFtp['site']) ftp.set_debuglevel(1) # 0=no, 1=moderate, 2=maximum debugging output ftp.login(dctFtp['userid'], dctFtp['password']) ftpCwd(ftp, '', dctFtp['path']) recurse_Local(ftp, dctFtp['path'], tempfolder) message += ftp.getwelcome() + '<br/>' ftp.quit() except: message += _globals.writeError( self, "[_ftpmanager.ftpToProvider]:") + '<br/>' # Remove temporary local-folder. _fileutil.remove(tempfolder, deep=1) # Return with message. message += self.getZMILangStr('MSG_EXPORTED') % ( '%s <b>%s</b> in %d sec.' % (self.display_type(REQUEST), dctFtp['site'] + dctFtp['path'], (time.time() - tStart))) return message
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 is not None and trans != '': transfilename = _fileutil.getOSPath('%s/%s'%(folder,trans.getFilename())) _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 _globals.debug( self): _fileutil.remove(folder, deep=1) # Return data. return data
def exportFilter(self, id, REQUEST): # Set local variables. ob_filter = self.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: _globals.writeLog( self, '[exportFilter]: Read %s'%outfilename) f = open(outfilename, 'rb') data = f.read() f.close() # Remove temporary folder. if not _globals.debug( self): _fileutil.remove( tempfolder, deep=1) # Return. return filename, data, content_type
def destroyFile(self, filename): try: filepath = _fileutil.getOSPath('%s/%s' % (self.location, filename)) _fileutil.remove(filepath) except: pass
def resize(self, img, size, mode='resize', sffx='_thumbnail', qual=75): """ Resize image. """ try: from PIL import Image except: import Image # Save image in temp-folder 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') maxdim = max(list(size)) if mode == 'thumbnail': try: im.thumbnail((maxdim, maxdim), Image.ANTIALIAS) except: im.thumbnail((maxdim, maxdim)) im.save(infile, "JPEG", quality=qual) 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.save(filepath, "JPEG", quality=qual) # Read resized image from file-system f = open(filepath, 'rb') result_data = f.read() 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} f.close() # Remove temp-folder and images _fileutil.remove(tempfolder, deep=1) # Returns resulting image image = self.context.ImageFromData(result['data'], result['filename']) return image
def manage_customizeDesign(self, btn, lang, REQUEST, RESPONSE): """ ConfManager.manage_customizeDesign """ message = '' cssId = REQUEST.get('cssId', '') # Ex-/Import. # ----------- if btn in [ self.getZMILangStr('BTN_EXPORT'), self.getZMILangStr('BTN_IMPORT') ]: #-- Theme. home = self.getHome() home_id = home.id temp_folder = self.temp_folder # Init exclude-ids. excl_ids = [] # Add clients-folders to exclude-ids. for folder in home.objectValues(['Folder']): if len(folder.objectValues(['ZMS'])) > 0: excl_ids.append(absattr(folder.id)) # Add content-object artefacts to exclude-ids. for metaObjId in self.getMetaobjIds(): for metaObjAttrId in self.getMetaobjAttrIds(metaObjId): metaObjAttr = self.getMetaobjAttr(metaObjId, metaObjAttrId) if metaObjAttr[ 'type'] in self.metaobj_manager.valid_zopetypes: excl_ids.append(metaObjAttrId) # Filter ids. ids = filter(lambda x: x not in excl_ids, home.objectIds(self.metaobj_manager.valid_zopetypes)) if btn == self.getZMILangStr('BTN_EXPORT'): if home_id in temp_folder.objectIds(): temp_folder.manage_delObjects(ids=[home_id]) temp_folder.manage_addFolder(id=home_id, title=home.title_or_id()) folder = getattr(temp_folder, home_id) home.manage_copyObjects(ids, REQUEST) folder.manage_pasteObjects(cb_copy_data=None, REQUEST=REQUEST) return RESPONSE.redirect( self.url_append_params( '%s/manage_exportObject' % temp_folder.absolute_url(), { 'id': home_id, 'download:int': 1 })) if btn == self.getZMILangStr('BTN_IMPORT'): v = REQUEST['theme'] temp_filename = _fileutil.extractFilename(v.filename) temp_id = temp_filename[:temp_filename.rfind('.')] filepath = INSTANCE_HOME + '/import/' + temp_filename _fileutil.exportObj(v, filepath) if temp_id in temp_folder.objectIds(): temp_folder.manage_delObjects(ids=[temp_id]) temp_folder.manage_importObject(temp_filename) folder = getattr(temp_folder, temp_id) home.manage_delObjects(ids=ids) folder.manage_copyObjects(folder.objectIds(), REQUEST) home.manage_pasteObjects(cb_copy_data=None, REQUEST=REQUEST) _fileutil.remove(filepath) temp_folder.manage_delObjects(ids=[temp_id]) # Save. # ----- if btn == self.getZMILangStr('BTN_SAVE'): #-- Stylesheet. if REQUEST.has_key('cssId'): if REQUEST.get('default'): self.setConfProperty('ZMS.stylesheet', REQUEST.get('cssId')) css = self.getStylesheet(REQUEST.get('cssId')) data = REQUEST.get('stylesheet') title = css.title css.manage_edit(data, title) message = self.getZMILangStr('MSG_CHANGED') #-- Sitemap. if REQUEST.has_key('attr_layoutsitemap'): if len(REQUEST['attr_layoutsitemap']) > 0: self.attr_layoutsitemap = int( REQUEST['attr_layoutsitemap']) elif hasattr(self, 'attr_layoutsitemap'): delattr(self, 'attr_layoutsitemap') message = self.getZMILangStr('MSG_CHANGED') # Upload. # ------- elif btn == self.getZMILangStr('BTN_UPLOAD'): #-- ZMI Logo. self.zmi_logo = Image(id='logo', title='', file='') self.zmi_logo.manage_upload(REQUEST['file'], REQUEST) message = self.getZMILangStr('MSG_CHANGED') # Return with message. message = urllib.quote(message) return RESPONSE.redirect( 'manage_customizeDesignForm?lang=%s&manage_tabs_message=%s&cssId=%s' % (lang, message, cssId))
def toCdata(self, s, xhtml=0): rtn = '' # Return Text (HTML) in CDATA as XHTML. from _filtermanager import processCommand processId = 'tidy' if xhtml == 0 \ 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 = 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 xhtml == -1 \ or type(s) is float \ or type(s) is int: rtn = s # Return Text in CDATA. elif s is not None: # Hack for invalid characters s = s.replace(chr(30), '') # Hack for nested CDATA s = re.compile('\<\!\[CDATA\[(.*?)\]\]\>').sub('<!{CDATA{\\1}}>', s) rtn = '<![CDATA[%s]]>' % s # Return. return rtn