8000 GitHub - PetervdPerk-NXP/nunavut: Generate code from DSDL using PyDSDL and Jinja2
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

PetervdPerk-NXP/nunavut

 
 

Repository files navigation

Nunavut: DSDL template engine

tox build (master) Build status
static analysis Sonarcloud Quality Gate Sonarcloud bugs
unit test code coverage Sonarcloud coverage
Python versions supported Supported Python Versions
latest released version PyPI Release Version
documentation Documentation Status
license MIT license
community/support UAVCAN forum

Nunavut is a UAVCAN DSDL template engine that exposes a pydsdl abstract syntax tree to Jinja2 templates allowing authors to generate code, schemas, metadata, documentation, etc.

Partial example: generating a C struct

   /*
    * UAVCAN data structure definition
    *
    * Auto-generated, do not edit.
    *
    * Source file: {{T.source_file_path}}
    */

    #ifndef {{T.full_name | c.macrofy}}
    #define {{T.full_name | c.macrofy}}

    {%- for constant in T.constants %}
    #define {{ T | c.macrofy }}_{{ constant.name | c.macrofy }} {{ constant | constant_value }}
    {%- endfor %}

    typedef struct
    {
        /*
            Note that we're not handling union types properly in this simplified example.
            Unions take a bit more logic to generate correctly.
        */
        {%- for field in T.fields %}
        {%- if field is not padding %}
            {{ field.data_type | declaration }} {{ field | id }}
            {%- if field.data_type is ArrayType -%}
                [{{ field.data_type.capacity }}]
            {%- endif -%};
        {%- if field is VariableLengthArrayType %}
            {{ typename_unsigned_length }} {{ field | id }}_length;
        {%- endif -%}
        {%- endif -%}
        {%- endfor %}
...

    } {{ T | full_reference_name }};

    #endif // {{T.full_name | c.macrofy}}

Nunavut is named after the Canadian territory. We chose the name because it is a beautiful word to say and read. Also, the name fits with a theme of "places in Canada" started with the Yukon project.

Installation

Nunavut requires Python 3.5 or newer and depends on pydsdl.

Install from PIP:

pip install nunavut

Bundled third-party software

Nunavut embeds the following third-party software libraries into its source (i.e. these are not dependencies and do not need to be installed):

  • Jinja2 by Armin Ronacher and contributors, BSD 3-clause license.
  • markupsafe by Armin Ronacher and contributors, BSD 3-clause license (needed for Jinja).

Documentation

The documentation for Nunavut is hosted on readthedocs.io:

Nunavut is part of the UAVCAN project:

About

Generate code from DSDL using PyDSDL and Jinja2

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 82.7%
  • HTML 7.6%
  • C 4.9%
  • CMake 3.8%
  • C++ 0.7%
  • Shell 0.3%
0