In-class settings configurable via both click and confuse libraries
Project description
ClickSet
ClickSet is a thin wrapper around the click
and confuse
libraries, combining
them both into a simple property-like interface for use with python classes.
from clickset import Setting
from clickset import ClickParams
from clickset import get_config
import confuse
import click
class MyClass:
verbose = Setting(
# confuse storage path
'general.verbose',
# click boolean option
option = ClickParams(
'--verbose/--quiet',
help = 'Verbose or Quiet Output'
)
)
def my_func(self):
# Get the value of a Setting
print(f"verbose status: {self.verbose}")
# Set the value of the property ... in memory only!
self.verbose = False
assert self.verbose == False
@click.command
# Load all options set in classes
@Setting.options
def main(**kw):
# Get the default global confuse configuration singleton
config = get_config()
foo = MyClass()
print(f"verbose: {foo.verbose}")
assert foo.verbose == kw['verbose']
assert foo.verbose == config['general']['verbose'].get()
# confuse/click values can also be obtained directly from classes
# ... NOTE: The value here is read-only!
assert MyClass.verbose.get() == kw['verbose']
# confuse/click values can also be obtained without a class
verbose = Setting(
# confuse storage path
'general.verbose',
# click boolean option
option = ClickParams(
'--verbose/--quiet',
help = 'Verbose or Quiet Output'
)
)
assert verbose == MyClass.verbose.get()
assert verbose == foo.verbose
main(['--verbose'])
Design Concepts
This library is built around the following design concept:
- Define app configuration in the class where it is used
- Link command line options to configuration file entries
- Permit multiple configuration files covering different purposes
- Provide a persistent application state storage mechanism
- Provide a simple interface which covers common use scenarios
- Provide as much access as possible to underlying libraries
These design concepts led me to utilizing two base libraries to provide functionality:
- confuse: Provides configurable values to an application by providing multiple sources (memory, command line arguments, YAML files, etc.) in a priority based list.
- click: Provides a command line interface which is easily extended with additional funcitonality.
While both of these libraries are very powerful tools in their own right, they
both force their relevant settings into a central location. In order to keep
all configuration settings in the location they are used, this library combines
confuse
and click
into a single class called Setting
. The resulting class
has the following features:
- All data is stored using confuse
- Command line parameters provided by click are inserted into the confuse data store
- Data is accessed in the same mechanism as a python
property
- Values can be overridden on a per-instance basis (same as setting a
property
) - click/confuse values can obtained direclty using
Setting(...).get()
in order to easily obtain configured values outside of class restrictions (see the example above)
While this design is highly flexible, there are noteworthy drawbacks which must be considered:
click
parameter definitions andconfuse
data stores must be defined as global singletons.- Generally this is acceptable as both configuration files and command line interfaces have one instance per application.
- Multiple singletons can be created for both
confuse
andclick
in order to provide design flexibility.
- Command line options are always generated if the relevant class has been
imported. This means that care must be taken with inactive code to ensure it
is not imported by the main application.
- This is generally a small risk if one is following good coding practices by importing only files which are used in a module.
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
Built Distribution
File details
Details for the file clickset-1.1.0.tar.gz
.
File metadata
- Download URL: clickset-1.1.0.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.1 Darwin/23.0.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 629ae628bcd80d383b2fbeca77ba34710cad9186280bce41ad56b781cfab5999 |
|
MD5 | 4eabc91177303f920ddf9eb339ab71aa |
|
BLAKE2b-256 | fbf5cfd0199b137125c6b505939679be9039c71b307b28c2f8e58bca2b8028a4 |
File details
Details for the file clickset-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: clickset-1.1.0-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.1 Darwin/23.0.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d445e9389d38219725a10cd3fa0ee10381d6f34d0389869e920725ea8d47a2b0 |
|
MD5 | 34269152847fd6fb3e2b81fe8db76332 |
|
BLAKE2b-256 | c8da80fa0414466953b54e697d289e9c20d923511dbd822666bd06f12799ba88 |