Compare commits

...

4 commits
v1.1.2 ... main

Author SHA1 Message Date
Inada Naoki
c1ecd23dbf
drop Python 3.9 (#656) 2025-10-09 18:33:23 +09:00
Inada Naoki
af45640970
cython: freethreading_compatible (#654)
```
$ v3/bin/python -VV
Python 3.14.0 free-threading build (main, Oct  7 2025, 15:35:12) [Clang 20.1.4 ]

$ v3/bin/python -c 'import sys,msgpack; print(sys._is_gil_enabled())'
False
```
2025-10-09 15:53:08 +09:00
Inada Naoki
c2546eabc4
update setuptools requirements to >=78.1.1 (#653)
https://github.com/advisories/GHSA-5rjg-fvgr-3xxf
2025-10-09 15:28:01 +09:00
Inada Naoki
ef4f83df16
relax setuptools version (#652) 2025-10-09 13:00:46 +09:00
8 changed files with 32 additions and 20 deletions

View file

@ -10,10 +10,8 @@ jobs:
strategy:
matrix:
os: ["ubuntu-latest", "windows-latest", "windows-11-arm", "macos-latest"]
py: ["3.14-dev", "3.13", "3.12", "3.11", "3.10", "3.9"]
py: ["3.14", "3.14t", "3.13", "3.12", "3.11", "3.10"]
exclude:
- os: windows-11-arm
py: "3.9"
- os: windows-11-arm
py: "3.10"
runs-on: ${{ matrix.os }}
@ -21,10 +19,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.py }}
allow-prereleases: true
@ -33,7 +31,6 @@ jobs:
- name: Prepare
shell: bash
run: |
python -m pip install -U pip
python -m pip install -r requirements.txt pytest
- name: Build
@ -55,8 +52,7 @@ jobs:
- name: build packages
shell: bash
run: |
pip install build
python -m build
python -m build -nv
- name: upload packages
uses: actions/upload-artifact@v4

View file

@ -17,8 +17,8 @@ jobs:
name: Build wheels on ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "3.x"
cache: "pip"
@ -33,7 +33,7 @@ jobs:
env:
CIBW_TEST_REQUIRES: "pytest"
CIBW_TEST_COMMAND: "pytest {package}/test"
CIBW_SKIP: "pp* cp38-* cp39-win_arm64 cp310-win_arm64"
CIBW_SKIP: "pp* cp38-* cp39-* cp310-win_arm64"
- name: Build sdist
if: runner.os == 'Linux' && runner.arch == 'X64'

View file

@ -1,5 +1,5 @@
include setup.py
include COPYING
include README.md
recursive-include msgpack *.h *.c *.pyx *.cpp
recursive-include msgpack *.h *.c *.pyx
recursive-include test *.py

View file

@ -1,5 +1,6 @@
# coding: utf-8
#cython: embedsignature=True, c_string_encoding=ascii, language_level=3
#cython: freethreading_compatible = True
import cython
from cpython.datetime cimport import_datetime, datetime_new
import_datetime()

View file

@ -1,5 +1,3 @@
# coding: utf-8
from cpython cimport *
from cpython.bytearray cimport PyByteArray_Check, PyByteArray_CheckExact
from cpython.datetime cimport (
@ -129,6 +127,7 @@ cdef class Packer:
if self.exports > 0:
raise BufferError("Existing exports of data: Packer cannot be changed")
@cython.critical_section
def __init__(self, *, default=None,
bint use_single_float=False, bint autoreset=True, bint use_bin_type=True,
bint strict_types=False, bint datetime=False, unicode_errors=None,
@ -269,6 +268,7 @@ cdef class Packer:
return ret
return self._pack_inner(o, 0, nest_limit)
@cython.critical_section
def pack(self, object obj):
cdef int ret
self._check_exports()
@ -284,6 +284,7 @@ cdef class Packer:
self.pk.length = 0
return buf
@cython.critical_section
def pack_ext_type(self, typecode, data):
self._check_exports()
if len(data) > ITEM_LIMIT:
@ -291,6 +292,7 @@ cdef class Packer:
msgpack_pack_ext(&self.pk, typecode, len(data))
msgpack_pack_raw_body(&self.pk, data, len(data))
@cython.critical_section
def pack_array_header(self, long long size):
self._check_exports()
if size > ITEM_LIMIT:
@ -301,6 +303,7 @@ cdef class Packer:
self.pk.length = 0
return buf
@cython.critical_section
def pack_map_header(self, long long size):
self._check_exports()
if size > ITEM_LIMIT:
@ -311,6 +314,7 @@ cdef class Packer:
self.pk.length = 0
return buf
@cython.critical_section
def pack_map_pairs(self, object pairs):
"""
Pack *pairs* as msgpack map type.
@ -331,6 +335,7 @@ cdef class Packer:
self.pk.length = 0
return buf
@cython.critical_section
def reset(self):
"""Reset internal buffer.
@ -339,6 +344,7 @@ cdef class Packer:
self._check_exports()
self.pk.length = 0
@cython.critical_section
def bytes(self):
"""Return internal buffer contents as bytes object"""
return PyBytes_FromStringAndSize(self.pk.buf, self.pk.length)

View file

@ -1,5 +1,3 @@
# coding: utf-8
from cpython cimport *
cdef extern from "Python.h":
ctypedef struct PyObject
@ -324,6 +322,7 @@ cdef class Unpacker:
PyMem_Free(self.buf)
self.buf = NULL
@cython.critical_section
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,
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_map_len, max_ext_len)
@cython.critical_section
def feed(self, object next_bytes):
"""Append `next_bytes` to internal buffer."""
cdef Py_buffer pybuff
@ -484,6 +484,7 @@ cdef class Unpacker:
else:
raise ValueError("Unpack failed: error = %d" % (ret,))
@cython.critical_section
def read_bytes(self, Py_ssize_t nbytes):
"""Read a specified number of raw bytes from the stream"""
cdef Py_ssize_t nread
@ -496,6 +497,7 @@ cdef class Unpacker:
self.stream_offset += nread
return ret
@cython.critical_section
def unpack(self):
"""Unpack one object
@ -503,6 +505,7 @@ cdef class Unpacker:
"""
return self._unpack(unpack_construct)
@cython.critical_section
def skip(self):
"""Read and ignore one object, returning None
@ -510,6 +513,7 @@ cdef class Unpacker:
"""
return self._unpack(unpack_skip)
@cython.critical_section
def read_array_header(self):
"""assuming the next object is an array, return its size n, such that
the next n unpack() calls will iterate over its contents.
@ -518,6 +522,7 @@ cdef class Unpacker:
"""
return self._unpack(read_array_header)
@cython.critical_section
def read_map_header(self):
"""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.
@ -526,6 +531,7 @@ cdef class Unpacker:
"""
return self._unpack(read_map_header)
@cython.critical_section
def tell(self):
"""Returns the current position of the Unpacker in bytes, i.e., the
number of bytes that were read from the input, also the starting
@ -536,6 +542,7 @@ cdef class Unpacker:
def __iter__(self):
return self
@cython.critical_section
def __next__(self):
return self._unpack(unpack_construct, 1)

View file

@ -1,5 +1,5 @@
[build-system]
requires = ["setuptools >= 80.9.0"]
requires = ["setuptools >= 78.1.1"]
build-backend = "setuptools.build_meta"
[project]
@ -10,7 +10,7 @@ authors = [{name="Inada Naoki", email="songofacandy@gmail.com"}]
description = "MessagePack serializer"
readme = "README.md"
keywords = ["msgpack", "messagepack", "serializer", "serialization", "binary"]
requires-python = ">=3.9"
requires-python = ">=3.10"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Operating System :: OS Independent",
@ -36,7 +36,7 @@ version = {attr = "msgpack.__version__"}
[tool.ruff]
line-length = 100
target-version = "py39"
target-version = "py310"
lint.select = [
"E", # pycodestyle
"F", # Pyflakes

View file

@ -1 +1,3 @@
Cython==3.1.4
setuptools==78.1.1
build