def fetchReqBuff(self, key, REQUEST, forced=False): if REQUEST.get('ZMS_FETCH_REQ_BUFF',True): url = REQUEST.get('PSEUDOURL',REQUEST.get('URL','/manage')) url = url[url.rfind('/'):] if forced or not url.find('/manage') >= 0: buff = getReqBuff(self,REQUEST) reqBuffId = getReqBuffId(self,key,REQUEST) try: value = getattr(buff,reqBuffId) return value except: raise zExceptions.InternalError('%s not found in ReqBuff!'%reqBuffId) raise zExceptions.InternalError('ReqBuff is inactive!')
def __call__(self): days = self.request.form.get("days", None) if not days: raise zExceptions.InternalError( "Bad input. Please give days=90 as HTTP GET query parameter") days = int(days) return self.clean(days)
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 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 getHome(self): docElmnt = self.getDocumentElement() ob = docElmnt try: depth = 0 while ob.meta_type != 'Folder': if depth > sys.getrecursionlimit(): raise zExceptions.InternalError('Maximum recursion depth exceeded') depth = depth + 1 ob = ob.aq_parent except: try: ob = getattr( docElmnt, docElmnt.absolute_url().split( '/')[-2]) except: ob = docElmnt.aq_parent return ob
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 recurse_cleanArtefacts(self, level=0): from OFS.CopySupport import absattr # Recursion. last_id = None for ob in self.objectValues(): if absattr(self.id) == absattr(ob.id): print(" " * level) + "recurse_cleanArtefacts", ob.absolute_url( ), ob.meta_type raise zExceptions.InternalError('InfiniteRecursionError') else: try: recurse_cleanArtefacts(ob, level + 1) except "InfiniteRecursionError": print( " " * level ) + "recurse_cleanArtefacts: clean artefact ", ob.absolute_url( ), ob.meta_type self._delObject(absattr(ob.id), suppress_events=True)
def getUserFolders(self): userFolders = [] ob = self depth = 0 while True: if depth > sys.getrecursionlimit(): raise zExceptions.InternalError( "Maximum recursion depth exceeded") depth = depth + 1 if ob is None: break try: localUserFolders = ob.objectValues(user_folder_meta_types) if len(localUserFolders) == 1: localUserFolder = localUserFolders[0] if localUserFolder not in userFolders: userFolders.append(localUserFolder) ob = ob.aq_parent except: ob = None return userFolders
def getUserLangs(self, userObj, aq_parent=1): langs = [] try: langs.extend(list(getattr(userObj, 'langs', ['*']))) except: pass nodes = self.getUserAttr(userObj, 'nodes', {}) ob = self depth = 0 while ob is not None: if depth > sys.getrecursionlimit(): raise zExceptions.InternalError( "Maximum recursion depth exceeded") depth = depth + 1 nodekey = self.getRefObjPath(ob) if nodekey in nodes.keys(): langs = nodes[nodekey]['langs'] break if aq_parent: ob = ob.getParentNode() else: ob = None return langs
def getUserRoles(self, userObj, aq_parent=1): roles = [] try: roles.extend(list(userObj.getRolesInContext(self))) if 'Manager' in roles: roles = self.concat_list(roles, [ 'ZMSAdministrator', 'ZMSEditor', 'ZMSAuthor', 'ZMSSubscriber', 'ZMSUserAdministrator' ]) except: pass nodes = self.getUserAttr(userObj, 'nodes', {}) ob = self depth = 0 while ob is not None: if depth > sys.getrecursionlimit(): raise zExceptions.InternalError( "Maximum recursion depth exceeded") depth = depth + 1 nodekey = self.getRefObjPath(ob) if nodekey in nodes.keys(): roles = self.concat_list(roles, nodes[nodekey]['roles']) break if aq_parent: ob = ob.getParentNode() else: ob = None # Resolve security_roles. security_roles = self.getConfProperty('ZMS.security.roles', {}) for id in filter(lambda x: x in security_roles.keys(), roles): dict = security_roles.get(id, {}) for v in dict.values(): for role in map(lambda x: x.replace(' ', ''), v.get('roles', [])): if role not in roles: roles.append(role) return roles
def http_import(self, url, method='GET', auth=None, parse_qs=0, timeout=5): HTTP_PREFIX = 'http://' # Get Query-String. qs = '' i = url.find('?') if i > 0: qs = url[i + 1:] url = url[:i] # Get Host. host = '' servername = url if servername.startswith(HTTP_PREFIX): servername = servername[len(HTTP_PREFIX):] if servername.find('/') > 0: servername = servername[:servername.find('/')] useproxy = True noproxy = ['localhost', '127.0.0.1'] + filter( lambda x: len(x) > 0, map(lambda x: x.strip(), self.getConfProperty('HTTP.noproxy', '').split(','))) for noproxyurl in noproxy: if fnmatch.fnmatch(servername, noproxyurl): useproxy = False break if useproxy: host = self.getConfProperty('HTTP.proxy', host) if len(host) == 0: # Remove HTTP-Prefix. if url.startswith(HTTP_PREFIX): url = url[len(HTTP_PREFIX):] i = url.find('/') if i > 0: host = url[:i] url = url[i:] else: host = url url = '/' # Get Port. i = host.find(':', max(0, host.find('@'))) port = 80 if i > 0: port = int(host[i + 1:]) host = host[:i] # Open HTTP connection. writeLog( self, "[http_import.%s]: %s:%i --> %s?%s" % (method, host, port, url, qs)) req = HTTP(host, port) # Set request-headers. if method.upper() == 'GET': if len(qs) > 0: qs = '?' + qs req.putrequest(method, url + qs) req.putheader('Host', host) authtobasic(auth, req) req.putheader('Accept', '*/*') req.endheaders() elif method.upper() == 'POST': req.putrequest(method, url) req.putheader('Host', host) authtobasic(auth, req) req.putheader('Accept', '*/*') req.putheader('Content-type', 'application/x-www-form-urlencoded') req.putheader('Content-length', '%d' % len(qs)) req.endheaders() # Send query string req.send(qs) # Send request. reply_code, message, headers = req.getreply() #### get parameter from content if reply_code == 404 or reply_code >= 500: error = "[%i]: %s at %s [%s]" % (reply_code, message, url, method) writeLog(self, "[http_import.error]: %s" % error) raise zExceptions.InternalError(error) elif reply_code == 200: # get content f = req.getfile() content = f.read() f.close() rtn = None if parse_qs: try: # return dictionary of value lists rtn = cgi.parse_qs(content, keep_blank_values=1, strict_parsing=1) except: # return string rtn = content else: # return string rtn = content if port != 80: rtn = rtn.replace('%s%s/' % (HTTP_PREFIX, host), '%s%s:%i/' % (HTTP_PREFIX, host, port)) return rtn else: result = '[' + str(reply_code) + ']: ' + str(message) writeLog(self, "[http_import.result]: %s" % result) return result