public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: dev-python/requests-cache/, dev-python/requests-cache/files/
@ 2022-04-26 10:56 Michał Górny
  0 siblings, 0 replies; only message in thread
From: Michał Górny @ 2022-04-26 10:56 UTC (permalink / raw
  To: gentoo-commits

commit:     e28b7da2f917e22153f0ea2bfc99171c8a65a5f2
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 26 10:24:39 2022 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Apr 26 10:55:57 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e28b7da2

dev-python/requests-cache: Backport fix for cattrs-22.1.0 compat

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 .../files/requests-cache-0.9.3-cattrs-22.patch     | 150 +++++++++++++++++++++
 ...0.9.3.ebuild => requests-cache-0.9.3-r1.ebuild} |  22 ++-
 2 files changed, 168 insertions(+), 4 deletions(-)

diff --git a/dev-python/requests-cache/files/requests-cache-0.9.3-cattrs-22.patch b/dev-python/requests-cache/files/requests-cache-0.9.3-cattrs-22.patch
new file mode 100644
index 000000000000..258738158355
--- /dev/null
+++ b/dev-python/requests-cache/files/requests-cache-0.9.3-cattrs-22.patch
@@ -0,0 +1,150 @@
+From 7917ba0dd12901d88137d3f8b487307eda38d326 Mon Sep 17 00:00:00 2001
+From: Jordan Cook <jordan.cook@pioneer.com>
+Date: Sat, 9 Apr 2022 13:33:32 -0500
+Subject: [PATCH] Add compatibility with cattrs 21.1+, and clean up preconf
+ module a bit
+
+---
+ requests_cache/__init__.py            |  2 +-
+ requests_cache/serializers/preconf.py | 89 +++++++++++++++------------
+ 2 files changed, 49 insertions(+), 42 deletions(-)
+
+diff --git a/requests_cache/__init__.py b/requests_cache/__init__.py
+index 87781ba..835586c 100644
+--- a/requests_cache/__init__.py
++++ b/requests_cache/__init__.py
+@@ -17,4 +17,4 @@ try:
+     from .session import *
+ # Log and ignore ImportErrors, if imported outside a virtualenv (e.g., just to check __version__)
+ except ImportError as e:
+-    logger.warning(e)
++    logger.warning(e, exc_info=True)
+diff --git a/requests_cache/serializers/preconf.py b/requests_cache/serializers/preconf.py
+index ed19fb4..cb099b8 100644
+--- a/requests_cache/serializers/preconf.py
++++ b/requests_cache/serializers/preconf.py
+@@ -1,3 +1,4 @@
++# flake8: noqa: F841
+ """The ``cattrs`` library includes a number of `pre-configured converters
+ <https://cattrs.readthedocs.io/en/latest/preconf.html>`_ that perform some pre-serialization steps
+ required for specific serialization formats.
+@@ -14,69 +15,75 @@ class that raises an ``ImportError`` at initialization time instead of at import
+ """
+ import pickle
+ from functools import partial
+-
+-from cattr.preconf import bson as bson_preconf
+-from cattr.preconf import json as json_preconf
+-from cattr.preconf import msgpack, orjson, pyyaml, tomlkit, ujson
++from importlib import import_module
+ 
+ from .._utils import get_placeholder_class
+ from .cattrs import CattrStage
+ from .pipeline import SerializerPipeline, Stage
+ 
+-base_stage = (
+-    CattrStage()
+-)  #: Base stage for all serializer pipelines (or standalone dict serializer)
++
++def make_stage(preconf_module: str):
++    """Create a preconf serializer stage from a module name, if dependencies are installed"""
++    try:
++        return CattrStage(import_module(preconf_module).make_converter)
++    except ImportError as e:
++        return get_placeholder_class(e)
++
++
++base_stage = CattrStage()  #: Base stage for all serializer pipelines
+ dict_serializer = base_stage  #: Partial serializer that unstructures responses into dicts
+-bson_preconf_stage = CattrStage(bson_preconf.make_converter)  #: Pre-serialization steps for BSON
+-json_preconf_stage = CattrStage(json_preconf.make_converter)  #: Pre-serialization steps for JSON
+-msgpack_preconf_stage = CattrStage(msgpack.make_converter)  #: Pre-serialization steps for msgpack
+-orjson_preconf_stage = CattrStage(orjson.make_converter)  #: Pre-serialization steps for orjson
+-yaml_preconf_stage = CattrStage(pyyaml.make_converter)  #: Pre-serialization steps for YAML
+-toml_preconf_stage = CattrStage(tomlkit.make_converter)  #: Pre-serialization steps for TOML
+-ujson_preconf_stage = CattrStage(ujson.make_converter)  #: Pre-serialization steps for ultrajson
+-pickle_serializer = SerializerPipeline(
+-    [base_stage, pickle], is_binary=True
+-)  #: Complete pickle serializer
++pickle_serializer = SerializerPipeline([base_stage, pickle], is_binary=True)  #: Pickle serializer
+ utf8_encoder = Stage(dumps=str.encode, loads=lambda x: x.decode())  #: Encode to bytes
++bson_preconf_stage = make_stage('cattr.preconf.bson')  #: Pre-serialization steps for BSON
++json_preconf_stage = make_stage('cattr.preconf.json')  #: Pre-serialization steps for JSON
++msgpack_preconf_stage = make_stage('cattr.preconf.msgpack')  #: Pre-serialization steps for msgpack
++orjson_preconf_stage = make_stage('cattr.preconf.orjson')  #: Pre-serialization steps for orjson
++toml_preconf_stage = make_stage('cattr.preconf.tomlkit')  #: Pre-serialization steps for TOML
++ujson_preconf_stage = make_stage('cattr.preconf.ujson')  #: Pre-serialization steps for ultrajson
++yaml_preconf_stage = make_stage('cattr.preconf.pyyaml')  #: Pre-serialization steps for YAML
+ 
+ 
+ # Safe pickle serializer
+-try:
++def signer_stage(secret_key=None, salt='requests-cache') -> Stage:
++    """Create a stage that uses ``itsdangerous`` to add a signature to responses on write, and
++    validate that signature with a secret key on read. Can be used in a
++    :py:class:`.SerializerPipeline` in combination with any other serialization steps.
++    """
+     from itsdangerous import Signer
+ 
+-    def signer_stage(secret_key=None, salt='requests-cache') -> Stage:
+-        """Create a stage that uses ``itsdangerous`` to add a signature to responses on write, and
+-        validate that signature with a secret key on read. Can be used in a
+-        :py:class:`.SerializerPipeline` in combination with any other serialization steps.
+-        """
+-        return Stage(Signer(secret_key=secret_key, salt=salt), dumps='sign', loads='unsign')
+-
+-    def safe_pickle_serializer(
+-        secret_key=None, salt='requests-cache', **kwargs
+-    ) -> SerializerPipeline:
+-        """Create a serializer that uses ``pickle`` + ``itsdangerous`` to add a signature to
+-        responses on write, and validate that signature with a secret key on read.
+-        """
+-        return SerializerPipeline(
+-            [base_stage, pickle, signer_stage(secret_key, salt)], is_binary=True
+-        )
++    return Stage(Signer(secret_key=secret_key, salt=salt), dumps='sign', loads='unsign')
++
++
++def safe_pickle_serializer(secret_key=None, salt='requests-cache', **kwargs) -> SerializerPipeline:
++    """Create a serializer that uses ``pickle`` + ``itsdangerous`` to add a signature to
++    responses on write, and validate that signature with a secret key on read.
++    """
++    return SerializerPipeline([base_stage, pickle, signer_stage(secret_key, salt)], is_binary=True)
++
+ 
++try:
++    import itsdangerous  # noqa: F401
+ except ImportError as e:
+     signer_stage = get_placeholder_class(e)
+     safe_pickle_serializer = get_placeholder_class(e)
+ 
+ 
+-# BSON serializer
+-try:
++def _get_bson_functions():
++    """Handle different function names between pymongo's bson and standalone bson"""
+     try:
+-        from bson import decode as _bson_loads
+-        from bson import encode as _bson_dumps
++        import pymongo  # noqa: F401
++
++        return {'dumps': 'encode', 'loads': 'decode'}
+     except ImportError:
+-        from bson import dumps as _bson_dumps
+-        from bson import loads as _bson_loads
++        return {'dumps': 'dumps', 'loads': 'loads'}
++
++
++# BSON serializer
++try:
++    import bson
+ 
+     bson_serializer = SerializerPipeline(
+-        [bson_preconf_stage, Stage(dumps=_bson_dumps, loads=_bson_loads)], is_binary=True
++        [bson_preconf_stage, Stage(bson, **_get_bson_functions())], is_binary=True
+     )  #: Complete BSON serializer; uses pymongo's ``bson`` if installed, otherwise standalone ``bson`` codec
+ except ImportError as e:
+     bson_serializer = get_placeholder_class(e)
+-- 
+2.35.1
+

diff --git a/dev-python/requests-cache/requests-cache-0.9.3.ebuild b/dev-python/requests-cache/requests-cache-0.9.3-r1.ebuild
similarity index 85%
rename from dev-python/requests-cache/requests-cache-0.9.3.ebuild
rename to dev-python/requests-cache/requests-cache-0.9.3-r1.ebuild
index 46702860b1d5..1d237051f1ea 100644
--- a/dev-python/requests-cache/requests-cache-0.9.3.ebuild
+++ b/dev-python/requests-cache/requests-cache-0.9.3-r1.ebuild
@@ -11,11 +11,13 @@ inherit distutils-r1 optfeature
 
 HOMEPAGE="
 	https://pypi.org/project/requests-cache/
-	https://github.com/reclosedev/requests-cache/"
+	https://github.com/reclosedev/requests-cache/
+"
 DESCRIPTION="Persistent cache for requests library"
 SRC_URI="
 	https://github.com/reclosedev/requests-cache/archive/v${PV}.tar.gz
-		-> ${P}.gh.tar.gz"
+		-> ${P}.gh.tar.gz
+"
 
 LICENSE="BSD"
 SLOT="0"
@@ -27,7 +29,8 @@ RDEPEND="
 	dev-python/cattrs[${PYTHON_USEDEP}]
 	>=dev-python/requests-2.0.0[${PYTHON_USEDEP}]
 	dev-python/urllib3[${PYTHON_USEDEP}]
-	>=dev-python/url-normalize-1.4[${PYTHON_USEDEP}]"
+	>=dev-python/url-normalize-1.4[${PYTHON_USEDEP}]
+"
 BDEPEND="
 	test? (
 		dev-python/itsdangerous[${PYTHON_USEDEP}]
@@ -36,10 +39,21 @@ BDEPEND="
 		dev-python/responses[${PYTHON_USEDEP}]
 		dev-python/timeout-decorator[${PYTHON_USEDEP}]
 		dev-python/ujson[${PYTHON_USEDEP}]
-	)"
+	)
+"
 
 distutils_enable_tests pytest
 
+PATCHES=(
+	"${FILESDIR}"/${P}-cattrs-22.patch
+)
+
+src_prepare() {
+	# unpin the dep
+	sed -i -e '/cattrs/s:\^:>=:' pyproject.toml || die
+	distutils-r1_src_prepare
+}
+
 python_test() {
 	local EPYTEST_IGNORE=(
 		# These require extra servers running


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-04-26 10:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-26 10:56 [gentoo-commits] repo/gentoo:master commit in: dev-python/requests-cache/, dev-python/requests-cache/files/ Michał Górny

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox