.. _programming-interface: Programming interface --------------------- A tipical usage of Curtain is as simple as that:: from xml.saxutils import XMLGenerator from curtain import Template template = Template(file_source = '/path/to/template.ct') xml_generator = XMLGenerator('/path/to/output.xml') template(xml_generator, env = {'project': u'test'}) So, it all boils down to loading (and thus compile) a template file, instantiating an XML generator, and calling the template. :mod:`curtain` -- Main curtain module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. module:: curtain :synopsis: Compilation and execution of templates. .. moduleauthor:: Mattia Belletti .. class:: Template(str_source = None, file_source = None, auto_reload = False) A compiled Curtain template. .. method:: __init__(str_source = None, file_source = None, auto_reload = False) Either ``str_source`` or ``file_source`` must be given, but not both. ``str_source`` is a ``str`` object containing the XML template (the parser will manage the encoding using the tipical XML `encoding declaration <http://www.w3.org/TR/REC-xml/#NT-EncodingDecl>`_ and/or `autodetection of characters encoding <http://www.w3.org/TR/REC-xml/#sec-guessing>`_), whereas ``file_source`` can be either a ``str`` containing the path to an XML file with the template, or an open file-like object where data can be read from (again, the encoding is computed using the previous mechanisms). ``auto_reload`` can be ``True`` only if file_source is given and is a path. In this case, the template will manage the auto-reloading of the template file if it is changed. This can cause quite a heavy performance hit, so it should be considered just as a development utility, and kept to off in production environments. .. method:: __call__(xml_generator, env, translation_context = None, location = None) Execute the compiled template. Execution of the template implies that a sequence of XML SAX events are sent the ``xml_generator`` object, which must implement the `xml.sax.handlers.ContentHandler <http://docs.python.org/library/xml.sax.handler.html#contenthandler-objects>`_ interface. ``env`` is the environment in which the template is executed. See the :ref:`language specification <language-specification>` for more informations about that. ``translation_context`` is the context passed to the `translate <http://docs.zope.org/zope3/Code/zope/i18n/translate/index.html>`_ method. See :ref:`translationprocedure`. ``location`` is a :class:`Location` object instance which will track the position in the source template file while execution is performed, so to have informations about where the computation has stopped in case of errors. .. attribute:: source The source code of the Python function which is the result of the compilation of this template, as a `str`. Readonly. .. class:: Location() An object containing a location in an XML file. .. attribute:: current A couple ``(line, column)`` which gives the current position of the location object.