Mercurial > hgrepos > Python > libs > ConfigMix
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 |
| 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 |
