]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
bpo-40059: Add tomllib (PEP-680) (GH-31498)
authorTaneli Hukkinen <3275109+hukkin@users.noreply.github.com>
Tue, 8 Mar 2022 08:26:13 +0000 (10:26 +0200)
committerGitHub <noreply@github.com>
Tue, 8 Mar 2022 08:26:13 +0000 (09:26 +0100)
commit591f6754b56cb7f6c31fce8c22528bdf0a99556c
tree8f3914aa35e86201d09e4abf48edbc784ac6176d
parent4d95fa1ac5d31ff450fb2f31b55ce1eb99d6efcb
bpo-40059: Add tomllib (PEP-680) (GH-31498)

This adds a new standard library module, `tomllib`, for parsing TOML.

The implementation is based on Tomli (https://github.com/hukkin/tomli).

## Steps taken (converting `tomli` to `tomllib`)

- Move everything in `tomli:src/tomli` to `Lib/tomllib`. Exclude `py.typed`.
- Remove `__version__ = ...` line from `Lib/tomllib/__init__.py`
- Move everything in `tomli:tests` to `Lib/test/test_tomllib`. Exclude the following test data dirs recursively:
  - `tomli:tests/data/invalid/_external/`
  - `tomli:tests/data/valid/_external/`
- Create `Lib/test/test_tomllib/__main__.py`:

  ```python
  import unittest

  from . import load_tests

  unittest.main()
  ```

- Add the following to `Lib/test/test_tomllib/__init__.py`:

  ```python
  import os
  from test.support import load_package_tests

  def load_tests(*args):
      return load_package_tests(os.path.dirname(__file__), *args)
  ```

  Also change `import tomli as tomllib` to `import tomllib`.

- In `cpython/Lib/tomllib/_parser.py` replace `__fp` with `fp` and `__s` with
  `s`. Add the `/` to `load` and `loads` function signatures.

- Run `make regen-stdlib-module-names`

- Create `Doc/library/tomllib.rst` and reference it in `Doc/library/fileformats.rst`
90 files changed:
.github/CODEOWNERS
Doc/library/fileformats.rst
Doc/library/tomllib.rst [new file with mode: 0644]
Doc/whatsnew/3.11.rst
Lib/test/test_tomllib/__init__.py [new file with mode: 0644]
Lib/test/test_tomllib/__main__.py [new file with mode: 0644]
Lib/test/test_tomllib/burntsushi.py [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/array-missing-comma.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/array-of-tables/overwrite-array-in-parent.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/array-of-tables/overwrite-bool-with-aot.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/array/file-end-after-val.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/array/unclosed-after-item.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/array/unclosed-empty.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/basic-str-ends-in-escape.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/boolean/invalid-false-casing.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/boolean/invalid-true-casing.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/dates-and-times/invalid-day.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/dotted-keys/access-non-table.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/dotted-keys/extend-defined-aot.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/dotted-keys/extend-defined-table-with-subtable.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/dotted-keys/extend-defined-table.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table-missing-comma.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/define-twice-in-subtable.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/define-twice.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/file-end-after-key-val.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/mutate.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/override-val-in-table.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/override-val-with-array.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/override-val-with-table.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/overwrite-implicitly.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/overwrite-value-in-inner-array.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/overwrite-value-in-inner-table.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/inline-table/unclosed-empty.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/invalid-comment-char.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/invalid-escaped-unicode.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/invalid-hex.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/keys-and-vals/ends-early-table-def.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/keys-and-vals/ends-early.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/keys-and-vals/no-value.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/keys-and-vals/only-ws-after-dot.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/keys-and-vals/overwrite-with-deep-table.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/literal-str/unclosed.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/missing-closing-double-square-bracket.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/missing-closing-square-bracket.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/multiline-basic-str/carriage-return.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/multiline-basic-str/escape-only.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/multiline-basic-str/file-ends-after-opening.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/multiline-basic-str/last-line-escape.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/multiline-basic-str/unclosed-ends-in-whitespace-escape.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/multiline-literal-str/file-ends-after-opening.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/multiline-literal-str/unclosed.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/non-scalar-escaped.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/table/eof-after-opening.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/table/redefine-1.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/table/redefine-2.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/unclosed-multiline-string.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/invalid/unclosed-string.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/apostrophes-in-literal-string.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/apostrophes-in-literal-string.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/array/array-subtables.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/array/array-subtables.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/array/open-parent-table.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/array/open-parent-table.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/boolean.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/boolean.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/dates-and-times/datetimes.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/dates-and-times/datetimes.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/dates-and-times/localtime.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/dates-and-times/localtime.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/empty-inline-table.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/empty-inline-table.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/five-quotes.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/five-quotes.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/hex-char.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/hex-char.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/multiline-basic-str/ends-in-whitespace-escape.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/multiline-basic-str/ends-in-whitespace-escape.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/no-newlines.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/no-newlines.toml [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/trailing-comma.json [new file with mode: 0644]
Lib/test/test_tomllib/data/valid/trailing-comma.toml [new file with mode: 0644]
Lib/test/test_tomllib/test_data.py [new file with mode: 0644]
Lib/test/test_tomllib/test_error.py [new file with mode: 0644]
Lib/test/test_tomllib/test_misc.py [new file with mode: 0644]
Lib/tomllib/__init__.py [new file with mode: 0644]
Lib/tomllib/_parser.py [new file with mode: 0644]
Lib/tomllib/_re.py [new file with mode: 0644]
Lib/tomllib/_types.py [new file with mode: 0644]
Misc/NEWS.d/next/Library/2022-02-23-01-11-08.bpo-40059.Iwc9UH.rst [new file with mode: 0644]
Python/stdlib_module_names.h