Skip to main content

pyconject --- a highly opinionated PYthon CONfig inJECTor library.

Project description

pyconject

pyconject is a (highly) opinionated PYthon CONfig inJECTor library inspired by Spring Framework (and Spring Boot Framework).

How to pronounce pyconject

pyconject is pronounced PY-CON-JECT, a word play for Burmese "ပိုက်ကွန်ချက်" = "the art of throwing net". It represents how it can be used to capture all types of configs and inject them into all types of packages.

Usage

For detailed usage, refer to usage.

TL;DR

Instead of this:

# in usr_p/usr_sp/usr_m.py
from black_p.black_sp.black_m import black_func

# initialize values_a, value_b, value_c and value_d.
# this part is often the ugly mess because it involves 
# reading yaml or other tree-like files and assigning values
import yaml
with open("./configs.yml", "rt") as f:
  configs = yaml.safe_load(f)
  black_func_parameters = configs["black_p"]["black_sp"]["black_m"]["black_func"]
  value_a = black_func_parameters["a"]
  # more ugly things here; you get the gist ...

black_func(a=value_a, b=value_b, c=value_c, d=value_d)

With pyconject, we can do this:

# in usr_p/usr_sp/usr_m.py
from black_p.black_sp.black_m import black_func

# pyconject initializes values of a, b, c and d.
from pyconject import pyconject

pyconject.init(globals())

with pyconject.cntx():
    black_func() 

Developing with pyconject

Instead of this:

# in dev_p/dev_sp/dev_m.py
import os

env = os.environ["environment"]

def dev_func(a=None, b=None, c=None, d=None):
  if env == "dev":
    if a is None: a = "dev-a"
    if b is None: b = "dev-b"
    # you know the rest
  elif env == "stg":
    if a is None: a = "stg-a"
    if b is None: b = "stg-b"
    # you know the rest
  elif env == "prd":
    if a is None: a = "prd-a"
    if b is None: b = "prd-b"
    # you know the rest
  # ... 
  # your application logic
  return results

With pyconject, you can do this:

# in dev_p/dev_sp/pyconject-dev_m-dev.py
dev_func:
  a : "dev-a"
  b : "dev_b"
  ...
# in dev_p/dev_sp/dev_m.py
from pyconject import pyconject

@pyconject.func
def dev_func(a, b, c, d):
  # your application logic
  return results

Features

  • Developer integration

    • Functions
    • Classes
    • Modules
    • Packages
  • Client integration

    • Functions
    • Classes
    • Modules
    • Packages
    • Init (with globals())
  • Type of configs

    • yaml -- priority
      • reference other yaml files
    • environment/target selection

To Dos

  • Generate config files

  • Raw retrieval of resolved configs (to manipulate by user)

  • Other types of configs

    • .env
    • override by
      • environment variables
      • commandline arguments

How to contribute

  • Create a PR into dev branch.
    • Github actions will run unit-tests.
  • Periodically, the package maintainer will PR into main branch.
    • Unit-tests will be run again.
    • When merged, pypi package and github releases will be published.

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

pyconject-0.1.6.tar.gz (16.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyconject-0.1.6-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

Details for the file pyconject-0.1.6.tar.gz.

File metadata

  • Download URL: pyconject-0.1.6.tar.gz
  • Upload date:
  • Size: 16.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyconject-0.1.6.tar.gz
Algorithm Hash digest
SHA256 6961f6474a45dcbcc81490badedf1f37f3f9122cf008b1dfb020c7eeb6ddc471
MD5 4bd541ff4cd08bbf7893f53a278ee84d
BLAKE2b-256 25480e4039c24adff4bec9a24cc16c0099fc5327b176e5b253b7e6247dcf0f9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyconject-0.1.6.tar.gz:

Publisher: main-push-release.yml on neolaw84/pyconject

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyconject-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: pyconject-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 14.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyconject-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 e18886df37d932e0560d8a797f4f75d20ec52775a1176d8f94cbdbd0624d25fa
MD5 0f31d19ef87530802773695455639cc6
BLAKE2b-256 677e6714a3a0c3263abec5583f64ed758d5c59524b4d80cc8aeade0298f8e7db

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyconject-0.1.6-py3-none-any.whl:

Publisher: main-push-release.yml on neolaw84/pyconject

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page