Changeset 231
- Timestamp:
- 05/27/09 14:26:20 (4 years ago)
- Location:
- collective.imstransport/branches/mini_to_ele/collective/imstransport/utilities/imscc
- Files:
-
- 2 edited
-
ccwriter.py (modified) (5 diffs)
-
imsccwriter.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
collective.imstransport/branches/mini_to_ele/collective/imstransport/utilities/imscc/ccwriter.py
r230 r231 3 3 import md5 4 4 import os 5 from configcc import IMS_schema, IMS_version, LOM_version, LOM_namespace, LOM_IMSCC_namespace, IMSCP_namespace,WL_namespace5 from configcc import IMS_schema, IMS_version, LOM_version, LOM_namespace, LOM_IMSCC_namespace, WL_namespace 6 6 from configcc import WL_namespace, WL_schemainst 7 7 from configcc import namespaces, schema_locations 8 from elementtree import ElementTree9 8 10 9 class CCWriter(object): 11 10 12 11 def __init__(self): 12 self.document = minidom.Document() 13 13 self.destination = None 14 14 self.manifest_node = None … … 19 19 def createManifest(self, id, ver): 20 20 """ 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),]) 24 25 self.addNamespaces(manifest, namespaces) 25 26 self.addSchemaLocations(manifest, schema_locations) 26 return manifest27 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): 29 30 """ 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') 32 34 self._createNode(md, '', 'schema', IMS_schema) 33 35 self._createNode(md, '', 'schemaversion', IMS_version) … … 48 50 self._createNode(kn, '', 'string', kw, [('xml:lang', lang)]) 49 51 50 def createOrganizations(self, manifest, orgId, itemId):52 def createOrganizations(self, doc, orgId, itemId): 51 53 """ 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') 54 57 org = self._createNode(orgs, '', 'organization', attrs=[('identifier', orgId), 55 58 ('structure', 'rooted-hierarchy')]) 56 59 item = self._createNode(org, '', 'item', attrs=[('identifier', itemId)]) 57 60 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') 63 67 return None 64 68 … … 169 173 def writeResourceFile(self, res, path): 170 174 """ Write a file node """ 171 return self._createNode(res, '', 'file', attrs=[('href', path)]) 175 self._createNode(res, '', 'file', attrs=[('href', path)]) 176 172 177 173 178 def getManifest(self, manifest): 174 179 """ 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): 178 184 """ Create a node in the document. """ 179 newnode = None185 newnode = self.document.createElementNS(nspace, ename) 180 186 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) 196 189 if value and value != '': 197 190 if not isinstance(value, unicode): 198 newnode. text = value.decode('utf-8')191 newnode.appendChild(self.document.createTextNode(value.decode('utf-8'))) 199 192 else: 200 newnode. text = value193 newnode.appendChild(self.document.createTextNode(value)) 201 194 if attrs: 202 195 for x in attrs: 203 newnode.set (x[0], x[1])196 newnode.setAttribute(x[0], x[1]) 204 197 return newnode 205 198 … … 207 200 """ Add a namespace to the manifest. """ 208 201 for namespace in namespaces: 209 manifest.set (namespace[0], namespace[1])202 manifest.setAttribute(namespace[0], namespace[1]) 210 203 211 204 def addSchemaLocations(self, manifest, schema_locations): 212 manifest.set ('xsi:schemaLocation', join(schema_locations, ' '))205 manifest.setAttribute('xsi:schemaLocation', join(schema_locations, ' ')) 213 206 214 207 215 208 def getTextValue(self, node): 216 209 """ 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 218 214 219 215 def getLinkXml(self, title, link): 220 216 """ 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)]) 223 220 self._createNode(wlnode, '', 'title', value=title) 224 221 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 9 9 class IMSCCWriter(IMSWriter): 10 10 """ Write an IMS content package manifest file. """ 11 12 name = _(u'IMS Common Cartridge')13 11 14 12 def createPackage(self, file, context): … … 42 40 res = ccw.createResources(doc) 43 41 44 if orgs is not None and res is not None:42 if orgs and res: 45 43 objs = self._getAllObjects(context) 46 44 for obj in objs:
Note: See TracChangeset
for help on using the changeset viewer.
