# SPDX-License-Identifier: MIT # License text: https://spdx.org/licenses/MIT.html # Copyright (c) 2023 Maxwell G # Copyright (c) Fedora Project Authors # Specfile compatability: EPEL >= 9 or Fedora >= 37 and RPM >= 4.16 %bcond tests 1 # Not yet in EPEL10: https://bugzilla.redhat.com/show_bug.cgi?id=2356387 %bcond pendulum %{undefined el10} Name: python-orjson Version: 3.11.4 Release: %autorelease Summary: Fast, correct Python JSON library # The entire source is (Apache-2.0 OR MIT), except: # # MIT: # - include/yyjson/yyjson.c # - include/yyjson/yyjson.h # # Apache-2.0: # - src/serialize/writer/str/mod.rs # - src/serialize/writer/str/sse2.rs License: (Apache-2.0 OR MIT) AND Apache-2.0 AND MIT URL: https://github.com/ijl/orjson # We must be careful about the source archive. # # The PyPI releases have a vendored Rust dependency bundle in include/cargo/, # which we would remove in %%prep, but which we must still check to make sure # everything has a license acceptable for distribution in Fedora before # uploading to the lookaside cache. # Source: %%{pypi_source orjson} # The GitHub archives from # %%{url}/archive/%%{version}/orjson-%%{version}.tar.gz do not have the # vendored crates, but they contain benchmark data in data/, some of which is # lacking its license text (e.g. data/blns.txt.xz, which is from # https://github.com/minimaxir/big-list-of-naughty-strings and should carry the # corresponding MIT license text), and some of which looks like it might have # at best unclear license status. Since the benchmark data is potentially # problematic, we would need to filter the GitHub archives with a script. Source0: orjson-%{version}-filtered.tar.xz # ./get_source ${COMMIT} (or ${TAG}) Source1: get_source BuildRequires: tomcli BuildRequires: python3-devel BuildRequires: %{py3_dist pytest-forked} # Upstream restricts these test dependencies to particular Python interpreter # versions and architectures, but we would like to run the corresponding tests # everywhere. BuildRequires: %{py3_dist numpy} %if %{with pendulum} BuildRequires: %{py3_dist pendulum} %endif # These are not in tests/requirements.txt, but they enable additional tests %ifnarch %{ix86} BuildRequires: %{py3_dist pandas} %endif BuildRequires: %{py3_dist psutil} BuildRequires: cargo-rpm-macros >= 24 %global _description %{expand: orjson is a fast, correct Python JSON library supporting dataclasses, datetimes, and numpy} %description %{_description} %package -n python3-orjson Summary: %{summary} # Output of %%{cargo_license_summary}: # # (Apache-2.0 OR MIT) AND BSD-3-Clause # Apache-2.0 OR BSL-1.0 # Apache-2.0 OR MIT # BSD-2-Clause OR Apache-2.0 OR MIT # BSL-1.0 # MIT # MIT OR Apache-2.0 # Unlicense OR MIT # # Note that this must include the terms of the base package License expression. License: %{shrink: (Apache-2.0 OR MIT) AND Apache-2.0 AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR BSD-2-Clause OR MIT) AND BSD-3-Clause AND BSL-1.0 AND MIT AND (Unlicense OR MIT) } # Version from YYJSON_VERSION_STRING in include/yyjson/yyjson.h # # Since version 3.11.4, orjson unconditionally uses a bundled copy of the C # library yyjson, https://github.com/ibireme/yyjson, as the JSON # deserialization backend. It is forked (customized) and compiled with a # particular set of options via preprocessor defines (see build.rs), so it is # not a candidate for unbundling. (Prior to version 3.11.4, this could be # disabled, and the json crate from the Rust standard library, # https://docs.rs/json, would be used instead, but this is no longer # supported.) Provides: bundled(yyjson) = 0.9.0 %description -n python3-orjson %{_description} %prep %autosetup -p1 -n orjson-%{version} %cargo_prep # Remove unwind feature, which is not useful here: the comment above it says # “Avoid bundling libgcc on musl.” tomcli-set Cargo.toml del 'features.unwind' tomcli-set Cargo.toml del 'dependencies.unwinding' %if %{without pendulum} sed -i '/^pendulum\b/d' test/requirements.txt %endif # Test dependency on arrow appears spurious # https://github.com/ijl/orjson/issues/559 sed -i '/^arrow\b/d' test/requirements.txt # Remove unpackaged PyPI plugin sed -i '/pytest-random-order/d' test/requirements.txt %generate_buildrequires %pyproject_buildrequires %{?with_tests:test/requirements.txt} %cargo_generate_buildrequires %build export RUSTFLAGS='%{build_rustflags}' %cargo_license_summary %{cargo_license} > LICENSES.dependencies %pyproject_wheel %install %pyproject_install %pyproject_save_files -l orjson %check %pyproject_check_import %if %{with tests} # --forked: protect the pytest process against test segfaults # -rs: print the reasons for skipped tests %pytest --forked -rs %endif %files -n python3-orjson -f %{pyproject_files} %doc README.md %changelog %autochangelog