ninja-bear keeps your language specific configs in sync
Project description
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 config 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". Config 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: opener
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 configs 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 = {
OPENER: 'Hello World',
} as const;
Output (readme_config.py)
from dataclasses import dataclass
@dataclass(frozen=True)
class ReadmeConfig:
OPENER = 'Hello World'
Output (readme_config.h)
#ifndef README_CONFIG_H
#define README_CONFIG_H
const struct {
char Opener[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 configs to 'generated' directory.
orchestrator.write('generated')
# Distribute configs (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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file ninja_bear-0.1.0.tar.gz
.
File metadata
- Download URL: ninja_bear-0.1.0.tar.gz
- Upload date:
- Size: 26.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2320431d77405578cb2d5485801cbb8c8e20b3ed3bb3dd7afcd101a66adb5776 |
|
MD5 | b4d779769f4344ebc4817a169e7ff5da |
|
BLAKE2b-256 | 0d8d8a75f68b8e93a46bdf4f51351315be67df079d84081b53a93a14dd71f825 |
File details
Details for the file ninja_bear-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: ninja_bear-0.1.0-py3-none-any.whl
- Upload date:
- Size: 30.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f337773a4431460b36b731aa74601c65fa3906a39520442fba57d37e744d5868 |
|
MD5 | 22c0edb6cf0577194cdb7f4185671efb |
|
BLAKE2b-256 | 547d803f518eff68cafee4fc8f8c02d5232330b517201532ed1c1f24d050cc42 |