Skip to main content

Project created to given the possibility of create dynamics config files

Project description

python-config-parser


Tests PyPI version Coverage Status

python-config-parser lets you create runtime configuration objects using json or yaml files.

MAIN FEATURES


  • Declarative configurations without using .ini files
  • Access using OOP or subscriptable, which means that you can iterate the config object items
  • Runtime validation using schema
  • Automatic environment variables interpolation
  • Automatic parser selecting using config file extension

HOW TO INSTALL


Use pip to install it.

pip install python-config-parser

HOW TO USE


By default, the config file will look for any of the following config files in the config directory: config.json/config.yaml/config.yml. You can change the config directory and or config file according to your preference (assuming your current directory).

from pyconfigparser import configparser

configparser.get_config(CONFIG_SCHEMA, config_dir='your_config_dir_path', file_name='your_config_file_name')

Schema validation

You may or not use schema validation. If you want to use it, it will validate and apply rules to the whole config object before returning it. If you choose to not use it, it won't validate the config object before returning it, and it may generate runtime access inconsistencies. How to use schema

from schema import Use, And

SCHEMA_CONFIG = {
    'core': {
        'logging': {
            'format': And(Use(str), lambda string: len(string) > 0),
            'date_fmt': And(Use(str), lambda string: len(string) > 0),
            'random_env_variable': str
        },
        'allowed_clients': [{
                'ip': str, # <- Here you can use regex to validate the ip format
                'timeout': int
            }
        ]
    }
}

The config.yml file

core:
  random_env_variable: ${RANDOM_ENV_VARIABLE}
  logging:
    format: "[%(asctime)s][%(levelname)s]: %(message)s"
    date_fmt: "%d-%b-%y %H:%M:%S"
  allowed_clients:
  - ip: 192.168.0.10
    timeout: 60
  - ip: 192.168.0.11
    timeout: 100

A json config file would be something like:

{
  "core": {
    "random_env_variable": "${RANDOM_ENV_VARIABLE}",
    "logging": {
      "format": "[%(asctime)s][%(levelname)s]: %(message)s",
      "date_fmt": "%d-%b-%y %H:%M:%S"
    },
    "allowed_clients": [
      {
        "ip": "192.168.0.10",
        "timeout": 60
      },
      {
        "ip": "192.168.0.11",
        "timeout": 100
      }
    ]
  }
}

The config instance

from pyconfigparser import configparser, ConfigError
import logging

try:
    config = configparser.get_config(SCHEMA_CONFIG)  # <- Here I'm using that SCHEMA_CONFIG we've already declared
except ConfigError as e:
    print(e)
    exit()

# to access your config you just need to:

fmt = config.core.logging.format #at this point I'm already using the config variables
date_fmt = config['core']['logging']['date_fmt'] # here subscriptable access

logging.getLogger(__name__)

logging.basicConfig(
    format=fmt,
    datefmt=date_fmt,
    level=logging.INFO
)

# the list of object example:

for client in config.core.allowed_clients:
    print(client.ip)
    print(client.timeout)
    
# You can also iterate objects, but instead of giving the property it'll give you the property's name
# And then you can access the values by subscriptale access
for logging_section_attr_key in config.core.logging:
    print(config.core.logging[logging_section_attr_key])

# Accessing the environment variable already resolved
print(config.random_env_variable)

Assuming you've already created the first Config's instance this instance will be cached inside Config class, so after this first creation you just need to re-invoke Config.get_config() without any argument

from pyconfigparser import configparser

config = configparser.get_config()

You can also disable this caching behavior

from pyconfigparser import configparser

configparser.hold_an_instance = False

Environment Variables Interpolation

If the process does not find a value already set to your env variables It will raise a ConfigError. But you can disable this behavior, and the parser will set None to these unresolved env vars

from pyconfigparser import configparser

configparser.ignore_unset_env_vars = True
config = configparser.get_config()

CONTRIBUTE


Fork https://github.com/BrunoSilvaAndrade/python-config-parser/ , create commit and pull request to develop.

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

python-config-parser-3.1.3.tar.gz (5.4 kB view details)

Uploaded Source

Built Distribution

python_config_parser-3.1.3-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file python-config-parser-3.1.3.tar.gz.

File metadata

  • Download URL: python-config-parser-3.1.3.tar.gz
  • Upload date:
  • Size: 5.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for python-config-parser-3.1.3.tar.gz
Algorithm Hash digest
SHA256 2039f87a4f6261ba0ed0d65492b5c870f08dc87a6ea7347600db4d647ed19d6e
MD5 b8dd83ec896189d0ee2b069a637373ec
BLAKE2b-256 b58adcbbb2df9945400576298ddc98c248936e14642cee86901ef6b1458c94ae

See more details on using hashes here.

File details

Details for the file python_config_parser-3.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for python_config_parser-3.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 231a1490f8db69aa8ca4c9661ba3ac0f8bc841bbc8683ae60f26fbef6e58c235
MD5 12a1f106c7be5b872568c3072cbb5fa2
BLAKE2b-256 e48072af2411ef47de5c7be7a161abdef5e945bd393c529f4c3a5d821f364dc8

See more details on using hashes here.

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