Skip to main content

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'
        )
    )

@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()

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

While this design is highly flexible, there are noteworthy drawbacks which must be considered:

  • click parameter definitions and confuse 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 and click 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

clickset-1.0.0.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

clickset-1.0.0-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file clickset-1.0.0.tar.gz.

File metadata

  • Download URL: clickset-1.0.0.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.1 Darwin/23.0.0

File hashes

Hashes for clickset-1.0.0.tar.gz
Algorithm Hash digest
SHA256 02d0a657a05a3e1da4dc9c767a3a125c812f5623fbe35a106a41ad28a082395b
MD5 1c4e9d3de247e5226ec866c77031a4d9
BLAKE2b-256 f2e06437e6e8ed8f79648eeeddef213e5ed6b0d2ab9d1e6bfe931b77a4cdebb5

See more details on using hashes here.

Provenance

File details

Details for the file clickset-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: clickset-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.5 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

Hashes for clickset-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4f3561336031e570a3d66cc495b8f6b0ea5988b737e9d418983ee2563aa5afd4
MD5 b5fd28968c1d5ee85071dff91d3f738f
BLAKE2b-256 4ec6c9801a1646d52c9a6bd34f9dbc893b3df0d68aadd219f258d0c690fe12f6

See more details on using hashes here.

Provenance

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