mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-11-07 04:50:59 +00:00
Merge branch 'main' into nogil
This commit is contained in:
commit
80191651eb
8 changed files with 34 additions and 23 deletions
14
.github/workflows/test.yml
vendored
14
.github/workflows/test.yml
vendored
|
|
@ -9,11 +9,9 @@ jobs:
|
||||||
test:
|
test:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: ["ubuntu-latest", "windows-latest", "macos-latest"]
|
os: ["ubuntu-latest", "windows-latest", "windows-11-arm", "macos-latest"]
|
||||||
py: ["3.14", "3.14t", "3.13", "3.13t", "3.12", "3.11", "3.10", "3.9"]
|
py: ["3.14", "3.14t", "3.13", "3.12", "3.11", "3.10"]
|
||||||
exclude:
|
exclude:
|
||||||
- os: windows-11-arm
|
|
||||||
py: "3.9"
|
|
||||||
- os: windows-11-arm
|
- os: windows-11-arm
|
||||||
py: "3.10"
|
py: "3.10"
|
||||||
|
|
||||||
|
|
@ -22,10 +20,10 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.py }}
|
python-version: ${{ matrix.py }}
|
||||||
allow-prereleases: true
|
allow-prereleases: true
|
||||||
|
|
@ -34,7 +32,6 @@ jobs:
|
||||||
- name: Prepare
|
- name: Prepare
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
python -m pip install -U pip
|
|
||||||
python -m pip install -r requirements.txt pytest
|
python -m pip install -r requirements.txt pytest
|
||||||
|
|
||||||
- name: Install pytest-run-parallel under free-threading
|
- name: Install pytest-run-parallel under free-threading
|
||||||
|
|
@ -75,8 +72,7 @@ jobs:
|
||||||
- name: build packages
|
- name: build packages
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
pip install build
|
python -m build -nv
|
||||||
python -m build
|
|
||||||
|
|
||||||
- name: upload packages
|
- name: upload packages
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
|
|
|
||||||
7
.github/workflows/wheel.yml
vendored
7
.github/workflows/wheel.yml
vendored
|
|
@ -17,8 +17,8 @@ jobs:
|
||||||
name: Build wheels on ${{ matrix.os }}
|
name: Build wheels on ${{ matrix.os }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: "3.x"
|
python-version: "3.x"
|
||||||
cache: "pip"
|
cache: "pip"
|
||||||
|
|
@ -33,8 +33,7 @@ jobs:
|
||||||
env:
|
env:
|
||||||
CIBW_TEST_REQUIRES: "pytest"
|
CIBW_TEST_REQUIRES: "pytest"
|
||||||
CIBW_TEST_COMMAND: "pytest {package}/test"
|
CIBW_TEST_COMMAND: "pytest {package}/test"
|
||||||
CIBW_SKIP: "pp* cp38-* cp39-win_arm64 cp310-win_arm64"
|
CIBW_SKIP: "pp* cp38-* cp39-* cp310-win_arm64"
|
||||||
CIBW_ENABLE: cpython-freethreading
|
|
||||||
|
|
||||||
- name: Build sdist
|
- name: Build sdist
|
||||||
if: runner.os == 'Linux' && runner.arch == 'X64'
|
if: runner.os == 'Linux' && runner.arch == 'X64'
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
include setup.py
|
include setup.py
|
||||||
include COPYING
|
include COPYING
|
||||||
include README.md
|
include README.md
|
||||||
recursive-include msgpack *.h *.c *.pyx *.cpp
|
recursive-include msgpack *.h *.c *.pyx
|
||||||
recursive-include test *.py
|
recursive-include test *.py
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
# coding: utf-8
|
#cython: embedsignature=True, c_string_encoding=ascii, language_level=3
|
||||||
# cython: embedsignature=True, c_string_encoding=ascii, language_level=3, freethreading_compatible=True
|
#cython: freethreading_compatible = True
|
||||||
|
import cython
|
||||||
from cpython.datetime cimport import_datetime, datetime_new
|
from cpython.datetime cimport import_datetime, datetime_new
|
||||||
import_datetime()
|
import_datetime()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
# coding: utf-8
|
|
||||||
# cython: freethreading_compatible = True
|
|
||||||
from cpython cimport *
|
from cpython cimport *
|
||||||
from cpython.bytearray cimport PyByteArray_Check, PyByteArray_CheckExact
|
from cpython.bytearray cimport PyByteArray_Check, PyByteArray_CheckExact
|
||||||
from cpython.datetime cimport (
|
from cpython.datetime cimport (
|
||||||
|
|
@ -129,6 +127,7 @@ cdef class Packer:
|
||||||
if self.exports > 0:
|
if self.exports > 0:
|
||||||
raise BufferError("Existing exports of data: Packer cannot be changed")
|
raise BufferError("Existing exports of data: Packer cannot be changed")
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def __init__(self, *, default=None,
|
def __init__(self, *, default=None,
|
||||||
bint use_single_float=False, bint autoreset=True, bint use_bin_type=True,
|
bint use_single_float=False, bint autoreset=True, bint use_bin_type=True,
|
||||||
bint strict_types=False, bint datetime=False, unicode_errors=None,
|
bint strict_types=False, bint datetime=False, unicode_errors=None,
|
||||||
|
|
@ -269,6 +268,7 @@ cdef class Packer:
|
||||||
return ret
|
return ret
|
||||||
return self._pack_inner(o, 0, nest_limit)
|
return self._pack_inner(o, 0, nest_limit)
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def pack(self, object obj):
|
def pack(self, object obj):
|
||||||
cdef int ret
|
cdef int ret
|
||||||
self._check_exports()
|
self._check_exports()
|
||||||
|
|
@ -284,6 +284,7 @@ cdef class Packer:
|
||||||
self.pk.length = 0
|
self.pk.length = 0
|
||||||
return buf
|
return buf
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def pack_ext_type(self, typecode, data):
|
def pack_ext_type(self, typecode, data):
|
||||||
self._check_exports()
|
self._check_exports()
|
||||||
if len(data) > ITEM_LIMIT:
|
if len(data) > ITEM_LIMIT:
|
||||||
|
|
@ -291,6 +292,7 @@ cdef class Packer:
|
||||||
msgpack_pack_ext(&self.pk, typecode, len(data))
|
msgpack_pack_ext(&self.pk, typecode, len(data))
|
||||||
msgpack_pack_raw_body(&self.pk, data, len(data))
|
msgpack_pack_raw_body(&self.pk, data, len(data))
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def pack_array_header(self, long long size):
|
def pack_array_header(self, long long size):
|
||||||
self._check_exports()
|
self._check_exports()
|
||||||
if size > ITEM_LIMIT:
|
if size > ITEM_LIMIT:
|
||||||
|
|
@ -301,6 +303,7 @@ cdef class Packer:
|
||||||
self.pk.length = 0
|
self.pk.length = 0
|
||||||
return buf
|
return buf
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def pack_map_header(self, long long size):
|
def pack_map_header(self, long long size):
|
||||||
self._check_exports()
|
self._check_exports()
|
||||||
if size > ITEM_LIMIT:
|
if size > ITEM_LIMIT:
|
||||||
|
|
@ -311,6 +314,7 @@ cdef class Packer:
|
||||||
self.pk.length = 0
|
self.pk.length = 0
|
||||||
return buf
|
return buf
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def pack_map_pairs(self, object pairs):
|
def pack_map_pairs(self, object pairs):
|
||||||
"""
|
"""
|
||||||
Pack *pairs* as msgpack map type.
|
Pack *pairs* as msgpack map type.
|
||||||
|
|
@ -331,6 +335,7 @@ cdef class Packer:
|
||||||
self.pk.length = 0
|
self.pk.length = 0
|
||||||
return buf
|
return buf
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def reset(self):
|
def reset(self):
|
||||||
"""Reset internal buffer.
|
"""Reset internal buffer.
|
||||||
|
|
||||||
|
|
@ -339,6 +344,7 @@ cdef class Packer:
|
||||||
self._check_exports()
|
self._check_exports()
|
||||||
self.pk.length = 0
|
self.pk.length = 0
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def bytes(self):
|
def bytes(self):
|
||||||
"""Return internal buffer contents as bytes object"""
|
"""Return internal buffer contents as bytes object"""
|
||||||
return PyBytes_FromStringAndSize(self.pk.buf, self.pk.length)
|
return PyBytes_FromStringAndSize(self.pk.buf, self.pk.length)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
# coding: utf-8
|
|
||||||
# cython: freethreading_compatible = True
|
|
||||||
from cpython cimport *
|
from cpython cimport *
|
||||||
cdef extern from "Python.h":
|
cdef extern from "Python.h":
|
||||||
ctypedef struct PyObject
|
ctypedef struct PyObject
|
||||||
|
|
@ -324,6 +322,7 @@ cdef class Unpacker:
|
||||||
PyMem_Free(self.buf)
|
PyMem_Free(self.buf)
|
||||||
self.buf = NULL
|
self.buf = NULL
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def __init__(self, file_like=None, *, Py_ssize_t read_size=0,
|
def __init__(self, file_like=None, *, Py_ssize_t read_size=0,
|
||||||
bint use_list=True, bint raw=False, int timestamp=0, bint strict_map_key=True,
|
bint use_list=True, bint raw=False, int timestamp=0, bint strict_map_key=True,
|
||||||
object object_hook=None, object object_pairs_hook=None, object list_hook=None,
|
object object_hook=None, object object_pairs_hook=None, object list_hook=None,
|
||||||
|
|
@ -384,6 +383,7 @@ cdef class Unpacker:
|
||||||
max_str_len, max_bin_len, max_array_len,
|
max_str_len, max_bin_len, max_array_len,
|
||||||
max_map_len, max_ext_len)
|
max_map_len, max_ext_len)
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def feed(self, object next_bytes):
|
def feed(self, object next_bytes):
|
||||||
"""Append `next_bytes` to internal buffer."""
|
"""Append `next_bytes` to internal buffer."""
|
||||||
cdef Py_buffer pybuff
|
cdef Py_buffer pybuff
|
||||||
|
|
@ -484,6 +484,7 @@ cdef class Unpacker:
|
||||||
else:
|
else:
|
||||||
raise ValueError("Unpack failed: error = %d" % (ret,))
|
raise ValueError("Unpack failed: error = %d" % (ret,))
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def read_bytes(self, Py_ssize_t nbytes):
|
def read_bytes(self, Py_ssize_t nbytes):
|
||||||
"""Read a specified number of raw bytes from the stream"""
|
"""Read a specified number of raw bytes from the stream"""
|
||||||
cdef Py_ssize_t nread
|
cdef Py_ssize_t nread
|
||||||
|
|
@ -496,6 +497,7 @@ cdef class Unpacker:
|
||||||
self.stream_offset += nread
|
self.stream_offset += nread
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def unpack(self):
|
def unpack(self):
|
||||||
"""Unpack one object
|
"""Unpack one object
|
||||||
|
|
||||||
|
|
@ -503,6 +505,7 @@ cdef class Unpacker:
|
||||||
"""
|
"""
|
||||||
return self._unpack(unpack_construct)
|
return self._unpack(unpack_construct)
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def skip(self):
|
def skip(self):
|
||||||
"""Read and ignore one object, returning None
|
"""Read and ignore one object, returning None
|
||||||
|
|
||||||
|
|
@ -510,6 +513,7 @@ cdef class Unpacker:
|
||||||
"""
|
"""
|
||||||
return self._unpack(unpack_skip)
|
return self._unpack(unpack_skip)
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def read_array_header(self):
|
def read_array_header(self):
|
||||||
"""assuming the next object is an array, return its size n, such that
|
"""assuming the next object is an array, return its size n, such that
|
||||||
the next n unpack() calls will iterate over its contents.
|
the next n unpack() calls will iterate over its contents.
|
||||||
|
|
@ -518,6 +522,7 @@ cdef class Unpacker:
|
||||||
"""
|
"""
|
||||||
return self._unpack(read_array_header)
|
return self._unpack(read_array_header)
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def read_map_header(self):
|
def read_map_header(self):
|
||||||
"""assuming the next object is a map, return its size n, such that the
|
"""assuming the next object is a map, return its size n, such that the
|
||||||
next n * 2 unpack() calls will iterate over its key-value pairs.
|
next n * 2 unpack() calls will iterate over its key-value pairs.
|
||||||
|
|
@ -526,6 +531,7 @@ cdef class Unpacker:
|
||||||
"""
|
"""
|
||||||
return self._unpack(read_map_header)
|
return self._unpack(read_map_header)
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def tell(self):
|
def tell(self):
|
||||||
"""Returns the current position of the Unpacker in bytes, i.e., the
|
"""Returns the current position of the Unpacker in bytes, i.e., the
|
||||||
number of bytes that were read from the input, also the starting
|
number of bytes that were read from the input, also the starting
|
||||||
|
|
@ -536,6 +542,7 @@ cdef class Unpacker:
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
@cython.critical_section
|
||||||
def __next__(self):
|
def __next__(self):
|
||||||
return self._unpack(unpack_construct, 1)
|
return self._unpack(unpack_construct, 1)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["setuptools >= 80.9.0"]
|
requires = ["setuptools >= 78.1.1"]
|
||||||
build-backend = "setuptools.build_meta"
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
|
|
@ -10,7 +10,7 @@ authors = [{name="Inada Naoki", email="songofacandy@gmail.com"}]
|
||||||
description = "MessagePack serializer"
|
description = "MessagePack serializer"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
keywords = ["msgpack", "messagepack", "serializer", "serialization", "binary"]
|
keywords = ["msgpack", "messagepack", "serializer", "serialization", "binary"]
|
||||||
requires-python = ">=3.9"
|
requires-python = ">=3.10"
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Development Status :: 5 - Production/Stable",
|
"Development Status :: 5 - Production/Stable",
|
||||||
"Operating System :: OS Independent",
|
"Operating System :: OS Independent",
|
||||||
|
|
@ -36,7 +36,7 @@ version = {attr = "msgpack.__version__"}
|
||||||
|
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
line-length = 100
|
line-length = 100
|
||||||
target-version = "py39"
|
target-version = "py310"
|
||||||
lint.select = [
|
lint.select = [
|
||||||
"E", # pycodestyle
|
"E", # pycodestyle
|
||||||
"F", # Pyflakes
|
"F", # Pyflakes
|
||||||
|
|
|
||||||
|
|
@ -1 +1,3 @@
|
||||||
Cython==3.1.4
|
Cython==3.1.4
|
||||||
|
setuptools==78.1.1
|
||||||
|
build
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue