From 443fd8708de40543e8fcd4f60fa1a93e6b23fd20 Mon Sep 17 00:00:00 2001 From: Komeil Parseh Date: Tue, 1 Jul 2025 23:05:16 +0330 Subject: [PATCH] New package: python3-hishel-0.1.2 --- ...aml-and-redis-tests-if-optional-deps.patch | 262 ++++++++++++++++++ srcpkgs/python3-hishel/template | 20 ++ 2 files changed, 282 insertions(+) create mode 100644 srcpkgs/python3-hishel/patches/0001-skip-anysqlite-yaml-and-redis-tests-if-optional-deps.patch create mode 100644 srcpkgs/python3-hishel/template diff --git a/srcpkgs/python3-hishel/patches/0001-skip-anysqlite-yaml-and-redis-tests-if-optional-deps.patch b/srcpkgs/python3-hishel/patches/0001-skip-anysqlite-yaml-and-redis-tests-if-optional-deps.patch new file mode 100644 index 00000000000..5399030a153 --- /dev/null +++ b/srcpkgs/python3-hishel/patches/0001-skip-anysqlite-yaml-and-redis-tests-if-optional-deps.patch @@ -0,0 +1,262 @@ +From 8ce61a6e604d5ae948b5eb68d1e9fc8e640a71dd Mon Sep 17 00:00:00 2001 +From: Komeil Parseh +Date: Wed, 2 Jul 2025 16:17:36 +0330 +Subject: [PATCH] skip anysqlite, yaml and redis tests if optional deps are + missing + +--- + tests/_async/test_storages.py | 29 ++++++++++++++++++++++++++++- + tests/_sync/test_storages.py | 29 ++++++++++++++++++++++++++++- + tests/test_serializers.py | 10 ++++++++++ + 3 files changed, 66 insertions(+), 2 deletions(-) + +diff --git a/tests/_async/test_storages.py b/tests/_async/test_storages.py +index b780185..08087b0 100644 +--- a/tests/_async/test_storages.py ++++ b/tests/_async/test_storages.py +@@ -2,7 +2,6 @@ import datetime + import os + from pathlib import Path + +-import anysqlite + import pytest + from httpcore import Request, Response + +@@ -10,6 +9,16 @@ from hishel import AsyncFileStorage, AsyncInMemoryStorage, AsyncRedisStorage, As + from hishel._serializers import Metadata + from hishel._utils import asleep, generate_key + ++try: ++ import anysqlite ++except ImportError: ++ anysqlite = None # type: ignore ++ ++try: ++ import redis ++except ImportError: ++ redis = None # type: ignore ++ + dummy_metadata = Metadata(cache_key="test", number_of_uses=0, created_at=datetime.datetime.now(datetime.timezone.utc)) + + +@@ -48,6 +57,8 @@ async def test_filestorage(use_temp_dir): + + @pytest.mark.parametrize("anyio_backend", ["asyncio"]) + async def test_redisstorage(anyio_backend): ++ if redis is None: # pragma: no cover ++ pytest.skip("redis is not installed") + if await is_redis_down(): # pragma: no cover + pytest.fail("Redis server was not found") + storage = AsyncRedisStorage() +@@ -73,6 +84,8 @@ async def test_redisstorage(anyio_backend): + + @pytest.mark.anyio + async def test_sqlitestorage(): ++ if anysqlite is None: # pragma: no cover ++ pytest.skip("anysqlite not installed") + storage = AsyncSQLiteStorage(connection=await anysqlite.connect(":memory:")) + + request = Request(b"GET", "https://example.com") +@@ -196,6 +209,8 @@ async def test_filestorage_ttl_after_hits(use_temp_dir, anyio_backend): + + @pytest.mark.parametrize("anyio_backend", ["asyncio"]) + async def test_redisstorage_expired(anyio_backend): ++ if redis is None: # pragma: no cover ++ pytest.skip("redis is not installed") + if await is_redis_down(): # pragma: no cover + pytest.fail("Redis server was not found") + storage = AsyncRedisStorage(ttl=0.1) +@@ -219,6 +234,10 @@ async def test_redisstorage_expired(anyio_backend): + + @pytest.mark.parametrize("anyio_backend", ["asyncio"]) + async def test_redis_ttl_after_hits(use_temp_dir, anyio_backend): ++ if redis is None: # pragma: no cover ++ pytest.skip("redis not installed") ++ if await is_redis_down(): # pragma: no cover ++ pytest.fail("Redis server was not found") + storage = AsyncRedisStorage(ttl=0.2) + + request = Request(b"GET", "https://example.com") +@@ -249,6 +268,8 @@ async def test_redis_ttl_after_hits(use_temp_dir, anyio_backend): + + @pytest.mark.parametrize("anyio_backend", ["asyncio"]) + async def test_sqlite_expired(anyio_backend): ++ if anysqlite is None: # pragma: no cover ++ pytest.skip("anysqlite not installed") + storage = AsyncSQLiteStorage(ttl=0.1, connection=await anysqlite.connect(":memory:")) + first_request = Request(b"GET", "https://example.com") + second_request = Request(b"GET", "https://anotherexample.com") +@@ -271,6 +292,8 @@ async def test_sqlite_expired(anyio_backend): + @pytest.mark.xfail + @pytest.mark.parametrize("anyio_backend", ["asyncio"]) + async def test_sqlite_ttl_after_hits(use_temp_dir, anyio_backend): ++ if anysqlite is None: # pragma: no cover ++ pytest.skip("anysqlite not installed") + storage = AsyncSQLiteStorage(ttl=0.2) + + request = Request(b"GET", "https://example.com") +@@ -390,6 +413,8 @@ async def test_filestorage_remove(use_temp_dir): + + @pytest.mark.parametrize("anyio_backend", ["asyncio"]) + async def test_redisstorage_remove(anyio_backend): ++ if redis is None: # pragma: no cover ++ pytest.skip("redis not installed") + if await is_redis_down(): # pragma: no cover + pytest.fail("Redis server was not found") + +@@ -408,6 +433,8 @@ async def test_redisstorage_remove(anyio_backend): + + @pytest.mark.anyio + async def test_sqlitestorage_remove(): ++ if anysqlite is None: # pragma: no cover ++ pytest.skip("anysqlite not installed") + storage = AsyncSQLiteStorage(connection=await anysqlite.connect(":memory:")) + request = Request(b"GET", "https://example.com") + +diff --git a/tests/_sync/test_storages.py b/tests/_sync/test_storages.py +index 43151de..16c8336 100644 +--- a/tests/_sync/test_storages.py ++++ b/tests/_sync/test_storages.py +@@ -2,7 +2,6 @@ import datetime + import os + from pathlib import Path + +-import sqlite3 + import pytest + from httpcore import Request, Response + +@@ -10,6 +9,16 @@ from hishel import FileStorage, InMemoryStorage, RedisStorage, SQLiteStorage + from hishel._serializers import Metadata + from hishel._utils import sleep, generate_key + ++try: ++ import sqlite3 ++except ImportError: ++ sqlite3 = None # type: ignore ++ ++try: ++ import redis ++except ImportError: ++ redis = None # type: ignore ++ + dummy_metadata = Metadata(cache_key="test", number_of_uses=0, created_at=datetime.datetime.now(datetime.timezone.utc)) + + +@@ -48,6 +57,8 @@ def test_filestorage(use_temp_dir): + + + def test_redisstorage(anyio_backend): ++ if redis is None: # pragma: no cover ++ pytest.skip("redis is not installed") + if is_redis_down(): # pragma: no cover + pytest.fail("Redis server was not found") + storage = RedisStorage() +@@ -73,6 +84,8 @@ def test_redisstorage(anyio_backend): + + + def test_sqlitestorage(): ++ if sqlite3 is None: # pragma: no cover ++ pytest.skip("sqlite3 not installed") + storage = SQLiteStorage(connection=sqlite3.connect(":memory:")) + + request = Request(b"GET", "https://example.com") +@@ -196,6 +209,8 @@ def test_filestorage_ttl_after_hits(use_temp_dir, anyio_backend): + + + def test_redisstorage_expired(anyio_backend): ++ if redis is None: # pragma: no cover ++ pytest.skip("redis is not installed") + if is_redis_down(): # pragma: no cover + pytest.fail("Redis server was not found") + storage = RedisStorage(ttl=0.1) +@@ -219,6 +234,10 @@ def test_redisstorage_expired(anyio_backend): + + + def test_redis_ttl_after_hits(use_temp_dir, anyio_backend): ++ if redis is None: # pragma: no cover ++ pytest.skip("redis not installed") ++ if is_redis_down(): # pragma: no cover ++ pytest.fail("Redis server was not found") + storage = RedisStorage(ttl=0.2) + + request = Request(b"GET", "https://example.com") +@@ -249,6 +268,8 @@ def test_redis_ttl_after_hits(use_temp_dir, anyio_backend): + + + def test_sqlite_expired(anyio_backend): ++ if sqlite3 is None: # pragma: no cover ++ pytest.skip("sqlite3 not installed") + storage = SQLiteStorage(ttl=0.1, connection=sqlite3.connect(":memory:")) + first_request = Request(b"GET", "https://example.com") + second_request = Request(b"GET", "https://anotherexample.com") +@@ -271,6 +292,8 @@ def test_sqlite_expired(anyio_backend): + @pytest.mark.xfail + + def test_sqlite_ttl_after_hits(use_temp_dir, anyio_backend): ++ if sqlite3 is None: # pragma: no cover ++ pytest.skip("sqlite3 not installed") + storage = SQLiteStorage(ttl=0.2) + + request = Request(b"GET", "https://example.com") +@@ -390,6 +413,8 @@ def test_filestorage_remove(use_temp_dir): + + + def test_redisstorage_remove(anyio_backend): ++ if redis is None: # pragma: no cover ++ pytest.skip("redis not installed") + if is_redis_down(): # pragma: no cover + pytest.fail("Redis server was not found") + +@@ -408,6 +433,8 @@ def test_redisstorage_remove(anyio_backend): + + + def test_sqlitestorage_remove(): ++ if sqlite3 is None: # pragma: no cover ++ pytest.skip("sqlite3 not installed") + storage = SQLiteStorage(connection=sqlite3.connect(":memory:")) + request = Request(b"GET", "https://example.com") + +diff --git a/tests/test_serializers.py b/tests/test_serializers.py +index d22ed0a..cf7df2f 100644 +--- a/tests/test_serializers.py ++++ b/tests/test_serializers.py +@@ -1,5 +1,6 @@ + import datetime + ++import pytest + from httpcore import Request, Response + + from hishel._serializers import ( +@@ -10,6 +11,11 @@ from hishel._serializers import ( + ) + from hishel._utils import normalized_url + ++try: ++ import yaml ++except ImportError: ++ yaml = None # type: ignore ++ + + def test_pickle_serializer_dumps_and_loads(): + request = Request( +@@ -192,6 +198,8 @@ def test_dict_serializer_loads(): + + + def test_yaml_serializer_dumps(): ++ if yaml is None: # pragma: no cover ++ pytest.skip("yaml not installed") + request = Request( + method="GET", + url="https://example.com", +@@ -248,6 +256,8 @@ def test_yaml_serializer_dumps(): + + + def test_yaml_serializer_loads(): ++ if yaml is None: # pragma: no cover ++ pytest.skip("yaml not installed") + raw_response = "\n".join( + [ + "response:", +-- +2.50.0 + diff --git a/srcpkgs/python3-hishel/template b/srcpkgs/python3-hishel/template new file mode 100644 index 00000000000..15b709cf75b --- /dev/null +++ b/srcpkgs/python3-hishel/template @@ -0,0 +1,20 @@ +# Template file for 'python3-hishel' +pkgname=python3-hishel +version=0.1.2 +revision=1 +build_style=python3-pep517 +hostmakedepends="python3 hatch hatch-fancy-pypi-readme" +makedepends="python3 hatch hatch-fancy-pypi-readme" +depends="python3-httpx" +checkdepends="python3-pytest python3-trio" +short_desc="Elegant HTTP Cache implementation for httpx and httpcore" +maintainer="Komeil Parseh " +license="BSD-3-Clause" +homepage="https://github.com/karpetrosyan/hishel" +changelog="${homepage}/raw/refs/heads/master/CHANGELOG.md" +distfiles="${homepage}/archive/refs/tags/${version}.tar.gz" +checksum=ee41e09d18d0b6c63d87797def3c3825dbedf871664764d7afbd0cc0305fa317 + +post_install() { + vlicense LICENSE +}