change log


  • Added method: evoque.collection.Cache.clear()
  • Fixed a locals data dict isolation bug in recursive template calls (a
    template directly evoking itself).
  • Added evoque.quoted package, containing a quoted-no-more base class
    to facilitate defining custom quoted-no-more classes. Added sample
    quoted-no-more class implementations for xml and url.
  • Changed the default quoted-no-more class used within a Pylons context,
    to webhelpers.html.literal i.e. the evoque Domain is initialized with:
    quoting = app_conf.get(“evoque.quoting”, webhelpers.html.literal)
  • Added module utils.pyglexers, containing pygments lexers:
    EvoqueLexer, EvoqueHtmlLexer, EvoqueXmlLexer

0.4 (2009-01-21):

  • Evoque (package/unittests) now runs on all of python 2.4, 2.5, 2.6 and 3.0,
    simultaneously from the same identical code base.
  • The decodeh module (encoding guessing algorithm, now even more important in
    py3 when opening text files) becomes py3-aware by:

    • making read_from_file() always opens a file in binary mode

    • handling bytes as the non-unicode str case in py3
  • Tighter lockdown of the in-process sandbox (thanks to Daniel Diniz for
    feedback and additional testing) by:

    • fail for all expressions that include lookups for attributes starting
      with any of: “__”, “func_”, “f_”, “im_”, “tb_”, “gi_”, “throw”
    • added “object” to the disallowed list of builtins
  • Changed behaviour of the Domain init parameter slurpy_directives=True, that
    now behaves in the following way: for each directive, strip all
    leading/trailing whitespace on the same line plus (on left) the initial
    newline — if and only if the end of the line being slurped is made up of
    only whitespace.
  • Added whitespace test case.
  • Updated to qpy 1.7.
  • In the unit tests, replaced hash(s) as a shorthand way to compare strings
    with explicit strings.
  • Corrected problem with yield and try/finally that was breaking
    Template.test() under python 2.4.
  • In restricted mode, when initializing the globals namespace under
    python 2.4, the issubclass check is done against Exception as opposed
    to BaseException (that is not available in 2.4).

0.3 (2008-09-06):

  • All overlay keyword parameters may now be evaluated at runtime (in the same
    way as for the evoque directive); in addition to the first “name” parameter,
    the other parameters of the overlay directive [src, collection, space] may
    now also be set to a variable for evaluation at runtime.
  • Runtime evaluation of the overlay directive now explicitly raises a
    SyntaxError if a keyword parameter other than [name, src, collection, space]
    is specified.
  • Added labels, eval_overlay attributes to Template; removed overlay dict
    as attribute, replaced with template.get_space_overlay() that dynamically
    returns a (space:bool, overlay:dict) tuple on each call, where the returned
    overlay dict contains only parameters needed for calling get_template().
  • Renamed Template methods reload() and reload_from_string() to
    decode() and decode_from_string().
  • Added possibility to specify a “local” src to $evoque{} when addressing a
    template that is (a) named (b) file-based (c) nested and (d) within the
    same collection; such src values must start with “#” and the calling
    template’s file is used to normalize the src
    (see Evaluator.evoque()).
  • Refined the check to determine whether a KeyError during evaluation is
    really coming from the evaluator’s lookup or from further down.
  • Changed Template.test() method to be a generator of template evaluations,
    thus resulting in that any successful evaluations prior to a first failure
    are returned.

0.2 (2008-08-04):

  • The name first parameter of the evoque and overlay directives i.e.
    $evoque{name} and $overlay{name} may now be specified in one of the
    following ways:

    • an unquoted str arg : interpreted literally
    • a quoted str arg : interpreted literally
    • name=an unquoted str : str is interpreted as variable name, and
      evaluated at runtime within the template’s context
    • name=a quoted str : interpreted literally
  • Template.unload() now recurses and unloads also any local sub-templates.
  • Adopted default logging to be standard python logger for “evoque”.
  • Changed to True as default value of the “output” parameter of the
    builtin callable ${inspect(output=True)}.
  • Rendering of templates with raw=True now correctly processes any specified
    post-evaluation filters.

0.1.2 (2008-07-27):

  • Added ext/pylons for integrating Evoque with Pylons, both as documentation
    (on web site) and as sample code (in distribution).
  • Corrected problem with auto-refreshing of a template with a modified value
    for “data” in an embedded $prefer{data=dict()} directive.
  • Removed unused methods on Template:
    set_locals(), set_on_locals(), set_namespace_on_locals()
  • Improved benchmark suite, in particular added benchmarks for mako in
    automatic quoting mode.
  • added catch of ValueError from locale.getdefaultlocale(), to be
    able to ignore exceptions of the form “ValueError: unknown locale: XXX” when
    the LANG or any LC_* env variables are set to an unknown locale.
  • added global IGNORE_ENCS list, and added the non-existent “cp0”
    encoding that is sometimes returned by Windows, thus avoiding a
    “LookupError: unknown encoding: cp0” further downstream.

0.1.1 (2008-03-23):

  • Fixed bug with top-level middle text (in between directive blocks) not
    being parsed, see: test_mid_text().
  • Some minor changes to parsing code, for better robustness and clarity.
  • Added ext/django recipe, for using evoque with django.
  • Added ext/qp/echo sample qp application.
  • Added ext/werkzeug sample WSGI application.

0.1 (2008-03-07):

  • First public release.