A library to create flexible option managers.
Project description
Flexible option managers, supporting options with default values, static type hints, runtime type checking, and custom runtime validation logic.
Install
You can install the latest release from PyPI as follows:
$ pip install --upgrade optmanage
Usage
Custom option manager classes can be created by subclassing OptionManager and using the Option descriptor to set options. An option manager object can then be obtained by instantiating the option manager class:
from optmanage import Option, OptionManager
class MyOptions(OptionManager):
""" Options of some library. """
validate = Option(bool, True)
""" Whether to validate arguments to functions and methods. """
eq_atol = Option(float, 1e-8, lambda x: x >= 0)
""" Absolute tolerance used for equality comparisons."""
scaling: Option(
Mapping[Literal["x", "y", "z"], float],
{"x": 1.0, "y": 2.0, "z": 1.0},
lambda scaling: all(v >= 0 for v in scaling.values())
)
""" Scaling for coordinate axes used in plots. """
options = MyOptions()
Each option takes a default value, a type, and an optional validator function:
validate = Option(bool, True)
# option type ^^^^ ^^^^ default value
eq_atol = Option(float, 1e-8, lambda x: x >= 0)
# optional validator ^^^^^^^^^^^^^^^^
Any type supported by the typing-validation library can be used for options, including PEP 484 type hints:
scaling: Option(
Mapping[Literal["x", "y", "z"], float], # <- type hints supported
{"x": 1.0, "y": 2.0, "z": 1.0},
lambda scaling: all(v >= 0 for v in scaling.values())
)
Options can be accessed and set like attributes of the options object:
print(options.scaling) # {'x': 1.0, 'y': 2.0, 'z': 1.0}
options.scaling = {"x": 2.5, "y": 1.5, "z": 1.0}
print(options.scaling) # {'x': 2.5, 'y': 1.5, 'z': 1.0}
It is possible to set multiple options simultaneously using the set method of the options object:
options.set(validate=False, eq_atol=1e-3)
print(options.validate) # False
print(options.eq_atol) # 0.001
It is also possible to use the options object as a context manager, for temporary option setting:
with options(validate=False, eq_atol=1e-3):
print(options.validate) # False
print(options.eq_atol) # 0.001
print(options.validate) # True
print(options.eq_atol) # 0.00000001
All options can be reset to their default values by using the OptionManager.reset method of the options object:
options.set(validate=False, eq_atol=1e-3)
print(options.validate) # False
print(options.eq_atol) # 0.001
options.reset()
print(options.validate) # True
print(options.eq_atol) # 0.00000001
An individual option can be reset to its default value by using the Option.reset method of the Option object, accessed from the option manager class:
options.set(validate=False, eq_atol=1e-3)
print(options.validate) # False
print(options.eq_atol) # 0.001
MyOptions.eq_atol.reset(options) # resets 'eq_atol' on the 'options' object
print(options.validate) # True
print(options.eq_atol) # 0.001
API
Full documentation is available at https://optmanage.readthedocs.io/
Contributing
This project is currently in private development. Public contribution guidelines are available at CONTRIBUTING.md.
License
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 optmanage-1.1.0.tar.gz
.
File metadata
- Download URL: optmanage-1.1.0.tar.gz
- Upload date:
- Size: 766.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7154a34b5660b59f544e33ca13053bdb7d2a051c0dade47f5de49bd0659dcac2 |
|
MD5 | 905a635985fa50ae8b9588bad62c3a86 |
|
BLAKE2b-256 | 6af5da4b9867c6bfd0c3cd252577abf310264c4008f030904c161c2cffdaf060 |
File details
Details for the file optmanage-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: optmanage-1.1.0-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 346b0807923d28256f8aa0d31b5ccc9fcbe69dfc8538783e43d0e66f56056119 |
|
MD5 | 72cd5e3f281293c48b9591399b37c63e |
|
BLAKE2b-256 | 2f90377f091dce8fde352bdda0d5749e72f05095bbc04c98d4d645752c96d252 |