This commit is contained in:
Komeil Parseh 2025-07-29 10:46:01 +02:00 committed by GitHub
commit c1e495c317
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 466 additions and 0 deletions

25
srcpkgs/pdm/template Normal file
View file

@ -0,0 +1,25 @@
# Template file for 'pdm'
pkgname=pdm
version=2.25.4
revision=1
build_style=python3-pep517
hostmakedepends="python3 python3-build python3-pdm-backend python3-pdm-build-locked"
depends="python3-blinker python3-dep-logic python3-dotenv python3-filelock python3-findpython python3-httpx python3-hishel
python3-idna python3-id python3-installer python3-msgpack python3-pbs-installer python3-pyproject-hooks python3-resolvelib
python3-certifi python3-httpcore python3-packaging python3-platformdirs python3-rich python3-shellingham python3-truststore
python3-tomli python3-tomlkit python3-virtualenv python3-unearth"
checkdepends="${depends} python3-pytest python3-pytest-cov python3-pytest-httpserver python3-pytest-httpx
python3-pytest-mock python3-pytest-rerunfailures python3-pytest-xdist"
short_desc="Modern Python package and dependency manager"
maintainer="Komeil Parseh <komeilparseh@disroot.org>"
license="MIT"
homepage="https://pdm-project.org/"
changelog="https://raw.githubusercontent.com/pdm-project/pdm/main/CHANGELOG.md"
distfiles="${PYPI_SITE}/p/pdm/pdm-${version}.tar.gz"
checksum=bd655d789429928d6e27ff6693c19c82bc81aa75ba51d7b1c6102d039c8f211c
# Tests fail on Python 3.13 due to type annotation incompatibilities (e.g. AbstractProvider[str])
make_check=no
post_install() {
vlicense LICENSE
}

View file

@ -0,0 +1,19 @@
# Template file for 'python3-dep-logic'
pkgname=python3-dep-logic
version=0.5.1
revision=1
build_style=python3-pep517
hostmakedepends="python3 python3-build python3-pdm-backend"
depends="python3-packaging"
checkdepends="python3-pytest"
short_desc="Python dependency specifications supporting logical operations"
maintainer="Komeil Parseh <komeilparseh@disroot.org>"
license="Apache-2.0"
homepage="https://github.com/pdm-project/dep-logic"
distfiles="https://github.com/pdm-project/dep-logic/archive/refs/tags/${version}.tar.gz"
checksum=9f6a253d7dae80c6f05bd429333066b97b9130841792870722af28003b2de852
pre_build() {
# Specify fallback version to avoid SCM detection issues
export PDM_BUILD_SCM_VERSION="${version}"
}

View file

@ -0,0 +1,24 @@
# Template file for 'python3-findpython'
pkgname=python3-findpython
version=0.6.3
revision=1
build_style=python3-pep517
hostmakedepends="python3 python3-build python3-pdm-backend"
depends="python3-packaging"
checkdepends="python3-pytest"
short_desc="Utility to find python versions on your system"
maintainer="Komeil Parseh <komeilparseh@disroot.org>"
license="MIT"
homepage="https://github.com/frostming/findpython"
changelog="https://raw.githubusercontent.com/pdm-project/pdm/main/CHANGELOG.md"
distfiles="https://github.com/frostming/findpython/archive/refs/tags/${version}.tar.gz"
checksum=6da4a3f00326db2765e60a61bcd5f7941836cdadc3a4b0e60b860da9f8b3fbaa
pre_build() {
# Specify fallback version to avoid SCM detection issues
export PDM_BUILD_SCM_VERSION="${version}"
}
post_install() {
vlicense LICENSE
}

View file

@ -0,0 +1,262 @@
From 8ce61a6e604d5ae948b5eb68d1e9fc8e640a71dd Mon Sep 17 00:00:00 2001
From: Komeil Parseh <komeilparseh@disroot.org>
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

View file

@ -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 <komeilparseh@disroot.org>"
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
}

View file

@ -0,0 +1,16 @@
# Template file for 'python3-id'
pkgname=python3-id
version=1.5.0
revision=1
build_style=python3-pep517
hostmakedepends="python3 python3-flit_core"
makedepends="python3 python3-flit_core"
depends="python3 python3-requests"
checkdepends="python3-pretend python3-pytest python3-requests"
short_desc="Tool for generating OIDC identities"
maintainer="Komeil Parseh <komeilparseh@disroot.org>"
license="Apache-2.0"
homepage="https://github.com/di/id"
changelog="${homepage}/raw/refs/heads/master/CHANGELOG.md"
distfiles="${homepage}/archive/refs/tags/v${version}.tar.gz"
checksum=386c68dbaa0191165b44017781b373e49d9a4ae8ba9d01db772daed28d0849e3

View file

@ -0,0 +1,23 @@
# Template file for 'python3-pbs-installer'
pkgname=python3-pbs-installer
version=2025.06.26
revision=1
build_style=python3-pep517
hostmakedepends="python3 python3-build python3-pdm-backend"
depends="python3-httpx python3-zstandard"
short_desc="Installer for @indygreg's python-build-standalone"
maintainer="Komeil Parseh <komeilparseh@disroot.org>"
license="MIT"
homepage="https://github.com/frostming/pbs-installer"
changelog="https://raw.githubusercontent.com/pdm-project/pdm/main/CHANGELOG.md"
distfiles="https://github.com/frostming/pbs-installer/archive/refs/tags/${version}.tar.gz"
checksum=01e6c545005a304b1bcc2a4ebb82212e4fc3ed8cd48e2ebc0e46dd30932fc492
pre_build() {
# Specify fallback version to avoid SCM detection issues
export PDM_BUILD_SCM_VERSION="${version}"
}
post_install() {
vlicense LICENSE
}

View file

@ -0,0 +1,16 @@
# Template file for 'python3-pdm-build-locked'
pkgname=python3-pdm-build-locked
version=0.3.5
revision=1
build_style=python3-pep517
hostmakedepends="python3 python3-build python3-pdm-backend"
short_desc="Pdm plugin to publish locked dependencies as optional-dependencies"
maintainer="Komeil Parseh <komeilparseh@disroot.org>"
license="MIT"
homepage="https://pdm-build-locked.readthedocs.io/"
distfiles="${PYPI_SITE}/p/pdm_build_locked/pdm_build_locked-${version}.tar.gz"
checksum=ab2f381e00d79841d46be2e6909c265038b9fa951de2bf551ca6adb7f6844201
post_install() {
vlicense LICENSE
}

View file

@ -0,0 +1,18 @@
# Template file for 'python3-pytest-httpx'
pkgname=python3-pytest-httpx
version=0.35.0
revision=1
build_style=python3-pep517
hostmakedepends="python3-setuptools_scm python3-wheel"
depends="python3-pytest python3-httpx python3-pytest-asyncio"
checkdepends="$depends python3-pytest-cov"
short_desc="Pytest fixture to mock HTTPX"
maintainer="Komeil Parseh <komeilparseh@disroot.org>"
license="MIT"
homepage="https://github.com/Colin-b/pytest_httpx"
distfiles="${homepage}/archive/refs/tags/v${version}.tar.gz"
checksum=c0653073f7690ea1ab068cc5872655ff79634377441dce1f71ae7396721df915
post_install() {
vlicense LICENSE
}

View file

@ -0,0 +1,21 @@
# Template file for 'python3-truststore'
pkgname=python3-truststore
version=0.10.0
revision=1
build_style=python3-pep517
hostmakedepends="python3 python3-build python3-flit_core"
makedepends="python3-flit_core"
depends="python3"
checkdepends="python3-aiohttp python3-httpx python3-pytest python3-pytest-httpserver
python3-flaky python3-pytest-asyncio python3-requests"
short_desc="Verify certificates using OS trust stores"
maintainer="Komeil Parseh <komeilparseh@disroot.org>"
license="MIT"
homepage="https://github.com/sethmlarson/truststore"
changelog="${homepage}/raw/refs/heads/master/CHANGELOG.md"
distfiles="${homepage}/archive/refs/tags/v${version}.tar.gz"
checksum=12e89641dba78a9427f782ad2d824bed93583a9465002fe59b63c3fd12cbe8f5
post_install() {
vlicense LICENSE
}

View file

@ -0,0 +1,22 @@
# Template file for 'python3-unearth'
pkgname=python3-unearth
version=0.17.5
revision=1
build_style=python3-pep517
hostmakedepends="python3 python3-build python3-pdm-backend"
depends="python3-httpx python3-packaging python3-requests"
short_desc="Utility to fetch and download python packages"
maintainer="Komeil Parseh <komeilparseh@disroot.org>"
license="MIT"
homepage="https://github.com/frostming/unearth"
distfiles="https://github.com/frostming/unearth/archive/refs/tags/${version}.tar.gz"
checksum=306a4b4722988866217e0315fdc3f7716abab3b112cc7126a52f1cc8015b96cd
pre_build() {
# Specify fallback version to avoid SCM detection issues
export PDM_BUILD_SCM_VERSION="${version}"
}
post_install() {
vlicense LICENSE
}