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 thekwargs
dictionary and saves it to memory.config()
: Loads the pickled dictionary from memory.conf()
: Loads the pickled dictionary from memory and transforms it intonamedtuple
.
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
Release history Release notifications | RSS feed
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 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
Algorithm | Hash digest | |
---|---|---|
SHA256 | c969a5a9001eccabb154957bb95171e4e5d44f71445fd3da938ee97ebf0872d9 |
|
MD5 | 3cdd20537836562467fece30d37a9572 |
|
BLAKE2b-256 | dca83eb9db76d7fd660d4909989e09a9b2a253c884920c382ab0be6c25e4fc14 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 943c973d05f5692da64b02b3f1a4ecec577636017ca3b7926ad01be1c0b106eb |
|
MD5 | b77d27d6175fd1e06443e39350313bb0 |
|
BLAKE2b-256 | a14d21da6ef48f63f07843b17caaaff53257e3e12771aabb22c87e098d8dca0e |