kamidana
========================================
kamidana is yet another jinja2's cli wrapper.
features
- using jinja2 file as template file (basic feature)
- various input formats support (json, yaml, toml, ...)
- the way of lookup template is changed, relative to parent template path
- gentle error message
- batch execution for speed-up (via `kamidana-batch`)
- rendering with individual filters (via `--additionals` option)
- (useful additionals modules (e.g. `kamidana.additionals.naming` ...)
usage
----------------------------------------
.. code-block:: console
usage: kamidana [-h] [--driver DRIVER] [--loader LOADER] [-d DATA]
[--logging {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}] [-a ADDITIONALS] [-e EXTENSION]
[-i {yaml,json,toml,csv,tsv,raw,env,md,markdown,spreadsheet}] [-o OUTPUT_FORMAT] [--dump-context]
[--list-info] [--debug] [--quiet] [--dst DST]
[template]
positional arguments:
template
options:
-h, --help show this help message and exit
--driver DRIVER default: kamidana.driver:Driver
--loader LOADER default: kamidana.loader:TemplateLoader
-d DATA, --data DATA support yaml, json, toml
--logging {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}
-a ADDITIONALS, --additionals ADDITIONALS
-e EXTENSION, --extension EXTENSION
-i {yaml,json,toml,csv,tsv,raw,env,md,markdown,spreadsheet}, --input-format {yaml,json,toml,csv,tsv,raw,env,md,markdown,spreadsheet}
-o OUTPUT_FORMAT, --output-format OUTPUT_FORMAT
--dump-context dumping loading data (used by jinja2 template)
--list-info listting information (for available extensions and additional modules)
--debug
--quiet
--dst DST
examples
----------------------------------------
example (basic)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: console
$ kamidana examples/readme/src/00/nginx.jinja2 --data examples/readme/src/00/data.json
server {
listen 80;
server_name localhost;
root /var/www/project;
index index.htm;
access_log /var/log/nginx/http.access.log combined;
error_log /var/log/nginx/http.error.log;
}
examples/readme/src/00/nginx.jinja2
.. code-block::
server {
listen 80;
server_name {{ nginx.hostname }};
root {{ nginx.webroot }};
index index.htm;
access_log {{ nginx.logdir }}/http.access.log combined;
error_log {{ nginx.logdir }}/http.error.log;
}
examples/readme/src/00/data.json
.. code-block:: json
{
"nginx": {
"hostname": "localhost",
"webroot": "/var/www/project",
"logdir": "/var/log/nginx"
}
}
More over, passing data with stdin. (please doen't forget to add `--input-format` option)
.. code-block:: console
$ echo '{"nginx": {"logdir": "/tmp/logs/nginx"}}' | kamidana --input-format json examples/readme/src/00/nginx.jinja2 --data examples/readme/src/00/data.json
server {
listen 80;
server_name localhost;
root /var/www/project;
index index.htm;
access_log /tmp/logs/nginx/http.access.log combined;
error_log /tmp/logs/nginx/http.error.log;
}
gentle error message
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if using include, but the included template is not found.
.. code-block:: console
$ tree examples/readme/src/11
examples/readme/src/11
├── header.html.j2
└── main.html.j2
1 directory, 2 files
.. code-block:: console
$ kamidana examples/readme/src/11/main.html.j2
------------------------------------------------------------
exception: kamidana._path.XTemplatePathNotFound
message: [Errno 2] No such file or directory: 'footer-404.html.j2'
where: examples/readme/src/11/main.html.j2
------------------------------------------------------------
examples/readme/src/11/main.html.j2:
2: <main>
3: this is main contents
4: </main>
-> 5: {% include "footer-404.html.j2" %}
Traceback:
File "SITE-PACKAGES/jinja2/loaders.py", line 462, in get_source
rv = self.load_func(template)
File "HERE/me/kamidana/kamidana/loader.py", line 27, in load
raise XTemplatePathNotFound(filename, exc=e).with_traceback(e.__traceback__)
File "HERE/me/kamidana/kamidana/loader.py", line 23, in load
with open(filename) as rf:
example2 (--additionals)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
builtin addtional modules
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: console
$ kamidana --additionals=kamidana.additionals.naming examples/readme/src/01/use-naming.jinja2
singular, plurals
- days|singularize -> day
- day|pluralize -> days
- people|singularize -> person
- person|pluralize -> people
to {snake_case, kebab-case, camelCase}
- fooBarBoo|snakecase -> foo_bar_boo
- fooBarBoo|kebabcase -> foo-bar-boo
- foo_bar_boo|camelcase -> fooBarBoo
more information: see kamidana.additionals.naming module
examples/readme/src/01/use-naming.jinja2
.. code-block::
singular, plurals
- days|singularize -> {{"days"|singularize}}
- day|pluralize -> {{"day"|pluralize}}
- people|singularize -> {{"people"|singularize}}
- person|pluralize -> {{"person"|pluralize}}
to {snake_case, kebab-case, camelCase}
- fooBarBoo|snakecase -> {{"fooBarBoo"|snakecase}}
- fooBarBoo|kebabcase -> {{"fooBarBoo"|kebabcase}}
- foo_bar_boo|camelcase -> {{"foo_bar_boo"|camelcase}}
more information: see kamidana.additionals.naming module
or `kamidana -a naming` is also OK (shortcut).
individual additional modules
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: console
$ kamidana --additionals=examples/readme/src/01/additionals.py --data=examples/readme/src/01/data.yaml examples/readme/src/01/hello.jinja2
bye, world!!
examples/readme/src/01/hello.jinja2
.. code-block::
{% if 19 is night %}
{{night}}, {{name|surprised}}
{% else %}
{{daytime}}, {{name|surprised}}
{% endif %}
examples/readme/src/01/additionals.py
.. code-block:: python
from kamidana import (
as_filter,
as_globals_generator,
as_test,
)
@as_filter
def surprised(v):
return "{}!!".format(v)
@as_globals_generator
def generate_globals():
return {"daytime": "hello", "night": "bye"}
@as_test
def night(hour):
return 19 <= hour or hour < 3
examples/readme/src/01/data.yaml
.. code-block:: yaml
name: world
example3 (using jinja2 extensions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: console
$ kamidana -e do -e loopcontrols examples/readme/src/02/use-extension.jinja2
hello
world
hello
## counting
- 1
- 2
- 4
## do
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
examples/readme/src/02/use-extension.jinja2
.. code-block::
{# with with. with_ extension is used. #}
{%- with msg = "hello"%}
{{msg}}
{%- with msg = "world"%}
{{msg}}
{%- endwith %}
{{msg}}
{%- endwith %}
## counting
{#- with break and continue. loopcontrolls extension is used. #}
{%- for i in range(10) %}
{%- if i % 3 == 0 %}{% continue %} {% endif %}
{%- if i == 5 %}{% break %} {% endif %}
- {{i}}
{%- endfor %}
## do
{%- set xs = [] %}
{%- for i in range(10) %}
{%- do xs.append(i) %}
{%- endfor %}
{{xs}}
example4 (batch execution)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TODO. `see this <./examples/batch>`_
debugging
----------------------------------------
- `--dump-context`
- `--debug`
dump context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: console
$ kamidana --dump-context --data=examples/readme/src/10/data.yaml
{
"name": "foo",
"age": 20,
"friends": [
"bar",
"boo"
],
"template_filename": null
}
and be able to merge two files.
.. code-block:: console
$ kamidana --dump-context --data=examples/readme/src/10/data.yaml --data=examples/readme/src/10/data2.yaml
{
"name": "foo",
"age": 21,
"friends": [
"bar",
"baz"
],
"template_filename": null
}
then
examples/readme/src/10/data.yaml
.. code-block:: yaml
name: foo
age: 20
friends:
- bar
- boo
examples/readme/src/10/data2.yaml
.. code-block:: yaml
age: 21
friends:
- bar
- baz
available info (extensions and additional modules)
--------------------------------------------------------------------------------
.. code-block::
$ kamidana --list-info
extensions are used by `-e`, additional modules are used by `-a`.
{
"extensions": {
"jinja2.ext.i18n": "This extension adds gettext support to Jinja.",
"jinja2.ext.do": "Adds a `do` tag to Jinja that works like the print statement just",
"jinja2.ext.loopcontrols": "Adds break and continue to the template engine.",
"jinja2.ext.debug": "A ``{% debug %}`` tag that dumps the available variables,",
"kamidana.extensions.NamingModuleExtension": "extension create from kamidana.additionals.naming",
"kamidana.extensions.ReaderModuleExtension": "extension create from kamidana.additionals.reader",
"kamidana.extensions.CookiecutterAdditionalModulesExtension": "activate additional modules, see context['cookiecutter']['_additional_modules'], created from your cookiecutter.json"
},
"additional_modules": {
"kamidana.additionals.env": "accessing environemt variable, via env()",
"kamidana.additionals.naming": "Naming helpers (e.g. snakecase, kebabcase, ... pluralize, singularize)",
"kamidana.additionals.reader": "Reading from other resources (e.g. read_from_file, read_from_command)"
}
}
with other packages
--------------------------------------------------------------------------------
- use kamidana's additional modules with `cookiecutter <https://pypi.org/project/cookiecutter/>`_ . (see `examples/extensions/src/02with-cookiecutter <https://github.com/podhmo/kamidana/blob/master/examples/extensions/src/02with-cookiecutter>`_)
0.10.0
- catch up new jinja2
0.9.1
- catch up magicalimport 0.8.1
0.9.0
- python 3.8 support (#43)
0.8.2
- more aggressive support for cookiecutter, enable to use relative phisical path
0.8.1
- refine kamidana.additionals.naming implementation
0.8.0
- add creating jinja2's extension mini-framework, and cookiecutter support
- add kamidana.additionals.env
- add `--list-info` option
0.7.2
- on error message, skipping almost duplicated jinja2 frame's output
0.7.1
- update readme.rst
0.7.0
- gentle error message
- changing template path lookup mechanism
- adding newline at end of file
- drop trim block=True
0.6.2
- template is not passed, act as --dump-context (#21)
- same behaviour `-a kamidana.additonals.reader` and `-a reader` (shortcuts) (#18)
- update readme.rst
0.6.1
- kamidana, fix: --dst option is ignored
- kamidana-batch, fix: kamidana-batch ignore --logging option
0.6.0
- kamidana.additionals.naming
0.5.0
- new kamidana-batch command
- changing addtionals.reader's current working directory path
0.4.1
- fix bug (multi -a option)
0.4.0
- add kamidana.additionals.reader
0.3.0
- add `--extension` option
- add `--dump-context` option
0.2.1
- rename Loader to TemplateLoader
0.2.0
- --loader option is added
- interfaces are defined
0.1.0
- first release
Raw data
{
"_id": null,
"home_page": "https://github.com/podhmo/kamidana",
"name": "kamidana",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "jinja2,cli,commandline",
"author": "podhmo",
"author_email": "ababjam61+github@gmail.com",
"download_url": "",
"platform": null,
"description": "kamidana\n========================================\n\nkamidana is yet another jinja2's cli wrapper.\n\nfeatures\n\n- using jinja2 file as template file (basic feature)\n- various input formats support (json, yaml, toml, ...)\n- the way of lookup template is changed, relative to parent template path\n- gentle error message\n- batch execution for speed-up (via `kamidana-batch`)\n- rendering with individual filters (via `--additionals` option)\n- (useful additionals modules (e.g. `kamidana.additionals.naming` ...)\n\nusage\n----------------------------------------\n\n.. code-block:: console\n\n usage: kamidana [-h] [--driver DRIVER] [--loader LOADER] [-d DATA]\n [--logging {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}] [-a ADDITIONALS] [-e EXTENSION]\n [-i {yaml,json,toml,csv,tsv,raw,env,md,markdown,spreadsheet}] [-o OUTPUT_FORMAT] [--dump-context]\n [--list-info] [--debug] [--quiet] [--dst DST]\n [template]\n\n positional arguments:\n template\n\n options:\n -h, --help show this help message and exit\n --driver DRIVER default: kamidana.driver:Driver\n --loader LOADER default: kamidana.loader:TemplateLoader\n -d DATA, --data DATA support yaml, json, toml\n --logging {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}\n -a ADDITIONALS, --additionals ADDITIONALS\n -e EXTENSION, --extension EXTENSION\n -i {yaml,json,toml,csv,tsv,raw,env,md,markdown,spreadsheet}, --input-format {yaml,json,toml,csv,tsv,raw,env,md,markdown,spreadsheet}\n -o OUTPUT_FORMAT, --output-format OUTPUT_FORMAT\n --dump-context dumping loading data (used by jinja2 template)\n --list-info listting information (for available extensions and additional modules)\n --debug\n --quiet\n --dst DST\n\n\nexamples\n----------------------------------------\n\nexample (basic)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: console\n\n\n $ kamidana examples/readme/src/00/nginx.jinja2 --data examples/readme/src/00/data.json\n server {\n listen 80;\n server_name localhost;\n\n root /var/www/project;\n index index.htm;\n\n access_log /var/log/nginx/http.access.log combined;\n error_log /var/log/nginx/http.error.log;\n }\n\n\n\n\nexamples/readme/src/00/nginx.jinja2\n\n.. code-block::\n\n server {\n listen 80;\n server_name {{ nginx.hostname }};\n\n root {{ nginx.webroot }};\n index index.htm;\n\n access_log {{ nginx.logdir }}/http.access.log combined;\n error_log {{ nginx.logdir }}/http.error.log;\n }\n\n\n\n\nexamples/readme/src/00/data.json\n\n.. code-block:: json\n\n {\n \"nginx\": {\n \"hostname\": \"localhost\",\n \"webroot\": \"/var/www/project\",\n \"logdir\": \"/var/log/nginx\"\n }\n }\n\n\n\nMore over, passing data with stdin. (please doen't forget to add `--input-format` option)\n\n.. code-block:: console\n\n\n $ echo '{\"nginx\": {\"logdir\": \"/tmp/logs/nginx\"}}' | kamidana --input-format json examples/readme/src/00/nginx.jinja2 --data examples/readme/src/00/data.json\n server {\n listen 80;\n server_name localhost;\n\n root /var/www/project;\n index index.htm;\n\n access_log /tmp/logs/nginx/http.access.log combined;\n error_log /tmp/logs/nginx/http.error.log;\n }\n\n\n\ngentle error message\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nif using include, but the included template is not found.\n\n.. code-block:: console\n\n\n $ tree examples/readme/src/11\n examples/readme/src/11\n \u251c\u2500\u2500 header.html.j2\n \u2514\u2500\u2500 main.html.j2\n\n 1 directory, 2 files\n\n\n\n.. code-block:: console\n\n\n $ kamidana examples/readme/src/11/main.html.j2\n ------------------------------------------------------------\n exception: kamidana._path.XTemplatePathNotFound\n message: [Errno 2] No such file or directory: 'footer-404.html.j2'\n where: examples/readme/src/11/main.html.j2\n ------------------------------------------------------------\n examples/readme/src/11/main.html.j2:\n 2: <main>\n 3: this is main contents\n 4: </main>\n -> 5: {% include \"footer-404.html.j2\" %}\n\n Traceback:\n File \"SITE-PACKAGES/jinja2/loaders.py\", line 462, in get_source\n rv = self.load_func(template)\n File \"HERE/me/kamidana/kamidana/loader.py\", line 27, in load\n raise XTemplatePathNotFound(filename, exc=e).with_traceback(e.__traceback__)\n File \"HERE/me/kamidana/kamidana/loader.py\", line 23, in load\n with open(filename) as rf:\n\n\n\nexample2 (--additionals)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nbuiltin addtional modules\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: console\n\n\n $ kamidana --additionals=kamidana.additionals.naming examples/readme/src/01/use-naming.jinja2\n singular, plurals\n\n - days|singularize -> day\n - day|pluralize -> days\n\n - people|singularize -> person\n - person|pluralize -> people\n\n to {snake_case, kebab-case, camelCase}\n\n - fooBarBoo|snakecase -> foo_bar_boo\n - fooBarBoo|kebabcase -> foo-bar-boo\n - foo_bar_boo|camelcase -> fooBarBoo\n\n\n more information: see kamidana.additionals.naming module\n\n\n\n\n\nexamples/readme/src/01/use-naming.jinja2\n\n.. code-block::\n\n singular, plurals\n\n - days|singularize -> {{\"days\"|singularize}}\n - day|pluralize -> {{\"day\"|pluralize}}\n\n - people|singularize -> {{\"people\"|singularize}}\n - person|pluralize -> {{\"person\"|pluralize}}\n\n to {snake_case, kebab-case, camelCase}\n\n - fooBarBoo|snakecase -> {{\"fooBarBoo\"|snakecase}}\n - fooBarBoo|kebabcase -> {{\"fooBarBoo\"|kebabcase}}\n - foo_bar_boo|camelcase -> {{\"foo_bar_boo\"|camelcase}}\n\n\n more information: see kamidana.additionals.naming module\n\n\n\nor `kamidana -a naming` is also OK (shortcut).\n\nindividual additional modules\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: console\n\n\n $ kamidana --additionals=examples/readme/src/01/additionals.py --data=examples/readme/src/01/data.yaml examples/readme/src/01/hello.jinja2\n \n bye, world!!\n\n\n\n\nexamples/readme/src/01/hello.jinja2\n\n.. code-block::\n\n {% if 19 is night %}\n {{night}}, {{name|surprised}}\n {% else %}\n {{daytime}}, {{name|surprised}}\n {% endif %}\n\n\n\n\nexamples/readme/src/01/additionals.py\n\n.. code-block:: python\n\n from kamidana import (\n as_filter,\n as_globals_generator,\n as_test,\n )\n\n\n @as_filter\n def surprised(v):\n return \"{}!!\".format(v)\n\n\n @as_globals_generator\n def generate_globals():\n return {\"daytime\": \"hello\", \"night\": \"bye\"}\n\n\n @as_test\n def night(hour):\n return 19 <= hour or hour < 3\n\n\n\n\nexamples/readme/src/01/data.yaml\n\n.. code-block:: yaml\n\n name: world\n\n\n\n\nexample3 (using jinja2 extensions)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: console\n\n\n $ kamidana -e do -e loopcontrols examples/readme/src/02/use-extension.jinja2\n \n hello\n world\n hello\n\n ## counting\n - 1\n - 2\n - 4\n\n ## do\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n\n\n\n\nexamples/readme/src/02/use-extension.jinja2\n\n.. code-block::\n\n {# with with. with_ extension is used. #}\n {%- with msg = \"hello\"%}\n {{msg}}\n {%- with msg = \"world\"%}\n {{msg}}\n {%- endwith %}\n {{msg}}\n {%- endwith %}\n\n ## counting\n {#- with break and continue. loopcontrolls extension is used. #}\n\n {%- for i in range(10) %}\n {%- if i % 3 == 0 %}{% continue %} {% endif %}\n {%- if i == 5 %}{% break %} {% endif %}\n - {{i}}\n {%- endfor %}\n\n ## do\n\n {%- set xs = [] %}\n {%- for i in range(10) %}\n {%- do xs.append(i) %}\n {%- endfor %}\n {{xs}}\n\n\n\n\nexample4 (batch execution)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTODO. `see this <./examples/batch>`_\n\n\ndebugging\n----------------------------------------\n\n- `--dump-context`\n- `--debug`\n\ndump context\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: console\n\n\n $ kamidana --dump-context --data=examples/readme/src/10/data.yaml\n {\n \"name\": \"foo\",\n \"age\": 20,\n \"friends\": [\n \"bar\",\n \"boo\"\n ],\n \"template_filename\": null\n }\n\n\nand be able to merge two files.\n\n.. code-block:: console\n\n\n $ kamidana --dump-context --data=examples/readme/src/10/data.yaml --data=examples/readme/src/10/data2.yaml\n {\n \"name\": \"foo\",\n \"age\": 21,\n \"friends\": [\n \"bar\",\n \"baz\"\n ],\n \"template_filename\": null\n }\n\n\nthen\n\n\nexamples/readme/src/10/data.yaml\n\n.. code-block:: yaml\n\n name: foo\n age: 20\n friends:\n - bar\n - boo\n\n\n\n\nexamples/readme/src/10/data2.yaml\n\n.. code-block:: yaml\n\n age: 21\n friends:\n - bar\n - baz\n\n\n\navailable info (extensions and additional modules)\n--------------------------------------------------------------------------------\n\n.. code-block::\n\n $ kamidana --list-info\n extensions are used by `-e`, additional modules are used by `-a`.\n {\n \"extensions\": {\n \"jinja2.ext.i18n\": \"This extension adds gettext support to Jinja.\",\n \"jinja2.ext.do\": \"Adds a `do` tag to Jinja that works like the print statement just\",\n \"jinja2.ext.loopcontrols\": \"Adds break and continue to the template engine.\",\n \"jinja2.ext.debug\": \"A ``{% debug %}`` tag that dumps the available variables,\",\n \"kamidana.extensions.NamingModuleExtension\": \"extension create from kamidana.additionals.naming\",\n \"kamidana.extensions.ReaderModuleExtension\": \"extension create from kamidana.additionals.reader\",\n \"kamidana.extensions.CookiecutterAdditionalModulesExtension\": \"activate additional modules, see context['cookiecutter']['_additional_modules'], created from your cookiecutter.json\"\n },\n \"additional_modules\": {\n \"kamidana.additionals.env\": \"accessing environemt variable, via env()\",\n \"kamidana.additionals.naming\": \"Naming helpers (e.g. snakecase, kebabcase, ... pluralize, singularize)\",\n \"kamidana.additionals.reader\": \"Reading from other resources (e.g. read_from_file, read_from_command)\"\n }\n }\n\n\n\nwith other packages\n--------------------------------------------------------------------------------\n\n- use kamidana's additional modules with `cookiecutter <https://pypi.org/project/cookiecutter/>`_ . (see `examples/extensions/src/02with-cookiecutter <https://github.com/podhmo/kamidana/blob/master/examples/extensions/src/02with-cookiecutter>`_)\n\n\n0.10.0\n\n- catch up new jinja2\n\n0.9.1\n\n- catch up magicalimport 0.8.1\n\n0.9.0\n\n- python 3.8 support (#43)\n\n0.8.2\n\n- more aggressive support for cookiecutter, enable to use relative phisical path\n\n0.8.1\n\n- refine kamidana.additionals.naming implementation\n\n0.8.0\n\n- add creating jinja2's extension mini-framework, and cookiecutter support\n- add kamidana.additionals.env\n- add `--list-info` option\n\n0.7.2\n\n- on error message, skipping almost duplicated jinja2 frame's output\n\n0.7.1\n\n- update readme.rst\n\n0.7.0\n\n- gentle error message\n- changing template path lookup mechanism\n- adding newline at end of file\n- drop trim block=True\n\n0.6.2\n\n- template is not passed, act as --dump-context (#21)\n- same behaviour `-a kamidana.additonals.reader` and `-a reader` (shortcuts) (#18)\n- update readme.rst\n\n0.6.1\n\n- kamidana, fix: --dst option is ignored\n- kamidana-batch, fix: kamidana-batch ignore --logging option\n\n0.6.0\n\n- kamidana.additionals.naming\n\n0.5.0\n\n- new kamidana-batch command\n- changing addtionals.reader's current working directory path\n\n0.4.1\n\n- fix bug (multi -a option)\n\n0.4.0\n\n- add kamidana.additionals.reader\n\n0.3.0\n\n- add `--extension` option\n- add `--dump-context` option\n\n0.2.1\n\n- rename Loader to TemplateLoader\n\n0.2.0\n\n- --loader option is added\n- interfaces are defined\n\n0.1.0\n\n- first release\n",
"bugtrack_url": null,
"license": "",
"summary": "command line jinja2 template (yet another j2cli)",
"version": "0.10.0",
"project_urls": {
"Homepage": "https://github.com/podhmo/kamidana"
},
"split_keywords": [
"jinja2",
"cli",
"commandline"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "fb802906add425651b6ed4e8a9c12c7badd5ce398c6febfacbe4b79be61f61c5",
"md5": "8c81eee3847fce68e625b81609e1e772",
"sha256": "86e2da18e1402efc15ec4dae7b64d66c89ecd79646ab8d3fbe97c27206e12e0e"
},
"downloads": -1,
"filename": "kamidana-0.10.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "8c81eee3847fce68e625b81609e1e772",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 19359,
"upload_time": "2024-03-05T09:54:55",
"upload_time_iso_8601": "2024-03-05T09:54:55.432633Z",
"url": "https://files.pythonhosted.org/packages/fb/80/2906add425651b6ed4e8a9c12c7badd5ce398c6febfacbe4b79be61f61c5/kamidana-0.10.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-05 09:54:55",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "podhmo",
"github_project": "kamidana",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "kamidana"
}