Changeset 14
- Timestamp:
- Thu Dec 8 10:50:16 2005
- Files:
-
- trunk/cherrytemplate.py (modified) (diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
trunk/cherrytemplate.py
r13 r14 17 17 import copy 18 18 19 defaultInputEncoding = None 20 defaultOutputEncoding = None 21 defaultOutputEncodingErrors = 'replace' 19 default_input_encoding = None 20 default_output_encoding = None 21 default_output_encoding_errors = 'replace' 22 22 path = ['.'] 23 default ReturnGenerator = False23 default_return_generator = False 23 23 24 24 _quote3 = '"""' … … 452 452 raise InternalError(minTag) 453 453 454 def render(template = '', file = None, input Encoding = None, outputEncoding = None, outputEncodingErrors = None, returnGenerator = None, glob = None, loc = None):454 def render(template = '', file = None, input_encoding = None, output_encoding = None, output_encoding_errors = None, return_generator = None, glob = None, loc = None): 454 454 # print "* Rendering:", file 455 455 originalTemplate = template … … 471 471 g = glob.copy() # make a copy because we don't want to avoid changing original global scope. 472 472 g.update(loc) # add local vars to global scope g to allow access from within template. 473 exec(template, g) 474 if outputEncoding == None: 475 outputEncoding = defaultOutputEncoding 476 if outputEncodingErrors == None: 477 outputEncodingErrors = defaultOutputEncodingErrors 478 if inputEncoding == None: 479 inputEncoding = defaultInputEncoding 480 if returnGenerator == None: 481 returnGenerator = defaultReturnGenerator 473 try: 474 exec(template, g) 475 except: 476 # In case of an exception, we include the body of the template in 477 # the traceback 478 import sys, traceback 479 tb = "".join(traceback.format_exception(*sys.exc_info())) 480 errorList = ["An error occured while trying to render a template."] 481 if file is not None: 482 errorList.append("The template file was %s" % repr(file)) 483 errorList.append("The traceback was:") 484 errorList.append(_indentAndNumberCode(tb, number = False)) 485 errorList.append("The template code was:") 486 errorList.append(_indentAndNumberCode(template)) 487 if file is None: 488 errorList.append("The original template was:") 489 errorList.append(_indentAndNumberCode(originalTemplate, number = False)) 490 raise RenderError, '\n'.join(errorList) 491 492 if output_encoding == None: 493 output_encoding = default_output_encoding 494 if output_encoding_errors == None: 495 output_encoding_errors = default_output_encoding_errors 496 input_encoding = input_encoding 497 if input_encoding == None: 498 input_encoding = default_input_encoding 499 if return_generator == None: 500 return_generator = default_return_generator 482 501 483 502 try: 484 503 result = eval('_renderTemplate()',g) 485 504 486 if returnGenerator: 487 return _resultAsGenerator(result, inputEncoding, outputEncoding, outputEncodingErrors) 505 if return_generator: 506 return _resultAsGenerator(result, input_encoding, output_encoding, output_encoding_errors) 488 507 else: 489 508 result = ''.join(list(result)) 490 509 if not isinstance(result, unicode): 491 if inputEncoding: 492 result = unicode(result, inputEncoding) 493 if outputEncoding: 494 return result.encode(outputEncoding, outputEncodingErrors) 510 if input_encoding: 511 result = unicode(result, input_encoding) 512 if output_encoding: 513 return result.encode(output_encoding, output_encoding_errors) 495 514 return result 496 515 except: … … 513 532 renderTemplate = render # legacy API 514 533 515 def _resultAsGenerator(result, input Encoding, outputEncoding, outputEncodingErrors):534 def _resultAsGenerator(result, input_encoding, output_encoding, output_encoding_errors): 515 534 for line in result: 516 535 if not isinstance(line, unicode): 517 if inputEncoding: 518 line = unicode(line, inputEncoding) 519 if outputEncoding: 520 yield line.encode(outputEncoding, outputEncodingErrors) 536 if input_encoding: 537 line = unicode(line, input_encoding) 538 if output_encoding: 539 yield line.encode(output_encoding, output_encoding_errors) 521 540 yield line 522 541
