Skip to main content

Global memory-based configuration.

Project description

🤖 Auto Config

Memory-based global configuration for Python projects -- in 10 lines of code (including empty lines). Made with the intention of ridding the need to pass Config objects everywhere. Option to use namedtupled if wanted.

Installing

pip install aconf

Why?

Honestly? Because why not. Was tired of having to pass Config objects left and right in small personal projects, so created this.

Using

This module comes with three main functions:

  • make_config(**kwargs): Creates the configuration in memory.
  • config(): Loads configuration from memory as standard dictionary.
  • conf(): Loads configuration from memory as namedtuple object for cleaner access.
from aconf import make_config, config, conf

# Creates a global configuration that can be accessed by any other portion of the runtime.
make_config(database={"user": "admin", "password": "db_password", "host": "localhost", "port": "3306"}, method="GET")

# Accessing the global configuration as a dictionary.
print(config()['database']['user'])
# >>> admin

# Accessing the global configuration as a namedtuple object.
print(conf().database.user)
# >>> admin

A single file example doesn't encapsulate the usefulness of this module. Instead, imagine the following project:

.
├── project
│   ├── __init__.py
│   ├── config.py
│   └── functionality.py
└── main.py

config.py

""" 'Config' class to hold our desired configuration parameters. 

Note:
    This is technically not needed. We do this so that the user knows what he/she should pass 
    as a config for the specific project. Note how we also take in a function object - this is
    to demonstrate that one can have absolutely any type in the global config and is not subjected
    to any limitations.
"""

from aconf import make_config

class Config:
    def __init__(self, arg, func):
        make_config(arg=arg, func=func)

functionality.py

""" Use of the global configuration through the `conf` function. """

from aconf import conf

class Example:
    def __init__(self):
        func = conf().func
        arg = conf().arg

        self.arg = func(arg)

main.py

from project.config import Config
from project.functionality import Example

# Random function to demonstrate we can pass _anything_ to 'make_config' inside 'Config'.
def uppercase(words):
    return words.upper()

# We create our custom configuration without saving it.
Config(arg="hello world", func=uppercase)

# We initialize our Example object without passing the 'Config' object to it.
example = Example()
print(example.arg) 
# >>> "HELLO WORLD"

Performance

Absolutely no idea. I wrote this for small projects that I don't intend on releasing and so I have not bothered to benchmark it. If anyone runs the number it would be lovely if you reported either as an Issue, or directly by shooting a pull request with this portion of the README.md updated. The project in essence does the following:

  • make_config(**kwargs): Pickles the kwargs dictionary and saves it to memory.
  • config(): Loads the pickled dictionary from memory.
  • conf(): Loads the pickled dictionary from memory and transforms it into namedtuple.

It would be reasonable to assume conf() performance is slower than config(). If I had to assume the largest performance drop is within the dumping and loading of pickled objects (even if from memory).

Project

This is the entirety of the project, which is inside __init__.py. Uses namedtuple:

import namedtupled

def make_config(**kwargs):
    globals()["aconf"] = kwargs

conf = lambda: namedtupled.map(globals()["aconf"])
config = lambda: globals()["aconf"]

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

aconf-1.0.1.tar.gz (3.4 kB view details)

Uploaded Source

Built Distribution

aconf-1.0.1-py3-none-any.whl (3.1 kB view details)

Uploaded Python 3

File details

Details for the file aconf-1.0.1.tar.gz.

File metadata

  • Download URL: aconf-1.0.1.tar.gz
  • Upload date:
  • Size: 3.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5

File hashes

Hashes for aconf-1.0.1.tar.gz
Algorithm Hash digest
SHA256 c969a5a9001eccabb154957bb95171e4e5d44f71445fd3da938ee97ebf0872d9
MD5 3cdd20537836562467fece30d37a9572
BLAKE2b-256 dca83eb9db76d7fd660d4909989e09a9b2a253c884920c382ab0be6c25e4fc14

See more details on using hashes here.

File details

Details for the file aconf-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: aconf-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 3.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5

File hashes

Hashes for aconf-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 943c973d05f5692da64b02b3f1a4ecec577636017ca3b7926ad01be1c0b106eb
MD5 b77d27d6175fd1e06443e39350313bb0
BLAKE2b-256 a14d21da6ef48f63f07843b17caaaff53257e3e12771aabb22c87e098d8dca0e

See more details on using hashes here.

Supported by

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