Changeset 704
- Timestamp:
- 08/10/07 11:44:00 (2 years ago)
- Location:
- trunk
- Files:
-
- 5 modified
-
ChangeLog (modified) (1 diff)
-
genshi/template/base.py (modified) (1 diff)
-
genshi/template/loader.py (modified) (1 diff)
-
genshi/template/markup.py (modified) (3 diffs)
-
genshi/template/tests/markup.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ChangeLog
r702 r704 27 27 * Fixed handling of nested function and class definitions in Python code 28 28 blocks. 29 * Includes were not raising `TemplateNotFound` exceptions even when no 30 fallback has been specified. That has been corrected. 31 * The template loader now raises a `TemplateNotFound` error when a previously 32 cached template is removed or renamed, where it previously was passing up 33 an `OSError`. 29 34 30 35 -
trunk/genshi/template/base.py
r675 r704 393 393 yield event 394 394 continue 395 el se:395 elif fallback: 396 396 # Otherwise the include is performed at run time 397 397 data = href, list(self._prepare(fallback)) -
trunk/genshi/template/loader.py
r657 r704 175 175 os.path.getmtime(tmpl.filepath) == self._mtime[filename]: 176 176 return tmpl 177 except KeyError :177 except KeyError, OSError: 178 178 pass 179 179 -
trunk/genshi/template/markup.py
r661 r704 84 84 ns_prefix = {} 85 85 depth = 0 86 in_fallback = 087 include _href = None86 fallbacks = [] 87 includes = [] 88 88 89 89 if not isinstance(source, Stream): … … 156 156 'attribute "href"', 157 157 self.filepath, *pos[1:]) 158 includes.append(include_href) 158 159 streams.append([]) 159 160 elif tag.localname == 'fallback': 160 in_fallback += 1 161 streams.append([]) 162 fallbacks.append(streams[-1]) 161 163 162 164 else: … … 168 170 depth -= 1 169 171 170 if in_fallbackand data == self.XINCLUDE_NAMESPACE['fallback']:171 in_fallback -= 1172 if fallbacks and data == self.XINCLUDE_NAMESPACE['fallback']: 173 assert streams.pop() is fallbacks[-1] 172 174 elif data == self.XINCLUDE_NAMESPACE['include']: 173 fallback = streams.pop() 175 fallback = None 176 if len(fallbacks) == len(includes): 177 fallback = fallbacks.pop() 178 streams.pop() # discard anything between the include tags 179 # and the fallback element 174 180 stream = streams[-1] 175 stream.append((INCLUDE, (include _href, fallback), pos))181 stream.append((INCLUDE, (includes.pop(), fallback), pos)) 176 182 else: 177 183 stream.append((kind, data, pos)) -
trunk/genshi/template/tests/markup.py
r657 r704 23 23 from genshi.input import XML 24 24 from genshi.template.base import BadDirectiveError, TemplateSyntaxError 25 from genshi.template.loader import TemplateLoader 25 from genshi.template.loader import TemplateLoader, TemplateNotFound 26 26 from genshi.template.markup import MarkupTemplate 27 27 … … 352 352 shutil.rmtree(dirname) 353 353 354 def test_error_when_include_not_found(self): 355 dirname = tempfile.mkdtemp(suffix='genshi_test') 356 try: 357 file2 = open(os.path.join(dirname, 'tmpl2.html'), 'w') 358 try: 359 file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude"> 360 <xi:include href="tmpl1.html"/> 361 </html>""") 362 finally: 363 file2.close() 364 365 loader = TemplateLoader([dirname], auto_reload=True) 366 tmpl = loader.load('tmpl2.html') 367 self.assertRaises(TemplateNotFound, tmpl.generate().render) 368 finally: 369 shutil.rmtree(dirname) 370 354 371 def test_fallback_when_include_not_found(self): 355 372 dirname = tempfile.mkdtemp(suffix='genshi_test') … … 398 415 tmpl = loader.load('tmpl3.html') 399 416 self.assertEqual("""<html> 400 <div>Included</div>417 <div>Included</div> 401 418 </html>""", tmpl.generate().render()) 402 419 finally: … … 423 440 tmpl = loader.load('tmpl3.html') 424 441 self.assertEqual("""<html> 425 Missing 442 Missing 443 </html>""", tmpl.generate().render()) 444 finally: 445 shutil.rmtree(dirname) 446 447 def test_nested_include_in_fallback(self): 448 dirname = tempfile.mkdtemp(suffix='genshi_test') 449 try: 450 file1 = open(os.path.join(dirname, 'tmpl2.html'), 'w') 451 try: 452 file1.write("""<div>Included</div>""") 453 finally: 454 file1.close() 455 456 file2 = open(os.path.join(dirname, 'tmpl3.html'), 'w') 457 try: 458 file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude"> 459 <xi:include href="tmpl2.html"> 460 <xi:fallback> 461 <xi:include href="tmpl1.html" /> 462 </xi:fallback> 463 </xi:include> 464 </html>""") 465 finally: 466 file2.close() 467 468 loader = TemplateLoader([dirname]) 469 tmpl = loader.load('tmpl3.html') 470 self.assertEqual("""<html> 471 <div>Included</div> 426 472 </html>""", tmpl.generate().render()) 427 473 finally:
