- Timestamp:
- 07/13/09 14:26:21 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
collective.imstransport/trunk/collective/imstransport/utilities/bb/bbreader.py
r325 r378 1 1 from xml.dom import minidom 2 from urlparse import urlparse 2 3 from collective.imstransport.IMS_exceptions import ManifestError 3 from configbb import LOM_BB_namespace, XML_namespace 4 from configbb import LOM_BB_namespace, XML_namespace, EMBEDDED_STRING 5 from Products.PageTemplates.PageTemplateFile import PageTemplateFile 6 from collective.imstransport.utilities.interfaces import IIMSTransportUtility 4 7 5 8 class BBReader(object): … … 53 56 resource.getAttributeNS(XML_namespace, 'base')) 54 57 55 def readFiles(self, resource ):58 def readFiles(self, resource, bbase): 56 59 files = [] 57 60 flns = resource.getElementsByTagName('file') … … 59 62 for fln in flns: 60 63 file = fln.getAttribute('href') 61 files.append(file) 64 if bbase: 65 files.append('%s/%s' %(bbase, file)) 66 else: 67 files.append(file) 62 68 return files 63 69 … … 93 99 value = isfolder_nodes[0].getAttribute('value') 94 100 if value == 'true': 95 md['type'] = 'Folder' 101 md['bbtype'] = 'Folder' 102 handler_nodes = content_node.getElementsByTagName('CONTENTHANDLER') 103 if handler_nodes: 104 value = handler_nodes[0].getAttribute('value') 105 if value == 'resource/x-bb-externallink': 106 url_nodes = content_node.getElementsByTagName('URL') 107 if url_nodes: 108 url = url_nodes[0].getAttribute('value') 109 if url: 110 md['bbtype'] = 'Link' 111 md['remoteUrl'] = url 96 112 97 113 def readTocItem(self, manifest, resid): … … 107 123 idref = item.getAttribute('identifierref') 108 124 if idref == resid: 109 childitems = item. getElementsByTagName('item')125 childitems = item.childNodes 110 126 for x in childitems: 111 itemid = x.getAttribute('identifierref') 112 tocitems.append(itemid) 127 if x.nodeName == 'item': 128 itemid = x.getAttribute('identifierref') 129 tocitems.append(itemid) 113 130 return tocitems 131 132 def readEmbeddedTags(self, soup): 133 """ Read embedded tags from a text file """ 134 prevlink = None 135 links = self.getDocumentHrefLinks(soup) 136 for link in links: 137 if 'embedded' in link['href']: 138 if prevlink and prevlink != link['href']: 139 return None 140 prevlink = link['href'] 141 links = self.getDocumentSrcLinks(soup) 142 for link in links: 143 if 'embedded' in link['src']: 144 if prevlink and prevlink != link['src']: 145 return None 146 return prevlink 147 148 def createTocPage(self, entries): 149 """ Create a table of links """ 150 text = '<table>' 151 for z in entries: 152 text += "<tr><td><a href='%s'>%s</a></td></tr>" %(z[0], z[1]) 153 text += '</table>' 154 return text 155 156 def runDocumentFilters(self, utils, soup, vars, base): 157 """ Run a filter over the links """ 158 links = [] 159 links = self.getDocumentHrefLinks(soup) 160 for link in links: 161 orig = link['href'] 162 link['href'] = self.filterDocumentLink(link['href'], utils, vars, base) 163 links = [] 164 links = self.getDocumentSrcLinks(soup) 165 for link in links: 166 orig = link['src'] 167 link['src'] = self.filterDocumentLink(link['src'], utils, vars, base) 168 return soup.prettify() 169 170 def getDocumentHrefLinks(self, soup): 171 links = [] 172 tags = soup.findAll(href=True) 173 from urlparse import urlparse 174 for tag in tags: 175 if tag.has_key('href'): 176 url = urlparse('href') 177 if not url[1] or 'localhost' in url[1]: 178 links.append(tag) 179 return links 180 181 def getDocumentSrcLinks(self, soup): 182 links = [] 183 tags = soup.findAll(src=True) 184 from urlparse import urlparse 185 for tag in tags: 186 if tag.has_key('src'): 187 url = urlparse('src') 188 if not url[1] or 'localhost' in url[1]: 189 links.append(tag) 190 return links 191 192 def _convertBBVariables(self, link, vars, base): 193 """ Convert BB variables to their counterparts """ 194 lnk = link 195 for var in vars: 196 if base: 197 replace = '%s/%s/' %(base, var[1]) 198 else: 199 replace = var[1] 200 lnk = link.replace(var[0], replace) 201 return lnk 202 203 def _convertURLEntities(self, link): 204 """ Convert BB variables to their counterparts """ 205 lnk = link 206 import urllib 207 lnk = urllib.unquote(lnk) 208 return lnk 209 210 def _convertToNormalizedLink(self, link, utils): 211 """ Normalize the link so it can be imported without errors """ 212 lnk = link 213 url = urlparse(lnk) 214 urlfile = url[2].split('/') 215 urlfile[-1] = utils.normalizeString(urlfile[-1]) 216 lnk = '/'.join(urlfile) 217 return lnk 218 219 def filterDocumentLink(self, link, utils, vars, base): 220 lnk = link 221 from urlparse import urlparse 222 url = urlparse(lnk) 223 if url[2] and not url[0]: 224 lnk = self._convertBBVariables(lnk, vars, base) 225 lnk = self._convertURLEntities(lnk) 226 lnk = self._convertToNormalizedLink(lnk, utils) 227 return lnk 228 229 def runFilters(self, text, filters, **kw): 230 rettext = text 231 for filter in filters: 232 if 'embed' == filter: 233 rettext = self.replaceEmbedVariables(rettext, kw['base']) 234 elif 'reflinks' == filter: 235 rettext = self.rewriteReferenceLinks(rettext) 236 return rettext 237 238 def replaceEmbedVariables(self, text, base): 239 """ Remove the proprietary embed variables and replace with proper path """ 240 if base: 241 rpath = '%s/embed/' %base 242 return text.replace(EMBEDDED_STRING, rpath) 243 244 def rewriteReferenceLinks(self, text): 245 """ Rewrite all reference links """ 246 247 def removeUrlEntities(self, href): 248 """ Remove the URL entities from the string """ 249 250 251 252 253 254 255 256 257 258 259 260 114 261 115 262
Note: See TracChangeset
for help on using the changeset viewer.
