Skip to main content

Config handler for code-declared and file-defined settings.

Project description

Badger_Config_Handler

A python library for handling code-declared and file-defined settings.

Supports saving to JSON and YAML files.

Installation

Install from PyPi

pip install badger-config-handler

Rules and limitations

  1. settings are declared in the class and defined in setup()
  2. settings MUST be declared with a type hint. example: my_var: int
  3. settings can only be of allowed data type
  4. settings not declared in code are ignored in the config file (and are removed on the next save, same for commented out settings)
  5. settings can be None if they are set to null in the config, regardles of the type hint
  6. settings without a default value set in setup() are not saved to the config file, but they can still be set from the config file
  7. The root_path and parent_section propertys are NOT available in setup()

Example config

from pathlib import Path
from badger_config_handler import Badger_Config_Base, Badger_Config_Section

class Sub_Section(Badger_Config_Section):
    section_var: str
    section_float: float

    section_path: Path

    def setup(self):
        self.section_var = "section"
        self.section_float = 20.3
        self.section_path = "relative/sub/path"

    def post_process(self):
        self.section_path = self.make_absolute_to_root(
            relative_path = self.section_path, 
            enforce_in_root = True
        )# becomes "path/to/project/root/relative/sub/path"

    def pre_process(self):
        self.section_path = self.make_relative_to_root(
            absolute_path = self.section_path
        )# turns back to "relative/sub/path"


class base(Badger_Config_Base):
    my_var: str
    my_int: int
    my_none: str
    
    sub_section: Sub_Section # NOT Badger_Config_Section

    def setup(self):
        self.my_var = "test"
        self.my_int = 50
        self.my_none = None
        
        self.sub_section = Sub_Section(section_name="sub")

config = My_Base(
    config_file_path="path/to/config.json",
    root_path="path/to/project/root"
)

config.save()
config.load()
config.sync()

Allowed data types

native

the file handlers have native support for these types and are used as is, no conversion is done on these values

  • string
  • int
  • float
  • bool
  • None / null

supported

Badger_Config_Section

converted using

  • serialize: {VAR}.to_dict()
  • de-serialize: Badger_Config_Section.from_dict({VAR})

datetime.datetime

converted using

  • serialize: {VAR}.isoformat()
  • de-serialize: datetime.fromisoformat({VAR})

pathlib.Path

converted using

  • serialize: str({VAR})
  • de-serialize: pathlib.Path({VAR})

Collections

NOTE:

It is recommended to use a Config Section instead of Collections.

If collections are used items should be of native type only, if they are not of native type they are serialized but can NOT be de-serialize.

Code using these values must handle these cases.

dict

list




Config Base


Property's


_config_file_path

path to the config file


ALLOWED_FILE_TYPES

all allowed file extensions



Function's


setup()

see Config_Section.setup()


save()

Saves config to file

steps:

  1. pre_process()
  2. save to file
  3. post_process()

load()

Load config from file

Parameters:

param type required default Note
auto_create bool True Create config file if not found
safe_load see bool True ! UNTESTED !

sync()

Sync config with file

runs:

  1. load()
    • if file exists then continue else stop here
  2. save()
  3. load()

this adds new config fields to the file or removes old ones

Parameters:

same as load()




Config Section


Property's


section_name

name of the current section


root_path

by default the project root path or overridden by the parent section


parent_section

reference to the parent section (if it exists)



Function's


setup()

Replacement for __init__()

should be used to set default values

NOTE: the propertys root_path and parent_section are NOT available during this


pre_process()

Pre process values before save()

Warning: the function should be written in a way that running it multiple times in a row doesn't cause problems

useful for:


post_process()

post process values after load()

Warning: the function should be written in a way that running it multiple times in a row doesn't cause problems

useful for:


make_absolute_to_root(Path, bool)

Help function to make a setting Path absolute to the sections root_path

Paths settings can escape the root_path using something like ../../secrets.json.
To avoid that use enforce_in_root.

Parameters:

param type required default
relative_path Path x
enforce_in_root bool True

make_relative_to_root(Path)

Help function to make a setting Path relative to the sections root_path

Parameters:

param type required default
absolute_path Path x

to_dict(bool)

converts all values to a dictionary

Parameters:

param type required default
convert_to_native bool True

from_dict()

Reconstruct Config Section from dictionary

Parameters:

param type description required default
data dict[str, native] the dict representation of this section (as generated from to_dict(True) ) x
safe_load bool ! UNTESTED !
True -> Only variables that already exist in the class are set (uses hasattr)
False -> New variables can be set from config file
True
danger_convert bool ! UNTESTED !
For details see docs of _native_to_var()
False

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

badger-config-handler-0.3.1.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

badger_config_handler-0.3.1-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file badger-config-handler-0.3.1.tar.gz.

File metadata

  • Download URL: badger-config-handler-0.3.1.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for badger-config-handler-0.3.1.tar.gz
Algorithm Hash digest
SHA256 3f8257d9af9caa2a484362d4317643e586e69d9e9a3c453d41e9016bb443e117
MD5 86eb24cc1e9bc922f79c2eb21113e050
BLAKE2b-256 a8c561ec160827a51e86ed5edb3928cf21b7d7595594ca4f084bb77f6ce50ae0

See more details on using hashes here.

File details

Details for the file badger_config_handler-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for badger_config_handler-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8fa02e5db136f78601bfd82ef2c8da81a4eff862e8289f70d9ecd4d6fcf99ed0
MD5 88716df60c1b5a7947413e09c4223e99
BLAKE2b-256 f619e8a174643c678343553ec965d252cd4cd13473aaeeb32ad0b2e6718a4ac1

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