def load(self, ctx=None): rendererFactoryClass = None if ctx is not None: r = inevow.IRendererFactory(ctx, None) if r is not None: rendererFactoryClass = getClass(r) cacheKey = (self._filename, self.pattern, rendererFactoryClass) try: cachedModified, doc = self._cache[cacheKey] except KeyError: cachedModified = doc = None currentModified = os.path.getmtime(self._filename) if currentModified == cachedModified: return doc doc = flatsax.parse(open(self._filename), self.ignoreDocType, self.ignoreComment) doc = flat.precompile(doc, ctx) if self.pattern is not None: doc = inevow.IQ(doc).onePattern(self.pattern) self._mtime = currentModified self._cache[cacheKey] = currentModified, doc return doc
def _reallyLoad(self, path, ctx, preprocessors): doc = flatsax.parse(open(self._filename), self.ignoreDocType, self.ignoreComment) for proc in preprocessors: doc = proc(doc) doc = flat.precompile(doc, ctx) if self.pattern is not None: doc = inevow.IQ(doc).onePattern(self.pattern) return doc
def load(self, ctx=None): mtime, doc = self._cache.get((self._filename, self.pattern), (None,None)) self._mtime = os.path.getmtime(self._filename) if mtime == self._mtime: return doc doc = flatsax.parse(open(self._filename), self.ignoreDocType, self.ignoreComment) doc = flat.precompile(doc) if self.pattern is not None: doc = inevow.IQ(doc).onePattern(self.pattern) self._cache[(self._filename, self.pattern)] = self._mtime, doc return doc
def test_slotLocation(self): """ L{slot} instances returned by L{parse} have the same C{filename}, C{lineNumber}, and C{columnNumber} attributes as L{Tag} instances do. """ fName = self.mktemp() fObj = file(fName, 'w') fObj.write('<html xmlns:nevow="http://nevow.com/ns/nevow/0.1">\n' ' <nevow:slot name="foo" />\n' '</html>') fObj.close() [html] = parse(file(fName)) [foo] = [x for x in html.children if isinstance(x, slot)] self.assertEqual(foo.filename, fName) self.assertEqual(foo.lineNumber, 2) self.assertEqual(foo.columnNumber, 4)
def test_slotLocation(self): """ L{slot} instances returned by L{parse} have the same C{filename}, C{lineNumber}, and C{columnNumber} attributes as L{Tag} instances do. """ fName = self.mktemp() fObj = file(fName, 'w') fObj.write( '<html xmlns:nevow="http://nevow.com/ns/nevow/0.1">\n' ' <nevow:slot name="foo" />\n' '</html>') fObj.close() [html] = parse(file(fName)) [foo] = [x for x in html.children if isinstance(x, slot)] self.assertEqual(foo.filename, fName) self.assertEqual(foo.lineNumber, 2) self.assertEqual(foo.columnNumber, 4)
def test_attrLocation(self): """ I{attr} L{Tag} instances returned by L{parse} have a C{filename} attribute which gives the name of the file from which they were parsed, a C{lineNumber} attribute giving the line number on which the tag was seen in that file, and a C{columnNumber} attribute giving the column number at which the tag was seen in that file. """ fName = self.mktemp() fObj = file(fName, 'w') fObj.write('<html xmlns:nevow="http://nevow.com/ns/nevow/0.1">\n' ' <nevow:attr name="foo" />\n' '</html>\n') fObj.close() [html] = parse(file(fName)) attr = html.attributes['foo'] self.assertEqual(attr.filename, fName) self.assertEqual(attr.lineNumber, 2) self.assertEqual(attr.columnNumber, 4)
def test_attrLocation(self): """ I{attr} L{Tag} instances returned by L{parse} have a C{filename} attribute which gives the name of the file from which they were parsed, a C{lineNumber} attribute giving the line number on which the tag was seen in that file, and a C{columnNumber} attribute giving the column number at which the tag was seen in that file. """ fName = self.mktemp() fObj = file(fName, 'w') fObj.write( '<html xmlns:nevow="http://nevow.com/ns/nevow/0.1">\n' ' <nevow:attr name="foo" />\n' '</html>\n') fObj.close() [html] = parse(file(fName)) attr = html.attributes['foo'] self.assertEqual(attr.filename, fName) self.assertEqual(attr.lineNumber, 2) self.assertEqual(attr.columnNumber, 4)
def test_tagLocation(self): """ L{Tag} instances returned by L{parse} have a C{filename} attribute which gives the name of the file from which they were parsed, a C{lineNumber} attribute giving the line number on which the tag was seen in that file, and a C{columnNumber} attribute giving the column number at which the tag was seen in that file. """ fName = self.mktemp() fObj = file(fName, 'w') fObj.write( '<html>\n' ' <head>\n' ' <title>\n' ' Hello, world.\n' ' </title>\n' ' </head>\n' ' <body>\n' ' Hi.\n' ' </body>\n' '</html>\n') fObj.close() [html] = parse(file(fName)) [head, body] = self._tagChildren(html) [title] = self._tagChildren(head) self.assertEqual(html.filename, fName) self.assertEqual(html.lineNumber, 1) self.assertEqual(html.columnNumber, 0) self.assertEqual(head.filename, fName) self.assertEqual(head.lineNumber, 2) self.assertEqual(head.columnNumber, 2) self.assertEqual(title.filename, fName) self.assertEqual(title.lineNumber, 3) self.assertEqual(title.columnNumber, 4) self.assertEqual(body.filename, fName) self.assertEqual(body.lineNumber, 7) self.assertEqual(body.columnNumber, 2)
def test_tagLocation(self): """ L{Tag} instances returned by L{parse} have a C{filename} attribute which gives the name of the file from which they were parsed, a C{lineNumber} attribute giving the line number on which the tag was seen in that file, and a C{columnNumber} attribute giving the column number at which the tag was seen in that file. """ fName = self.mktemp() fObj = file(fName, 'w') fObj.write('<html>\n' ' <head>\n' ' <title>\n' ' Hello, world.\n' ' </title>\n' ' </head>\n' ' <body>\n' ' Hi.\n' ' </body>\n' '</html>\n') fObj.close() [html] = parse(file(fName)) [head, body] = self._tagChildren(html) [title] = self._tagChildren(head) self.assertEqual(html.filename, fName) self.assertEqual(html.lineNumber, 1) self.assertEqual(html.columnNumber, 0) self.assertEqual(head.filename, fName) self.assertEqual(head.lineNumber, 2) self.assertEqual(head.columnNumber, 2) self.assertEqual(title.filename, fName) self.assertEqual(title.lineNumber, 3) self.assertEqual(title.columnNumber, 4) self.assertEqual(body.filename, fName) self.assertEqual(body.lineNumber, 7) self.assertEqual(body.columnNumber, 2)