summaryrefslogtreecommitdiff
path: root/dev-python
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2024-07-21 18:14:05 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2024-07-21 18:14:05 +0000
commit7128f8f8c3ad117ad2fc308b09c574c21086d3e1 (patch)
tree26b8bd2458360ebc5db112665aaf6d3985986721 /dev-python
parenteb713a2e58ad2c091a27fa052d98924ca7f51a86 (diff)
downloadbaldeagleos-repo-7128f8f8c3ad117ad2fc308b09c574c21086d3e1.tar.gz
baldeagleos-repo-7128f8f8c3ad117ad2fc308b09c574c21086d3e1.tar.xz
baldeagleos-repo-7128f8f8c3ad117ad2fc308b09c574c21086d3e1.zip
Adding metadata
Diffstat (limited to 'dev-python')
-rw-r--r--dev-python/django-allauth/Manifest4
-rw-r--r--dev-python/django-allauth/django-allauth-0.63.6.ebuild65
-rw-r--r--dev-python/django-allauth/metadata.xml2
-rw-r--r--dev-python/langdetect/Manifest2
-rw-r--r--dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch13
-rw-r--r--dev-python/langdetect/langdetect-1.0.9.ebuild4
-rw-r--r--dev-python/langdetect/metadata.xml10
-rw-r--r--dev-python/m2crypto/files/patch-src_SWIG__lib11_compat_i23
-rw-r--r--dev-python/m2crypto/files/patch-src_SWIG__lib_i70
-rw-r--r--dev-python/m2crypto/files/patch-src_SWIG__threads_i50
-rw-r--r--dev-python/m2crypto/files/patch-src_SWIG__x509_i16
-rw-r--r--dev-python/m2crypto/m2crypto-0.41.0.ebuild13
-rw-r--r--dev-python/pure-eval/Manifest1
-rw-r--r--dev-python/pure-eval/pure-eval-0.2.3.ebuild37
-rw-r--r--dev-python/starlette/Manifest1
-rw-r--r--dev-python/starlette/files/starlette-0.38.0-py313.patch35
-rw-r--r--dev-python/starlette/starlette-0.38.0.ebuild55
17 files changed, 376 insertions, 25 deletions
diff --git a/dev-python/django-allauth/Manifest b/dev-python/django-allauth/Manifest
index 4103448dea2b..5c62afd25bf5 100644
--- a/dev-python/django-allauth/Manifest
+++ b/dev-python/django-allauth/Manifest
@@ -1,5 +1,3 @@
DIST django-allauth-0.61.1.tar.gz 951524 BLAKE2B 3a29689f6b8032d96afbfb8081c8f07367395892c3daa9224074799608911bf517ece04a047e859f97d80d11adaff7fa0dbf25102121f5354d8e17cbbcdddd4d SHA512 c9ad0b206a4967d542a67d97e8973d4d83fe030fa71d8fad1f43b81fb388895a7d9c339f49d536cccfad5b3f606ea02dd31bc5e41328579d092b00e7e0a1b936
DIST django-allauth-0.63.3.gh.tar.gz 1089336 BLAKE2B 6fb10088789bcd7972ebe92c34198808df6ed6eb15102b79fafc5234822f9a3d223de28393bf1216ff39beb73376503565ac39ec94cbebb2cc3e003fa353b77d SHA512 54159efe7510a74d8b8c661217669d2ff08135ab5ec54fa5b09a29092e782fd615a2a65dbfa493b3817bcf9fbe77425dfab8e6c0d7a9098abb9ebd80860156e7
-EBUILD django-allauth-0.61.1.ebuild 1669 BLAKE2B 9245fff38d849862f47fd498ee70c6078a4b60a46982c91a42807e7d9cb0ab361eee8fa8c8e0f6e43ea1dd04baf7f8bb702cb7d502f130758e84413198cdf595 SHA512 b31cbe777ab4ec079e9c72e7f576ae26fac9f7c94b3494d78260a3bced66a117ba60d8de8c37f4468abcc3e32289a2c18c5278a4a17741f0c296f71053c7549e
-EBUILD django-allauth-0.63.3.ebuild 1736 BLAKE2B 51b4415e6ce2d768c04522fdc7af7548ab29a65201cb7b51fd116f2fd6e981f3f092c84c76a3da4bd822d55c565118d33a6dd32b842710436eb2a56382436843 SHA512 d41a553b8e53ed14d17c683249e1f933527bc0bfa9a333c4c1d3780fd88a84960bc58535c973270a07d2815c5e86c20f022e695cca59108d92379bbcd2822c5f
-MISC metadata.xml 467 BLAKE2B e7467950c489e3497a838a7cc47cbc3172c64a5a26048131e912ab5149ca865a31798458163e915d9afc749969523c5d10156425a5ea1e323f25363d8a3764fc SHA512 b0c60fd75f3f07991750c87f3caa1e1d5cd53f15262377c0f4a33e89c9ff6ada1e18e8a115bf52b566f09b77e2bb2387509f61f06ba0aa81edd91bece9448cda
+DIST django-allauth-0.63.6.gh.tar.gz 1090004 BLAKE2B 07a3ba7546de6b5a7ebf731dd7fb11ba814042ffc81022d9211b685c5cfa3318a8966697fbbf2519be28272d8fa1f69ec1f141dba10b31886f8c98204c18ee78 SHA512 4ca285cc8acf57575d7d7bba4a2dfbfc0076279d0dd7aa424d409cc70917494d847214907d83b89d9d10dd440b05c9e343ac091eb5d3ad5f81e85c2d602947d1
diff --git a/dev-python/django-allauth/django-allauth-0.63.6.ebuild b/dev-python/django-allauth/django-allauth-0.63.6.ebuild
new file mode 100644
index 000000000000..a88ef467b293
--- /dev/null
+++ b/dev-python/django-allauth/django-allauth-0.63.6.ebuild
@@ -0,0 +1,65 @@
+# Copyright 2024 Liguros Authors
+# Distributed under the terms of the GNU General Public License v2
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{8,9,10,11,12} )
+
+inherit distutils-r1 optfeature
+
+DESCRIPTION="Django 3rd party (social) account authentication"
+HOMEPAGE="
+ https://www.intenct.nl/projects/django-allauth/
+ https://github.com/pennersr/django-allauth/
+ https://pypi.org/project/django-allauth/
+"
+SRC_URI="https://github.com/pennersr/${PN}/archive/${PV}.tar.gz -> ${P}.gh.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-python/django-3.2[${PYTHON_USEDEP}]
+ >=dev-python/python3-openid-3.0.8[${PYTHON_USEDEP}]
+ >=dev-python/pyjwt-1.7[${PYTHON_USEDEP}]
+ >=dev-python/requests-oauthlib-0.3.0[${PYTHON_USEDEP}]
+ >=dev-python/requests-2.0.0[${PYTHON_USEDEP}]
+"
+# cryptography via pyjwt[crypto]
+RDEPEND+="
+ dev-python/cryptography[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ >=dev-python/pillow-9.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-django-4.5.2[${PYTHON_USEDEP}]
+ >=dev-python/qrcode-7.0.0[${PYTHON_USEDEP}]
+ >=dev-python/python3-saml-1.15.0[${PYTHON_USEDEP}]
+ <dev-python/python3-saml-2.0.0[${PYTHON_USEDEP}]
+ )
+"
+
+DOCS=( README.rst AUTHORS ChangeLog.rst )
+
+distutils_enable_sphinx docs \
+ dev-python/sphinx-rtd-theme
+
+src_test() {
+ # Require internet access
+ rm allauth/socialaccount/providers/openid/tests.py || die
+ distutils-r1_src_test
+}
+
+python_test() {
+ local -x DJANGO_SETTINGS_MODULE=tests.regular.settings
+ local -x PYTHONPATH=.
+ django-admin test -v 2 || die "Tests failed with ${EPYTHON}"
+}
+
+pkg_postinst() {
+ optfeature "SAML authentication" dev-python/python3-saml
+ optfeature "MFA (Multi-factor authentication)" dev-python/qrcode
+}
diff --git a/dev-python/django-allauth/metadata.xml b/dev-python/django-allauth/metadata.xml
index a2df676e20ae..36acccda7221 100644
--- a/dev-python/django-allauth/metadata.xml
+++ b/dev-python/django-allauth/metadata.xml
@@ -2,7 +2,7 @@
<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="project">
- <email>core@liguros.net</email>
+ <email>dev@liguros.net</email>
<name>Development</name>
</maintainer>
diff --git a/dev-python/langdetect/Manifest b/dev-python/langdetect/Manifest
index a11d7c268c91..37a64204a00a 100644
--- a/dev-python/langdetect/Manifest
+++ b/dev-python/langdetect/Manifest
@@ -1 +1,3 @@
DIST langdetect-1.0.9.tar.gz 981474 BLAKE2B ea8a9c3f16a2987c080742473bff4f2c1503f53fb3c2b40b0b1d6212bb6133ea22dce7864ffcfb8968c3a46b157d45cb3e2cf6f84bdbed0266cc716a853b032c SHA512 7558d674c47b080c79e43a00a25d2c7f77188cf60bea2cecb3bebb803d75e1aa42b43c74bd26ea1b541f4cb927421908882cbec01a91f0913984217e71ccc8db
+EBUILD langdetect-1.0.9.ebuild 494 BLAKE2B 9b3521c5721afa49a58e0c35267f7d82bb56bd7e1d6d3152be0d36cd220180a526cb20b90b1113fbf0fff4a512137570f0b3bcf864498b7b7cc00403cb61ca27 SHA512 16d311400bf84a5f04e15f3da4b68b2810e4b005009f4d03dc8a487176dfc294403c976c412c83dcfa8084a49ef7b7d5389b43fb2ba446ce107ce4595e3558c6
+MISC metadata.xml 457 BLAKE2B 630128a3e982b6d60cc7b9f74c79fcb5ee47a71a02c73a50af9da8cedb6fad8e20a7f74b881e5b25c6483b92c9edbd56552cd38b2d9cbfa8b3eb4530facea969 SHA512 674f4f5cd809c6c77bc14e0f5687fa972bef14bdfa0b3343c5d66b7163eef1906eb87d060c8288732f825de71dce291ad0b841a5f2f0dd230f957b5687e45d45
diff --git a/dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch b/dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch
deleted file mode 100644
index 637368d2f237..000000000000
--- a/dev-python/langdetect/files/langdetect-1.0.9-explicit-config.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Fix "Package 'langdetect.profiles' is absent from the `packages` configuration."
-
---- a/setup.py
-+++ b/setup.py
-@@ -18,7 +18,7 @@ setup(
- author_email='michal.danilak@gmail.com',
- url='https://github.com/Mimino666/langdetect',
- keywords='language detection library',
-- packages=['langdetect', 'langdetect.utils', 'langdetect.tests'],
-+ packages=['langdetect', 'langdetect.utils', 'langdetect.tests', 'langdetect.profiles'],
- include_package_data=True,
- install_requires=['six'],
- license='MIT',
diff --git a/dev-python/langdetect/langdetect-1.0.9.ebuild b/dev-python/langdetect/langdetect-1.0.9.ebuild
index 630fe63c6f53..c09b7356f549 100644
--- a/dev-python/langdetect/langdetect-1.0.9.ebuild
+++ b/dev-python/langdetect/langdetect-1.0.9.ebuild
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 Gentoo Authors
+# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -19,6 +19,4 @@ KEYWORDS="~amd64"
RDEPEND="dev-python/six[${PYTHON_USEDEP}]"
-PATCHES=( "${FILESDIR}/${P}-explicit-config.patch" )
-
distutils_enable_tests unittest
diff --git a/dev-python/langdetect/metadata.xml b/dev-python/langdetect/metadata.xml
index 736a1167c898..020e07f2a3dd 100644
--- a/dev-python/langdetect/metadata.xml
+++ b/dev-python/langdetect/metadata.xml
@@ -1,6 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
<pkgmetadata>
-
- <origin>gentoo-guru-overlay</origin>
+ <maintainer type="person">
+ <email>marcin.deranek@slonko.net</email>
+ <name>Marcin Deranek</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://github.com/Mimino666/langdetect/issues</bugs-to>
+ </upstream>
+ <origin>slonko-overlay</origin>
</pkgmetadata> \ No newline at end of file
diff --git a/dev-python/m2crypto/files/patch-src_SWIG__lib11_compat_i b/dev-python/m2crypto/files/patch-src_SWIG__lib11_compat_i
new file mode 100644
index 000000000000..c2600fea04a6
--- /dev/null
+++ b/dev-python/m2crypto/files/patch-src_SWIG__lib11_compat_i
@@ -0,0 +1,23 @@
+Provide CRYPTO_zalloc to fix build with LibreSSL
+
+Index: src/SWIG/_lib11_compat.i
+--- src/SWIG/_lib11_compat.i.orig
++++ src/SWIG/_lib11_compat.i
+@@ -8,7 +8,7 @@
+ */
+
+ %{
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L
++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+
+ #include <string.h>
+ #include <openssl/engine.h>
+@@ -24,6 +24,8 @@ static void *CRYPTO_zalloc(size_t num, const char *fil
+ return ret;
+ }
+
++#endif
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ #include <openssl/bn.h>
+
+ #ifndef BN_F_BN_GENCB_NEW
diff --git a/dev-python/m2crypto/files/patch-src_SWIG__lib_i b/dev-python/m2crypto/files/patch-src_SWIG__lib_i
new file mode 100644
index 000000000000..952b7198b214
--- /dev/null
+++ b/dev-python/m2crypto/files/patch-src_SWIG__lib_i
@@ -0,0 +1,70 @@
+Fix build with LibreSSL
+
+Index: src/SWIG/_lib.i
+--- src/SWIG/_lib.i.orig
++++ src/SWIG/_lib.i
+@@ -21,7 +21,7 @@
+
+ %{
+ /* OpenSSL 1.0.2 copmatbility shim */
+-#if OPENSSL_VERSION_NUMBER < 0x10002000L
++#if OPENSSL_VERSION_NUMBER < 0x10002000L || defined(LIBRESSL_VERSION_NUMBER)
+ typedef void (*OPENSSL_sk_freefunc)(void *);
+ typedef void *(*OPENSSL_sk_copyfunc)(const void *);
+ typedef struct stack_st OPENSSL_STACK;
+@@ -31,47 +31,21 @@ typedef struct stack_st OPENSSL_STACK;
+
+ void OPENSSL_sk_free(OPENSSL_STACK *st)
+ {
+- if (st == NULL)
+- return;
+- OPENSSL_free(st->data);
+- OPENSSL_free(st);
++ sk_free(st);
+ }
+
+ OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *sk,
+ OPENSSL_sk_copyfunc copy_func,
+ OPENSSL_sk_freefunc free_func)
+ {
+- OPENSSL_STACK *ret;
+- int i;
++ /* Do not support this. It relies on UB via function pointer casting. */
++ return NULL;
++}
+
+- if (sk->num < 0)
+- return NULL;
+-
+- if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL)
+- return NULL;
+-
+- /* direct structure assignment */
+- *ret = *sk;
+-
+- ret->num_alloc = sk->num > MIN_NODES ? (size_t)sk->num : MIN_NODES;
+- ret->data = OPENSSL_zalloc(sizeof(*ret->data) * ret->num_alloc);
+- if (ret->data == NULL) {
+- OPENSSL_free(ret);
+- return NULL;
+- }
+-
+- for (i = 0; i < ret->num; ++i) {
+- if (sk->data[i] == NULL)
+- continue;
+- if ((ret->data[i] = copy_func(sk->data[i])) == NULL) {
+- while (--i >= 0)
+- if (ret->data[i] != NULL)
+- free_func((void *)ret->data[i]);
+- OPENSSL_sk_free(ret);
+- return NULL;
+- }
+- }
+- return ret;
++int sk_find_ex(OPENSSL_STACK *sk, void *wanted)
++{
++ /* Let's see if anything fails. */
++ return -1;
+ }
+ #endif /* OpenSSL 1.0.2 copmatbility shim */
+
diff --git a/dev-python/m2crypto/files/patch-src_SWIG__threads_i b/dev-python/m2crypto/files/patch-src_SWIG__threads_i
new file mode 100644
index 000000000000..b0a93a2f5a61
--- /dev/null
+++ b/dev-python/m2crypto/files/patch-src_SWIG__threads_i
@@ -0,0 +1,50 @@
+Fix build with LibreSSL
+
+Index: src/SWIG/_threads.i
+--- src/SWIG/_threads.i.orig
++++ src/SWIG/_threads.i
+@@ -5,7 +5,7 @@
+ #include <pythread.h>
+ #include <openssl/crypto.h>
+
+-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ #define CRYPTO_num_locks() (CRYPTO_NUM_LOCKS)
+ static PyThread_type_lock lock_cs[CRYPTO_num_locks()];
+ static long lock_count[CRYPTO_num_locks()];
+@@ -13,7 +13,7 @@ static int thread_mode = 0;
+ #endif
+
+ void threading_locking_callback(int mode, int type, const char *file, int line) {
+-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ if (mode & CRYPTO_LOCK) {
+ PyThread_acquire_lock(lock_cs[type], WAIT_LOCK);
+ lock_count[type]++;
+@@ -25,7 +25,7 @@ void threading_locking_callback(int mode, int type, co
+ }
+
+ unsigned long threading_id_callback(void) {
+-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ return (unsigned long)PyThread_get_thread_ident();
+ #else
+ return (unsigned long)0;
+@@ -35,7 +35,7 @@ unsigned long threading_id_callback(void) {
+
+ %inline %{
+ void threading_init(void) {
+-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ int i;
+ if (!thread_mode) {
+ for (i=0; i<CRYPTO_num_locks(); i++) {
+@@ -50,7 +50,7 @@ void threading_init(void) {
+ }
+
+ void threading_cleanup(void) {
+-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ int i;
+ if (thread_mode) {
+ CRYPTO_set_locking_callback(NULL);
diff --git a/dev-python/m2crypto/files/patch-src_SWIG__x509_i b/dev-python/m2crypto/files/patch-src_SWIG__x509_i
new file mode 100644
index 000000000000..0e1d20a51801
--- /dev/null
+++ b/dev-python/m2crypto/files/patch-src_SWIG__x509_i
@@ -0,0 +1,16 @@
+X509_check_trust() was removed from the public API
+
+Index: src/SWIG/_x509.i
+--- src/SWIG/_x509.i.orig
++++ src/SWIG/_x509.i
+@@ -108,8 +108,10 @@ extern int X509_cmp_current_time(ASN1_TIME *);
+
+ %rename(x509_check_purpose) X509_check_purpose;
+ extern int X509_check_purpose(X509 *, int, int);
++#ifndef LIBRESSL_VERSION_NUMBER
+ %rename(x509_check_trust) X509_check_trust;
+ extern int X509_check_trust(X509 *, int, int);
++#endif
+
+ %rename(x509_write_pem) PEM_write_bio_X509;
+ %threadallow PEM_write_bio_X509;
diff --git a/dev-python/m2crypto/m2crypto-0.41.0.ebuild b/dev-python/m2crypto/m2crypto-0.41.0.ebuild
index d796a0a55854..62f65f72008d 100644
--- a/dev-python/m2crypto/m2crypto-0.41.0.ebuild
+++ b/dev-python/m2crypto/m2crypto-0.41.0.ebuild
@@ -29,9 +29,9 @@ RDEPEND="
"
DEPEND="${RDEPEND}"
-PATCHES=(
- "${FILESDIR}/${PN}-libressl-0.38.0-r2.patch"
-)
+#PATCHES=(
+# ${FILESDIR}/${PN}-libressl-0.38.0-r2.patch
+#)
swig_define() {
local x
@@ -43,6 +43,13 @@ swig_define() {
}
src_prepare() {
+ if use libressl; then
+ eapply -p0 ${FILESDIR}/patch-src_SWIG__x509_i
+ eapply -p0 ${FILESDIR}/patch-src_SWIG__lib11_compat_i
+ eapply -p0 ${FILESDIR}/patch-src_SWIG__lib_i
+ eapply -p0 ${FILESDIR}/patch-src_SWIG__threads_i
+ fi
+
sed -e 's:test_server_simple_timeouts:_&:' \
-i tests/test_ssl.py || die
distutils-r1_src_prepare
diff --git a/dev-python/pure-eval/Manifest b/dev-python/pure-eval/Manifest
index 2e04617fdd08..429c6ba56260 100644
--- a/dev-python/pure-eval/Manifest
+++ b/dev-python/pure-eval/Manifest
@@ -1 +1,2 @@
DIST pure_eval-0.2.2.tar.gz 19395 BLAKE2B 19f86a1436e5f1a026a24f62c435e8970d84960f4cde1de80c58949b1aede6aa7562e8430e10e3f7171212c31d5699a3321fad5fb2ea1eed961a30d43a632a79 SHA512 35d20cbbfd513b7ac341759e619401a5f57b7b9df8abd09ce6414d4ee6bfa45dcadbad7529d067e81ad7ea2107c14fd03783a3a77f8074dad30d2e5161656804
+DIST pure_eval-0.2.3.tar.gz 19752 BLAKE2B 18ed36bf045ddcd351a8dd82079df409e26ed745e3c326a7743536bc3e74a880830f55fa1252113aa03b9830b5cac63601335cb6b877994861efb0b9b54a07d9 SHA512 8575f54aa7e522a3db86b80fdbe1f8518ef4ef17a160b2541f74d0853e123cffcbc9f04df9faeddfc7ed92bb6b1d27fb7b3ce2de1c66b6b13e453b7b2bf72052
diff --git a/dev-python/pure-eval/pure-eval-0.2.3.ebuild b/dev-python/pure-eval/pure-eval-0.2.3.ebuild
new file mode 100644
index 000000000000..a8c9cecd2616
--- /dev/null
+++ b/dev-python/pure-eval/pure-eval-0.2.3.ebuild
@@ -0,0 +1,37 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{8,9,10,11,12} pypy3 )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Safely evaluate AST nodes without side effects"
+HOMEPAGE="
+ https://github.com/alexmojaki/pure_eval/
+ https://pypi.org/project/pure-eval/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+
+distutils_enable_tests pytest
+
+python_test() {
+ local EPYTEST_DESELECT=()
+
+ case ${EPYTHON} in
+ pypy3)
+ EPYTEST_DESELECT+=(
+ # https://github.com/alexmojaki/pure_eval/issues/15
+ tests/test_getattr_static.py::TestGetattrStatic::test_custom_object_dict
+ tests/test_utils.py::test_safe_name_samples
+ )
+ ;;
+ esac
+
+ epytest
+}
diff --git a/dev-python/starlette/Manifest b/dev-python/starlette/Manifest
index 1c0a3afa328c..4960f00bb2ac 100644
--- a/dev-python/starlette/Manifest
+++ b/dev-python/starlette/Manifest
@@ -1 +1,2 @@
DIST starlette-0.37.2.gh.tar.gz 2846433 BLAKE2B 489fe0d3148f8f006d32d3e52e82cc2c07d9b1a8e3a3cadabe2aa2eb9dd7e00b35e2093dc1de0cb4a6a4606395ed4d19b26778686216a7f8b55a15e61701c9da SHA512 27240c706553e610da05cfc92f818c61e97a891ea7c960fef925a122100a61931cbca973a0995aa1e79d192cda2250139f471929a3f4a7b0f4600d00b6287744
+DIST starlette-0.38.0.gh.tar.gz 2847354 BLAKE2B edcaa8d360f8316fc91f8e32efe778c74bad491c044e2cf5577878a27b840303b34a8f0aa0cc518165a54f28049fb9ed27af4f7e260dc6fc4fbf1f61897237e6 SHA512 89b79f8e3daf1567bc69a2f1f6710a0e981a6633cd462eaa1e014e514f4dbdc98fcb592a3750a1055f08bad28908fc763267e7902479553513e96e2db566b63f
diff --git a/dev-python/starlette/files/starlette-0.38.0-py313.patch b/dev-python/starlette/files/starlette-0.38.0-py313.patch
new file mode 100644
index 000000000000..c63b13444847
--- /dev/null
+++ b/dev-python/starlette/files/starlette-0.38.0-py313.patch
@@ -0,0 +1,35 @@
+From 70ade1b6a4987cb92126b5eec534266f4499f2c0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Sun, 21 Jul 2024 14:14:31 +0200
+Subject: [PATCH] Fix `routing.get_name()` not to assume all routines have
+ `__name__`
+
+Fix `routing.get_name()` to use the `__name__` attribute only if it is
+actually present, rather than assuming that all routine and class types
+have it, and use the fallback to class name otherwise. This is
+necessary for `functools.partial()` that's not guaranteed to have
+a `__name__`, and in fact does not have one starting with Python
+3.13.0b3. Given that the `__name__` used to be `partial` before, this
+change effectively preserves the old behavior for `partial`s across all
+Python implementations.
+
+Fixes #2638
+---
+ starlette/routing.py | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/starlette/routing.py b/starlette/routing.py
+index 75a5ec3f3..481b13f5d 100644
+--- a/starlette/routing.py
++++ b/starlette/routing.py
+@@ -99,9 +99,7 @@ async def app(scope: Scope, receive: Receive, send: Send) -> None:
+
+
+ def get_name(endpoint: typing.Callable[..., typing.Any]) -> str:
+- if inspect.isroutine(endpoint) or inspect.isclass(endpoint):
+- return endpoint.__name__
+- return endpoint.__class__.__name__
++ return getattr(endpoint, "__name__", endpoint.__class__.__name__)
+
+
+ def replace_params(
diff --git a/dev-python/starlette/starlette-0.38.0.ebuild b/dev-python/starlette/starlette-0.38.0.ebuild
new file mode 100644
index 000000000000..76c2c248c8bc
--- /dev/null
+++ b/dev-python/starlette/starlette-0.38.0.ebuild
@@ -0,0 +1,55 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=hatchling
+PYTHON_COMPAT=( python3_{8,9,10,11,12} pypy3 )
+
+inherit distutils-r1
+
+MY_P=${P/_p/.post}
+DESCRIPTION="The little ASGI framework that shines"
+HOMEPAGE="
+ https://www.starlette.io/
+ https://github.com/encode/starlette/
+ https://pypi.org/project/starlette/
+"
+# no docs or tests in sdist, as of 0.27.0
+SRC_URI="
+ https://github.com/encode/starlette/archive/${PV/_p/.post}.tar.gz
+ -> ${MY_P}.gh.tar.gz
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+
+RDEPEND="
+ <dev-python/anyio-5[${PYTHON_USEDEP}]
+ >=dev-python/anyio-3.4.0[${PYTHON_USEDEP}]
+ >=dev-python/httpx-0.22.0[${PYTHON_USEDEP}]
+ dev-python/itsdangerous[${PYTHON_USEDEP}]
+ dev-python/jinja[${PYTHON_USEDEP}]
+ >=dev-python/python-multipart-0.0.7[${PYTHON_USEDEP}]
+ >=dev-python/pytest-8[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ test? (
+ dev-python/trio[${PYTHON_USEDEP}]
+ )
+"
+
+PATCHES=(
+ # https://github.com/encode/starlette/pull/2648
+ "${FILESDIR}/${P}-py313.patch"
+)
+
+EPYTEST_IGNORE=(
+ # Unpackaged 'databases' dependency
+ tests/test_database.py
+)
+
+distutils_enable_tests pytest