diff options
author | Michał Górny <mgorny@gentoo.org> | 2023-01-26 15:39:37 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2023-01-26 15:39:53 +0100 |
commit | eede2358ffc7fc92ca8e4254570573878009f01c (patch) | |
tree | caced8e3e268f335f9f30f113c7217947dc728fd /app-misc/yq | |
parent | dev-python/pylama: Port to tomllib/tomli (diff) | |
download | gentoo-eede2358ffc7fc92ca8e4254570573878009f01c.tar.gz gentoo-eede2358ffc7fc92ca8e4254570573878009f01c.tar.bz2 gentoo-eede2358ffc7fc92ca8e4254570573878009f01c.zip |
app-misc/yq: Port to tomli/tomllib
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'app-misc/yq')
-rw-r--r-- | app-misc/yq/files/yq-3.1.0-tomli.patch | 94 | ||||
-rw-r--r-- | app-misc/yq/yq-3.1.0-r1.ebuild (renamed from app-misc/yq/yq-3.1.0.ebuild) | 15 |
2 files changed, 106 insertions, 3 deletions
diff --git a/app-misc/yq/files/yq-3.1.0-tomli.patch b/app-misc/yq/files/yq-3.1.0-tomli.patch new file mode 100644 index 000000000000..ad6d8a1d7e7d --- /dev/null +++ b/app-misc/yq/files/yq-3.1.0-tomli.patch @@ -0,0 +1,94 @@ +From 425ebfb12908c0d5f72f5a4eec06a235e8bbd54b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org> +Date: Sun, 23 Oct 2022 11:38:58 +0200 +Subject: [PATCH] Use tomllib/tomli/tomli-w instead of unmaintained toml + package + +Replace the use of the unmaintained `toml` package with the modern +trinity: built-in `tomllib` module for reading TOML in Python 3.11+, +`tomli` for reading TOML in older Python versions and `tomli-w` for +writing TOML in all Python versions. This ensures correct TOML 1.0 +support that the old `toml` package lacks. +--- + README.rst | 4 +++- + setup.py | 3 ++- + yq/__init__.py | 18 ++++++++++++------ + 3 files changed, 17 insertions(+), 8 deletions(-) + +diff --git a/README.rst b/README.rst +index 69d77e1..237b89e 100644 +--- a/README.rst ++++ b/README.rst +@@ -109,7 +109,9 @@ the ``xq --xml-output``/``xq -x`` option. Multiple XML documents can be passed i + TOML support + ------------ + ``yq`` supports `TOML <https://toml.io/>`_ as well. The ``yq`` package installs an executable, ``tomlq``, which uses the +-`toml library <https://github.com/uiri/toml>`_ to transcode TOML to JSON, then pipes it to ``jq``. Roundtrip transcoding ++`tomllib module <https://docs.python.org/3.11/library/tomllib.html>` or `tomli library ++<https://github.com/hukkin/tomli>`_ to transcode TOML to JSON, then pipes it to ``jq``. Transcoding to TOML uses the ++`tomli-w <https://github.com/hukkin/toml-w`_ package. Roundtrip transcoding + is available with the ``tomlq --toml-output``/``tomlq -t`` option. + + .. admonition:: Compatibility note +diff --git a/setup.py b/setup.py +index 9a7f643..71774ed 100755 +--- a/setup.py ++++ b/setup.py +@@ -19,7 +19,8 @@ + install_requires=[ + "PyYAML >= 5.3.1", + "xmltodict >= 0.11.0", +- "toml >= 0.10.0", ++ "tomli >= 1.2.3; python_version < '3.11'", ++ "tomli-w", + "argcomplete >= 1.8.1" + ], + extras_require={ +diff --git a/yq/__init__.py b/yq/__init__.py +index 1043ff7..dd89408 100755 +--- a/yq/__init__.py ++++ b/yq/__init__.py +@@ -201,8 +201,11 @@ def yq(input_streams=None, output_stream=None, input_format="yaml", output_forma + json.dump(doc, json_buffer, cls=JSONDateTimeEncoder) + json_buffer.write("\n") + elif input_format == "toml": +- import toml +- doc = toml.load(input_stream) ++ if sys.version_info >= (3, 11): ++ import tomllib ++ else: ++ import tomli as tomllib ++ doc = tomllib.loads(input_stream.read()) + json.dump(doc, json_buffer, cls=JSONDateTimeEncoder) + json_buffer.write("\n") + else: +@@ -235,12 +238,12 @@ def yq(input_streams=None, output_stream=None, input_format="yaml", output_forma + raise + output_stream.write(b"\n" if sys.version_info < (3, 0) else "\n") + elif output_format == "toml": +- import toml ++ import tomli_w + for doc in decode_docs(jq_out, json_decoder): + if not isinstance(doc, dict): + msg = "{}: Error converting JSON to TOML: cannot represent non-object types at top level." + exit_func(msg.format(program_name)) +- toml.dump(doc, output_stream) ++ output_stream.write(tomli_w.dumps(doc)) + else: + if input_format == "yaml": + loader_class = get_loader(use_annotations=False, expand_aliases=expand_aliases, +@@ -255,9 +258,12 @@ def yq(input_streams=None, output_stream=None, input_format="yaml", output_forma + force_list=xml_force_list), jq.stdin) + jq.stdin.write("\n") + elif input_format == "toml": +- import toml ++ if sys.version_info >= (3, 11): ++ import tomllib ++ else: ++ import tomli as tomllib + for input_stream in input_streams: +- json.dump(toml.load(input_stream), jq.stdin) ++ json.dump(tomllib.loads(input_stream.read()), jq.stdin) + jq.stdin.write("\n") + else: + raise Exception("Unknown input format") diff --git a/app-misc/yq/yq-3.1.0.ebuild b/app-misc/yq/yq-3.1.0-r1.ebuild index 1a8f2da5f32d..d40930f5ff57 100644 --- a/app-misc/yq/yq-3.1.0.ebuild +++ b/app-misc/yq/yq-3.1.0-r1.ebuild @@ -1,14 +1,20 @@ -# Copyright 1999-2022 Gentoo Authors +# Copyright 1999-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 + PYTHON_COMPAT=( python3_{9..11} pypy3 ) inherit distutils-r1 DESCRIPTION="Command-line YAML processor - jq wrapper for YAML documents" -HOMEPAGE="https://yq.readthedocs.io/ https://github.com/kislyuk/yq/ https://pypi.org/project/yq/" +HOMEPAGE=" + https://yq.readthedocs.io/ + https://github.com/kislyuk/yq/ + https://pypi.org/project/yq/ +" SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz" + LICENSE="Apache-2.0" SLOT="0" KEYWORDS="~amd64 ~x86" @@ -19,8 +25,10 @@ RDEPEND=" app-misc/jq dev-python/argcomplete[${PYTHON_USEDEP}] >=dev-python/pyyaml-5.3.1[${PYTHON_USEDEP}] - dev-python/toml[${PYTHON_USEDEP}] dev-python/xmltodict[${PYTHON_USEDEP}] + $(python_gen_cond_dep ' + dev-python/tomli[${PYTHON_USEDEP}] + ' 3.{8..10}) " DEPEND=" ${RDEPEND} @@ -31,6 +39,7 @@ DEPEND=" PATCHES=( "${FILESDIR}/yq-2.13.0-tests.patch" + "${FILESDIR}/${P}-tomli.patch" ) python_prepare_all() { |