Skip to main content

Configuration Managment library

Project description

Perfect Config

Manage your configuations in a mechanism similar to SQLAlchemy.

Usage

Install using pip install perfectconfig.

Define your configuration classes :

from perfectconfig import GlobalConfig, ConfigProperty, config_store

class SampleServerConfiguration(GlobalConfig):
    _name = "server_config"
    port = ConfigProperty(int, "port", default=8080)
    host = ConfigProperty(str, "host", default="localhost")
    name = ConfigProperty(str, "name", default="sample_server")

config_store.track() # Tracks the configuration defined in the file

Initialize your store(once initialized this is accessible everywhere):

from perfectconfig import config_store
config_store.initialize("my-org", "my-product", format="yaml", single_file=False)

format can be json or yaml. Default is json.

single_file allows you to control, whether all individual configurations will be stored as separate files, or if they'd be maintained in the same file. In some cases format errors in the configuration file might impact the whole file, so you may want to separate it out. By default, it is set to True.

config_store.initialize can be called anywhere, but it is recommended to have it at the entrance point of the program.

Use anywhere:

from perfectconfig import config_store

# Use it
server_config = config_store["server_config"]
print(server_config.port)

# Modify it
server_config.port = 9090
config_store.save(server_config)

What about deletions?

This library does not provide a mechanism to delete configurations, or rename them on specific environments. Kindly ensure that when deployed everything is as-intended.

What we do provide is a clean-up mechanism:

from perfectconfig import config_store
config_store.initialize("my-org", "my-product", type="yaml")
config_store.remove()

This is expected to help you manage your configurations, but in a human readable way, so offers no encryption options, at the moment.

There are no in-built mutex, or resource locking implemented, this is to provide flexibility to the implementor.

Active and Lazy loading

The program is prepared to perform active and lazy loading as required. The developer need not bother about it, and work on the main logic itself. Just by following the aforementioned steps, the configuration store will automatically manage the loading.

Active loading is when the property definitions and values are required at the start of the program. When the file containing the property definitions are imported, it automatically triggers the track function, to add load the definitions and then load the values using initialize.

Lazy loading is when the property definitions are loaded at a later time. This works by holding the values on a buffer, and assigning the values to the defintions, when they're required to be used.

Everything happens under the hood without the explicit intervention of the user.

Under the hood

Uses the in-built json library, and pyyaml and appdirs to provide the functionality in a structured way.

This is inspired from the property loading mechanism in Spring Boot, with the mechanism used in SQLAlchemy.

Warnings

If the configurations objects are changed(such as during development), the objects aren't automanaged yet. This will require a manual removal or updation of the configurations for them to operate as expected.

Planned

from perfectconfig import config_store
config_store.load(yourpackage.env_configs.prod)
config_store.load(yourpackage.env_configs.dev)
...

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

perfectconfig-1.2.0.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

perfectconfig-1.2.0-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file perfectconfig-1.2.0.tar.gz.

File metadata

  • Download URL: perfectconfig-1.2.0.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.9.21

File hashes

Hashes for perfectconfig-1.2.0.tar.gz
Algorithm Hash digest
SHA256 0eea4d31dca240e6d406be287b3c88c1e29af4ffa068c94b833ba0bbc5e27514
MD5 479fba94ef86513f0f864776bcc7e80d
BLAKE2b-256 ee52099d1f825d643ceb28e75787078c9f41755afc7e510d37ba12024922b064

See more details on using hashes here.

File details

Details for the file perfectconfig-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: perfectconfig-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.9.21

File hashes

Hashes for perfectconfig-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 df7580dd14e1fab98ea105c6a8265d09aeab5e8c696e80ee5bc301553a9697c8
MD5 247233f6a7e4e3a24556f8ee2325a69e
BLAKE2b-256 e4c54d5176dc5aaba0f507a2072baf2564e26b79b78534384955ffa647d1f07d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page