Ejemplo n.º 1
0
 def traverse(node, execute):
     rtn = []
     meta_type = node.meta_type
     if node.meta_type in ['Folder']:
         for childNode in node.objectValues():
             rtn.extend(traverse(childNode, execute))
     elif meta_type in zope_objects:
         path = '/'.join(node.getPhysicalPath(
         ))[len('/'.join(self.getHome().getPhysicalPath())) + 1:]
         if path not in exclude_paths:
             i = {}
             i['path'] = path
             i['node'] = node
             i['status'] = []
             if execute and path in request.get('ids', []):
                 id = request['meta_id']
                 oldId = None
                 newId = path
                 newName = path
                 newType = node.meta_type
                 newCustom = zopeutil.readData(node)
                 if type(newCustom) is not str:
                     newCustom = str(newCustom)
                 self.metaobj_manager.setMetaobjAttr(id=id,
                                                     oldId=oldId,
                                                     newId=newId,
                                                     newName=newName,
                                                     newType=newType,
                                                     newCustom=newCustom)
                 i['status'].append(newId)
             rtn.append(i)
     return rtn
Ejemplo n.º 2
0
 def getProcess(self, id):
   processes = self.processes
   process = {}
   if id in processes:
     process = processes.get( id).copy()
   else:
     # Acquire from parent.
     portalMaster = self.getPortalMaster()
     if portalMaster is not None:
       if id in portalMaster.getFilterManager().getProcessIds():
         process = portalMaster.getFilterManager().getProcess(id)
         process['acquired'] = 1
         return process
   process['id'] = id
   process['name'] = process.get('name',process['id'])
   # Synchronize type.
   ob = zopeutil.getObject( self, process['id'])
   if ob is not None:
     process['ob'] = ob
     process['command'] = zopeutil.readData( ob)
   return process
Ejemplo n.º 3
0
 def getProcess(self, id):
   processes = self.processes
   process = {}
   if id in processes:
     process = processes.get( id).copy()
   else:
     # Acquire from parent.
     portalMaster = self.getPortalMaster()
     if portalMaster is not None:
       if id in portalMaster.getProcessIds():
         process = portalMaster.getProcess(id)
         process['acquired'] = 1
   process['id'] = id
   process['name'] = process.get('name',process['id'])
   # Synchronize type.
   try:
     container = self.getHome()
     ob = zopeutil.getObject( container, process['id'])
     process['command'] = zopeutil.readData( ob)
   except:
     pass
   return process
Ejemplo n.º 4
0
def exportObj(obj, filename):

    #-- Try to create directory-tree.
    filename = getOSPath(filename)
    filepath = getFilePath(filename)
    mkDir(filepath)

    #-- Get object data.
    data = None
    # MyBlob
    if isinstance(obj, _blobfields.MyBlob):
        data = obj.getData()
    elif getattr(obj, 'meta_type', None) is not None:
        data = zopeutil.readData(obj)
    else:
        try:  # ImageFile
            f = open(obj.path, 'rb')
            data = f.read()
            f.close()
        except:
            try:
                # data,io.RawIOBase
                data = obj.read()
            except:
                data = obj

    #-- Save to file.
    if data is not None:
        objfile = open(filename, 'wb')
        if isinstance(data, str):
            try:
                data = data.encode("utf-8")
            except:
                pass
        objfile.write(bytes(data))
        objfile.close()
    return data
Ejemplo n.º 5
0
def toXml(self, value, indentlevel=0, xhtml=False, encoding='utf-8'):
    xml = []
    if value is not None:

        # Image
        if isinstance(value, _blobfields.MyImage):
            xml.append('\n' + indentlevel * INDENTSTR + value.toXml(self))

        # File
        elif isinstance(value, _blobfields.MyFile):
            xml.append('\n' + indentlevel * INDENTSTR + value.toXml(self))

        # File (Zope-native)
        elif isinstance(value, File):
            tagname = 'data'
            content_type = value.content_type
            xml.append('\n' + indentlevel * INDENTSTR)
            xml.append('<%s' % tagname)
            xml.append(' content_type="%s"' % content_type)
            xml.append(' filename="%s"' % value.title)
            xml.append(' type="file"')
            xml.append('>')
            data = zopeutil.readData(value)
            cdata = None
            if [
                    x for x in [
                        'text/', 'application/css', 'application/javascript',
                        'image/svg'
                    ] if content_type.startswith(x)
            ]:
                try:
                    # Ensure CDATA is valid.
                    s = '<![CDATA[%s]]>' % data.decode('utf-8')
                    p = pyexpat.ParserCreate()
                    rv = p.Parse(
                        '<?xml version="1.0" encoding="utf-8"?><%s>%s</%s>' %
                        (tagname, s, tagname), 1)
                    cdata = s
                except:
                    pass
            # Otherwise hexlify
            if cdata is None:
                cdata = data.hex()
            xml.append(cdata)
            xml.append('</%s>' % tagname)

        # Dictionaries
        elif isinstance(value, dict):
            keys = sorted(value)
            xml.append('\n' + indentlevel * INDENTSTR)
            xml.append('<dictionary>')
            indentstr = '\n' + (indentlevel + 1) * INDENTSTR
            for x in keys:
                k = ' key="%s"' % x
                xv = value[x]
                tv = getXmlType(xv)
                sv = toXml(self, xv, indentlevel + 2, xhtml, encoding)
                xml.append(indentstr)
                xml.append('<item%s%s>' % (k, tv))
                xml.append(sv)
                if sv.find('\n') >= 0:
                    xml.append(indentstr)
                xml.append('</item>')
            xml.append('\n' + indentlevel * INDENTSTR)
            xml.append('</dictionary>')

        # Lists
        elif isinstance(value, list):
            xml.append('\n' + indentlevel * INDENTSTR)
            xml.append('<list>')
            indentstr = '\n' + (indentlevel + 1) * INDENTSTR
            for xv in value:
                k = ''
                tv = getXmlType(xv)
                sv = toXml(self, xv, indentlevel + 2, xhtml, encoding)
                xml.append(indentstr)
                xml.append('<item%s%s>' % (k, tv))
                xml.append(sv)
                if sv.startswith('\n'):
                    xml.append(indentstr)
                xml.append('</item>')
            xml.append('\n' + indentlevel * INDENTSTR)
            xml.append('</list>')

        # Tuples (DateTime)
        elif isinstance(value, tuple) or isinstance(
                value, time.struct_time) or isinstance(value, DateTime):
            try:
                s_value = self.getLangFmtDate(value, 'eng', 'DATETIME_FMT')
                if len(s_value) > 0:
                    xml.append('\n' + indentlevel * INDENTSTR)
                    xml.append(toCdata(self, s_value, -1))
            except:
                pass

        # Numbers
        elif isinstance(value, int) or isinstance(value, float):
            xml.append(value)

        else:
            # Zope-Objects
            try:
                meta_type = value.meta_type
            except:
                meta_type = None
            if meta_type is not None:
                value = zopeutil.readData(value)
            if value:
                xml.append(toCdata(self, value, xhtml))

    # Return xml.
    return ''.join([str(x) for x in xml])
Ejemplo n.º 6
0
 def localFiles(self, provider, ids=None):
     standard.writeLog(self, "[localFiles]: provider=%s" % str(provider))
     l = {}
     local = provider.provideRepository(ids)
     for id in local:
         o = local[id]
         filename = o.get('__filename__', [id, '__init__.py'])
         # Write python-representation.
         py = []
         py.append('class %s:' % id.replace('.', '_').replace('-', '_'))
         py.append('\t"""')
         py.append('\tpython-representation of %s' % o['id'])
         py.append('\t"""')
         py.append('')
         e = sorted([
             x for x in o if not x.startswith('__') and x == x.capitalize()
             and isinstance(o[x], list)
         ])
         keys = sorted(
             [x for x in o if not x.startswith('__') and x not in e])
         for k in keys:
             v = o.get(k)
             py.append('\t# %s' % k.capitalize())
             py.append('\t%s = %s' %
                       (standard.id_quote(k),
                        standard.str_json(v,
                                          encoding="utf-8",
                                          formatted=True,
                                          level=2,
                                          allow_booleans=False)))
             py.append('')
         for k in e:
             v = o.get(k)
             if v and isinstance(v, list):
                 py.append('\t# %s' % k.capitalize())
                 py.append('\tclass %s:' %
                           standard.id_quote(k).capitalize())
                 for i in v:
                     if 'id' in i:
                         ob = i.get('ob')
                         if ob is not None:
                             fileexts = {
                                 'DTML Method': '.dtml',
                                 'DTML Document': '.dtml',
                                 'External Method': '.py',
                                 'Page Template': '.zpt',
                                 'Script (Python)': '.py',
                                 'Z SQL Method': '.zsql'
                             }
                             fileprefix = i['id'].split('/')[-1]
                             data = zopeutil.readData(ob)
                             # if type(data) is unicode:
                             #   data = standard.pystr2(data)
                             version = ''
                             if hasattr(ob, '_p_mtime'):
                                 version = standard.getLangFmtDate(
                                     DateTime(ob._p_mtime).timeTime(),
                                     'eng')
                             d = {}
                             d['id'] = id
                             d['filename'] = os.path.sep.join(
                                 filename[:-1] + [
                                     '%s%s' %
                                     (fileprefix,
                                      fileexts.get(ob.meta_type, ''))
                                 ])
                             d['data'] = data
                             d['version'] = version
                             d['meta_type'] = ob.meta_type
                             l[d['filename']] = d
                         if 'ob' in i:
                             del i['ob']
                         try:
                             py.append(
                                 '\t\t%s = %s' %
                                 (self.id_quote(i['id']),
                                  standard.str_json(i,
                                                    encoding="utf-8",
                                                    formatted=True,
                                                    level=3,
                                                    allow_booleans=False)))
                         except:
                             py.append(
                                 '\t\t# ERROR: ' + standard.writeError(
                                     self, 'can\'t localFiles \'%s\'' %
                                     i['id']))
                         py.append('')
         d = {}
         d['__icon__'] = o.get('__icon__')
         d['__description__'] = o.get('__description__')
         d['id'] = id
         d['filename'] = os.path.sep.join(filename)
         d['data'] = '\n'.join(py)
         try:
             d['version'] = [
                 int(x) for x in o.get('revision', '0.0.0').split('.')
             ]
         except:
             d['version'] = [0, 0, 0]
         d['meta_type'] = 'Script (Python)'
         l[d['filename']] = d
     return l