def _importXml(self, item): itemType = item.get('type') itemOb = item.get('value') if itemType == 'filter': newId = itemOb.get('id') newAcquired = 0 newName = itemOb.get('name') newFormat = itemOb.get('format') newContentType = itemOb.get('content_type') newDescription = itemOb.get('description', '') newRoles = itemOb.get('roles', []) newMetaTypes = itemOb.get('meta_types', []) self.setFilter(None, newId, newAcquired, newName, newFormat, newContentType, newDescription, newRoles, newMetaTypes) index = 0 for process in itemOb.get('processes', []): newProcessId = process.get('id') newProcessFile = process.get('file') self.setFilterProcess(newId, index, newProcessId, newProcessFile) index += 1 elif itemType == 'process': newId = itemOb.get('id') newAcquired = 0 newName = itemOb.get('name') newType = itemOb.get('type', 'process') newCommand = itemOb.get('command') self.setProcess(None, newId, newAcquired, newName, newType, newCommand) else: standard.writeError(self, "[_importXml]: Unknown type >%s<"%itemType)
def exportFolder(self, root, path, id, REQUEST, depth=0): if hasattr(root, id): folder = getattr(root, id) for ob in folder.objectValues(): ob_id = ob.getId() if ob.meta_type == 'Folder': exportFolder(self, ob, '%s/%s' % (path, id), ob_id, REQUEST, depth + 1) elif 'content' not in folder.objectIds(['ZMS']): if ob.meta_type in [ 'DTML Document', 'DTML Method', 'Page Template', 'Script (Python)' ]: try: if ob.meta_type in [ 'DTML Document', 'DTML Method', 'Page Template' ]: v = ob(ob, REQUEST) elif ob.meta_type in ['Script (Python)']: v = ob() v = localHtml(ob, v) v = localIndexHtml( self, ob, len(ob.absolute_url().split('/')) - len(root.absolute_url().split('/')) + depth, v) ob = v except: standard.writeError(self, "[exportFolder]") _fileutil.exportObj(ob, '%s/%s/%s' % (path, id, ob_id))
def cb(node, d): xml = [] xml.append('<doc>') text = [] for k in d: name = k boost = 1.0 v = d[k] if k not in ['id']: if k in attrs: boost = attrs[k]['boost'] if isinstance(v, str): name = '%s_t' % k text.append(v) else: if isinstance(v, str): name = '%s_s' % k xml.append('<field name="%s" boost="%.1f">%s</field>' % (name, boost, v)) xml.append('<field name="text_t">%s</field>' % ' '.join([x for x in text if x])) xml.append('</doc>') try: results.extend(xml) except: standard.writeError(node, "can't cb")
def updateChanges(self, ids, override=False): standard.writeLog(self, "[updateChanges]: ids=%s" % str(ids)) standard.triggerEvent(self, 'beforeUpdateRepositoryEvt') success = [] failure = [] repositories = {} for i in ids: # Initialize. provider_id = i[:i.find(':')] id = i[i.find(':') + 1:] provider = getattr(self, provider_id) # Read repositories for provider. if provider_id not in repositories: repositories[provider_id] = self.readRepository(provider) repository = repositories[provider_id] # Update. try: r = repository[id] provider.updateRepository(r) success.append(id) except: standard.writeError(self, "[updateChanges]: can't %s" % id) failure.append(id) standard.triggerEvent(self, 'afterUpdateRepositoryEvt') return success, failure
def exportExternalResources(self, obj, html, path, REQUEST): domains = [] for domain in self.getConfProperty('ZMS.export.domains', '').split(','): domain = domain.strip() if len(domain) > 0: domains.append(domain) if len(domains) == 0: return html for http_prefix in ['http:']: i = html.find(http_prefix) while i > 0: d = rfindDelimiter(html[:i]) # search delimiter ' or " k = rfindDelimiter( html[:d], '=') # search equal-sign between attribute name t = rfindDelimiter(html[:k], '<') # search start of tag # <img src="url"> # <a href='url'"> if (html[ t + 1: t + 4].lower() == 'img' and html[ k - 3: k].lower() == 'src') \ or (html[ t + 1].lower() == 'a' and html[ k - 4: k].lower() == 'href'): l = findDelimiter(html[d + 1:]) url = html[d + 1:d + l + 1] for domain in domains: if domain in url: try: standard.writeLog( self, '[exportExternalResources]: url=%s' % url) s_new = s_old = url for repl in ':/%&?;=': s_new = s_new.replace(repl, '_') # test if extension is a real extension at the end ? # http://host:port/uri.gif?a=x&b=k => http___host_port_uri.gif_a_x_b_k.gif # http://host:port/uri.gif => http__host_port_uri.gif # http://host:port/draw/ID/png => http__host_port_draw_ID_png.png # http://host:port/draw/ID?fmt=pdf&scale=2 => http__host_port_draw_ID_fmt_pdf_scale_2.pdf for ext in [ 'gif', 'jpg', 'png', 'pdf', 'csv', 'xls', 'doc', 'ppt' ]: if ext in url: if s_new[-len(ext) - 1:] != '.%s' % ext: s_new = "%s.%s" % (s_new, ext) break ext_path = '%s/%s' % (path, s_new) if not os.path.exists(ext_path): data = self.http_import(url) f = open(ext_path, 'w') f.write(data) f.close() html = html.replace(s_old, s_new) except: standard.writeError( self, '[exportExternalResources]: url=%s' % url) break i = html.find(http_prefix, i + len(http_prefix)) return html
def cb(node, d): if node.meta_id in ['ZMSFile']: try: # pdfminer.six (https://github.com/pdfminer/pdfminer.six) # Pdfminer.six is a community maintained fork of the original PDFMiner. # It is a tool for extracting information from PDF documents. It focuses # on getting and analyzing text data. Pdfminer.six extracts the text # from a page directly from the sourcecode of the PDF. # pip install pdfminer.six from io import BytesIO, StringIO from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.pdfpage import PDFPage from pdfminer.pdfparser import PDFParser output_string = StringIO() ob_file = node.attr('file') in_file = BytesIO(ob_file.getData()) parser = PDFParser(in_file) standard.writeError(node, "pdfminer: doc") doc = PDFDocument(parser) rsrcmgr = PDFResourceManager() device = TextConverter(rsrcmgr, output_string, laparams=LAParams()) interpreter = PDFPageInterpreter(rsrcmgr, device) for page in PDFPage.create_pages(doc): interpreter.process_page(page) v = output_string.getvalue() d['standard_html'] = v except: standard.writeError(node, "can't pdfminer") d['standard_html'] = '@@%s:%s' % ('/'.join( node.getPhysicalPath()), 'file') doc = [] doc.append('<doc>') text = [] for k in d: name = k boost = 1.0 v = d[k] if k not in ['id']: if k in attrs: boost = attrs[k]['boost'] if isinstance(v, str): name = '%s_t' % k text.append(v) else: if isinstance(v, str): name = '%s_s' % k if name.endswith("_t"): v = '<![CDATA[%s]]>' % (standard.remove_tags(v)) doc.append('<field name="%s" boost="%.1f">%s</field>' % (name, boost, v)) doc.append('<field name="text_t"><![CDATA[%s]]></field>' % (standard.remove_tags(' '.join([x for x in text if x])))) doc.append('</doc>') xml.extend(doc)
def thumbnailImage(self, hiresKey, loresKey, maxdim, lang, REQUEST): message = '' try: if hiresKey in self.getObjAttrs() and REQUEST.get('generate_preview_%s_%s'%(hiresKey,lang),0) == 1: pilutil.generate_preview(self, hiresKey, loresKey, maxdim) except: standard.writeError( self, '[thumbnailImage]') return message
def reindex_all(self): try: for connector in self.getConnectors(): connector.reindex_all() return True except: standard.writeError(self, "can't reindex_all") return False
def getPortalMaster(self): v = self.get_conf_properties().get('Portal.Master', '') if len(v) > 0: try: return getattr( self, v).content except: standard.writeError(self, '[getPortalMaster]: %s not found!'%str(v)) return None
def getRemoteObj(self): value = None ref = self.getRef() try: value = self.http_import( ref + '/ajaxGetNode?lang=%s'%lang) value = _xmllib.xmlParse( value) except: standard.writeError(self, '[getRemoteObj]: can\'t embed from remote: ref=%s'%ref) return value
def writeFile(self, filename, data, mode='w', encoding='utf-8'): try: f = codecs.open(filename, mode=mode, encoding=encoding) f.write(data) f.close() except: standard.writeError(self, "[writeFile]") f = open(filename, mode=mode) f.write(data) f.close()
def getPortalClients(self): docElmnts = [] v = self.get_conf_properties().get('Portal.Clients', []) if len(v) > 0: thisHome = self.getHome() for id in v: try: docElmnts.append(getattr(thisHome, id).content) except: standard.writeError(self, '[getPortalClients]: %s not found!'%str(id)) return docElmnts
def getProcessIds(self, sort=True): obs = self.processes ids = list(obs) portalMaster = self.getPortalMaster() if portalMaster is not None: try: ids = list(set(ids+portalMaster.getProcessIds())) except: standard.writeError(self, "[portalMaster]: AttributeError: getProcessIds") if sort: ids = sorted(ids,key=lambda x:self.getProcess(x)['name']) return ids
def retrieveFile(self, filename): filename = filename.replace('..', '') try: location = self.getLocation() if not filename.startswith(location): filename = os.path.join(location, filename) f = open(filename, 'rb') data = f.read() f.close() except: standard.writeError(self, "can't retrieveFile") data = '' return data
def manage_ajaxDragDrop(self, lang, target, REQUEST, RESPONSE): """ ZMSContainerObject.manage_ajaxDragDrop internal use only """ rc = 0 message = self.getZMILangStr('MSG_PASTED') try: before = False into = False if target.startswith('-'): before = True target = target[1:] elif target.endswith('-'): target = target[:-1] else: into = True ob = self.getLinkObj(target) sort_id = ob.getSortId() if into: sort_id = 0 else: ob = ob.getParentNode() if before: sort_id = sort_id - 1 else: sort_id = sort_id + 1 self.setSortId(sort_id) cb_copy_data = self.getParentNode().manage_cutObjects([self.id]) ob.manage_pasteObjects(cb_copy_data) ob.normalizeSortIds() except: tp, vl, tb = sys.exc_info() rc = -1 message = str(tp) + ': ' + str(vl) standard.writeError(self, '[manage_ajaxDragDrop]') #-- Build xml. RESPONSE = REQUEST.RESPONSE content_type = 'text/xml; charset=utf-8' filename = 'manage_ajaxDragDrop.xml' RESPONSE.setHeader('Content-Type', content_type) RESPONSE.setHeader('Content-Disposition', 'inline;filename="%s"' % filename) RESPONSE.setHeader('Cache-Control', 'no-cache') RESPONSE.setHeader('Pragma', 'no-cache') self.f_standard_html_request(self, REQUEST) xml = self.getXmlHeader() xml += '<result code="%i" message="%s">\n' % (rc, message) xml += "</result>\n" return xml
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 renderText( self, format, key, text, REQUEST, id=None, clazz=None): # Process format. if format is not None: textformat = self.getTextFormat( format, REQUEST) if textformat is not None and len( text) > 0: text = textformat.renderText( text, REQUEST, id, clazz) # Custom hook. try: name = 'renderCustomText' if hasattr(self, name): text = getattr(self, name)(context=self, key=key, text=text, REQUEST=REQUEST) except: standard.writeError( self, '[renderText]: can\'t %s'%name) # Return. return text
def reindex_node(self, node, forced=False): try: if self.getConfProperty('ZMS.CatalogAwareness.active', 1) or forced: for connector in self.getConnectors(): # Check meta-id. nodes = node.breadcrumbs_obj_path() nodes.reverse() for node in nodes: if node.meta_id in self.getIds(): connector.reindex_node(node) break return True except: standard.writeError( self, "can't reindex_node") return False
def catalog_object(self, catalog, node, regenerate_duplicates=False): printed = [] # Index names. index_names = self.get_index_names(False) # Prepare object. for attr_id in index_names: attr_name = 'zcat_%s'%attr_id value = node.attr(attr_id) setattr(node,attr_name,value) path = node.getPath() # Sanity check: if uid is already catalogued we have to generate new uid uid = node.get_uid() q = catalog({'get_uid':uid}) if len(q) > 0: if regenerate_duplicates: node.get_uid(forced=True) printed.append('ERROR %s'%standard.writeError(node,'[ZMSIndex] WARNING duplicate uid: %s->%s'%(uid,node.get_uid()))) # Catalog object. catalog.catalog_object(node, path) # Unprepare object. for attr_id in index_names: attr_name = 'zcat_%s'%attr_id delattr(node,attr_name) # return printed return printed
def renderShort(self, REQUEST): rtn = '' ref_obj = self.getRefObj() ref = self.getObjProperty('attr_ref', REQUEST) if self.getEmbedType() == 'remote': try: rtn += self.http_import(ref + '/renderShort') except: rtn += standard.writeError( self, '[renderShort]: can\'t embed from remote: ref=%s' % ref) elif self.isEmbedded(REQUEST): REQUEST.set('ZMS_RELATIVATE_URL', False) if ref_obj is None: ref_obj = self.getLinkObj(ref) if ref_obj is None or ref_obj.isPage(): rtn += super(ZMSLinkElement, self).renderShort(REQUEST) elif ref_obj != self: rtn += ref_obj.renderShort(REQUEST) REQUEST.set('ZMS_RELATIVATE_URL', True) else: rtn += self._getBodyContent(REQUEST) return rtn
def toXhtml(self, REQUEST, deep=True): standard.writeLog(self, '[toXhtml]') level = 0 html = '' if 'ZMS_PAGE_HTML_HEADER' in REQUEST: html += getattr(self, REQUEST.get('ZMS_PAGE_HTML_HEADER'))(self, REQUEST) else: html += '<html>\n' html += '<head>\n' html += self.f_headMeta_Locale(self, REQUEST) html += '<title>%s</title>\n' % self.getTitle(REQUEST) html += '</head>\n' html += '<body>\n' print_html = self.printHtml(level, _globals.MySectionizer(), REQUEST, deep) try: html += print_html except: html += standard.writeError(self, "[toXhtml]: can't append printHtml") if 'ZMS_PAGE_HTML_FOOTER' in REQUEST: html += getattr(self, REQUEST.get('ZMS_PAGE_HTML_FOOTER'))(self, REQUEST) else: html += '</body>\n' html += '</html>\n' html = localHtml(self, html) html = localIndexHtml(self, self, level, html, xhtml=True) return html
def _getBodyContent(self, REQUEST): rtn = '' if self.getEmbedType() == 'remote': ref = self.getObjProperty('attr_ref', REQUEST) try: rtn += self.http_import( ref+'/ajaxGetBodyContent') except: rtn += standard.writeError(self, '[_getBodyContent]: can\'t embed from remote: ref=%s'%ref) else: if self.isEmbedded(REQUEST): REQUEST.set('ZMS_RELATIVATE_URL', False) proxy = self.getProxy() if proxy != self and proxy is not None and self.isEmbeddedRecursive( self.REQUEST): rtn += proxy._getBodyContent(REQUEST) elif proxy == self and proxy is not None and self.isEmbedded( REQUEST): ref_obj = self.getRefObj() if ref_obj is None: ref = self.getObjProperty('attr_ref', REQUEST) ref_obj = self.getLinkObj(ref) if ref_obj is not None and ref_obj != self: rtn += ref_obj._getBodyContent( REQUEST) else: rtn = self._getBodyContentContentEditable(self.metaobj_manager.renderTemplate( self)) if self.isEmbedded(REQUEST): REQUEST.set('ZMS_RELATIVATE_URL', True) return rtn
def traverse(base, path, level=0): names = os.listdir(path) for name in names: filepath = os.path.join(path, name) if os.path.isdir(filepath) and (deep or level == 0): traverse(base, filepath, level + 1) elif name.startswith('__') and name.endswith('__.py'): # Read python-representation of repository-object standard.writeLog(self, "[readRepository]: read %s" % filepath) f = open(filepath, "rb") py = standard.pystr(f.read()) f.close() # Analyze python-representation of repository-object d = {} try: c = get_class(py) d = c.__dict__ except: d['revision'] = standard.writeError( self, "[readRepository]: ") id = d.get('id', name) r[id] = {} for k in [x for x in d if not x.startswith('__')]: v = d[k] if inspect.isclass(v): dd = v.__dict__ v = [] for kk in [ x for x in dd if not x.startswith('__') ]: vv = dd[kk] # Try to read artefact. if 'id' in vv: fileprefix = vv['id'].split('/')[-1] for file in [ x for x in names if x == fileprefix or x.startswith('%s.' % fileprefix) ]: artefact = os.path.join(path, file) standard.writeLog( self, "[readRepository]: read artefact %s" % artefact) f = open(artefact, "rb") data = f.read() f.close() try: if isinstance(data, bytes): data = data.decode('utf-8') except: pass vv['data'] = data break v.append((py.find('\t\t%s =' % kk), vv)) v.sort() v = [x[1] for x in v] r[id][k] = v
def add_catalog_index(node, d): for k in d: v = d[k] if isinstance(v, dict): def to_xml(o): xml = '' if isinstance(o, list): for i in o: xml += '<%s>' % i['__nodeName__'] xml += to_xml(i) xml += '</%s>' % i['__nodeName__'] elif isinstance(o, dict): for k in [x for x in o if x != '__nodeName__']: xml += '<%s>' % k xml += to_xml(o[k]) xml += '</%s>' % k else: xml = str(o) return xml d[k] = '<![CDATA[<%s>%s</%s>]]>' % (k, to_xml(v), k) lang = node.REQUEST.get('lang') d['id'] = '%s_%s' % (d['id'], lang) d['lang'] = lang for attr_id in self.getAttrIds(): attr_type = self.getAttrs().get(attr_id, {}).get('type', 'string') value = '' try: value = node.attr(attr_id) except: msg = '[@%s.get_sitemap]: can\'t get attr \'%s.%s\' - see error-log for details' % ( node.getHome().id, node.meta_id, attr_id) standard.writeError(self, msg) if msg not in result: result.append(msg) if attr_type in ['date', 'datetime']: value = self.getLangFmtDate(value, 'eng', 'ISO8601') elif type(value) in (dict, list): value = standard.str_item(value, f=True) print(value) value = str(value) d[attr_id] = remove_tags(self, value) cb(node, d)
def __init__(self, filters={}, processes={}): self.id = 'filter_manager' self.filters = {} for x in filters: try: self.setFilter(None, x['id'], x['acquired'], x['name'], x['format'], x['content_type'], x['description'], x['roles'], x['meta_types']) index = 0 for p in x.get('processes', []): self.setFilterProcess(x['id'], index, p['id'], p['file']) index += 1 except: standard.writeError(self,'can\'t __init__ filter: %s'%str(x)) self.processes = {} for x in processes: try: self.setProcess(None, x['id'], x['acquired'], x['name'], x['type'], x['command']) except: standard.writeError(self,'can\'t __init__ process: %s'%str(x))
def _get_cb_copy_data(self, cb_copy_data=None, REQUEST=None): cp = None if cb_copy_data is not None: cp = cb_copy_data else: if REQUEST and '__cp' in REQUEST: cp = REQUEST['__cp'] if cp is None: raise CopyError(eNoData) try: cp = _cb_decode(cp) except: standard.writeError(self, '[CopySupport._get_cb_copy_data]: eInvalid') raise CopyError(eInvalid) return cp
def getData(self, parent=None): """ Returns data. """ data = '' mediadbfile = self.getMediadbfile() if mediadbfile is not None: if parent is None: parent = self.aq_parent mediadb = parent.getMediaDb() if mediadb is not None: try: data = mediadb.retrieveFile( mediadbfile) except: standard.writeError( parent, "[getData]: can't retrieve file from mediadb: %s"%standard.pystr(mediadbfile)) else: data = getattr(self, 'data', '') return data
def manage_addZMSCustom(self, meta_id, lang, _sort_id, btn, REQUEST, RESPONSE): """ manage_addZMSCustom """ message = '' messagekey = 'manage_tabs_message' t0 = time.time() target = self.absolute_url() if btn == 'BTN_INSERT': # Create meta_id = REQUEST.get('ZMS_INSERT',meta_id) id_prefix = standard.id_prefix(REQUEST.get('id_prefix', 'e')) new_id = self.getNewId(id_prefix) globalAttr = self.dGlobalAttrs.get(meta_id, self.dGlobalAttrs['ZMSCustom']) constructor = globalAttr.get('obj_class', self.dGlobalAttrs['ZMSCustom']['obj_class']) obj = constructor(new_id, _sort_id+1, meta_id) self._setObject(obj.id, obj) metaObj = self.getMetaobj( meta_id) redirect_self = bool( REQUEST.get( 'redirect_self', 0)) or REQUEST.get( 'btn', '') == '' or metaObj['type'] == 'ZMSRecordSet' for attr in metaObj['attrs']: attr_type = attr['type'] redirect_self = redirect_self or attr_type in self.getMetaobjIds()+['*'] redirect_self = redirect_self and not REQUEST.get('btn', '') in [ 'BTN_CANCEL', 'BTN_BACK'] if metaObj['type'] == 'ZMSRecordSet': lang = self.getPrimaryLanguage() obj = getattr(self, obj.id) try: # Object State obj.setObjStateNew(REQUEST) # Init Coverage coverage = self.getDCCoverage(REQUEST) if coverage.find('local.')==0: obj.setObjProperty('attr_dc_coverage', coverage) else: obj.setObjProperty('attr_dc_coverage', 'global.'+lang) # Change Properties obj.changeProperties(lang) # Normalize Sort-Ids self.normalizeSortIds(id_prefix) # Message message = self.getZMILangStr('MSG_INSERTED')%obj.display_type(REQUEST) except: message = standard.writeError(self, "[manage_addZMSCustom]") messagekey = 'manage_tabs_error_message' message += ' (in '+str(int((time.time()-t0)*100.0)/100.0)+' secs.)' # Return with message. if redirect_self: target = '%s/%s'%(target, obj.id) target = REQUEST.get( 'manage_target', '%s/manage_main'%target) target = self.url_append_params( target, { 'lang': lang, messagekey: message}) target = '%s#zmi_item_%s'%( target, obj.id) RESPONSE.redirect(target) else: RESPONSE.redirect('%s/manage_main?lang=%s'%(target, lang))
def suggest_xml(self, q, fq='', limit=5, REQUEST=None, RESPONSE=None): """ ZMSZCatalogConnector.suggest_xml """ # Check constraints. REQUEST.set('lang', REQUEST.get('lang', self.getPrimaryLanguage())) RESPONSE = REQUEST.RESPONSE content_type = 'text/xml;charset=utf-8' RESPONSE.setHeader('Content-Type', content_type) RESPONSE.setHeader('Cache-Control', 'no-cache') RESPONSE.setHeader('Pragma', 'no-cache') # Execute query. status = 0 msg = '' results = [] try: results = self.suggest(q, limit) except: standard.writeError(self, '[suggest_xml]') t, v, tb = sys.exc_info() status = 400 msg = v # Assemble xml. xml = self.getXmlHeader() xml += '<response>' xml += '<lst name="responseHeader">' xml += '<int name="status">%i</int>' % status xml += '</lst>' if status > 0: xml += '<lst name="error">' xml += '<int name="msg">%s</int>' % msg xml += '<int name="code">%i</int>' % status xml += '</lst>' else: xml += '<lst>' xml += '<lst name="suggestions">' xml += '<int name="numFound">%i</int>' % len(results) xml += '<arr name="suggestion">' for result in results: xml += '<str>%s</str>' % result xml += '</arr>' xml += '</lst>' xml += '</lst>' xml += '</response>' return xml
def getHeight(self): """ Get height of this image. @return: the height of this image. @rtype: C{int} """ h = self.height if not h: try: size = svgutil.get_dimensions(self) if size is not None: self.width = int(size[0]) self.height = int(size[1]) h = self.height except: standard.writeError(self.aq_parent, 'can\'t getHeight') if not h: h = self.aq_parent.getConfProperty('ZMS.image.default.height', 400) return h