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

Note: pyconject requires Python 3.10+. Please be aware that Python 3.10 is nearing its end-of-life for security fixes (October 2026), so upgrading to a newer version is recommended.

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

from pyconject import pyconject

# Explicitly wrap the specific function (or module)
black_func = pyconject.wrap(black_func)

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

    • Smart Wrap (wrap())

  • 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.2.1.tar.gz (18.6 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.2.1-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pyconject-0.2.1.tar.gz
Algorithm Hash digest
SHA256 90139d8f3d4df10abcc1e1ffc98da161a768aafd1118f704578908d34c5b5837
MD5 15239074c5952fb4416c9ce212a99edb
BLAKE2b-256 244229e69838730778135c38d7527cfe52dda52f2a75cd60577fa83680714072

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyconject-0.2.1.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.2.1-py3-none-any.whl.

File metadata

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

File hashes

Hashes for pyconject-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 97583a83a1c86da32fcdcee0d6ac44ce7457edcb13c1befa6ff10dd2ad1e12f5
MD5 b19dabee7316d582071db92e2b68d7ea
BLAKE2b-256 e5d2a667e7f86d7f8c1333eda6baa9cd12c18706c409b799ed510defdea3b180

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyconject-0.2.1-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