Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

templatio

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

templatio

Convert text files based on input and output templates

  • 0.1.1
  • PyPI
  • Socket score

Maintainers
1

templatio

.. image:: https://travis-ci.org/marcobellaccini/templatio.svg?branch=master :target: https://travis-ci.org/marcobellaccini/templatio

About templatio

templatio is a Python 3 utility that uses TextFSM_ and Jinja2_ to convert text files based on input and output templates.

It can be used by developers as a module or by users as a script.

It supports TextFSM syntax_ for input templates and Jinja2 syntax_ for output templates.

templatio is Free Software, released under the Apache License, Version 2.0_.

templatio was written by Marco Bellaccini (marco.bellaccini(at!)gmail.com) after a fine lunch.

QuickStart

Suppose that we want to convert a simple formatted text file to a nice html file.

Here is the input text file.

infile.txt:

.. code:: bash

Name: John
Surname: Doe
Country: Atlantis

First, we need to create an input template using TextFSM syntax_.

intempl.txt:

.. code:: bash

Value Name (\S+)
Value Surname (\S+)
Value Country (\S+)

Start
  ^Name: ${Name}
  ^Surname: ${Surname}
  ^Country: ${Country}

Then, we need to write an output template using Jinja2 syntax_.

outtempl.html:

.. code:: html

<!DOCTYPE html>
<html>
  <head>
    <title>Hello</title>
  </head>
  <body>
    <p>Hi, I'm {{ Name }} {{ Surname }} and I come from {{ Country }}.</p>
  </body>
</html>

Now, we can convert the file by running templatio as a script:

templatio intempl.txt outtempl.html infile.txt outfile.html

And here is what we get.

outfile.html:

.. code:: html

<!DOCTYPE html>
<html>
  <head>
    <title>Hello</title>
  </head>
  <body>
    <p>Hi, I'm John Doe and I come from Atlantis.</p>
  </body>
</html>

It's also possible to use templatio as a Python module:

.. code:: python

import templatio

inData = """Name: John
Surname: Doe
Country: Atlantis"""

inTemplate = """Value Name (\S+)
Value Surname (\S+)
Value Country (\S+)

Start
  ^Name: ${Name}
  ^Surname: ${Surname}
  ^Country: ${Country}"""

outTemplate = """<!DOCTYPE html>
<html>
  <head>
    <title>Hello</title>
  </head>
  <body>
    <p>Hi, I'm {{ Name }} {{ Surname }} and I come from {{ Country }}.</p>
  </body>
</html>"""

outData = templatio.parseInToOut(inTemplate, outTemplate, inData)

Let's get more

Here is a slightly more complex example, that gives you an idea of how you can leverage TextFSM_ and Jinja2_ templates to perform advanced conversions.

Assume that we want to generate a json drive usage report from the output of the df_ command on a system with 2 drives.

Json objects associated with the drives should have an alarm value set to true if disk usage is over 80%.

Here are the input and template files.

infile.txt:

.. code:: bash

Filesystem     1K-blocks    Used Available Use% Mounted on
udev             2014208       0   2014208   0% /dev
tmpfs             405100    5848    399252   2% /run
/dev/sda1       16447356 4893016  10699148  32% /
/dev/sda2        1017324  893016    934423  96% /mnt/foo
tmpfs            2025484  222424   1803060  11% /dev/shm
tmpfs               5120       4      5116   1% /run/lock
tmpfs            2025484       0   2025484   0% /sys/fs/cgroup
tmpfs             405096      56    405040   1% /run/user/1000

intempl.txt:

.. code:: bash

Value Drive1 (\S+)
Value Drive1Usage (\d+)
Value Drive2 (\S+)
Value Drive2Usage (\d+)

# start state
Start
  # after parsing drive1 data, switch to Drive1parsed state
  ^/dev/${Drive1} .* ${Drive1Usage}% -> Drive1parsed

# drive 1 parsed state
Drive1parsed
  ^/dev/${Drive2} .* ${Drive2Usage}%

outtempl.json:

.. code:: bash

{% macro checkusage(usage) -%}
    {% if usage > 80 -%}true{% else %}false{% endif %}
{%- endmacro -%}
{
  "drives": {
    "drive1": {
      "name": "{{ Drive1 }}",
      "usage": "{{ Drive1Usage }}",
      "alarm": {{ checkusage(Drive1Usage | int) }}
    },
    "drive2": {
      "name": "{{ Drive2 }}",
      "usage": "{{ Drive2Usage }}",
      "alarm": {{ checkusage(Drive2Usage | int) }}
    }
  }
}

We run templatio (in this example, we use it as a script):

templatio intempl.txt outtempl.json infile.txt report.json

And we get this nice result.

report.json:

.. code:: json

{
  "drives": {
    "drive1": {
      "name": "sda1",
      "usage": "32",
      "alarm": false
    },
    "drive2": {
      "name": "sda2",
      "usage": "96",
      "alarm": true
    }
  }
}

Much more!

These were just toy examples: both TextFSM_ and Jinja2_ have powerful template syntaxes.

After reading their documentation, you'll be able to perform really cool conversions!

.. _TextFSM: https://github.com/google/textfsm .. _Jinja2: http://jinja.pocoo.org/ .. _TextFSM syntax: https://github.com/google/textfsm/wiki/TextFSM .. _Jinja2 syntax: http://jinja.pocoo.org/docs/latest/templates/ .. _Apache License, Version 2.0: https://www.apache.org/licenses/LICENSE-2.0 .. _df: https://www.gnu.org/software/coreutils/manual/html_node/df-invocation.html

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc