- Timestamp:
- Dec 29, 2012, 8:31:41 PM (11 years ago)
- Location:
- trunk/genshi/template
- Files:
-
- 2 edited
-
astutil.py (modified) (4 diffs)
-
tests/eval.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/genshi/template/astutil.py
r1167 r1192 282 282 283 283 # With(expr context_expr, expr? optional_vars, stmt* body) 284 # With(withitem* items, stmt* body) in Python >= 3.3 284 285 def visit_With(self, node): 285 286 self._new_line() 286 287 self._write('with ') 287 self.visit(node.context_expr) 288 if getattr(node, 'optional_vars', None): 289 self._write(' as ') 290 self.visit(node.optional_vars) 288 items = getattr(node, 'items', None) 289 first = True 290 if items is None: 291 items = [node] 292 for item in items: 293 if not first: 294 self._write(', ') 295 first = False 296 self.visit(item.context_expr) 297 if getattr(item, 'optional_vars', None): 298 self._write(' as ') 299 self.visit(item.optional_vars) 291 300 self._write(':') 292 301 self._change_indent(1) … … 294 303 self.visit(statement) 295 304 self._change_indent(-1) 296 297 305 298 306 if IS_PYTHON2: … … 372 380 self._change_indent(-1) 373 381 382 if getattr(node, 'finalbody', None): 383 self._new_line() 384 self._write('finally:') 385 self._change_indent(1) 386 for statement in node.finalbody: 387 self.visit(statement) 388 self._change_indent(-1) 389 390 # New in Py3.3 391 # Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody) 392 def visit_Try(self, node): 393 self._new_line() 394 self._write('try:') 395 self._change_indent(1) 396 for statement in node.body: 397 self.visit(statement) 398 self._change_indent(-1) 399 if getattr(node, 'handlers', None): 400 for handler in node.handlers: 401 self.visit(handler) 402 self._new_line() 403 if getattr(node, 'orelse', None): 404 self._write('else:') 405 self._change_indent(1) 406 for statement in node.orelse: 407 self.visit(statement) 408 self._change_indent(-1) 374 409 if getattr(node, 'finalbody', None): 375 410 self._new_line() … … 767 802 visit_TryExcept = _clone 768 803 visit_TryFinally = _clone 804 visit_Try = _clone 769 805 visit_Assert = _clone 770 806 visit_ExceptHandler = _clone -
trunk/genshi/template/tests/eval.py
r1191 r1192 860 860 self.assertEqual([0, 3, 4], d['results']) 861 861 862 if sys.version_info >= (3, 3): 863 def test_with_statement_with_multiple_items(self): 864 fd, path = mkstemp() 865 f = os.fdopen(fd, "w") 866 try: 867 f.write('foo\n') 868 f.seek(0) 869 f.close() 870 871 d = {'path': path} 872 suite = Suite("""from __future__ import with_statement 873 lines = [] 874 with open(path) as file1, open(path) as file2: 875 for line in file1: 876 lines.append(line) 877 for line in file2: 878 lines.append(line) 879 """) 880 suite.execute(d) 881 self.assertEqual(['foo\n', 'foo\n'], d['lines']) 882 finally: 883 os.remove(path) 884 862 885 863 886 def suite():
Note: See TracChangeset
for help on using the changeset viewer.
