Mercurial > hgrepos > Python > libs > ConfigMix
view configmix/toml.py @ 654:0d6673d06c2c
Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
They are preferred if they are found to be installed.
But note that the declared dependency for the "toml" extra nevertheless
is the "toml" package. Because it is available for all supported Python
versions.
So use Python 3.11+ or install "tomli" manually if you want to use the
alternate packages.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Thu, 19 May 2022 22:10:59 +0200 |
| parents | 211288645f02 |
| children |
line wrap: on
line source
# -*- coding: utf-8 -*- # :- # :Copyright: (c) 2015-2022, Franz Glasner. All rights reserved. # :License: BSD-3-Clause. See LICENSE.txt for details. # :- """Read TOML style configuration files. """ from __future__ import division, absolute_import, print_function __all__ = ["load"] import io try: from collections import OrderedDict as DictImpl except ImportError: try: from ordereddict import OrderedDict as DictImpl except ImportError: DictImpl = dict try: import tomllib except ImportError: tomllib = None try: import tomli except ImportError: tomli = None try: import toml except ImportError: toml = None else: toml = None else: toml = tomli = None from .compat import u2fs def load(filename, encoding="utf-8"): """Load a single TOML file with name `filename` and encoding `encoding`. .. note:: The TOML standard requires that all TOML files are UTF-8 encoded. """ if tomllib: with open(u2fs(filename), mode="rb") as tfp: return tomllib.load(tfp) elif tomli: with open(u2fs(filename), mode="rb") as tfp: return tomli.load(tfp) elif toml: with io.open( u2fs(filename), mode="rt", encoding=encoding, newline="") as tfp: return toml.loads(tfp.read(), _dict=DictImpl) else: assert False
