Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
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")
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
 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
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
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()
Ejemplo n.º 12
0
 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
Ejemplo n.º 13
0
 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
Ejemplo n.º 14
0
 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
Ejemplo n.º 15
0
 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
Ejemplo n.º 16
0
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)
Ejemplo n.º 17
0
 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
Ejemplo n.º 18
0
 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
Ejemplo n.º 19
0
 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
Ejemplo n.º 20
0
    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
Ejemplo n.º 21
0
 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
Ejemplo n.º 22
0
 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
Ejemplo n.º 23
0
 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
Ejemplo n.º 24
0
        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)
Ejemplo n.º 25
0
 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))
Ejemplo n.º 26
0
    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
Ejemplo n.º 27
0
 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
Ejemplo n.º 28
0
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))
Ejemplo n.º 29
0
 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
Ejemplo n.º 30
0
 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