Package for simplified work with configurations (as dataclass), manage their profiles, and export/import possibilities
Project description
Configlayer: an attempt to simplify working with configurations
| Python | Linux | Windows | MacOS |
|---|---|---|---|
| 3.10 | |||
| 3.11 |
Features
Initially positioned as a convenient bridge between dataclass and ConfigParser,
but later was split into optional modules and added extra functionality:
- Profiles module (cfg.profiles) - a lot of functions for config profiles manipulation:
- Profiles: get, set, clear, rename and switch
- Groups: get and del, set at init only ('group' keyword)
- I/O module (cfg.io) - export/import functions, if needed custom save/load
- File module (cfg.file) - save/load functions for ini config files (use I/O)
- Config groups - simultaneous switch/rename of several configs profiles (use profiles)
- On set handlers (cfg.*_on_set) - calling a user-defined function for changed field(s)
- Options (cfg.options) - change defaults in several functions (waits rewrite in future)
- Data validation (implemented in utils module, but maybe
pydanticshould be used) - Batch fields get (cfg.get_*) - data, defaults, types, changed states, params, on_set handlers
- Batch fields set (cfg.set_*) - data and defaults only
- Besides ConfigBase, there is also LanguageBase - use fixed 'language' group, and 'str' type
Todo list
- Add docs..
- Add optional autosave (time interval, at exit)
- Add optional get_value_func and pooling_sec to Field (for environment variables, etc.)
- Add optional history of fields/profiles changes (for undo/redo)
- Add config versions (import from older configs by dev-provided functions)
- Add multiple configs in single file (if profiles disabled)
- Add modules support, for example __init__(modules={'db': DataBaseBridge}) (cfg.db)
- Add several active profiles support (with different active fields, override by last one)
- Add logging..
- Do something with utils module - make a separate library or simplify it
- Rebuilt Options to set default methods params at init and change it during execution
Installing
Recommended way (without '--user' - elevated privileges needed, if a system interpreter is used)
pip install --user configlayer
Minimal usage example
from configlayer import ConfigBase
class Config(ConfigBase):
param: str = 'Some str'
data = Config('cfg.ini') # Load from file if exists, else check save file possibility
data.param = 'Another str'
data.cfg.file.save()
Other examples
Common part
from ast import literal_eval # Needed only for custom fields import from str
from configlayer import ConfigBase, Field # Field is needed only for custom fields I/O
# Configuration fields with types and factory defaults
class Config(ConfigBase):
"""Main""" # optional verbose config name at first __doc__ line
auto: bool = False
tab: int = 0
param: str = 'factory default'
items: list = []
items_custom_io: list = Field([], lambda x: f'{x}custom', lambda x: literal_eval(x[:-6]))
Simple config file
# Init config from file, if it exists
data = Config('config simple.ini')
# Set fields ways
data.param = 'field'
data.cfg.set_fields({'auto': True, 'items': ['some']})
# Set user defaults
data.cfg.set_defaults({'tab': 1, 'items_custom_io': ['default']})
# Save changes to file (no autosave yet, planned)
data.cfg.file.save()
Profiles config file
# Init config with profiles support (file has additional internal section)
data = Config('config profiles.ini', profiles=True)
profiles = data.cfg.profiles
# Set defaults ways (at this stage - default profile selected, set fields ways change defaults)
data.param = 'default'
data.cfg.set_fields({'auto': True, 'tab': 2})
data.cfg.set_defaults({'items': ['default'], 'items_custom_io': ['default']})
# Add new profiles and switch to it ways
profiles.set('Profile 1', {'auto': False, 'tab': 0})
## 'auto' and 'tab' at factory defaults, 'items' and 'items_custom_io' at user defaults
profiles.switch('Profile 1')
## the same as 'Profile 1', due to copy from currently selected profile
profiles.switch('Profile 2', add=True, add_current=True)
## all fields copied from user defaults
profiles.switch('Profile 3', add=True)
# Rename current profile
profiles.rename('New profile')
# Rename selected profile
profiles.rename('New profile 2', 'Profile 2')
# Save changes to file (no autosave yet, planned)
data.cfg.file.save()
Simple RAM-only config, with I/O operations
# Init config only in RAM with export/import functions access
data1 = Config(io=True)
data1.param = 'field'
exported = data1.cfg.io.export_config()
data2 = Config(io=True)
data2.cfg.io.import_config(exported)
assert data1 == data2
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file configlayer-0.1.2.tar.gz.
File metadata
- Download URL: configlayer-0.1.2.tar.gz
- Upload date:
- Size: 67.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7cea001d2ab56ed29eb55ef85a08c044130754103220ebe5ddd51a8d8c01228
|
|
| MD5 |
6d6bf57fae7249d00dd74477cedb745f
|
|
| BLAKE2b-256 |
01c8409a927dabfbf028a4a6d5114a63776ed911b81ed366339d158c8da110f3
|
File details
Details for the file configlayer-0.1.2-py3-none-any.whl.
File metadata
- Download URL: configlayer-0.1.2-py3-none-any.whl
- Upload date:
- Size: 37.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f0c32c8aaec4c8d50e4e1da699cc4473f4448618586b7770aebbfe8cc95afcc
|
|
| MD5 |
30e33098dd1c7c143f8e83b9f1654846
|
|
| BLAKE2b-256 |
46fed2c5d0f4e8c9fea7c8655484482a441cc7ab63f0cb9e9e0391acf37eb264
|