Changeset 231


Ignore:
Timestamp:
05/27/09 14:26:20 (5 years ago)
Author:
jon
Message:

Returning writer to use minidom

Location:
collective.imstransport/branches/mini_to_ele/collective/imstransport/utilities/imscc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • collective.imstransport/branches/mini_to_ele/collective/imstransport/utilities/imscc/ccwriter.py

    r230 r231  
    33import md5 
    44import os 
    5 from configcc import IMS_schema, IMS_version, LOM_version, LOM_namespace, LOM_IMSCC_namespace, IMSCP_namespace, WL_namespace 
     5from configcc import IMS_schema, IMS_version, LOM_version, LOM_namespace, LOM_IMSCC_namespace, WL_namespace 
    66from configcc import WL_namespace, WL_schemainst 
    77from configcc import namespaces, schema_locations 
    8 from elementtree import ElementTree 
    98 
    109class CCWriter(object): 
    1110 
    1211    def __init__(self): 
     12        self.document = minidom.Document() 
    1313        self.destination = None 
    1414        self.manifest_node = None 
     
    1919    def createManifest(self, id, ver): 
    2020        """ Create a new empty manifest. """ 
    21         manifest = ElementTree.Element('{%s}manifest' %IMSCP_namespace) 
    22         manifest.set('identifier', id) 
    23         manifest.set('xmlns:version', ver) 
     21        doc = minidom.Document() 
     22        manifest = self._createNode(doc, '', 'manifest',  
     23                         attrs=[('identifier', id), 
     24                                ('xmlns:version', ver),]) 
    2425        self.addNamespaces(manifest, namespaces) 
    2526        self.addSchemaLocations(manifest, schema_locations) 
    26         return manifest 
    27  
    28     def writeTopLevelMetadata(self, manifest, id, title, urlbase, lang, desc=None, keywords=None): 
     27        return doc 
     28 
     29    def writeTopLevelMetadata(self, doc, id, title, urlbase, lang, desc=None, keywords=None): 
    2930        """ Write top level metadata into the manifest. """ 
    30         if manifest is not None: 
    31             md = self._createNode(manifest, '', 'metadata') 
     31        manifest = doc.getElementsByTagName('manifest') 
     32        if manifest: 
     33            md = self._createNode(manifest[0], '', 'metadata') 
    3234            self._createNode(md, '', 'schema', IMS_schema) 
    3335            self._createNode(md, '', 'schemaversion', IMS_version) 
     
    4850                    self._createNode(kn, '', 'string', kw, [('xml:lang', lang)]) 
    4951         
    50     def createOrganizations(self, manifest, orgId, itemId): 
     52    def createOrganizations(self, doc, orgId, itemId): 
    5153        """ Create an organizations section in the manifest """ 
    52         if manifest is not None: 
    53             orgs = self._createNode(manifest, '', 'organizations') 
     54        manifest = doc.getElementsByTagName('manifest') 
     55        if manifest: 
     56            orgs = self._createNode(manifest[0], '', 'organizations') 
    5457            org = self._createNode(orgs, '', 'organization', attrs=[('identifier', orgId), 
    5558                                                                    ('structure', 'rooted-hierarchy')]) 
    5659            item = self._createNode(org, '', 'item', attrs=[('identifier', itemId)]) 
    5760            return item 
    58         return None  
    59  
    60     def createResources(self, manifest): 
    61         if manifest is not None: 
    62             return self._createNode(manifest, '', 'resources') 
     61        return None 
     62 
     63    def createResources(self, doc): 
     64        manifest = doc.getElementsByTagName('manifest') 
     65        if manifest: 
     66            return self._createNode(manifest[0], '', 'resources') 
    6367        return None 
    6468                          
     
    169173    def writeResourceFile(self, res, path): 
    170174        """ Write a file node """ 
    171         return self._createNode(res, '', 'file', attrs=[('href', path)]) 
     175        self._createNode(res, '', 'file', attrs=[('href', path)]) 
     176 
    172177 
    173178    def getManifest(self, manifest): 
    174179        """ Get the manifest expressed in XML. """ 
    175         ElementTree.tostring(manifest, encoding='utf-8') 
    176  
    177     def _createNode(self, parent, nspace, ename, value=None, attrs=None, parentns=True): 
     180        return manifest.toxml(encoding='utf-8') 
     181 
     182 
     183    def _createNode(self, parent, nspace, ename, value=None, attrs=None): 
    178184        """ Create a node in the document. """ 
    179         newnode = None 
     185        newnode = self.document.createElementNS(nspace, ename) 
    180186        if nspace: 
    181             newnode = ElementTree.SubElement(parent, '{%s}%s' %(nspace, ename)) 
    182         else: 
    183             if parentns: 
    184                 tag = parent.tag 
    185                 if tag.find('{') != -1 and tag.find('}') != -1: 
    186                     tstart = tag.find('{') + 1 
    187                     tend = tag.find('}') 
    188                     if tend < tstart: 
    189                         raise ManifestError, 'Incorrectly formatted namespace: %s' %tag 
    190                     namespace = tag[tstart:tend] 
    191                     newnode = ElementTree.SubElement(parent, '{%s}%s' %(namespace, ename)) 
    192                 else: 
    193                     newnode = ElementTree.SubElement(parent, '%s' %ename) 
    194             else: 
    195                 newnode = ElementTree.SubElement(parent, '%s' %ename) 
     187            newnode.setAttribute('xmlns', nspace) 
     188        parent.appendChild(newnode) 
    196189        if value and value != '': 
    197190            if not isinstance(value, unicode): 
    198                 newnode.text = value.decode('utf-8') 
     191                newnode.appendChild(self.document.createTextNode(value.decode('utf-8'))) 
    199192            else: 
    200                 newnode.text = value 
     193                newnode.appendChild(self.document.createTextNode(value)) 
    201194        if attrs: 
    202195            for x in attrs: 
    203                 newnode.set(x[0], x[1]) 
     196                newnode.setAttribute(x[0], x[1]) 
    204197        return newnode 
    205198 
     
    207200        """ Add a namespace to the manifest. """ 
    208201        for namespace in namespaces: 
    209             manifest.set(namespace[0], namespace[1]) 
     202            manifest.setAttribute(namespace[0], namespace[1]) 
    210203 
    211204    def addSchemaLocations(self, manifest, schema_locations): 
    212         manifest.set('xsi:schemaLocation', join(schema_locations, ' ')) 
     205        manifest.setAttribute('xsi:schemaLocation', join(schema_locations, ' ')) 
    213206 
    214207 
    215208    def getTextValue(self, node): 
    216209        """ Removes the text from the text_node of a node """ 
    217         return node.text.strip() 
     210        for x in node.childNodes: 
     211            if x.nodeType == x.TEXT_NODE: 
     212                return x.nodeValue.strip() 
     213        return None         
    218214 
    219215    def getLinkXml(self, title, link): 
    220216        """ Return text for a file that stores the link in an xml file """ 
    221         wlnode = ElementTree.Element('{%s}webLink' %WL_namespace) 
    222         wlnode.set('xmlns:xsi', WL_schemainst) 
     217        doc = minidom.Document() 
     218        wlnode = self._createNode(doc, WL_namespace, 'webLink', 
     219                                  attrs=[('xmlns:xsi', WL_schemainst),('xmlns',WL_namespace)]) 
    223220        self._createNode(wlnode, '', 'title', value=title) 
    224221        self._createNode(wlnode, '', 'url', attrs=[('href',link),('target','_blank')]) 
    225         return ElementTree.tostring(wlnode, encoding='utf-8') 
     222        return wlnode.toxml(encoding='utf-8') 
  • collective.imstransport/branches/mini_to_ele/collective/imstransport/utilities/imscc/imsccwriter.py

    r230 r231  
    99class IMSCCWriter(IMSWriter): 
    1010    """ Write an IMS content package manifest file. """ 
    11  
    12     name = _(u'IMS Common Cartridge') 
    1311 
    1412    def createPackage(self, file, context): 
     
    4240        res = ccw.createResources(doc) 
    4341 
    44         if orgs is not None and res is not None: 
     42        if orgs and res: 
    4543            objs = self._getAllObjects(context) 
    4644            for obj in objs: 
Note: See TracChangeset for help on using the changeset viewer.