[med-svn] [Git][python-team/packages/python-ciso8601][master] 4 commits: New upstream version 2.3.3
Colin Watson (@cjwatson)
gitlab at salsa.debian.org
Wed Sep 3 01:13:31 BST 2025
Colin Watson pushed to branch master at Debian Python Team / packages / python-ciso8601
Commits:
e7964437 by Colin Watson at 2025-09-03T01:06:26+01:00
New upstream version 2.3.3
- - - - -
593d3a96 by Colin Watson at 2025-09-03T01:08:34+01:00
Update upstream source from tag 'upstream/2.3.3'
Update to upstream version '2.3.3'
with Debian dir 0767cefc340e3016d12c59a57a4845111f6e67ee
- - - - -
d6916895 by Colin Watson at 2025-09-03T01:11:25+01:00
Use pybuild-plugin-pyproject
- - - - -
ec581f0e by Colin Watson at 2025-09-03T01:11:45+01:00
releasing package python-ciso8601 version 2.3.3-1
- - - - -
15 changed files:
- .circleci/config.yml
- .github/workflows/build-wheels.yml
- + .github/workflows/test_and_lint.yml
- CHANGELOG.md
- README.rst
- RELEASING.md
- benchmarking/Dockerfile
- benchmarking/tox.ini
- debian/changelog
- debian/control
- pyproject.toml
- setup.py
- tests/tests.py
- timezone.c
- tox.ini
Changes:
=====================================
.circleci/config.yml
=====================================
@@ -12,17 +12,11 @@ workflows:
matrix:
parameters:
python_version:
- ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
+ ["3.6", "3.7"]
- test_old_pypy:
matrix:
parameters:
python_version: ["2.7"]
- - test_pypy:
- matrix:
- parameters:
- python_version: ["3.7", "3.8", "3.9", "3.10"]
- - lint-rst
- - clang-format
jobs:
# `cimg/python` doesn't support Python 3.4,
@@ -53,7 +47,7 @@ jobs:
docker:
- image: pypy:<<parameters.python_version>>
- test: &tests
+ test:
parameters:
python_version:
type: string
@@ -79,50 +73,3 @@ jobs:
python -m unittest
docker:
- image: cimg/python:<<parameters.python_version>>
-
- test_pypy:
- <<: *tests
- docker:
- - image: pypy:<<parameters.python_version>>
-
- lint-rst:
- working_directory: ~/code
- steps:
- - checkout
- - run:
- name: Install lint tools
- command: |
- python3 -m venv venv
- . venv/bin/activate
- pip install Pygments restructuredtext-lint
- - run:
- name: Lint
- command: |
- . venv/bin/activate
- rst-lint --encoding=utf-8 README.rst
- docker:
- - image: cimg/python:3.13
-
- clang-format:
- working_directory: ~/code
- steps:
- - checkout
- - run:
- name: Install lint tools
- command: |
- sudo apt-get update -y
- sudo apt-get install -y clang-format
- - run:
- name: Lint
- command: |
- SOURCE_FILES=`find ./ -name \*.c -type f -or -name \*.h -type f`
- for SOURCE_FILE in $SOURCE_FILES
- do
- export FORMATTING_ISSUE_COUNT=`clang-format -output-replacements-xml $SOURCE_FILE | grep offset | wc -l`
- if [ "$FORMATTING_ISSUE_COUNT" -gt "0" ]; then
- echo "Source file $SOURCE_FILE contains formatting issues. Please use clang-format tool to resolve found issues."
- exit 1
- fi
- done
- docker:
- - image: cimg/python:3.13
=====================================
.github/workflows/build-wheels.yml
=====================================
@@ -11,7 +11,7 @@ jobs:
sanity_check:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout at v4
+ - uses: actions/checkout at v5
- uses: actions/setup-python at v5
name: Install Python
@@ -85,7 +85,7 @@ jobs:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- - uses: actions/checkout at v4
+ - uses: actions/checkout at v5
- name: Set up QEMU # Needed to build aarch64 wheels
if: runner.os == 'Linux'
@@ -93,10 +93,11 @@ jobs:
with:
platforms: all
- - uses: closeio/cibuildwheel at v2.20.0
+ - uses: closeio/cibuildwheel at v3.1.4
- uses: actions/upload-artifact at v4
with:
+ name: ${{ matrix.os }}-wheels
path: ./wheelhouse/*.whl
build_sdist:
@@ -104,7 +105,7 @@ jobs:
needs: [sanity_check]
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout at v4
+ - uses: actions/checkout at v5
- uses: actions/setup-python at v5
name: Install Python
@@ -119,4 +120,5 @@ jobs:
- uses: actions/upload-artifact at v4
with:
+ name: sdist
path: dist/*.tar.gz
=====================================
.github/workflows/test_and_lint.yml
=====================================
@@ -0,0 +1,84 @@
+name: Test and Lint
+
+on:
+ push:
+ pull_request:
+ branches: [ main ]
+
+jobs:
+
+ test:
+ runs-on: ubuntu-24.04
+ strategy:
+ fail-fast: true
+ matrix:
+ python-version:
+ - '3.8'
+ - '3.9'
+ - '3.10'
+ - '3.11'
+ - '3.12'
+ - '3.13'
+ - '3.14.0-rc.2'
+ - 'pypy-3.7'
+ - 'pypy-3.8'
+ - 'pypy-3.9'
+ - 'pypy-3.10'
+ - 'pypy-3.11'
+ steps:
+ - uses: actions/checkout at v4
+ - uses: actions/setup-python at v5
+ with:
+ python-version: ${{ matrix.python-version }}
+ - name: Install ciso8601
+ run: |
+ python -m venv venv
+ . venv/bin/activate
+ pip install --upgrade build
+ python -m build -s
+ pip install dist/ciso8601-*.tar.gz
+ - name: Install testing dependencies
+ run: |
+ . venv/bin/activate
+ pip install pytz
+ - name: Test
+ run: |
+ . venv/bin/activate
+ python -m unittest
+
+ lint-rst:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout at v4
+ - uses: actions/setup-python at v4
+ with:
+ python-version: '3.13'
+ - name: Install lint tools
+ run: |
+ python3 -m venv venv
+ . venv/bin/activate
+ pip install Pygments restructuredtext-lint
+ - name: Lint
+ run: |
+ . venv/bin/activate
+ rst-lint --encoding=utf-8 README.rst
+
+ clang-format:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout at v4
+ - name: Install lint tools
+ run: |
+ sudo apt-get update -y
+ sudo apt-get install -y clang-format
+ - name: Lint
+ run: |
+ SOURCE_FILES=`find ./ -name \*.c -type f -or -name \*.h -type f`
+ for SOURCE_FILE in $SOURCE_FILES
+ do
+ export FORMATTING_ISSUE_COUNT=`clang-format -output-replacements-xml $SOURCE_FILE | grep offset | wc -l`
+ if [ "$FORMATTING_ISSUE_COUNT" -gt "0" ]; then
+ echo "Source file $SOURCE_FILE contains formatting issues. Please use clang-format tool to resolve found issues."
+ exit 1
+ fi
+ done
=====================================
CHANGELOG.md
=====================================
@@ -2,6 +2,7 @@
- [Unreleased](#unreleased)
- [2.x.x](#2xx)
+ - [Version 2.3.3](#version-233)
- [Version 2.3.2](#version-232)
- [Version 2.3.1](#version-231)
- [Version 2.3.0](#version-230)
@@ -27,6 +28,13 @@
# 2.x.x
+## Version 2.3.3
+
+* Added Python 3.14 support
+* Added PyPy 3.11 support
+* Fixed memory leak in `FixedOffset_fromutc` (#172).
+* Migrated some CI testing to GHA
+
## Version 2.3.2
* Add support for aarch64 wheels. Thank you @bbayles!
=====================================
README.rst
=====================================
@@ -14,7 +14,7 @@ ciso8601
``ciso8601`` converts `ISO 8601`_ or `RFC 3339`_ date time strings into Python datetime objects.
Since it's written as a C module, it is much faster than other Python libraries.
-Tested with cPython 2.7, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13.
+Tested with cPython 2.7, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, 3.14.
.. _ISO 8601: https://en.wikipedia.org/wiki/ISO_8601
.. _RFC 3339: https://tools.ietf.org/html/rfc3339
@@ -81,45 +81,45 @@ Parsing a timestamp with no time zone information (e.g., ``2014-01-09T21:48:00``
.. table::
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- | Module |Python 3.13|Python 3.12|Python 3.11|Python 3.10|Relative slowdown (versus ciso8601, latest Python)|…|Python 3.9|Python 3.8|
- +================================+===========+===========+===========+===========+==================================================+=+==========+==========+
- |ciso8601 |64.8 nsec |62.8 nsec |60.1 nsec |91.7 nsec |N/A |…|86 nsec |92.9 nsec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |backports.datetime_fromisoformat|N/A |N/A |N/A |73.6 nsec |0.8x |…|70 nsec |75.9 nsec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |datetime (builtin) |147 nsec |138 nsec |123 nsec |N/A |2.3x |…|N/A |N/A |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |pendulum |171 nsec |181 nsec |175 nsec |214 nsec |2.6x |…|179 nsec |180 nsec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |udatetime |542 nsec |563 nsec |525 nsec |555 nsec |8.4x |…|551 nsec |553 nsec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |str2date |3.29 usec |3.53 usec |3.52 usec |3.85 usec |50.8x |…|3.72 usec |3.9 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |iso8601utils |N/A |N/A |N/A |N/A |56.9x |…|4.89 usec |4.89 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |iso8601 |5.1 usec |5.4 usec |5.18 usec |5.38 usec |78.8x |…|5.36 usec |5.55 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |isodate |5.76 usec |5.85 usec |5.21 usec |5.91 usec |89.0x |…|5.97 usec |6.07 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |PySO8601 |10 usec |11.5 usec |7.99 usec |10.9 usec |155.0x |…|9.83 usec |9.81 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |aniso8601 |12.1 usec |12.5 usec |11.1 usec |15.1 usec |186.9x |…|15.4 usec |15.6 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |zulu |12.3 usec |13.6 usec |12.6 usec |14.2 usec |189.4x |…|14.5 usec |14.2 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |maya |35.9 usec |N/A |40.6 usec |46.7 usec |554.3x |…|45.4 usec |46.3 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |python-dateutil |36.2 usec |36.9 usec |36.1 usec |44 usec |558.5x |…|46.4 usec |45.2 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |arrow |42.9 usec |43.8 usec |41.2 usec |48.8 usec |662.7x |…|50.7 usec |50.1 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |metomi-isodatetime |828 usec |822 usec |791 usec |1.09 msec |12781.0x |…|1.1 msec |1.11 msec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |moment |1.28 msec |1.32 msec |1.29 msec |1.36 msec |19696.9x |…|1.37 msec |1.34 msec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
-
-ciso8601 takes 64.8 nsec, which is **2.3x faster than datetime (builtin)**, the next fastest Python 3.13 parser in this comparison.
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ | Module |Python 3.14|Python 3.13|Python 3.12|Python 3.11|Relative slowdown (versus ciso8601, latest Python)|…|Python 3.10|Python 3.9|Python 3.8|
+ +================================+===========+===========+===========+===========+==================================================+=+===========+==========+==========+
+ |ciso8601 |26.4 nsec |23.4 nsec |24.5 nsec |25.4 nsec |N/A |…|35.9 nsec |35.6 nsec |37 nsec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |backports.datetime_fromisoformat|N/A |N/A |N/A |N/A |0.8x |…|30.3 nsec |30.7 nsec |32 nsec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |datetime (builtin) |51.5 nsec |48 nsec |54.8 nsec |53.9 nsec |2.0x |…|N/A |N/A |N/A |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |udatetime |269 nsec |277 nsec |277 nsec |280 nsec |10.2x |…|280 nsec |279 nsec |280 nsec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |str2date |1.4 usec |1.42 usec |1.59 usec |1.59 usec |52.9x |…|1.62 usec |1.64 usec |1.76 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |pendulum |1.74 usec |65.2 nsec |64.8 nsec |64.7 nsec |65.8x |…|64.6 nsec |66.4 nsec |86.4 nsec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |iso8601 |2.13 usec |2.2 usec |2.35 usec |2.1 usec |80.6x |…|2.3 usec |2.31 usec |2.47 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |iso8601utils |N/A |N/A |N/A |N/A |61.5x |…|N/A |2.19 usec |2.51 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |isodate |2.36 usec |2.52 usec |2.78 usec |2.18 usec |89.3x |…|2.41 usec |2.4 usec |2.49 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |PySO8601 |3.55 usec |3.79 usec |3.79 usec |3.11 usec |134.6x |…|3.94 usec |3.64 usec |6.79 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |aniso8601 |4.32 usec |4.74 usec |4.95 usec |4.37 usec |163.9x |…|5.53 usec |5.19 usec |5.72 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |zulu |4.71 usec |4.63 usec |5.12 usec |4.54 usec |178.7x |…|5.17 usec |4.93 usec |5.17 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |python-dateutil |10.3 usec |11.4 usec |12.6 usec |11.9 usec |390.4x |…|14.9 usec |15.3 usec |15.8 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |arrow |13.3 usec |13.4 usec |14.7 usec |13.5 usec |503.5x |…|16.7 usec |16.2 usec |17.4 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |maya |13.7 usec |10.9 usec |14.7 usec |12.7 usec |520.0x |…|15.7 usec |14.5 usec |16 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |metomi-isodatetime |335 usec |345 usec |353 usec |359 usec |12687.0x |…|480 usec |468 usec |508 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |moment |487 usec |502 usec |525 usec |503 usec |18471.2x |…|563 usec |559 usec |576 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+
+ciso8601 takes 26.4 nsec, which is **2.0x faster than datetime (builtin)**, the next fastest Python 3.14 parser in this comparison.
.. </include:benchmark_with_no_time_zone.rst>
@@ -129,65 +129,65 @@ Parsing a timestamp with time zone information (e.g., ``2014-01-09T21:48:00-05:3
.. table::
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- | Module |Python 3.13|Python 3.12|Python 3.11|Python 3.10|Relative slowdown (versus ciso8601, latest Python)|…|Python 3.9|Python 3.8|
- +================================+===========+===========+===========+===========+==================================================+=+==========+==========+
- |ciso8601 |73.9 nsec |71 nsec |65.6 nsec |97.5 nsec |N/A |…|92.9 nsec |96.6 nsec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |backports.datetime_fromisoformat|N/A |N/A |N/A |99.2 nsec |1.0x |…|93 nsec |99.4 nsec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |datetime (builtin) |205 nsec |198 nsec |178 nsec |N/A |2.8x |…|N/A |N/A |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |pendulum |251 nsec |259 nsec |251 nsec |262 nsec |3.4x |…|264 nsec |264 nsec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |udatetime |684 nsec |700 nsec |646 nsec |684 nsec |9.3x |…|688 nsec |676 nsec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |str2date |5.95 usec |4.34 usec |4.11 usec |4.58 usec |80.5x |…|4.6 usec |4.82 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |iso8601 |7.68 usec |8.56 usec |7.62 usec |7.99 usec |103.9x |…|7.83 usec |8.16 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |isodate |7.77 usec |8.53 usec |7.54 usec |7.88 usec |105.0x |…|8.12 usec |8.4 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |iso8601utils |N/A |N/A |N/A |N/A |152.2x |…|14.1 usec |14.6 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |zulu |17.8 usec |16.9 usec |15.7 usec |17.3 usec |241.3x |…|17.3 usec |17.6 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |aniso8601 |18 usec |18.7 usec |16.4 usec |21.5 usec |243.1x |…|22.5 usec |22.8 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |PySO8601 |18.3 usec |16.6 usec |14.3 usec |15.8 usec |247.5x |…|16.2 usec |16.4 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |maya |46.2 usec |N/A |41 usec |47.5 usec |625.0x |…|45.2 usec |47 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |python-dateutil |47.1 usec |48.2 usec |47.1 usec |57.3 usec |636.5x |…|60.4 usec |58.9 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |arrow |57.7 usec |53.8 usec |50.8 usec |60.2 usec |780.2x |…|59.4 usec |60.1 usec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |metomi-isodatetime |876 usec |823 usec |795 usec |1.09 msec |11846.4x |…|1.09 msec |1.13 msec |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
- |moment |❌ |❌ |❌ |❌ |2070678.8x |…|❌ |❌ |
- +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+----------+----------+
-
-ciso8601 takes 73.9 nsec, which is **2.8x faster than datetime (builtin)**, the next fastest Python 3.13 parser in this comparison.
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ | Module |Python 3.14|Python 3.13|Python 3.12|Python 3.11|Relative slowdown (versus ciso8601, latest Python)|…|Python 3.10|Python 3.9|Python 3.8|
+ +================================+===========+===========+===========+===========+==================================================+=+===========+==========+==========+
+ |ciso8601 |30.7 nsec |27.8 nsec |27.9 nsec |29.3 nsec |N/A |…|39 nsec |39.4 nsec |40.2 nsec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |backports.datetime_fromisoformat|N/A |N/A |N/A |N/A |1.2x |…|46.6 nsec |48.4 nsec |49.1 nsec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |datetime (builtin) |81.6 nsec |72.7 nsec |77.8 nsec |68.8 nsec |2.7x |…|N/A |N/A |N/A |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |udatetime |344 nsec |321 nsec |334 nsec |332 nsec |11.2x |…|331 nsec |332 nsec |336 nsec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |str2date |1.67 usec |1.73 usec |1.94 usec |1.77 usec |54.2x |…|1.96 usec |1.94 usec |2.08 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |pendulum |2.48 usec |104 nsec |104 nsec |104 nsec |80.7x |…|106 nsec |105 nsec |130 nsec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |iso8601 |3.04 usec |3.24 usec |3.42 usec |3.06 usec |98.7x |…|3.17 usec |3.18 usec |3.52 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |isodate |3.14 usec |3.16 usec |3.39 usec |2.88 usec |102.3x |…|3.1 usec |3.12 usec |3.26 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |iso8601utils |N/A |N/A |N/A |N/A |126.4x |…|N/A |4.98 usec |5.3 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |PySO8601 |5.11 usec |5.23 usec |5.67 usec |4.75 usec |166.3x |…|5.31 usec |5.23 usec |5.72 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |zulu |5.47 usec |5.66 usec |6.08 usec |5.26 usec |177.9x |…|5.85 usec |5.83 usec |5.96 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |aniso8601 |5.96 usec |6.42 usec |7.19 usec |6.18 usec |194.0x |…|7.56 usec |7.26 usec |7.91 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |python-dateutil |13.2 usec |14.6 usec |15.6 usec |15.9 usec |428.8x |…|19.7 usec |20 usec |20.6 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |arrow |15.6 usec |16.3 usec |19.5 usec |16.1 usec |507.7x |…|20 usec |19.3 usec |19.9 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |maya |15.8 usec |12 usec |14.4 usec |12.4 usec |512.7x |…|15 usec |14.7 usec |15.1 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |metomi-isodatetime |329 usec |346 usec |342 usec |335 usec |10692.8x |…|475 usec |482 usec |487 usec |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+ |moment |❌ |❌ |❌ |❌ |2112732.4x |…|❌ |❌ |❌ |
+ +--------------------------------+-----------+-----------+-----------+-----------+--------------------------------------------------+-+-----------+----------+----------+
+
+ciso8601 takes 30.7 nsec, which is **2.7x faster than datetime (builtin)**, the next fastest Python 3.14 parser in this comparison.
.. </include:benchmark_with_time_zone.rst>
.. <include:benchmark_module_versions.rst>
-Tested on Linux 6.11.5-orbstack-00280-g96d99c92a42b using the following modules:
+Tested on Linux 6.14.10-orbstack-00291-g1b252bd3edea using the following modules:
.. code:: python
- aniso8601==9.0.1
+ aniso8601==10.0.1
arrow==1.3.0
- backports.datetime_fromisoformat==2.0.2
- ciso8601==2.3.1
+ backports.datetime_fromisoformat==2.0.3
+ ciso8601==2.3.2
iso8601==2.1.0
iso8601utils==0.1.2
isodate==0.7.2
maya==0.6.1
metomi-isodatetime==1!3.1.0
moment==0.12.1
- pendulum==3.0.0
+ pendulum==3.1.0 (on Python 3.9, 3.10, 3.11, 3.12, 3.13, 3.14), pendulum==3.0.0 (on Python 3.8)
PySO8601==0.2.0
python-dateutil==2.9.0.post0
str2date==0.905
=====================================
RELEASING.md
=====================================
@@ -19,4 +19,14 @@ The document will describe the process of releasing a new version of `ciso8601`
4. In the `Describe this release` field copy-paste the `CHANGELOG.md` notes for this release.
5. Click `Publish Release`
-This will trigger a [GitHub Action](.github/workflows/build-wheels.yml) that listens for new tags that follow our format, builds the wheels for the release, and publishes them to PyPI.
\ No newline at end of file
+There is a [GitHub Action](.github/workflows/build-wheels.yml) that must be dispatched manually, which builds the wheels for the release. The artifacts can then be downloaded locally then [uploaded to pypi](https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/#upload-your-distributions).
+
+The `dist/` folder should look roughly like:
+```
+$ ls dist
+ciso8601-2.3.2-cp310-cp310-macosx_11_0_arm64.whl
+ciso8601-2.3.2-cp310-cp310-macosx_11_0_universal2.whl
+...
+ciso8601-2.3.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
+ciso8601-2.3.2.tar.gz
+```
=====================================
benchmarking/Dockerfile
=====================================
@@ -22,7 +22,8 @@ RUN apt install -y python3.7 python3.7-dev python3.7-venv && \
apt install -y python3.10 python3.10-dev python3.10-venv && \
apt install -y python3.11 python3.11-dev python3.11-venv && \
apt install -y python3.12 python3.12-dev python3.12-venv && \
- apt install -y python3.13 python3.13-dev python3.13-venv
+ apt install -y python3.13 python3.13-dev python3.13-venv && \
+ apt install -y python3.14 python3.14-dev python3.14-venv
# Make Python 3.13 the default `python`
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.13 10
=====================================
benchmarking/tox.ini
=====================================
@@ -1,7 +1,7 @@
[tox]
requires =
tox>=4
-envlist = py313,py312,py311,py310,py39,py38
+envlist = py314,py313,py312,py311,py310,py39,py38
setupdir=..
[testenv]
=====================================
debian/changelog
=====================================
@@ -1,3 +1,11 @@
+python-ciso8601 (2.3.3-1) unstable; urgency=medium
+
+ * Team upload.
+ * New upstream release.
+ * Use pybuild-plugin-pyproject.
+
+ -- Colin Watson <cjwatson at debian.org> Wed, 03 Sep 2025 01:11:26 +0100
+
python-ciso8601 (2.3.2-1) unstable; urgency=medium
* Team upload.
=====================================
debian/control
=====================================
@@ -7,6 +7,7 @@ Priority: optional
Build-Depends:
debhelper-compat (= 13),
dh-sequence-python3,
+ pybuild-plugin-pyproject,
python3-all-dev,
python3-setuptools,
python3-tz <!nocheck>,
=====================================
pyproject.toml
=====================================
@@ -16,10 +16,14 @@ build = [
"cp310-*",
"cp311-*",
"cp312-*",
+ "cp313-*",
+ "cp314-*",
"pp38-*",
"pp39-*",
"pp310-*",
+ "pp311-*",
]
+enable = ["pypy", "pypy-eol"]
[tool.cibuildwheel.linux]
archs = ["x86_64", "aarch64"]
@@ -31,4 +35,4 @@ skip = ["pp*"]
[tool.cibuildwheel.windows]
archs = ["AMD64"]
-skip = ["pp*-win*", "*-win3"]
+skip = ["pp*-win*", "*-win32"]
=====================================
setup.py
=====================================
@@ -31,7 +31,7 @@ if os.environ.get("STRICT_WARNINGS", "0") == "1":
os.environ["_CL_"] = ""
os.environ["_CL_"] += " /WX"
-VERSION = "2.3.2"
+VERSION = "2.3.3"
CISO8601_CACHING_ENABLED = int(os.environ.get('CISO8601_CACHING_ENABLED', '1') == '1')
setup(
@@ -75,6 +75,7 @@ setup(
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
"Topic :: Software Development :: Libraries :: Python Modules",
],
)
=====================================
tests/tests.py
=====================================
@@ -240,7 +240,36 @@ class InvalidTimestampTestCase(unittest.TestCase):
)
def test_invalid_day_for_month(self):
- if platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
+ if platform.python_implementation() == 'CPython' and sys.version_info >= (3, 14):
+ for non_leap_year in (1700, 1800, 1900, 2014):
+ self.assertRaisesRegex(
+ ValueError,
+ "day 29 must be in range 1..28 for month 2 in year {0}".format(non_leap_year),
+ parse_datetime,
+ "{}-02-29".format(non_leap_year),
+ )
+
+ self.assertRaisesRegex(
+ ValueError,
+ r"day 32 must be in range 1..31 for month 1 in year 2014",
+ parse_datetime,
+ "2014-01-32",
+ )
+
+ self.assertRaisesRegex(
+ ValueError,
+ r"day 31 must be in range 1..30 for month 6 in year 2014",
+ parse_datetime,
+ "2014-06-31",
+ )
+
+ self.assertRaisesRegex(
+ ValueError,
+ r"day 0 must be in range 1..30 for month 6 in year 2014",
+ parse_datetime,
+ "2014-06-00",
+ )
+ elif platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
for non_leap_year in (1700, 1800, 1900, 2014):
self.assertRaisesRegex(
ValueError,
@@ -577,7 +606,14 @@ class GithubIssueRegressionTestCase(unittest.TestCase):
)
def test_issue_22(self):
- if platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
+ if platform.python_implementation() == 'CPython' and sys.version_info >= (3, 14):
+ self.assertRaisesRegex(
+ ValueError,
+ r"day 31 must be in range 1..30 for month 11 in year 2016",
+ parse_datetime,
+ "2016-11-31T12:34:34.521059",
+ )
+ elif platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
self.assertRaisesRegex(
ValueError,
r"('day must be in 1..30', 31)",
@@ -601,7 +637,14 @@ class GithubIssueRegressionTestCase(unittest.TestCase):
)
def test_issue_42(self):
- if platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
+ if platform.python_implementation() == 'CPython' and sys.version_info >= (3, 14):
+ self.assertRaisesRegex(
+ ValueError,
+ r"day 0 must be in range 1..28 for month 2 in year 2014",
+ parse_datetime,
+ "20140200",
+ )
+ elif platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
self.assertRaisesRegex(
ValueError,
r"('day must be in 1..28', 0)",
=====================================
timezone.c
=====================================
@@ -81,22 +81,28 @@ FixedOffset_dst(FixedOffset *self, PyObject *dt)
}
static PyObject *
-FixedOffset_fromutc(FixedOffset *self, PyDateTime_DateTime *dt)
+FixedOffset_fromutc(FixedOffset *self, PyObject *dt_obj)
{
- if (!PyDateTime_Check(dt)) {
+ if (!PyDateTime_Check(dt_obj)) {
PyErr_SetString(PyExc_TypeError,
"fromutc: argument must be a datetime");
return NULL;
}
+
+ PyDateTime_DateTime *dt = (PyDateTime_DateTime *)dt_obj;
+
if (!dt->hastzinfo || dt->tzinfo != (PyObject *)self) {
- PyErr_SetString(PyExc_ValueError,
- "fromutc: dt.tzinfo "
- "is not self");
+ PyErr_SetString(PyExc_ValueError, "fromutc: dt.tzinfo is not self");
return NULL;
}
- return PyNumber_Add((PyObject *)dt,
- FixedOffset_utcoffset(self, (PyObject *)self));
+ PyObject *delta = FixedOffset_utcoffset(self, dt_obj);
+ if (!delta)
+ return NULL;
+
+ PyObject *res = PyNumber_Add(dt_obj, delta);
+ Py_DECREF(delta);
+ return res;
}
static PyObject *
=====================================
tox.ini
=====================================
@@ -1,7 +1,7 @@
[tox]
requires =
tox>=4
-envlist = {py313,py312,py311,py310,py39,py38}-caching_{enabled,disabled}
+envlist = {py314,py313,py312,py311,py310,py39,py38}-caching_{enabled,disabled}
[testenv]
package = sdist
View it on GitLab: https://salsa.debian.org/python-team/packages/python-ciso8601/-/compare/719fa5c7954cdc62e130fcda8a2e4a447158b797...ec581f0e568ea727daf0aeb87f25d6004292bef6
--
View it on GitLab: https://salsa.debian.org/python-team/packages/python-ciso8601/-/compare/719fa5c7954cdc62e130fcda8a2e4a447158b797...ec581f0e568ea727daf0aeb87f25d6004292bef6
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20250903/20fdbb1a/attachment-0001.htm>
More information about the debian-med-commit
mailing list