Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
python-multidict
Manage
Activity
Members
Labels
Plan
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Debian Python Team
packages
python-multidict
Commits
2d54ca0b
Commit
2d54ca0b
authored
1 year ago
by
Matthias Klose
Browse files
Options
Downloads
Patches
Plain Diff
* Pull upstream patches for Python 3.12 compatibility. Closes: #1055717.
parent
40944e5c
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
debian/changelog
+7
-0
7 additions, 0 deletions
debian/changelog
debian/patches/864.diff
+293
-0
293 additions, 0 deletions
debian/patches/864.diff
debian/patches/877.diff
+20
-0
20 additions, 0 deletions
debian/patches/877.diff
debian/patches/series
+2
-0
2 additions, 0 deletions
debian/patches/series
with
322 additions
and
0 deletions
debian/changelog
+
7
−
0
View file @
2d54ca0b
python-multidict (6.0.4-1.1) unstable; urgency=medium
* Non-maintainer upload.
* Pull upstream patches for Python 3.12 compatibility. Closes: #1055717.
-- Matthias Klose <doko@debian.org> Wed, 03 Jan 2024 12:13:23 +0100
python-multidict (6.0.4-1) unstable; urgency=medium
python-multidict (6.0.4-1) unstable; urgency=medium
* New upstream release
* New upstream release
...
...
This diff is collapsed.
Click to expand it.
debian/patches/864.diff
0 → 100644
+
293
−
0
View file @
2d54ca0b
diff --git a/CHANGES/864.bugfix.rst b/CHANGES/864.bugfix.rst
new file mode 100644
index 00000000..2cbd4b3e
--- /dev/null
+++ b/CHANGES/864.bugfix.rst
@@ -0,0 +1,2 @@
+Upgraded the C-API macros that have been deprecated in
+Python 3.9 and later removed in 3.13 -- :user:`webknjaz`.
diff --git a/multidict/_multidict.c b/multidict/_multidict.c
index 1ba79df3..bcb37137 100644
--- a/multidict/_multidict.c
+++ b/multidict/_multidict.c
@@ -709,13 +709,21 @@
static inline void
multidict_tp_dealloc(MultiDictObject *self)
{
PyObject_GC_UnTrack(self);
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 9
+ Py_TRASHCAN_BEGIN(self, multidict_tp_dealloc)
+#else
Py_TRASHCAN_SAFE_BEGIN(self);
+#endif
if (self->weaklist != NULL) {
PyObject_ClearWeakRefs((PyObject *)self);
};
pair_list_dealloc(&self->pairs);
Py_TYPE(self)->tp_free((PyObject *)self);
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 9
+ Py_TRASHCAN_END // there should be no code after this
+#else
Py_TRASHCAN_SAFE_END(self);
+#endif
}
static inline int
@@ -777,9 +785,12 @@
multidict_add(MultiDictObject *self, PyObject *const *args,
return NULL;
}
#else
- static _PyArg_Parser _parser = {NULL, _keywords, "add", 0};
+ static _PyArg_Parser _parser = {
+ .keywords = _keywords,
+ .fname = "add",
+ .kwtuple = NULL,
+ };
PyObject *argsbuf[2];
-
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames,
&_parser, 2, 2, 0, argsbuf);
if (!args) {
@@ -1655,6 +1666,9 @@
getversion(PyObject *self, PyObject *md)
static inline void
module_free(void *m)
{
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 9
+ Py_CLEAR(multidict_str_lower);
+#endif
Py_CLEAR(collections_abc_mapping);
Py_CLEAR(collections_abc_mut_mapping);
Py_CLEAR(collections_abc_mut_multi_mapping);
@@ -1683,6 +1697,13 @@
static PyModuleDef multidict_module = {
PyMODINIT_FUNC
PyInit__multidict()
{
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 9
+ multidict_str_lower = PyUnicode_InternFromString("lower");
+ if (multidict_str_lower == NULL) {
+ goto fail;
+ }
+#endif
+
PyObject *module = NULL,
*reg_func_call_result = NULL;
@@ -1813,6 +1834,9 @@
PyInit__multidict()
return module;
fail:
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 9
+ Py_XDECREF(multidict_str_lower);
+#endif
Py_XDECREF(collections_abc_mapping);
Py_XDECREF(collections_abc_mut_mapping);
Py_XDECREF(collections_abc_mut_multi_mapping);
diff --git a/multidict/_multilib/defs.h b/multidict/_multilib/defs.h
index c7027c81..55c21074 100644
--- a/multidict/_multilib/defs.h
+++ b/multidict/_multilib/defs.h
@@ -5,7 +5,11 @@
extern "C" {
#endif
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 9
+static PyObject *multidict_str_lower = NULL;
+#else
_Py_IDENTIFIER(lower);
+#endif
/* We link this module statically for convenience. If compiled as a shared
library instead, some compilers don't allow addresses of Python objects
diff --git a/multidict/_multilib/istr.h b/multidict/_multilib/istr.h
index 2688f489..61dc61ae 100644
--- a/multidict/_multilib/istr.h
+++ b/multidict/_multilib/istr.h
@@ -43,7 +43,11 @@
istr_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
if (!ret) {
goto fail;
}
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 9
+ s = PyObject_CallMethodNoArgs(ret, multidict_str_lower);
+#else
s =_PyObject_CallMethodId(ret, &PyId_lower, NULL);
+#endif
if (!s) {
goto fail;
}
diff --git a/multidict/_multilib/pair_list.h b/multidict/_multilib/pair_list.h
index 7eafd215..15291d46 100644
--- a/multidict/_multilib/pair_list.h
+++ b/multidict/_multilib/pair_list.h
@@ -8,8 +8,7 @@
extern "C" {
#include <string.h>
#include <stddef.h>
#include <stdint.h>
-
-typedef PyObject * (*calc_identity_func)(PyObject *key);
+#include <stdbool.h>
typedef struct pair {
PyObject *identity; // 8
@@ -38,12 +37,12 @@
HTTP headers into the buffer without allocating an extra memory block.
#define EMBEDDED_CAPACITY 29
#endif
-typedef struct pair_list { // 40
- Py_ssize_t capacity; // 8
- Py_ssize_t size; // 8
- uint64_t version; // 8
- calc_identity_func calc_identity; // 8
- pair_t *pairs; // 8
+typedef struct pair_list {
+ Py_ssize_t capacity;
+ Py_ssize_t size;
+ uint64_t version;
+ bool calc_ci_indentity;
+ pair_t *pairs;
pair_t buffer[EMBEDDED_CAPACITY];
} pair_list_t;
@@ -111,7 +110,11 @@
ci_key_to_str(PyObject *key)
return ret;
}
if (PyUnicode_Check(key)) {
+#if PY_VERSION_HEX < 0x03090000
return _PyObject_CallMethodId(key, &PyId_lower, NULL);
+#else
+ return PyObject_CallMethodNoArgs(key, multidict_str_lower);
+#endif
}
PyErr_SetString(PyExc_TypeError,
"CIMultiDict keys should be either str "
@@ -199,30 +202,38 @@
pair_list_shrink(pair_list_t *list)
static inline int
-_pair_list_init(pair_list_t *list, calc_identity_func calc_identity)
+_pair_list_init(pair_list_t *list, bool calc_ci_identity)
{
+ list->calc_ci_indentity = calc_ci_identity;
list->pairs = list->buffer;
list->capacity = EMBEDDED_CAPACITY;
list->size = 0;
list->version = NEXT_VERSION();
- list->calc_identity = calc_identity;
return 0;
}
static inline int
pair_list_init(pair_list_t *list)
{
- return _pair_list_init(list, key_to_str);
+ return _pair_list_init(list, /* calc_ci_identity = */ false);
}
static inline int
ci_pair_list_init(pair_list_t *list)
{
- return _pair_list_init(list, ci_key_to_str);
+ return _pair_list_init(list, /* calc_ci_identity = */ true);
}
+static inline PyObject *
+pair_list_calc_identity(pair_list_t *list, PyObject *key)
+{
+ if (list->calc_ci_indentity)
+ return ci_key_to_str(key);
+ return key_to_str(key);
+}
+
static inline void
pair_list_dealloc(pair_list_t *list)
{
@@ -304,7 +315,7 @@
pair_list_add(pair_list_t *list,
PyObject *identity = NULL;
int ret;
- identity = list->calc_identity(key);
+ identity = pair_list_calc_identity(list, key);
if (identity == NULL) {
goto fail;
}
@@ -412,7 +423,7 @@
pair_list_del(pair_list_t *list, PyObject *key)
Py_hash_t hash;
int ret;
- identity = list->calc_identity(key);
+ identity = pair_list_calc_identity(list, key);
if (identity == NULL) {
goto fail;
}
@@ -486,7 +497,7 @@
pair_list_contains(pair_list_t *list, PyObject *key)
PyObject *identity = NULL;
int tmp;
- ident = list->calc_identity(key);
+ ident = pair_list_calc_identity(list, key);
if (ident == NULL) {
goto fail;
}
@@ -528,7 +539,7 @@
pair_list_get_one(pair_list_t *list, PyObject *key)
PyObject *value = NULL;
int tmp;
- ident = list->calc_identity(key);
+ ident = pair_list_calc_identity(list, key);
if (ident == NULL) {
goto fail;
}
@@ -573,7 +584,7 @@
pair_list_get_all(pair_list_t *list, PyObject *key)
PyObject *res = NULL;
int tmp;
- ident = list->calc_identity(key);
+ ident = pair_list_calc_identity(list, key);
if (ident == NULL) {
goto fail;
}
@@ -631,7 +642,7 @@
pair_list_set_default(pair_list_t *list, PyObject *key, PyObject *value)
PyObject *value2 = NULL;
int tmp;
- ident = list->calc_identity(key);
+ ident = pair_list_calc_identity(list, key);
if (ident == NULL) {
goto fail;
}
@@ -680,7 +691,7 @@
pair_list_pop_one(pair_list_t *list, PyObject *key)
int tmp;
PyObject *ident = NULL;
- ident = list->calc_identity(key);
+ ident = pair_list_calc_identity(list, key);
if (ident == NULL) {
goto fail;
}
@@ -730,7 +741,7 @@
pair_list_pop_all(pair_list_t *list, PyObject *key)
PyObject *res = NULL;
PyObject *ident = NULL;
- ident = list->calc_identity(key);
+ ident = pair_list_calc_identity(list, key);
if (ident == NULL) {
goto fail;
}
@@ -826,7 +837,7 @@
pair_list_replace(pair_list_t *list, PyObject * key, PyObject *value)
PyObject *identity = NULL;
Py_hash_t hash;
- identity = list->calc_identity(key);
+ identity = pair_list_calc_identity(list, key);
if (identity == NULL) {
goto fail;
}
@@ -1101,7 +1112,7 @@
pair_list_update_from_seq(pair_list_t *list, PyObject *seq)
Py_INCREF(key);
Py_INCREF(value);
- identity = list->calc_identity(key);
+ identity = pair_list_calc_identity(list, key);
if (identity == NULL) {
goto fail_1;
}
This diff is collapsed.
Click to expand it.
debian/patches/877.diff
0 → 100644
+
20
−
0
View file @
2d54ca0b
diff --git a/CHANGES/877.packaging.rst b/CHANGES/877.packaging.rst
new file mode 100644
index 00000000..93b3bb31
--- /dev/null
+++ b/CHANGES/877.packaging.rst
@@ -0,0 +1,2 @@
+Declared Python 3.12 supported officially in the
+distribution package metadata -- by :user:`hugovk`.
diff --git a/setup.py b/setup.py
index dba780f5..733fa54e 100644
--- a/setup.py
+++ b/setup.py
@@ -66,6 +66,7 @@
def read(f):
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
"Development Status :: 5 - Production/Stable",
],
author="Andrew Svetlov",
This diff is collapsed.
Click to expand it.
debian/patches/series
+
2
−
0
View file @
2d54ca0b
0001-Drop-coverage-options-from-pytest.patch
0001-Drop-coverage-options-from-pytest.patch
864.diff
877.diff
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment