{ "info": { "author": "Antti Haapala", "author_email": "antti@haapala.name", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: Pyramid", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Text Processing :: Markup", "Topic :: Text Processing :: Markup :: HTML" ], "description": "Tonnikala\n=========\n\nTonnikala is the latest reincarnation among the Python templating \nlanguages that feed on Kid-inspired XML syntax. It rejects the Kid \nand Genshi notions of tagstreams and trees, and follows in \nfootsteps of Chameleon and Kajiki in making the template to compile \ninto Python bytecode directly. The syntax is very close to that of \nKajiki, but the internals are very different: Tonnikala writes code \nas Abstract Syntax Trees and optimizes the resulting trees \nextensively. In addition, there is an optional speed-up module \n(currently Python 3 only), that provides a specialized class used \nfor output buffering.\n\nExamples\n--------\n\n.. code-block:: python\n\n from tonnikala.loader import Loader\n\n template_source = u\"\"\"\n \n \n \n \n
${key}${literal(value)}
\n \"\"\"\n \n template = Loader().load_string(template_source)\n\n ctx = {\n 'table': [dict(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10)\n for x in range(1000)]\n }\n\n print(template.render(ctx))\n\nTemplate inheritance\n--------------------\n\nbase.tk\n+++++++\n\n.. code-block:: xml\n\n \n <py:block name=\"title_block\">I am ${title}</py:block>\n I can be overridden too!\n

${title_block()}

\n ${foo()}\n \n\nchild.tk\n++++++++\n\n.. code-block:: xml\n\n \n But I am ${title} instead\n I have overridden the function in parent template\n \n\nTemplate imports\n----------------\n\nimportable.tk\n+++++++++++++\n\n.. code-block:: xml\n\n \n I am an importable function\n \n\nimporter.tk\n+++++++++++\n\n.. code-block:: xml\n\n \n \n ${imp.foo()}\n \n\nFileLoader\n----------\n\nTo load templates from files, use the ``tonnikala.FileLoader`` class:\n\n.. code-block:: python\n\n loader = FileLoader(paths=['/path/to/templates'])\n template = loader.load('child.tk')\n\nA ``FileLoader`` currently implicitly caches **all** loaded templates in memory.\n\nTemplate\n--------\n\nTo render the template:\n\n.. code-block:: python\n\n result = template.render(ctx)\n\nYou can specify a block, or no-argument def to render explicitly:\n\n.. code-block:: python\n\n result = template.render(ctx, funcname='title_block')\n\nPyramid integration\n-------------------\n\nInclude `'tonnikala.pyramid'` into your config to enable Tonnikala. When included, tonnikala adds the following configuration directives:\n\n`add_tonnikala_extensions(*extensions)`\n Registers tonnikala renderer for these template extensions. By default Tonnikala is not registered as a renderer for any extension.\n For example: `config.add_tonnikala_extensions('.html', '.tk')` would enable Tonnikala renderer for templates with either of these extensions.\n\n`add_tonnikala_search_paths(*paths)`\n Adds the given paths to the end of Tonnikala search paths that are searched for templates. These can be absolute paths, or\n `package.module:directory/subdirectory`-style asset specs. By default no paths are searched explicitly (but you can always\n use an asset spec for template.\n\n`set_tonnikala_reload(reload)`\n If `True`, makes tonnikala not cache templates. Default is `False`.\n\nThese 3 can also be controlled by `tonnikala.extensions`, `tonnikala.search_paths` and `tonnikala.reload` in .ini settings.\n\nStatus\n======\n\nAlpha, working features are \n\n* Structural elements ``py:if``, ``py:unless``, ``py:def``, ``py:for``, \n ``py:replace``, ``py:content``\n* Basic template inheritance: ``py:extends`` and ``py:block``; the child\n template also inherits top level function declarations from the parent\n template, and the child can override global functions that the parent\n defines and uses.\n* Expression interpolation using ``$simple_identifier`` and ``${complex + python + \"expression\"}``\n* Boolean attributes: ````, ````\n* Implicit escaping\n* Disabling implicit escaping (``literal()``)\n* C speedups for both Python 2 and Python 3\n* Importing def blocks from another template: ``py:import``\n* Basic I18N using gettext.\n* Pyramid integration\n\nUpcoming features:\n\n* Structural elements: ``py:vars``, ``py:switch``, ``py:case``; ``py:else`` for ``for``, ``if`` and ``switch``.\n* Overriding attributes, setting attrs from dictionary: ``py:attrs``\n* Custom tags mapping to ``py:def``\n* I18N with optional in-parse-tree localization (partially done)\n* Javascript as the target language\n* Pluggable frontend syntax engines (partially done)\n* METAL-like macros\n* Pluggable expression languages akin to Chameleon\n* Even better template inheritance\n* Better documentation\n\nContributors\n------------\n\nAntti Haapala\n", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ztane/Tonnikala", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "tonnikala", "package_url": "https://pypi.org/project/tonnikala/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/tonnikala/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/ztane/Tonnikala" }, "release_url": "https://pypi.org/project/tonnikala/0.16/", "requires_dist": null, "requires_python": null, "summary": "Python templating engine - the one ton solution", "version": "0.16" }, "last_serial": 3128174, "releases": { "0.15": [ { "comment_text": "", "digests": { "md5": "c1e08d63793c24002580a3376f814ee5", "sha256": "e551cc194d979c7ed49c5a117111ea6f923b7b750de65010cfd68ebdc6f66de6" }, "downloads": -1, "filename": "tonnikala-0.15.tar.gz", "has_sig": false, "md5_digest": "c1e08d63793c24002580a3376f814ee5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4518, "upload_time": "2013-12-08T21:29:33", "url": "https://files.pythonhosted.org/packages/17/40/65f8ae1979d4d73686e047460b4774effff2bc1b313624a8dc1be5abe245/tonnikala-0.15.tar.gz" } ], "0.16": [ { "comment_text": "", "digests": { "md5": "116e86bf72273e2f3fe79460f6a1bb12", "sha256": "fc65f2234b3bc143e529f52d362aa549e5bf57965a4e4b04ec7eb7609e86f49d" }, "downloads": -1, "filename": "tonnikala-0.16.tar.gz", "has_sig": false, "md5_digest": "116e86bf72273e2f3fe79460f6a1bb12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30576, "upload_time": "2014-11-02T12:43:25", "url": "https://files.pythonhosted.org/packages/2b/11/1999b642d34d7dba670ff2a54ac6a8f882cfbf5e84b6708f7c674e05e785/tonnikala-0.16.tar.gz" } ], "1.0.0b1": [ { "comment_text": "", "digests": { "md5": "36414b816b7cc54bcba59a02d19ce812", "sha256": "4cb00ee1774853bb21d40dcadf69c723b6964cbd4fcfd05e65c526269f88e2b6" }, "downloads": -1, "filename": "tonnikala-1.0.0b1.zip", "has_sig": false, "md5_digest": "36414b816b7cc54bcba59a02d19ce812", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 62558, "upload_time": "2015-05-19T14:35:22", "url": "https://files.pythonhosted.org/packages/1a/3c/12a611c5c295fea9bd2eae2dc7ee91858ace15f709588f01c8c05b76be82/tonnikala-1.0.0b1.zip" } ], "1.0.0b2": [], "1.0.0b3": [ { "comment_text": "", "digests": { "md5": "10a846b83838f38883488c97c6426575", "sha256": "2a2846b079600208a3373cfbc016d30666be9eb1d9e250b396ca15d705afc2b9" }, "downloads": -1, "filename": "tonnikala-1.0.0b3-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "10a846b83838f38883488c97c6426575", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 74667, "upload_time": "2016-07-22T16:50:47", "url": "https://files.pythonhosted.org/packages/65/fd/7ee2c5de0b057facefb493ced73a0794036fcee702022d6de7807801a2d0/tonnikala-1.0.0b3-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "0848e9164a2a4b8b67102ebf5b186b1f", "sha256": "942ff3dfed4cff77303e63ef1b692d5cbb5e1304903ae630b2ea90c677764064" }, "downloads": -1, "filename": "tonnikala-1.0.0b3-cp27-cp27mu-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "0848e9164a2a4b8b67102ebf5b186b1f", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 74654, "upload_time": "2016-07-22T16:50:49", "url": "https://files.pythonhosted.org/packages/30/a8/543401349594de68e41f0dc2ea8a39d65151f44c25c1076e11285a32f5cd/tonnikala-1.0.0b3-cp27-cp27mu-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "964d048000c0d6725c64ff27c695a472", "sha256": "6178a636e2ac87e399b4d5101a4019f2f196bb77f3091a67f4fab2e2a6809328" }, "downloads": -1, "filename": "tonnikala-1.0.0b3-cp33-cp33m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "964d048000c0d6725c64ff27c695a472", "packagetype": "bdist_wheel", "python_version": "cp33", "requires_python": null, "size": 75150, "upload_time": "2016-07-22T16:50:52", "url": "https://files.pythonhosted.org/packages/87/26/f688f24041f05cc83be057537936270b91b58e1d7197900035a250511c6b/tonnikala-1.0.0b3-cp33-cp33m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "665eada122340ba28ab992b4555d0849", "sha256": "d79cce287cd531160d4dc88c60f5b5d6ed52ad069ee159b60d9d2716b76ff74d" }, "downloads": -1, "filename": "tonnikala-1.0.0b3-cp34-cp34m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "665eada122340ba28ab992b4555d0849", "packagetype": "bdist_wheel", "python_version": "cp34", "requires_python": null, "size": 75403, "upload_time": "2016-07-22T16:50:54", "url": "https://files.pythonhosted.org/packages/8f/9a/27c8ed63404d5a561ec8944d2635ef84193fef14a5eaca69c7a8b2f9c274/tonnikala-1.0.0b3-cp34-cp34m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "32c6e8df6fa594fde085f27aa20a5e62", "sha256": "b2149aff6c2f63fed5559a40d0876009c54addbb81991fd97c0a72abe8168359" }, "downloads": -1, "filename": "tonnikala-1.0.0b3-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "32c6e8df6fa594fde085f27aa20a5e62", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 75586, "upload_time": "2016-07-22T16:50:57", "url": "https://files.pythonhosted.org/packages/e3/51/1401d41396aebeb983d694e95e79a6345c646597ad7e16a3341324a7e2b3/tonnikala-1.0.0b3-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "5544cf8000afaf6ac5f1447a634e6f21", "sha256": "7ff252356383b30c17951c7f48047f0a1cc44cf2a1705b313a268a78f4a63b5c" }, "downloads": -1, "filename": "tonnikala-1.0.0b3.tar.gz", "has_sig": false, "md5_digest": "5544cf8000afaf6ac5f1447a634e6f21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58043, "upload_time": "2016-07-22T16:50:43", "url": "https://files.pythonhosted.org/packages/68/8b/e4a487543362482575453693cd3d8af358d62f72b26b9f5a69f9cec0020a/tonnikala-1.0.0b3.tar.gz" } ], "1.0.0b4": [ { "comment_text": "", "digests": { "md5": "e346d1e48aa807398ca893ef09c8cd49", "sha256": "ec94e28e49e38575c3a084175694ee69199e273755154d7bea550fa7e6ee1241" }, "downloads": -1, "filename": "tonnikala-1.0.0b4-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "e346d1e48aa807398ca893ef09c8cd49", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 75336, "upload_time": "2017-08-28T06:01:34", "url": "https://files.pythonhosted.org/packages/e3/25/194406edea8bcefe93e328ebce69279fcab0038b5433ebcabafa186fc48d/tonnikala-1.0.0b4-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "47d0e38fca620c30686ab453e97097ee", "sha256": "9b34a89ebd2449dce756a65ce3e1a389a7cf0c836ca09936e71694ad41b20676" }, "downloads": -1, "filename": "tonnikala-1.0.0b4-cp27-cp27mu-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "47d0e38fca620c30686ab453e97097ee", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 75324, "upload_time": "2017-08-28T06:01:36", "url": "https://files.pythonhosted.org/packages/b6/e8/fb49855c4d66d353565f985d0252f1b3dcc8f794fee703e722dd5dc143d2/tonnikala-1.0.0b4-cp27-cp27mu-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "e836fad4f77ae15e033fe5b517ad61b2", "sha256": "4c3b4b79ba9b06e7ff538a1962acd00128388e5e2ca5f31f0afa821e9f350cf9" }, "downloads": -1, "filename": "tonnikala-1.0.0b4-cp33-cp33m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "e836fad4f77ae15e033fe5b517ad61b2", "packagetype": "bdist_wheel", "python_version": "cp33", "requires_python": null, "size": 75828, "upload_time": "2017-08-28T06:01:37", "url": "https://files.pythonhosted.org/packages/04/60/c104ad2b4912481e0ac6fe80226dab59ea6fe207e7ca0c661df92fdbe7bd/tonnikala-1.0.0b4-cp33-cp33m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "3308105478b6b3814f5f49ee92983e50", "sha256": "e9ec5058cfee271cb0426dd4360aad6e107575ae58ad74c508e1946da4c19120" }, "downloads": -1, "filename": "tonnikala-1.0.0b4-cp34-cp34m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "3308105478b6b3814f5f49ee92983e50", "packagetype": "bdist_wheel", "python_version": "cp34", "requires_python": null, "size": 76076, "upload_time": "2017-08-28T06:01:39", "url": "https://files.pythonhosted.org/packages/c0/e0/324342a71b9e8f4c815b6dbcf5020d6aaf97fb62824410604e004e01fe00/tonnikala-1.0.0b4-cp34-cp34m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "83e451107e0e4b1b8d703e5132a2a1f4", "sha256": "a66ca214d122c3ee9409fe2d2f10cd5fb7885b723c4eab4a742ac342e5ade20c" }, "downloads": -1, "filename": "tonnikala-1.0.0b4-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "83e451107e0e4b1b8d703e5132a2a1f4", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 76260, "upload_time": "2017-08-28T06:01:40", "url": "https://files.pythonhosted.org/packages/c8/55/95984f51d7af92cdd2371a8e25d14e64459b8c0c91062aa3346a2c17bcd8/tonnikala-1.0.0b4-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "e2dbfcabeb28fbcbb98ab7995485772e", "sha256": "22bb9b23fdc3d311d74c18b12b9bf57f08bed4b0381e3343c1f6b60c551fa1c7" }, "downloads": -1, "filename": "tonnikala-1.0.0b4-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "e2dbfcabeb28fbcbb98ab7995485772e", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 76269, "upload_time": "2017-08-28T06:01:41", "url": "https://files.pythonhosted.org/packages/6d/41/f07c4d664a5239c3c9bbd5533150010ffd36a43b88ba3d40bfdade50f61b/tonnikala-1.0.0b4-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "44e234094e7085b908819f057fab9b1d", "sha256": "ab74605dd7c2280bba42c418a474e4d91e6a2da68490db981b8e38dcc024cab7" }, "downloads": -1, "filename": "tonnikala-1.0.0b4.tar.gz", "has_sig": false, "md5_digest": "44e234094e7085b908819f057fab9b1d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56631, "upload_time": "2017-08-28T06:01:32", "url": "https://files.pythonhosted.org/packages/e5/d1/d0af4a6fc3cafde02933023f50fe5bccc9cdc6645eb2667fe4d96447b93d/tonnikala-1.0.0b4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "116e86bf72273e2f3fe79460f6a1bb12", "sha256": "fc65f2234b3bc143e529f52d362aa549e5bf57965a4e4b04ec7eb7609e86f49d" }, "downloads": -1, "filename": "tonnikala-0.16.tar.gz", "has_sig": false, "md5_digest": "116e86bf72273e2f3fe79460f6a1bb12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30576, "upload_time": "2014-11-02T12:43:25", "url": "https://files.pythonhosted.org/packages/2b/11/1999b642d34d7dba670ff2a54ac6a8f882cfbf5e84b6708f7c674e05e785/tonnikala-0.16.tar.gz" } ] }