Skip to main content

ninja-bear 🥷🐻

In times of distributed systems and en vogue micro-architecture it can get quite cumbersome to keep constants that are required by several components up-to-date and in sync. It can get especially hard when these components or services are written in different languages. ninja-bear targets this issue by using a language neutral YAML configuration that lets you generate language specific constant-files.

Concept

ninja-bear uses a plugin-based approach in which each language and distributor is an independend Python module. This gives developers a high amount of flexibility by letting them define and publish their own languages and distributors without the need to modify ninja-bear directly.

Installation

pip install ninja-bear

Example

Lets have a look at a simple example to see what ninja-bear can do for you.

The example YAML file contains a property named greeting with the value "Hello World". Constant-files shall be generated for TypeScript, Python and C (using the corresponding plugins). In case of C, the value shall be changed to "Hello Mars" and the file shall be distributed to Git using the ninja-bear-distributor-git plugin.

For detailed configuration information, please check test-config.yaml. All possible values are described there.

Input (readme-config.yaml)

# -----------------------------------------------------------------------------
# This section defines languages and properties which are usually the settings
# that you'll use the most.
# -----------------------------------------------------------------------------
languages:
  - language: typescript
    property_naming: screaming-snake
    export: esm

  - language: python
    file_naming: snake
    property_naming: screaming-snake

  - language: c
    file_naming: snake
    property_naming: pascal

    transformers:
      - mars-transformer

    distributors:
      - git-distributor

properties:
  - type: string
    name: greeting
    value: Hello World

# -----------------------------------------------------------------------------
# This sections defines the available transformers and distributors. They are
# are used if property values need to be transformed before they get written
# or if specific language constants shall be distributed. To use a transformer
# and/or a distributor, its alias needs to be used in the language section
# (refer to c-example).
# -----------------------------------------------------------------------------
transformers:
  - transformer: |
      value = 'Hello Mars'
    as: mars-transformer

distributors:
  - distributor: git
    as: git-distributor

Execute ninja-bear

# -d is used to distribute the C-file to Git.
ninja-bear -c readme-config.yaml -d

Output (readme-config.ts)

export const ReadmeConfig = {
    GREETING: 'Hello World',
} as const;

Output (readme_config.py)

from dataclasses import dataclass

@dataclass(frozen=True)
class ReadmeConfig:
    GREETING = 'Hello World'

Output (readme_config.h)

#ifndef README_CONFIG_H
#define README_CONFIG_H

const struct {
    char Greeting[11];
} ReadmeConfig = {
    "Hello Mars",
};

#endif /* README_CONFIG_H */

Usage

Commandline

ninja-bear -c test-config.yaml -o generated

Script

from ninja_bear import Orchestrator

# Create Orchestrator instance from file.
orchestrator = Orchestrator.read_config('test-config.yaml')

# Write constants to 'generated' directory.
orchestrator.write('generated')

# Distribute constants (if required).
orchestrator.distribute()

Create a plugin

To create a new plugin, clone the repository, run the create_plugin.py script and select the corresponding plugin type. The script guides you through the required steps and creates a new folder (e.g. ninja-bear-language-examplescript), which contains all necessary files to get started. All files that require some implementation contain the comment "TODO: Implement". The method comments contain information about what to implement. To install and test the plugin, scripts can be found in the helpers directory.

Example list of available plugins

A short list of available plugins for ninja-bear. There are probably more. For a better overview please refer to pypi.org.

Languages

Distributors

Metadata

Release files for ninja-bear 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ninja-bear 0.1.4
File Size Uploaded Provenance
ninja_bear-0.1.4.tar.gz 26.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for ninja-bear 0.1.4
File Interpreter ABI Platform
ninja_bear-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 58.1 kB

Release files / ninja_bear-0.1.4.tar.gz

Download URL ninja_bear-0.1.4.tar.gz
Size 26.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2ae1561729140d755409e7e54a3ef5bf2d42bb5511ee10b7c4d15a67329ab122
BLAKE2b-256 checksum
How to use checksums
9d7e2cda82939216b7cfe246bd04fcefd0a1a016a321e6f831ef348853615d1a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.7

Release files / ninja_bear-0.1.4-py3-none-any.whl

Download URL ninja_bear-0.1.4-py3-none-any.whl
Size 31.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ebadb6439c4aedb29ccd314d375068cb8e5e2e4021160c22dc83dab023119793
BLAKE2b-256 checksum
How to use checksums
db833ed83dec5c29af467c2108220dae8ecda12e4ac503835fddbf2e2983661b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.7

Security for ninja-bear 0.1.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page