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
- ninja-bear-language-c
- ninja-bear-language-go
- ninja-bear-language-java
- ninja-bear-language-javascript
- ninja-bear-language-python
- ninja-bear-language-shell
- ninja-bear-language-typescript
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)
| File | Size | Uploaded | |
|---|---|---|---|
| ninja_bear-0.1.4.tar.gz | 26.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|