annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
195
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
208
bbe8513ea649 Handle flake8 E265 "block comment should start with '# ': use '# :-' instead of '#-' to mark copyright and license comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 207
diff changeset
2 # :-
593
f454889e41fa Adjust copyright year (the end) to 2022
Franz Glasner <fzglas.hg@dom66.de>
parents: 296
diff changeset
3 # :Copyright: (c) 2015-2022, Franz Glasner. All rights reserved.
296
eed16a1ec8f3 Use SPDX license identifiers (either full or short) all over the package
Franz Glasner <fzglas.hg@dom66.de>
parents: 237
diff changeset
4 # :License: BSD-3-Clause. See LICENSE.txt for details.
208
bbe8513ea649 Handle flake8 E265 "block comment should start with '# ': use '# :-' instead of '#-' to mark copyright and license comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 207
diff changeset
5 # :-
195
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 """Read TOML style configuration files.
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 """
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10 from __future__ import division, absolute_import, print_function
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13 __all__ = ["load"]
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16 import io
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17 try:
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18 from collections import OrderedDict as DictImpl
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19 except ImportError:
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20 try:
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 from ordereddict import OrderedDict as DictImpl
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 except ImportError:
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 DictImpl = dict
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24
654
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
25 try:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
26 import tomllib
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
27 except ImportError:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
28 tomllib = None
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
29 try:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
30 import tomli
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
31 except ImportError:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
32 tomli = None
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
33 try:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
34 import toml
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
35 except ImportError:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
36 toml = None
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
37 else:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
38 toml = None
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
39 else:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
40 toml = tomli = None
195
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42 from .compat import u2fs
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 def load(filename, encoding="utf-8"):
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 """Load a single TOML file with name `filename` and encoding `encoding`.
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47
207
b3b5ed34d180 Handle most flake8 errors and warnings.
Franz Glasner <fzglas.hg@dom66.de>
parents: 195
diff changeset
48 .. note:: The TOML standard requires that all TOML files are UTF-8
195
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 encoded.
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50
28e6c1413947 Added support for TOML style configuration files
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51 """
654
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
52 if tomllib:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
53 with open(u2fs(filename), mode="rb") as tfp:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
54 return tomllib.load(tfp)
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
55 elif tomli:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
56 with open(u2fs(filename), mode="rb") as tfp:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
57 return tomli.load(tfp)
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
58 elif toml:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
59 with io.open(
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
60 u2fs(filename),
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
61 mode="rt",
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
62 encoding=encoding,
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
63 newline="") as tfp:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
64 return toml.loads(tfp.read(), _dict=DictImpl)
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
65 else:
0d6673d06c2c Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
66 assert False