kamidana


Namekamidana JSON
Version 0.10.0 PyPI version JSON
download
home_pagehttps://github.com/podhmo/kamidana
Summarycommand line jinja2 template (yet another j2cli)
upload_time2024-03-05 09:54:55
maintainer
docs_urlNone
authorpodhmo
requires_python
license
keywords jinja2 cli commandline
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            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"
}
        
Elapsed time: 0.30924s