Python 3+ compatible port of the configobj library

Overview

configobj

Build Status Coverage Status PyPI version License

Python 3+ compatible port of the configobj library.

Documentation

You can find a full manual on how to use ConfigObj at readthedocs. If you want to work on the project, please see the Contributing section below.

Status

This project is now maintained by Eli Courtwright and Rob Dennis with the blessing of original creator Michael Foord.

For long time ConfigObj users, the biggest change is in the officially supported Python versions (it was 2.3 … 2.6):

  • 2.7
  • 3.4 … 3.7

Other Python3 versions may work, but this is what Travis and tox use to run the tests on commit.

Roadmap

  • Fixing any issues introduced as a result of the added Python 3 support
  • Moving tests away from doctests in favor of pytest (reasonable now that versions older than 2.6 are dropped)
  • Considering new features that work in a backwards-compatible way (feel free to open an issue with your suggestion)
  • Also see the milestones

Contributing

Contributing to this project is easy, and reporting an issue or adding to the documentation also improves things for every user. You don’t need to be a developer to contribute. See CONTRIBUTING for more.

As a documentation author or developer, to create a working directory for this project, call these commands:

git clone "https://github.com/DiffSK/configobj.git"
cd "configobj"
command . .env --yes --develop  # add '--virtualenv /usr/bin/virtualenv' for Python2
invoke build --docs test doctest check

For this to work, you might also need to follow some setup procedures to make the necessary basic commands available on Linux, Mac OS X, and Windows.

Running the test suite can be done several ways, just call invoke test for a quick check. Run invoke test.tox for testing with all supported Python versions (if you have them available), or be more selective by e.g. calling invoke test.tox -e py27,py34.

Use invoke check to run a code-quality scan.

To start a watchdog that auto-rebuilds documentation and reloads the opened browser tab on any change, call invoke docs -w -b (stop the watchdog using the -k option).

Comments
  • utf8 encoded symbols not cast as unicode strings in python v2.7

    utf8 encoded symbols not cast as unicode strings in python v2.7

    Hi! I've been using configobj a for while in my project. Due to other dependencies (twisted mainly), the stable release still depends on python v2.7. Recently, an issue was opened regarding utf8 encoded symbols in the config file: https://github.com/pazz/alot/issues/693 It turns out that this is due to configobj v5.0.x not behaving as previous versions when it comes to utf8 encoded symbols: Previously, those were always passed on as unicode strings, e.g. 🐜 became u'\U0001f41c'. Now, the same symbol is read as '\xf0\x9f\x90\x9c'. Obvously this makes trouble. Of course i can patch around this, but still, i think configobj should behave exactly the same as prevous versions here. Thanks!

    opened by pazz 17
  • Make configobj a package, moving towards incorporating validate

    Make configobj a package, moving towards incorporating validate

    I'm opening this PR early for review and commenting, this is intended to handle #32 and associated tickets. Will comment when things are ready for a merge.

    opened by jhermann 13
  • update README.md to point to the original documentation, as well as explain the current project status

    update README.md to point to the original documentation, as well as explain the current project status

    When 5.0.0 is put on pypi, it's reasonable to expect that people would like to start using the github repo as a reference, and if that's the case, the README file should have the appropriate information to support that.

    opened by robdennis 13
  • Added on_change parameter to ConfigObj and Section to have data change trigger a callback

    Added on_change parameter to ConfigObj and Section to have data change trigger a callback

    For your consideration...

    If ConfigObj is instantiated with the on_change parameter set to a callable, on_change is called when changed data is detected in the root Section or any subsection. This is helpful for those cases where you may want a configuration change to trigger some other action.

    Here is an example of how to use on_change:

    >>> def my_on_change_handler(name, key, old_value, value):
    >>>     print("Detected change in [{0}]:{1} from {2} to {3}".format(name, key, old_value, value)
    >>> my_configobj = ConfigObj(on_change=my_on_change_handler)
    >>> my_configobj["section"] = {}
    Detected change in [section]:None from None to {}
    >>> my_configobj["section"]["parameter"] = 1
    Detected change in [section]:parameter from None to 1
    

    *** I looked at the tests but couldn't get them to run, and I'm not sure which files are acutally used for the tests. Because of this, I didn't add in a test for on_change. If you could point me in the right direction, I'd happily write the tests as well.

    Thanks! -Kris

    opened by krishardy 11
  • Comments assigned to wrong sections

    Comments assigned to wrong sections

    This is an over-simplified version of zypper.conf:

    ## Configuration file for Zypper.
    
    [main]
    
    ## Show repository alias instead of name.
    # showAlias = false
    
    ## Columns to show in repository list printed by repos (lr) command by default.
    # repoListColumns = Anr
    
    [solver]
    
    ## Do not install soft dependencies (recommended packages)
    # installRecommends = yes
    
    [color]
    
    ## Whether to use colors
    # useColors = never
    

    When read with configobj, comments are assigned to sections in an awkward fashion:

    >>> config = configobj.ConfigObj('zypper.conf')
    >>> config.comments
    {'color': ['',
      '## Do not install soft dependencies (recommended packages)',
      '# installRecommends = yes',
      ''],
     'main': [],
     'solver': ['',
      '## Show repository alias instead of name.',
      '# showAlias = false',
      '',
      '## Columns to show in repository list printed by repos (lr) command by default.',
      '# repoListColumns = Anr',
      '']}
    

    As a consequence, if I run del config['solver'] I am deleting comments of main and preserving comments of solver, leading to a very confusing configuration file:

    --- zypper.before.conf   2014-04-06 00:20:16.432652464 +0200
    +++ zypper.after.conf    2014-04-06 00:26:16.569526812 +0200
    @@ -2,14 +2,6 @@
    
     [main]
    
    -## Show repository alias instead of name.
    -# showAlias = false
    -
    -## Columns to show in repository list printed by repos (lr) command by default.
    -# repoListColumns = Anr
    -
    -[solver]
    -
     ## Do not install soft dependencies (recommended packages)
     # installRecommends = yes
    
    documentation 
    opened by ntrrgc 10
  • DeprecationWarning: BaseException.message has been deprecated as of Python 2.6

    DeprecationWarning: BaseException.message has been deprecated as of Python 2.6

    Using configobj (5.0.6), I tried the following and got a DeprecationWarning:

    Python 2.7.5 (default, Aug 18 2016, 15:58:25)
    Type "copyright", "credits" or "license" for more information.
    
    IPython 5.0.0 -- An enhanced Interactive Python.
    ?         -> Introduction and overview of IPython's features.
    %quickref -> Quick reference.
    help      -> Python's own help system.
    object?   -> Details about 'object', use 'object??' for extra details.
    
    In [1]: from configobj import ConfigObj
       ...: from configobj import ConfigObjError
       ...:
       ...:     cfg = [str('thing  {"a": 1}')]
       ...:     c = ConfigObj(cfg)
       ...: except ConfigObjError as ex:
       ...:     print(ex.errors)
       ...:     for error in ex.errors:
       ...:         print(error.message)
       ...:
    [ParseError('Invalid line (\'thing  {"a": 1}\') (matched as neither section nor keyword) at line 1.',)]
    /home/yann/.virtualenvs/rprs_bootstrap/bin/ipython:7: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
      from IPython import start_ipython
    Invalid line ('thing  {"a": 1}') (matched as neither section nor keyword) at line 1.
    

    Same with plain Python:

    Python 2.7.5 (default, Aug 18 2016, 15:58:25)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from configobj import ConfigObj
    >>> from configobj import ConfigObjError
    >>>
    >>> try:
    ...     cfg = [str('thing  {"a": 1}')]
    ...     c = ConfigObj(cfg)
    ... except ConfigObjError as ex:
    ...     print(ex.errors)
    ...     for error in ex.errors:
    ...         print(error.message)
    ...
    [ParseError('Invalid line (\'thing  {"a": 1}\') (matched as neither section nor
    keyword) at line 1.',)]
    Invalid line ('thing  {"a": 1}') (matched as neither section nor keyword) at line 1.
    

    Am I doing the catching wrong somehow?

    question documentation 
    opened by kierun 9
  • encoding issue writing

    encoding issue writing

    I am not sure if this is a bug or just my not understanding. This is under Python 2.7, using v5.0.4 from pip. I can't seem to write out a CfgObj that has unicode strings. Here's a simple scenario:

    File: 'in.ini'

    folder="Arbeitsfläche"
    

    code:

    from  configobj import ConfigObj
    cfg = ConfigObj("in.ini", encoding="UTF8")
    
    print u"folder string[{0}] and repr [{1}]".format(cfg['folder'], repr(cfg['folder']))
    
    cfg.filename = "out.ini"
    cfg.write()
    

    produces this:

    folder string[Arbeitsfläche] and repr [u'Arbeitsfl\xe4che']
    Traceback (most recent call last):
      File "stackoverflow.py", line 7, in <module>
        cfg.write()
      File "/usr/local/lib/python2.7/site-packages/configobj.py", line 2124, in write
        'ascii'))
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 18: ordinal not in range(128)
    

    There doesn't seem to be any problem reading the file in. Also, if I change the input file to have the value "Desktop" instead of "Arbeitsfläche", no problem.

    What I can't understand is why it wants to use the ascii codec, when I've explicitly set the UTF8 encoder.

    Any help would be appreciated!

    bug 
    opened by beville 8
  • No unicode values when an encoding is given.

    No unicode values when an encoding is given.

    Version 5.0.0.

    If one open a utf-8 encoded file ( with filename in variable fn below ), add an encoding parameter when opening the ConfigObj, the returned object does not convert the keys and values to unicode. The version 4.7.2 did..

    In [6]: o = ConfigObj( infile = fn , encoding = "utf8" )

    In [7]: t = o["root"]["title"]

    In [8]: t Out[8]: 'Planl\xc3\xa6gning og data'

    In [9]: isinstance( t , str ) Out[9]: True

    In [10]: isinstance( t , unicode ) Out[10]: False

    bug 
    opened by brianbirke 8
  • Unclear error message using very simple example

    Unclear error message using very simple example

    []
    a = b
    []
    c = d
    
    In [1]: from configobj import ConfigObj
    
    In [2]: c = ConfigObj('./test.ini')
      File "<string>", line unknown
    ConfigObjError: Parsing failed with several errors.
    First error at line 1.
    

    If I modify the first section name to be non-empty, the message is ok:

    [s]
    a = b
    []
    c = d
    
    In [1]: from configobj import ConfigObj
    
    In [2]: c = ConfigObj('./test.ini')
      File "<string>", line unknown
    ParseError: Invalid line ('[]') (matched as neither section nor keyword) at line 4.
    
    defect 
    opened by malinoff 7
  • Check Python version during installation

    Check Python version during installation

    Trac uses still supports Python 2.5 on the current stable release. easy_install ConfigObj in a Python 2.5 environment results in an installation of ConfigObj 5.0.1 with errors. I expect we'll start seeing this issue raised on our mailing list in the near future, as we've seen for a similar circumstance of one of our other dependencies, Babel.

    In Trac we do some error-checking like was is shown here, so that an attempted installation in an unsupported Python environment will abort with a nice error message. Additionally, I don't see ConfigObj 4.7.2 being available on PyPI anymore. Is there anything additional we can do to make a Python 2.5 or earlier environment locate ConfigObj 4.7.2 and install that version?

    $ easy_install ConfigObj
    Searching for ConfigObj
    Reading http://pypi.python.org/simple/ConfigObj/
    Best match: configobj 5.0.1
    Downloading https://pypi.python.org/packages/source/c/configobj/configobj-5.0.1.tar.gz#md5=c8a41fb55689e2d0e1ae53b6f1ab5e2e
    Processing configobj-5.0.1.tar.gz
    Writing /tmp/easy_install-3WzMHi/configobj-5.0.1/setup.cfg
    Running configobj-5.0.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-3WzMHi/configobj-5.0.1/egg-dist-tmp-eeST9v
    build/bdist.linux-x86_64/egg/configobj.py:1235: Warning: 'with' will become a reserved keyword in Python 2.6
      File "build/bdist.linux-x86_64/egg/configobj.py", line 1235
        with open(infile, 'rb') as h:
                ^
    SyntaxError: invalid syntax
    
    build/bdist.linux-x86_64/egg/validate.py:770: Warning: 'as' will become a reserved keyword in Python 2.6
      File "build/bdist.linux-x86_64/egg/validate.py", line 770
        except ValueError as e:
                           ^
    SyntaxError: invalid syntax
    
    zip_safe flag not set; analyzing archive contents...
    /home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/configobj-5.0.1-py2.5.egg/configobj.py:1235: Warning: 'with' will become a reserved keyword in Python 2.6
      File "/home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/configobj-5.0.1-py2.5.egg/configobj.py", line 1235
        with open(infile, 'rb') as h:
                ^
    SyntaxError: invalid syntax
    
    /home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/configobj-5.0.1-py2.5.egg/validate.py:770: Warning: 'as' will become a reserved keyword in Python 2.6
      File "/home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/configobj-5.0.1-py2.5.egg/validate.py", line 770
        except ValueError as e:
                           ^
    SyntaxError: invalid syntax
    
    Adding configobj 5.0.1 to easy-install.pth file
    
    Installed /home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/configobj-5.0.1-py2.5.egg
    Processing dependencies for ConfigObj
    Searching for six==1.5.2
    Reading http://pypi.python.org/simple/six/
    Best match: six 1.5.2
    Downloading https://pypi.python.org/packages/source/s/six/six-1.5.2.tar.gz#md5=322b86d0c50a7d165c05600154cecc0a
    Processing six-1.5.2.tar.gz
    Writing /tmp/easy_install-StPhwj/six-1.5.2/setup.cfg
    Running six-1.5.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-StPhwj/six-1.5.2/egg-dist-tmp-XyUsUa
    no previously-included directories found matching 'documentation/_build'
    zip_safe flag not set; analyzing archive contents...
    six: module references __file__
    Adding six 1.5.2 to easy-install.pth file
    
    Installed /home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/six-1.5.2-py2.5.egg
    Finished processing dependencies for ConfigObj
    
    enhancement 
    opened by rjollos 7
  • Add support for Python 3.7 and fix deprecation warnings

    Add support for Python 3.7 and fix deprecation warnings

    • Includes #173 so the CI can pass and to avoid merge conflicts.

    • A little workaround is needed for 3.7 on Travis, see https://github.com/travis-ci/travis-ci/issues/9815.

    • Also fixes this deprecation warning on Python 3.7 (with pytest):

    ================================================= warnings summary =================================================
    /usr/local/lib/python3.7/site-packages/_pytest/config/findpaths.py:42: RemovedInPytest4Warning: [pytest] section in setup.cfg files is deprecated, use [tool:pytest] instead.
      config=config,
    
    /private/tmp/configobj/src/configobj/__init__.py:546: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
      elif isinstance(value, collections.Mapping) and not unrepr:
    
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
    
    • And fixes this deprecation warning in pytest (with Python 2.7 and 3.7):
    ================================================= warnings summary =================================================
    /usr/local/lib/python3.7/site-packages/_pytest/config/findpaths.py:42: RemovedInPytest4Warning: [pytest] section in setup.cfg files is deprecated, use [tool:pytest] instead.
      config=config,
    
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
    
    opened by hugovk 6
  • Bump wheel from 0.29.0 to 0.38.1

    Bump wheel from 0.29.0 to 0.38.1

    Bumps wheel from 0.29.0 to 0.38.1.

    Changelog

    Sourced from wheel's changelog.

    Release Notes

    UNRELEASED

    • Updated vendored packaging to 22.0

    0.38.4 (2022-11-09)

    • Fixed PKG-INFO conversion in bdist_wheel mangling UTF-8 header values in METADATA (PR by Anderson Bravalheri)

    0.38.3 (2022-11-08)

    • Fixed install failure when used with --no-binary, reported on Ubuntu 20.04, by removing setup_requires from setup.cfg

    0.38.2 (2022-11-05)

    • Fixed regression introduced in v0.38.1 which broke parsing of wheel file names with multiple platform tags

    0.38.1 (2022-11-04)

    • Removed install dependency on setuptools
    • The future-proof fix in 0.36.0 for converting PyPy's SOABI into a abi tag was faulty. Fixed so that future changes in the SOABI will not change the tag.

    0.38.0 (2022-10-21)

    • Dropped support for Python < 3.7
    • Updated vendored packaging to 21.3
    • Replaced all uses of distutils with setuptools
    • The handling of license_files (including glob patterns and default values) is now delegated to setuptools>=57.0.0 (#466). The package dependencies were updated to reflect this change.
    • Fixed potential DoS attack via the WHEEL_INFO_RE regular expression
    • Fixed ValueError: ZIP does not support timestamps before 1980 when using SOURCE_DATE_EPOCH=0 or when on-disk timestamps are earlier than 1980-01-01. Such timestamps are now changed to the minimum value before packaging.

    0.37.1 (2021-12-22)

    • Fixed wheel pack duplicating the WHEEL contents when the build number has changed (#415)
    • Fixed parsing of file names containing commas in RECORD (PR by Hood Chatham)

    0.37.0 (2021-08-09)

    • Added official Python 3.10 support
    • Updated vendored packaging library to v20.9

    ... (truncated)

    Commits
    • 6f1608d Created a new release
    • cf8f5ef Moved news item from PR #484 to its proper place
    • 9ec2016 Removed install dependency on setuptools (#483)
    • 747e1f6 Fixed PyPy SOABI parsing (#484)
    • 7627548 [pre-commit.ci] pre-commit autoupdate (#480)
    • 7b9e8e1 Test on Python 3.11 final
    • a04dfef Updated the pypi-publish action
    • 94bb62c Fixed docs not building due to code style changes
    • d635664 Updated the codecov action to the latest version
    • fcb94cd Updated version to match the release
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Members with min and or max values should not be allowed to be None

    Members with min and or max values should not be allowed to be None

    Currently, a member specification like the following:

    keyword = float(min=0, max=1, default=0.5)
    

    will pass validation when setting keyword = None.

    I have therefore to check this afterwards in my code.

    I was wondering, whether this could be implemented within ConfigObj.

    More generally, there could be an option for allowing/disallowing None values, e.g.,

    keyword = float(allow_none=False)
    
    opened by claudiodsf 0
  • docs: Fix a few typos

    docs: Fix a few typos

    There are small typos in:

    • docs/configobj.rst
    • src/configobj/init.py

    Fixes:

    • Should read occurred rather than occured.
    • Should read likelihood rather than likelyhood.

    Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    opened by timgates42 0
  • 5.0.6: pytest warnings

    5.0.6: pytest warnings

    Looks like latest pytest shows some warnings

    ============================================================================= warnings summary =============================================================================
    tests/test_configobj.py:41
      /home/tkloczko/rpmbuild/BUILD/configobj-5.0.6/tests/test_configobj.py:41: DeprecationWarning: invalid escape sequence \s
        ws_chars = len(re.search('^(\s*)', first_content).group(1))
    
    tests/test_configobj.py:51
      /home/tkloczko/rpmbuild/BUILD/configobj-5.0.6/tests/test_configobj.py:51: DeprecationWarning: invalid escape sequence \s
        return [re.sub('^\s{0,%s}' % ws_chars, '', line).encode('utf-8')
    
    -- Docs: https://docs.pytest.org/en/stable/warnings.html
    ====================================================================== 71 passed, 2 warnings in 0.38s ======================================================================
    
    opened by kloczek 0
Releases(v5.0.6)
A YAML validator for Programming Historian lessons.

phyaml A simple YAML validator for Programming Historian lessons. USAGE: python3 ph-lesson-yaml-validator.py lesson.md The script automatically detect

Riva Quiroga 1 Nov 07, 2021
Tools to assist with the configuration and maintenance of fapolicyd.

Tools to assist with the configuration and maintenance of fapolicyd.

Concurrent Technologies Corporation (CTC) 7 Dec 27, 2022
Python YAML Environment (ymlenv) by Problem Fighter Library

In the name of God, the Most Gracious, the Most Merciful. PF-PY-YMLEnv Documentation Install and update using pip: pip install -U PF-PY-YMLEnv Please

Problem Fighter 2 Jan 20, 2022
A modern simfile parsing & editing library for Python 3

A modern simfile parsing & editing library for Python 3

ash garcia 38 Nov 01, 2022
A tool to manage configuration files, build scripts etc. across multiple projects.

A tool to manage configuration files, build scripts etc. across multiple projects.

8 Dec 14, 2022
Organize Django settings into multiple files and directories. Easily override and modify settings. Use wildcards and optional settings files.

Organize Django settings into multiple files and directories. Easily override and modify settings. Use wildcards in settings file paths and mark setti

Nikita Sobolev 942 Jan 05, 2023
Secsie is a configuration language made for speed, beauty, and ease of use.

secsie-conf pip3 install secsie-conf Secsie is a configuration language parser for Python, made for speed and beauty. Instead of writing config files

Noah Broyles 3 Feb 19, 2022
filetailor is a peer-based configuration management utility for plain-text files such as dotfiles.

filetailor filetailor is a peer-based configuration management utility for plain-text files (and directories) such as dotfiles. Files are backed up to

5 Dec 23, 2022
Config files for my GitHub profile.

Hacked This is a python base script from which you can hack or clone any person's facebook friendlist or followers accounts which have simple password

2 Dec 10, 2021
Django-environ allows you to utilize 12factor inspired environment variables to configure your Django application.

Django-environ django-environ allows you to use Twelve-factor methodology to configure your Django application with environment variables. import envi

Daniele Faraglia 2.7k Jan 03, 2023
Python Marlin Configurator to make valid configuration files to be used to compile Marlin with.

marlin-configurator Concept originally imagined by The-EG using PowerShell Build Script for Marlin Configurations The purpose of this project is to pa

DevPeeps 2 Oct 09, 2021
environs is a Python library for parsing environment variables.

environs: simplified environment variable parsing environs is a Python library for parsing environment variables. It allows you to store configuration

Steven Loria 920 Jan 04, 2023
ConfZ is a configuration management library for Python based on pydantic.

ConfZ – Pydantic Config Management ConfZ is a configuration management library for Python based on pydantic. It easily allows you to load your configu

Zühlke 164 Dec 27, 2022
MOHAconfig - Gerador de arquivo de configuração para Medal of Honor: Airborne

MOHAconfig Gerador de arquivo de configuração para Medal of Honor: Airborne MOHA - Gerador de arquivo de configuração. Essa aplicação foi feita em pyt

1 Dec 31, 2021
Dynamic Django settings.

Constance - Dynamic Django settings A Django app for storing dynamic settings in pluggable backends (Redis and Django model backend built in) with an

Jazzband 1.5k Jan 04, 2023
Pydantic-ish YAML configuration management.

Pydantic-ish YAML configuration management.

Dribia Data Research 18 Oct 27, 2022
Flexible Python configuration system. The last one you will ever need.

OmegaConf Description Project Code quality Docs and support OmegaConf is a hierarchical configuration system, with support for merging configurations

Omry Yadan 1.4k Jan 02, 2023
sqlconfig: manage your config files with sqlite

sqlconfig: manage your config files with sqlite The problem Your app probably has a lot of configuration in git. Storing it as files in a git repo has

Pete Hunt 4 Feb 21, 2022
This Ivy plugin adds support for TOML file headers.

This Ivy plugin adds support for TOML file headers as an alternative to YAML.

Darren Mulholland 1 Nov 09, 2021
Pyleri is an easy-to-use parser created for SiriDB

Python Left-Right Parser Pyleri is an easy-to-use parser created for SiriDB. We first used lrparsing and wrote jsleri for auto-completion and suggesti

Cesbit 106 Dec 06, 2022