annotate configmix/toml.py @ 751:8238e3c22f89 v0.23.1

+++++ v0.23.1
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 31 Oct 2023 08:35:37 +0100
parents 0d6673d06c2c
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