def addExternalMethod(container, id, title, data): """ Add External Method to container. """ m = id filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py' # Acquired external methods. if m.find('.') > 0 and os.path.exists(filepath): id = m[m.find('.')+1:] f = id # Other. else: m = getExternalMethodModuleName(container, id) f = id # If data is given then save to file in Extensions-folder. if data: filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py' _fileutil.exportObj( data, filepath) elif m != f: context = container while context is not None: m = getExternalMethodModuleName(context, id) filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py' if os.path.exists(filepath): break context = context.getParentNode() ExternalMethod.manage_addExternalMethod( container, id, title, m, f)
def readData(ob, default=None): """ Read data of Zope-object. """ data = default if ob is None and default is not None: return default if ob.meta_type in [ 'DTML Document', 'DTML Method', 'Filesystem DTML Document', 'Filesystem DTML Method']: data = ob.raw elif ob.meta_type in [ 'File', 'Filesystem File', 'Filesystem Image', 'Image']: data = ob.data if not standard.is_bytes(data): b = b'' while data is not None: b += data.data data = data.next data = b elif ob.meta_type in [ 'Filesystem Page Template', 'Filesystem Script (Python)', 'Page Template', 'Script (Python)']: data = ob.read() elif ob.meta_type in [ 'External Method']: if isinstance(ob,MissingArtefactProxy): return ob.getData() else: context = ob id = ob.getId() while context is not None: m = getExternalMethodModuleName(context, id) filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py' if os.path.exists(filepath): break try: context = context.getParentNode() except: context = None if context is None: m = id filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py' if os.path.exists(filepath): f = open(filepath, 'rb') data = standard.pystr(f.read(),encoding='utf-8') f.close() elif ob.meta_type == 'Z SQL Method': lines = [] lines.append('<connection>%s</connection>'%ob.connection_id) lines.append('<params>%s</params>'%ob.arguments_src) lines.append('<max_rows>%i</max_rows>'%ob.max_rows_) lines.append('<max_cache>%i</max_cache>'%ob.max_cache_) lines.append('<cache_time>%i</cache_time>'%ob.cache_time_) lines.append(ob.src) data = '\n'.join(lines) return data
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 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 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 get_conf_basepath(self, id=''): basepath = self.get_conf_property('ZMS.conf.path') basepath = basepath.replace('$INSTANCE_HOME', standard.getINSTANCE_HOME()) basepath = basepath.replace( '$HOME_ID', "/".join([ x.getHome().id for x in self.breadcrumbs_obj_path() if x.meta_id == 'ZMS' ])) basepath = basepath.replace("/", os.path.sep) basepath = os.path.join(basepath, id) return basepath
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 removeObject(container, id, removeFile=True): """ Remove Zope-object from container. """ #try: container.writeBlock("[zopeutil.removeObject]: %s@%s -%s"%(container.meta_type,container.absolute_url(),id)) #except: pass if id in container.objectIds(): ob = getattr(container, id) if ob.meta_type == 'External Method' and removeFile: m = getExternalMethodModuleName(container, id) filepath = standard.getINSTANCE_HOME()+'/Extensions/'+m+'.py' if os.path.exists(filepath): os.remove(filepath) container.manage_delObjects(ids=[id])
def getINSTANCE_HOME(self): warn(self, 'getINSTANCE_HOME', 'Products.zms.standard.getINSTANCE_HOME') return standard.getINSTANCE_HOME()
def tail_event_log(self, linesback=100, returnlist=True): filename = os.path.join(standard.getINSTANCE_HOME(),'var','log','event.log') return _fileutil.tail_lines(filename,linesback,returnlist)
def manage_export(self, export_format, lang, REQUEST, RESPONSE): """ Exportable.manage_export """ title = self.getHome().id + '_' + self.id_quote( self.getTitlealt(REQUEST)) # Get export format. try: export_format = int(export_format) except: pass get_data = REQUEST.get('download', 1) == 1 # ZEXP. if export_format == 0: filename = '%s.zexp' % self.id export = self.aq_parent.manage_exportObject(id=self.id, download=1) content_type = 'application/data' # HTML. elif export_format == 1: filename = '%s_html.zip' % title export = self.toZippedHtml(REQUEST, get_data) content_type = 'application/zip' # XML. elif export_format == 2: filename = '%s_xml.zip' % title export = self.toZippedXml(REQUEST, get_data) content_type = 'application/zip' # myXML. elif export_format == 3: instance_home = standard.getINSTANCE_HOME() package_home = standard.getPACKAGE_HOME() package_home = os.path.normpath(package_home) REQUEST.set('ZMS_FILTER_INSTANCE_HOME', instance_home) REQUEST.set('ZMS_FILTER_PACKAGE_HOME', package_home) filename = '%s.xml' % title export = self.getXmlHeader() + getattr( self, 'getObjToXml_DocElmnt')(context=self) content_type = 'text/xml' # Export Filter. elif export_format in self.getFilterManager().getFilterIds(): if REQUEST.get('debug'): url = self.url_append_params('manage_importexportDebugFilter', { 'lang': lang, 'filterId': export_format, 'debug': 1 }) return RESPONSE.redirect(url) else: filename, export, content_type = _filtermanager.exportFilter( self, export_format, REQUEST) # return export for download to browser if get_data: RESPONSE.setHeader('Content-Type', content_type) RESPONSE.setHeader('Content-Disposition', 'inline;filename="%s"' % filename) return export else: message = 'Exported to %s (%s)' % (export, content_type) url = '%s/manage_importexport' % self.absolute_url() url = self.url_append_params(url, { 'lang': lang, 'manage_tabs_message': message }) RESPONSE.redirect(url)
def getLocation(self): return self.location.replace('$INSTANCE_HOME', standard.getINSTANCE_HOME())