#
# spec file for package python-orjson
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%{?sle15_python_module_pythons}
Name:           python-orjson
Version:        3.10.15
Release:        1.2
Summary:        Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy
License:        Apache-2.0 OR MIT
URL:            https://github.com/ijl/orjson
# Update: Change version and run `osc rm orjson-*.tar.gz && osc service runall download_files && sh ./devendor-sdist.sh && osc service runall cargo_vendor`
Source0:        orjson-%{version}-devendored.tar.xz
Source1:        vendor.tar.xz
Source2:        https://files.pythonhosted.org/packages/source/o/orjson/orjson-%{version}.tar.gz
Source3:        devendor-sdist.sh
Source4:        PACKAGING_README.md
BuildRequires:  %{python_module base >= 3.8}
BuildRequires:  %{python_module maturin >= 1}
BuildRequires:  %{python_module pip}
BuildRequires:  %{python_module setuptools}
BuildRequires:  %{python_module wheel}
BuildRequires:  cargo-packaging
BuildRequires:  fdupes
BuildRequires:  python-rpm-macros
# SECTION test requirements
BuildRequires:  %{python_module numpy}
BuildRequires:  %{python_module psutil}
BuildRequires:  %{python_module pytest}
BuildRequires:  %{python_module python-dateutil}
BuildRequires:  %{python_module pytz}
BuildRequires:  %{python_module xxhash}
BuildRequires:  timezone
# /SECTION
%python_subpackages

%description
orjson is a fast JSON library for Python.
It benchmarks as the fastest Python library for JSON.

%prep
%autosetup -a1 -n orjson-%{version}

%build
%pyproject_wheel

%install
%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitearch}

%check
donttest="bydefaultnothingfails"
%ifarch %ix86 %arm32
# test_numpy_array_d1_uintp and test_numpy_array_d1_intp fail on 32bit
donttest="$donttest or test_numpy_array_d1_intp or test_numpy_array_d1_uintp"
%endif
%ifarch ppc64le
# test_memory_loads_keys occasionally fails on crashes on ppc64le
donttest="$donttest or test_memory_loads_keys"
%endif

%pytest_arch -k "not ($donttest)"

%files %{python_files}
%doc README.md CHANGELOG.md
%license LICENSE-APACHE LICENSE-MIT
%{python_sitearch}/orjson
%{python_sitearch}/orjson-%{version}.dist-info

%changelog
* Fri Feb  7 2025 John Paul Adrian Glaubitz <adrian.glaubitz@suse.com>
- Update to 3.10.15
  * Publish PyPI manylinux aarch64 wheels built and tested on aarch64.
  * Publish PyPI musllinux aarch64 and arm7l wheels built and tested on aarch64.
  * Publish PyPI manylinux Python 3.13 wheels for i686, arm7l, ppc64le, and s390x.
* Fri Jan 10 2025 Ben Greiner <code@bnavigator.de>
- Update to 3.10.14
  * Specify build system dependency on maturin>=1,<2 again.
  * Allocate memory using PyMem_Malloc() and similar APIs for
    integration with pymalloc, mimalloc, and tracemalloc.
  * Source distribution does not ship compressed test documents and
    relevant tests skip if fixtures are not present.
  * Build now depends on Rust 1.82 or later instead of 1.72.
- Release 3.10.13
  * Fix compatibility with maturin introducing a breaking change in
    1.8.0 and specify a fixed version of maturin. Projects relying
    on any previous version being buildable from source by end
    users (via PEP 517) must upgrade to at least this version.
- Remove pendulum from tests: Not desired in Ring1 and not
  maintained upstream. It's only supported on x86_64.
* Mon Dec  2 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 3.10.12:
  * Changed
  - Publish PyPI manylinux i686 wheels.
  - Publish PyPI musllinux i686 and arm7l wheels.
  - Publish PyPI macOS wheels for Python 3.10 or later built on
    macOS 15.
  - Publish PyPI Windows wheels using trusted publishing.
- update to 3.10.11:
  * Changed
  - Improve performance of UUIDs.
  - Publish PyPI wheels with trusted publishing and PEP 740
    attestations.
  - Include text of licenses for vendored dependencies.
- update to 3.10.10:
  * Fixed
  - Fix int serialization on s390x. This was introduced in 3.10.8.
  * Changed
  - Publish aarch64 manylinux_2_17 wheel for 3.13 to PyPI.
- update to 3.10.9:
  * Fixed
  - Fix int serialization on 32-bit Python 3.8, 3.9, 3.10. This
    was introduced in 3.10.8.
- update to 3.10.8:
  * Changed
  - int serialization no longer chains OverflowError to the
  - the __cause__ attribute of orjson.JSONEncodeError when range
    exceeded.
  - Compatibility with CPython 3.14 alpha 1.
  - Improve performance.
* Mon Sep  9 2024 John Paul Adrian Glaubitz <adrian.glaubitz@suse.com>
- Update to 3.10.7
  * Improve performance of stable Rust amd64 builds.
- from version 3.10.6
  * Improve performance.
- from version 3.10.5
  * Improve performance.
- from version 3.10.4
  * Improve performance.
- from version 3.10.3
  * `manylinux` amd64 builds include runtime-detected AVX-512 `str`
    implementation.
  * Tests now compatible with numpy v2.
- from version 3.10.2
  * Fix crash serializing `str` introduced in 3.10.1.
  * Improve performance.
  * Drop support for arm7.
- from version 3.10.1
  * Serializing `numpy.ndarray` with non-native endianness raises
    `orjson.JSONEncodeError`.
  * Improve performance of serializing.
- from version 3.10.0
  * Support serializing `numpy.float16` (`numpy.half`).
  * sdist uses metadata 2.3 instead of 2.1.
  * Improve Windows PyPI builds.
* Thu Feb 29 2024 Daniel Garcia <daniel.garcia@suse.com>
- Update to 3.9.15 (bsc#1220489, CVE-2024-27454):
  * Implement recursion limit of 1024 on orjson.loads().
  * Use byte-exact read on str formatting SIMD path to avoid crash.
- 3.9.14:
  * Fix crash serializing str introduced in 3.9.11.
  * Build now depends on Rust 1.72 or later.
- 3.9.13:
  * Serialization str escape uses only 128-bit SIMD.
  * Fix compatibility with CPython 3.13 alpha 3.
  * Publish musllinux_1_2 instead of musllinux_1_1 wheels.
  * Serialization uses small integer optimization in CPython 3.12 or later.
- 3.9.12:
  * Minimal musllinux_1_1 build due to sporadic CI failure.
- 3.9.11:
  * Improve performance of serializing. str is significantly faster. Documents
    using dict, list, and tuple are somewhat faster.
* Sun Jan 14 2024 Ben Greiner <code@bnavigator.de>
- Update to 3.9.10
  * Fix debug assert failure on 3.12 --profile=dev build.
- Release 3.9.9
  * orjson module metadata explicitly marks subinterpreters as not
    supported.
- Release 3.9.8
  * Improve performance.
  * Drop support for Python 3.7.
- Release 3.9.7
  * Fix crash in orjson.loads() due to non-reentrant handling of
    persistent buffer. This was introduced in 3.9.3.
  * Handle some FFI removals in CPython 3.13.
- Release 3.9.6
  * Fix numpy reference leak on unsupported array dtype.
  * Fix numpy.datetime64 reference handling.
  * Minor performance improvements.
- Release 3.9.5
  * Remove futex from module import and initialization path.
- Release 3.9.4
  * Fix hash builder using default values.
  * Fix non-release builds of orjson copying large deserialization
    buffer from stack to heap. This was introduced in 3.9.3.
- Release 3.9.3
  * Fix compatibility with CPython 3.12.
  * Support i686/x86 32-bit Python installs on Windows.
- Release 3.9.2
  * Fix the __cause__ exception on orjson.JSONEncodeError possibly
    being denormalized, i.e., of type str instead of Exception.
- Release 3.9.1
  * Fix memory leak on chained tracebacks of exceptions raised in
    default. This was introduced in 3.8.12.
- Release 3.9.0
  * orjson.Fragment includes already-serialized JSON in a document.
- Release 3.8.13
  * Source distribution contains all source code required for an
    offline build.
  * Build uses maturin v1.
- Release 3.8.12
  * Exceptions raised in default are now chained as the __cause__
    attribute on orjson.JSONEncodeError.
- Release 3.8.11
  * orjson.loads() on an empty document has a specific error
    message.
- Avoid cargo_audit error because of shipped old vulnerable
  zerocopy: Devendor the shipped cargo and update the cargo_vendor
  service
* Sat Jun 10 2023 ecsos <ecsos@opensuse.org>
- Add %%{?sle15_python_module_pythons}
* Thu Apr 13 2023 Matej Cepl <mcepl@suse.com>
- Update to 3.8.10:
  - Fix compatibility with CPython 3.12.0a7.
  - Fix compatibility with big-endian architectures.
  - Fix crash in serialization.
  - Fix parallel initialization of orjson.
* Mon Jan  2 2023 Dirk Müller <dmueller@suse.com>
- update to 3.8.3:
  * `orjson.dumps()` accepts `option=None` per `Optional[int]` type.
  * Fix tests on 32-bit for `numpy.intp` and `numpy.uintp`.
  * Build now depends on rustc 1.60 or later.
  * Support building with maturin 0.13 or 0.14.
* Fri Oct 28 2022 Yogalakshmi Arunachalam <yarunachalam@suse.com>
- Update to 3.8.1
  - Build maintenance for Python 3.11.
* Wed Sep 21 2022 Matej Cepl <mcepl@suse.com>
- Update to 3.8.0:
  - Support serializing numpy.int16 and numpy.uint16.
  - Fix datetime regression tests with tzinfo 2022b.
* Wed Sep 21 2022 John Vandenberg <jayvdb@gmail.com>
- Activate test suite
- Tidy spec
* Wed Jul 13 2022 Adrian Schröter <adrian@suse.de>
- initial package of version 3.7.7