Skip to main content

Package allow configuration and section's option values of .ini file to be called as attributes, where the section and option are separated by dot notation.

Project description

dotmapini

Package allow configuration and section's option values of .ini file to be called as attributes, where the section and option are separated by dot notation.

The focus is to work with .ini configuration data using dot notation. Just call attributes and get their values in development flow while defining them in single place.

  • No more configuration values in config['section']['option'] style, just config.section.option;
  • Can parse .ini files with dots between section names and convert them as several sections for corresponding values;
  • Parse values and convert them to Python datatypes;
    # Return parsed value datatypes:
    Union[Config, str, bool, int, float, bytes, tuple, list, dict, set, None]
    # Other types as well as Python types that aren't presented correctly in .ini
    # not implemented and will be parsed as string.
    
  • Your config is instance of collections.MutableMapping (dict's like) and have the same features;
  • Support all keyword arguments for configparser.ConfigParser in Config.load(path, **kwargs) method;
  • Less keystroke;
  • No dependencies, only stdlib.

Installation:

pip install dotmapini

Usage:

Imagine you have following .ini configuration file:

# example.ini
[APP]
debug = False

[server]
host = 127.0.0.1
port = 8080

[server.db]
host = localhost
database = test
user = username
password = password

[complex.Python.datatypes]  ; Your complex Python datatype as is
example = [{'key': ({'value', 'value2'}, [True, 1.2, 3])}]

Minimal reproducible example:

from dotmapini import Config


config = Config.load(
    path='/your/path/to/example.ini',
    allow_no_value=True  # keyword for configparser.ConfigParser(...)
    )
print(config.APP.debug)  # => False type bool
print(config.server.host)  # => '127.0.0.1' type str
print(config.server.port)  # => 8080 type int
print(config.server.db.database)  # => 'test' type str
print(config.server.db.username)  # => 'username' type str
print(config.complex.Python.datatypes.example)  # => [{'key': ({'value', 'value2'}, [True, 1.2, 3])}] type list

Of course as always you can do this:

print(config['server']['db']['host'])  # => 'localhost' type str

But for what...

IMPORTANT:

  • Uppercase strings for options will be parsed as lowercase.

    Example:

    [section]
    OPTION = ...
    

    Will be:

    config = Config.load(...)
    config.section.option  # not self.section.OPTION
    
  • Only digits in section's name not allowed.

    Example:

    [section.1.subsection]  ; A digit between dots not allowed as well
    ...
    [2]
    ...
    [3.section]
    ...
    

    Will be:

    config = Config.load(...)  # will raise DigitInSectionNameError
    
  • If you have DEFAULT section it will be added to all other sections thus it can override same named option values.

    Example:

    [DEFAULT]
    option = value
    
    [section]
    option = value2
    

    Will be:

    config = Config.load(...)
    config.section.option = value  # not value2
    
  • Be aware not to memory overflow while represent complex Python datatypes in .ini file.

Most of this stuff is the default behavior of configparser.ConfigParser.

Need to mention:

Q: Why not dotmap?
A: I want to focus to work specifically with .ini/configparser. There is no need to me to create a lot of dict's like objects.
Q: Why not types.SimpleNamesapce?
A: It can instantiate attributes and nothing else, that is not the case here. Class collections.MutableMapping provide more control/isolation when create complex custom dict's like bjects, which is focus to work with .ini configuration files and modify receiving values.

LICENSE

MIT

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

dotmapini-1.0.2.tar.gz (8.8 kB view details)

Uploaded Source

Built Distribution

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

dotmapini-1.0.2-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

Details for the file dotmapini-1.0.2.tar.gz.

File metadata

  • Download URL: dotmapini-1.0.2.tar.gz
  • Upload date:
  • Size: 8.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.14

File hashes

Hashes for dotmapini-1.0.2.tar.gz
Algorithm Hash digest
SHA256 0159b44f0630dfcb13b6841aa7d9aa2f1b73793603aa854cbf9ded78862fc2dc
MD5 20def80b0ad9c1e1dd92b9ed30953eac
BLAKE2b-256 cb34a68eec768b317f50f7bd9e01a4746d98f3be9416058588181cfa5352b28a

See more details on using hashes here.

File details

Details for the file dotmapini-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: dotmapini-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 7.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.14

File hashes

Hashes for dotmapini-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b7c61198abebff1a4db5b3a14f9c9986f57001bde9f1167c7419b037be5ad1c7
MD5 5a30f8e65390b774d7a8ff1eac27ac47
BLAKE2b-256 85530355ff6dfbcd9456ba8fa26c3db0af39802331cbe05a31b2f60db0919eb7

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