summaryrefslogtreecommitdiffstats
path: root/meta-python/recipes-devtools
diff options
context:
space:
mode:
Diffstat (limited to 'meta-python/recipes-devtools')
-rw-r--r--meta-python/recipes-devtools/hotdoc/hotdoc/0001-c_comment_scanner-fix-function-prototypes.patch32
-rw-r--r--meta-python/recipes-devtools/hotdoc/hotdoc/0002-avoid-third-party-backports-dependency-on-sufficient.patch72
-rw-r--r--meta-python/recipes-devtools/hotdoc/hotdoc/0003-CMake-4-compatibility.patch44
-rw-r--r--meta-python/recipes-devtools/hotdoc/hotdoc/0004-Use-flex-with-noline-option-to-prevent.patch29
-rw-r--r--meta-python/recipes-devtools/hotdoc/hotdoc_0.17.4.bb28
-rw-r--r--meta-python/recipes-devtools/python/files/0001-remove-pkg_resources-import.patch32
-rw-r--r--meta-python/recipes-devtools/python/python3-aenum_3.1.17.bb (renamed from meta-python/recipes-devtools/python/python3-aenum_3.1.16.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-aiofiles_25.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-aiofiles_24.1.0.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-aiohttp_3.13.5.bb (renamed from meta-python/recipes-devtools/python/python3-aiohttp_3.13.3.bb)7
-rw-r--r--meta-python/recipes-devtools/python/python3-aiohue_4.8.1.bb (renamed from meta-python/recipes-devtools/python/python3-aiohue_4.8.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-alembic_1.18.4.bb (renamed from meta-python/recipes-devtools/python/python3-alembic_1.18.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-anyio_4.13.0.bb (renamed from meta-python/recipes-devtools/python/python3-anyio_4.12.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-apiflask_3.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-apiflask_3.0.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-apispec_6.10.0.bb (renamed from meta-python/recipes-devtools/python/python3-apispec_6.9.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-appdirs_1.4.4.bb1
-rw-r--r--meta-python/recipes-devtools/python/python3-asgiref_3.11.1.bb (renamed from meta-python/recipes-devtools/python/python3-asgiref_3.11.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-astroid_4.1.2.bb (renamed from meta-python/recipes-devtools/python/python3-astroid_4.0.3.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-asyncinotify_4.4.2.bb (renamed from meta-python/recipes-devtools/python/python3-asyncinotify_4.3.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-autoflake_2.3.3.bb (renamed from meta-python/recipes-devtools/python/python3-autoflake_2.3.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-bandit_1.9.4.bb (renamed from meta-python/recipes-devtools/python/python3-bandit_1.9.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-bitarray_3.8.1.bb (renamed from meta-python/recipes-devtools/python/python3-bitarray_3.8.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-bitstring_4.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-bitstring_4.3.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-bitstruct_8.22.1.bb (renamed from meta-python/recipes-devtools/python/python3-bitstruct_8.21.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-black_26.3.1.bb (renamed from meta-python/recipes-devtools/python/python3-black_26.1.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-bleak_3.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-bleak_2.1.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-bumble_0.0.226.bb (renamed from meta-python/recipes-devtools/python/python3-bumble_0.0.221.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-cachetools_7.0.4.bb (renamed from meta-python/recipes-devtools/python/python3-cachetools_6.2.4.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-can_4.6.1.bb1
-rw-r--r--meta-python/recipes-devtools/python/python3-cassandra-driver/0001-skip-verifying-the-availability-of-setuptools.patch34
-rw-r--r--meta-python/recipes-devtools/python/python3-cassandra-driver_3.29.3.bb (renamed from meta-python/recipes-devtools/python/python3-cassandra-driver_3.29.2.bb)7
-rw-r--r--meta-python/recipes-devtools/python/python3-cbor2_5.9.0.bb (renamed from meta-python/recipes-devtools/python/python3-cbor2_5.8.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-charset-normalizer_3.4.7.bb (renamed from meta-python/recipes-devtools/python/python3-charset-normalizer_3.4.4.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-ckzg/python-ckzg-0001-Let-override-CC.patch21
-rw-r--r--meta-python/recipes-devtools/python/python3-ckzg/python-ckzg-0002-Disable-Werror.patch30
-rw-r--r--meta-python/recipes-devtools/python/python3-ckzg_2.1.7.bb (renamed from meta-python/recipes-devtools/python/python3-ckzg_2.1.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-cmake_4.3.1.bb (renamed from meta-python/recipes-devtools/python/python3-cmake_4.2.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-cmd2_3.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-cmd2_3.1.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-configargparse_1.7.5.bb (renamed from meta-python/recipes-devtools/python/python3-configargparse_1.7.1.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-coverage_7.13.5.bb (renamed from meta-python/recipes-devtools/python/python3-coverage_7.13.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-croniter_6.2.2.bb (renamed from meta-python/recipes-devtools/python/python3-croniter_6.0.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-cssselect2_0.9.0.bb (renamed from meta-python/recipes-devtools/python/python3-cssselect2_0.8.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-cucumber-tag-expressions_9.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-cucumber-tag-expressions_6.2.0.bb)5
-rw-r--r--meta-python/recipes-devtools/python/python3-dateparser_1.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-dateparser_1.2.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-dbus-deviation/0001-Prevent-trying-to-donwload-requierment-which-will-ca.patch27
-rw-r--r--meta-python/recipes-devtools/python/python3-dbus-deviation_0.6.1.bb20
-rw-r--r--meta-python/recipes-devtools/python/python3-dbus-fast/0001-pyproject.toml-Remove-upper-version-constraint-for-C.patch14
-rw-r--r--meta-python/recipes-devtools/python/python3-dbus-fast_4.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-dbus-fast_2.44.5.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-dill_0.4.1.bb (renamed from meta-python/recipes-devtools/python/python3-dill_0.4.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-django.inc4
-rw-r--r--meta-python/recipes-devtools/python/python3-django/0001-Fix-test_strip_tags-test.patch76
-rw-r--r--meta-python/recipes-devtools/python/python3-django_5.2.13.bb5
-rw-r--r--meta-python/recipes-devtools/python/python3-django_5.2.9.bb7
-rw-r--r--meta-python/recipes-devtools/python/python3-django_6.0.4.bb (renamed from meta-python/recipes-devtools/python/python3-django_6.0.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-djangorestframework_3.17.1.bb (renamed from meta-python/recipes-devtools/python/python3-djangorestframework_3.16.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-ecdsa_0.19.2.bb (renamed from meta-python/recipes-devtools/python/python3-ecdsa_0.19.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-elementpath_5.1.1.bb (renamed from meta-python/recipes-devtools/python/python3-elementpath_5.1.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-engineio_4.13.1.bb (renamed from meta-python/recipes-devtools/python/python3-engineio_4.9.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-eth-hash_0.8.0.bb (renamed from meta-python/recipes-devtools/python/python3-eth-hash_0.7.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-eth-typing_6.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-eth-typing_5.2.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-eth-utils_6.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-eth-utils_5.3.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-evdev_1.9.3.bb (renamed from meta-python/recipes-devtools/python/python3-evdev_1.9.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-eventlet_0.41.0.bb (renamed from meta-python/recipes-devtools/python/python3-eventlet_0.40.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-faker/pytest.ini3
-rw-r--r--meta-python/recipes-devtools/python/python3-faker_40.13.0.bb48
-rw-r--r--meta-python/recipes-devtools/python/python3-fastapi-cli_0.0.24.bb (renamed from meta-python/recipes-devtools/python/python3-fastapi-cli_0.0.20.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-fastapi_0.135.3.bb (renamed from meta-python/recipes-devtools/python/python3-fastapi_0.128.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-filelock_3.25.2.bb (renamed from meta-python/recipes-devtools/python/python3-filelock_3.20.3.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-cors_6.0.2.bb (renamed from meta-python/recipes-devtools/python/python3-flask-cors_5.0.0.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.7.1.bb (renamed from meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.6.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-limiter_4.1.1.bb21
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-mail_0.10.0.bb (renamed from meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb)8
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-marshmallow_1.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-flask-marshmallow_1.3.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-migrate_4.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-flask-migrate_4.0.7.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-pymongo_3.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-flask-pymongo_2.3.0.bb)12
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-socketio_5.6.1.bb (renamed from meta-python/recipes-devtools/python/python3-flask-socketio_5.3.6.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-flask_3.1.3.bb (renamed from meta-python/recipes-devtools/python/python3-flask_3.1.2.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-fsspec_2026.3.0.bb (renamed from meta-python/recipes-devtools/python/python3-fsspec_2025.12.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-gcovr_8.6.bb (renamed from meta-python/recipes-devtools/python/python3-gcovr_8.5.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-geojson/0001-Allow-install-over-python-3.14-329.patch56
-rw-r--r--meta-python/recipes-devtools/python/python3-geojson_3.2.0.bb4
-rw-r--r--meta-python/recipes-devtools/python/python3-gevent_26.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-gevent_25.9.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-git-pw_2.8.0.bb (renamed from meta-python/recipes-devtools/python/python3-git-pw_2.7.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-gmpy2/0001-Avoid-do_configure-requires-check-error.patch29
-rw-r--r--meta-python/recipes-devtools/python/python3-gmpy2_2.3.0.bb (renamed from meta-python/recipes-devtools/python/python3-gmpy2_2.2.2.bb)9
-rw-r--r--meta-python/recipes-devtools/python/python3-google-auth-oauthlib_1.3.1.bb (renamed from meta-python/recipes-devtools/python/python3-google-auth-oauthlib_1.2.3.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-google-auth_2.49.2.bb (renamed from meta-python/recipes-devtools/python/python3-google-auth_2.47.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-gpiod_2.4.2.bb (renamed from meta-python/recipes-devtools/python/python3-gpiod_2.4.0.bb)8
-rw-r--r--meta-python/recipes-devtools/python/python3-greenlet_3.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-greenlet_3.3.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-grpcio_1.78.0.bb (renamed from meta-python/recipes-devtools/python/python3-grpcio_1.76.0.bb)11
-rw-r--r--meta-python/recipes-devtools/python/python3-gunicorn_25.3.0.bb (renamed from meta-python/recipes-devtools/python/python3-gunicorn_23.0.0.bb)5
-rw-r--r--meta-python/recipes-devtools/python/python3-h5py_3.16.0.bb (renamed from meta-python/recipes-devtools/python/python3-h5py_3.15.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-html5lib/0001-setup.py-make-pkg_resources-import-optional-for-Pyth.patch44
-rw-r--r--meta-python/recipes-devtools/python/python3-html5lib_1.1.bb1
-rw-r--r--meta-python/recipes-devtools/python/python3-httplib2_0.31.2.bb (renamed from meta-python/recipes-devtools/python/python3-httplib2_0.31.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-httptools/0001-Allow-building-with-latest-setuptools.patch23
-rw-r--r--meta-python/recipes-devtools/python/python3-httptools_0.7.1.bb1
-rw-r--r--meta-python/recipes-devtools/python/python3-huey_3.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-huey_2.6.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-humanfriendly_10.0.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-icecream_2.2.0.bb (renamed from meta-python/recipes-devtools/python/python3-icecream_2.1.9.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-icontract_2.7.3.bb (renamed from meta-python/recipes-devtools/python/python3-icontract_2.7.2.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-icu_2.16.2.bb (renamed from meta-python/recipes-devtools/python/python3-icu_2.16.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-identify_2.6.18.bb (renamed from meta-python/recipes-devtools/python/python3-identify_2.6.15.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-imageio_2.37.3.bb (renamed from meta-python/recipes-devtools/python/python3-imageio_2.37.2.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-imgtool_2.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-imgtool_2.3.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-importlib-metadata_9.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-importlib-metadata_8.7.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-inline-snapshot_0.32.6.bb (renamed from meta-python/recipes-devtools/python/python3-inline-snapshot_0.30.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-ipython_9.12.0.bb (renamed from meta-python/recipes-devtools/python/python3-ipython_9.9.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-isort_8.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-isort_7.0.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-jmespath_1.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-jmespath_1.0.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-kiwisolver_1.5.0.bb (renamed from meta-python/recipes-devtools/python/python3-kiwisolver_1.4.9.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-langtable_0.0.70.bb (renamed from meta-python/recipes-devtools/python/python3-langtable_0.0.69.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-legacy-cgi_2.6.4.bb (renamed from meta-python/recipes-devtools/python/python3-legacy-cgi_2.6.2.bb)9
-rw-r--r--meta-python/recipes-devtools/python/python3-lief_0.17.3.bb (renamed from meta-python/recipes-devtools/python/python3-lief_0.17.2.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-limits_5.8.0.bb18
-rw-r--r--meta-python/recipes-devtools/python/python3-luma-oled_3.15.0.bb (renamed from meta-python/recipes-devtools/python/python3-luma-oled_3.14.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-m2crypto/0001-fix-allow-64-bit-time_t-on-32-bit-systems-in-test_is.patch40
-rw-r--r--meta-python/recipes-devtools/python/python3-m2crypto/0001-fix-swig-avoid-clang-GNUC-pragma-block-before-_lib.h.patch49
-rw-r--r--meta-python/recipes-devtools/python/python3-m2crypto/0002-fix-correct-struct-packing-on-32-bit-with-_TIME_BITS.patch72
-rw-r--r--meta-python/recipes-devtools/python/python3-m2crypto_0.47.0.bb (renamed from meta-python/recipes-devtools/python/python3-m2crypto_0.46.2.bb)11
-rw-r--r--meta-python/recipes-devtools/python/python3-marshmallow_4.3.0.bb (renamed from meta-python/recipes-devtools/python/python3-marshmallow_4.2.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-matplotlib_3.10.8.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-mdit-py-plugins_0.5.0.bb (renamed from meta-python/recipes-devtools/python/python3-mdit-py-plugins_0.4.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-mmh3_5.2.1.bb (renamed from meta-python/recipes-devtools/python/python3-mmh3_5.2.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-moteus_0.3.100.bb (renamed from meta-python/recipes-devtools/python/python3-moteus_0.3.97.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-mpmath_1.4.1.bb (renamed from meta-python/recipes-devtools/python/python3-mpmath_1.3.0.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-msgpack_1.1.2.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-multidict_6.7.1.bb (renamed from meta-python/recipes-devtools/python/python3-multidict_6.7.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-multiprocess_0.70.19.bb10
-rw-r--r--meta-python/recipes-devtools/python/python3-mypy_1.17.0.bb1
-rw-r--r--meta-python/recipes-devtools/python/python3-myst-parser_5.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-myst-parser_4.0.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-nanobind_2.12.0.bb (renamed from meta-python/recipes-devtools/python/python3-nanobind_2.10.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-ninja/CMakeLists.txt9
-rw-r--r--meta-python/recipes-devtools/python/python3-ninja/no-scikit-build.patch39
-rw-r--r--meta-python/recipes-devtools/python/python3-ninja/run-ninja-from-path.patch44
-rw-r--r--meta-python/recipes-devtools/python/python3-ninja_1.13.0.bb (renamed from meta-python/recipes-devtools/python/python3-ninja_1.11.1.1.bb)10
-rw-r--r--meta-python/recipes-devtools/python/python3-orjson-crates.inc124
-rw-r--r--meta-python/recipes-devtools/python/python3-orjson/0001-Guard-avx512-module-with-x86-target-cfg.patch37
-rw-r--r--meta-python/recipes-devtools/python/python3-orjson/0002-Guard-x86-feature-detection-macro-in-pystrref-object.patch34
-rw-r--r--meta-python/recipes-devtools/python/python3-orjson_3.10.17.bb22
-rw-r--r--meta-python/recipes-devtools/python/python3-orjson_3.11.8.bb46
-rw-r--r--meta-python/recipes-devtools/python/python3-pandas/0001-BLD-add-option-to-specify-numpy-header-location.patch30
-rw-r--r--meta-python/recipes-devtools/python/python3-pandas/0001-fix-reproducibility-issue.patch43
-rw-r--r--meta-python/recipes-devtools/python/python3-pandas/0001-pyproject.toml-don-t-pin-dependency-versions.patch32
-rw-r--r--meta-python/recipes-devtools/python/python3-pandas_3.0.2.bb (renamed from meta-python/recipes-devtools/python/python3-pandas_2.2.3.bb)9
-rw-r--r--meta-python/recipes-devtools/python/python3-paramiko_4.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-paramiko_3.5.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-parse_1.21.1.bb (renamed from meta-python/recipes-devtools/python/python3-parse_1.20.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-parso_0.8.6.bb (renamed from meta-python/recipes-devtools/python/python3-parso_0.8.5.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-path_17.1.1.bb (renamed from meta-python/recipes-devtools/python/python3-path_17.1.0.bb)10
-rw-r--r--meta-python/recipes-devtools/python/python3-pendulum-crates.inc52
-rw-r--r--meta-python/recipes-devtools/python/python3-pendulum/0001-rust-Cargo.toml-inhibit-strip.patch31
-rw-r--r--meta-python/recipes-devtools/python/python3-pendulum_3.2.0.bb35
-rw-r--r--meta-python/recipes-devtools/python/python3-pikepdf_10.5.1.bb (renamed from meta-python/recipes-devtools/python/python3-pikepdf_10.2.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pillow_12.2.0.bb (renamed from meta-python/recipes-devtools/python/python3-pillow_12.1.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-pint_0.25.3.bb (renamed from meta-python/recipes-devtools/python/python3-pint_0.25.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pkgconfig_1.6.0.bb (renamed from meta-python/recipes-devtools/python/python3-pkgconfig_1.5.5.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-platformdirs_4.9.6.bb (renamed from meta-python/recipes-devtools/python/python3-platformdirs_4.5.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pre-commit_4.5.1.bb (renamed from meta-python/recipes-devtools/python/python3-pre-commit_4.3.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-progress_1.6.1.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-protobuf_6.33.6.bb (renamed from meta-python/recipes-devtools/python/python3-protobuf_6.33.2.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-py7zr_1.1.2.bb (renamed from meta-python/recipes-devtools/python/python3-py7zr_1.1.0.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-pyais_3.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-pyais_2.15.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-pyatspi_2.58.2.bb (renamed from meta-python/recipes-devtools/python/python3-pyatspi_2.46.1.bb)10
-rw-r--r--meta-python/recipes-devtools/python/python3-pybind11-json/0001-CMakeLists-drop-PYTHON_INCLUDE_DIRS-from-interface.patch34
-rw-r--r--meta-python/recipes-devtools/python/python3-pybind11-json_0.2.15.bb3
-rw-r--r--meta-python/recipes-devtools/python/python3-pychromecast/0001-bump-required-version-to-0.46.1-for-python3-wheel.patch23
-rw-r--r--meta-python/recipes-devtools/python/python3-pychromecast_14.0.10.bb (renamed from meta-python/recipes-devtools/python/python3-pychromecast_14.0.9.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-pydantic_2.12.5.bb (renamed from meta-python/recipes-devtools/python/python3-pydantic_2.12.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pyee_13.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-pyee_13.0.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pyjwt_2.12.1.bb (renamed from meta-python/recipes-devtools/python/python3-pyjwt_2.10.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-pylint_4.0.5.bb (renamed from meta-python/recipes-devtools/python/python3-pylint_4.0.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pymisp_2.5.33.1.bb (renamed from meta-python/recipes-devtools/python/python3-pymisp_2.5.17.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pymodbus_3.13.0.bb (renamed from meta-python/recipes-devtools/python/python3-pymodbus_3.11.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pyperclip_1.11.0.bb (renamed from meta-python/recipes-devtools/python/python3-pyperclip_1.9.0.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-pyperf_2.10.0.bb (renamed from meta-python/recipes-devtools/python/python3-pyperf_2.9.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pyrad/208.patch51
-rw-r--r--meta-python/recipes-devtools/python/python3-pyrad/use-poetry-core.patch26
-rw-r--r--meta-python/recipes-devtools/python/python3-pyrad_2.5.4.bb (renamed from meta-python/recipes-devtools/python/python3-pyrad_2.4.bb)8
-rw-r--r--meta-python/recipes-devtools/python/python3-pyroute2_0.9.5.bb1
-rw-r--r--meta-python/recipes-devtools/python/python3-pystemd_0.15.3.bb (renamed from meta-python/recipes-devtools/python/python3-pystemd_0.15.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pytest-codspeed_4.3.0.bb (renamed from meta-python/recipes-devtools/python/python3-pytest-codspeed_3.0.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-pytest-cov_7.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-pytest-cov_7.0.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pytest-env_1.6.0.bb21
-rw-r--r--meta-python/recipes-devtools/python/python3-pytest-html_4.2.0.bb (renamed from meta-python/recipes-devtools/python/python3-pytest-html_4.1.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pytest-httpx_0.36.2.bb (renamed from meta-python/recipes-devtools/python/python3-pytest-httpx_0.36.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-pytest-runner/0001-Not-use-functions-from-pkg_resources-any-more.patch77
-rw-r--r--meta-python/recipes-devtools/python/python3-pytest-runner_6.0.1.bb4
-rw-r--r--meta-python/recipes-devtools/python/python3-python-multipart_0.0.26.bb (renamed from meta-python/recipes-devtools/python/python3-python-multipart_0.0.21.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-pytokens_0.4.1.bb (renamed from meta-python/recipes-devtools/python/python3-pytokens_0.4.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-redis_7.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-redis_5.2.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-regex_2026.4.4.bb (renamed from meta-python/recipes-devtools/python/python3-regex_2025.11.3.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-reportlab_4.4.10.bb (renamed from meta-python/recipes-devtools/python/python3-reportlab_4.4.5.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-responses_0.26.0.bb (renamed from meta-python/recipes-devtools/python/python3-responses_0.25.8.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-rich-toolkit_0.19.7.bb (renamed from meta-python/recipes-devtools/python/python3-rich-toolkit_0.15.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-robotframework_7.4.2.bb (renamed from meta-python/recipes-devtools/python/python3-robotframework_7.3.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-schema_0.7.8.bb10
-rw-r--r--meta-python/recipes-devtools/python/python3-scikit-build-core_0.12.2.bb (renamed from meta-python/recipes-devtools/python/python3-scikit-build-core_0.11.6.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-scikit-build_0.19.0.bb (renamed from meta-python/recipes-devtools/python/python3-scikit-build_0.18.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch14
-rw-r--r--meta-python/recipes-devtools/python/python3-scrypt_0.9.4.bb (renamed from meta-python/recipes-devtools/python/python3-scrypt_0.8.27.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-sentry-sdk_2.57.0.bb (renamed from meta-python/recipes-devtools/python/python3-sentry-sdk_1.45.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-setuptools-git-versioning_3.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-setuptools-git-versioning_2.1.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-simpleeval_1.0.7.bb (renamed from meta-python/recipes-devtools/python/python3-simpleeval_1.0.3.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-smbus2_0.6.1.bb (renamed from meta-python/recipes-devtools/python/python3-smbus2_0.6.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-snagboot_2.6.1.bb (renamed from meta-python/recipes-devtools/python/python3-snagboot_2.5.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-socketio_5.16.1.bb (renamed from meta-python/recipes-devtools/python/python3-socketio_5.11.2.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-soundcard_0.4.6.bb (renamed from meta-python/recipes-devtools/python/python3-soundcard_0.4.5.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-soupsieve_2.8.3.bb (renamed from meta-python/recipes-devtools/python/python3-soupsieve_2.8.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.49.bb (renamed from meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.45.bb)5
-rw-r--r--meta-python/recipes-devtools/python/python3-sqlparse_0.5.5.bb (renamed from meta-python/recipes-devtools/python/python3-sqlparse_0.5.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-starlette_1.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-starlette_0.51.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-stevedore_5.7.0.bb (renamed from meta-python/recipes-devtools/python/python3-stevedore_5.6.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-stopit/0001-Drop-the-deprecated-pkg_resources.patch38
-rw-r--r--meta-python/recipes-devtools/python/python3-stopit_1.1.2.bb8
-rw-r--r--meta-python/recipes-devtools/python/python3-tabulate_0.10.0.bb (renamed from meta-python/recipes-devtools/python/python3-tabulate_0.9.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-telnetlib3_2.0.8.bb14
-rw-r--r--meta-python/recipes-devtools/python/python3-telnetlib3_2.6.0.bb15
-rw-r--r--meta-python/recipes-devtools/python/python3-tenacity_9.1.4.bb (renamed from meta-python/recipes-devtools/python/python3-tenacity_9.1.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-time-machine_3.2.0.bb28
-rw-r--r--meta-python/recipes-devtools/python/python3-tokenize-rt_6.2.0.bb21
-rw-r--r--meta-python/recipes-devtools/python/python3-tomli_2.4.1.bb (renamed from meta-python/recipes-devtools/python/python3-tomli_2.4.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-toposort_1.10.bb10
-rw-r--r--meta-python/recipes-devtools/python/python3-tornado_6.5.5.bb (renamed from meta-python/recipes-devtools/python/python3-tornado_6.5.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-tox_4.52.1.bb (renamed from meta-python/recipes-devtools/python/python3-tox_4.27.0.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-tqdm_4.67.3.bb (renamed from meta-python/recipes-devtools/python/python3-tqdm_4.67.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-trio_0.33.0.bb (renamed from meta-python/recipes-devtools/python/python3-trio_0.32.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-txdbus_1.1.2.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-typeguard_4.5.1.bb (renamed from meta-python/recipes-devtools/python/python3-typeguard_4.4.4.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-typer_0.24.1.bb (renamed from meta-python/recipes-devtools/python/python3-typer_0.21.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-types-psutil_7.2.2.20260408.bb (renamed from meta-python/recipes-devtools/python/python3-types-psutil_7.2.1.20251231.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-tzdata_2026.1.bb (renamed from meta-python/recipes-devtools/python/python3-tzdata_2025.3.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-uefi-firmware_1.13.bb (renamed from meta-python/recipes-devtools/python/python3-uefi-firmware_1.12.bb)5
-rw-r--r--meta-python/recipes-devtools/python/python3-ujson_5.12.0.bb (renamed from meta-python/recipes-devtools/python/python3-ujson_5.11.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-ukkonen_1.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-ukkonen_git.bb)5
-rw-r--r--meta-python/recipes-devtools/python/python3-uswid_0.6.0.bb (renamed from meta-python/recipes-devtools/python/python3-uswid_0.5.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-uvicorn_0.44.0.bb (renamed from meta-python/recipes-devtools/python/python3-uvicorn_0.40.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-vector_1.8.0.bb (renamed from meta-python/recipes-devtools/python/python3-vector_1.7.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-virtualenv_21.2.1.bb (renamed from meta-python/recipes-devtools/python/python3-virtualenv_20.36.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-websocket-client_1.9.0.bb (renamed from meta-python/recipes-devtools/python/python3-websocket-client_1.7.0.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-werkzeug_3.1.8.bb (renamed from meta-python/recipes-devtools/python/python3-werkzeug_3.1.5.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-wheezy-template_3.2.5.bb13
-rw-r--r--meta-python/recipes-devtools/python/python3-whitenoise_6.12.0.bb (renamed from meta-python/recipes-devtools/python/python3-whitenoise_6.11.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-wrapt_2.1.2.bb (renamed from meta-python/recipes-devtools/python/python3-wrapt_2.0.1.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-wsproto_1.3.2.bb (renamed from meta-python/recipes-devtools/python/python3-wsproto_1.2.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-xmlschema_4.3.1.bb (renamed from meta-python/recipes-devtools/python/python3-xmlschema_4.3.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-xmodem_0.5.0.bb (renamed from meta-python/recipes-devtools/python/python3-xmodem_0.4.7.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-xstatic-font-awesome_6.2.1.2.bb (renamed from meta-python/recipes-devtools/python/python3-xstatic-font-awesome_6.2.1.1.bb)8
-rw-r--r--meta-python/recipes-devtools/python/python3-xstatic_1.0.3.bb1
-rw-r--r--meta-python/recipes-devtools/python/python3-yamlloader_1.6.0.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-yappi/0001-test_functionality-convert-line-endings-to-Unix.patch3845
-rw-r--r--meta-python/recipes-devtools/python/python3-yappi_1.7.6.bb (renamed from meta-python/recipes-devtools/python/python3-yappi_1.7.3.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-yarl/0001-build-wheel-in-place.patch31
-rw-r--r--meta-python/recipes-devtools/python/python3-yarl_1.23.0.bb (renamed from meta-python/recipes-devtools/python/python3-yarl_1.22.0.bb)9
-rw-r--r--meta-python/recipes-devtools/python/python3-zopeinterface/0001-Allow-using-setuptools-74.patch24
-rw-r--r--meta-python/recipes-devtools/python/python3-zopeinterface_8.3.bb (renamed from meta-python/recipes-devtools/python/python3-zopeinterface_7.1.1.bb)9
-rw-r--r--meta-python/recipes-devtools/python/tftpy_0.8.7.bb (renamed from meta-python/recipes-devtools/python/tftpy_0.8.6.bb)2
-rw-r--r--meta-python/recipes-devtools/python3-mlcommons-loadgen/files/source-date-epoch.patch43
-rw-r--r--meta-python/recipes-devtools/python3-mlcommons-loadgen/python3-mlcommons-loadgen_6.0.14.bb (renamed from meta-python/recipes-devtools/python3-mlcommons-loadgen/python3-mlcommons-loadgen_5.1.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python3-nltk/python3-nltk_3.9.4.bb (renamed from meta-python/recipes-devtools/python3-nltk/python3-nltk_3.9.2.bb)3
-rw-r--r--meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.5.bb (renamed from meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.4.bb)4
259 files changed, 1617 insertions, 4858 deletions
diff --git a/meta-python/recipes-devtools/hotdoc/hotdoc/0001-c_comment_scanner-fix-function-prototypes.patch b/meta-python/recipes-devtools/hotdoc/hotdoc/0001-c_comment_scanner-fix-function-prototypes.patch
new file mode 100644
index 0000000000..c26dde93b3
--- /dev/null
+++ b/meta-python/recipes-devtools/hotdoc/hotdoc/0001-c_comment_scanner-fix-function-prototypes.patch
@@ -0,0 +1,32 @@
1Subject: [PATCH 1/2] c_comment_scanner: fix function prototypes
2
3scanner.l: Fix compile error as the following:
4
5python3-hotdoc/0.17.4/sources/hotdoc-0.17.4/hotdoc/parsers/c_comment_scanner/scanner.l:126:1: error: conflicting types for 'parse_comment'; have 'int(PyObject *)' {aka 'int(struct _object *)'}
6| 126 | parse_comment (PyObject *comments)
7
8Upstream-Status: Backport [https://github.com/hotdoc/hotdoc/commit/adf8518431fafb78c9b47862a0a9a58824b6a421]
9
10Signed-off-by: Liu Yiding <liuyd.fnst@fujitsu.com>
11---
12 hotdoc/parsers/c_comment_scanner/scanner.l | 4 ++--
13 1 file changed, 2 insertions(+), 2 deletions(-)
14
15diff --git a/hotdoc/parsers/c_comment_scanner/scanner.l b/hotdoc/parsers/c_comment_scanner/scanner.l
16index 0408601..7bccd64 100644
17--- a/hotdoc/parsers/c_comment_scanner/scanner.l
18+++ b/hotdoc/parsers/c_comment_scanner/scanner.l
19@@ -34,8 +34,8 @@
20 extern int yylex (PyObject *comments);
21 #define YY_DECL int yylex (PyObject *comments)
22 static int yywrap (void);
23-static int parse_comment ();
24-static int parse_define ();
25+static int parse_comment (PyObject *);
26+static int parse_define (PyObject *);
27 %}
28
29 %option nounput
30--
312.43.0
32
diff --git a/meta-python/recipes-devtools/hotdoc/hotdoc/0002-avoid-third-party-backports-dependency-on-sufficient.patch b/meta-python/recipes-devtools/hotdoc/hotdoc/0002-avoid-third-party-backports-dependency-on-sufficient.patch
new file mode 100644
index 0000000000..560d1257f0
--- /dev/null
+++ b/meta-python/recipes-devtools/hotdoc/hotdoc/0002-avoid-third-party-backports-dependency-on-sufficient.patch
@@ -0,0 +1,72 @@
1Subject: [PATCH 2/2] avoid third-party backports dependency on sufficiently
2 new python
3
4`backports.entry_points_selectable` backports functionality from python
53.10 to older versions of python.
6
7Backport this patch to solve runtime backports import problem as following:
8 File "/usr/lib/python3.14/site-packages/hotdoc/utils/utils.py", line 38, in <module>
9 from backports.entry_points_selectable import entry_points
10ModuleNotFoundError: No module named 'backports'
11
12Upstream-Status: Backport [https://github.com/hotdoc/hotdoc/commit/51043c3ef889e36c8232280581598b875073ded7]
13
14Signed-off-by: Liu Yiding <liuyd.fnst@fujitsu.com>
15---
16 hotdoc/extensions/gi/utils.py | 6 +++++-
17 hotdoc/utils/utils.py | 6 +++++-
18 setup.py | 2 +-
19 3 files changed, 11 insertions(+), 3 deletions(-)
20
21diff --git a/hotdoc/extensions/gi/utils.py b/hotdoc/extensions/gi/utils.py
22index 159c2b6..91902cb 100644
23--- a/hotdoc/extensions/gi/utils.py
24+++ b/hotdoc/extensions/gi/utils.py
25@@ -1,9 +1,13 @@
26 import os
27 from collections import namedtuple
28 import pathlib
29+import sys
30 import traceback
31
32-from backports.entry_points_selectable import entry_points
33+if sys.version_info >= (3, 10):
34+ from importlib.metadata import entry_points
35+else:
36+ from backports.entry_points_selectable import entry_points
37
38 from hotdoc.core.links import Link
39 from hotdoc.utils.loggable import info, debug
40diff --git a/hotdoc/utils/utils.py b/hotdoc/utils/utils.py
41index 518d308..aef657a 100644
42--- a/hotdoc/utils/utils.py
43+++ b/hotdoc/utils/utils.py
44@@ -35,7 +35,11 @@ import importlib.util
45 from urllib.request import urlretrieve
46 from pathlib import Path
47
48-from backports.entry_points_selectable import entry_points
49+if sys.version_info >= (3, 10):
50+ from importlib.metadata import entry_points
51+else:
52+ from backports.entry_points_selectable import entry_points
53+
54 try:
55 import importlib.metadata as meta
56 except ImportError:
57diff --git a/setup.py b/setup.py
58index 5d7f131..9ee504d 100644
59--- a/setup.py
60+++ b/setup.py
61@@ -300,7 +300,7 @@ INSTALL_REQUIRES = [
62 'wheezy.template',
63 'toposort>=1.4',
64 'importlib_metadata; python_version<"3.10"',
65- 'backports.entry_points_selectable',
66+ 'backports.entry_points_selectable; python_version<"3.10"',
67 ]
68
69 # dbus-deviation requires sphinx, which requires python 3.5
70--
712.43.0
72
diff --git a/meta-python/recipes-devtools/hotdoc/hotdoc/0003-CMake-4-compatibility.patch b/meta-python/recipes-devtools/hotdoc/hotdoc/0003-CMake-4-compatibility.patch
new file mode 100644
index 0000000000..056ad5d340
--- /dev/null
+++ b/meta-python/recipes-devtools/hotdoc/hotdoc/0003-CMake-4-compatibility.patch
@@ -0,0 +1,44 @@
1Subject: [PATCH] CMake 4 compatibility
2
3All CMake versions older than 3.10 are deprecated.
4
5Upstream-Status: Backport [https://github.com/MathieuDuponchelle/cmark/commit/bd78193dbff98c3860e77629b5c7bfee6169d1da]
6
7Signed-off-by: Liu Yiding <liuyd.fnst@fujitsu.com>
8---
9 CMakeLists.txt | 11 ++---------
10 extensions/CMakeLists.txt | 2 +-
11 2 files changed, 3 insertions(+), 10 deletions(-)
12
13diff --git a/CMakeLists.txt b/CMakeLists.txt
14index ff97419..45fdf6c 100755
15--- a/CMakeLists.txt
16+++ b/CMakeLists.txt
17@@ -1,12 +1,5 @@
18-cmake_minimum_required(VERSION 2.8.9)
19-
20-# prevent ugly developer warnings because version is set directly, not through project()
21-# it should be redone properly by using VERSION in project() if on CMake 3.x
22-if(CMAKE_MAJOR_VERSION GREATER 2)
23- cmake_policy(SET CMP0048 OLD)
24-endif()
25-
26-project(cmark)
27+cmake_minimum_required(VERSION 3.10)
28+project(cmark VERSION 0.28.3)
29
30 include("FindAsan.cmake")
31
32diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt
33index e62d155..b6a1556 100644
34--- a/extensions/CMakeLists.txt
35+++ b/extensions/CMakeLists.txt
36@@ -1,4 +1,4 @@
37-cmake_minimum_required(VERSION 2.8)
38+cmake_minimum_required(VERSION 3.10)
39 set(LIBRARY "cmarkextensions")
40 set(LIBRARY_SOURCES
41 core-extensions.c
42--
432.43.0
44
diff --git a/meta-python/recipes-devtools/hotdoc/hotdoc/0004-Use-flex-with-noline-option-to-prevent.patch b/meta-python/recipes-devtools/hotdoc/hotdoc/0004-Use-flex-with-noline-option-to-prevent.patch
new file mode 100644
index 0000000000..06adcbd1c2
--- /dev/null
+++ b/meta-python/recipes-devtools/hotdoc/hotdoc/0004-Use-flex-with-noline-option-to-prevent.patch
@@ -0,0 +1,29 @@
1Subject: [PATCH] Use flex with --noline option to prevent adding #line to c file
2
3To fix following do_package QA Issue:
4
5do_package_qa:QA Issue: File /usr/src/debug/hotdoc/0.17.4/hotdoc/parsers/c_comment_scanner/scanner.c in package hotdoc-src contains reference to TMPDIR [buildpaths]
6
7Upstream-Status: Inappropriate [oe-specific]
8
9Signed-off-by: Liu Yiding <liuyd.fnst@fujitsu.com>
10---
11 setup.py | 2 +-
12 1 file changed, 1 insertion(+), 1 deletion(-)
13
14diff --git a/setup.py b/setup.py
15index 9ee504d..9bbc744 100644
16--- a/setup.py
17+++ b/setup.py
18@@ -365,7 +365,7 @@ class FlexExtension (Extension):
19
20 self.sources.append(built_scanner_path)
21 if newer_group(self.__flex_sources, built_scanner_path):
22- cmd = ['flex', '-o', built_scanner_path]
23+ cmd = ['flex', '--noline', '-o', built_scanner_path]
24 for s in self.__flex_sources:
25 cmd.append(s)
26 spawn.spawn(cmd, verbose=1)
27--
282.43.0
29
diff --git a/meta-python/recipes-devtools/hotdoc/hotdoc_0.17.4.bb b/meta-python/recipes-devtools/hotdoc/hotdoc_0.17.4.bb
new file mode 100644
index 0000000000..081a8d9607
--- /dev/null
+++ b/meta-python/recipes-devtools/hotdoc/hotdoc_0.17.4.bb
@@ -0,0 +1,28 @@
1SUMMARY = "Hotdoc is a documentation framework"
2DESCRIPTION = "Hotdoc is a documentation micro-framework. It provides an interface for extensions to plug upon, along with some base objects (formatters, ...)"
3HOMEPAGE = "https://github.com/hotdoc/hotdoc"
4
5LICENSE = "LGPL-2.1-or-later"
6LIC_FILES_CHKSUM = "file://COPYING;md5=90263a49bc1d9a204656fec4d5616c66"
7
8SRC_URI[sha256sum] = "c4d5dff647f03aa87a1d2d06035d2819edd099b91635e3b2ee390829357ae9fc"
9
10SRC_URI = "file://0001-c_comment_scanner-fix-function-prototypes.patch \
11 file://0002-avoid-third-party-backports-dependency-on-sufficient.patch \
12 file://0003-CMake-4-compatibility.patch;patchdir=cmark \
13 "
14
15SRC_URI:append:class-target = "file://0004-Use-flex-with-noline-option-to-prevent.patch"
16
17DEPENDS += "libxml2 glib-2.0 json-glib"
18
19inherit pypi python_setuptools_build_meta pkgconfig
20
21#Fix LIBDIR path to fix buildpaths QA check of hotdoc/parsers/cmark.cpython-314-x86_64-linux-gnu.so
22do_configure:prepend:class-target() {
23 sed -i -e "s#'\"%s\"' % CMARK_BUILD_DIR#'\"${PYTHON_SITEPACKAGES_DIR}/${PN}\"'#" ${S}/setup.py
24}
25
26RDEPENDS:${PN} += "clang python3-appdirs python3-cchardet python3-dbus-deviation python3-lxml python3-networkx python3-pkgconfig python3-pyyaml python3-schema python3-toposort python3-wheezy-template"
27
28BBCLASSEXTEND = "native"
diff --git a/meta-python/recipes-devtools/python/files/0001-remove-pkg_resources-import.patch b/meta-python/recipes-devtools/python/files/0001-remove-pkg_resources-import.patch
new file mode 100644
index 0000000000..6278d58fc1
--- /dev/null
+++ b/meta-python/recipes-devtools/python/files/0001-remove-pkg_resources-import.patch
@@ -0,0 +1,32 @@
1From d9152f0dc31b655654edcee6859b3e3a06ef4c98 Mon Sep 17 00:00:00 2001
2From: Gyorgy Sarvari <skandigraun@gmail.com>
3Date: Sun, 15 Mar 2026 21:16:54 +0100
4Subject: [PATCH] remove pkg_resources import
5
6setutools 82 dropped pkf_resources module. Also, beside importing
7it, it isn't used for anything.
8
9Upstream has started to rework their setup config, and moved to
10build_meta, however that's still in development, and there seem to
11be no stable version yet.
12
13Once there is a new version, most likely this patch can be dropped.
14
15Upstream-Status: Inappropriate [see above]
16Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
17---
18 setup.py | 1 -
19 1 file changed, 1 deletion(-)
20
21diff --git a/setup.py b/setup.py
22index b655222..c2aff91 100644
23--- a/setup.py
24+++ b/setup.py
25@@ -8,7 +8,6 @@ XStatic - setup.py
26 import os
27
28 from setuptools import setup, find_packages
29-import pkg_resources
30
31 # The README.txt file should be written in reST so that PyPI can use
32 # it to generate your project's PyPI page.
diff --git a/meta-python/recipes-devtools/python/python3-aenum_3.1.16.bb b/meta-python/recipes-devtools/python/python3-aenum_3.1.17.bb
index feeee18e34..b6c292c268 100644
--- a/meta-python/recipes-devtools/python/python3-aenum_3.1.16.bb
+++ b/meta-python/recipes-devtools/python/python3-aenum_3.1.17.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://pypi.org/project/aenum/"
3LICENSE = "BSD-3-Clause" 3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://aenum/LICENSE;md5=c6a85477543f8b8591b9c1f82abebbe9" 4LIC_FILES_CHKSUM = "file://aenum/LICENSE;md5=c6a85477543f8b8591b9c1f82abebbe9"
5 5
6SRC_URI[sha256sum] = "bfaf9589bdb418ee3a986d85750c7318d9d2839c1b1a1d6fe8fc53ec201cf140" 6SRC_URI[sha256sum] = "a969a4516b194895de72c875ece355f17c0d272146f7fda346ef74f93cf4d5ba"
7 7
8inherit pypi setuptools3 8inherit pypi setuptools3
9 9
diff --git a/meta-python/recipes-devtools/python/python3-aiofiles_24.1.0.bb b/meta-python/recipes-devtools/python/python3-aiofiles_25.1.0.bb
index 1e9ebdf97d..26cc9e81f3 100644
--- a/meta-python/recipes-devtools/python/python3-aiofiles_24.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-aiofiles_25.1.0.bb
@@ -4,12 +4,16 @@ HOMEPAGE = "https://github.com/aio-libs/aiohttp"
4LICENSE = "Apache-2.0" 4LICENSE = "Apache-2.0"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
6 6
7SRC_URI[sha256sum] = "22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c" 7SRC_URI[sha256sum] = "a8d728f0a29de45dc521f18f07297428d56992a742f0cd2701ba86e44d23d5b2"
8 8
9PYPI_PACKAGE = "aiofiles" 9PYPI_PACKAGE = "aiofiles"
10 10
11inherit pypi python_hatchling 11inherit pypi python_hatchling
12 12
13DEPENDS += "\
14 python3-hatch-vcs-native \
15"
16
13RDEPENDS:${PN} = "\ 17RDEPENDS:${PN} = "\
14 python3-asyncio \ 18 python3-asyncio \
15" 19"
diff --git a/meta-python/recipes-devtools/python/python3-aiohttp_3.13.3.bb b/meta-python/recipes-devtools/python/python3-aiohttp_3.13.5.bb
index 00758a7546..f3a0fbf557 100644
--- a/meta-python/recipes-devtools/python/python3-aiohttp_3.13.3.bb
+++ b/meta-python/recipes-devtools/python/python3-aiohttp_3.13.5.bb
@@ -4,9 +4,14 @@ HOMEPAGE = "https://github.com/aio-libs/aiohttp"
4LICENSE = "Apache-2.0" 4LICENSE = "Apache-2.0"
5LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=748073912af33aa59430d3702aa32d41" 5LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=748073912af33aa59430d3702aa32d41"
6 6
7SRC_URI[sha256sum] = "a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88" 7SRC_URI[sha256sum] = "9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1"
8 8
9CVE_PRODUCT = "aiohttp" 9CVE_PRODUCT = "aiohttp"
10CVE_STATUS_GROUPS = "CVE_AIOHTTP_FIX_3_13_4"
11CVE_AIOHTTP_FIX_3_13_4[status] = "fixed-version: fixed in 3.13.4"
12CVE_AIOHTTP_FIX_3_13_4 = "CVE-2026-22815 CVE-2026-34513 CVE-2026-34514 \
13CVE-2026-34515 CVE-2026-34516 CVE-2026-34517 CVE-2026-34518 CVE-2026-34519 \
14CVE-2026-34520 CVE-2026-34525"
10 15
11inherit python_setuptools_build_meta pypi 16inherit python_setuptools_build_meta pypi
12 17
diff --git a/meta-python/recipes-devtools/python/python3-aiohue_4.8.0.bb b/meta-python/recipes-devtools/python/python3-aiohue_4.8.1.bb
index ac20dcb1c1..d5adf6e0af 100644
--- a/meta-python/recipes-devtools/python/python3-aiohue_4.8.0.bb
+++ b/meta-python/recipes-devtools/python/python3-aiohue_4.8.1.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
4LICENSE = "Apache-2.0" 4LICENSE = "Apache-2.0"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=dab31a1d28183826937f4b152143a33f" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=dab31a1d28183826937f4b152143a33f"
6 6
7SRC_URI[sha256sum] = "78c5af843c916affd8cd7efeddccfc6edd0cca288fe9909c21186fef03606cd0" 7SRC_URI[sha256sum] = "7fddc328add07715001bd3d75a37c730a5befcb4348b120c5259583fb9fa34bb"
8 8
9inherit pypi python_setuptools_build_meta 9inherit pypi python_setuptools_build_meta
10 10
diff --git a/meta-python/recipes-devtools/python/python3-alembic_1.18.0.bb b/meta-python/recipes-devtools/python/python3-alembic_1.18.4.bb
index 39038958f4..92c8a019e1 100644
--- a/meta-python/recipes-devtools/python/python3-alembic_1.18.0.bb
+++ b/meta-python/recipes-devtools/python/python3-alembic_1.18.4.bb
@@ -4,7 +4,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=ff111c41e8748bbfa45e8ba92347b681"
4 4
5inherit pypi python_setuptools_build_meta 5inherit pypi python_setuptools_build_meta
6 6
7SRC_URI[sha256sum] = "0c4c03c927dc54d4c56821bdcc988652f4f63bf7b9017fd9d78d63f09fd22b48" 7SRC_URI[sha256sum] = "cb6e1fd84b6174ab8dbb2329f86d631ba9559dd78df550b57804d607672cedbc"
8 8
9RDEPENDS:${PN} += "\ 9RDEPENDS:${PN} += "\
10 python3-dateutil \ 10 python3-dateutil \
diff --git a/meta-python/recipes-devtools/python/python3-anyio_4.12.1.bb b/meta-python/recipes-devtools/python/python3-anyio_4.13.0.bb
index 40312c761a..e3e4fc9f7e 100644
--- a/meta-python/recipes-devtools/python/python3-anyio_4.12.1.bb
+++ b/meta-python/recipes-devtools/python/python3-anyio_4.13.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=c0a769411d2af7894099e8ff75058c9f"
5 5
6inherit pypi python_setuptools_build_meta 6inherit pypi python_setuptools_build_meta
7 7
8SRC_URI[sha256sum] = "41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703" 8SRC_URI[sha256sum] = "334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc"
9 9
10DEPENDS += " \ 10DEPENDS += " \
11 python3-setuptools-scm-native \ 11 python3-setuptools-scm-native \
diff --git a/meta-python/recipes-devtools/python/python3-apiflask_3.0.0.bb b/meta-python/recipes-devtools/python/python3-apiflask_3.1.0.bb
index 3b9912454d..25b5075181 100644
--- a/meta-python/recipes-devtools/python/python3-apiflask_3.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-apiflask_3.1.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=5f89d1b0dec37448d4f4163dc3c40e64"
5 5
6inherit pypi python_setuptools_build_meta 6inherit pypi python_setuptools_build_meta
7 7
8SRC_URI[sha256sum] = "2b8420a23b93a78407ef5fe3e1f79cdfc7baa9b3c53977a06d6ab68772a7c2b7" 8SRC_URI[sha256sum] = "44ac6de494054e6988afea9d1b9272c36e83ecc8a64c7fbab0b877c0d3820d0f"
9 9
10RDEPENDS:${PN} += "\ 10RDEPENDS:${PN} += "\
11 python3-apispec \ 11 python3-apispec \
diff --git a/meta-python/recipes-devtools/python/python3-apispec_6.9.0.bb b/meta-python/recipes-devtools/python/python3-apispec_6.10.0.bb
index 4b6f3b51c6..52ebc43c6e 100644
--- a/meta-python/recipes-devtools/python/python3-apispec_6.9.0.bb
+++ b/meta-python/recipes-devtools/python/python3-apispec_6.10.0.bb
@@ -5,6 +5,6 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=a75956865b40c80a37c1e864716592b4"
5 5
6inherit pypi python_flit_core 6inherit pypi python_flit_core
7 7
8SRC_URI[sha256sum] = "7a38ce7c3eedc7771e6e33295afdd8c4b0acdd9865b483f8cf6cc369c93e8d1e" 8SRC_URI[sha256sum] = "0a888555cd4aa5fb7176041be15684154fd8961055e1672e703abf737e8761bf"
9 9
10RDEPENDS:${PN} += "python3-packaging" 10RDEPENDS:${PN} += "python3-packaging"
diff --git a/meta-python/recipes-devtools/python/python3-appdirs_1.4.4.bb b/meta-python/recipes-devtools/python/python3-appdirs_1.4.4.bb
index bee0b7d815..c027e80b28 100644
--- a/meta-python/recipes-devtools/python/python3-appdirs_1.4.4.bb
+++ b/meta-python/recipes-devtools/python/python3-appdirs_1.4.4.bb
@@ -1,4 +1,5 @@
1SUMMARY = "A small Python module for determining appropriate + platform-specific dirs, e.g. a user data dir." 1SUMMARY = "A small Python module for determining appropriate + platform-specific dirs, e.g. a user data dir."
2HOMEPAGE = "https://github.com/ActiveState/appdirs"
2LICENSE = "MIT" 3LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=31625363c45eb0c67c630a2f73e438e4" 4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=31625363c45eb0c67c630a2f73e438e4"
4 5
diff --git a/meta-python/recipes-devtools/python/python3-asgiref_3.11.0.bb b/meta-python/recipes-devtools/python/python3-asgiref_3.11.1.bb
index 6cf2e73e7a..e372d4771b 100644
--- a/meta-python/recipes-devtools/python/python3-asgiref_3.11.0.bb
+++ b/meta-python/recipes-devtools/python/python3-asgiref_3.11.1.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
4LICENSE = "BSD-3-Clause" 4LICENSE = "BSD-3-Clause"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=f09eb47206614a4954c51db8a94840fa" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=f09eb47206614a4954c51db8a94840fa"
6 6
7SRC_URI[sha256sum] = "13acff32519542a1736223fb79a715acdebe24286d98e8b164a73085f40da2c4" 7SRC_URI[sha256sum] = "5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce"
8 8
9export BUILD_SYS 9export BUILD_SYS
10export HOST_SYS 10export HOST_SYS
diff --git a/meta-python/recipes-devtools/python/python3-astroid_4.0.3.bb b/meta-python/recipes-devtools/python/python3-astroid_4.1.2.bb
index efa59fc198..1e7372f692 100644
--- a/meta-python/recipes-devtools/python/python3-astroid_4.0.3.bb
+++ b/meta-python/recipes-devtools/python/python3-astroid_4.1.2.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
4LICENSE = "LGPL-2.1-only" 4LICENSE = "LGPL-2.1-only"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=a70cf540abf41acb644ac3b621b2fad1" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=a70cf540abf41acb644ac3b621b2fad1"
6 6
7SRC_URI[sha256sum] = "08d1de40d251cc3dc4a7a12726721d475ac189e4e583d596ece7422bc176bda3" 7SRC_URI[sha256sum] = "d6c4a52bfcda4bbeb7359dead642b0248b90f7d9a07e690230bd86fefd6d37f1"
8 8
9inherit pypi python_setuptools_build_meta 9inherit pypi python_setuptools_build_meta
10 10
@@ -20,7 +20,7 @@ FILES:${PN}-tests += " \
20 ${PYTHON_SITEPACKAGES_DIR}/astroid/__pycache__/test* \ 20 ${PYTHON_SITEPACKAGES_DIR}/astroid/__pycache__/test* \
21" 21"
22 22
23RDEPENDS:${PN}:class-target += "\ 23RDEPENDS:${PN}:append:class-target = " \
24 python3-lazy-object-proxy \ 24 python3-lazy-object-proxy \
25 python3-logging \ 25 python3-logging \
26 python3-six \ 26 python3-six \
@@ -29,7 +29,7 @@ RDEPENDS:${PN}:class-target += "\
29 python3-typing-extensions \ 29 python3-typing-extensions \
30" 30"
31 31
32RDEPENDS:${PN}-tests:class-target += "\ 32RDEPENDS:${PN}-tests:append:class-target = " \
33 python3-unittest \ 33 python3-unittest \
34 python3-xml \ 34 python3-xml \
35" 35"
diff --git a/meta-python/recipes-devtools/python/python3-asyncinotify_4.3.2.bb b/meta-python/recipes-devtools/python/python3-asyncinotify_4.4.2.bb
index 810a142fac..bdda38734d 100644
--- a/meta-python/recipes-devtools/python/python3-asyncinotify_4.3.2.bb
+++ b/meta-python/recipes-devtools/python/python3-asyncinotify_4.4.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://gitlab.com/Taywee/asyncinotify"
3LICENSE = "MPL-2.0" 3LICENSE = "MPL-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=f75d2927d3c1ed2414ef72048f5ad640" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=f75d2927d3c1ed2414ef72048f5ad640"
5 5
6SRC_URI[sha256sum] = "3321deedc443c8402229a423623d3ae2fc17c433b9b9bfe170828ee0c7ea3871" 6SRC_URI[sha256sum] = "52ad97aa5332dd78592ab9c64171f2953447d98f9170b9bd440c5d19b17d0416"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
diff --git a/meta-python/recipes-devtools/python/python3-autoflake_2.3.1.bb b/meta-python/recipes-devtools/python/python3-autoflake_2.3.3.bb
index 0a44d751fb..8767d6f4d5 100644
--- a/meta-python/recipes-devtools/python/python3-autoflake_2.3.1.bb
+++ b/meta-python/recipes-devtools/python/python3-autoflake_2.3.3.bb
@@ -3,7 +3,7 @@ SECTION = "devel/python"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=88246be6a34c1496c253f58599f3db85" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=88246be6a34c1496c253f58599f3db85"
5 5
6SRC_URI[sha256sum] = "c98b75dc5b0a86459c4f01a1d32ac7eb4338ec4317a4469515ff1e687ecd909e" 6SRC_URI[sha256sum] = "c24809541e23999f7a7b0d2faadf15deb0bc04cdde49728a2fd943a0c8055504"
7 7
8inherit pypi python_hatchling 8inherit pypi python_hatchling
9 9
diff --git a/meta-python/recipes-devtools/python/python3-bandit_1.9.2.bb b/meta-python/recipes-devtools/python/python3-bandit_1.9.4.bb
index 55f911bd3f..d8e6f9da87 100644
--- a/meta-python/recipes-devtools/python/python3-bandit_1.9.2.bb
+++ b/meta-python/recipes-devtools/python/python3-bandit_1.9.4.bb
@@ -2,7 +2,7 @@ SUMMARY = "Security oriented static analyser for python code."
2LICENSE = "Apache-2.0" 2LICENSE = "Apache-2.0"
3LIC_FILES_CHKSUM = "file://LICENSE;md5=34400b68072d710fecd0a2940a0d1658" 3LIC_FILES_CHKSUM = "file://LICENSE;md5=34400b68072d710fecd0a2940a0d1658"
4 4
5SRC_URI[sha256sum] = "32410415cd93bf9c8b91972159d5cf1e7f063a9146d70345641cd3877de348ce" 5SRC_URI[sha256sum] = "b589e5de2afe70bd4d53fa0c1da6199f4085af666fde00e8a034f152a52cd628"
6 6
7DEPENDS = "python3-pbr-native python3-git python3-pbr python3-pyyaml python3-six python3-stevedore" 7DEPENDS = "python3-pbr-native python3-git python3-pbr python3-pyyaml python3-six python3-stevedore"
8 8
diff --git a/meta-python/recipes-devtools/python/python3-bitarray_3.8.0.bb b/meta-python/recipes-devtools/python/python3-bitarray_3.8.1.bb
index 4cacd79522..6ef0f4202a 100644
--- a/meta-python/recipes-devtools/python/python3-bitarray_3.8.0.bb
+++ b/meta-python/recipes-devtools/python/python3-bitarray_3.8.1.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "https://github.com/ilanschnell/bitarray"
4LICENSE = "PSF-2.0" 4LICENSE = "PSF-2.0"
5LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=6abe80c028e4ee53045a33ae807c64fd" 5LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=6abe80c028e4ee53045a33ae807c64fd"
6 6
7SRC_URI[sha256sum] = "3eae38daffd77c9621ae80c16932eea3fb3a4af141fb7cc724d4ad93eff9210d" 7SRC_URI[sha256sum] = "f90bb3c680804ec9630bcf8c0965e54b4de84d33b17d7da57c87c30f0c64c6f5"
8 8
9inherit python_setuptools_build_meta pypi 9inherit python_setuptools_build_meta pypi
10 10
diff --git a/meta-python/recipes-devtools/python/python3-bitstring_4.3.1.bb b/meta-python/recipes-devtools/python/python3-bitstring_4.4.0.bb
index 31b4330c21..cec183f302 100644
--- a/meta-python/recipes-devtools/python/python3-bitstring_4.3.1.bb
+++ b/meta-python/recipes-devtools/python/python3-bitstring_4.4.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/scott-griffiths/bitstring"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=963a24c175e658fbf16a764135121ffa" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=963a24c175e658fbf16a764135121ffa"
5 5
6SRC_URI[sha256sum] = "a08bc09d3857216d4c0f412a1611056f1cc2b64fd254fb1e8a0afba7cfa1a95a" 6SRC_URI[sha256sum] = "e682ac522bb63e041d16cbc9d0ca86a4f00194db16d0847c7efe066f836b2e37"
7 7
8inherit pypi python_poetry_core 8inherit pypi python_poetry_core
9 9
diff --git a/meta-python/recipes-devtools/python/python3-bitstruct_8.21.0.bb b/meta-python/recipes-devtools/python/python3-bitstruct_8.22.1.bb
index 9431473548..62adcb35b8 100644
--- a/meta-python/recipes-devtools/python/python3-bitstruct_8.21.0.bb
+++ b/meta-python/recipes-devtools/python/python3-bitstruct_8.22.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/eerimoq/bitstruct"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=d9aa4ec07de78abae21c490c9ffe61bd" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=d9aa4ec07de78abae21c490c9ffe61bd"
5 5
6SRC_URI[sha256sum] = "ff0be4968a45caf8688e075f55cca7a3fe9212b069ba67e5b27b0926a11948ac" 6SRC_URI[sha256sum] = "97588318c906c60d33129e0061dd830b03d793c517033d312487c75426d1e808"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
diff --git a/meta-python/recipes-devtools/python/python3-black_26.1.0.bb b/meta-python/recipes-devtools/python/python3-black_26.3.1.bb
index bcb0f0f408..9589530d73 100644
--- a/meta-python/recipes-devtools/python/python3-black_26.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-black_26.3.1.bb
@@ -4,7 +4,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=d3465a2a183908c9cb95bf490bd1e7ab \
4 file://docs/license.md;md5=d826b3c5269f21a8a0272af3f00d15c0 \ 4 file://docs/license.md;md5=d826b3c5269f21a8a0272af3f00d15c0 \
5 file://src/blib2to3/LICENSE;md5=bbbad7490e921f9a73c0e891305cb4b3" 5 file://src/blib2to3/LICENSE;md5=bbbad7490e921f9a73c0e891305cb4b3"
6 6
7SRC_URI[sha256sum] = "d294ac3340eef9c9eb5d29288e96dc719ff269a88e27b396340459dd85da4c58" 7SRC_URI[sha256sum] = "2c50f5063a9641c7eed7795014ba37b0f5fa227f3d408b968936e24bc0566b07"
8 8
9inherit pypi python_hatchling 9inherit pypi python_hatchling
10 10
diff --git a/meta-python/recipes-devtools/python/python3-bleak_2.1.1.bb b/meta-python/recipes-devtools/python/python3-bleak_3.0.1.bb
index 03f2ed062c..89f7c973d5 100644
--- a/meta-python/recipes-devtools/python/python3-bleak_2.1.1.bb
+++ b/meta-python/recipes-devtools/python/python3-bleak_3.0.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/hbldh/bleak"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=bcbc2069a86cba1b5e47253679f66ed7" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=bcbc2069a86cba1b5e47253679f66ed7"
5 5
6SRCREV = "5d76a62a549a4674c64ee151d38e2339e8ba948a" 6SRCREV = "3f967abe9ef454bd494055612a067f2128944df2"
7PYPI_SRC_URI = "git://github.com/hbldh/bleak.git;protocol=https;branch=develop;destsuffix=${S};tag=v${PV}" 7PYPI_SRC_URI = "git://github.com/hbldh/bleak.git;protocol=https;branch=develop;destsuffix=${S};tag=v${PV}"
8 8
9SRC_URI:append = " file://run-ptest" 9SRC_URI:append = " file://run-ptest"
diff --git a/meta-python/recipes-devtools/python/python3-bumble_0.0.221.bb b/meta-python/recipes-devtools/python/python3-bumble_0.0.226.bb
index 87a0b8376b..d5cc66f74d 100644
--- a/meta-python/recipes-devtools/python/python3-bumble_0.0.221.bb
+++ b/meta-python/recipes-devtools/python/python3-bumble_0.0.226.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/google/bumble"
3LICENSE = "Apache-2.0" 3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=7a775f1b11285b6abedd76748d176125" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=7a775f1b11285b6abedd76748d176125"
5 5
6SRC_URI[sha256sum] = "44e9ed8aab0aba256491c2acedd3080b48bb070cdb6776017d6d794e035f0dec" 6SRC_URI[sha256sum] = "e96f62c282a7376ab56b2f799e232d0985a8965e049030c50a59c4ff0b10f592"
7 7
8inherit pypi python_setuptools_build_meta ptest-python-pytest 8inherit pypi python_setuptools_build_meta ptest-python-pytest
9 9
diff --git a/meta-python/recipes-devtools/python/python3-cachetools_6.2.4.bb b/meta-python/recipes-devtools/python/python3-cachetools_7.0.4.bb
index 51a9f29ff5..f6d9d80454 100644
--- a/meta-python/recipes-devtools/python/python3-cachetools_6.2.4.bb
+++ b/meta-python/recipes-devtools/python/python3-cachetools_7.0.4.bb
@@ -6,7 +6,7 @@ Python 3 Standard Library @lru_cache function decorator."
6SECTION = "devel/python" 6SECTION = "devel/python"
7 7
8LICENSE = "MIT" 8LICENSE = "MIT"
9LIC_FILES_CHKSUM = "file://LICENSE;md5=e21bbe53b2730bfe1911cf381b81821e" 9LIC_FILES_CHKSUM = "file://LICENSE;md5=079933dfba36eb60b5e3512ca0ab61ae"
10 10
11inherit pypi python_setuptools_build_meta ptest-python-pytest 11inherit pypi python_setuptools_build_meta ptest-python-pytest
12 12
@@ -14,6 +14,6 @@ RDEPENDS:${PN} += " \
14 python3-math \ 14 python3-math \
15" 15"
16 16
17SRC_URI[sha256sum] = "82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607" 17SRC_URI[sha256sum] = "7042c0e4eea87812f04744ce6ee9ed3de457875eb1f82d8a206c46d6e48b6734"
18 18
19BBCLASSEXTEND = "native nativesdk" 19BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-can_4.6.1.bb b/meta-python/recipes-devtools/python/python3-can_4.6.1.bb
index 04ce22346c..a2746511f8 100644
--- a/meta-python/recipes-devtools/python/python3-can_4.6.1.bb
+++ b/meta-python/recipes-devtools/python/python3-can_4.6.1.bb
@@ -26,7 +26,6 @@ RDEPENDS:${PN} += "\
26 python3-msgpack \ 26 python3-msgpack \
27 python3-netserver \ 27 python3-netserver \
28 python3-packaging \ 28 python3-packaging \
29 python3-pkg-resources \
30 python3-setuptools \ 29 python3-setuptools \
31 python3-sqlite3 \ 30 python3-sqlite3 \
32 python3-typing-extensions \ 31 python3-typing-extensions \
diff --git a/meta-python/recipes-devtools/python/python3-cassandra-driver/0001-skip-verifying-the-availability-of-setuptools.patch b/meta-python/recipes-devtools/python/python3-cassandra-driver/0001-skip-verifying-the-availability-of-setuptools.patch
new file mode 100644
index 0000000000..b58fd04752
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-cassandra-driver/0001-skip-verifying-the-availability-of-setuptools.patch
@@ -0,0 +1,34 @@
1From ebee090ac020c5a4e4194788fc2f53d7a4e30b40 Mon Sep 17 00:00:00 2001
2From: Gyorgy Sarvari <skandigraun@gmail.com>
3Date: Sun, 15 Mar 2026 21:28:07 +0100
4Subject: [PATCH] skip verifying the availability of setuptools
5
6The setup script checks is setuptools is available (with the correct minimum
7version), using setuptool's pkg_resouces modules. Setuptools has dropped
8this module in version 82, making this import fail.
9
10This patch skips the availability check of Setuptools, it is expected to be
11always available from oe-core - the patch itself is oe-specific.
12
13Upstream has already prepared a solution to rework their setup script to
14work with the latest Setuptools, however that patch builds on several other
15patches.
16
17Upstream-Status: Inappropriate [oe-specific]
18Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
19---
20 ez_setup.py | 1 +
21 1 file changed, 1 insertion(+)
22
23diff --git a/ez_setup.py b/ez_setup.py
24index 76e7105..c668e5d 100644
25--- a/ez_setup.py
26+++ b/ez_setup.py
27@@ -107,6 +107,7 @@ def _do_download(version, download_base, to_dir, download_delay):
28
29 def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
30 to_dir=os.curdir, download_delay=15):
31+ return
32 # making sure we use the absolute path
33 to_dir = os.path.abspath(to_dir)
34 was_imported = 'pkg_resources' in sys.modules or \
diff --git a/meta-python/recipes-devtools/python/python3-cassandra-driver_3.29.2.bb b/meta-python/recipes-devtools/python/python3-cassandra-driver_3.29.3.bb
index f60167d309..6ab86300f5 100644
--- a/meta-python/recipes-devtools/python/python3-cassandra-driver_3.29.2.bb
+++ b/meta-python/recipes-devtools/python/python3-cassandra-driver_3.29.3.bb
@@ -8,9 +8,12 @@ LICENSE = "Apache-2.0"
8LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93" 8LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93"
9SRCNAME = "cassandra-driver" 9SRCNAME = "cassandra-driver"
10 10
11SRC_URI[sha256sum] = "c4310a7d0457f51a63fb019d8ef501588c491141362b53097fbc62fa06559b7c" 11SRC_URI += "file://0001-skip-verifying-the-availability-of-setuptools.patch"
12SRC_URI[sha256sum] = "ff6b82ee4533f6fd4474d833e693b44b984f58337173ee98ed76bce08721a636"
12 13
13inherit pypi setuptools3 14PYPI_PACKAGE = "cassandra_driver"
15
16inherit pypi python_setuptools_build_meta
14 17
15RDEPENDS:${PN} += "\ 18RDEPENDS:${PN} += "\
16 python3-cython \ 19 python3-cython \
diff --git a/meta-python/recipes-devtools/python/python3-cbor2_5.8.0.bb b/meta-python/recipes-devtools/python/python3-cbor2_5.9.0.bb
index c0a7061657..42d661ead3 100644
--- a/meta-python/recipes-devtools/python/python3-cbor2_5.8.0.bb
+++ b/meta-python/recipes-devtools/python/python3-cbor2_5.9.0.bb
@@ -3,7 +3,7 @@ LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a79e64179819c7ce293372c059f1dbd8" 3LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a79e64179819c7ce293372c059f1dbd8"
4DEPENDS += "python3-setuptools-scm-native" 4DEPENDS += "python3-setuptools-scm-native"
5 5
6SRC_URI[sha256sum] = "b19c35fcae9688ac01ef75bad5db27300c2537eb4ee00ed07e05d8456a0d4931" 6SRC_URI[sha256sum] = "85c7a46279ac8f226e1059275221e6b3d0e370d2bb6bd0500f9780781615bcea"
7 7
8inherit pypi python_setuptools_build_meta ptest-python-pytest 8inherit pypi python_setuptools_build_meta ptest-python-pytest
9 9
diff --git a/meta-python/recipes-devtools/python/python3-charset-normalizer_3.4.4.bb b/meta-python/recipes-devtools/python/python3-charset-normalizer_3.4.7.bb
index 38086ca017..b9dffb21e4 100644
--- a/meta-python/recipes-devtools/python/python3-charset-normalizer_3.4.4.bb
+++ b/meta-python/recipes-devtools/python/python3-charset-normalizer_3.4.7.bb
@@ -3,9 +3,7 @@ HOMEPAGE = "https://github.com/ousret/charset_normalizer"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=48178f3fc1374ad7e830412f812bde05" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=48178f3fc1374ad7e830412f812bde05"
5 5
6#SRC_URI += "file://0001-pyproject.toml-Update-mypy-requirement.patch" 6SRC_URI[sha256sum] = "ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5"
7
8SRC_URI[sha256sum] = "94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"
9 7
10DEPENDS += "python3-setuptools-scm-native python3-mypy-native" 8DEPENDS += "python3-setuptools-scm-native python3-mypy-native"
11 9
diff --git a/meta-python/recipes-devtools/python/python3-ckzg/python-ckzg-0001-Let-override-CC.patch b/meta-python/recipes-devtools/python/python3-ckzg/python-ckzg-0001-Let-override-CC.patch
deleted file mode 100644
index c58089cc15..0000000000
--- a/meta-python/recipes-devtools/python/python3-ckzg/python-ckzg-0001-Let-override-CC.patch
+++ /dev/null
@@ -1,21 +0,0 @@
1From: Peter Lemenkov <lemenkov@gmail.com>
2Date: Wed, 6 Nov 2024 16:35:23 +0300
3Subject: [PATCH] Let override CC
4
5Upstream-Status: Pending
6
7Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
8
9diff --git a/src/Makefile b/src/Makefile
10index b733a11..c688005 100644
11--- a/src/Makefile
12+++ b/src/Makefile
13@@ -79,7 +79,7 @@ ifeq ($(PLATFORM),Windows)
14 CFLAGS += -D_CRT_SECURE_NO_WARNINGS
15 CFLAGS += -Wno-missing-braces -Wno-format
16 else
17- CC = clang
18+ CC ?= clang
19 CFLAGS += -fPIC
20 CFLAGS += -Wmissing-braces -Wformat=2
21 endif
diff --git a/meta-python/recipes-devtools/python/python3-ckzg/python-ckzg-0002-Disable-Werror.patch b/meta-python/recipes-devtools/python/python3-ckzg/python-ckzg-0002-Disable-Werror.patch
deleted file mode 100644
index 9b0baa358a..0000000000
--- a/meta-python/recipes-devtools/python/python3-ckzg/python-ckzg-0002-Disable-Werror.patch
+++ /dev/null
@@ -1,30 +0,0 @@
1From: rpm-build <rpm-build>
2Date: Tue, 26 Nov 2024 11:13:18 +0100
3Subject: [PATCH] Disable Werror
4
5Upstream-Status: Pending
6
7Signed-off-by: rpm-build <rpm-build>
8
9diff --git a/src/Makefile b/src/Makefile
10index c688005..01b7a80 100644
11--- a/src/Makefile
12+++ b/src/Makefile
13@@ -20,7 +20,7 @@ ifeq ($(PLATFORM),Darwin)
14 endif
15
16 # The base compiler flags. More can be added on command line.
17-CFLAGS += -I. -I../inc -O2 -Werror
18+CFLAGS += -I. -I../inc
19 # Enable a bunch of optional warnings.
20 CFLAGS += \
21 -pedantic \
22@@ -81,7 +81,7 @@ ifeq ($(PLATFORM),Windows)
23 else
24 CC ?= clang
25 CFLAGS += -fPIC
26- CFLAGS += -Wmissing-braces -Wformat=2
27+ CFLAGS += -Wmissing-braces
28 endif
29
30 # Settings for blst.
diff --git a/meta-python/recipes-devtools/python/python3-ckzg_2.1.1.bb b/meta-python/recipes-devtools/python/python3-ckzg_2.1.7.bb
index 5a6196bf75..b01bd2d78d 100644
--- a/meta-python/recipes-devtools/python/python3-ckzg_2.1.1.bb
+++ b/meta-python/recipes-devtools/python/python3-ckzg_2.1.7.bb
@@ -6,10 +6,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
6 6
7SRC_URI += " \ 7SRC_URI += " \
8 file://blst-0001-Support-64-bit-limbs-on-no-asm-platforms.patch \ 8 file://blst-0001-Support-64-bit-limbs-on-no-asm-platforms.patch \
9 file://python-ckzg-0001-Let-override-CC.patch \
10 file://python-ckzg-0002-Disable-Werror.patch \
11" 9"
12 10
13SRC_URI[sha256sum] = "d6b306b7ec93a24e4346aa53d07f7f75053bc0afc7398e35fa649e5f9d48fcc4" 11SRC_URI[sha256sum] = "a0c61c5fd573af0267bcb435ef0f499911289ceb05e863480779ea284a3bb928"
14 12
15inherit pypi setuptools3 13inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-cmake_4.2.1.bb b/meta-python/recipes-devtools/python/python3-cmake_4.3.1.bb
index 88f9ff38a0..5787b73d98 100644
--- a/meta-python/recipes-devtools/python/python3-cmake_4.2.1.bb
+++ b/meta-python/recipes-devtools/python/python3-cmake_4.3.1.bb
@@ -11,7 +11,7 @@ PYPI_PACKAGE = "cmake"
11PYPI_ARCHIVE_NAME_PREFIX = "pypi-" 11PYPI_ARCHIVE_NAME_PREFIX = "pypi-"
12 12
13inherit pypi python_setuptools_build_meta 13inherit pypi python_setuptools_build_meta
14SRC_URI[sha256sum] = "a07a790ca65946667c0fb286549e8e0b5a850e2f8170ae60d3418573011ca218" 14SRC_URI[sha256sum] = "6fe523413cdd2568a19a6ec297b8f869a95a3f8edaf0dd73731b81412216e00e"
15 15
16SRC_URI += " \ 16SRC_URI += " \
17 file://CMakeLists.txt \ 17 file://CMakeLists.txt \
diff --git a/meta-python/recipes-devtools/python/python3-cmd2_3.1.0.bb b/meta-python/recipes-devtools/python/python3-cmd2_3.4.0.bb
index 911d0989ff..2ed0bdc769 100644
--- a/meta-python/recipes-devtools/python/python3-cmd2_3.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-cmd2_3.4.0.bb
@@ -1,11 +1,11 @@
1SUMMARY = "Extra features for standard library's cmd module" 1SUMMARY = "Extra features for standard library's cmd module"
2HOMEPAGE = "https://github.com/python-cmd2/cmd2" 2HOMEPAGE = "https://github.com/python-cmd2/cmd2"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=26efe44f9946f43292f90070d9d5590c" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=f2a861642858e0858af9dd4e4716bae0"
5 5
6DEPENDS += "python3-setuptools-scm-native" 6DEPENDS += "python3-setuptools-scm-native"
7 7
8SRC_URI[sha256sum] = "cce3aece018b0b1055988adaa2b687ac9c1df38bfd2abfc29dbeb51a9707de33" 8SRC_URI[sha256sum] = "fd43ef7540609469f055858146f2c592ca4c58e3c336b5efbc5502459ab0bdb2"
9 9
10inherit pypi python_setuptools_build_meta python3native 10inherit pypi python_setuptools_build_meta python3native
11 11
diff --git a/meta-python/recipes-devtools/python/python3-configargparse_1.7.1.bb b/meta-python/recipes-devtools/python/python3-configargparse_1.7.5.bb
index c056109c5a..49df56d75b 100644
--- a/meta-python/recipes-devtools/python/python3-configargparse_1.7.1.bb
+++ b/meta-python/recipes-devtools/python/python3-configargparse_1.7.5.bb
@@ -3,12 +3,14 @@ HOMEPAGE = "https://github.com/bw2/ConfigArgParse"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=da746463714cc35999ed9a42339f2943" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=da746463714cc35999ed9a42339f2943"
5 5
6SRC_URI[sha256sum] = "79c2ddae836a1e5914b71d58e4b9adbd9f7779d4e6351a637b7d2d9b6c46d3d9" 6SRC_URI[sha256sum] = "e3f9a7bb6be34d66b2e3c4a2f58e3045f8dfae47b0dc039f87bcfaa0f193fb0f"
7 7
8PYPI_PACKAGE = "configargparse" 8PYPI_PACKAGE = "configargparse"
9UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 9UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
10 10
11inherit pypi setuptools3 11inherit pypi python_setuptools_build_meta
12
13DEPENDS += "python3-setuptools-scm-native"
12 14
13PACKAGECONFIG ?= "yaml" 15PACKAGECONFIG ?= "yaml"
14PACKAGECONFIG[yaml] = ",,,python3-pyyaml" 16PACKAGECONFIG[yaml] = ",,,python3-pyyaml"
diff --git a/meta-python/recipes-devtools/python/python3-coverage_7.13.1.bb b/meta-python/recipes-devtools/python/python3-coverage_7.13.5.bb
index d3e98c6987..3cdce95d34 100644
--- a/meta-python/recipes-devtools/python/python3-coverage_7.13.1.bb
+++ b/meta-python/recipes-devtools/python/python3-coverage_7.13.5.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://coverage.readthedocs.io"
3LICENSE = "Apache-2.0" 3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2ee41112a44fe7014dce33e26468ba93" 4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2ee41112a44fe7014dce33e26468ba93"
5 5
6SRC_URI[sha256sum] = "b7593fe7eb5feaa3fbb461ac79aac9f9fc0387a5ca8080b0c6fe2ca27b091afd" 6SRC_URI[sha256sum] = "c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
diff --git a/meta-python/recipes-devtools/python/python3-croniter_6.0.0.bb b/meta-python/recipes-devtools/python/python3-croniter_6.2.2.bb
index 201074e1e3..d217161d7d 100644
--- a/meta-python/recipes-devtools/python/python3-croniter_6.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-croniter_6.2.2.bb
@@ -5,9 +5,9 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=b8ee59850b882cbf623188489ea748e2"
5 5
6PYPI_PACKAGE = "croniter" 6PYPI_PACKAGE = "croniter"
7 7
8SRC_URI[sha256sum] = "37c504b313956114a983ece2c2b07790b1f1094fe9d81cc94739214748255577" 8SRC_URI[sha256sum] = "ba60832a5ec8e12e51b8691c3309a113d1cf6526bdf1a48150ce8ec7a532d0ab"
9 9
10inherit pypi setuptools3 10inherit pypi python_hatchling
11 11
12RDEPENDS:${PN} += " \ 12RDEPENDS:${PN} += " \
13 python3-dateutil \ 13 python3-dateutil \
diff --git a/meta-python/recipes-devtools/python/python3-cssselect2_0.8.0.bb b/meta-python/recipes-devtools/python/python3-cssselect2_0.9.0.bb
index 20165a098c..7353e498eb 100644
--- a/meta-python/recipes-devtools/python/python3-cssselect2_0.8.0.bb
+++ b/meta-python/recipes-devtools/python/python3-cssselect2_0.9.0.bb
@@ -6,7 +6,7 @@ DESCRIPTION = "cssselect2 is a straightforward implementation of CSS4 Selectors
6LICENSE = "BSD-3-Clause" 6LICENSE = "BSD-3-Clause"
7LIC_FILES_CHKSUM = "file://LICENSE;md5=aa7228954285c7398bb6711fee73b4ac" 7LIC_FILES_CHKSUM = "file://LICENSE;md5=aa7228954285c7398bb6711fee73b4ac"
8 8
9SRC_URI[sha256sum] = "7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a" 9SRC_URI[sha256sum] = "759aa22c216326356f65e62e791d66160a0f9c91d1424e8d8adc5e74dddfc6fb"
10 10
11inherit pypi python_setuptools_build_meta 11inherit pypi python_setuptools_build_meta
12 12
diff --git a/meta-python/recipes-devtools/python/python3-cucumber-tag-expressions_6.2.0.bb b/meta-python/recipes-devtools/python/python3-cucumber-tag-expressions_9.1.0.bb
index 6ddc489f8a..add7031f1e 100644
--- a/meta-python/recipes-devtools/python/python3-cucumber-tag-expressions_6.2.0.bb
+++ b/meta-python/recipes-devtools/python/python3-cucumber-tag-expressions_9.1.0.bb
@@ -2,9 +2,9 @@ SUMMARY = "Cucumber tag expression parser"
2DESCRIPTION = "Provides a tag-expression parser and evaluation logic for cucumber/behave" 2DESCRIPTION = "Provides a tag-expression parser and evaluation logic for cucumber/behave"
3HOMEPAGE = "https://github.com/cucumber/tag-expressions" 3HOMEPAGE = "https://github.com/cucumber/tag-expressions"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=8227180126797a0148f94f483f3e1489" 5LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=134f1026f0de92fd30e71976590a2868"
6 6
7SRC_URI[sha256sum] = "b60aa2cdbf9ac43e28d9b0e4fd49edf9f09d5d941257d2912f5228f9d166c023" 7SRC_URI[sha256sum] = "d960383d5885300ebcbcb14e41657946fde2a59d5c0f485eb291bc6a0e228acc"
8 8
9inherit pypi python_setuptools_build_meta 9inherit pypi python_setuptools_build_meta
10 10
@@ -12,4 +12,5 @@ PYPI_PACKAGE = "cucumber_tag_expressions"
12 12
13DEPENDS += "\ 13DEPENDS += "\
14 python3-setuptools-scm-native \ 14 python3-setuptools-scm-native \
15 python3-uv-build-native \
15" 16"
diff --git a/meta-python/recipes-devtools/python/python3-dateparser_1.2.2.bb b/meta-python/recipes-devtools/python/python3-dateparser_1.4.0.bb
index b66900aebb..27f9da83b6 100644
--- a/meta-python/recipes-devtools/python/python3-dateparser_1.2.2.bb
+++ b/meta-python/recipes-devtools/python/python3-dateparser_1.4.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/scrapinghub/dateparser"
3LICENSE = "BSD-3-Clause" 3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=3d3ed25571191e7aa3f55d0a6efe0051" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=3d3ed25571191e7aa3f55d0a6efe0051"
5 5
6SRC_URI[sha256sum] = "986316f17cb8cdc23ea8ce563027c5ef12fc725b6fb1d137c14ca08777c5ecf7" 6SRC_URI[sha256sum] = "97a21840d5ecdf7630c584f673338a5afac5dfe84f647baf4d7e8df98f9354a4"
7 7
8PYPI_PACKAGE = "dateparser" 8PYPI_PACKAGE = "dateparser"
9 9
diff --git a/meta-python/recipes-devtools/python/python3-dbus-deviation/0001-Prevent-trying-to-donwload-requierment-which-will-ca.patch b/meta-python/recipes-devtools/python/python3-dbus-deviation/0001-Prevent-trying-to-donwload-requierment-which-will-ca.patch
new file mode 100644
index 0000000000..b163db772c
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-dbus-deviation/0001-Prevent-trying-to-donwload-requierment-which-will-ca.patch
@@ -0,0 +1,27 @@
1Subject: [PATCH] Prevent trying to donwload requierment which will cause
2 network error.
3
4'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f1e83062ad0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/setuptools-git/
5
6Upstream-Status: Inappropriate [oe specific]
7
8Signed-off-by: Liu Yiding <liuyd.fnst@fujitsu.com>
9---
10 setup.py | 1 -
11 1 file changed, 1 deletion(-)
12
13diff --git a/setup.py b/setup.py
14index 245193f..d899e4c 100755
15--- a/setup.py
16+++ b/setup.py
17@@ -92,7 +92,6 @@ setuptools.setup(
18 exclude_package_data={'': ['.gitignore']},
19 zip_safe=True,
20 setup_requires=[
21- 'setuptools_git >= 0.3',
22 'sphinx',
23 ],
24 install_requires=['lxml'],
25--
262.43.0
27
diff --git a/meta-python/recipes-devtools/python/python3-dbus-deviation_0.6.1.bb b/meta-python/recipes-devtools/python/python3-dbus-deviation_0.6.1.bb
new file mode 100644
index 0000000000..e969e85465
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-dbus-deviation_0.6.1.bb
@@ -0,0 +1,20 @@
1SUMMARY = "dbus-deviation is a project for parsing D-Bus introspection XML and processing it in various ways"
2HOMEPAGE = "https://tecnocode.co.uk/dbus-deviation/"
3LICENSE = "LGPL-2.1-or-later"
4LIC_FILES_CHKSUM = "file://COPYING;md5=90263a49bc1d9a204656fec4d5616c66"
5
6SRC_URI[sha256sum] = "e06b88efe223885d2725df51cf7c9b7b463d1c6f04ea49d4690874318d0eb7a3"
7
8inherit pypi setuptools3
9
10SRC_URI += "file://0001-Prevent-trying-to-donwload-requierment-which-will-ca.patch"
11
12DEPENDS += "python3-sphinx-native"
13
14do_install:append() {
15 for ss in $(find ${D}${PYTHON_SITEPACKAGES_DIR} -type f -name "*.py"); do
16 sed -i 's,/usr/bin/python$,/usr/bin/env python3,' "$ss"
17 done
18}
19
20BBCLASSEXTEND = "native"
diff --git a/meta-python/recipes-devtools/python/python3-dbus-fast/0001-pyproject.toml-Remove-upper-version-constraint-for-C.patch b/meta-python/recipes-devtools/python/python3-dbus-fast/0001-pyproject.toml-Remove-upper-version-constraint-for-C.patch
index 5366627abf..e5b53340a8 100644
--- a/meta-python/recipes-devtools/python/python3-dbus-fast/0001-pyproject.toml-Remove-upper-version-constraint-for-C.patch
+++ b/meta-python/recipes-devtools/python/python3-dbus-fast/0001-pyproject.toml-Remove-upper-version-constraint-for-C.patch
@@ -1,4 +1,4 @@
1From 85189fb66d3abb2645605f8a3c14d8152ef755fe Mon Sep 17 00:00:00 2001 1From bca444d7069afab9e1ac84f765e744d308d39e57 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com> 2From: Khem Raj <raj.khem@gmail.com>
3Date: Sun, 18 May 2025 10:24:19 -0700 3Date: Sun, 18 May 2025 10:24:19 -0700
4Subject: [PATCH] pyproject.toml: Remove upper version constraint for Cython 4Subject: [PATCH] pyproject.toml: Remove upper version constraint for Cython
@@ -11,23 +11,23 @@ Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
11 1 file changed, 2 insertions(+), 2 deletions(-) 11 1 file changed, 2 insertions(+), 2 deletions(-)
12 12
13diff --git a/pyproject.toml b/pyproject.toml 13diff --git a/pyproject.toml b/pyproject.toml
14index e22ea42..f670d3d 100644 14index 6604cb8..40bd8c3 100644
15--- a/pyproject.toml 15--- a/pyproject.toml
16+++ b/pyproject.toml 16+++ b/pyproject.toml
17@@ -50,7 +50,7 @@ pytest-cov = ">=3,<7" 17@@ -50,7 +50,7 @@ pytest-cov = ">=3,<8"
18 pytest-asyncio = ">=0.19,<1.3" 18 pytest-asyncio = ">=0.19,<1.4"
19 pycairo = "^1.21.0" 19 pycairo = "^1.21.0"
20 PyGObject = {version = ">=3.50,<3.51", python = "<4"} 20 PyGObject = {version = ">=3.50,<3.51", python = "<4"}
21-Cython = ">=3,<3.2.0" 21-Cython = ">=3,<3.3.0"
22+Cython = ">=3" 22+Cython = ">=3"
23 setuptools = ">=65.4.1,<81.0.0" 23 setuptools = ">=65.4.1,<81.0.0"
24 pytest-timeout = "^2.1.0" 24 pytest-timeout = "^2.1.0"
25 pytest-codspeed = ">=3.1.1,<5.0.0" 25 pytest-codspeed = ">=3.1.1,<5.0.0"
26@@ -104,7 +104,7 @@ module = "docs.*" 26@@ -108,7 +108,7 @@ module = "docs.*"
27 ignore_errors = true 27 ignore_errors = true
28 28
29 [build-system] 29 [build-system]
30-requires = ['setuptools>=65.4.1', 'wheel', 'Cython>=3,<3.1.0', "poetry-core>=1.0.0"] 30-requires = ['setuptools>=65.4.1', 'wheel', 'Cython>=3,<3.3.0', "poetry-core>=1.0.0"]
31+requires = ['setuptools>=65.4.1', 'wheel', 'Cython>=3', "poetry-core>=1.0.0"] 31+requires = ['setuptools>=65.4.1', 'wheel', 'Cython>=3', "poetry-core>=1.0.0"]
32 build-backend = "poetry.core.masonry.api" 32 build-backend = "poetry.core.masonry.api"
33 33
diff --git a/meta-python/recipes-devtools/python/python3-dbus-fast_2.44.5.bb b/meta-python/recipes-devtools/python/python3-dbus-fast_4.0.0.bb
index 4f21ec379e..15bbc1706e 100644
--- a/meta-python/recipes-devtools/python/python3-dbus-fast_2.44.5.bb
+++ b/meta-python/recipes-devtools/python/python3-dbus-fast_4.0.0.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=729e372b5ea0168438e4fd4a00a04947" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=729e372b5ea0168438e4fd4a00a04947"
5 5
6SRC_URI += "file://0001-pyproject.toml-Remove-upper-version-constraint-for-C.patch" 6SRC_URI += "file://0001-pyproject.toml-Remove-upper-version-constraint-for-C.patch"
7SRC_URI[sha256sum] = "e9d738e3898e2d505d7f2d5d21949bd705d7cd3d7240dda5481bb1c5fd5e3da8" 7SRC_URI[sha256sum] = "e1d3ee49a4a81524d7caaa2d5a31fc71075a1c977b661df958cee24bef86b8fe"
8 8
9PYPI_PACKAGE = "dbus_fast" 9PYPI_PACKAGE = "dbus_fast"
10UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 10UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
diff --git a/meta-python/recipes-devtools/python/python3-dill_0.4.0.bb b/meta-python/recipes-devtools/python/python3-dill_0.4.1.bb
index d421b1a887..e08e97113d 100644
--- a/meta-python/recipes-devtools/python/python3-dill_0.4.0.bb
+++ b/meta-python/recipes-devtools/python/python3-dill_0.4.1.bb
@@ -1,9 +1,9 @@
1SUMMARY = "Serialize all of python" 1SUMMARY = "Serialize all of python"
2HOMEPAGE = "https://pypi.org/project/dill/" 2HOMEPAGE = "https://pypi.org/project/dill/"
3LICENSE = "BSD-3-Clause" 3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=ed5ea77287d7d542949d6dd0bc288ac0" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=7a60f86720d45856324c45945cfed6b3"
5 5
6SRC_URI[sha256sum] = "0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0" 6SRC_URI[sha256sum] = "423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
diff --git a/meta-python/recipes-devtools/python/python3-django.inc b/meta-python/recipes-devtools/python/python3-django.inc
index 589f6a5b85..4191d4384f 100644
--- a/meta-python/recipes-devtools/python/python3-django.inc
+++ b/meta-python/recipes-devtools/python/python3-django.inc
@@ -43,6 +43,10 @@ do_install_ptest(){
43 cp -r ${S}/tests ${D}${PTEST_PATH} 43 cp -r ${S}/tests ${D}${PTEST_PATH}
44 sed -i 's,/usr/bin/env python,/usr/bin/env python3,' ${D}${PTEST_PATH}/tests/runtests.py 44 sed -i 's,/usr/bin/env python,/usr/bin/env python3,' ${D}${PTEST_PATH}/tests/runtests.py
45 ln -sr ${D}${libdir}/python3.*/site-packages/django ${D}${PTEST_PATH}/django 45 ln -sr ${D}${libdir}/python3.*/site-packages/django ${D}${PTEST_PATH}/django
46
47 # make the top folder writable for all - django 6 creates a test db file in there
48 # with a test user
49 chmod 777 ${D}${PTEST_PATH}/tests
46} 50}
47 51
48RDEPENDS:${PN}-ptest += " \ 52RDEPENDS:${PN}-ptest += " \
diff --git a/meta-python/recipes-devtools/python/python3-django/0001-Fix-test_strip_tags-test.patch b/meta-python/recipes-devtools/python/python3-django/0001-Fix-test_strip_tags-test.patch
deleted file mode 100644
index f77c3b963a..0000000000
--- a/meta-python/recipes-devtools/python/python3-django/0001-Fix-test_strip_tags-test.patch
+++ /dev/null
@@ -1,76 +0,0 @@
1From 7b80b2186300620931009fd62c2969f108fe7a62 Mon Sep 17 00:00:00 2001
2From: Jacob Walls <jacobtylerwalls@gmail.com>
3Date: Thu, 11 Dec 2025 08:44:19 -0500
4Subject: [PATCH] Refs #36499 -- Adjusted test_strip_tags following Python
5 behavior change for incomplete entities.
6
7Upstream-Status: Backport [https://github.com/django/django/commit/7b80b2186300620931009fd62c2969f108fe7a62]
8Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
9---
10 tests/utils_tests/test_html.py | 25 ++++++++++++++++++++-----
11 1 file changed, 20 insertions(+), 5 deletions(-)
12
13diff --git a/tests/utils_tests/test_html.py b/tests/utils_tests/test_html.py
14index 7412c2624c73..ee115aaf1cf2 100644
15--- a/tests/utils_tests/test_html.py
16+++ b/tests/utils_tests/test_html.py
17@@ -1,3 +1,4 @@
18+import math
19 import os
20 import sys
21 from datetime import datetime
22@@ -124,7 +125,7 @@
23 # old and new results. The check below is temporary until all supported
24 # Python versions and CI workers include the fix. See:
25 # https://github.com/python/cpython/commit/6eb6c5db
26- min_fixed = {
27+ min_fixed_security = {
28 (3, 14): (3, 14),
29 (3, 13): (3, 13, 6),
30 (3, 12): (3, 12, 12),
31@@ -132,7 +133,21 @@
32 (3, 10): (3, 10, 19),
33 (3, 9): (3, 9, 24),
34 }
35- htmlparser_fixed = sys.version_info >= min_fixed[sys.version_info[:2]]
36+ # Similarly, there was a fix for terminating incomplete entities. See:
37+ # https://github.com/python/cpython/commit/95296a9d
38+ min_fixed_incomplete_entities = {
39+ (3, 14): (3, 14, 1),
40+ (3, 13): (3, 13, 10),
41+ (3, 12): (3, 12, math.inf), # not fixed in 3.12.
42+ }
43+ major_version = sys.version_info[:2]
44+ htmlparser_fixed_security = sys.version_info >= min_fixed_security.get(
45+ major_version, major_version
46+ )
47+ htmlparser_fixed_incomplete_entities = (
48+ sys.version_info
49+ >= min_fixed_incomplete_entities.get(major_version, major_version)
50+ )
51 items = (
52 (
53 "<p>See: &#39;&eacute; is an apostrophe followed by e acute</p>",
54@@ -159,16 +174,19 @@
55 # https://bugs.python.org/issue20288
56 ("&gotcha&#;<>", "&gotcha&#;<>"),
57 ("<sc<!-- -->ript>test<<!-- -->/script>", "ript>test"),
58- ("<script>alert()</script>&h", "alert()h"),
59+ (
60+ "<script>alert()</script>&h",
61+ "alert()&h;" if htmlparser_fixed_incomplete_entities else "alert()h",
62+ ),
63 (
64 "><!" + ("&" * 16000) + "D",
65- ">" if htmlparser_fixed else "><!" + ("&" * 16000) + "D",
66+ ">" if htmlparser_fixed_security else "><!" + ("&" * 16000) + "D",
67 ),
68 ("X<<<<br>br>br>br>X", "XX"),
69 ("<" * 50 + "a>" * 50, ""),
70 (
71 ">" + "<a" * 500 + "a",
72- ">" if htmlparser_fixed else ">" + "<a" * 500 + "a",
73+ ">" if htmlparser_fixed_security else ">" + "<a" * 500 + "a",
74 ),
75 ("<a" * 49 + "a" * 951, "<a" * 49 + "a" * 951),
76 ("<" + "a" * 1_002, "<" + "a" * 1_002),
diff --git a/meta-python/recipes-devtools/python/python3-django_5.2.13.bb b/meta-python/recipes-devtools/python/python3-django_5.2.13.bb
new file mode 100644
index 0000000000..fcf50e939d
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-django_5.2.13.bb
@@ -0,0 +1,5 @@
1require python3-django.inc
2inherit python_setuptools_build_meta
3
4SRC_URI += "file://0001-fix-test_msgfmt_error_including_non_ascii-test.patch"
5SRC_URI[sha256sum] = "a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4"
diff --git a/meta-python/recipes-devtools/python/python3-django_5.2.9.bb b/meta-python/recipes-devtools/python/python3-django_5.2.9.bb
deleted file mode 100644
index 11f438d623..0000000000
--- a/meta-python/recipes-devtools/python/python3-django_5.2.9.bb
+++ /dev/null
@@ -1,7 +0,0 @@
1require python3-django.inc
2inherit python_setuptools_build_meta
3
4SRC_URI += "file://0001-fix-test_msgfmt_error_including_non_ascii-test.patch \
5 file://0001-Fix-test_strip_tags-test.patch \
6"
7SRC_URI[sha256sum] = "16b5ccfc5e8c27e6c0561af551d2ea32852d7352c67d452ae3e76b4f6b2ca495"
diff --git a/meta-python/recipes-devtools/python/python3-django_6.0.1.bb b/meta-python/recipes-devtools/python/python3-django_6.0.4.bb
index 9642a3c581..378b760f2c 100644
--- a/meta-python/recipes-devtools/python/python3-django_6.0.1.bb
+++ b/meta-python/recipes-devtools/python/python3-django_6.0.4.bb
@@ -1,7 +1,7 @@
1require python3-django.inc 1require python3-django.inc
2inherit python_setuptools_build_meta 2inherit python_setuptools_build_meta
3 3
4SRC_URI[sha256sum] = "ed76a7af4da21551573b3d9dfc1f53e20dd2e6c7d70a3adc93eedb6338130a5f" 4SRC_URI[sha256sum] = "8cfa2572b3f2768b2e84983cf3c4811877a01edb64e817986ec5d60751c113ac"
5 5
6# Set DEFAULT_PREFERENCE so that the LTS version of django is built by 6# Set DEFAULT_PREFERENCE so that the LTS version of django is built by
7# default. To build the 6.x branch, 7# default. To build the 6.x branch,
diff --git a/meta-python/recipes-devtools/python/python3-djangorestframework_3.16.1.bb b/meta-python/recipes-devtools/python/python3-djangorestframework_3.17.1.bb
index bcd079f328..42edd15156 100644
--- a/meta-python/recipes-devtools/python/python3-djangorestframework_3.16.1.bb
+++ b/meta-python/recipes-devtools/python/python3-djangorestframework_3.17.1.bb
@@ -5,11 +5,11 @@ HOMEPAGE = "https://pypi.python.org/pypi/djangorestframework"
5LICENSE = "MIT" 5LICENSE = "MIT"
6LIC_FILES_CHKSUM = "file://LICENSE.md;md5=7879a5a716147a784f7e524c9cf103c1" 6LIC_FILES_CHKSUM = "file://LICENSE.md;md5=7879a5a716147a784f7e524c9cf103c1"
7 7
8SRC_URI[sha256sum] = "166809528b1aced0a17dc66c24492af18049f2c9420dbd0be29422029cfc3ff7" 8SRC_URI[sha256sum] = "a6def5f447fe78ff853bff1d47a3c59bf38f5434b031780b351b0c73a62db1a5"
9 9
10PYPI_PACKAGE = "djangorestframework" 10PYPI_PACKAGE = "djangorestframework"
11 11
12inherit pypi setuptools3 12inherit pypi python_setuptools_build_meta
13 13
14RDEPENDS:${PN} += "\ 14RDEPENDS:${PN} += "\
15 python3-django \ 15 python3-django \
diff --git a/meta-python/recipes-devtools/python/python3-ecdsa_0.19.1.bb b/meta-python/recipes-devtools/python/python3-ecdsa_0.19.2.bb
index 2025d5e139..5bb1da85b6 100644
--- a/meta-python/recipes-devtools/python/python3-ecdsa_0.19.1.bb
+++ b/meta-python/recipes-devtools/python/python3-ecdsa_0.19.2.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=66ffc5e30f76cbb5358fe54b645e5a1d" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=66ffc5e30f76cbb5358fe54b645e5a1d"
5 5
6PYPI_PACKAGE = "ecdsa" 6PYPI_PACKAGE = "ecdsa"
7SRC_URI[sha256sum] = "478cba7b62555866fcb3bb3fe985e06decbdb68ef55713c4e5ab98c57d508e61" 7SRC_URI[sha256sum] = "62635b0ac1ca2e027f82122b5b81cb706edc38cd91c63dda28e4f3455a2bf930"
8 8
9CVE_PRODUCT = "python-ecdsa_project:python-ecdsa tlsfuzzer:ecdsa" 9CVE_PRODUCT = "python-ecdsa_project:python-ecdsa tlsfuzzer:ecdsa"
10 10
diff --git a/meta-python/recipes-devtools/python/python3-elementpath_5.1.0.bb b/meta-python/recipes-devtools/python/python3-elementpath_5.1.1.bb
index 06bfa2cf1b..d89a012f9a 100644
--- a/meta-python/recipes-devtools/python/python3-elementpath_5.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-elementpath_5.1.1.bb
@@ -1,9 +1,9 @@
1DESCRIPTION = "Provide XPath 1.0 and 2.0 selectors for Python's ElementTree XML data structures, both for the standard ElementTree library and for the lxml.etree library." 1DESCRIPTION = "Provide XPath 1.0 and 2.0 selectors for Python's ElementTree XML data structures, both for the standard ElementTree library and for the lxml.etree library."
2HOMEPAGE = "https://github.com/sissaschool/elementpath" 2HOMEPAGE = "https://github.com/sissaschool/elementpath"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=9291d2ba8ccce92cf704b173e0dca725" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=c04ab6ce886cc843af8941bb199406ba"
5 5
6SRC_URI[sha256sum] = "61618f64686ce73cf6f191b17298e2568e9a1763b125fc7f2cb796ad0eacfd1e" 6SRC_URI[sha256sum] = "c4d1bd6aed987258354d0ea004d965eb0a6818213326bd4fd9bde5dacdb20277"
7 7
8PYPI_PACKAGE = "elementpath" 8PYPI_PACKAGE = "elementpath"
9 9
diff --git a/meta-python/recipes-devtools/python/python3-engineio_4.9.0.bb b/meta-python/recipes-devtools/python/python3-engineio_4.13.1.bb
index 790d1b44cf..f8bb87dfde 100644
--- a/meta-python/recipes-devtools/python/python3-engineio_4.9.0.bb
+++ b/meta-python/recipes-devtools/python/python3-engineio_4.13.1.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=42d0a9e728978f0eeb759c3be91536b8"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
10PYPI_PACKAGE = "python-engineio" 10PYPI_PACKAGE = "python_engineio"
11 11
12RDEPENDS:${PN} += " \ 12RDEPENDS:${PN} += " \
13 python3-netclient \ 13 python3-netclient \
@@ -17,4 +17,4 @@ RDEPENDS:${PN} += " \
17 python3-asyncio \ 17 python3-asyncio \
18" 18"
19 19
20SRC_URI[sha256sum] = "e87459c15638e567711fd156e6f9c4a402668871bed79523f0ecfec744729ec7" 20SRC_URI[sha256sum] = "0a853fcef52f5b345425d8c2b921ac85023a04dfcf75d7b74696c61e940fd066"
diff --git a/meta-python/recipes-devtools/python/python3-eth-hash_0.7.1.bb b/meta-python/recipes-devtools/python/python3-eth-hash_0.8.0.bb
index ce67505659..04a94d20be 100644
--- a/meta-python/recipes-devtools/python/python3-eth-hash_0.7.1.bb
+++ b/meta-python/recipes-devtools/python/python3-eth-hash_0.8.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/ethereum/eth-hash"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=3ef06eb4d4373222e59a338e2eb9a795" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=3ef06eb4d4373222e59a338e2eb9a795"
5 5
6SRC_URI[sha256sum] = "d2411a403a0b0a62e8247b4117932d900ffb4c8c64b15f92620547ca5ce46be5" 6SRC_URI[sha256sum] = "b009752b620da2e9c7668014849d1f5fadbe4f138603f1871cc5d4ca706896b1"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
diff --git a/meta-python/recipes-devtools/python/python3-eth-typing_5.2.1.bb b/meta-python/recipes-devtools/python/python3-eth-typing_6.0.0.bb
index 727a19aab6..51d1abec7b 100644
--- a/meta-python/recipes-devtools/python/python3-eth-typing_5.2.1.bb
+++ b/meta-python/recipes-devtools/python/python3-eth-typing_6.0.0.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=3ef06eb4d4373222e59a338e2eb9a795" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=3ef06eb4d4373222e59a338e2eb9a795"
6 6
7SRC_URI[sha256sum] = "7557300dbf02a93c70fa44af352b5c4a58f94e997a0fd6797fb7d1c29d9538ee" 7SRC_URI[sha256sum] = "315dd460dc0b71c15a6cd51e3c0b70d237eec8771beb844144f3a1fb4adb2392"
8 8
9PYPI_PACKAGE = "eth_typing" 9PYPI_PACKAGE = "eth_typing"
10 10
diff --git a/meta-python/recipes-devtools/python/python3-eth-utils_5.3.1.bb b/meta-python/recipes-devtools/python/python3-eth-utils_6.0.0.bb
index 481e5081c9..36d787746e 100644
--- a/meta-python/recipes-devtools/python/python3-eth-utils_5.3.1.bb
+++ b/meta-python/recipes-devtools/python/python3-eth-utils_6.0.0.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=d3f53e7cc5bf80b16eff1f4a38c73182" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=d3f53e7cc5bf80b16eff1f4a38c73182"
6 6
7SRC_URI[sha256sum] = "c94e2d2abd024a9a42023b4ddc1c645814ff3d6a737b33d5cfd890ebf159c2d1" 7SRC_URI[sha256sum] = "eb54b2f82dd300d3142c49a89da195e823f5e5284d43203593f87c67bad92a96"
8 8
9PYPI_PACKAGE = "eth_utils" 9PYPI_PACKAGE = "eth_utils"
10UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 10UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
diff --git a/meta-python/recipes-devtools/python/python3-evdev_1.9.2.bb b/meta-python/recipes-devtools/python/python3-evdev_1.9.3.bb
index 993dfca1e6..ac687afbb4 100644
--- a/meta-python/recipes-devtools/python/python3-evdev_1.9.2.bb
+++ b/meta-python/recipes-devtools/python/python3-evdev_1.9.3.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/gvalkov/python-evdev"
3LICENSE = "BSD-3-Clause" 3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=d7bd1cc4c71b706c7e2d4053aef50f2a" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=d7bd1cc4c71b706c7e2d4053aef50f2a"
5 5
6SRC_URI[sha256sum] = "5d3278892ce1f92a74d6bf888cc8525d9f68af85dbe336c95d1c87fb8f423069" 6SRC_URI[sha256sum] = "2c140e01ac8437758fa23fe5c871397412461f42d421aa20241dc8fe8cfccbc9"
7 7
8inherit pypi python_setuptools_build_meta ptest-python-pytest 8inherit pypi python_setuptools_build_meta ptest-python-pytest
9 9
diff --git a/meta-python/recipes-devtools/python/python3-eventlet_0.40.4.bb b/meta-python/recipes-devtools/python/python3-eventlet_0.41.0.bb
index 213460dc70..3c27caf968 100644
--- a/meta-python/recipes-devtools/python/python3-eventlet_0.40.4.bb
+++ b/meta-python/recipes-devtools/python/python3-eventlet_0.41.0.bb
@@ -5,7 +5,7 @@ LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=56472ad6de4caf50e05332a34b66e778" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=56472ad6de4caf50e05332a34b66e778"
6 6
7SRC_URI += "file://d19ad6cc086684ee74db250f5fd35227c98e678a.patch" 7SRC_URI += "file://d19ad6cc086684ee74db250f5fd35227c98e678a.patch"
8SRC_URI[sha256sum] = "69bef712b1be18b4930df6f0c495d2a882bf7b63aa111e7b6eeff461cfcaf26f" 8SRC_URI[sha256sum] = "35df85f0ccd3e73effb6fd9f1ceae46b500b966c7da1817289c323a307bd397b"
9 9
10CVE_PRODUCT = "eventlet" 10CVE_PRODUCT = "eventlet"
11 11
diff --git a/meta-python/recipes-devtools/python/python3-faker/pytest.ini b/meta-python/recipes-devtools/python/python3-faker/pytest.ini
new file mode 100644
index 0000000000..26f64467ce
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-faker/pytest.ini
@@ -0,0 +1,3 @@
1[pytest]
2addopts =
3 --ignore=tests/pytest
diff --git a/meta-python/recipes-devtools/python/python3-faker_40.13.0.bb b/meta-python/recipes-devtools/python/python3-faker_40.13.0.bb
new file mode 100644
index 0000000000..97f0e6e8f6
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-faker_40.13.0.bb
@@ -0,0 +1,48 @@
1SUMMARY = "Faker is a Python package that generates fake data for you."
2DESCRIPTION = "Faker is a Python package that generates fake data for you. \
3Whether you need to bootstrap your database, create good-looking XML documents, \
4fill-in your persistence to stress test it, or anonymize data taken from a \
5production service, Faker is for you."
6HOMEPAGE = "https://github.com/joke2k/faker"
7LICENSE = "MIT"
8LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=53360c4126f7d03b63cb79b0dab9e9e1"
9
10SRC_URI[sha256sum] = "a0751c84c3abac17327d7bb4c98e8afe70ebf7821e01dd7d0b15cd8856415525"
11
12inherit pypi setuptools3 ptest-python-pytest
13
14SRC_URI += "file://pytest.ini"
15
16PACKAGECONFIG ?= "tzdata"
17PACKAGECONFIG[tzdata] = ",,,python3-tzdata"
18
19RDEPENDS:${PN} += "\
20 python3-compression \
21 python3-core \
22 python3-crypt \
23 python3-datetime \
24 python3-image \
25 python3-json \
26 python3-logging \
27 python3-math \
28 python3-netclient \
29 python3-numbers \
30 python3-pickle \
31 python3-pytest \
32 python3-stringold \
33 python3-unittest \
34 python3-xml \
35 python3-zoneinfo \
36 "
37
38RDEPENDS:${PN}-ptest += "\
39 python3-freezegun \
40 python3-validators \
41"
42
43do_install_ptest:append() {
44 install ${UNPACKDIR}/pytest.ini ${D}${PTEST_PATH}/
45 install -d ${D}${PTEST_PATH}/tests
46 cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
47}
48
diff --git a/meta-python/recipes-devtools/python/python3-fastapi-cli_0.0.20.bb b/meta-python/recipes-devtools/python/python3-fastapi-cli_0.0.24.bb
index 76ddb409bc..90624b86a5 100644
--- a/meta-python/recipes-devtools/python/python3-fastapi-cli_0.0.20.bb
+++ b/meta-python/recipes-devtools/python/python3-fastapi-cli_0.0.24.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://fastapi.tiangolo.com/"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=e0cf8d811ea2046529403707b266fb5a" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=e0cf8d811ea2046529403707b266fb5a"
5 5
6SRC_URI[sha256sum] = "d17c2634f7b96b6b560bc16b0035ed047d523c912011395f49f00a421692bc3a" 6SRC_URI[sha256sum] = "1afc9c9e21d7ebc8a3ca5e31790cd8d837742be7e4f8b9236e99cb3451f0de00"
7 7
8inherit pypi python_pdm 8inherit pypi python_pdm
9 9
diff --git a/meta-python/recipes-devtools/python/python3-fastapi_0.128.0.bb b/meta-python/recipes-devtools/python/python3-fastapi_0.135.3.bb
index f047f5321a..a4bdb19bbf 100644
--- a/meta-python/recipes-devtools/python/python3-fastapi_0.128.0.bb
+++ b/meta-python/recipes-devtools/python/python3-fastapi_0.135.3.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://fastapi.tiangolo.com/"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=95792ff3fe8e11aa49ceb247e66e4810" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=95792ff3fe8e11aa49ceb247e66e4810"
5 5
6SRC_URI[sha256sum] = "1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a" 6SRC_URI[sha256sum] = "bd6d7caf1a2bdd8d676843cdcd2287729572a1ef524fc4d65c17ae002a1be654"
7 7
8SRC_URI += "file://run-ptest" 8SRC_URI += "file://run-ptest"
9 9
diff --git a/meta-python/recipes-devtools/python/python3-filelock_3.20.3.bb b/meta-python/recipes-devtools/python/python3-filelock_3.25.2.bb
index 4499b220bd..6f1a32ef8f 100644
--- a/meta-python/recipes-devtools/python/python3-filelock_3.20.3.bb
+++ b/meta-python/recipes-devtools/python/python3-filelock_3.25.2.bb
@@ -2,11 +2,11 @@
2# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors 2# Copyright (C) 2023 iris-GmbH infrared & intelligent sensors
3SUMMARY = "A single module, which implements a platform independent file lock in Python, which provides a simple way of inter-process communication" 3SUMMARY = "A single module, which implements a platform independent file lock in Python, which provides a simple way of inter-process communication"
4HOMEPAGE = "https://py-filelock.readthedocs.io/" 4HOMEPAGE = "https://py-filelock.readthedocs.io/"
5LICENSE = "Unlicense" 5LICENSE = "MIT"
6LIC_FILES_CHKSUM = "file://LICENSE;md5=911690f51af322440237a253d695d19f" 6LIC_FILES_CHKSUM = "file://LICENSE;md5=2c6acbdf7bb74caa37512c3a5ca6857b"
7 7
8SRC_URI += "file://run-ptest" 8SRC_URI += "file://run-ptest"
9SRC_URI[sha256sum] = "18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1" 9SRC_URI[sha256sum] = "b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694"
10 10
11BBCLASSEXTEND = "native nativesdk" 11BBCLASSEXTEND = "native nativesdk"
12 12
diff --git a/meta-python/recipes-devtools/python/python3-flask-cors_5.0.0.bb b/meta-python/recipes-devtools/python/python3-flask-cors_6.0.2.bb
index 1fead4f8d1..6134b5ba10 100644
--- a/meta-python/recipes-devtools/python/python3-flask-cors_5.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-cors_6.0.2.bb
@@ -5,14 +5,14 @@ DESCRIPTION = "\
5 " 5 "
6SECTION = "devel/python" 6SECTION = "devel/python"
7LICENSE = "MIT" 7LICENSE = "MIT"
8LIC_FILES_CHKSUM = "file://LICENSE;md5=118fecaa576ab51c1520f95e98db61ce" 8LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=134f1026f0de92fd30e71976590a2868"
9 9
10PYPI_PACKAGE = "flask_cors" 10PYPI_PACKAGE = "flask_cors"
11UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 11UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
12 12
13CVE_PRODUCT = "flask-cors" 13CVE_PRODUCT = "flask-cors"
14 14
15inherit pypi setuptools3 15inherit pypi python_setuptools_build_meta
16SRC_URI[sha256sum] = "5aadb4b950c4e93745034594d9f3ea6591f734bb3662e16e255ffbf5e89c88ef" 16SRC_URI[sha256sum] = "6e118f3698249ae33e429760db98ce032a8bf9913638d085ca0f4c5534ad2423"
17 17
18RDEPENDS:${PN} += "python3-flask" 18RDEPENDS:${PN} += "python3-flask"
diff --git a/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.6.0.bb b/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.7.1.bb
index e188f2b09c..b36ea81d97 100644
--- a/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.6.0.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.7.1.bb
@@ -5,10 +5,10 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=9166295d7c482b9440bbb2b5c0fa43ac"
5 5
6inherit pypi setuptools3 6inherit pypi setuptools3
7 7
8PYPI_PACKAGE = "Flask-JWT-Extended" 8PYPI_PACKAGE = "flask_jwt_extended"
9UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 9UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
10 10
11SRC_URI[sha256sum] = "9215d05a9413d3855764bcd67035e75819d23af2fafb6b55197eb5a3313fdfb2" 11SRC_URI[sha256sum] = "8085d6757505b6f3291a2638c84d207e8f0ad0de662d1f46aa2f77e658a0c976"
12 12
13RDEPENDS:${PN} += "\ 13RDEPENDS:${PN} += "\
14 python3-werkzeug \ 14 python3-werkzeug \
diff --git a/meta-python/recipes-devtools/python/python3-flask-limiter_4.1.1.bb b/meta-python/recipes-devtools/python/python3-flask-limiter_4.1.1.bb
new file mode 100644
index 0000000000..7c2e18ffba
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-flask-limiter_4.1.1.bb
@@ -0,0 +1,21 @@
1SUMMARY = "Rate Limiting extension for Flask"
2DESCRIPTION = "Flask-Limiter adds rate limiting to Flask applications."
3HOMEPAGE = "https://github.com/alisaifee/flask-limiter"
4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2455d5e574bc0fc489411ca45766ac78"
6
7SRC_URI[sha256sum] = "ca11608fc7eec43dcea606964ca07c3bd4ec1ae89043a0f67f717899a4f48106"
8
9PYPI_PACKAGE = "flask_limiter"
10UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
11
12inherit pypi python_hatchling
13
14DEPENDS += "python3-hatch-vcs-native"
15
16RDEPENDS:${PN} += " \
17 python3-flask \
18 python3-limits \
19 python3-ordered-set \
20 python3-werkzeug \
21"
diff --git a/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb b/meta-python/recipes-devtools/python/python3-flask-mail_0.10.0.bb
index c5b839eb72..5d3f60cff0 100644
--- a/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-mail_0.10.0.bb
@@ -2,14 +2,14 @@ SUMMARY = "Flask extension for sending email"
2DESCRIPTION = "A Flask extension for sending email" 2DESCRIPTION = "A Flask extension for sending email"
3HOMEPAGE = " https://github.com/rduplain/flask-email" 3HOMEPAGE = " https://github.com/rduplain/flask-email"
4LICENSE = "BSD-3-Clause" 4LICENSE = "BSD-3-Clause"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=5b16dfa6d3f275ace5985bb92949f770" 5LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=201f2b80112efa61b78515bd54e9f138"
6 6
7SRC_URI[sha256sum] = "22e5eb9a940bf407bcf30410ecc3708f3c56cc44b29c34e1726fe85006935f41" 7SRC_URI[sha256sum] = "44083e7b02bbcce792209c06252f8569dd5a325a7aaa76afe7330422bd97881d"
8 8
9PYPI_PACKAGE = "Flask-Mail" 9PYPI_PACKAGE = "flask_mail"
10UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 10UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
11 11
12inherit pypi setuptools3 12inherit pypi python_setuptools_build_meta
13 13
14RDEPENDS:${PN} = " \ 14RDEPENDS:${PN} = " \
15 python3-blinker \ 15 python3-blinker \
diff --git a/meta-python/recipes-devtools/python/python3-flask-marshmallow_1.3.0.bb b/meta-python/recipes-devtools/python/python3-flask-marshmallow_1.4.0.bb
index f0cc8ef64f..189ed5335b 100644
--- a/meta-python/recipes-devtools/python/python3-flask-marshmallow_1.3.0.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-marshmallow_1.4.0.bb
@@ -8,7 +8,7 @@ inherit pypi python_flit_core
8PYPI_PACKAGE = "flask_marshmallow" 8PYPI_PACKAGE = "flask_marshmallow"
9UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 9UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
10 10
11SRC_URI[sha256sum] = "27a35d0ce5dcba161cc5f2f4764afbc2536c93fa439a793250b827835e3f3be6" 11SRC_URI[sha256sum] = "98c90a253052c72d2ddddc925539ac33bbd780c6fba86478ffe18e3b89d8b471"
12 12
13RDEPENDS:${PN} += "\ 13RDEPENDS:${PN} += "\
14 python3-flask \ 14 python3-flask \
diff --git a/meta-python/recipes-devtools/python/python3-flask-migrate_4.0.7.bb b/meta-python/recipes-devtools/python/python3-flask-migrate_4.1.0.bb
index bacf7851aa..7cdada071f 100644
--- a/meta-python/recipes-devtools/python/python3-flask-migrate_4.0.7.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-migrate_4.1.0.bb
@@ -2,9 +2,9 @@ DESCRIPTION = "SQLAlchemy database migrations for Flask applications using Alemb
2LICENSE = "MIT" 2LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://LICENSE;md5=3b69377f79f3f48c661701236d5a6a85" 3LIC_FILES_CHKSUM = "file://LICENSE;md5=3b69377f79f3f48c661701236d5a6a85"
4 4
5SRC_URI[sha256sum] = "dff7dd25113c210b069af280ea713b883f3840c1e3455274745d7355778c8622" 5SRC_URI[sha256sum] = "1a336b06eb2c3ace005f5f2ded8641d534c18798d64061f6ff11f79e1434126d"
6 6
7PYPI_PACKAGE = "Flask-Migrate" 7PYPI_PACKAGE = "flask_migrate"
8UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 8UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
9 9
10inherit pypi python_setuptools_build_meta 10inherit pypi python_setuptools_build_meta
diff --git a/meta-python/recipes-devtools/python/python3-flask-pymongo_2.3.0.bb b/meta-python/recipes-devtools/python/python3-flask-pymongo_3.0.1.bb
index 75a52a033e..7773e2830e 100644
--- a/meta-python/recipes-devtools/python/python3-flask-pymongo_2.3.0.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-pymongo_3.0.1.bb
@@ -5,13 +5,17 @@ SECTION = "devel/python"
5LICENSE = "BSD-2-Clause" 5LICENSE = "BSD-2-Clause"
6LIC_FILES_CHKSUM = "file://flask_pymongo/wrappers.py;beginline=1;endline=24;md5=424c4e1047d28e01b4e4634a069c019d" 6LIC_FILES_CHKSUM = "file://flask_pymongo/wrappers.py;beginline=1;endline=24;md5=424c4e1047d28e01b4e4634a069c019d"
7 7
8SRC_URI[sha256sum] = "620eb02dc8808a5fcb90f26cab6cba9d6bf497b15032ae3ca99df80366e33314" 8SRC_URI[sha256sum] = "d225b51c21ceca2e670e6cca79b5c584ad17b96252b48e84e3b423ddb73304cc"
9 9
10PYPI_PACKAGE = "Flask-PyMongo" 10PYPI_PACKAGE = "flask_pymongo"
11UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 11UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
12 12
13inherit pypi setuptools3 13inherit pypi python_setuptools_build_meta python_hatchling
14 14
15DEPENDS = "python3-vcversioner python3-vcversioner-native" 15DEPENDS = " \
16 python3-vcversioner \
17 python3-vcversioner-native \
18 python3-hatchling-native \
19"
16 20
17RDEPENDS:${PN} = "python3-pymongo python3-flask" 21RDEPENDS:${PN} = "python3-pymongo python3-flask"
diff --git a/meta-python/recipes-devtools/python/python3-flask-socketio_5.3.6.bb b/meta-python/recipes-devtools/python/python3-flask-socketio_5.6.1.bb
index 7371d7646c..9e94d20748 100644
--- a/meta-python/recipes-devtools/python/python3-flask-socketio_5.3.6.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-socketio_5.6.1.bb
@@ -7,10 +7,10 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=38cc21254909604298ce763a6e4440a0"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
10PYPI_PACKAGE = "Flask-SocketIO" 10PYPI_PACKAGE = "flask_socketio"
11UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 11UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
12 12
13SRC_URI[sha256sum] = "bb8f9f9123ef47632f5ce57a33514b0c0023ec3696b2384457f0fcaa5b70501c" 13SRC_URI[sha256sum] = "fe5bd995c3ed4da9a98f335d0d830fa1a19d84a64789f6265642a671fdacaeac"
14 14
15RDEPENDS:${PN} += "\ 15RDEPENDS:${PN} += "\
16 python3-flask \ 16 python3-flask \
diff --git a/meta-python/recipes-devtools/python/python3-flask_3.1.2.bb b/meta-python/recipes-devtools/python/python3-flask_3.1.3.bb
index 1b289c7227..559f781e7e 100644
--- a/meta-python/recipes-devtools/python/python3-flask_3.1.2.bb
+++ b/meta-python/recipes-devtools/python/python3-flask_3.1.3.bb
@@ -1,12 +1,12 @@
1SUMMARY = "A microframework based on Werkzeug, Jinja2 and good intentions" 1SUMMARY = "A microframework based on Werkzeug, Jinja2 and good intentions"
2DESCRIPTION = "\ 2DESCRIPTION = "\
3Flask is a microframework for Python based on Werkzeug, Jinja 2 and good \ 3Flask is a microframework for Python based on Werkzeug, Jinja 2 and good \
4intentions. And before you ask: It’s BSD licensed!" 4intentions. And before you ask: It is BSD licensed!"
5HOMEPAGE = "https://github.com/pallets/flask" 5HOMEPAGE = "https://github.com/pallets/flask"
6LICENSE = "BSD-3-Clause" 6LICENSE = "BSD-3-Clause"
7LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=ffeffa59c90c9c4a033c7574f8f3fb75" 7LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
8 8
9SRC_URI[sha256sum] = "bf656c15c80190ed628ad08cdfd3aaa35beb087855e2f494910aa3774cc4fd87" 9SRC_URI[sha256sum] = "0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb"
10 10
11CVE_PRODUCT = "flask" 11CVE_PRODUCT = "flask"
12 12
diff --git a/meta-python/recipes-devtools/python/python3-fsspec_2025.12.0.bb b/meta-python/recipes-devtools/python/python3-fsspec_2026.3.0.bb
index ea3e63968f..4b81c6040f 100644
--- a/meta-python/recipes-devtools/python/python3-fsspec_2025.12.0.bb
+++ b/meta-python/recipes-devtools/python/python3-fsspec_2026.3.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/fsspec/filesystem_spec"
3LICENSE = "BSD-3-Clause" 3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=b38a11bf4dcdfc66307f8515ce1fbaa6" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=b38a11bf4dcdfc66307f8515ce1fbaa6"
5 5
6SRC_URI[sha256sum] = "c505de011584597b1060ff778bb664c1bc022e87921b0e4f10cc9c44f9635973" 6SRC_URI[sha256sum] = "1ee6a0e28677557f8c2f994e3eea77db6392b4de9cd1f5d7a9e87a0ae9d01b41"
7 7
8inherit pypi python_hatchling ptest 8inherit pypi python_hatchling ptest
9 9
diff --git a/meta-python/recipes-devtools/python/python3-gcovr_8.5.bb b/meta-python/recipes-devtools/python/python3-gcovr_8.6.bb
index 68cc9bc274..3098681bef 100644
--- a/meta-python/recipes-devtools/python/python3-gcovr_8.5.bb
+++ b/meta-python/recipes-devtools/python/python3-gcovr_8.6.bb
@@ -8,7 +8,7 @@ SRC_URI = " \
8 git://github.com/gcovr/gcovr.git;branch=main;protocol=https \ 8 git://github.com/gcovr/gcovr.git;branch=main;protocol=https \
9 file://0001-pyproject.toml-Support-newer-versions.patch \ 9 file://0001-pyproject.toml-Support-newer-versions.patch \
10" 10"
11SRCREV = "71eedb8f300612d4095f2ffa4ac60e3fdd58c192" 11SRCREV = "e01ad73582821b5f90e079482164f8e885121e57"
12 12
13 13
14inherit python_hatchling 14inherit python_hatchling
diff --git a/meta-python/recipes-devtools/python/python3-geojson/0001-Allow-install-over-python-3.14-329.patch b/meta-python/recipes-devtools/python/python3-geojson/0001-Allow-install-over-python-3.14-329.patch
new file mode 100644
index 0000000000..c0022bcad7
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-geojson/0001-Allow-install-over-python-3.14-329.patch
@@ -0,0 +1,56 @@
1From 2584c0de5651bd694499449f9da5321b15597270 Mon Sep 17 00:00:00 2001
2From: adelplanque <alaindelplanque@mailoo.org>
3Date: Wed, 17 Dec 2025 22:22:28 +0100
4Subject: [PATCH] Allow install over python 3.14 (#329)
5
6All tests pass over python 3.14.2
7
8Upstream-Status: Submitted [https://github.com/jazzband/geojson/pull/240]
9
10Backport the relevant parts of an upstream PR to allow build with Python 3.14.
11
12Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
13---
14 README.rst | 2 +-
15 setup.py | 5 +++--
16 2 files changed, 4 insertions(+), 3 deletions(-)
17
18diff --git a/README.rst b/README.rst
19index 26dc790..e3ac38a 100644
20--- a/README.rst
21+++ b/README.rst
22@@ -29,7 +29,7 @@ This Python library contains:
23 Installation
24 ------------
25
26-geojson is compatible with Python 3.7 - 3.13. The recommended way to install is via pip_:
27+geojson is compatible with Python 3.7 - 3.14. The recommended way to install is via pip_:
28
29 .. code::
30
31diff --git a/setup.py b/setup.py
32index 004d3eb..db277f1 100644
33--- a/setup.py
34+++ b/setup.py
35@@ -17,8 +17,8 @@ else:
36
37
38 major_version, minor_version = sys.version_info[:2]
39-if not (major_version == 3 and 7 <= minor_version <= 13):
40- sys.stderr.write("Sorry, only Python 3.7 - 3.13 are "
41+if not (major_version == 3 and 7 <= minor_version <= 14):
42+ sys.stderr.write("Sorry, only Python 3.7 - 3.14 are "
43 "supported at this time.\n")
44 exit(1)
45
46@@ -54,6 +54,7 @@ setup(
47 "Programming Language :: Python :: 3.11",
48 "Programming Language :: Python :: 3.12",
49 "Programming Language :: Python :: 3.13",
50+ "Programming Language :: Python :: 3.14",
51 "Topic :: Scientific/Engineering :: GIS",
52 ]
53 )
54--
552.52.0
56
diff --git a/meta-python/recipes-devtools/python/python3-geojson_3.2.0.bb b/meta-python/recipes-devtools/python/python3-geojson_3.2.0.bb
index 9ee6d580b2..cdb019ebd5 100644
--- a/meta-python/recipes-devtools/python/python3-geojson_3.2.0.bb
+++ b/meta-python/recipes-devtools/python/python3-geojson_3.2.0.bb
@@ -5,6 +5,10 @@ LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=f77f2ed49768c8d4c79ba874c0f94d8a"
5 5
6SRC_URI[sha256sum] = "b860baba1e8c6f71f8f5f6e3949a694daccf40820fa8f138b3f712bd85804903" 6SRC_URI[sha256sum] = "b860baba1e8c6f71f8f5f6e3949a694daccf40820fa8f138b3f712bd85804903"
7 7
8SRC_URI += " \
9 file://0001-Allow-install-over-python-3.14-329.patch \
10"
11
8inherit pypi setuptools3 ptest-python-pytest 12inherit pypi setuptools3 ptest-python-pytest
9 13
10RDEPENDS:${PN} += "python3-simplejson python3-math" 14RDEPENDS:${PN} += "python3-simplejson python3-math"
diff --git a/meta-python/recipes-devtools/python/python3-gevent_25.9.1.bb b/meta-python/recipes-devtools/python/python3-gevent_26.4.0.bb
index 51861f24c7..c29b55d25d 100644
--- a/meta-python/recipes-devtools/python/python3-gevent_25.9.1.bb
+++ b/meta-python/recipes-devtools/python/python3-gevent_26.4.0.bb
@@ -15,7 +15,7 @@ RDEPENDS:${PN} = "python3-greenlet \
15 15
16SRC_URI += "file://0001-_setuputils.py-Do-not-add-sys_inc_dir.patch" 16SRC_URI += "file://0001-_setuputils.py-Do-not-add-sys_inc_dir.patch"
17 17
18SRC_URI[sha256sum] = "adf9cd552de44a4e6754c51ff2e78d9193b7fa6eab123db9578a210e657235dd" 18SRC_URI[sha256sum] = "288d03addfccf0d1c67268358b6759b04392bf3bc35d26f3d9a45c82899c292d"
19 19
20CVE_PRODUCT = "gevent" 20CVE_PRODUCT = "gevent"
21 21
diff --git a/meta-python/recipes-devtools/python/python3-git-pw_2.7.1.bb b/meta-python/recipes-devtools/python/python3-git-pw_2.8.0.bb
index 6308732f49..4cb8621ad8 100644
--- a/meta-python/recipes-devtools/python/python3-git-pw_2.7.1.bb
+++ b/meta-python/recipes-devtools/python/python3-git-pw_2.8.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/getpatchwork/git-pw"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=26e1a171d943c64f00c51f90c256b9d4" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=26e1a171d943c64f00c51f90c256b9d4"
5 5
6SRC_URI[sha256sum] = "f69c57aafd13d21d6fa604dff680c4f9113a8f31bf3f65dd663bad0e1839b0e1" 6SRC_URI[sha256sum] = "212743923badb38b9da658b0df0b9f3770997684a9e787d489eed5d103e96100"
7PYPI_PACKAGE = "git_pw" 7PYPI_PACKAGE = "git_pw"
8 8
9inherit pypi python_setuptools_build_meta 9inherit pypi python_setuptools_build_meta
diff --git a/meta-python/recipes-devtools/python/python3-gmpy2/0001-Avoid-do_configure-requires-check-error.patch b/meta-python/recipes-devtools/python/python3-gmpy2/0001-Avoid-do_configure-requires-check-error.patch
new file mode 100644
index 0000000000..3c602cebe5
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-gmpy2/0001-Avoid-do_configure-requires-check-error.patch
@@ -0,0 +1,29 @@
1Subject: [PATCH] Avoid do_configure requires check error.
2
3The gmpy2-2.3.0 need setuptools < 80, but version in oe-core is 80.9.0,
4so fix it to avoid following error.
5
6| ERROR Missing dependencies:
7| setuptools<80,>=77
8
9Upstream-Status: Inappropriate
10
11Signed-off-by: Liu Yiding <liuyd.fnst@fujitsu.com>
12---
13 pyproject.toml | 2 +-
14 1 file changed, 1 insertion(+), 1 deletion(-)
15
16diff --git a/pyproject.toml b/pyproject.toml
17index 1f00809..3a4f3e2 100644
18--- a/pyproject.toml
19+++ b/pyproject.toml
20@@ -1,5 +1,5 @@
21 [build-system]
22-requires = ['setuptools>=77,<80', 'setuptools_scm[toml]>=6.0']
23+requires = ['setuptools>=77', 'setuptools_scm[toml]>=6.0']
24 build-backend = 'setuptools.build_meta'
25
26 [project]
27--
282.43.0
29
diff --git a/meta-python/recipes-devtools/python/python3-gmpy2_2.2.2.bb b/meta-python/recipes-devtools/python/python3-gmpy2_2.3.0.bb
index 2196616a0e..841d87097d 100644
--- a/meta-python/recipes-devtools/python/python3-gmpy2_2.2.2.bb
+++ b/meta-python/recipes-devtools/python/python3-gmpy2_2.3.0.bb
@@ -1,13 +1,16 @@
1SUMMARY = "GMP/MPIR, MPFR, and MPC interface to Python 2.6+ and 3.x" 1SUMMARY = "GMP/MPIR, MPFR, and MPC interface to Python 2.6+ and 3.x"
2SECTION = "devel/python" 2SECTION = "devel/python"
3HOMEPAGE = "https://github.com/gmpy2/gmpy2"
3LICENSE = "GPL-3.0-only | LGPL-3.0-or-later" 4LICENSE = "GPL-3.0-only | LGPL-3.0-or-later"
4LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \ 5LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
5 file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02" 6 file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02"
6 7
7DEPENDS += "gmp mpfr libmpc" 8DEPENDS += "gmp mpfr libmpc python3-setuptools-scm-native"
8 9
9SRC_URI[sha256sum] = "d9b8c81e0f5e1a3cabf1ea8d154b29b5ef6e33b8f4e4c37b3da957b2dd6a3fa8" 10SRC_URI[sha256sum] = "2d943cc9051fcd6b15b2a09369e2f7e18c526bc04c210782e4da61b62495eb4a"
10 11
11inherit pypi python_setuptools_build_meta python3native 12SRC_URI += "file://0001-Avoid-do_configure-requires-check-error.patch"
13
14inherit pypi python_setuptools_build_meta
12 15
13BBCLASSEXTEND = "native nativesdk" 16BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-google-auth-oauthlib_1.2.3.bb b/meta-python/recipes-devtools/python/python3-google-auth-oauthlib_1.3.1.bb
index 4b2634a108..7f9435d475 100644
--- a/meta-python/recipes-devtools/python/python3-google-auth-oauthlib_1.2.3.bb
+++ b/meta-python/recipes-devtools/python/python3-google-auth-oauthlib_1.3.1.bb
@@ -5,7 +5,7 @@ LICENSE = "Apache-2.0"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
6 6
7SRC_URI += "file://0001-python3-google-auth-oauthlib-Skip-failing-3PI-creden.patch" 7SRC_URI += "file://0001-python3-google-auth-oauthlib-Skip-failing-3PI-creden.patch"
8SRC_URI[sha256sum] = "eb09e450d3cc789ecbc2b3529cb94a713673fd5f7a22c718ad91cf75aedc2ea4" 8SRC_URI[sha256sum] = "14c22c7b3dd3d06dbe44264144409039465effdd1eef94f7ce3710e486cc4bfa"
9 9
10inherit pypi setuptools3 ptest 10inherit pypi setuptools3 ptest
11PYPI_PACKAGE = "google_auth_oauthlib" 11PYPI_PACKAGE = "google_auth_oauthlib"
diff --git a/meta-python/recipes-devtools/python/python3-google-auth_2.47.0.bb b/meta-python/recipes-devtools/python/python3-google-auth_2.49.2.bb
index 3b141006a5..fc6df70f45 100644
--- a/meta-python/recipes-devtools/python/python3-google-auth_2.47.0.bb
+++ b/meta-python/recipes-devtools/python/python3-google-auth_2.49.2.bb
@@ -9,7 +9,7 @@ SRC_URI += " \
9 file://0001-python3-google-auth-Skip-mTLS-tests-in-ptest-environ.patch \ 9 file://0001-python3-google-auth-Skip-mTLS-tests-in-ptest-environ.patch \
10 file://run-ptest \ 10 file://run-ptest \
11" 11"
12SRC_URI[sha256sum] = "833229070a9dfee1a353ae9877dcd2dec069a8281a4e72e72f77d4a70ff945da" 12SRC_URI[sha256sum] = "c1ae38500e73065dcae57355adb6278cf8b5c8e391994ae9cbadbcb9631ab409"
13 13
14PYPI_PACKAGE = "google_auth" 14PYPI_PACKAGE = "google_auth"
15UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 15UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
diff --git a/meta-python/recipes-devtools/python/python3-gpiod_2.4.0.bb b/meta-python/recipes-devtools/python/python3-gpiod_2.4.2.bb
index 405951fe0c..87765c2482 100644
--- a/meta-python/recipes-devtools/python/python3-gpiod_2.4.0.bb
+++ b/meta-python/recipes-devtools/python/python3-gpiod_2.4.2.bb
@@ -1,13 +1,11 @@
1SUMMARY = "Python bindings for libgpiod." 1SUMMARY = "Python bindings for libgpiod."
2 2
3LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later & CC-BY-SA-4.0" 3LICENSE = "LGPL-2.1-or-later"
4# The actual license files live in the upstream libgpiod from which the pypi 4LIC_FILES_CHKSUM = "file://LICENSE;md5=4b54a1fd55a448865a0b32d41598759d"
5# package is spun out.
6LIC_FILES_CHKSUM = "file://pyproject.toml;beginline=13;endline=13;md5=0fbc720d3e48432ee239eedb6adb0f07"
7 5
8SRC_URI += "file://run-ptest" 6SRC_URI += "file://run-ptest"
9 7
10SRC_URI[sha256sum] = "9243a1a59d084ec749d1df4a1e2f238ffb9d94515b0d9f5335460175143c3aa1" 8SRC_URI[sha256sum] = "602aae17ff365bb8e2a30ce65c6bbf2d8e7a7e64bf016e82e4fd4c730ef69ab7"
11 9
12inherit python_setuptools_build_meta python_pep517 ptest pypi 10inherit python_setuptools_build_meta python_pep517 ptest pypi
13 11
diff --git a/meta-python/recipes-devtools/python/python3-greenlet_3.3.0.bb b/meta-python/recipes-devtools/python/python3-greenlet_3.4.0.bb
index b25e781c19..728c2b7940 100644
--- a/meta-python/recipes-devtools/python/python3-greenlet_3.3.0.bb
+++ b/meta-python/recipes-devtools/python/python3-greenlet_3.4.0.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT & PSF-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=e95668d68e4329085c7ab3535e6a7aee \ 4LIC_FILES_CHKSUM = "file://LICENSE;md5=e95668d68e4329085c7ab3535e6a7aee \
5 file://LICENSE.PSF;md5=c106931d9429eda0492617f037b8f69a" 5 file://LICENSE.PSF;md5=c106931d9429eda0492617f037b8f69a"
6 6
7SRC_URI[sha256sum] = "a82bb225a4e9e4d653dd2fb7b8b2d36e4fb25bc0165422a11e48b88e9e6f78fb" 7SRC_URI[sha256sum] = "f50a96b64dafd6169e595a5c56c9146ef80333e67d4476a65a9c55f400fc22ff"
8 8
9inherit pypi python_setuptools_build_meta 9inherit pypi python_setuptools_build_meta
10 10
diff --git a/meta-python/recipes-devtools/python/python3-grpcio_1.76.0.bb b/meta-python/recipes-devtools/python/python3-grpcio_1.78.0.bb
index 037614da3e..d9ec337427 100644
--- a/meta-python/recipes-devtools/python/python3-grpcio_1.76.0.bb
+++ b/meta-python/recipes-devtools/python/python3-grpcio_1.78.0.bb
@@ -13,11 +13,11 @@ DEPENDS += "c-ares openssl python3-protobuf re2 zlib"
13SRC_URI += "file://0001-python-enable-unbundled-cross-compilation.patch \ 13SRC_URI += "file://0001-python-enable-unbundled-cross-compilation.patch \
14 file://abseil-ppc-fixes.patch \ 14 file://abseil-ppc-fixes.patch \
15 " 15 "
16SRC_URI[sha256sum] = "7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73" 16SRC_URI[sha256sum] = "7382b95189546f375c174f53a5fa873cef91c4b8005faa05cc5b3beea9c4f1c5"
17 17
18RDEPENDS:${PN} = "python3-protobuf python3-typing-extensions" 18RDEPENDS:${PN} = "python3-protobuf python3-typing-extensions"
19 19
20inherit setuptools3 20inherit python_setuptools_build_meta cython
21inherit pypi 21inherit pypi
22 22
23CFLAGS:append:libc-musl = " -D_LARGEFILE64_SOURCE" 23CFLAGS:append:libc-musl = " -D_LARGEFILE64_SOURCE"
@@ -29,6 +29,12 @@ export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL = "1"
29export GRPC_PYTHON_BUILD_SYSTEM_RE2 = "1" 29export GRPC_PYTHON_BUILD_SYSTEM_RE2 = "1"
30export GRPC_PYTHON_BUILD_SYSTEM_ZLIB = "1" 30export GRPC_PYTHON_BUILD_SYSTEM_ZLIB = "1"
31 31
32do_configure:append() {
33 # Relax strict cython version pin so that the available cython satisfies the requirement.
34 # The C files are pre-generated so cython is not actually used during compilation.
35 sed -i 's/\"cython==/\"cython>=/' ${S}/pyproject.toml
36}
37
32do_compile:prepend() { 38do_compile:prepend() {
33 export GRPC_PYTHON_BUILD_EXT_COMPILER_JOBS="${@oe.utils.parallel_make(d, False)}" 39 export GRPC_PYTHON_BUILD_EXT_COMPILER_JOBS="${@oe.utils.parallel_make(d, False)}"
34} 40}
@@ -44,3 +50,4 @@ BBCLASSEXTEND = "native nativesdk"
44CCACHE_DISABLE = "1" 50CCACHE_DISABLE = "1"
45 51
46CVE_PRODUCT += "grpc:grpc" 52CVE_PRODUCT += "grpc:grpc"
53CVE_STATUS[CVE-2026-33186] = "cpe-incorrect: the vulnerabilty affects only the go implementation"
diff --git a/meta-python/recipes-devtools/python/python3-gunicorn_23.0.0.bb b/meta-python/recipes-devtools/python/python3-gunicorn_25.3.0.bb
index f629214b5a..cf41feae70 100644
--- a/meta-python/recipes-devtools/python/python3-gunicorn_23.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-gunicorn_25.3.0.bb
@@ -1,9 +1,9 @@
1SUMMARY = "WSGI HTTP Server for UNIX" 1SUMMARY = "WSGI HTTP Server for UNIX"
2 2
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=5b70a8b30792a916f50dc96123e61ddf" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=5dc9171ccd8fcbd7827c850148b3ca98"
5 5
6SRC_URI[sha256sum] = "f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec" 6SRC_URI[sha256sum] = "f74e1b2f9f76f6cd1ca01198968bd2dd65830edc24b6e8e4d78de8320e2fe889"
7 7
8inherit pypi python_setuptools_build_meta ptest 8inherit pypi python_setuptools_build_meta ptest
9 9
@@ -15,6 +15,7 @@ SRC_URI += " \
15 15
16# python-misc for wsgiref 16# python-misc for wsgiref
17RDEPENDS:${PN}-ptest += " \ 17RDEPENDS:${PN}-ptest += " \
18 bash \
18 python3-eventlet \ 19 python3-eventlet \
19 python3-gevent \ 20 python3-gevent \
20 python3-misc \ 21 python3-misc \
diff --git a/meta-python/recipes-devtools/python/python3-h5py_3.15.0.bb b/meta-python/recipes-devtools/python/python3-h5py_3.16.0.bb
index dd71a18534..883aeb2033 100644
--- a/meta-python/recipes-devtools/python/python3-h5py_3.15.0.bb
+++ b/meta-python/recipes-devtools/python/python3-h5py_3.16.0.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
4LICENSE = "BSD-3-Clause" 4LICENSE = "BSD-3-Clause"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=113251d71fb0384712c719b567261c5c" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=113251d71fb0384712c719b567261c5c"
6 6
7SRC_URI[sha256sum] = "ede198dde0c359a3f9dc0af15962707c7195102235cb26b4826e33918789559a" 7SRC_URI[sha256sum] = "a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738"
8 8
9SRC_URI += "file://0001-setup_build.py-avoid-absolute-path.patch" 9SRC_URI += "file://0001-setup_build.py-avoid-absolute-path.patch"
10 10
diff --git a/meta-python/recipes-devtools/python/python3-html5lib/0001-setup.py-make-pkg_resources-import-optional-for-Pyth.patch b/meta-python/recipes-devtools/python/python3-html5lib/0001-setup.py-make-pkg_resources-import-optional-for-Pyth.patch
new file mode 100644
index 0000000000..f791b663f2
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-html5lib/0001-setup.py-make-pkg_resources-import-optional-for-Pyth.patch
@@ -0,0 +1,44 @@
1From 5bae4e7b62996f1ef1b9ee6719581bde115d762c Mon Sep 17 00:00:00 2001
2From: Peter Marko <peter.marko@siemens.com>
3Date: Fri, 13 Mar 2026 13:37:58 +0100
4Subject: [PATCH] setup.py: make pkg_resources import optional for Python 3.12+
5
6pkg_resources has been removed from newer Python/setuptools versions.
7Wrap the import in a try/except block and guard the usage site,
8allowing html5lib to build without pkg_resources present.
9
10Upstream-Status: Pending
11Signed-off-by: Peter Marko <peter.marko@siemens.com>
12---
13 setup.py | 10 +++++++---
14 1 file changed, 7 insertions(+), 3 deletions(-)
15
16diff --git a/setup.py b/setup.py
17index c393c9c..e659e98 100644
18--- a/setup.py
19+++ b/setup.py
20@@ -6,9 +6,13 @@ import sys
21
22 from os.path import join, dirname
23 from setuptools import setup, find_packages, __version__ as setuptools_version
24-from pkg_resources import parse_version
25
26-import pkg_resources
27+try:
28+ from pkg_resources import parse_version
29+ import pkg_resources
30+except ImportError:
31+ parse_version = None
32+ pkg_resources = None
33
34 try:
35 import _markerlib.markers
36@@ -49,7 +53,7 @@ if _markerlib and sys.version_info[0] == 3:
37 # Avoid the very buggy pkg_resources.parser, which doesn't consistently
38 # recognise the markers needed by this setup.py
39 # Change this to setuptools 20.10.0 to support all markers.
40-if pkg_resources:
41+if pkg_resources and parse_version:
42 if parse_version(setuptools_version) < parse_version('18.5'):
43 MarkerEvaluation = pkg_resources.MarkerEvaluation
44
diff --git a/meta-python/recipes-devtools/python/python3-html5lib_1.1.bb b/meta-python/recipes-devtools/python/python3-html5lib_1.1.bb
index 3d7e44b87e..9c92164546 100644
--- a/meta-python/recipes-devtools/python/python3-html5lib_1.1.bb
+++ b/meta-python/recipes-devtools/python/python3-html5lib_1.1.bb
@@ -3,6 +3,7 @@ LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://LICENSE;md5=1ba5ada9e6fead1fdc32f43c9f10ba7c" 3LIC_FILES_CHKSUM = "file://LICENSE;md5=1ba5ada9e6fead1fdc32f43c9f10ba7c"
4 4
5SRC_URI += "file://0001-setup.py-fix-version-parsing-on-Python-3.14-ast.Str-.patch" 5SRC_URI += "file://0001-setup.py-fix-version-parsing-on-Python-3.14-ast.Str-.patch"
6SRC_URI += "file://0001-setup.py-make-pkg_resources-import-optional-for-Pyth.patch"
6SRC_URI[sha256sum] = "b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f" 7SRC_URI[sha256sum] = "b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"
7 8
8inherit pypi setuptools3 9inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-httplib2_0.31.0.bb b/meta-python/recipes-devtools/python/python3-httplib2_0.31.2.bb
index 39f3459320..073818a7f9 100644
--- a/meta-python/recipes-devtools/python/python3-httplib2_0.31.0.bb
+++ b/meta-python/recipes-devtools/python/python3-httplib2_0.31.2.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=56e5e931172b6164b62dc7c4aba6c8cf" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=56e5e931172b6164b62dc7c4aba6c8cf"
6 6
7SRC_URI[sha256sum] = "ac7ab497c50975147d4f7b1ade44becc7df2f8954d42b38b3d69c515f531135c" 7SRC_URI[sha256sum] = "385e0869d7397484f4eab426197a4c020b606edd43372492337c0b4010ae5d24"
8 8
9inherit pypi python_setuptools_build_meta 9inherit pypi python_setuptools_build_meta
10 10
diff --git a/meta-python/recipes-devtools/python/python3-httptools/0001-Allow-building-with-latest-setuptools.patch b/meta-python/recipes-devtools/python/python3-httptools/0001-Allow-building-with-latest-setuptools.patch
new file mode 100644
index 0000000000..cad199f275
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-httptools/0001-Allow-building-with-latest-setuptools.patch
@@ -0,0 +1,23 @@
1From 61e4a5acc1ec27ca295f4c0f288b97208fec1f78 Mon Sep 17 00:00:00 2001
2From: Gyorgy Sarvari <skandigraun@gmail.com>
3Date: Sat, 14 Mar 2026 16:55:54 +0100
4Subject: [PATCH] Allow building with latest setuptools
5
6Upstream-Status: Submitted [https://github.com/MagicStack/httptools/pull/138]
7Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
8---
9 pyproject.toml | 2 +-
10 1 file changed, 1 insertion(+), 1 deletion(-)
11
12diff --git a/pyproject.toml b/pyproject.toml
13index e2acba3..86c46de 100644
14--- a/pyproject.toml
15+++ b/pyproject.toml
16@@ -1,6 +1,6 @@
17 [build-system]
18 build-backend = "setuptools.build_meta"
19-requires = ["setuptools==80.9.0"]
20+requires = ["setuptools>=80.9.0,<=82.0.1"]
21
22 [project]
23 name = "httptools"
diff --git a/meta-python/recipes-devtools/python/python3-httptools_0.7.1.bb b/meta-python/recipes-devtools/python/python3-httptools_0.7.1.bb
index f961745a1b..01e317732b 100644
--- a/meta-python/recipes-devtools/python/python3-httptools_0.7.1.bb
+++ b/meta-python/recipes-devtools/python/python3-httptools_0.7.1.bb
@@ -6,3 +6,4 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=0a2d82955bf3facdf04cb882655e840e"
6inherit pypi python_setuptools_build_meta ptest-python-pytest 6inherit pypi python_setuptools_build_meta ptest-python-pytest
7 7
8SRC_URI[sha256sum] = "abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9" 8SRC_URI[sha256sum] = "abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9"
9SRC_URI += "file://0001-Allow-building-with-latest-setuptools.patch"
diff --git a/meta-python/recipes-devtools/python/python3-huey_2.6.0.bb b/meta-python/recipes-devtools/python/python3-huey_3.0.0.bb
index 2821262153..f07383ed45 100644
--- a/meta-python/recipes-devtools/python/python3-huey_2.6.0.bb
+++ b/meta-python/recipes-devtools/python/python3-huey_3.0.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=5cac039fcc82f01141cc170b48f315d4"
5 5
6PYPI_PACKAGE = "huey" 6PYPI_PACKAGE = "huey"
7 7
8SRC_URI[sha256sum] = "8d11f8688999d65266af1425b831f6e3773e99415027177b8734b0ffd5e251f6" 8SRC_URI[sha256sum] = "0cfc83617b90132b0d375a3a3726aa7263cd461e7ae12af79b3a94e2630afaf5"
9 9
10RDEPENDS:${PN} += " \ 10RDEPENDS:${PN} += " \
11 python3-datetime \ 11 python3-datetime \
diff --git a/meta-python/recipes-devtools/python/python3-humanfriendly_10.0.bb b/meta-python/recipes-devtools/python/python3-humanfriendly_10.0.bb
index b32fe2e1d0..184ce28c1a 100644
--- a/meta-python/recipes-devtools/python/python3-humanfriendly_10.0.bb
+++ b/meta-python/recipes-devtools/python/python3-humanfriendly_10.0.bb
@@ -10,7 +10,7 @@ SRC_URI[sha256sum] = "6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2
10 10
11inherit pypi setuptools3 11inherit pypi setuptools3
12 12
13RDEPENDS:${PN}:class-target += " \ 13RDEPENDS:${PN}:append:class-target = " \
14 python3-datetime \ 14 python3-datetime \
15 python3-fcntl \ 15 python3-fcntl \
16 python3-io \ 16 python3-io \
diff --git a/meta-python/recipes-devtools/python/python3-icecream_2.1.9.bb b/meta-python/recipes-devtools/python/python3-icecream_2.2.0.bb
index 82b2039334..e307311834 100644
--- a/meta-python/recipes-devtools/python/python3-icecream_2.1.9.bb
+++ b/meta-python/recipes-devtools/python/python3-icecream_2.2.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/gruns/icecream"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=eca5ce1610d64ed40920efdce85ff8d1" 4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=eca5ce1610d64ed40920efdce85ff8d1"
5 5
6SRC_URI[sha256sum] = "e47b6477d29848949ee5050127aeb88fd30f1908e5cf29772e8a1a0fcdf15473" 6SRC_URI[sha256sum] = "9d7f244187f00a13f4ac77d176990e187e9c279d6cac4f7548e338291ad97343"
7 7
8inherit pypi setuptools3 8inherit pypi setuptools3
9 9
diff --git a/meta-python/recipes-devtools/python/python3-icontract_2.7.2.bb b/meta-python/recipes-devtools/python/python3-icontract_2.7.3.bb
index 355f1fd88b..e76c7af8b0 100644
--- a/meta-python/recipes-devtools/python/python3-icontract_2.7.2.bb
+++ b/meta-python/recipes-devtools/python/python3-icontract_2.7.3.bb
@@ -3,11 +3,9 @@ HOMEPAGE = "https://pypi.org/project/icontract"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=1d4a9b1f6b84bedf7a38843931e0dd57" 4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=1d4a9b1f6b84bedf7a38843931e0dd57"
5 5
6PR = "r0"
7
8inherit pypi setuptools3 6inherit pypi setuptools3
9PYPI_PACKAGE = "icontract" 7PYPI_PACKAGE = "icontract"
10SRC_URI[sha256sum] = "281ec16f1d09bbcca7a4227e82cd10b4d5fb291f638df77c29b7acf493dd3178" 8SRC_URI[sha256sum] = "df37a43d86d532407bc6b84dea29dd9f7ece794b73211769fa8a33a76b8ed145"
11 9
12RDEPENDS:${PN} += "python3-asttokens" 10RDEPENDS:${PN} += "python3-asttokens"
13 11
diff --git a/meta-python/recipes-devtools/python/python3-icu_2.16.bb b/meta-python/recipes-devtools/python/python3-icu_2.16.2.bb
index c46e4e9f8b..ca7cca4457 100644
--- a/meta-python/recipes-devtools/python/python3-icu_2.16.bb
+++ b/meta-python/recipes-devtools/python/python3-icu_2.16.2.bb
@@ -10,7 +10,7 @@ DEPENDS += "icu"
10PYPI_PACKAGE = "pyicu" 10PYPI_PACKAGE = "pyicu"
11UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 11UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
12 12
13SRC_URI[sha256sum] = "42b3a8062e3b23e927ca727e6b5e1730d86c70279834e4887152895d2eb012d9" 13SRC_URI[sha256sum] = "006d51e24b5ec76df6ec2130f3dde269c51db8b8cfebb7d45a427dde0d10aa52"
14 14
15SRC_URI += "file://0001-Fix-host-contamination-of-include-files.patch" 15SRC_URI += "file://0001-Fix-host-contamination-of-include-files.patch"
16 16
@@ -18,3 +18,5 @@ inherit pkgconfig pypi python_setuptools_build_meta
18 18
19# it's lowercase pyicu instead of ${PYPI_PACKAGE} in this version 19# it's lowercase pyicu instead of ${PYPI_PACKAGE} in this version
20S = "${UNPACKDIR}/pyicu-${PV}" 20S = "${UNPACKDIR}/pyicu-${PV}"
21
22BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-identify_2.6.15.bb b/meta-python/recipes-devtools/python/python3-identify_2.6.18.bb
index c5498cf294..7418b43150 100644
--- a/meta-python/recipes-devtools/python/python3-identify_2.6.15.bb
+++ b/meta-python/recipes-devtools/python/python3-identify_2.6.18.bb
@@ -5,7 +5,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=bbdc006359f3157660173ec7f133a80e"
5PYPI_PACKAGE = "identify" 5PYPI_PACKAGE = "identify"
6 6
7inherit pypi setuptools3 7inherit pypi setuptools3
8SRC_URI[sha256sum] = "e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf" 8
9SRC_URI[sha256sum] = "873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd"
9 10
10RDEPENDS:${PN} = " \ 11RDEPENDS:${PN} = " \
11 python3-ukkonen \ 12 python3-ukkonen \
diff --git a/meta-python/recipes-devtools/python/python3-imageio_2.37.2.bb b/meta-python/recipes-devtools/python/python3-imageio_2.37.3.bb
index 582cd348f9..b90f1ba863 100644
--- a/meta-python/recipes-devtools/python/python3-imageio_2.37.2.bb
+++ b/meta-python/recipes-devtools/python/python3-imageio_2.37.3.bb
@@ -3,9 +3,9 @@ write a wide range of image data, including animated images, video, \
3volumetric data, and scientific formats." 3volumetric data, and scientific formats."
4SECTION = "devel/python" 4SECTION = "devel/python"
5LICENSE = "BSD-2-Clause" 5LICENSE = "BSD-2-Clause"
6LIC_FILES_CHKSUM = "file://LICENSE;md5=9da78aa88ef5e9acd41f7bb288286273" 6LIC_FILES_CHKSUM = "file://LICENSE;md5=6c492278d46e42af592aa26d7cab1e54"
7 7
8SRC_URI[sha256sum] = "0212ef2727ac9caa5ca4b2c75ae89454312f440a756fcfc8ef1993e718f50f8a" 8SRC_URI[sha256sum] = "bbb37efbfc4c400fcd534b367b91fcd66d5da639aaa138034431a1c5e0a41451"
9 9
10inherit pypi python_setuptools_build_meta 10inherit pypi python_setuptools_build_meta
11 11
diff --git a/meta-python/recipes-devtools/python/python3-imgtool_2.3.0.bb b/meta-python/recipes-devtools/python/python3-imgtool_2.4.0.bb
index ed647143cc..6b88fc0535 100644
--- a/meta-python/recipes-devtools/python/python3-imgtool_2.3.0.bb
+++ b/meta-python/recipes-devtools/python/python3-imgtool_2.4.0.bb
@@ -3,7 +3,7 @@ SUMMARY = "MCUboot's image signing and key management tool"
3LICENSE = "Apache-2.0" 3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://imgtool/main.py;beginline=3;endline=18;md5=0645fb61e2f961a110302fbfdb227446" 4LIC_FILES_CHKSUM = "file://imgtool/main.py;beginline=3;endline=18;md5=0645fb61e2f961a110302fbfdb227446"
5 5
6SRC_URI[sha256sum] = "fff72e4e793ac0ec02a493c19548715ccc0a2358afaeeaa10b49ccc2e0bd1295" 6SRC_URI[sha256sum] = "ef2db1d9e3f62b9bc9425a8e86c4ea7212c164f0a16e923d55250f0d8743342e"
7 7
8inherit pypi setuptools3 8inherit pypi setuptools3
9 9
diff --git a/meta-python/recipes-devtools/python/python3-importlib-metadata_8.7.1.bb b/meta-python/recipes-devtools/python/python3-importlib-metadata_9.0.0.bb
index 4c00739aa3..61f531a9c1 100644
--- a/meta-python/recipes-devtools/python/python3-importlib-metadata_8.7.1.bb
+++ b/meta-python/recipes-devtools/python/python3-importlib-metadata_9.0.0.bb
@@ -1,14 +1,14 @@
1SUMMARY = "Read metadata from Python packages" 1SUMMARY = "Read metadata from Python packages"
2HOMEPAGE = "https://pypi.org/project/importlib-metadata/" 2HOMEPAGE = "https://pypi.org/project/importlib-metadata/"
3LICENSE = "Apache-2.0" 3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=cf73015ea0156450506e8000d1f7fa37" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=affe5a7d8b988c3db245c01075b29e17"
5 5
6inherit pypi python_setuptools_build_meta 6inherit pypi python_setuptools_build_meta
7 7
8PYPI_PACKAGE = "importlib_metadata" 8PYPI_PACKAGE = "importlib_metadata"
9UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 9UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
10 10
11SRC_URI[sha256sum] = "49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb" 11SRC_URI[sha256sum] = "a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc"
12 12
13S = "${UNPACKDIR}/importlib_metadata-${PV}" 13S = "${UNPACKDIR}/importlib_metadata-${PV}"
14 14
diff --git a/meta-python/recipes-devtools/python/python3-inline-snapshot_0.30.1.bb b/meta-python/recipes-devtools/python/python3-inline-snapshot_0.32.6.bb
index ea1f15a5bd..1bcd3a457f 100644
--- a/meta-python/recipes-devtools/python/python3-inline-snapshot_0.30.1.bb
+++ b/meta-python/recipes-devtools/python/python3-inline-snapshot_0.32.6.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=7a35eb90dfdf03953dd2074d0fdba1d4" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=7a35eb90dfdf03953dd2074d0fdba1d4"
5 5
6DEPENDS = "python3-hatchling-native" 6DEPENDS = "python3-hatchling-native"
7SRC_URI[sha256sum] = "77c2e94a40f2da02909b39e3386c9fc23f532c92af45558e2d7bbabb5fd0cbc1" 7SRC_URI[sha256sum] = "224a96eeb86c4b2831d274239d3468dc0b7819264f608f595b2f9d01f79a6e38"
8 8
9inherit pypi python_hatchling 9inherit pypi python_hatchling
10 10
diff --git a/meta-python/recipes-devtools/python/python3-ipython_9.9.0.bb b/meta-python/recipes-devtools/python/python3-ipython_9.12.0.bb
index 53d334e251..1dcac8b51c 100644
--- a/meta-python/recipes-devtools/python/python3-ipython_9.9.0.bb
+++ b/meta-python/recipes-devtools/python/python3-ipython_9.12.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://ipython.org"
3LICENSE = "BSD-3-Clause" 3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://COPYING.rst;md5=59b20262b8663cdd094005bddf47af5f" 4LIC_FILES_CHKSUM = "file://COPYING.rst;md5=59b20262b8663cdd094005bddf47af5f"
5 5
6SRC_URI[sha256sum] = "48fbed1b2de5e2c7177eefa144aba7fcb82dac514f09b57e2ac9da34ddb54220" 6SRC_URI[sha256sum] = "01daa83f504b693ba523b5a407246cabde4eb4513285a3c6acaff11a66735ee4"
7 7
8RDEPENDS:${PN} = "\ 8RDEPENDS:${PN} = "\
9 python3-setuptools \ 9 python3-setuptools \
diff --git a/meta-python/recipes-devtools/python/python3-isort_7.0.0.bb b/meta-python/recipes-devtools/python/python3-isort_8.0.1.bb
index 86ad769b1d..b8e32a5563 100644
--- a/meta-python/recipes-devtools/python/python3-isort_7.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-isort_8.0.1.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT"
4SECTION = "devel/python" 4SECTION = "devel/python"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=197c46995787b46a2dbf0d519c1754cf" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=197c46995787b46a2dbf0d519c1754cf"
6 6
7SRC_URI[sha256sum] = "5513527951aadb3ac4292a41a16cbc50dd1642432f5e8c20057d414bdafb4187" 7SRC_URI[sha256sum] = "171ac4ff559cdc060bcfff550bc8404a486fee0caab245679c2abe7cb253c78d"
8 8
9inherit pypi python_hatchling 9inherit pypi python_hatchling
10 10
diff --git a/meta-python/recipes-devtools/python/python3-jmespath_1.0.1.bb b/meta-python/recipes-devtools/python/python3-jmespath_1.1.0.bb
index 73f5f4d025..5d03382e69 100644
--- a/meta-python/recipes-devtools/python/python3-jmespath_1.0.1.bb
+++ b/meta-python/recipes-devtools/python/python3-jmespath_1.1.0.bb
@@ -2,9 +2,9 @@ SUMMARY = "JMESPath (pronounced 'james path') allows you to declaratively specif
2HOMEPAGE = "https://pypi.org/project/jmespath/" 2HOMEPAGE = "https://pypi.org/project/jmespath/"
3SECTION = "devel/python" 3SECTION = "devel/python"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2683790f5fabb41a3f75b70558799eb4" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=03b6f09850fb409684cafac03f85aff1"
6 6
7SRC_URI[sha256sum] = "90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe" 7SRC_URI[sha256sum] = "472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d"
8 8
9inherit pypi setuptools3 9inherit pypi setuptools3
10 10
diff --git a/meta-python/recipes-devtools/python/python3-kiwisolver_1.4.9.bb b/meta-python/recipes-devtools/python/python3-kiwisolver_1.5.0.bb
index f84a427446..6669559fcc 100644
--- a/meta-python/recipes-devtools/python/python3-kiwisolver_1.4.9.bb
+++ b/meta-python/recipes-devtools/python/python3-kiwisolver_1.5.0.bb
@@ -1,9 +1,9 @@
1SUMMARY = "A fast implementation of the Cassowary constraint solver" 1SUMMARY = "A fast implementation of the Cassowary constraint solver"
2HOMEPAGE = "https://github.com/nucleic/kiwi" 2HOMEPAGE = "https://github.com/nucleic/kiwi"
3LICENSE = "BSD-3-Clause" 3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=27a71439e89b80e41dc526a4b8bbfa2f" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=7a2c756dc2da8fbde2a254cae9a9320e"
5 5
6SRC_URI[sha256sum] = "c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d" 6SRC_URI[sha256sum] = "d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
diff --git a/meta-python/recipes-devtools/python/python3-langtable_0.0.69.bb b/meta-python/recipes-devtools/python/python3-langtable_0.0.70.bb
index 27ab97cd9b..7df58f4e0f 100644
--- a/meta-python/recipes-devtools/python/python3-langtable_0.0.69.bb
+++ b/meta-python/recipes-devtools/python/python3-langtable_0.0.70.bb
@@ -6,7 +6,7 @@ SECTION = "devel/python"
6 6
7LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504" 7LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
8 8
9SRC_URI[sha256sum] = "f0a51870cf837fd689094ce73a420efa0b9b470facda551090f9a93d1e16510c" 9SRC_URI[sha256sum] = "725b94121856a3b76d2345e8596954b82ed1eda78513e55ac55fbe4a4823e66e"
10 10
11inherit pypi setuptools3 python3native 11inherit pypi setuptools3 python3native
12 12
diff --git a/meta-python/recipes-devtools/python/python3-legacy-cgi_2.6.2.bb b/meta-python/recipes-devtools/python/python3-legacy-cgi_2.6.4.bb
index 2b2840ae14..85328ed951 100644
--- a/meta-python/recipes-devtools/python/python3-legacy-cgi_2.6.2.bb
+++ b/meta-python/recipes-devtools/python/python3-legacy-cgi_2.6.4.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=4b8801e752a2c70ac41a5f9aa243f766"
5 5
6PYPI_PACKAGE = "legacy_cgi" 6PYPI_PACKAGE = "legacy_cgi"
7 7
8inherit python_poetry_core pypi 8inherit python_poetry_core pypi python_hatchling
9 9
10SRC_URI += "\ 10SRC_URI += "\
11 file://0001-cgi.py-fixup-interpreter-according-to-OE.patch \ 11 file://0001-cgi.py-fixup-interpreter-according-to-OE.patch \
@@ -15,8 +15,13 @@ DEPENDS += "\
15 ${PYTHON_PN}-setuptools-scm-native \ 15 ${PYTHON_PN}-setuptools-scm-native \
16" 16"
17 17
18# Add this function to solve package QA Issue
19do_install:append() {
20 rm ${D}${PYTHON_SITEPACKAGES_DIR}/.pc -rf
21}
22
18#RDEPENDS:${PN} = "python3-core" 23#RDEPENDS:${PN} = "python3-core"
19 24
20BBCLASSEXTEND = "native nativesdk" 25BBCLASSEXTEND = "native nativesdk"
21 26
22SRC_URI[sha256sum] = "9952471ceb304043b104c22d00b4f333cac27a6abe446d8a528fc437cf13c85f" 27SRC_URI[sha256sum] = "abb9dfc7835772f7c9317977c63253fd22a7484b5c9bbcdca60a29dcce97c577"
diff --git a/meta-python/recipes-devtools/python/python3-lief_0.17.2.bb b/meta-python/recipes-devtools/python/python3-lief_0.17.3.bb
index 44b4976ab1..fe954e1b32 100644
--- a/meta-python/recipes-devtools/python/python3-lief_0.17.2.bb
+++ b/meta-python/recipes-devtools/python/python3-lief_0.17.3.bb
@@ -5,7 +5,7 @@ LICENSE = "Apache-2.0"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=9ab5db472ff936b441055522f5000547" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=9ab5db472ff936b441055522f5000547"
6SECTION = "libs" 6SECTION = "libs"
7 7
8SRCREV = "aa2b617f47c2f75fca9ff00b146dabbaf1b9f422" 8SRCREV = "03aca30b53db2f336b36f90843061bb3f840ff5a"
9SRC_URI = " \ 9SRC_URI = " \
10 git://github.com/lief-project/LIEF.git;protocol=https;branch=release/0.17.x;tag=${PV} \ 10 git://github.com/lief-project/LIEF.git;protocol=https;branch=release/0.17.x;tag=${PV} \
11 file://0001-build-requirements.txt-Allow-newer-versions.patch \ 11 file://0001-build-requirements.txt-Allow-newer-versions.patch \
@@ -13,7 +13,6 @@ SRC_URI = " \
13" 13"
14 14
15CVE_PRODUCT = "lief" 15CVE_PRODUCT = "lief"
16CVE_STATUS[CVE-2025-15504] = "fixed-version: the vulnerability is fixed since v0.17.2"
17 16
18PEP517_SOURCE_PATH = "${S}/api/python" 17PEP517_SOURCE_PATH = "${S}/api/python"
19 18
diff --git a/meta-python/recipes-devtools/python/python3-limits_5.8.0.bb b/meta-python/recipes-devtools/python/python3-limits_5.8.0.bb
new file mode 100644
index 0000000000..0439a0e132
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-limits_5.8.0.bb
@@ -0,0 +1,18 @@
1SUMMARY = "Rate limiting utilities"
2DESCRIPTION = "About Rate limiting using various strategies and \
3storage backends such as redis, memcached & mongodb"
4HOMEPAGE = "https://github.com/alisaifee/limits"
5LICENSE = "MIT"
6LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2455d5e574bc0fc489411ca45766ac78"
7
8SRC_URI[sha256sum] = "c9e0d74aed837e8f6f50d1fcebcf5fd8130957287206bc3799adaee5092655da"
9
10inherit pypi python_hatchling
11
12DEPENDS += "python3-hatch-vcs-native"
13
14RDEPENDS:${PN} += " \
15 python3-deprecated \
16 python3-packaging \
17 python3-typing-extensions \
18"
diff --git a/meta-python/recipes-devtools/python/python3-luma-oled_3.14.0.bb b/meta-python/recipes-devtools/python/python3-luma-oled_3.15.0.bb
index 0c0906cedc..1182ad1de3 100644
--- a/meta-python/recipes-devtools/python/python3-luma-oled_3.14.0.bb
+++ b/meta-python/recipes-devtools/python/python3-luma-oled_3.15.0.bb
@@ -4,11 +4,11 @@ A small library to drive an OLED device with either SSD1306 , SSD1309, SSD1322,
4SSD1325, SSD1327, SSD1331, SSD1351 or SH1106 chipset" 4SSD1325, SSD1327, SSD1331, SSD1351 or SH1106 chipset"
5HOMEPAGE = "https://github.com/rm-hull/luma.oled" 5HOMEPAGE = "https://github.com/rm-hull/luma.oled"
6LICENSE = "MIT" 6LICENSE = "MIT"
7LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=95cba8b3a40c6f55d5d901980fe6e067" 7LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ddfca5d3a55dc20707b094137c913c4c"
8 8
9inherit pypi python_setuptools_build_meta 9inherit pypi python_setuptools_build_meta
10 10
11SRC_URI[sha256sum] = "36218565eda0614c8cf44ef42cb9a5904ddf808e4516e99ddae111fc93c5a206" 11SRC_URI[sha256sum] = "16925fe668f484803df0683add800b19e5dd7316a1d64eb06ec2ae817473901e"
12 12
13PYPI_PACKAGE = "luma_oled" 13PYPI_PACKAGE = "luma_oled"
14UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 14UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
diff --git a/meta-python/recipes-devtools/python/python3-m2crypto/0001-fix-allow-64-bit-time_t-on-32-bit-systems-in-test_is.patch b/meta-python/recipes-devtools/python/python3-m2crypto/0001-fix-allow-64-bit-time_t-on-32-bit-systems-in-test_is.patch
deleted file mode 100644
index d49950074f..0000000000
--- a/meta-python/recipes-devtools/python/python3-m2crypto/0001-fix-allow-64-bit-time_t-on-32-bit-systems-in-test_is.patch
+++ /dev/null
@@ -1,40 +0,0 @@
1From d123b4ddce99c44f2c290fb3d6cc887de98778e6 Mon Sep 17 00:00:00 2001
2From: Haixiao Yan <haixiao.yan.cn@windriver.com>
3Date: Wed, 22 Oct 2025 15:23:56 +0800
4Subject: [PATCH 1/2] fix: allow 64-bit time_t on 32-bit systems in
5 test_is32bit
6
7Some modern 32-bit Linux systems (e.g. with glibc >= 2.34 or musl time64 ABI)
8use 64-bit time_t by default when _TIME_BITS=64 is enabled. The original test
9assumed time_t was always 32-bit on 32-bit architectures, which is no longer
10true.
11
12Relax the check to accept both 32-bit and 64-bit time_t values:
13
14 self.assertIn(bit32, (32, 64))
15
16This makes the test compatible with both legacy and time64 ABIs.
17
18Upstream-Status: Backport [https://gitlab.com/m2crypto/m2crypto/-/commit/818c3dfda6ea]
19
20Signed-off-by: Haixiao Yan <haixiao.yan.cn@windriver.com>
21---
22 tests/test_util.py | 2 +-
23 1 file changed, 1 insertion(+), 1 deletion(-)
24
25diff --git a/tests/test_util.py b/tests/test_util.py
26index e925d03b090c..233fb7a099d9 100644
27--- a/tests/test_util.py
28+++ b/tests/test_util.py
29@@ -26,7 +26,7 @@ class UtilTestCase(unittest.TestCase):
30 not in ["true", "1", "yes"]
31 )
32 ):
33- self.assertEqual(bit32, 32)
34+ self.assertIn(bit32, (32, 64))
35 else:
36 self.assertNotEqual(bit32, 32)
37 self.assertIsInstance(bit32, int)
38--
392.34.1
40
diff --git a/meta-python/recipes-devtools/python/python3-m2crypto/0001-fix-swig-avoid-clang-GNUC-pragma-block-before-_lib.h.patch b/meta-python/recipes-devtools/python/python3-m2crypto/0001-fix-swig-avoid-clang-GNUC-pragma-block-before-_lib.h.patch
new file mode 100644
index 0000000000..7aa768f44d
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-m2crypto/0001-fix-swig-avoid-clang-GNUC-pragma-block-before-_lib.h.patch
@@ -0,0 +1,49 @@
1From df210da932c2cab9d3a80ee88c70611d77824a15 Mon Sep 17 00:00:00 2001
2From: Wang Mingyu <wangmy@fujitsu.com>
3Date: Wed, 18 Mar 2026 02:26:56 +0000
4Subject: [PATCH] fix(swig): avoid clang GNUC pragma block before _lib.h
5
6Clang defines __GNUC__, so the old guard emitted PRAGMA_* tokens before
7they were defined, breaking builds on macOS/clang; move the block after
8<_lib.h> and exclude clang while keeping the GCC<5 workaround.
9
10Fixes: https://todo.sr.ht/~mcepl/m2crypto/392
11
12Upstream-Status: Backport [git.sr.ht/~mcepl/m2crypto/commit/504ca8f438afb0f5041d2b5163e5f666a9a1b742.patch]
13
14Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
15---
16 src/SWIG/_m2crypto.i | 13 ++++++++-----
17 1 file changed, 8 insertions(+), 5 deletions(-)
18
19diff --git a/src/SWIG/_m2crypto.i b/src/SWIG/_m2crypto.i
20index d89d355..5426446 100644
21--- a/src/SWIG/_m2crypto.i
22+++ b/src/SWIG/_m2crypto.i
23@@ -43,15 +43,18 @@ typedef unsigned __int64 uint64_t;
24 %}
25
26 %{
27-#if defined __GNUC__ && __GNUC__ < 5
28-PRAGMA_IGNORE_UNUSED_LABEL
29-PRAGMA_WARN_STRICT_PROTOTYPES
30-#endif
31-
32 #include <openssl/err.h>
33 #include <openssl/rand.h>
34 #include <_lib.h>
35
36+/* _lib.h defines PRAGMA_* helpers; only needed for old GCC (clang defines
37+ * __GNUC__ too, but doesn't need this workaround).
38+ */
39+#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ < 5)
40+PRAGMA_IGNORE_UNUSED_LABEL
41+PRAGMA_WARN_STRICT_PROTOTYPES
42+#endif
43+
44 #include "compile.h"
45
46 static PyObject *ssl_verify_cb_func;
47--
482.43.0
49
diff --git a/meta-python/recipes-devtools/python/python3-m2crypto/0002-fix-correct-struct-packing-on-32-bit-with-_TIME_BITS.patch b/meta-python/recipes-devtools/python/python3-m2crypto/0002-fix-correct-struct-packing-on-32-bit-with-_TIME_BITS.patch
deleted file mode 100644
index c36afa5cc0..0000000000
--- a/meta-python/recipes-devtools/python/python3-m2crypto/0002-fix-correct-struct-packing-on-32-bit-with-_TIME_BITS.patch
+++ /dev/null
@@ -1,72 +0,0 @@
1From b5dbfca23986429853ccb15a38cc526d9df0dd40 Mon Sep 17 00:00:00 2001
2From: Haixiao Yan <haixiao.yan.cn@windriver.com>
3Date: Wed, 22 Oct 2025 15:23:57 +0800
4Subject: [PATCH 2/2] fix: correct struct packing on 32-bit with _TIME_BITS=64
5
6On 32-bit platforms with glibc time64 ABI, time_t is 64-bit wide while
7`long` remains 32-bit. This causes struct timeval to use two 64-bit fields
8(tv_sec, tv_usec). The previous code incorrectly packed timeout as "ll",
9leading to EINVAL in setsockopt(SO_RCVTIMEO).
10
11Use "qq" instead when m2.time_t_bits() == 64 to match the actual ABI.
12
13Fixes: https://todo.sr.ht/~mcepl/m2crypto/374
14
15Upstream-Status: Backport [https://gitlab.com/m2crypto/m2crypto/-/commit/473de659f78e]
16
17Signed-off-by: Haixiao Yan <haixiao.yan.cn@windriver.com>
18---
19 src/M2Crypto/SSL/timeout.py | 24 ++++++++++++++++++++----
20 1 file changed, 20 insertions(+), 4 deletions(-)
21
22diff --git a/src/M2Crypto/SSL/timeout.py b/src/M2Crypto/SSL/timeout.py
23index b45f38b1cbdb..5ba52283b6f8 100644
24--- a/src/M2Crypto/SSL/timeout.py
25+++ b/src/M2Crypto/SSL/timeout.py
26@@ -33,10 +33,14 @@ class timeout(object):
27 millisec = int(self.sec * 1000 + round(float(self.microsec) / 1000))
28 binstr = struct.pack("l", millisec)
29 else:
30- if m2.time_t_bits() == 32:
31+ bits = m2.time_t_bits()
32+ if bits == 32:
33 binstr = struct.pack("ii", self.sec, self.microsec)
34+ elif bits == 64:
35+ # handle both 64-bit and 32-bit+TIME_BITS=64
36+ binstr = struct.pack("qq", self.sec, self.microsec)
37 else:
38- binstr = struct.pack("ll", self.sec, self.microsec)
39+ raise ValueError(f"Unsupported time_t_bits: {bits}")
40 return binstr
41
42
43@@ -48,7 +52,13 @@ def struct_to_timeout(binstr: bytes) -> timeout:
44 sec = int(millisec / 1000)
45 microsec = (millisec % 1000) * 1000
46 else:
47- (sec, microsec) = struct.unpack("ll", binstr)
48+ bits = m2.time_t_bits()
49+ if bits == 32:
50+ (sec, microsec) = struct.unpack("ii", binstr)
51+ elif bits == 64:
52+ (sec, microsec) = struct.unpack("qq", binstr)
53+ else:
54+ raise ValueError(f"Unsupported time_t_bits: {bits}")
55 return timeout(sec, microsec)
56
57
58@@ -56,4 +66,10 @@ def struct_size() -> int:
59 if sys.platform == "win32":
60 return struct.calcsize("l")
61 else:
62- return struct.calcsize("ll")
63+ bits = m2.time_t_bits()
64+ if bits == 32:
65+ return struct.calcsize("ii")
66+ elif bits == 64:
67+ return struct.calcsize("qq")
68+ else:
69+ raise ValueError(f"Unsupported time_t_bits: {bits}")
70--
712.34.1
72
diff --git a/meta-python/recipes-devtools/python/python3-m2crypto_0.46.2.bb b/meta-python/recipes-devtools/python/python3-m2crypto_0.47.0.bb
index bd7a2369bd..0ebe30f81c 100644
--- a/meta-python/recipes-devtools/python/python3-m2crypto_0.46.2.bb
+++ b/meta-python/recipes-devtools/python/python3-m2crypto_0.47.0.bb
@@ -4,13 +4,10 @@ HOMEPAGE = "https://gitlab.com/m2crypto/m2crypto"
4LICENSE = "BSD-2-Clause" 4LICENSE = "BSD-2-Clause"
5LIC_FILES_CHKSUM = "file://LICENSES/BSD-2-Clause.txt;md5=8099b0e569f862ece05740aef06c82a2" 5LIC_FILES_CHKSUM = "file://LICENSES/BSD-2-Clause.txt;md5=8099b0e569f862ece05740aef06c82a2"
6 6
7SRC_URI[sha256sum] = "13c2fa89562f7b8af40cc74b55f490be5e2ab8ccfb739f11c16d3ce6221a61ba" 7SRC_URI[sha256sum] = "9256300be1e0412be802aa1f827e0ce7f94deb1099b8ccdcfd9867a7f0f975bf"
8 8
9SRC_URI += " \ 9SRC_URI += "file://0001-setup.py-Make-the-cmd-available.patch \
10 file://0001-setup.py-Make-the-cmd-available.patch \ 10 file://0001-fix-swig-avoid-clang-GNUC-pragma-block-before-_lib.h.patch"
11 file://0001-fix-allow-64-bit-time_t-on-32-bit-systems-in-test_is.patch \
12 file://0002-fix-correct-struct-packing-on-32-bit-with-_TIME_BITS.patch \
13"
14 11
15CVE_STATUS[CVE-2009-0127] = "disputed: upstream claims there is no bug" 12CVE_STATUS[CVE-2009-0127] = "disputed: upstream claims there is no bug"
16CVE_STATUS[CVE-2020-25657] = "fixed-version: the used version (0.46.2) contains the fix already" 13CVE_STATUS[CVE-2020-25657] = "fixed-version: the used version (0.46.2) contains the fix already"
@@ -44,7 +41,7 @@ export SWIG_FEATURES
44 41
45export STAGING_DIR 42export STAGING_DIR
46 43
47do_configure:prepend() { 44do_configure:prepend:class-target() {
48 # workaround for https://github.com/swiftlang/swift/issues/69311 45 # workaround for https://github.com/swiftlang/swift/issues/69311
49 sed -i "/sys\/types.h/d" ${RECIPE_SYSROOT}${includedir}/openssl/e_os2.h 46 sed -i "/sys\/types.h/d" ${RECIPE_SYSROOT}${includedir}/openssl/e_os2.h
50} 47}
diff --git a/meta-python/recipes-devtools/python/python3-marshmallow_4.2.0.bb b/meta-python/recipes-devtools/python/python3-marshmallow_4.3.0.bb
index 006f91838c..169726e527 100644
--- a/meta-python/recipes-devtools/python/python3-marshmallow_4.2.0.bb
+++ b/meta-python/recipes-devtools/python/python3-marshmallow_4.3.0.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "\
6 file://LICENSE;md5=27586b20700d7544c06933afe56f7df4 \ 6 file://LICENSE;md5=27586b20700d7544c06933afe56f7df4 \
7 file://docs/license.rst;md5=13da439ad060419fb7cf364523017cfb" 7 file://docs/license.rst;md5=13da439ad060419fb7cf364523017cfb"
8 8
9SRC_URI[sha256sum] = "908acabd5aa14741419d3678d3296bda6abe28a167b7dcd05969ceb8256943ac" 9SRC_URI[sha256sum] = "fb43c53b3fe240b8f6af37223d6ef1636f927ad9bea8ab323afad95dff090880"
10 10
11CVE_PRODUCT = "marshmallow" 11CVE_PRODUCT = "marshmallow"
12 12
diff --git a/meta-python/recipes-devtools/python/python3-matplotlib_3.10.8.bb b/meta-python/recipes-devtools/python/python3-matplotlib_3.10.8.bb
index ce8c7a276a..8489b91402 100644
--- a/meta-python/recipes-devtools/python/python3-matplotlib_3.10.8.bb
+++ b/meta-python/recipes-devtools/python/python3-matplotlib_3.10.8.bb
@@ -47,6 +47,8 @@ RDEPENDS:${PN} = "\
47 python3-packaging \ 47 python3-packaging \
48" 48"
49 49
50TARGET_LDFLAGS:append = " ${DEBUG_PREFIX_MAP}"
51
50CVE_PRODUCT = "matplotlib" 52CVE_PRODUCT = "matplotlib"
51 53
52BBCLASSEXTEND = "native" 54BBCLASSEXTEND = "native"
diff --git a/meta-python/recipes-devtools/python/python3-mdit-py-plugins_0.4.2.bb b/meta-python/recipes-devtools/python/python3-mdit-py-plugins_0.5.0.bb
index ef095c74a8..e449b0f11f 100644
--- a/meta-python/recipes-devtools/python/python3-mdit-py-plugins_0.4.2.bb
+++ b/meta-python/recipes-devtools/python/python3-mdit-py-plugins_0.5.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/executablebooks/mdit-py-plugins"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=a38a1697260a7ad7bf29f44b362db1fc" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=a38a1697260a7ad7bf29f44b362db1fc"
5 5
6SRC_URI[sha256sum] = "5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5" 6SRC_URI[sha256sum] = "f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6"
7 7
8inherit pypi python_flit_core 8inherit pypi python_flit_core
9 9
diff --git a/meta-python/recipes-devtools/python/python3-mmh3_5.2.0.bb b/meta-python/recipes-devtools/python/python3-mmh3_5.2.1.bb
index c719762885..5d4030f46e 100644
--- a/meta-python/recipes-devtools/python/python3-mmh3_5.2.0.bb
+++ b/meta-python/recipes-devtools/python/python3-mmh3_5.2.1.bb
@@ -2,10 +2,10 @@ SUMMARY = "Python extension for MurmurHash (MurmurHash3), a set of fast and \
2 robust hash functions" 2 robust hash functions"
3HOMEPAGE = "https://github.com/hajimes/mmh3" 3HOMEPAGE = "https://github.com/hajimes/mmh3"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=2edf2352bb2cd3d7787f05247781b314" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=53366c60f8214cfc1d3622ebacd141fb"
6 6
7inherit pypi python_setuptools_build_meta 7inherit pypi python_setuptools_build_meta
8 8
9SRC_URI[sha256sum] = "1efc8fec8478e9243a78bb993422cf79f8ff85cb4cf6b79647480a31e0d950a8" 9SRC_URI[sha256sum] = "bbea5b775f0ac84945191fb83f845a6fd9a21a03ea7f2e187defac7e401616ad"
10 10
11BBCLASSEXTEND = "native nativesdk" 11BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-moteus_0.3.97.bb b/meta-python/recipes-devtools/python/python3-moteus_0.3.100.bb
index 313619a5b2..fe12809d78 100644
--- a/meta-python/recipes-devtools/python/python3-moteus_0.3.97.bb
+++ b/meta-python/recipes-devtools/python/python3-moteus_0.3.100.bb
@@ -1,11 +1,11 @@
1SUMMARY = "moteus brushless controller library and tools" 1SUMMARY = "moteus brushless controller library and tools"
2HOMEPAGE = "https://github.com/mjbots/moteus" 2HOMEPAGE = "https://github.com/mjbots/moteus"
3LICENSE = "Apache-2.0" 3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://setup.py;beginline=3;endline=9;md5=24025d3c660abfc62a83f0e709a45e76" 4LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=c2d9643b4523fdf462545aeb1356ad23"
5 5
6inherit pypi setuptools3 6inherit pypi python_setuptools_build_meta
7 7
8SRC_URI[sha256sum] = "59f6f185390822c41f993c56027e4be338be87d40435acb0e10df1d68d662e69" 8SRC_URI[sha256sum] = "cab1bdcffc18b83ebb52066b1bffe6de7c1354b163b3bd63e430b4fa04fbc6b9"
9 9
10S = "${UNPACKDIR}/moteus-${PV}" 10S = "${UNPACKDIR}/moteus-${PV}"
11 11
diff --git a/meta-python/recipes-devtools/python/python3-mpmath_1.3.0.bb b/meta-python/recipes-devtools/python/python3-mpmath_1.4.1.bb
index 21bae9778c..7f237afb38 100644
--- a/meta-python/recipes-devtools/python/python3-mpmath_1.3.0.bb
+++ b/meta-python/recipes-devtools/python/python3-mpmath_1.4.1.bb
@@ -4,13 +4,13 @@
4SUMMARY = "Python library for arbitrary-precision floating-point arithmetic" 4SUMMARY = "Python library for arbitrary-precision floating-point arithmetic"
5HOMEPAGE = "https://pypi.org/project/mpmath/" 5HOMEPAGE = "https://pypi.org/project/mpmath/"
6LICENSE = "BSD-3-Clause" 6LICENSE = "BSD-3-Clause"
7LIC_FILES_CHKSUM = "file://LICENSE;md5=bde3c575382996b75d85702949512751" 7LIC_FILES_CHKSUM = "file://LICENSE;md5=a6607bd72611b702183473dfb4e6198b"
8 8
9SRC_URI[sha256sum] = "7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f" 9SRC_URI[sha256sum] = "efd6d1b75f09d69524a67609949812668b28e81ecbfe0ab449ced8c13e92642e"
10 10
11CVE_PRODUCT = "mpmath" 11CVE_PRODUCT = "mpmath"
12 12
13inherit pypi setuptools3 13inherit pypi python_setuptools_build_meta
14 14
15DEPENDS += "python3-setuptools-scm-native" 15DEPENDS += "python3-setuptools-scm-native"
16RDEPENDS:${PN} += " \ 16RDEPENDS:${PN} += " \
diff --git a/meta-python/recipes-devtools/python/python3-msgpack_1.1.2.bb b/meta-python/recipes-devtools/python/python3-msgpack_1.1.2.bb
index 85ec93695d..5b201a7554 100644
--- a/meta-python/recipes-devtools/python/python3-msgpack_1.1.2.bb
+++ b/meta-python/recipes-devtools/python/python3-msgpack_1.1.2.bb
@@ -8,7 +8,7 @@ PTEST_PYTEST_DIR = "test"
8 8
9SRC_URI[sha256sum] = "3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e" 9SRC_URI[sha256sum] = "3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e"
10 10
11RDEPENDS:${PN}:class-target += "\ 11RDEPENDS:${PN}:append:class-target = " \
12 python3-io \ 12 python3-io \
13" 13"
14 14
diff --git a/meta-python/recipes-devtools/python/python3-multidict_6.7.0.bb b/meta-python/recipes-devtools/python/python3-multidict_6.7.1.bb
index 821a880291..15848fefec 100644
--- a/meta-python/recipes-devtools/python/python3-multidict_6.7.0.bb
+++ b/meta-python/recipes-devtools/python/python3-multidict_6.7.1.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=b4fef6e4b0828c2401fb983363985b39"
6 6
7inherit pypi python_setuptools_build_meta ptest-python-pytest 7inherit pypi python_setuptools_build_meta ptest-python-pytest
8 8
9SRC_URI[sha256sum] = "c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5" 9SRC_URI[sha256sum] = "ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d"
10 10
11RDEPENDS:${PN}-ptest += " \ 11RDEPENDS:${PN}-ptest += " \
12 python3-objgraph \ 12 python3-objgraph \
diff --git a/meta-python/recipes-devtools/python/python3-multiprocess_0.70.19.bb b/meta-python/recipes-devtools/python/python3-multiprocess_0.70.19.bb
new file mode 100644
index 0000000000..394945df1b
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-multiprocess_0.70.19.bb
@@ -0,0 +1,10 @@
1SUMMARY = "Multiprocess extends multiprocessing to provide enhanced serialization, using dill."
2
3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=4e77a25170a36f151649917fe8d2858e"
5
6SRC_URI[sha256sum] = "952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897"
7
8inherit pypi python_setuptools_build_meta
9
10RDEPENDS:${PN} += "python3-dill"
diff --git a/meta-python/recipes-devtools/python/python3-mypy_1.17.0.bb b/meta-python/recipes-devtools/python/python3-mypy_1.17.0.bb
index 94aaabde4e..419de2570a 100644
--- a/meta-python/recipes-devtools/python/python3-mypy_1.17.0.bb
+++ b/meta-python/recipes-devtools/python/python3-mypy_1.17.0.bb
@@ -20,5 +20,6 @@ DEPENDS += " \
20RDEPENDS:${PN} += " \ 20RDEPENDS:${PN} += " \
21 python3-modules \ 21 python3-modules \
22 python3-mypy-extensions \ 22 python3-mypy-extensions \
23 python3-pathspec \
23 python3-typing-extensions \ 24 python3-typing-extensions \
24" 25"
diff --git a/meta-python/recipes-devtools/python/python3-myst-parser_4.0.1.bb b/meta-python/recipes-devtools/python/python3-myst-parser_5.0.0.bb
index 24a3953d42..826d1f8f87 100644
--- a/meta-python/recipes-devtools/python/python3-myst-parser_4.0.1.bb
+++ b/meta-python/recipes-devtools/python/python3-myst-parser_5.0.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/executablebooks/MyST-Parser"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=a38a1697260a7ad7bf29f44b362db1fc" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=a38a1697260a7ad7bf29f44b362db1fc"
5 5
6SRC_URI[sha256sum] = "5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4" 6SRC_URI[sha256sum] = "f6f231452c56e8baa662cc352c548158f6a16fcbd6e3800fc594978002b94f3a"
7 7
8inherit pypi python_flit_core 8inherit pypi python_flit_core
9 9
diff --git a/meta-python/recipes-devtools/python/python3-nanobind_2.10.2.bb b/meta-python/recipes-devtools/python/python3-nanobind_2.12.0.bb
index 12b7ff5133..58dbb30c84 100644
--- a/meta-python/recipes-devtools/python/python3-nanobind_2.10.2.bb
+++ b/meta-python/recipes-devtools/python/python3-nanobind_2.12.0.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "https://github.com/wjakob/nanobind"
4LICENSE = "BSD-3-Clause" 4LICENSE = "BSD-3-Clause"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=7646f9ee25e49eaf53f89a10665c568c" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=7646f9ee25e49eaf53f89a10665c568c"
6 6
7SRC_URI[sha256sum] = "08509910ce6d1fadeed69cb0880d4d4fcb77739c6af9bd8fb4419391a3ca4c6b" 7SRC_URI[sha256sum] = "0ae77c1a88f27153fa57045ee00f7b0a7b06b1cd3df942e95a34b38c5d0a5bee"
8 8
9inherit pypi cmake python_setuptools_build_meta 9inherit pypi cmake python_setuptools_build_meta
10 10
diff --git a/meta-python/recipes-devtools/python/python3-ninja/CMakeLists.txt b/meta-python/recipes-devtools/python/python3-ninja/CMakeLists.txt
deleted file mode 100644
index 04fa451e72..0000000000
--- a/meta-python/recipes-devtools/python/python3-ninja/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
1cmake_minimum_required(VERSION 3.15)
2
3project(NinjaPythonDistributions)
4
5set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_MODULE_PATH})
6
7install(CODE "
8 message(STATUS \"Install ninja project\")
9")
diff --git a/meta-python/recipes-devtools/python/python3-ninja/no-scikit-build.patch b/meta-python/recipes-devtools/python/python3-ninja/no-scikit-build.patch
index b7d191e244..4dfbb2675a 100644
--- a/meta-python/recipes-devtools/python/python3-ninja/no-scikit-build.patch
+++ b/meta-python/recipes-devtools/python/python3-ninja/no-scikit-build.patch
@@ -1,31 +1,22 @@
1We don't need to build ninja so there's no need to use scikit-build, 1We don't need to build ninja so there's no need to use scikit-build-core,
2as we just need the python module with it's one ninja() function. 2as we just need the python module with its one ninja() function.
3 3
4Upstream-Status: Inappropriate 4Upstream-Status: Inappropriate
5Signed-off-by: Ross Burton <ross.burton@arm.com> 5Signed-off-by: Ross Burton <ross.burton@arm.com>
6Signed-off-by: Jiaying Song <jiaying.song.cn@windriver.com>
6 7
7diff --git a/pyproject.toml b/pyproject.toml
8index b895c20..577b642 100644
9--- a/pyproject.toml 8--- a/pyproject.toml
10+++ b/pyproject.toml 9+++ b/pyproject.toml
11@@ -2,7 +2,6 @@ 10@@ -1,5 +1,4 @@
12 requires = [ 11 [build-system]
13 "setuptools >=42", 12-requires = ["scikit-build-core>=0.10"]
14 "setuptools-scm[toml]", 13-build-backend = "backend"
15- "scikit-build", 14-backend-path = ["_build_backend"]
16 ] 15+requires = ["setuptools", "setuptools-scm"]
17 build-backend = "setuptools.build_meta" 16+build-backend = "setuptools.build_meta"
18 17
19diff --git a/setup.py b/setup.py 18@@ -7,3 +6,3 @@
20index dbe1fbc..3259754 100755 19 name = "ninja"
21--- a/setup.py 20-dynamic = ["version", "readme"]
22+++ b/setup.py 21+dynamic = ["version"]
23@@ -5,7 +5,7 @@ import os 22 description = "Ninja is a small build system with a focus on speed"
24 import sys
25 from distutils.text_file import TextFile
26
27-from skbuild import setup
28+from setuptools import setup
29
30 # Add current folder to path
31 # This is required to import versioneer in an isolated pip build
diff --git a/meta-python/recipes-devtools/python/python3-ninja/run-ninja-from-path.patch b/meta-python/recipes-devtools/python/python3-ninja/run-ninja-from-path.patch
deleted file mode 100644
index 0068efcc3a..0000000000
--- a/meta-python/recipes-devtools/python/python3-ninja/run-ninja-from-path.patch
+++ /dev/null
@@ -1,44 +0,0 @@
1There's no need to hunt around source or install trees when we're just running ninja
2from PATH.
3
4Upstream-Status: Inappropriate
5Signed-off-by: Ross Burton <ross.burton@arm.com>
6
7diff --git a/src/ninja/__init__.py b/src/ninja/__init__.py
8index f83767e..31bb926 100644
9--- a/src/ninja/__init__.py
10+++ b/src/ninja/__init__.py
11@@ -19,32 +19,9 @@ except ImportError:
12 os.path.dirname(__file__), '../../Ninja-src/misc')))
13 from ninja_syntax import Writer, escape, expand # noqa: F401
14
15-DATA = os.path.join(os.path.dirname(__file__), 'data')
16-
17-# Support running tests from the source tree
18-if not os.path.exists(DATA):
19- from skbuild.constants import CMAKE_INSTALL_DIR as SKBUILD_CMAKE_INSTALL_DIR
20- from skbuild.constants import set_skbuild_plat_name
21-
22- if platform.system().lower() == "darwin":
23- # Since building the project specifying --plat-name or CMAKE_OSX_* variables
24- # leads to different SKBUILD_DIR, the code below attempt to guess the most
25- # likely plat-name.
26- _skbuild_dirs = os.listdir(os.path.join(os.path.dirname(__file__), '..', '..', '_skbuild'))
27- if _skbuild_dirs:
28- _likely_plat_name = '-'.join(_skbuild_dirs[0].split('-')[:3])
29- set_skbuild_plat_name(_likely_plat_name)
30-
31- _data = os.path.abspath(os.path.join(
32- os.path.dirname(__file__), '..', '..', SKBUILD_CMAKE_INSTALL_DIR(), 'src/ninja/data'))
33- if os.path.exists(_data):
34- DATA = _data
35-
36-BIN_DIR = os.path.join(DATA, 'bin')
37-
38
39 def _program(name, args):
40- return subprocess.call([os.path.join(BIN_DIR, name)] + args, close_fds=False)
41+ return subprocess.call([name] + args, close_fds=False)
42
43
44 def ninja():
diff --git a/meta-python/recipes-devtools/python/python3-ninja_1.11.1.1.bb b/meta-python/recipes-devtools/python/python3-ninja_1.13.0.bb
index 8f2e6528db..35a192a268 100644
--- a/meta-python/recipes-devtools/python/python3-ninja_1.11.1.1.bb
+++ b/meta-python/recipes-devtools/python/python3-ninja_1.13.0.bb
@@ -6,15 +6,19 @@ PYPI_PACKAGE = "ninja"
6PYPI_ARCHIVE_NAME_PREFIX = "pypi-" 6PYPI_ARCHIVE_NAME_PREFIX = "pypi-"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9SRC_URI[sha256sum] = "9d793b08dd857e38d0b6ffe9e6b7145d7c485a42dcfea04905ca0cdb6017cc3c" 9SRC_URI[sha256sum] = "4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978"
10 10
11SRC_URI += "file://no-scikit-build.patch \ 11SRC_URI += "file://no-scikit-build.patch "
12 file://run-ninja-from-path.patch"
13 12
14DEPENDS += "python3-setuptools-scm-native" 13DEPENDS += "python3-setuptools-scm-native"
15 14
16do_install:append () { 15do_install:append () {
17 rm -rf ${D}${bindir} 16 rm -rf ${D}${bindir}
17 install -m 0644 ${S}/ninja-upstream/misc/ninja_syntax.py ${D}${PYTHON_SITEPACKAGES_DIR}/ninja/ninja_syntax.py
18}
19
20do_configure:prepend() {
21 echo 'version = "${PV}"' > ${S}/src/ninja/_version.py
18} 22}
19 23
20RDEPENDS:${PN} = " \ 24RDEPENDS:${PN} = " \
diff --git a/meta-python/recipes-devtools/python/python3-orjson-crates.inc b/meta-python/recipes-devtools/python/python3-orjson-crates.inc
index 76ed174329..3feff8d77d 100644
--- a/meta-python/recipes-devtools/python/python3-orjson-crates.inc
+++ b/meta-python/recipes-devtools/python/python3-orjson-crates.inc
@@ -2,83 +2,75 @@
2 2
3# from Cargo.lock 3# from Cargo.lock
4SRC_URI += " \ 4SRC_URI += " \
5 crate://crates.io/associative-cache/2.0.0 \ 5 crate://crates.io/associative-cache/3.0.0 \
6 crate://crates.io/bytecount/0.6.8 \ 6 crate://crates.io/bytecount/0.6.9 \
7 crate://crates.io/castaway/0.2.3 \ 7 crate://crates.io/bytes/1.11.1 \
8 crate://crates.io/cc/1.2.20 \ 8 crate://crates.io/cc/1.2.58 \
9 crate://crates.io/cfg-if/1.0.0 \ 9 crate://crates.io/cfg-if/1.0.4 \
10 crate://crates.io/compact_str/0.9.0 \
11 crate://crates.io/crunchy/0.2.3 \
12 crate://crates.io/encoding_rs/0.8.35 \ 10 crate://crates.io/encoding_rs/0.8.35 \
13 crate://crates.io/gimli/0.31.1 \ 11 crate://crates.io/find-msvc-tools/0.1.9 \
14 crate://crates.io/half/2.6.0 \ 12 crate://crates.io/gimli/0.32.3 \
15 crate://crates.io/itoa/1.0.15 \ 13 crate://crates.io/itoa/1.0.18 \
16 crate://crates.io/itoap/1.0.1 \ 14 crate://crates.io/itoap/1.0.1 \
17 crate://crates.io/jiff/0.2.10 \ 15 crate://crates.io/jiff/0.2.23 \
18 crate://crates.io/jiff-static/0.2.10 \ 16 crate://crates.io/jiff-static/0.2.23 \
19 crate://crates.io/libc/0.2.172 \ 17 crate://crates.io/libc/0.2.183 \
20 crate://crates.io/memchr/2.7.4 \ 18 crate://crates.io/memchr/2.8.0 \
21 crate://crates.io/once_cell/1.21.3 \ 19 crate://crates.io/no-panic/0.1.36 \
22 crate://crates.io/portable-atomic/1.11.0 \ 20 crate://crates.io/once_cell/1.21.4 \
23 crate://crates.io/portable-atomic-util/0.2.4 \ 21 crate://crates.io/portable-atomic/1.13.1 \
24 crate://crates.io/proc-macro2/1.0.95 \ 22 crate://crates.io/portable-atomic-util/0.2.6 \
25 crate://crates.io/pyo3-build-config/0.23.3 \ 23 crate://crates.io/proc-macro2/1.0.106 \
26 crate://crates.io/pyo3-ffi/0.23.3 \ 24 crate://crates.io/pyo3-build-config/0.28.2 \
27 crate://crates.io/quote/1.0.40 \ 25 crate://crates.io/pyo3-ffi/0.28.2 \
28 crate://crates.io/rustversion/1.0.20 \ 26 crate://crates.io/quote/1.0.45 \
29 crate://crates.io/ryu/1.0.20 \ 27 crate://crates.io/serde/1.0.228 \
30 crate://crates.io/serde/1.0.219 \ 28 crate://crates.io/serde_core/1.0.228 \
31 crate://crates.io/serde_derive/1.0.219 \ 29 crate://crates.io/serde_derive/1.0.228 \
32 crate://crates.io/serde_json/1.0.140 \ 30 crate://crates.io/serde_json/1.0.149 \
33 crate://crates.io/shlex/1.3.0 \ 31 crate://crates.io/shlex/1.3.0 \
34 crate://crates.io/simdutf8/0.1.5 \ 32 crate://crates.io/simdutf8/0.1.5 \
35 crate://crates.io/smallvec/1.15.0 \ 33 crate://crates.io/syn/2.0.117 \
36 crate://crates.io/static_assertions/1.1.0 \ 34 crate://crates.io/target-lexicon/0.13.5 \
37 crate://crates.io/syn/2.0.101 \ 35 crate://crates.io/unicode-ident/1.0.24 \
38 crate://crates.io/target-lexicon/0.13.2 \ 36 crate://crates.io/unwinding/0.2.8 \
39 crate://crates.io/unicode-ident/1.0.18 \
40 crate://crates.io/unwinding/0.2.5 \
41 crate://crates.io/uuid/1.16.0 \
42 crate://crates.io/version_check/0.9.5 \ 37 crate://crates.io/version_check/0.9.5 \
43 crate://crates.io/xxhash-rust/0.8.15 \ 38 crate://crates.io/xxhash-rust/0.8.15 \
39 crate://crates.io/zmij/1.0.21 \
44" 40"
45 41
46SRC_URI[associative-cache-2.0.0.sha256sum] = "b993cd767a2bc7307dd87622311ca22c44329cc7a21366206bfa0896827b2bad" 42SRC_URI[associative-cache-3.0.0.sha256sum] = "6104bd6fd778b62f638add0dd848dca9887cf016a343d15a21d27fb8a3965b98"
47SRC_URI[bytecount-0.6.8.sha256sum] = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" 43SRC_URI[bytecount-0.6.9.sha256sum] = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
48SRC_URI[castaway-0.2.3.sha256sum] = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" 44SRC_URI[bytes-1.11.1.sha256sum] = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
49SRC_URI[cc-1.2.20.sha256sum] = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a" 45SRC_URI[cc-1.2.58.sha256sum] = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1"
50SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 46SRC_URI[cfg-if-1.0.4.sha256sum] = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
51SRC_URI[compact_str-0.9.0.sha256sum] = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a"
52SRC_URI[crunchy-0.2.3.sha256sum] = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
53SRC_URI[encoding_rs-0.8.35.sha256sum] = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 47SRC_URI[encoding_rs-0.8.35.sha256sum] = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
54SRC_URI[gimli-0.31.1.sha256sum] = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 48SRC_URI[find-msvc-tools-0.1.9.sha256sum] = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
55SRC_URI[half-2.6.0.sha256sum] = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" 49SRC_URI[gimli-0.32.3.sha256sum] = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
56SRC_URI[itoa-1.0.15.sha256sum] = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 50SRC_URI[itoa-1.0.18.sha256sum] = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
57SRC_URI[itoap-1.0.1.sha256sum] = "9028f49264629065d057f340a86acb84867925865f73bbf8d47b4d149a7e88b8" 51SRC_URI[itoap-1.0.1.sha256sum] = "9028f49264629065d057f340a86acb84867925865f73bbf8d47b4d149a7e88b8"
58SRC_URI[jiff-0.2.10.sha256sum] = "5a064218214dc6a10fbae5ec5fa888d80c45d611aba169222fc272072bf7aef6" 52SRC_URI[jiff-0.2.23.sha256sum] = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359"
59SRC_URI[jiff-static-0.2.10.sha256sum] = "199b7932d97e325aff3a7030e141eafe7f2c6268e1d1b24859b753a627f45254" 53SRC_URI[jiff-static-0.2.23.sha256sum] = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4"
60SRC_URI[libc-0.2.172.sha256sum] = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" 54SRC_URI[libc-0.2.183.sha256sum] = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d"
61SRC_URI[memchr-2.7.4.sha256sum] = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 55SRC_URI[memchr-2.8.0.sha256sum] = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
62SRC_URI[once_cell-1.21.3.sha256sum] = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 56SRC_URI[no-panic-0.1.36.sha256sum] = "f967505aabc8af5752d098c34146544a43684817cdba8f9725b292530cabbf53"
63SRC_URI[portable-atomic-1.11.0.sha256sum] = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" 57SRC_URI[once_cell-1.21.4.sha256sum] = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
64SRC_URI[portable-atomic-util-0.2.4.sha256sum] = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 58SRC_URI[portable-atomic-1.13.1.sha256sum] = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
65SRC_URI[proc-macro2-1.0.95.sha256sum] = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 59SRC_URI[portable-atomic-util-0.2.6.sha256sum] = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3"
66SRC_URI[pyo3-build-config-0.23.3.sha256sum] = "dc0e0469a84f208e20044b98965e1561028180219e35352a2afaf2b942beff3b" 60SRC_URI[proc-macro2-1.0.106.sha256sum] = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
67SRC_URI[pyo3-ffi-0.23.3.sha256sum] = "eb1547a7f9966f6f1a0f0227564a9945fe36b90da5a93b3933fc3dc03fae372d" 61SRC_URI[pyo3-build-config-0.28.2.sha256sum] = "8bf94ee265674bf76c09fa430b0e99c26e319c945d96ca0d5a8215f31bf81cf7"
68SRC_URI[quote-1.0.40.sha256sum] = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 62SRC_URI[pyo3-ffi-0.28.2.sha256sum] = "491aa5fc66d8059dd44a75f4580a2962c1862a1c2945359db36f6c2818b748dc"
69SRC_URI[rustversion-1.0.20.sha256sum] = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" 63SRC_URI[quote-1.0.45.sha256sum] = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
70SRC_URI[ryu-1.0.20.sha256sum] = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 64SRC_URI[serde-1.0.228.sha256sum] = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
71SRC_URI[serde-1.0.219.sha256sum] = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 65SRC_URI[serde_core-1.0.228.sha256sum] = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
72SRC_URI[serde_derive-1.0.219.sha256sum] = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 66SRC_URI[serde_derive-1.0.228.sha256sum] = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
73SRC_URI[serde_json-1.0.140.sha256sum] = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 67SRC_URI[serde_json-1.0.149.sha256sum] = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
74SRC_URI[shlex-1.3.0.sha256sum] = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 68SRC_URI[shlex-1.3.0.sha256sum] = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
75SRC_URI[simdutf8-0.1.5.sha256sum] = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" 69SRC_URI[simdutf8-0.1.5.sha256sum] = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"
76SRC_URI[smallvec-1.15.0.sha256sum] = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" 70SRC_URI[syn-2.0.117.sha256sum] = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
77SRC_URI[static_assertions-1.1.0.sha256sum] = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 71SRC_URI[target-lexicon-0.13.5.sha256sum] = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
78SRC_URI[syn-2.0.101.sha256sum] = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" 72SRC_URI[unicode-ident-1.0.24.sha256sum] = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
79SRC_URI[target-lexicon-0.13.2.sha256sum] = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" 73SRC_URI[unwinding-0.2.8.sha256sum] = "60612c845ef41699f39dc8c5391f252942c0a88b7d15da672eff0d14101bbd6d"
80SRC_URI[unicode-ident-1.0.18.sha256sum] = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
81SRC_URI[unwinding-0.2.5.sha256sum] = "51f06a05848f650946acef3bf525fe96612226b61f74ae23ffa4e98bfbb8ab3c"
82SRC_URI[uuid-1.16.0.sha256sum] = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
83SRC_URI[version_check-0.9.5.sha256sum] = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 74SRC_URI[version_check-0.9.5.sha256sum] = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
84SRC_URI[xxhash-rust-0.8.15.sha256sum] = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" 75SRC_URI[xxhash-rust-0.8.15.sha256sum] = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3"
76SRC_URI[zmij-1.0.21.sha256sum] = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
diff --git a/meta-python/recipes-devtools/python/python3-orjson/0001-Guard-avx512-module-with-x86-target-cfg.patch b/meta-python/recipes-devtools/python/python3-orjson/0001-Guard-avx512-module-with-x86-target-cfg.patch
new file mode 100644
index 0000000000..604030e062
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-orjson/0001-Guard-avx512-module-with-x86-target-cfg.patch
@@ -0,0 +1,37 @@
1From c5c46664a914d3a7f048c51c3b9c2ab13e21ed1b Mon Sep 17 00:00:00 2001
2From: Tim Orling <tim.orling@konsulko.com>
3Date: Thu, 29 Jan 2026 09:59:55 -0800
4Subject: [PATCH] Guard avx512 module with x86 target cfg
5
6The avx512.rs module contains x86_64-specific intrinsics and target
7features that are not valid on non-x86 architectures like RISC-V.
8
9Upstream-Status: Inappropriate [Rejected by upstream https://github.com/ijl/orjson/pull/609]
10
11Signed-off-by: Tim Orling <tim.orling@konsulko.com>
12---
13 src/ffi/pystrref/avx512.rs | 2 ++
14 1 file changed, 2 insertions(+)
15
16diff --git a/src/ffi/pystrref/avx512.rs b/src/ffi/pystrref/avx512.rs
17index e4c7697..46450ac 100644
18--- a/src/ffi/pystrref/avx512.rs
19+++ b/src/ffi/pystrref/avx512.rs
20@@ -3,12 +3,14 @@
21
22 use super::pyunicode_new::*;
23
24+#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
25 use core::arch::x86_64::{
26 _mm512_and_si512, _mm512_cmpgt_epu8_mask, _mm512_cmpneq_epi8_mask, _mm512_loadu_epi8,
27 _mm512_mask_cmpneq_epi8_mask, _mm512_maskz_loadu_epi8, _mm512_max_epu8, _mm512_set1_epi8,
28 };
29
30 #[inline(never)]
31+#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
32 #[target_feature(enable = "avx512f,avx512bw,avx512vl,bmi2")]
33 pub(crate) unsafe fn create_str_impl_avx512vl(buf: &str) -> *mut crate::ffi::PyObject {
34 unsafe {
35--
362.39.5
37
diff --git a/meta-python/recipes-devtools/python/python3-orjson/0002-Guard-x86-feature-detection-macro-in-pystrref-object.patch b/meta-python/recipes-devtools/python/python3-orjson/0002-Guard-x86-feature-detection-macro-in-pystrref-object.patch
new file mode 100644
index 0000000000..59105e723c
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-orjson/0002-Guard-x86-feature-detection-macro-in-pystrref-object.patch
@@ -0,0 +1,34 @@
1From 7ef16220caaa82f7a90047c8c9b5ff2eeb15b9ce Mon Sep 17 00:00:00 2001
2From: Tim Orling <tim.orling@konsulko.com>
3Date: Thu, 29 Jan 2026 10:22:31 -0800
4Subject: [PATCH 2/2] Guard x86 feature detection macro in pystrref/object.rs
5
6The std::is_x86_feature_detected! macro only works on x86/x86_64
7targets. This patch wraps the feature detection and AVX-512 code path
8with cfg guards to allow compilation on non-x86 architectures.
9
10On non-x86 targets, the code will fall through to the generic
11implementation instead of attempting AVX-512 optimizations.
12
13Upstream-Status: Inappropriate [Rejected by upstream https://github.com/ijl/orjson/pull/609]
14
15Signed-off-by: Tim Orling <tim.orling@konsulko.com>
16---
17 src/ffi/pystrref/object.rs | 1 +
18 1 file changed, 1 insertion(+)
19
20diff --git a/src/ffi/pystrref/object.rs b/src/ffi/pystrref/object.rs
21index 9ef12eb..7c2c046 100644
22--- a/src/ffi/pystrref/object.rs
23+++ b/src/ffi/pystrref/object.rs
24@@ -29,6 +29,7 @@ static mut STR_CREATE_FN: StrDeserializer = super::scalar::str_impl_kind_scalar;
25
26 pub fn set_str_create_fn() {
27 unsafe {
28+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
29 #[cfg(all(CPython, feature = "avx512"))]
30 if std::is_x86_feature_detected!("avx512vl") {
31 STR_CREATE_FN = super::avx512::create_str_impl_avx512vl;
32--
332.39.5
34
diff --git a/meta-python/recipes-devtools/python/python3-orjson_3.10.17.bb b/meta-python/recipes-devtools/python/python3-orjson_3.10.17.bb
deleted file mode 100644
index 2209569aca..0000000000
--- a/meta-python/recipes-devtools/python/python3-orjson_3.10.17.bb
+++ /dev/null
@@ -1,22 +0,0 @@
1SUMMARY = "orjson is a fast, correct JSON library for Python"
2HOMEPAGE = "https://pypi.org/project/orjson/"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE-MIT;md5=b377b220f43d747efdec40d69fcaa69d"
5
6SRC_URI[sha256sum] = "28eeae6a15243966962b658dfcf7bae9e7bb1f3260dfcf0370dbd41f5ff6058b"
7
8CVE_PRODUCT = "orjson"
9
10require ${BPN}-crates.inc
11
12inherit pypi python_maturin cargo-update-recipe-crates
13
14DEPENDS = "python3-maturin-native"
15
16RDEPENDS:${PN} += "python3-maturin python3-mypy"
17
18do_compile:prepend() {
19 sed -i "/panic = \"abort\"/d" ${S}/Cargo.toml
20}
21
22BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-orjson_3.11.8.bb b/meta-python/recipes-devtools/python/python3-orjson_3.11.8.bb
new file mode 100644
index 0000000000..22a0205af3
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-orjson_3.11.8.bb
@@ -0,0 +1,46 @@
1SUMMARY = "orjson is a fast, correct JSON library for Python"
2HOMEPAGE = "https://pypi.org/project/orjson/"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE-MIT;md5=b377b220f43d747efdec40d69fcaa69d"
5
6SRCREV = "5cbb3d0398a2f42de51210270286fecd798c5d78"
7PYPI_SRC_URI = "git://github.com/ijl/orjson;protocol=https;branch=master;tag=${PV};destsuffix=orjson-${PV}"
8
9CVE_PRODUCT = "orjson"
10
11require ${BPN}-crates.inc
12
13inherit pypi python_maturin cargo-update-recipe-crates ptest-python-pytest
14
15SRC_URI += " \
16 file://0001-Guard-avx512-module-with-x86-target-cfg.patch \
17 file://0002-Guard-x86-feature-detection-macro-in-pystrref-object.patch \
18"
19DEPENDS = "python3-maturin-native"
20
21RDEPENDS:${PN} += "python3-maturin python3-mypy"
22
23do_compile:prepend() {
24 sed -i "/panic = \"abort\"/d" ${S}/Cargo.toml
25}
26
27do_install_ptest:append() {
28 install -d ${D}${PTEST_PATH}/data
29 cp -rf ${S}/data/* ${D}${PTEST_PATH}/data/
30 install -d ${D}${PTEST_PATH}/test
31 cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
32}
33
34RDEPENDS:${PN}-ptest += "\
35 python3-dateutil \
36 python3-dateutil-zoneinfo \
37 python3-faker \
38 python3-numpy \
39 python3-pandas \
40 python3-pendulum \
41 python3-psutil \
42 python3-pytz \
43 python3-tzdata \
44"
45
46BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-pandas/0001-BLD-add-option-to-specify-numpy-header-location.patch b/meta-python/recipes-devtools/python/python3-pandas/0001-BLD-add-option-to-specify-numpy-header-location.patch
index e83576eb62..ed5eb767e9 100644
--- a/meta-python/recipes-devtools/python/python3-pandas/0001-BLD-add-option-to-specify-numpy-header-location.patch
+++ b/meta-python/recipes-devtools/python/python3-pandas/0001-BLD-add-option-to-specify-numpy-header-location.patch
@@ -1,4 +1,4 @@
1From 16dd09e6c79768a24f5a50ec5985e0b6fdf17f35 Mon Sep 17 00:00:00 2001 1From 65db03f03dbb61172c6eea8b34d11ea9eb0c6d77 Mon Sep 17 00:00:00 2001
2From: Gyorgy Sarvari <skandigraun@gmail.com> 2From: Gyorgy Sarvari <skandigraun@gmail.com>
3Date: Mon, 10 Mar 2025 13:52:11 +0100 3Date: Mon, 10 Mar 2025 13:52:11 +0100
4Subject: [PATCH] BLD: add option to specify numpy header location 4Subject: [PATCH] BLD: add option to specify numpy header location
@@ -19,24 +19,29 @@ include folder location, fall back to the value of this meson option.
19Upstream-Status: Submitted [https://github.com/pandas-dev/pandas/pull/61095] 19Upstream-Status: Submitted [https://github.com/pandas-dev/pandas/pull/61095]
20 20
21Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com> 21Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
22Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
22--- 23---
23 meson.options | 1 + 24 meson.options | 1 +
24 pandas/meson.build | 13 ++++++++++--- 25 pandas/meson.build | 12 +++++++++---
25 2 files changed, 11 insertions(+), 3 deletions(-) 26 2 files changed, 10 insertions(+), 3 deletions(-)
26 create mode 100644 meson.options 27 create mode 100644 meson.options
27 28
29diff --git a/meson.options b/meson.options
30new file mode 100644
31index 0000000..3d3a18d
28--- /dev/null 32--- /dev/null
29+++ b/meson.options 33+++ b/meson.options
30@@ -0,0 +1 @@ 34@@ -0,0 +1 @@
31+option('numpy_inc_dir', type : 'string', description : 'The absolute path to the numpy headers') 35+option('numpy_inc_dir', type : 'string', description : 'The absolute path to the numpy headers')
36diff --git a/pandas/meson.build b/pandas/meson.build
37index 840ac25..2c3423e 100644
32--- a/pandas/meson.build 38--- a/pandas/meson.build
33+++ b/pandas/meson.build 39+++ b/pandas/meson.build
34@@ -3,17 +3,24 @@ incdir_numpy = run_command(py, 40@@ -4,17 +4,23 @@ incdir_numpy = run_command(
35 '-c', 41 '-c',
36 ''' 42 '''
37 import os 43 import os
38-import numpy as np 44-import numpy as np
39+
40+try: 45+try:
41+ import numpy as np 46+ import numpy as np
42+ base_incdir = np.get_include() 47+ base_incdir = np.get_include()
@@ -53,9 +58,12 @@ Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
53- incdir = np.get_include() 58- incdir = np.get_include()
54+ incdir = base_incdir 59+ incdir = base_incdir
55 print(incdir) 60 print(incdir)
56 ''' 61 ''',
57 ], 62 ],
58+ env: {'NUMPY_INC_DIR': get_option('numpy_inc_dir')}, 63+ env: {'NUMPY_INC_DIR': get_option('numpy_inc_dir')},
59 check: true 64 check: true,
60 ).stdout().strip() 65 ).stdout().strip()
61 66
67--
682.47.3
69
diff --git a/meta-python/recipes-devtools/python/python3-pandas/0001-fix-reproducibility-issue.patch b/meta-python/recipes-devtools/python/python3-pandas/0001-fix-reproducibility-issue.patch
deleted file mode 100644
index deadacafa9..0000000000
--- a/meta-python/recipes-devtools/python/python3-pandas/0001-fix-reproducibility-issue.patch
+++ /dev/null
@@ -1,43 +0,0 @@
1From 80274cd3a0746ddc5421643dd40d47bdf3c6a68c Mon Sep 17 00:00:00 2001
2From: Hongxu Jia <hongxu.jia@windriver.com>
3Date: Fri, 26 Sep 2025 15:47:53 +0800
4Subject: [PATCH] fix reproducibility issue
5
6The type of new_value is either `npy_timedelta' or `int64_t'
7In build/pandas/_libs/tslibs/timedeltas.cpython-313-x86_64-linux-gnu.so.p/pandas/_libs/tslibs/timedeltas.pyx.c
8..
9npy_timedelta __pyx_v_new_value;
10...
11
12In build/pandas/_libs/tslibs/timedeltas.cpython-313-x86_64-linux-gnu.so.p/pandas/_libs/tslibs/timedeltas.pyx.c
13...
14__pyx_t_5numpy_int64_t __pyx_v_new_value;
15...
16
17Explicitly define it as int64_t to assure the generated source is
18reproducibility between builds
19
20Upstream-Status: Submitted [https://github.com/pandas-dev/pandas/pull/62459]
21
22Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
23---
24 pandas/_libs/tslibs/timedeltas.pyx | 3 +++
25 1 file changed, 3 insertions(+)
26
27diff --git a/pandas/_libs/tslibs/timedeltas.pyx b/pandas/_libs/tslibs/timedeltas.pyx
28index f6c69cf..34ac9e7 100644
29--- a/pandas/_libs/tslibs/timedeltas.pyx
30+++ b/pandas/_libs/tslibs/timedeltas.pyx
31@@ -1820,6 +1820,9 @@ class Timedelta(_Timedelta):
32
33 disallow_ambiguous_unit(unit)
34
35+ cdef:
36+ int64_t new_value;
37+
38 # GH 30543 if pd.Timedelta already passed, return it
39 # check that only value is passed
40 if isinstance(value, _Timedelta):
41--
422.34.1
43
diff --git a/meta-python/recipes-devtools/python/python3-pandas/0001-pyproject.toml-don-t-pin-dependency-versions.patch b/meta-python/recipes-devtools/python/python3-pandas/0001-pyproject.toml-don-t-pin-dependency-versions.patch
deleted file mode 100644
index 950f25303f..0000000000
--- a/meta-python/recipes-devtools/python/python3-pandas/0001-pyproject.toml-don-t-pin-dependency-versions.patch
+++ /dev/null
@@ -1,32 +0,0 @@
1From d46b8720a6bccb345f6bdd7ee2f5c357e7eb227b Mon Sep 17 00:00:00 2001
2From: Trevor Gamblin <tgamblin@baylibre.com>
3Date: Mon, 12 Aug 2024 11:27:36 -0400
4Subject: [PATCH] pyproject.toml: don't pin dependency versions
5
6Pandas will fail to build if the exact versions aren't found, but newer
7ones actually work. Since newer versions of pandas are adjusting the
8requires section of pyproject toml further, just patch it for us.
9
10Upstream-Status: Inappropriate [OE-Specific]
11
12Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
13---
14 pyproject.toml | 6 +++---
15 1 file changed, 3 insertions(+), 3 deletions(-)
16
17--- a/pyproject.toml
18+++ b/pyproject.toml
19@@ -2,10 +2,10 @@
20 # Minimum requirements for the build system to execute.
21 # See https://github.com/scipy/scipy/pull/12940 for the AIX issue.
22 requires = [
23- "meson-python==0.13.1",
24- "meson==1.2.1",
25+ "meson-python>=0.13.1",
26+ "meson>=1.2.1",
27 "wheel",
28- "Cython~=3.0.5", # Note: sync with setup.py, environment.yml and asv.conf.json
29+ "Cython>=3.0.5", # Note: sync with setup.py, environment.yml and asv.conf.json
30 # Force numpy higher than 2.0, so that built wheels are compatible
31 # with both numpy 1 and 2
32 "numpy>=2.0",
diff --git a/meta-python/recipes-devtools/python/python3-pandas_2.2.3.bb b/meta-python/recipes-devtools/python/python3-pandas_3.0.2.bb
index 91333d129d..62affc5f45 100644
--- a/meta-python/recipes-devtools/python/python3-pandas_2.2.3.bb
+++ b/meta-python/recipes-devtools/python/python3-pandas_3.0.2.bb
@@ -4,16 +4,11 @@ high-performance, easy-to-use data structures and data analysis tools for \
4the Python programming language." 4the Python programming language."
5HOMEPAGE = "https://pandas.pydata.org/" 5HOMEPAGE = "https://pandas.pydata.org/"
6LICENSE = "BSD-3-Clause" 6LICENSE = "BSD-3-Clause"
7LIC_FILES_CHKSUM = "file://LICENSE;md5=cb819092901ddb13a7d0a4f5e05f098a" 7LIC_FILES_CHKSUM = "file://LICENSE;md5=e98642e1210ade884e5254ab18d55b7d"
8
9SRC_URI += " \
10 file://0001-pyproject.toml-don-t-pin-dependency-versions.patch \
11 file://0001-fix-reproducibility-issue.patch \
12 "
13 8
14SRC_URI:append:class-target = " file://0001-BLD-add-option-to-specify-numpy-header-location.patch " 9SRC_URI:append:class-target = " file://0001-BLD-add-option-to-specify-numpy-header-location.patch "
15 10
16SRC_URI[sha256sum] = "4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667" 11SRC_URI[sha256sum] = "f4753e73e34c8d83221ba58f232433fca2748be8b18dbca02d242ed153945043"
17 12
18CVE_PRODUCT = "pandas" 13CVE_PRODUCT = "pandas"
19 14
diff --git a/meta-python/recipes-devtools/python/python3-paramiko_3.5.1.bb b/meta-python/recipes-devtools/python/python3-paramiko_4.0.0.bb
index daf6386888..b1f86acb4e 100644
--- a/meta-python/recipes-devtools/python/python3-paramiko_3.5.1.bb
+++ b/meta-python/recipes-devtools/python/python3-paramiko_4.0.0.bb
@@ -3,11 +3,11 @@ HOMEPAGE = "https://github.com/paramiko/paramiko/"
3LICENSE = "LGPL-2.1-only" 3LICENSE = "LGPL-2.1-only"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=fd0120fc2e9f841c73ac707a30389af5" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=fd0120fc2e9f841c73ac707a30389af5"
5 5
6SRC_URI[sha256sum] = "b2c665bc45b2b215bd7d7f039901b14b067da00f3a11e6640995fd58f2664822" 6SRC_URI[sha256sum] = "6a25f07b380cc9c9a88d2b920ad37167ac4667f8d9886ccebd8f90f654b5d69f"
7 7
8PYPI_PACKAGE = "paramiko" 8PYPI_PACKAGE = "paramiko"
9 9
10inherit pypi setuptools3 10inherit pypi python_setuptools_build_meta
11 11
12CLEANBROKEN = "1" 12CLEANBROKEN = "1"
13 13
diff --git a/meta-python/recipes-devtools/python/python3-parse_1.20.2.bb b/meta-python/recipes-devtools/python/python3-parse_1.21.1.bb
index 6e7139bfbe..3af0c0e27e 100644
--- a/meta-python/recipes-devtools/python/python3-parse_1.20.2.bb
+++ b/meta-python/recipes-devtools/python/python3-parse_1.21.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/r1chardj0n3s/parse"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=8ab458ad281b60e6f1b39b3feafbfc05" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=8ab458ad281b60e6f1b39b3feafbfc05"
5 5
6SRC_URI[sha256sum] = "b41d604d16503c79d81af5165155c0b20f6c8d6c559efa66b4b695c3e5a0a0ce" 6SRC_URI[sha256sum] = "825e1a88e9d9fb481b8d2ca709c6195558b6eaa97c559ad3a9a20aa2d12815a3"
7 7
8SRC_URI += " \ 8SRC_URI += " \
9 file://run-ptest \ 9 file://run-ptest \
diff --git a/meta-python/recipes-devtools/python/python3-parso_0.8.5.bb b/meta-python/recipes-devtools/python/python3-parso_0.8.6.bb
index 2bde8c3f40..1659f1babd 100644
--- a/meta-python/recipes-devtools/python/python3-parso_0.8.5.bb
+++ b/meta-python/recipes-devtools/python/python3-parso_0.8.6.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=cbaa2675b2424d771451332a7a69503f"
5 5
6PYPI_PACKAGE = "parso" 6PYPI_PACKAGE = "parso"
7 7
8SRC_URI[sha256sum] = "034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a" 8SRC_URI[sha256sum] = "2b9a0332696df97d454fa67b81618fd69c35a7b90327cbe6ba5c92d2c68a7bfd"
9 9
10CVE_PRODUCT = "parso" 10CVE_PRODUCT = "parso"
11 11
diff --git a/meta-python/recipes-devtools/python/python3-path_17.1.0.bb b/meta-python/recipes-devtools/python/python3-path_17.1.1.bb
index 066f756730..be150f3dbb 100644
--- a/meta-python/recipes-devtools/python/python3-path_17.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-path_17.1.1.bb
@@ -1,8 +1,8 @@
1SUMMARY = "A module wrapper for os.path" 1SUMMARY = "A module wrapper for os.path"
2LICENSE = "MIT" 2LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://LICENSE;md5=141643e11c48898150daa83802dbc65f" 3LIC_FILES_CHKSUM = "file://LICENSE;md5=1aeae65f25a15b1e46d4381f2f094e0a"
4 4
5SRC_URI[sha256sum] = "d41e05ed4fa1d4f6d702df3c1e0a1a255d7b544287432456455dc7c51e5f98e9" 5SRC_URI[sha256sum] = "2dfcbfec8b4d960f3469c52acf133113c2a8bf12ac7b98d629fa91af87248d42"
6 6
7SRC_URI += "\ 7SRC_URI += "\
8 file://run-ptest \ 8 file://run-ptest \
@@ -10,7 +10,10 @@ SRC_URI += "\
10 10
11inherit pypi python_setuptools_build_meta ptest 11inherit pypi python_setuptools_build_meta ptest
12 12
13DEPENDS += "python3-setuptools-scm-native" 13DEPENDS += " \
14 python3-setuptools-scm-native \
15 python3-coherent-licensed-native \
16"
14 17
15RDEPENDS:${PN} += " \ 18RDEPENDS:${PN} += " \
16 python3-appdirs \ 19 python3-appdirs \
@@ -22,6 +25,7 @@ RDEPENDS:${PN} += " \
22RDEPENDS:${PN}-ptest += " \ 25RDEPENDS:${PN}-ptest += " \
23 python3-pytest \ 26 python3-pytest \
24 python3-unittest-automake-output \ 27 python3-unittest-automake-output \
28 python3-more-itertools \
25" 29"
26 30
27BBCLASSEXTEND = "nativesdk native" 31BBCLASSEXTEND = "nativesdk native"
diff --git a/meta-python/recipes-devtools/python/python3-pendulum-crates.inc b/meta-python/recipes-devtools/python/python3-pendulum-crates.inc
new file mode 100644
index 0000000000..71a7de9d05
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-pendulum-crates.inc
@@ -0,0 +1,52 @@
1# Autogenerated with 'bitbake -c update_crates python3-pendulum'
2
3# from rust/Cargo.lock
4SRC_URI += " \
5 crate://crates.io/autocfg/1.5.0 \
6 crate://crates.io/cc/1.2.55 \
7 crate://crates.io/find-msvc-tools/0.1.9 \
8 crate://crates.io/heck/0.5.0 \
9 crate://crates.io/indoc/2.0.7 \
10 crate://crates.io/libc/0.2.180 \
11 crate://crates.io/memoffset/0.9.1 \
12 crate://crates.io/once_cell/1.21.3 \
13 crate://crates.io/portable-atomic/1.13.0 \
14 crate://crates.io/proc-macro2/1.0.106 \
15 crate://crates.io/pyo3/0.27.2 \
16 crate://crates.io/pyo3-build-config/0.27.2 \
17 crate://crates.io/pyo3-ffi/0.27.2 \
18 crate://crates.io/pyo3-macros/0.27.2 \
19 crate://crates.io/pyo3-macros-backend/0.27.2 \
20 crate://crates.io/python3-dll-a/0.2.14 \
21 crate://crates.io/quote/1.0.44 \
22 crate://crates.io/rustversion/1.0.22 \
23 crate://crates.io/shlex/1.3.0 \
24 crate://crates.io/syn/2.0.114 \
25 crate://crates.io/target-lexicon/0.13.4 \
26 crate://crates.io/unicode-ident/1.0.22 \
27 crate://crates.io/unindent/0.2.4 \
28"
29
30SRC_URI[autocfg-1.5.0.sha256sum] = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
31SRC_URI[cc-1.2.55.sha256sum] = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29"
32SRC_URI[find-msvc-tools-0.1.9.sha256sum] = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
33SRC_URI[heck-0.5.0.sha256sum] = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
34SRC_URI[indoc-2.0.7.sha256sum] = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
35SRC_URI[libc-0.2.180.sha256sum] = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc"
36SRC_URI[memoffset-0.9.1.sha256sum] = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
37SRC_URI[once_cell-1.21.3.sha256sum] = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
38SRC_URI[portable-atomic-1.13.0.sha256sum] = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950"
39SRC_URI[proc-macro2-1.0.106.sha256sum] = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
40SRC_URI[pyo3-0.27.2.sha256sum] = "ab53c047fcd1a1d2a8820fe84f05d6be69e9526be40cb03b73f86b6b03e6d87d"
41SRC_URI[pyo3-build-config-0.27.2.sha256sum] = "b455933107de8642b4487ed26d912c2d899dec6114884214a0b3bb3be9261ea6"
42SRC_URI[pyo3-ffi-0.27.2.sha256sum] = "1c85c9cbfaddf651b1221594209aed57e9e5cff63c4d11d1feead529b872a089"
43SRC_URI[pyo3-macros-0.27.2.sha256sum] = "0a5b10c9bf9888125d917fb4d2ca2d25c8df94c7ab5a52e13313a07e050a3b02"
44SRC_URI[pyo3-macros-backend-0.27.2.sha256sum] = "03b51720d314836e53327f5871d4c0cfb4fb37cc2c4a11cc71907a86342c40f9"
45SRC_URI[python3-dll-a-0.2.14.sha256sum] = "d381ef313ae70b4da5f95f8a4de773c6aa5cd28f73adec4b4a31df70b66780d8"
46SRC_URI[quote-1.0.44.sha256sum] = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
47SRC_URI[rustversion-1.0.22.sha256sum] = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
48SRC_URI[shlex-1.3.0.sha256sum] = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
49SRC_URI[syn-2.0.114.sha256sum] = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a"
50SRC_URI[target-lexicon-0.13.4.sha256sum] = "b1dd07eb858a2067e2f3c7155d54e929265c264e6f37efe3ee7a8d1b5a1dd0ba"
51SRC_URI[unicode-ident-1.0.22.sha256sum] = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
52SRC_URI[unindent-0.2.4.sha256sum] = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
diff --git a/meta-python/recipes-devtools/python/python3-pendulum/0001-rust-Cargo.toml-inhibit-strip.patch b/meta-python/recipes-devtools/python/python3-pendulum/0001-rust-Cargo.toml-inhibit-strip.patch
new file mode 100644
index 0000000000..f721b9fe40
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-pendulum/0001-rust-Cargo.toml-inhibit-strip.patch
@@ -0,0 +1,31 @@
1From 74db4bc77be0e02912975ea198e58addf97bc218 Mon Sep 17 00:00:00 2001
2From: Tim Orling <tim.orling@konsulko.com>
3Date: Fri, 30 Jan 2026 07:06:05 -0800
4Subject: [PATCH] rust/Cargo.toml: inhibit strip
5
6For OpenEmbedded builds, we want debug symbols which will be stripped
7later by us.
8
9Upstream-Status: Inappropriate [oe specific]
10
11Signed-off-by: Tim Orling <tim.orling@konsulko.com>
12---
13 rust/Cargo.toml | 2 +-
14 1 file changed, 1 insertion(+), 1 deletion(-)
15
16diff --git a/rust/Cargo.toml b/rust/Cargo.toml
17index 097321f..8bde1fd 100644
18--- a/rust/Cargo.toml
19+++ b/rust/Cargo.toml
20@@ -10,7 +10,7 @@ crate-type = ["cdylib"]
21 [profile.release]
22 lto = "fat"
23 codegen-units = 1
24-strip = true
25+strip = false
26 overflow-checks = false
27
28 [dependencies]
29--
302.43.0
31
diff --git a/meta-python/recipes-devtools/python/python3-pendulum_3.2.0.bb b/meta-python/recipes-devtools/python/python3-pendulum_3.2.0.bb
new file mode 100644
index 0000000000..a2dc7e7d9e
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-pendulum_3.2.0.bb
@@ -0,0 +1,35 @@
1SUMMARY = "Python datetimes made easy"
2DESCRIPTION = "Pendulum is a Python package to ease datetimes manipulation. \
3It provides classes that are drop-in replacements for the native ones (they \
4inherit from them). \
5Special care has been taken to ensure timezones are handled correctly, and \
6are based on the underlying tzinfo implementation. For example, all \
7comparisons are done in UTC or in the timezone of the datetime being used. \
8The default timezone, except when using the now(), method will always be UTC. \
9"
10HOMEPAGE = "https://pendulum.eustace.io"
11LICENSE = "MIT"
12LIC_FILES_CHKSUM = "file://LICENSE;md5=869e1c364438f234f09673c4039ed114"
13
14DEPENDS = "python3-maturin-native"
15
16SRCREV = "aea611d7a1c15ed0da56505c3f370fe4446ba733"
17PYPI_SRC_URI = "git://github.com/python-pendulum/pendulum;protocol=https;branch=master;tag=${PV};destsuffix=pendulum-${PV}"
18
19SRC_URI += "file://0001-rust-Cargo.toml-inhibit-strip.patch"
20
21require ${BPN}-crates.inc
22
23inherit pypi python_maturin cargo-update-recipe-crates ptest-python-pytest
24
25do_install_ptest:append() {
26 install -d ${D}${PTEST_PATH}/tests
27 cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
28}
29
30RDEPENDS:${PN} += "python3-dateutil python3-tzdata"
31
32RDEPENDS:${PN}-ptest += "\
33 python3-dateutil-zoneinfo \
34 python3-time-machine \
35 "
diff --git a/meta-python/recipes-devtools/python/python3-pikepdf_10.2.0.bb b/meta-python/recipes-devtools/python/python3-pikepdf_10.5.1.bb
index 1854ab0ab9..289a702e06 100644
--- a/meta-python/recipes-devtools/python/python3-pikepdf_10.2.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pikepdf_10.5.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/pikepdf/pikepdf"
3LICENSE = "MPL-2.0" 3LICENSE = "MPL-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=9741c346eef56131163e13b9db1241b3" 4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=9741c346eef56131163e13b9db1241b3"
5 5
6SRC_URI[sha256sum] = "0f398b0daeb2ffd2358f75c06f1dd47b9ba76f1a77dfe938cccf7080c58227d7" 6SRC_URI[sha256sum] = "ffa6c7d0b77deb3af9735e0b0cae177c897431e10d342bb171b62e5527a622b7"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
diff --git a/meta-python/recipes-devtools/python/python3-pillow_12.1.0.bb b/meta-python/recipes-devtools/python/python3-pillow_12.2.0.bb
index 83231cad06..f3fcb2d3c1 100644
--- a/meta-python/recipes-devtools/python/python3-pillow_12.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pillow_12.2.0.bb
@@ -3,12 +3,12 @@ Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lundh and \
3Contributors." 3Contributors."
4HOMEPAGE = "https://pillow.readthedocs.io" 4HOMEPAGE = "https://pillow.readthedocs.io"
5LICENSE = "MIT-CMU" 5LICENSE = "MIT-CMU"
6LIC_FILES_CHKSUM = "file://LICENSE;md5=a1b708da743e3fc0e5c35e92daac0bf8" 6LIC_FILES_CHKSUM = "file://LICENSE;md5=a6f0ac3777cfc96ded1b825e32ae7c99"
7 7
8SRC_URI = "git://github.com/python-pillow/Pillow.git;branch=main;protocol=https;tag=${PV} \ 8SRC_URI = "git://github.com/python-pillow/Pillow.git;branch=main;protocol=https;tag=${PV} \
9 file://0001-support-cross-compiling.patch \ 9 file://0001-support-cross-compiling.patch \
10 " 10 "
11SRCREV = "46f45f674d47b5d8bc54230dda8fe9e214598b87" 11SRCREV = "3c41c095064200a02672d89cc5ff629eaf4b0d4f"
12 12
13inherit python_setuptools_build_meta ptest-python-pytest 13inherit python_setuptools_build_meta ptest-python-pytest
14 14
diff --git a/meta-python/recipes-devtools/python/python3-pint_0.25.2.bb b/meta-python/recipes-devtools/python/python3-pint_0.25.3.bb
index 97ee4b48bc..fff2b08324 100644
--- a/meta-python/recipes-devtools/python/python3-pint_0.25.2.bb
+++ b/meta-python/recipes-devtools/python/python3-pint_0.25.3.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=bccf824202692270a1e0829a62e3f47b"
8 8
9inherit pypi python_hatchling ptest-python-pytest python_setuptools_build_meta 9inherit pypi python_hatchling ptest-python-pytest python_setuptools_build_meta
10 10
11SRC_URI[sha256sum] = "85a45d1da8fe9c9f7477fed8aef59ad2b939af3d6611507e1a9cbdacdcd3450a" 11SRC_URI[sha256sum] = "f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee"
12 12
13DEPENDS += "python3-setuptools-scm-native python3-hatch-vcs-native" 13DEPENDS += "python3-setuptools-scm-native python3-hatch-vcs-native"
14 14
diff --git a/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.5.bb b/meta-python/recipes-devtools/python/python3-pkgconfig_1.6.0.bb
index 8f65d3d4c5..e872c7a314 100644
--- a/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.5.bb
+++ b/meta-python/recipes-devtools/python/python3-pkgconfig_1.6.0.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=faa7f82be8f220bff6156be4790344fc" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=faa7f82be8f220bff6156be4790344fc"
6 6
7SRC_URI[sha256sum] = "deb4163ef11f75b520d822d9505c1f462761b4309b1bb713d08689759ea8b899" 7SRC_URI[sha256sum] = "4a5a6631ce937fafac457104a40d558785a658bbdca5c49b6295bc3fd651907f"
8 8
9RDEPENDS:${PN} = "pkgconfig \ 9RDEPENDS:${PN} = "pkgconfig \
10 python3-shell \ 10 python3-shell \
diff --git a/meta-python/recipes-devtools/python/python3-platformdirs_4.5.1.bb b/meta-python/recipes-devtools/python/python3-platformdirs_4.9.6.bb
index 666ba6805e..6ca4a09bde 100644
--- a/meta-python/recipes-devtools/python/python3-platformdirs_4.5.1.bb
+++ b/meta-python/recipes-devtools/python/python3-platformdirs_4.9.6.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/platformdirs/platformdirs"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=ea4f5a41454746a9ed111e3d8723d17a" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=ea4f5a41454746a9ed111e3d8723d17a"
5 5
6SRC_URI[sha256sum] = "61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda" 6SRC_URI[sha256sum] = "3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a"
7 7
8inherit pypi python_hatchling ptest-python-pytest 8inherit pypi python_hatchling ptest-python-pytest
9 9
diff --git a/meta-python/recipes-devtools/python/python3-pre-commit_4.3.0.bb b/meta-python/recipes-devtools/python/python3-pre-commit_4.5.1.bb
index f3116e6d0d..df4769c13e 100644
--- a/meta-python/recipes-devtools/python/python3-pre-commit_4.3.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pre-commit_4.5.1.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=b53a93744e3ff841e5fc9a934da8e1c8"
5PYPI_PACKAGE = "pre_commit" 5PYPI_PACKAGE = "pre_commit"
6 6
7inherit pypi setuptools3 7inherit pypi setuptools3
8SRC_URI[sha256sum] = "499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16" 8SRC_URI[sha256sum] = "eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61"
9 9
10RDEPENDS:${PN} = " \ 10RDEPENDS:${PN} = " \
11 python3-cfgv \ 11 python3-cfgv \
diff --git a/meta-python/recipes-devtools/python/python3-progress_1.6.1.bb b/meta-python/recipes-devtools/python/python3-progress_1.6.1.bb
index 57c0748a5c..9ec4ec2b66 100644
--- a/meta-python/recipes-devtools/python/python3-progress_1.6.1.bb
+++ b/meta-python/recipes-devtools/python/python3-progress_1.6.1.bb
@@ -7,7 +7,7 @@ SRC_URI[sha256sum] = "c1ba719f862ce885232a759eab47971fe74dfc7bb76ab8a51ef5940bad
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
10RDEPENDS:${PN}:class-target += " \ 10RDEPENDS:${PN}:append:class-target = " \
11 python3-datetime \ 11 python3-datetime \
12 python3-math \ 12 python3-math \
13" 13"
diff --git a/meta-python/recipes-devtools/python/python3-protobuf_6.33.2.bb b/meta-python/recipes-devtools/python/python3-protobuf_6.33.6.bb
index d0ef7753b0..0595ec2a47 100644
--- a/meta-python/recipes-devtools/python/python3-protobuf_6.33.2.bb
+++ b/meta-python/recipes-devtools/python/python3-protobuf_6.33.6.bb
@@ -10,9 +10,11 @@ LIC_FILES_CHKSUM = " \
10" 10"
11 11
12inherit pypi setuptools3 12inherit pypi setuptools3
13SRC_URI[sha256sum] = "56dc370c91fbb8ac85bc13582c9e373569668a290aa2e66a590c2a0d35ddb9e4" 13SRC_URI[sha256sum] = "a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135"
14 14
15CVE_PRODUCT += "google:protobuf protobuf:protobuf google-protobuf protobuf-python" 15CVE_PRODUCT += "google:protobuf protobuf:protobuf google-protobuf protobuf-python"
16CVE_STATUS[CVE-2026-0994] = "fixed-version: it is fixed in 6.33.5"
17CVE_STATUS[CVE-2026-6409] = "cpe-incorrect: the vulnerability affects only the php library"
16 18
17# http://errors.yoctoproject.org/Errors/Details/184715/ 19# http://errors.yoctoproject.org/Errors/Details/184715/
18# Can't find required file: ../src/google/protobuf/descriptor.proto 20# Can't find required file: ../src/google/protobuf/descriptor.proto
diff --git a/meta-python/recipes-devtools/python/python3-py7zr_1.1.0.bb b/meta-python/recipes-devtools/python/python3-py7zr_1.1.2.bb
index 7a7a7f45ee..b4c6c1672b 100644
--- a/meta-python/recipes-devtools/python/python3-py7zr_1.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-py7zr_1.1.2.bb
@@ -4,7 +4,7 @@ LICENSE = "LGPL-2.1-or-later"
4SECTION = "devel/python" 4SECTION = "devel/python"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
6 6
7SRC_URI[sha256sum] = "087b1a94861ad9eb4d21604f6aaa0a8986a7e00580abd79fedd6f82fecf0592c" 7SRC_URI[sha256sum] = "2aee212c5516ddcbeb76874dc3ece38b4566fc003f51600032c723cfea89ac56"
8 8
9CVE_PRODUCT = "py7zr" 9CVE_PRODUCT = "py7zr"
10 10
@@ -23,7 +23,6 @@ RDEPENDS:${PN} += "\
23 python3-pybcj \ 23 python3-pybcj \
24 python3-inflate64 \ 24 python3-inflate64 \
25 python3-pyppmd \ 25 python3-pyppmd \
26 python3-pyzstd \
27 python3-brotli \ 26 python3-brotli \
28 python3-multiprocessing \ 27 python3-multiprocessing \
29 python3-datetime \ 28 python3-datetime \
diff --git a/meta-python/recipes-devtools/python/python3-pyais_2.15.0.bb b/meta-python/recipes-devtools/python/python3-pyais_3.0.0.bb
index 3f124a750d..a8b8777821 100644
--- a/meta-python/recipes-devtools/python/python3-pyais_2.15.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pyais_3.0.0.bb
@@ -3,9 +3,9 @@ HOMEPAGE = "https://github.com/M0r13n/pyais"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=79d9e278b76e3e5b3358cd70b328173c" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=79d9e278b76e3e5b3358cd70b328173c"
5 5
6SRC_URI = "git://github.com/M0r13n/pyais;protocol=https;branch=master;tag=v${PV}" 6SRC_URI = "git://github.com/M0r13n/pyais;protocol=https;branch=main;tag=v${PV}"
7 7
8SRCREV = "7350f9db65ad715e582979bf389133bde07f5e10" 8SRCREV = "a88659ae381487e547fde3c18ab45cfe572b1094"
9 9
10inherit python_setuptools_build_meta ptest-python-pytest 10inherit python_setuptools_build_meta ptest-python-pytest
11 11
diff --git a/meta-python/recipes-devtools/python/python3-pyatspi_2.46.1.bb b/meta-python/recipes-devtools/python/python3-pyatspi_2.58.2.bb
index cb9b61bd66..404ff19a72 100644
--- a/meta-python/recipes-devtools/python/python3-pyatspi_2.46.1.bb
+++ b/meta-python/recipes-devtools/python/python3-pyatspi_2.58.2.bb
@@ -7,16 +7,18 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=db29218e6ba3794c56df7d4987dc7e4d \
7 file://COPYING.GPL;md5=751419260aa954499f7abaabaa882bbe" 7 file://COPYING.GPL;md5=751419260aa954499f7abaabaa882bbe"
8DEPENDS = "python3-dbus-native glib-2.0 dbus-glib libxml2 atk gtk+ python3-pygobject" 8DEPENDS = "python3-dbus-native glib-2.0 dbus-glib libxml2 atk gtk+ python3-pygobject"
9 9
10SRC_URI = "git://github.com/GNOME/pyatspi2.git;protocol=https;branch=master" 10SRC_URI = "git://github.com/GNOME/pyatspi2.git;protocol=https;branch=master;tag=${PV}"
11SRCREV = "8c69016b38d0e4caaf4c986938ea3410fb7351b6" 11SRCREV = "f2fb289a9d2e4dac65fca8db0f4d3d65607a0cf2"
12 12
13 13
14# Same restriction as gtk+ 14# Same restriction as gtk+
15inherit features_check setuptools3 15inherit features_check
16ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}" 16ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}"
17REQUIRED_DISTRO_FEATURES = "gobject-introspection-data" 17REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
18 18
19inherit pkgconfig autotools python3native 19inherit pkgconfig python_setuptools_build_meta python_mesonpy
20
21DEPENDS += "python3-pygobject-native"
20 22
21FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR}/pyatspi/*" 23FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR}/pyatspi/*"
22 24
diff --git a/meta-python/recipes-devtools/python/python3-pybind11-json/0001-CMakeLists-drop-PYTHON_INCLUDE_DIRS-from-interface.patch b/meta-python/recipes-devtools/python/python3-pybind11-json/0001-CMakeLists-drop-PYTHON_INCLUDE_DIRS-from-interface.patch
new file mode 100644
index 0000000000..e1bf82e506
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-pybind11-json/0001-CMakeLists-drop-PYTHON_INCLUDE_DIRS-from-interface.patch
@@ -0,0 +1,34 @@
1From 6d4af27d1b43860d8deb3d1d2b2a910e82618ac1 Mon Sep 17 00:00:00 2001
2From: Tafil Avdyli <tafil@tafhub.de>
3Date: Sat, 24 Jan 2026 09:14:03 +0100
4Subject: [PATCH] CMakeLists: drop PYTHON_INCLUDE_DIRS from interface
5
6Including PYTHON_INCLUDE_DIRS in the INTERFACE list caused a hard-coded
7Python include directory (e.g. /usr/include/python3.13) to appear in the
8generated Targets.cmake file. This resulted in a CMake configuration
9error when the path did not exist:
10
11 Imported target "pybind11_json" includes non-existent path
12 "/usr/include/python3.13"
13
14pybind11_json is header-only and does not use Python headers, so the
15include path should not be exported.
16
17Upstream-Status: Submitted [https://github.com/pybind/pybind11_json/pull/77]
18Signed-off-by: Tafil Avdyli <tafil@tafhub.de>
19---
20 CMakeLists.txt | 1 -
21 1 file changed, 1 deletion(-)
22
23diff --git a/CMakeLists.txt b/CMakeLists.txt
24index 0be4838..4b305e4 100644
25--- a/CMakeLists.txt
26+++ b/CMakeLists.txt
27@@ -45,7 +45,6 @@ add_library(${PROJECT_NAME} INTERFACE)
28
29 target_include_directories(${PROJECT_NAME}
30 INTERFACE
31- ${PYTHON_INCLUDE_DIRS}
32 $<BUILD_INTERFACE:${PYBIND11_JSON_INCLUDE_DIR}>
33 $<INSTALL_INTERFACE:include>)
34
diff --git a/meta-python/recipes-devtools/python/python3-pybind11-json_0.2.15.bb b/meta-python/recipes-devtools/python/python3-pybind11-json_0.2.15.bb
index 8ad7dba76a..2a030af988 100644
--- a/meta-python/recipes-devtools/python/python3-pybind11-json_0.2.15.bb
+++ b/meta-python/recipes-devtools/python/python3-pybind11-json_0.2.15.bb
@@ -4,7 +4,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=0e25ff0ec476d06d366439e1120cce98"
4 4
5SRCREV = "32043f433ed987b2c2ce99d689ec337bcbd4ba95" 5SRCREV = "32043f433ed987b2c2ce99d689ec337bcbd4ba95"
6SRC_URI = "git://github.com/pybind/pybind11_json;branch=master;protocol=https \ 6SRC_URI = "git://github.com/pybind/pybind11_json;branch=master;protocol=https \
7 file://d72ad4df929bc9d0882298fc1f85ecf589456ff6.patch" 7 file://d72ad4df929bc9d0882298fc1f85ecf589456ff6.patch \
8 file://0001-CMakeLists-drop-PYTHON_INCLUDE_DIRS-from-interface.patch"
8 9
9DEPENDS += "nlohmann-json python3-pybind11" 10DEPENDS += "nlohmann-json python3-pybind11"
10 11
diff --git a/meta-python/recipes-devtools/python/python3-pychromecast/0001-bump-required-version-to-0.46.1-for-python3-wheel.patch b/meta-python/recipes-devtools/python/python3-pychromecast/0001-bump-required-version-to-0.46.1-for-python3-wheel.patch
deleted file mode 100644
index 655b9c08c7..0000000000
--- a/meta-python/recipes-devtools/python/python3-pychromecast/0001-bump-required-version-to-0.46.1-for-python3-wheel.patch
+++ /dev/null
@@ -1,23 +0,0 @@
1From 672b0501526fc7c91725236fc37db82794096832 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Tue, 1 Jul 2025 23:14:08 -0700
4Subject: [PATCH] bump required version to 0.46.1 for python3-wheel
5
6Upstream-Status: Pending
7
8Signed-off-by: Khem Raj <raj.khem@gmail.com>
9---
10 pyproject.toml | 2 +-
11 1 file changed, 1 insertion(+), 1 deletion(-)
12
13diff --git a/pyproject.toml b/pyproject.toml
14index d5a518c..a6a159d 100644
15--- a/pyproject.toml
16+++ b/pyproject.toml
17@@ -1,5 +1,5 @@
18 [build-system]
19-requires = ["setuptools>=65.6,<81.0", "wheel>=0.37.1,<0.46.0"]
20+requires = ["setuptools>=65.6,<81.0", "wheel>=0.37.1,<0.46.2"]
21 build-backend = "setuptools.build_meta"
22
23 [project]
diff --git a/meta-python/recipes-devtools/python/python3-pychromecast_14.0.9.bb b/meta-python/recipes-devtools/python/python3-pychromecast_14.0.10.bb
index 35106f870a..cdd85a550f 100644
--- a/meta-python/recipes-devtools/python/python3-pychromecast_14.0.9.bb
+++ b/meta-python/recipes-devtools/python/python3-pychromecast_14.0.10.bb
@@ -3,11 +3,7 @@ HOMEPAGE = "https://github.com/balloob/pychromecast"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=b1dbd4e85f47b389bdadee9c694669f5" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=b1dbd4e85f47b389bdadee9c694669f5"
5 5
6SRC_URI += "\ 6SRC_URI[sha256sum] = "f05a1c8d727d4f104c8c731688053033e05157f2ab81bc8eef50ec0c62f9373c"
7 file://0001-bump-required-version-to-0.46.1-for-python3-wheel.patch \
8"
9
10SRC_URI[sha256sum] = "fe78841b0b04aa107d08aed216e91ab9cfb54b11d089d382be4e987e3631d4a6"
11 7
12inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
13 9
diff --git a/meta-python/recipes-devtools/python/python3-pydantic_2.12.4.bb b/meta-python/recipes-devtools/python/python3-pydantic_2.12.5.bb
index 8793e76aef..e354e4b93d 100644
--- a/meta-python/recipes-devtools/python/python3-pydantic_2.12.4.bb
+++ b/meta-python/recipes-devtools/python/python3-pydantic_2.12.5.bb
@@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=09280955509d1c4ca14bae02f21d49a6"
11 11
12inherit python_hatchling ptest-python-pytest 12inherit python_hatchling ptest-python-pytest
13 13
14SRCREV = "5c842dfc9c245fb37aa1f5ec5b55c1aed10bd7e6" 14SRCREV = "bd2d0dd0137dfa1a8fdff2529b9dfb1547980150"
15PV .= "+git" 15PV .= "+git"
16SRC_URI = "git://github.com/pydantic/pydantic;protocol=https;branch=v2.12-fixes" 16SRC_URI = "git://github.com/pydantic/pydantic;protocol=https;branch=v2.12-fixes"
17DEPENDS += "python3-hatch-fancy-pypi-readme-native" 17DEPENDS += "python3-hatch-fancy-pypi-readme-native"
diff --git a/meta-python/recipes-devtools/python/python3-pyee_13.0.0.bb b/meta-python/recipes-devtools/python/python3-pyee_13.0.1.bb
index fba54324da..a5a9822cd3 100644
--- a/meta-python/recipes-devtools/python/python3-pyee_13.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pyee_13.0.1.bb
@@ -3,7 +3,7 @@ LICENSE = "MIT"
3LIC_FILES_CHKSUM = "file://LICENSE;md5=b2b1cc8797dff32cec5d783148fceab5" 3LIC_FILES_CHKSUM = "file://LICENSE;md5=b2b1cc8797dff32cec5d783148fceab5"
4 4
5DEPENDS = "python3-setuptools-scm-native" 5DEPENDS = "python3-setuptools-scm-native"
6SRC_URI[sha256sum] = "b391e3c5a434d1f5118a25615001dbc8f669cf410ab67d04c4d4e07c55481c37" 6SRC_URI[sha256sum] = "0b931f7c14535667ed4c7e0d531716368715e860b988770fc7eb8578d1f67fc8"
7 7
8inherit pypi python_setuptools_build_meta ptest-python-pytest 8inherit pypi python_setuptools_build_meta ptest-python-pytest
9 9
diff --git a/meta-python/recipes-devtools/python/python3-pyjwt_2.10.1.bb b/meta-python/recipes-devtools/python/python3-pyjwt_2.12.1.bb
index 37675f1b63..eb445f9c91 100644
--- a/meta-python/recipes-devtools/python/python3-pyjwt_2.10.1.bb
+++ b/meta-python/recipes-devtools/python/python3-pyjwt_2.12.1.bb
@@ -5,10 +5,11 @@ HOMEPAGE = "https://github.com/jpadilla/pyjwt"
5LICENSE = "MIT" 5LICENSE = "MIT"
6LIC_FILES_CHKSUM = "file://LICENSE;md5=e4b56d2c9973d8cf54655555be06e551" 6LIC_FILES_CHKSUM = "file://LICENSE;md5=e4b56d2c9973d8cf54655555be06e551"
7 7
8SRC_URI[sha256sum] = "3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953" 8SRC_URI[sha256sum] = "c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b"
9 9
10PYPI_PACKAGE = "pyjwt" 10PYPI_PACKAGE = "pyjwt"
11CVE_PRODUCT = "pyjwt" 11CVE_PRODUCT = "pyjwt"
12
12inherit pypi python_setuptools_build_meta 13inherit pypi python_setuptools_build_meta
13 14
14RDEPENDS:${PN} = "\ 15RDEPENDS:${PN} = "\
@@ -17,3 +18,4 @@ RDEPENDS:${PN} = "\
17" 18"
18 19
19BBCLASSEXTEND = "native nativesdk" 20BBCLASSEXTEND = "native nativesdk"
21
diff --git a/meta-python/recipes-devtools/python/python3-pylint_4.0.4.bb b/meta-python/recipes-devtools/python/python3-pylint_4.0.5.bb
index adee1d10c1..15d8c14806 100644
--- a/meta-python/recipes-devtools/python/python3-pylint_4.0.4.bb
+++ b/meta-python/recipes-devtools/python/python3-pylint_4.0.5.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://www.pylint.org/"
3LICENSE = "GPL-2.0-only" 3LICENSE = "GPL-2.0-only"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=c107cf754550e65755c42985a5d4e9c9" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=c107cf754550e65755c42985a5d4e9c9"
5 5
6SRCREV = "e16f942166511d6fb4427e503a734152fae0c4fe" 6SRCREV = "88e1ab7545a4af4aea15c305a154c164a95ab842"
7SRC_URI += "git://github.com/pylint-dev/pylint;branch=main;protocol=https;tag=v${PV} \ 7SRC_URI += "git://github.com/pylint-dev/pylint;branch=main;protocol=https;tag=v${PV} \
8 file://0001-Adjust-test-expectations-for-ptest.patch \ 8 file://0001-Adjust-test-expectations-for-ptest.patch \
9 file://0002-pyproject.toml-Keep-tool.setuptools.license-files.patch \ 9 file://0002-pyproject.toml-Keep-tool.setuptools.license-files.patch \
diff --git a/meta-python/recipes-devtools/python/python3-pymisp_2.5.17.bb b/meta-python/recipes-devtools/python/python3-pymisp_2.5.33.1.bb
index 7267143e7e..4885dda859 100644
--- a/meta-python/recipes-devtools/python/python3-pymisp_2.5.17.bb
+++ b/meta-python/recipes-devtools/python/python3-pymisp_2.5.33.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/MISP/PyMISP"
3LICENSE = "BSD-2-Clause" 3LICENSE = "BSD-2-Clause"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=a3639cf5780f71b125d3e9d1dc127c20" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=a3639cf5780f71b125d3e9d1dc127c20"
5 5
6SRC_URI[sha256sum] = "91f1f75a18076e66c9275065d455b76099a723f4f7b66920b89893f942bbaf56" 6SRC_URI[sha256sum] = "b5cd9aac342596fbe2696b7c3ee02a2a221574557c0334451b0d4e21a4c5928f"
7 7
8inherit python_poetry_core pypi 8inherit python_poetry_core pypi
9 9
diff --git a/meta-python/recipes-devtools/python/python3-pymodbus_3.11.4.bb b/meta-python/recipes-devtools/python/python3-pymodbus_3.13.0.bb
index 6d961fda1a..c59e8870b7 100644
--- a/meta-python/recipes-devtools/python/python3-pymodbus_3.11.4.bb
+++ b/meta-python/recipes-devtools/python/python3-pymodbus_3.13.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/riptideio/pymodbus/"
3LICENSE = "BSD-3-Clause" 3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=12a490c6cffa2e76a6df8aa1fa29e183" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=12a490c6cffa2e76a6df8aa1fa29e183"
5 5
6SRC_URI[sha256sum] = "6910e385cb6b2f983cd457e9ecee2ff580dbb23cf3d84aefec0845e71edd606a" 6SRC_URI[sha256sum] = "da4c87afe772787620594c564cd8aa8a4c58ff9786382aba9550fe0ce8879f32"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
diff --git a/meta-python/recipes-devtools/python/python3-pyperclip_1.9.0.bb b/meta-python/recipes-devtools/python/python3-pyperclip_1.11.0.bb
index 80af514fab..09c7fc8f86 100644
--- a/meta-python/recipes-devtools/python/python3-pyperclip_1.9.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pyperclip_1.11.0.bb
@@ -1,11 +1,11 @@
1DESCRIPTION = "A cross-platform clipboard module for Python. (only handles plain text for now)" 1DESCRIPTION = "A cross-platform clipboard module for Python. (only handles plain text for now)"
2HOMEPAGE = "https://github.com/asweigart/pyperclip" 2HOMEPAGE = "https://github.com/asweigart/pyperclip"
3LICENSE = "BSD-3-Clause" 3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=d7dd4b0d1f7153322a546e89b5a0a632" 4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b6cd06fd72984ac1f8428337aec8cff7"
5 5
6SRC_URI[sha256sum] = "b7de0142ddc81bfc5c7507eea19da920b92252b548b96186caf94a5e2527d310" 6SRC_URI[sha256sum] = "244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6"
7 7
8inherit pypi setuptools3 8inherit pypi python_setuptools_build_meta
9 9
10RDEPENDS:${PN} += " \ 10RDEPENDS:${PN} += " \
11 python3-ctypes \ 11 python3-ctypes \
diff --git a/meta-python/recipes-devtools/python/python3-pyperf_2.9.0.bb b/meta-python/recipes-devtools/python/python3-pyperf_2.10.0.bb
index 810e65674a..39b8ee8470 100644
--- a/meta-python/recipes-devtools/python/python3-pyperf_2.9.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pyperf_2.10.0.bb
@@ -13,7 +13,7 @@ Features: \
13LICENSE = "MIT" 13LICENSE = "MIT"
14LIC_FILES_CHKSUM = "file://COPYING;md5=78bc2e6e87c8c61272937b879e6dc2f8" 14LIC_FILES_CHKSUM = "file://COPYING;md5=78bc2e6e87c8c61272937b879e6dc2f8"
15 15
16SRC_URI[sha256sum] = "dbe0feef8ec1a465df191bba2576149762d15a8c9985c9fea93ab625d875c362" 16SRC_URI[sha256sum] = "dd93ccfda79214725293e95f1fa6e00cb4a64adcf1326039486d4e1f91caaa62"
17 17
18DEPENDS += "python3-six-native" 18DEPENDS += "python3-six-native"
19 19
diff --git a/meta-python/recipes-devtools/python/python3-pyrad/208.patch b/meta-python/recipes-devtools/python/python3-pyrad/208.patch
deleted file mode 100644
index b08f183583..0000000000
--- a/meta-python/recipes-devtools/python/python3-pyrad/208.patch
+++ /dev/null
@@ -1,51 +0,0 @@
1From d17438da2008f48aa13cc95a626c990bf645799a Mon Sep 17 00:00:00 2001
2From: Luca Barbieri <lucabarb@gmail.com>
3Date: Wed, 8 Jan 2025 10:35:22 +0100
4Subject: [PATCH 1/2] Fix pyproject.toml format
5
6Fix pyproject format to correctly build with poetry-core 2.0.0
7Upstream-Status: Submitted [https://github.com/pyradius/pyrad/pull/208]
8Signed-off-by: Khem Raj <raj.khem@gmail.com>
9---
10 pyproject.toml | 28 ++++++++++++++--------------
11 1 file changed, 14 insertions(+), 14 deletions(-)
12
13--- a/pyproject.toml
14+++ b/pyproject.toml
15@@ -2,16 +2,16 @@
16 requires = ["poetry-core>=1.0.0"]
17 build-backend = "poetry.core.masonry.api"
18
19-[tool.poetry]
20+[project]
21 name = "pyrad"
22 version= "2.4"
23 readme = "README.rst"
24 license = "BSD-3-Clause"
25 description="RADIUS tools"
26 authors = [
27- "Istvan Ruzman <istvan@ruzman.eu>",
28- "Christian Giese <developer@gicnet.de>",
29-]
30+ { name = "Istvan Ruzman", email = "istvan@ruzman.eu" },
31+ { name = "Christian Giese", email = "developer@gicnet.de" },
32+ ]
33 keywords = ["AAA", "accounting", "authentication", "authorization", "RADIUS"]
34 classifiers = [
35 "Development Status :: 6 - Mature",
36@@ -28,7 +28,7 @@ include = [
37 "example/*"
38 ]
39
40-[tool.poetry.urls]
41+[project.urls]
42 repository = "https://github.com/pyradius/pyrad"
43
44 [tool.poetry.dependencies]
45@@ -36,5 +36,5 @@ python = "^2.7 || ^3.6"
46 six = "^1.15.0"
47 netaddr = "^0.8"
48
49-[tool.poetry.dev-dependencies]
50+[tool.poetry.group.dev.dependencies]
51 nose = "^0.10.0b1"
diff --git a/meta-python/recipes-devtools/python/python3-pyrad/use-poetry-core.patch b/meta-python/recipes-devtools/python/python3-pyrad/use-poetry-core.patch
deleted file mode 100644
index 43a177da0a..0000000000
--- a/meta-python/recipes-devtools/python/python3-pyrad/use-poetry-core.patch
+++ /dev/null
@@ -1,26 +0,0 @@
1Upstream-Status: Backport [https://github.com/pyradius/pyrad/commit/ffe182a44909e8f8278fb3e2ea052ddc097b48b9]
2Signed-off-by: Ross Burton <ross.burton@arm.com>
3
4From a4b70067dd6269e14a2f9530d820390a8a454231 Mon Sep 17 00:00:00 2001
5From: Martin Weinelt <hexa@darmstadt.ccc.de>
6Date: Thu, 14 Apr 2022 22:07:37 +0200
7Subject: [PATCH] Use poetry-core for pyproject based builds
8
9https://github.com/python-poetry/poetry-core#why-is-this-required
10---
11 pyproject.toml | 4 ++--
12 1 file changed, 2 insertions(+), 2 deletions(-)
13
14diff --git a/pyproject.toml b/pyproject.toml
15index 87b1df3..711c52f 100755
16--- a/pyproject.toml
17+++ b/pyproject.toml
18@@ -1,6 +1,6 @@
19 [build-system]
20-requires = ["poetry>=1.0"]
21-build-backend = "poetry.masonry.api"
22+requires = ["poetry-core>=1.0.0"]
23+build-backend = "poetry.core.masonry.api"
24
25 [tool.poetry]
26 name = "pyrad"
diff --git a/meta-python/recipes-devtools/python/python3-pyrad_2.4.bb b/meta-python/recipes-devtools/python/python3-pyrad_2.5.4.bb
index e8cfffc9cc..404e26381b 100644
--- a/meta-python/recipes-devtools/python/python3-pyrad_2.4.bb
+++ b/meta-python/recipes-devtools/python/python3-pyrad_2.5.4.bb
@@ -1,14 +1,10 @@
1SUMMARY = "RADIUS tools" 1SUMMARY = "RADIUS tools"
2SECTION = "devel/python" 2SECTION = "devel/python"
3LICENSE = "BSD-3-Clause" 3LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709" 4LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=53dbfa56f61b90215a9f8f0d527c043d"
5 5
6PYPI_PACKAGE = "pyrad" 6PYPI_PACKAGE = "pyrad"
7SRC_URI[sha256sum] = "057de4b7e89d8da57ba782c1bde45c63ebee720ae2c0b0a69beaff15c47e30d9" 7SRC_URI[sha256sum] = "e039c48a026c988d49276bd7c75795f55e0e4c2788f7ddf09419ce0e191a154d"
8
9SRC_URI += "file://use-poetry-core.patch \
10 file://208.patch \
11 "
12 8
13inherit pypi python_poetry_core 9inherit pypi python_poetry_core
14 10
diff --git a/meta-python/recipes-devtools/python/python3-pyroute2_0.9.5.bb b/meta-python/recipes-devtools/python/python3-pyroute2_0.9.5.bb
index 8005d1275b..d5c95cf546 100644
--- a/meta-python/recipes-devtools/python/python3-pyroute2_0.9.5.bb
+++ b/meta-python/recipes-devtools/python/python3-pyroute2_0.9.5.bb
@@ -19,6 +19,7 @@ RDEPENDS:${PN} += " \
19 python3-pkgutil \ 19 python3-pkgutil \
20 python3-pprint \ 20 python3-pprint \
21 python3-shell \ 21 python3-shell \
22 python3-unittest \
22 python3-unixadmin \ 23 python3-unixadmin \
23" 24"
24 25
diff --git a/meta-python/recipes-devtools/python/python3-pystemd_0.15.1.bb b/meta-python/recipes-devtools/python/python3-pystemd_0.15.3.bb
index 7698d6394d..b987007e39 100644
--- a/meta-python/recipes-devtools/python/python3-pystemd_0.15.1.bb
+++ b/meta-python/recipes-devtools/python/python3-pystemd_0.15.3.bb
@@ -2,7 +2,7 @@ SUMMARY = "Python bindings for interacting with systemd over DBus"
2LICENSE = "LGPL-2.1-only" 2LICENSE = "LGPL-2.1-only"
3LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c" 3LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
4 4
5SRC_URI[sha256sum] = "f217b5792f1e7c391ae46262f43566b6f83364507eaab5d5e73fcd05ab12d2bb" 5SRC_URI[sha256sum] = "3533f6d287a1ffe39dbfffcf2f547454bb8ef7a169ac6a24e81f446ddb258802"
6 6
7DEPENDS = "systemd" 7DEPENDS = "systemd"
8RDEPENDS:${PN} += "\ 8RDEPENDS:${PN} += "\
diff --git a/meta-python/recipes-devtools/python/python3-pytest-codspeed_3.0.0.bb b/meta-python/recipes-devtools/python/python3-pytest-codspeed_4.3.0.bb
index 0789e9f548..3fc2715102 100644
--- a/meta-python/recipes-devtools/python/python3-pytest-codspeed_3.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pytest-codspeed_4.3.0.bb
@@ -3,8 +3,8 @@ HOMEPAGE = "https://codspeed.io/"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=2856cbe664e8843cd4fd4c1d1d85c2c3" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=2856cbe664e8843cd4fd4c1d1d85c2c3"
5 5
6DEPENDS = "python3-hatchling-native" 6DEPENDS = "python3-cffi-native"
7SRC_URI[sha256sum] = "c5b80100ea32dd44079bb2db298288763eb8fe859eafa1650a8711bd2c32fd06" 7SRC_URI[sha256sum] = "5230d9d65f39063a313ed1820df775166227ec5c20a1122968f85653d5efee48"
8 8
9inherit pypi python_hatchling 9inherit pypi python_hatchling
10 10
diff --git a/meta-python/recipes-devtools/python/python3-pytest-cov_7.0.0.bb b/meta-python/recipes-devtools/python/python3-pytest-cov_7.1.0.bb
index 117767d1ee..5e76726909 100644
--- a/meta-python/recipes-devtools/python/python3-pytest-cov_7.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pytest-cov_7.1.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = " \
5 file://LICENSE;md5=cbc4e25353c748c817db2daffe605e43 \ 5 file://LICENSE;md5=cbc4e25353c748c817db2daffe605e43 \
6" 6"
7 7
8SRC_URI[sha256sum] = "33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1" 8SRC_URI[sha256sum] = "30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2"
9 9
10inherit pypi python_setuptools_build_meta python_hatchling 10inherit pypi python_setuptools_build_meta python_hatchling
11 11
diff --git a/meta-python/recipes-devtools/python/python3-pytest-env_1.6.0.bb b/meta-python/recipes-devtools/python/python3-pytest-env_1.6.0.bb
new file mode 100644
index 0000000000..860a534aaa
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-pytest-env_1.6.0.bb
@@ -0,0 +1,21 @@
1SUMMARY = "pytest plugin that allows you to add environment variables."
2HOMEPAGE = "https://github.com/pytest-dev/pytest-env"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=b70ef84b3d8d608b13b0287ed49df651"
5RECIPE_MAINTAINER = "Tom Geelen <t.f.g.geelen@gmail.com>"
6
7DEPENDS = "python3-hatch-vcs-native python3-hatchling-native"
8SRC_URI[sha256sum] = "ac02d6fba16af54d61e311dd70a3c61024a4e966881ea844affc3c8f0bf207d3"
9
10inherit pypi python_hatchling ptest-python-pytest
11
12PYPI_PACKAGE = "pytest_env"
13UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
14
15RDEPENDS:${PN} = "python3-pytest python3-tomli"
16
17RDEPENDS:${PN}-ptest += " \
18 python3-covdefaults \
19 python3-coverage \
20 python3-pytest-mock \
21"
diff --git a/meta-python/recipes-devtools/python/python3-pytest-html_4.1.1.bb b/meta-python/recipes-devtools/python/python3-pytest-html_4.2.0.bb
index d45f6a25ee..ea760ff29a 100644
--- a/meta-python/recipes-devtools/python/python3-pytest-html_4.1.1.bb
+++ b/meta-python/recipes-devtools/python/python3-pytest-html_4.2.0.bb
@@ -4,7 +4,7 @@ DEPENDS += "python3-setuptools-scm-native"
4LICENSE = "MPL-2.0" 4LICENSE = "MPL-2.0"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=5d425c8f3157dbf212db2ec53d9e5132" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=5d425c8f3157dbf212db2ec53d9e5132"
6 6
7SRC_URI[sha256sum] = "70a01e8ae5800f4a074b56a4cb1025c8f4f9b038bba5fe31e3c98eb996686f07" 7SRC_URI[sha256sum] = "b6a88cba507500d8709959201e2e757d3941e859fd17cfd4ed87b16fc0c67912"
8 8
9PYPI_PACKAGE = "pytest_html" 9PYPI_PACKAGE = "pytest_html"
10UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 10UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
diff --git a/meta-python/recipes-devtools/python/python3-pytest-httpx_0.36.0.bb b/meta-python/recipes-devtools/python/python3-pytest-httpx_0.36.2.bb
index 1cdf3d3d23..ac1a53d224 100644
--- a/meta-python/recipes-devtools/python/python3-pytest-httpx_0.36.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pytest-httpx_0.36.2.bb
@@ -1,10 +1,10 @@
1SUMMARY = "Send responses to httpx." 1SUMMARY = "Send responses to httpx."
2HOMEPAGE = "https://github.com/Colin-b/pytest_httpx" 2HOMEPAGE = "https://github.com/Colin-b/pytest_httpx"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=8dcb0d82b1d402b6be745fc78dde254b" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=3b6746540997ba13df3f30783db069bc"
5RECIPE_MAINTAINER = "Tom Geelen <t.f.g.geelen@gmail.com>" 5RECIPE_MAINTAINER = "Tom Geelen <t.f.g.geelen@gmail.com>"
6 6
7SRC_URI[sha256sum] = "9edb66a5fd4388ce3c343189bc67e7e1cb50b07c2e3fc83b97d511975e8a831b" 7SRC_URI[sha256sum] = "05a56527484f7f4e8c856419ea379b8dc359c36801c4992fdb330f294c690356"
8 8
9inherit pypi python_setuptools_build_meta ptest-python-pytest 9inherit pypi python_setuptools_build_meta ptest-python-pytest
10 10
diff --git a/meta-python/recipes-devtools/python/python3-pytest-runner/0001-Not-use-functions-from-pkg_resources-any-more.patch b/meta-python/recipes-devtools/python/python3-pytest-runner/0001-Not-use-functions-from-pkg_resources-any-more.patch
new file mode 100644
index 0000000000..20c1c121fb
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-pytest-runner/0001-Not-use-functions-from-pkg_resources-any-more.patch
@@ -0,0 +1,77 @@
1From 81b0218e390e36aa2c3d1bdaa124d8af175e9cbb Mon Sep 17 00:00:00 2001
2From: Li Zhou <li.zhou@windriver.com>
3Date: Thu, 2 Apr 2026 15:44:18 +0800
4Subject: [PATCH] Not use functions from pkg_resources any more
5
6The python3 setuptools 82 dropped pkg_resources module by now.
7To avoid the failure "No module named 'pkg_resources'", replace the
8functions from this module with other functions from modules
9packaging and importlib.metadata.
10
11Upstream-Status: Inactive-Upstream [lastcommit: 2023]
12Signed-off-by: Li Zhou <li.zhou@windriver.com>
13---
14 ptr/__init__.py | 23 +++++++++++++----------
15 1 file changed, 13 insertions(+), 10 deletions(-)
16
17diff --git a/ptr/__init__.py b/ptr/__init__.py
18index 41192fa..5186059 100644
19--- a/ptr/__init__.py
20+++ b/ptr/__init__.py
21@@ -10,10 +10,12 @@ import operator as _operator
22 import itertools as _itertools
23 import warnings as _warnings
24
25-import pkg_resources
26 import setuptools.command.test as orig
27 from setuptools import Distribution
28
29+from importlib.metadata import version
30+from packaging.version import Version
31+from packaging.markers import Marker, InvalidMarker
32
33 @_contextlib.contextmanager
34 def _save_argv(repl=None):
35@@ -121,7 +123,8 @@ class PyTest(orig.test):
36 instead of declaring the dependency in the package
37 metadata, assert the requirement at run time.
38 """
39- pkg_resources.require('setuptools>=27.3')
40+ if Version(version('setuptools')) < Version('27.3'):
41+ raise RuntimeError("setuptools >= 27.3 is required")
42
43 def finalize_options(self):
44 if self.addopts:
45@@ -133,11 +136,12 @@ class PyTest(orig.test):
46 Given an environment marker, return True if the marker is valid
47 and matches this environment.
48 """
49- return (
50- not marker
51- or not pkg_resources.invalid_marker(marker)
52- and pkg_resources.evaluate_marker(marker)
53- )
54+ if not marker:
55+ return True
56+ try:
57+ return Marker(marker).evaluate()
58+ except InvalidMarker:
59+ return False
60
61 def install_dists(self, dist):
62 """
63@@ -175,9 +179,8 @@ class PyTest(orig.test):
64 "please upgrade to setuptools 30.4 or later or pin to "
65 "pytest-runner < 5."
66 )
67- ver_str = pkg_resources.get_distribution('setuptools').version
68- ver = pkg_resources.parse_version(ver_str)
69- if ver < pkg_resources.parse_version('30.4'):
70+ ver = Version(version('setuptools'))
71+ if ver < Version('30.4'):
72 _warnings.warn(msg)
73
74 def run(self):
75--
762.34.1
77
diff --git a/meta-python/recipes-devtools/python/python3-pytest-runner_6.0.1.bb b/meta-python/recipes-devtools/python/python3-pytest-runner_6.0.1.bb
index e5e5e048bd..dd3a8d0234 100644
--- a/meta-python/recipes-devtools/python/python3-pytest-runner_6.0.1.bb
+++ b/meta-python/recipes-devtools/python/python3-pytest-runner_6.0.1.bb
@@ -5,6 +5,10 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=7a7126e068206290f3fe9f8d6c713ea6"
5 5
6SRC_URI[sha256sum] = "70d4739585a7008f37bf4933c013fdb327b8878a5a69fcbb3316c88882f0f49b" 6SRC_URI[sha256sum] = "70d4739585a7008f37bf4933c013fdb327b8878a5a69fcbb3316c88882f0f49b"
7 7
8SRC_URI += " \
9 file://0001-Not-use-functions-from-pkg_resources-any-more.patch \
10 "
11
8inherit pypi python_setuptools_build_meta 12inherit pypi python_setuptools_build_meta
9 13
10DEPENDS += " \ 14DEPENDS += " \
diff --git a/meta-python/recipes-devtools/python/python3-python-multipart_0.0.21.bb b/meta-python/recipes-devtools/python/python3-python-multipart_0.0.26.bb
index 6fc2b69f7e..46046dc050 100644
--- a/meta-python/recipes-devtools/python/python3-python-multipart_0.0.21.bb
+++ b/meta-python/recipes-devtools/python/python3-python-multipart_0.0.26.bb
@@ -1,8 +1,8 @@
1SUMMARY = "A streaming multipart parser for Python" 1SUMMARY = "A streaming multipart parser for Python"
2LICENSE = "Apache-2.0" 2LICENSE = "Apache-2.0"
3LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3d98f0d58b28321924a89ab60c82410e" 3LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
4 4
5SRC_URI[sha256sum] = "7137ebd4d3bbf70ea1622998f902b97a29434a9e8dc40eb203bbcf7c2a2cba92" 5SRC_URI[sha256sum] = "08fadc45918cd615e26846437f50c5d6d23304da32c341f289a617127b081f17"
6 6
7inherit pypi python_hatchling ptest-python-pytest 7inherit pypi python_hatchling ptest-python-pytest
8 8
diff --git a/meta-python/recipes-devtools/python/python3-pytokens_0.4.0.bb b/meta-python/recipes-devtools/python/python3-pytokens_0.4.1.bb
index 1ec1e31086..0772b48f35 100644
--- a/meta-python/recipes-devtools/python/python3-pytokens_0.4.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pytokens_0.4.1.bb
@@ -4,6 +4,6 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=627dc9a75d5dcc4759b26bacf13a4c46"
4 4
5inherit pypi python_setuptools_build_meta 5inherit pypi python_setuptools_build_meta
6 6
7SRC_URI[sha256sum] = "6b0b03e6ea7c9f9d47c5c61164b69ad30f4f0d70a5d9fe7eac4d19f24f77af2d" 7SRC_URI[sha256sum] = "292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a"
8 8
9DEPENDS += "python3-mypy-native" 9DEPENDS += "python3-mypy-native"
diff --git a/meta-python/recipes-devtools/python/python3-redis_5.2.1.bb b/meta-python/recipes-devtools/python/python3-redis_7.4.0.bb
index ba214f5869..5978ef51e1 100644
--- a/meta-python/recipes-devtools/python/python3-redis_5.2.1.bb
+++ b/meta-python/recipes-devtools/python/python3-redis_7.4.0.bb
@@ -7,9 +7,9 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=609ded3add9111c4c6e102f1d421d3f8"
7# Prefix archive to avoid clashing with the main redis archives 7# Prefix archive to avoid clashing with the main redis archives
8PYPI_ARCHIVE_NAME_PREFIX = "pypi-" 8PYPI_ARCHIVE_NAME_PREFIX = "pypi-"
9 9
10SRC_URI[sha256sum] = "16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f" 10SRC_URI[sha256sum] = "64a6ea7bf567ad43c964d2c30d82853f8df927c5c9017766c55a1d1ed95d18ad"
11 11
12inherit pypi setuptools3 12inherit pypi python_hatchling
13 13
14RDEPENDS:${PN} += " \ 14RDEPENDS:${PN} += " \
15 python3-asyncio \ 15 python3-asyncio \
diff --git a/meta-python/recipes-devtools/python/python3-regex_2025.11.3.bb b/meta-python/recipes-devtools/python/python3-regex_2026.4.4.bb
index 8e30bdaacf..3d4d7a3e99 100644
--- a/meta-python/recipes-devtools/python/python3-regex_2025.11.3.bb
+++ b/meta-python/recipes-devtools/python/python3-regex_2026.4.4.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7b5751ddd6b643203c31ff873051d069"
5 5
6inherit pypi python_setuptools_build_meta 6inherit pypi python_setuptools_build_meta
7 7
8SRC_URI[sha256sum] = "1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01" 8SRC_URI[sha256sum] = "e08270659717f6973523ce3afbafa53515c4dc5dcad637dc215b6fd50f689423"
9 9
10RDEPENDS:${PN} += " \ 10RDEPENDS:${PN} += " \
11 python3-stringold \ 11 python3-stringold \
diff --git a/meta-python/recipes-devtools/python/python3-reportlab_4.4.5.bb b/meta-python/recipes-devtools/python/python3-reportlab_4.4.10.bb
index 6386f5c3b1..57e62893b3 100644
--- a/meta-python/recipes-devtools/python/python3-reportlab_4.4.5.bb
+++ b/meta-python/recipes-devtools/python/python3-reportlab_4.4.10.bb
@@ -4,7 +4,7 @@ DESCRIPTION = "An Open Source Python library for generating PDFs and graphics."
4LICENSE = "BSD-3-Clause" 4LICENSE = "BSD-3-Clause"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=cf24392f451ff6710fca1e96cefa0424" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=cf24392f451ff6710fca1e96cefa0424"
6 6
7SRC_URI[sha256sum] = "0457d642aa76df7b36b0235349904c58d8f9c606a872456ed04436aafadc1510" 7SRC_URI[sha256sum] = "5cbbb34ac3546039d0086deb2938cdec06b12da3cdb836e813258eb33cd28487"
8 8
9CVE_PRODUCT = "reportlab" 9CVE_PRODUCT = "reportlab"
10CVE_STATUS[CVE-2020-28463] = "fixed-version: has been fixed since 3.5.55" 10CVE_STATUS[CVE-2020-28463] = "fixed-version: has been fixed since 3.5.55"
diff --git a/meta-python/recipes-devtools/python/python3-responses_0.25.8.bb b/meta-python/recipes-devtools/python/python3-responses_0.26.0.bb
index 2370a88843..4d1884225d 100644
--- a/meta-python/recipes-devtools/python/python3-responses_0.25.8.bb
+++ b/meta-python/recipes-devtools/python/python3-responses_0.26.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=0e601511a8517f4daf688a8eb95be7a2"
5 5
6inherit pypi python_setuptools_build_meta 6inherit pypi python_setuptools_build_meta
7 7
8SRC_URI[sha256sum] = "9374d047a575c8f781b94454db5cab590b6029505f488d12899ddb10a4af1cf4" 8SRC_URI[sha256sum] = "c7f6923e6343ef3682816ba421c006626777893cb0d5e1434f674b649bac9eb4"
9 9
10RDEPENDS:${PN} += " \ 10RDEPENDS:${PN} += " \
11 python3-mock \ 11 python3-mock \
diff --git a/meta-python/recipes-devtools/python/python3-rich-toolkit_0.15.1.bb b/meta-python/recipes-devtools/python/python3-rich-toolkit_0.19.7.bb
index b649d41575..26801293b5 100644
--- a/meta-python/recipes-devtools/python/python3-rich-toolkit_0.15.1.bb
+++ b/meta-python/recipes-devtools/python/python3-rich-toolkit_0.19.7.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/patrick91/rich-toolkit"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://pyproject.toml;md5=29c91c89ee62891477a1476375143bef;beginline=6;endline=6" 4LIC_FILES_CHKSUM = "file://pyproject.toml;md5=29c91c89ee62891477a1476375143bef;beginline=6;endline=6"
5 5
6SRC_URI[sha256sum] = "6f9630eb29f3843d19d48c3bd5706a086d36d62016687f9d0efa027ddc2dd08a" 6SRC_URI[sha256sum] = "133c0915872da91d4c25d85342d5ec1dfacc69b63448af1a08a0d4b4f23ef46e"
7 7
8inherit pypi python_hatchling ptest-python-pytest 8inherit pypi python_hatchling ptest-python-pytest
9 9
diff --git a/meta-python/recipes-devtools/python/python3-robotframework_7.3.2.bb b/meta-python/recipes-devtools/python/python3-robotframework_7.4.2.bb
index df4b31312e..5c83d923d4 100644
--- a/meta-python/recipes-devtools/python/python3-robotframework_7.3.2.bb
+++ b/meta-python/recipes-devtools/python/python3-robotframework_7.4.2.bb
@@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
11 11
12inherit pypi setuptools3 12inherit pypi setuptools3
13 13
14SRC_URI[sha256sum] = "3bb3e299831ecb1664f3d5082f6ff9f08ba82d61a745bef2227328ef3049e93a" 14SRC_URI[sha256sum] = "1c934e7f43600de407860cd2bd2fdc41adad4a4a785d8b46b1ed485fdc0f6c9f"
15 15
16RDEPENDS:${PN} += " \ 16RDEPENDS:${PN} += " \
17 python3-shell \ 17 python3-shell \
diff --git a/meta-python/recipes-devtools/python/python3-schema_0.7.8.bb b/meta-python/recipes-devtools/python/python3-schema_0.7.8.bb
new file mode 100644
index 0000000000..b27b890374
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-schema_0.7.8.bb
@@ -0,0 +1,10 @@
1SUMMARY = "A library for validating Python data structures"
2HOMEPAGE = "https://github.com/keleshev/schema"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE-MIT;md5=7e70914c99a6ec706baa9fad5e0502df"
5
6SRC_URI[sha256sum] = "e86cc08edd6fe6e2522648f4e47e3a31920a76e82cce8937535422e310862ab5"
7
8inherit pypi python_setuptools_build_meta
9
10BBCLASSEXTEND = "native"
diff --git a/meta-python/recipes-devtools/python/python3-scikit-build-core_0.11.6.bb b/meta-python/recipes-devtools/python/python3-scikit-build-core_0.12.2.bb
index 93a83ead65..d7f8aacd97 100644
--- a/meta-python/recipes-devtools/python/python3-scikit-build-core_0.11.6.bb
+++ b/meta-python/recipes-devtools/python/python3-scikit-build-core_0.12.2.bb
@@ -13,6 +13,6 @@ SRC_URI += " \
13 file://0001-builder.py-Check-PYTHON_INCLUDE_DIR.patch \ 13 file://0001-builder.py-Check-PYTHON_INCLUDE_DIR.patch \
14 file://0001-Find-cmake-from-PATH-instead-of-CMAKE_BIN_DIR.patch \ 14 file://0001-Find-cmake-from-PATH-instead-of-CMAKE_BIN_DIR.patch \
15" 15"
16SRC_URI[sha256sum] = "5982ccd839735be99cfd3b92a8847c6c196692f476c215da84b79d2ad12f9f1b" 16SRC_URI[sha256sum] = "562e0bbc9de1a354c87825ccf732080268d6582a0200f648e8c4a2dcb1e3736d"
17 17
18BBCLASSEXTEND = "native nativesdk" 18BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-scikit-build_0.18.1.bb b/meta-python/recipes-devtools/python/python3-scikit-build_0.19.0.bb
index 3b2e8b714e..78a9ee29a3 100644
--- a/meta-python/recipes-devtools/python/python3-scikit-build_0.18.1.bb
+++ b/meta-python/recipes-devtools/python/python3-scikit-build_0.19.0.bb
@@ -9,7 +9,7 @@ UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
9 9
10inherit pypi python_hatchling 10inherit pypi python_hatchling
11 11
12SRC_URI[sha256sum] = "a4152ac5a084d499c28a7797be0628d8366c336e2fb0e1a063eb32e55efcb8e7" 12SRC_URI[sha256sum] = "46e1b2d71343d14e4c07d7e60902e673c78defb9a2c282b70ad80fb8502ade2e"
13 13
14RDEPENDS:${PN} = " \ 14RDEPENDS:${PN} = " \
15 python3-distro \ 15 python3-distro \
diff --git a/meta-python/recipes-devtools/python/python3-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch b/meta-python/recipes-devtools/python/python3-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch
index 3678d46cf6..73950f4cd2 100644
--- a/meta-python/recipes-devtools/python/python3-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch
+++ b/meta-python/recipes-devtools/python/python3-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch
@@ -14,11 +14,11 @@ diff --git a/setup.py b/setup.py
14index 419a982..3f1fe52 100644 14index 419a982..3f1fe52 100644
15--- a/setup.py 15--- a/setup.py
16+++ b/setup.py 16+++ b/setup.py
17@@ -26,7 +26,6 @@ if sys.platform.startswith('linux'): 17@@ -25,7 +25,6 @@
18 ('_FILE_OFFSET_BITS', '64'), 18 # ("DEBUG", "1"),
19 ] 19 ]
20 libraries = ['crypto', 'rt'] 20 libraries = ["crypto", "rt"]
21- includes = ['/usr/local/include', '/usr/include'] 21- includes = ["/usr/local/include", "/usr/include"]
22 CFLAGS.append('-O2') 22 CFLAGS.append("-O2")
23 elif sys.platform.startswith('win32') and os.environ.get('MSYSTEM'): 23 CFLAGS.append("-g")
24 msys2_env = os.getenv('MSYSTEM') 24 CFLAGS.append("-Wall")
diff --git a/meta-python/recipes-devtools/python/python3-scrypt_0.8.27.bb b/meta-python/recipes-devtools/python/python3-scrypt_0.9.4.bb
index 4cbc4c06c4..0a5a841a71 100644
--- a/meta-python/recipes-devtools/python/python3-scrypt_0.8.27.bb
+++ b/meta-python/recipes-devtools/python/python3-scrypt_0.9.4.bb
@@ -1,11 +1,11 @@
1DESCRIPTION = "Bindings for the scrypt key derivation function library" 1DESCRIPTION = "Bindings for the scrypt key derivation function library"
2LICENSE = "BSD-2-Clause" 2LICENSE = "BSD-2-Clause"
3LIC_FILES_CHKSUM = "file://LICENSE;md5=05b5ac2824a7ae7489193b0f6a6f2cd1" 3LIC_FILES_CHKSUM = "file://LICENSE;md5=514fe4e05afed341c690c453fc87b10b"
4HOMEPAGE = "https://github.com/holgern/py-scrypt" 4HOMEPAGE = "https://github.com/holgern/py-scrypt"
5 5
6SRC_URI += "file://0001-py-scrypt-remove-the-hard-coded-include-paths.patch" 6SRC_URI += "file://0001-py-scrypt-remove-the-hard-coded-include-paths.patch"
7 7
8SRC_URI[sha256sum] = "a7b637848ed518c1ea2b31a9ecaaa3f49616598d8442de8706cf1f01fbabf0a7" 8SRC_URI[sha256sum] = "0d212010ba8c2e55475ba6258f30cee4da0432017514d8f6e855b7f1f8c55c77"
9 9
10inherit pypi ptest-python-pytest setuptools3 dos2unix 10inherit pypi ptest-python-pytest setuptools3 dos2unix
11 11
diff --git a/meta-python/recipes-devtools/python/python3-sentry-sdk_1.45.1.bb b/meta-python/recipes-devtools/python/python3-sentry-sdk_2.57.0.bb
index 10fdbce139..94fc007b84 100644
--- a/meta-python/recipes-devtools/python/python3-sentry-sdk_1.45.1.bb
+++ b/meta-python/recipes-devtools/python/python3-sentry-sdk_2.57.0.bb
@@ -15,7 +15,7 @@ RDEPENDS:${PN} += "\
15 python3-datetime \ 15 python3-datetime \
16" 16"
17 17
18SRC_URI[sha256sum] = "a16c997c0f4e3df63c0fc5e4207ccb1ab37900433e0f72fef88315d317829a26" 18SRC_URI[sha256sum] = "4be8d1e71c32fb27f79c577a337ac8912137bba4bcbc64a4ec1da4d6d8dc5199"
19 19
20PYPI_PACKAGE = "sentry_sdk" 20PYPI_PACKAGE = "sentry_sdk"
21 21
diff --git a/meta-python/recipes-devtools/python/python3-setuptools-git-versioning_2.1.0.bb b/meta-python/recipes-devtools/python/python3-setuptools-git-versioning_3.0.1.bb
index 8206e8513d..561f1d06c6 100644
--- a/meta-python/recipes-devtools/python/python3-setuptools-git-versioning_2.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-setuptools-git-versioning_3.0.1.bb
@@ -3,9 +3,9 @@ HOMEPAGE = "https://setuptools-git-versioning.readthedocs.io"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=92e79e3a844e66731724600f3ac9c0d8" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=92e79e3a844e66731724600f3ac9c0d8"
5 5
6SRC_URI[sha256sum] = "6aef5b8bb1cfb953b6b343d27cbfc561d96cf2a2ee23c2e0dd3591042a059921" 6SRC_URI[sha256sum] = "c8a599bacf163b5d215552b5701faf5480ffc4d65426a5711a010b802e1590eb"
7 7
8inherit pypi setuptools3 8inherit pypi python_setuptools_build_meta
9 9
10PACKAGECONFIG ?= "" 10PACKAGECONFIG ?= ""
11PACKAGECONFIG[python-version-smaller-3-dot-11] = ",,,python3-tomli" 11PACKAGECONFIG[python-version-smaller-3-dot-11] = ",,,python3-tomli"
diff --git a/meta-python/recipes-devtools/python/python3-simpleeval_1.0.3.bb b/meta-python/recipes-devtools/python/python3-simpleeval_1.0.7.bb
index 39178d3efd..5fb968edd5 100644
--- a/meta-python/recipes-devtools/python/python3-simpleeval_1.0.3.bb
+++ b/meta-python/recipes-devtools/python/python3-simpleeval_1.0.7.bb
@@ -1,9 +1,9 @@
1SUMMARY = "A simple, safe single expression evaluator library" 1SUMMARY = "A simple, safe single expression evaluator library"
2HOMEPAGE = "https://pypi.org/project/simpleeval/" 2HOMEPAGE = "https://pypi.org/project/simpleeval/"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENCE;md5=83843c8f0f3beb18af2f282faecbdebe" 4LIC_FILES_CHKSUM = "file://LICENCE;md5=aed013161b2a0bfa75e69eeb4e8a89e7"
5 5
6SRC_URI[sha256sum] = "67bbf246040ac3b57c29cf048657b9cf31d4e7b9d6659684daa08ca8f1e45829" 6SRC_URI[sha256sum] = "1e10e5f9fec597814444e20c0892ed15162fa214c8a88f434b5b077cf2fef85b"
7 7
8inherit pypi python_hatchling ptest-python-pytest 8inherit pypi python_hatchling ptest-python-pytest
9 9
diff --git a/meta-python/recipes-devtools/python/python3-smbus2_0.6.0.bb b/meta-python/recipes-devtools/python/python3-smbus2_0.6.1.bb
index 33613d9abe..1b9a879234 100644
--- a/meta-python/recipes-devtools/python/python3-smbus2_0.6.0.bb
+++ b/meta-python/recipes-devtools/python/python3-smbus2_0.6.1.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=2a3eca2de44816126b3c6f33811a9fba"
6 6
7inherit pypi setuptools3 7inherit pypi setuptools3
8 8
9SRC_URI[sha256sum] = "9b5ff1e998e114730f9dfe0c4babbef06c92468cfb61eaa684e30f225661b95b" 9SRC_URI[sha256sum] = "2b043372abf8f6029a632c3aab36b641c5d5872b1cbad599fc68e17ac4fd90a5"
10 10
11CLEANBROKEN = "1" 11CLEANBROKEN = "1"
12 12
diff --git a/meta-python/recipes-devtools/python/python3-snagboot_2.5.bb b/meta-python/recipes-devtools/python/python3-snagboot_2.6.1.bb
index fe496ffc2f..74e6df64a9 100644
--- a/meta-python/recipes-devtools/python/python3-snagboot_2.5.bb
+++ b/meta-python/recipes-devtools/python/python3-snagboot_2.6.1.bb
@@ -3,7 +3,7 @@ SUMMARY = "Snagboot intends to be an open-source replacement vendor-specific too
3LICENSE = "GPL-2.0-only" 3LICENSE = "GPL-2.0-only"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
5 5
6SRC_URI[sha256sum] = "64d114f743cf4d892a63bc35d6af45958e569030881154f9f2ffeac13cf9b664" 6SRC_URI[sha256sum] = "9800562936d21972a212e8e7c6f0f79eff8faf7f1bfb534675875bd06666f28c"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
@@ -19,3 +19,5 @@ RDEPENDS:${PN} += " \
19do_install:append() { 19do_install:append() {
20 install -D -m 0644 ${S}/src/snagrecover/50-snagboot.rules ${D}${sysconfdir}/udev/rules.d/50-snagboot.rules 20 install -D -m 0644 ${S}/src/snagrecover/50-snagboot.rules ${D}${sysconfdir}/udev/rules.d/50-snagboot.rules
21} 21}
22
23BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-socketio_5.11.2.bb b/meta-python/recipes-devtools/python/python3-socketio_5.16.1.bb
index 4251a81d6c..10372e83cc 100644
--- a/meta-python/recipes-devtools/python/python3-socketio_5.11.2.bb
+++ b/meta-python/recipes-devtools/python/python3-socketio_5.16.1.bb
@@ -7,9 +7,9 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=42d0a9e728978f0eeb759c3be91536b8"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
10PYPI_PACKAGE = "python-socketio" 10PYPI_PACKAGE = "python_socketio"
11 11
12SRC_URI[sha256sum] = "ae6a1de5c5209ca859dc574dccc8931c4be17ee003e74ce3b8d1306162bb4a37" 12SRC_URI[sha256sum] = "f863f98eacce81ceea2e742f6388e10ca3cdd0764be21d30d5196470edf5ea89"
13 13
14PACKAGECONFIG ?= "asyncio_client client" 14PACKAGECONFIG ?= "asyncio_client client"
15PACKAGECONFIG[asyncio_client] = ",,,python3-aiohttp python3-websockets" 15PACKAGECONFIG[asyncio_client] = ",,,python3-aiohttp python3-websockets"
diff --git a/meta-python/recipes-devtools/python/python3-soundcard_0.4.5.bb b/meta-python/recipes-devtools/python/python3-soundcard_0.4.6.bb
index 5116892dad..17308a8965 100644
--- a/meta-python/recipes-devtools/python/python3-soundcard_0.4.5.bb
+++ b/meta-python/recipes-devtools/python/python3-soundcard_0.4.6.bb
@@ -6,7 +6,7 @@ SECTION = "devel/python"
6LICENSE = "BSD-3-Clause" 6LICENSE = "BSD-3-Clause"
7LIC_FILES_CHKSUM = "file://LICENSE;md5=e39df1540c06c17ca310ce87c36b042c" 7LIC_FILES_CHKSUM = "file://LICENSE;md5=e39df1540c06c17ca310ce87c36b042c"
8 8
9SRC_URI[sha256sum] = "07272ba927e32cafdf634e4a1ca53b9a3218321a60c7d2e08f54b832a56946aa" 9SRC_URI[sha256sum] = "9b46d64a26f97cd7d88bcfc385c97c069f97c5ec3404e4e7c23771598a8cf47b"
10 10
11inherit pypi setuptools3 features_check 11inherit pypi setuptools3 features_check
12 12
diff --git a/meta-python/recipes-devtools/python/python3-soupsieve_2.8.1.bb b/meta-python/recipes-devtools/python/python3-soupsieve_2.8.3.bb
index d3fb375eba..11a2b5e103 100644
--- a/meta-python/recipes-devtools/python/python3-soupsieve_2.8.1.bb
+++ b/meta-python/recipes-devtools/python/python3-soupsieve_2.8.3.bb
@@ -2,9 +2,9 @@ SUMMARY = "CSS selector library for python-beautifulsoup4"
2HOMEPAGE = "https://github.com/facelessuser/soupsieve" 2HOMEPAGE = "https://github.com/facelessuser/soupsieve"
3 3
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE.md;md5=a23cdb0cf58a8b6d3d25202783bd6553" 5LIC_FILES_CHKSUM = "file://LICENSE.md;md5=74851a2f1e5c07496dcb452af6a6bf54"
6 6
7SRC_URI[sha256sum] = "4cf733bc50fa805f5df4b8ef4740fc0e0fa6218cf3006269afd3f9d6d80fd350" 7SRC_URI[sha256sum] = "3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349"
8 8
9inherit pypi python_hatchling ptest-python-pytest 9inherit pypi python_hatchling ptest-python-pytest
10 10
diff --git a/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.45.bb b/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.49.bb
index f7d8f383f2..ecc9099e30 100644
--- a/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.45.bb
+++ b/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.49.bb
@@ -2,9 +2,9 @@ DESCRIPTION = "Python SQL toolkit and Object Relational Mapper that gives \
2application developers the full power and flexibility of SQL" 2application developers the full power and flexibility of SQL"
3HOMEPAGE = "https://www.sqlalchemy.org/" 3HOMEPAGE = "https://www.sqlalchemy.org/"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=061025f14213ac2818ff353223d6eca6" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=53a9111717b305b0fae0d704a24925c3"
6 6
7SRC_URI[sha256sum] = "1632a4bda8d2d25703fdad6363058d882541bdaaee0e5e3ddfa0cd3229efce88" 7SRC_URI[sha256sum] = "d15950a57a210e36dd4cec1aac22787e2a4d57ba9318233e2ef8b2daf9ff2d5f"
8 8
9inherit pypi python_setuptools_build_meta cython 9inherit pypi python_setuptools_build_meta cython
10 10
@@ -19,6 +19,7 @@ RDEPENDS:${PN} += " \
19 python3-profile \ 19 python3-profile \
20 python3-threading \ 20 python3-threading \
21 python3-typing-extensions \ 21 python3-typing-extensions \
22 python3-greenlet \
22" 23"
23 24
24CVE_PRODUCT = "sqlalchemy" 25CVE_PRODUCT = "sqlalchemy"
diff --git a/meta-python/recipes-devtools/python/python3-sqlparse_0.5.4.bb b/meta-python/recipes-devtools/python/python3-sqlparse_0.5.5.bb
index 9f358d40f1..03c032c49e 100644
--- a/meta-python/recipes-devtools/python/python3-sqlparse_0.5.4.bb
+++ b/meta-python/recipes-devtools/python/python3-sqlparse_0.5.5.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
4LICENSE = "BSD-3-Clause" 4LICENSE = "BSD-3-Clause"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=2b136f573f5386001ea3b7b9016222fc" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=2b136f573f5386001ea3b7b9016222fc"
6 6
7SRC_URI[sha256sum] = "4396a7d3cf1cd679c1be976cf3dc6e0a51d0111e87787e7a8d780e7d5a998f9e" 7SRC_URI[sha256sum] = "e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e"
8 8
9CVE_PRODUCT = "sqlparse" 9CVE_PRODUCT = "sqlparse"
10 10
diff --git a/meta-python/recipes-devtools/python/python3-starlette_0.51.0.bb b/meta-python/recipes-devtools/python/python3-starlette_1.0.0.bb
index f6380bdfad..8f50678875 100644
--- a/meta-python/recipes-devtools/python/python3-starlette_0.51.0.bb
+++ b/meta-python/recipes-devtools/python/python3-starlette_1.0.0.bb
@@ -2,7 +2,7 @@ SUMMARY = "Starlette is a lightweight ASGI framework/toolkit, which is ideal for
2LICENSE = "BSD-3-Clause" 2LICENSE = "BSD-3-Clause"
3LIC_FILES_CHKSUM = "file://LICENSE.md;md5=11e8c8dbfd5fa373c703de492140ff7a" 3LIC_FILES_CHKSUM = "file://LICENSE.md;md5=11e8c8dbfd5fa373c703de492140ff7a"
4 4
5SRC_URI[sha256sum] = "4c4fda9b1bc67f84037d3d14a5112e523509c369d9d47b111b2f984b0cc5ba6c" 5SRC_URI[sha256sum] = "6a4beaf1f81bb472fd19ea9b918b50dc3a77a6f2e190a12954b25e6ed5eea149"
6 6
7inherit pypi python_hatchling ptest 7inherit pypi python_hatchling ptest
8 8
diff --git a/meta-python/recipes-devtools/python/python3-stevedore_5.6.0.bb b/meta-python/recipes-devtools/python/python3-stevedore_5.7.0.bb
index 634df7db37..cb194b6c15 100644
--- a/meta-python/recipes-devtools/python/python3-stevedore_5.6.0.bb
+++ b/meta-python/recipes-devtools/python/python3-stevedore_5.7.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://docs.openstack.org/stevedore/latest/"
3LICENSE = "Apache-2.0" 3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
5 5
6SRC_URI[sha256sum] = "f22d15c6ead40c5bbfa9ca54aa7e7b4a07d59b36ae03ed12ced1a54cf0b51945" 6SRC_URI[sha256sum] = "31dd6fe6b3cbe921e21dcefabc9a5f1cf848cf538a1f27543721b8ca09948aa3"
7 7
8DEPENDS += "python3-pbr-native" 8DEPENDS += "python3-pbr-native"
9 9
diff --git a/meta-python/recipes-devtools/python/python3-stopit/0001-Drop-the-deprecated-pkg_resources.patch b/meta-python/recipes-devtools/python/python3-stopit/0001-Drop-the-deprecated-pkg_resources.patch
new file mode 100644
index 0000000000..4252386384
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-stopit/0001-Drop-the-deprecated-pkg_resources.patch
@@ -0,0 +1,38 @@
1From b72825c89724c2c3b4c9c60d90c9d4ad597eead0 Mon Sep 17 00:00:00 2001
2From: "Bai, Haiqing" <Haiqing.Bai@windriver.com>
3Date: Thu, 2 Apr 2026 08:40:26 +0000
4Subject: [PATCH] Drop the deprecated pkg_resources
5
6pkg_resources is deprecated as an API. The pkg_resources package
7is slated for removal, so the way of obtaining the version needs
8to be updated.
9
10Upstream-Status: Inactive-Upstream [lastcommit: Jan/2024 lastrelease: Feb/2018]
11
12Signed-off-by: Bai, Haiqing <Haiqing.Bai@windriver.com>
13---
14 src/stopit/__init__.py | 4 ++--
15 1 file changed, 2 insertions(+), 2 deletions(-)
16
17diff --git a/src/stopit/__init__.py b/src/stopit/__init__.py
18index 6ca0180..5ddfa4a 100644
19--- a/src/stopit/__init__.py
20+++ b/src/stopit/__init__.py
21@@ -7,7 +7,7 @@ stopit
22 Public resources from ``stopit``
23 """
24
25-import pkg_resources
26+from importlib.metadata import version
27
28 from .utils import LOG, TimeoutException
29 from .threadstop import ThreadingTimeout, async_raise, threading_timeoutable
30@@ -15,7 +15,7 @@ from .signalstop import SignalTimeout, signal_timeoutable
31
32 # PEP 396 style version marker
33 try:
34- __version__ = pkg_resources.get_distribution(__name__).version
35+ __version__ = version(__name__)
36 except:
37 LOG.warning("Could not get the package version from pkg_resources")
38 __version__ = 'unknown'
diff --git a/meta-python/recipes-devtools/python/python3-stopit_1.1.2.bb b/meta-python/recipes-devtools/python/python3-stopit_1.1.2.bb
index a952722619..2cf7742a90 100644
--- a/meta-python/recipes-devtools/python/python3-stopit_1.1.2.bb
+++ b/meta-python/recipes-devtools/python/python3-stopit_1.1.2.bb
@@ -2,7 +2,6 @@ SUMMARY = "Raise asynchronous exceptions in other threads, control the timeout o
2HOMEPAGE = "https://pypi.org/project/stopit/" 2HOMEPAGE = "https://pypi.org/project/stopit/"
3SECTION = "devel/python" 3SECTION = "devel/python"
4 4
5SRC_URI += " file://LICENSE "
6LICENSE = "MIT" 5LICENSE = "MIT"
7LIC_FILES_CHKSUM = "file://${UNPACKDIR}/LICENSE;md5=497c556f42b1355b64190da2f3d88f93" 6LIC_FILES_CHKSUM = "file://${UNPACKDIR}/LICENSE;md5=497c556f42b1355b64190da2f3d88f93"
8 7
@@ -10,8 +9,9 @@ SRC_URI[sha256sum] = "f7f39c583fd92027bd9d06127b259aee7a5b7945c1f1fa56263811e1e7
10 9
11inherit pypi setuptools3 10inherit pypi setuptools3
12 11
13RDEPENDS:${PN} += "\ 12SRC_URI += "\
14 python3-setuptools \ 13 file://LICENSE \
15 " 14 file://0001-Drop-the-deprecated-pkg_resources.patch \
15"
16 16
17BBCLASSEXTEND = "native nativesdk" 17BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-tabulate_0.9.0.bb b/meta-python/recipes-devtools/python/python3-tabulate_0.10.0.bb
index 75e97355f5..909f47268f 100644
--- a/meta-python/recipes-devtools/python/python3-tabulate_0.9.0.bb
+++ b/meta-python/recipes-devtools/python/python3-tabulate_0.10.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/astanin/python-tabulate"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=6ad1430c0c4824ec6a5dbb9754b011d7" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=6ad1430c0c4824ec6a5dbb9754b011d7"
5 5
6SRC_URI[sha256sum] = "0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c" 6SRC_URI[sha256sum] = "e2cfde8f79420f6deeffdeda9aaec3b6bc5abce947655d17ac662b126e48a60d"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
diff --git a/meta-python/recipes-devtools/python/python3-telnetlib3_2.0.8.bb b/meta-python/recipes-devtools/python/python3-telnetlib3_2.0.8.bb
deleted file mode 100644
index 46f72b8f08..0000000000
--- a/meta-python/recipes-devtools/python/python3-telnetlib3_2.0.8.bb
+++ /dev/null
@@ -1,14 +0,0 @@
1SUMMARY = "Telnet server and client library based on asyncio"
2HOMEPAGE = "https://github.com/jquast/telnetlib3"
3LICENSE = "ISC"
4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b2cbfe1ec99d8830fa20d62c8f21d0e8"
5
6SRC_URI[sha256sum] = "08a2a7a3a6790f89617442b7d491da8b531d87706fffd6a33eeff57ac440b752"
7
8PYPI_PACKAGE = "telnetlib3"
9
10inherit pypi setuptools3
11
12RDEPENDS:${PN} = "\
13 python3-asyncio \
14"
diff --git a/meta-python/recipes-devtools/python/python3-telnetlib3_2.6.0.bb b/meta-python/recipes-devtools/python/python3-telnetlib3_2.6.0.bb
new file mode 100644
index 0000000000..bef533b39b
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-telnetlib3_2.6.0.bb
@@ -0,0 +1,15 @@
1SUMMARY = "Telnet server and client library based on asyncio"
2HOMEPAGE = "https://github.com/jquast/telnetlib3"
3LICENSE = "ISC"
4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=15abe157ad6f0b483975cc34bcc1aa99"
5
6SRC_URI[sha256sum] = "c231e790c626f5b6927a4a85e79bce18cde994c9424254d2193582b430972164"
7
8PYPI_PACKAGE = "telnetlib3"
9
10inherit pypi python_setuptools_build_meta python_hatchling
11
12RDEPENDS:${PN} = "\
13 python3-asyncio \
14 python3-wcwidth \
15"
diff --git a/meta-python/recipes-devtools/python/python3-tenacity_9.1.2.bb b/meta-python/recipes-devtools/python/python3-tenacity_9.1.4.bb
index 76d23aee40..5200c4c0b5 100644
--- a/meta-python/recipes-devtools/python/python3-tenacity_9.1.2.bb
+++ b/meta-python/recipes-devtools/python/python3-tenacity_9.1.4.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/jd/tenacity"
3LICENSE = "Apache-2.0" 3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e"
5 5
6SRC_URI[sha256sum] = "1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb" 6SRC_URI[sha256sum] = "adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a"
7 7
8SRC_URI:append = "file://0001-ptest-skip-a-test-that-does-not-pass-on-qemu.patch" 8SRC_URI:append = "file://0001-ptest-skip-a-test-that-does-not-pass-on-qemu.patch"
9 9
diff --git a/meta-python/recipes-devtools/python/python3-time-machine_3.2.0.bb b/meta-python/recipes-devtools/python/python3-time-machine_3.2.0.bb
new file mode 100644
index 0000000000..8e2fa51bb4
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-time-machine_3.2.0.bb
@@ -0,0 +1,28 @@
1SUMMARY = "Travel through time in your tests."
2HOMEPAGE = "https://github.com/adamchainz/time-machine"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=fb9b93a440d3ef2fb6eeebfa59384c53"
5
6SRCREV = "1b7ac45defb26c72076dc202aba46967c8c28fa9"
7PYPI_SRC_URI = "git://github.com/adamchainz/time-machine;protocol=https;branch=main;tag=${PV};destsuffix=time_machine-${PV}"
8
9inherit pypi python_setuptools_build_meta ptest-python-pytest
10
11PYPI_PACKAGE = "time_machine"
12UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
13
14RDEPENDS:${PN} += "\
15 python3-tzdata \
16 python3-unittest \
17 python3-zoneinfo \
18 "
19do_install_ptest:append() {
20 install -d ${D}${PTEST_PATH}/tests
21 cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
22}
23
24RDEPENDS:${PN}-ptest += "\
25 python3-dateutil \
26 python3-freezegun \
27 python3-tokenize-rt \
28"
diff --git a/meta-python/recipes-devtools/python/python3-tokenize-rt_6.2.0.bb b/meta-python/recipes-devtools/python/python3-tokenize-rt_6.2.0.bb
new file mode 100644
index 0000000000..0f5a1b34d3
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-tokenize-rt_6.2.0.bb
@@ -0,0 +1,21 @@
1SUMMARY = "A wrapper around the stdlib `tokenize` which roundtrips."
2HOMEPAGE = "https://github.com/asottile/tokenize-rt"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=5fd324061c581b8d45b8cb18c560a543"
5
6SRCREV = "1582bcf0259d183259da1761444c6fc73fa7ad9a"
7PYPI_SRC_URI = "git://github.com/asottile/tokenize-rt.git;protocol=https;branch=main;tag=v${PV};destsuffix=tokenize_rt-${PV}"
8
9inherit pypi setuptools3 ptest-python-pytest
10
11RDEPENDS:${PN} += "python3-core"
12
13PYPI_PACKAGE = "tokenize_rt"
14UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
15
16do_install_ptest:append() {
17 install -d ${D}${PTEST_PATH}/testing/resources
18 cp -rf ${S}/testing/resources/* ${D}${PTEST_PATH}/testing/resources/
19 install -d ${D}${PTEST_PATH}/tests
20 cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
21}
diff --git a/meta-python/recipes-devtools/python/python3-tomli_2.4.0.bb b/meta-python/recipes-devtools/python/python3-tomli_2.4.1.bb
index 310052072d..b95d208a82 100644
--- a/meta-python/recipes-devtools/python/python3-tomli_2.4.0.bb
+++ b/meta-python/recipes-devtools/python/python3-tomli_2.4.1.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=aaaaf0879d17df0110d1aa8c8c9f46f5"
8 8
9inherit pypi python_flit_core 9inherit pypi python_flit_core
10 10
11SRC_URI[sha256sum] = "aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c" 11SRC_URI[sha256sum] = "7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f"
12 12
13BBCLASSEXTEND = "native nativesdk" 13BBCLASSEXTEND = "native nativesdk"
14 14
diff --git a/meta-python/recipes-devtools/python/python3-toposort_1.10.bb b/meta-python/recipes-devtools/python/python3-toposort_1.10.bb
new file mode 100644
index 0000000000..ce903dcec3
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-toposort_1.10.bb
@@ -0,0 +1,10 @@
1SUMMARY = "Implements a topological sort algorithm"
2HOMEPAGE = "https://gitlab.com/ericvsmith/toposort"
3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
5
6SRC_URI[sha256sum] = "bfbb479c53d0a696ea7402601f4e693c97b0367837c8898bc6471adfca37a6bd"
7
8inherit pypi python_setuptools_build_meta
9
10BBCLASSEXTEND = "native"
diff --git a/meta-python/recipes-devtools/python/python3-tornado_6.5.4.bb b/meta-python/recipes-devtools/python/python3-tornado_6.5.5.bb
index 661ec039ce..fb9067c90e 100644
--- a/meta-python/recipes-devtools/python/python3-tornado_6.5.4.bb
+++ b/meta-python/recipes-devtools/python/python3-tornado_6.5.5.bb
@@ -6,7 +6,7 @@ HOMEPAGE = "https://www.tornadoweb.org/en/stable/"
6LICENSE = "Apache-2.0" 6LICENSE = "Apache-2.0"
7LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" 7LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
8 8
9SRC_URI[sha256sum] = "a22fa9047405d03260b483980635f0b041989d8bcc9a313f8fe18b411d84b1d7" 9SRC_URI[sha256sum] = "192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9"
10 10
11inherit pypi python_setuptools_build_meta 11inherit pypi python_setuptools_build_meta
12 12
diff --git a/meta-python/recipes-devtools/python/python3-tox_4.27.0.bb b/meta-python/recipes-devtools/python/python3-tox_4.52.1.bb
index 4deacdb3d9..dbac6deed8 100644
--- a/meta-python/recipes-devtools/python/python3-tox_4.27.0.bb
+++ b/meta-python/recipes-devtools/python/python3-tox_4.52.1.bb
@@ -6,13 +6,14 @@ HOMEPAGE = "https://tox.readthedocs.org/"
6LICENSE = "MIT" 6LICENSE = "MIT"
7LIC_FILES_CHKSUM = "file://LICENSE;md5=11610a9d8fd95649cf8159be12b98cb7" 7LIC_FILES_CHKSUM = "file://LICENSE;md5=11610a9d8fd95649cf8159be12b98cb7"
8 8
9SRC_URI[sha256sum] = "b97d5ecc0c0d5755bcc5348387fef793e1bfa68eb33746412f4c60881d7f5f57" 9SRC_URI[sha256sum] = "297e71ea0ae4ef3acc45cb5fdf080b74537e6ecb5eea7d4646fa7322ca10473e"
10 10
11BBCLASSEXTEND = "native nativesdk" 11BBCLASSEXTEND = "native nativesdk"
12inherit pypi python_hatchling 12inherit pypi python_hatchling
13 13
14DEPENDS += "\ 14DEPENDS += "\
15 python3-hatch-vcs-native \ 15 python3-hatch-vcs-native \
16 python3-docutils-native \
16" 17"
17 18
18RDEPENDS:${PN} += "\ 19RDEPENDS:${PN} += "\
diff --git a/meta-python/recipes-devtools/python/python3-tqdm_4.67.1.bb b/meta-python/recipes-devtools/python/python3-tqdm_4.67.3.bb
index b768ede830..1637021999 100644
--- a/meta-python/recipes-devtools/python/python3-tqdm_4.67.1.bb
+++ b/meta-python/recipes-devtools/python/python3-tqdm_4.67.3.bb
@@ -3,9 +3,9 @@ HOMEPAGE = "https://tqdm.github.io/"
3SECTION = "devel/python" 3SECTION = "devel/python"
4 4
5LICENSE = "MIT & MPL-2.0" 5LICENSE = "MIT & MPL-2.0"
6LIC_FILES_CHKSUM = "file://LICENCE;md5=42dfa9e8c616dbc295df3f58d756b2a1" 6LIC_FILES_CHKSUM = "file://LICENCE;md5=9a9bed097dea538bf341c8623c8f8852"
7 7
8SRC_URI[sha256sum] = "f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2" 8SRC_URI[sha256sum] = "7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb"
9 9
10CVE_PRODUCT = "tqdm" 10CVE_PRODUCT = "tqdm"
11 11
diff --git a/meta-python/recipes-devtools/python/python3-trio_0.32.0.bb b/meta-python/recipes-devtools/python/python3-trio_0.33.0.bb
index cc23d3070e..8bb4514649 100644
--- a/meta-python/recipes-devtools/python/python3-trio_0.32.0.bb
+++ b/meta-python/recipes-devtools/python/python3-trio_0.33.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=447ea202d14d2aee40d8a2c26c865da9 \
5 file://LICENSE.APACHE2;md5=3b83ef96387f14655fc854ddc3c6bd57 \ 5 file://LICENSE.APACHE2;md5=3b83ef96387f14655fc854ddc3c6bd57 \
6 file://LICENSE.MIT;md5=5f229c828e5a6f0a2ce90c7d3c054721" 6 file://LICENSE.MIT;md5=5f229c828e5a6f0a2ce90c7d3c054721"
7 7
8SRC_URI[sha256sum] = "150f29ec923bcd51231e1d4c71c7006e65247d68759dd1c19af4ea815a25806b" 8SRC_URI[sha256sum] = "a29b92b73f09d4b48ed249acd91073281a7f1063f09caba5dc70465b5c7aa970"
9 9
10inherit pypi python_setuptools_build_meta 10inherit pypi python_setuptools_build_meta
11 11
diff --git a/meta-python/recipes-devtools/python/python3-txdbus_1.1.2.bb b/meta-python/recipes-devtools/python/python3-txdbus_1.1.2.bb
index 01c069291c..ef6c248e80 100644
--- a/meta-python/recipes-devtools/python/python3-txdbus_1.1.2.bb
+++ b/meta-python/recipes-devtools/python/python3-txdbus_1.1.2.bb
@@ -8,4 +8,4 @@ SRC_URI[sha256sum] = "8375a5fb68a12054f0def91af800c821fb2232949337756ed975f88d8e
8 8
9inherit pypi setuptools3 9inherit pypi setuptools3
10 10
11RDEPENDS:${PN} += "python3-twisted-core" 11RDEPENDS:${PN} += "python3-twisted-core python3-six"
diff --git a/meta-python/recipes-devtools/python/python3-typeguard_4.4.4.bb b/meta-python/recipes-devtools/python/python3-typeguard_4.5.1.bb
index 812288881d..1c62e076cd 100644
--- a/meta-python/recipes-devtools/python/python3-typeguard_4.4.4.bb
+++ b/meta-python/recipes-devtools/python/python3-typeguard_4.5.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://pypi.org/project/typeguard/"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=f0e423eea5c91e7aa21bdb70184b3e53" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=f0e423eea5c91e7aa21bdb70184b3e53"
5 5
6SRC_URI[sha256sum] = "3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74" 6SRC_URI[sha256sum] = "f6f8ecbbc819c9bc749983cc67c02391e16a9b43b8b27f15dc70ed7c4a007274"
7 7
8inherit pypi python_setuptools_build_meta ptest-python-pytest 8inherit pypi python_setuptools_build_meta ptest-python-pytest
9 9
@@ -12,6 +12,7 @@ RDEPENDS:${PN} += " \
12 python3-compression \ 12 python3-compression \
13 python3-unittest \ 13 python3-unittest \
14 python3-typing-extensions \ 14 python3-typing-extensions \
15 python3-json \
15" 16"
16 17
17RDEPENDS:${PN}-ptest += " \ 18RDEPENDS:${PN}-ptest += " \
diff --git a/meta-python/recipes-devtools/python/python3-typer_0.21.1.bb b/meta-python/recipes-devtools/python/python3-typer_0.24.1.bb
index 0bf2c0ec4f..6538f16f0d 100644
--- a/meta-python/recipes-devtools/python/python3-typer_0.21.1.bb
+++ b/meta-python/recipes-devtools/python/python3-typer_0.24.1.bb
@@ -7,7 +7,7 @@ HOMEPAGE = "https://github.com/fastapi/typer"
7LICENSE = "MIT" 7LICENSE = "MIT"
8LIC_FILES_CHKSUM = "file://LICENSE;md5=173d405eb704b1499218013178722617" 8LIC_FILES_CHKSUM = "file://LICENSE;md5=173d405eb704b1499218013178722617"
9 9
10SRC_URI[sha256sum] = "ea835607cd752343b6b2b7ce676893e5a0324082268b48f27aa058bdb7d2145d" 10SRC_URI[sha256sum] = "e39b4732d65fbdcde189ae76cf7cd48aeae72919dea1fdfc16593be016256b45"
11 11
12inherit pypi python_pdm ptest 12inherit pypi python_pdm ptest
13 13
diff --git a/meta-python/recipes-devtools/python/python3-types-psutil_7.2.1.20251231.bb b/meta-python/recipes-devtools/python/python3-types-psutil_7.2.2.20260408.bb
index 90325c4db1..88fff6c83d 100644
--- a/meta-python/recipes-devtools/python/python3-types-psutil_7.2.1.20251231.bb
+++ b/meta-python/recipes-devtools/python/python3-types-psutil_7.2.2.20260408.bb
@@ -8,7 +8,7 @@ UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
8 8
9inherit pypi python_setuptools_build_meta 9inherit pypi python_setuptools_build_meta
10 10
11SRC_URI[sha256sum] = "dbf9df530b1130e131e4211ed8cea62c08007bfa69faf2883d296bd241d30e4a" 11SRC_URI[sha256sum] = "e8053450685965b8cd52afb62569073d00ea9967ae78bb45dff5f606847f97f2"
12 12
13BBCLASSEXTEND = "native" 13BBCLASSEXTEND = "native"
14 14
diff --git a/meta-python/recipes-devtools/python/python3-tzdata_2025.3.bb b/meta-python/recipes-devtools/python/python3-tzdata_2026.1.bb
index 1c313ea223..9a66460e76 100644
--- a/meta-python/recipes-devtools/python/python3-tzdata_2025.3.bb
+++ b/meta-python/recipes-devtools/python/python3-tzdata_2026.1.bb
@@ -4,7 +4,7 @@ LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=fca9fd5c15a28eb874ba38577a585d48 \ 4LIC_FILES_CHKSUM = "file://LICENSE;md5=fca9fd5c15a28eb874ba38577a585d48 \
5 file://licenses/LICENSE_APACHE;md5=86d3f3a95c324c9479bd8986968f4327" 5 file://licenses/LICENSE_APACHE;md5=86d3f3a95c324c9479bd8986968f4327"
6 6
7SRC_URI[sha256sum] = "de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7" 7SRC_URI[sha256sum] = "67658a1903c75917309e753fdc349ac0efd8c27db7a0cb406a25be4840f87f98"
8 8
9inherit pypi python_setuptools_build_meta ptest-python-pytest 9inherit pypi python_setuptools_build_meta ptest-python-pytest
10 10
diff --git a/meta-python/recipes-devtools/python/python3-uefi-firmware_1.12.bb b/meta-python/recipes-devtools/python/python3-uefi-firmware_1.13.bb
index 09732fc865..7fe92e31f2 100644
--- a/meta-python/recipes-devtools/python/python3-uefi-firmware_1.12.bb
+++ b/meta-python/recipes-devtools/python/python3-uefi-firmware_1.13.bb
@@ -7,10 +7,9 @@ HOMEPAGE = "https://github.com/theopolis/uefi-firmware-parser"
7LICENSE = "BSD-2-Clause & BSD-3-Clause" 7LICENSE = "BSD-2-Clause & BSD-3-Clause"
8LIC_FILES_CHKSUM = "file://setup.py;md5=5a59066a8676f17262ef7e691f8ef253" 8LIC_FILES_CHKSUM = "file://setup.py;md5=5a59066a8676f17262ef7e691f8ef253"
9 9
10SRC_URI = "git://github.com/theopolis/uefi-firmware-parser;protocol=https;branch=master" 10SRC_URI = "git://github.com/theopolis/uefi-firmware-parser;protocol=https;branch=master;tag=v${PV}"
11
12SRCREV = "0c5fb74bcecc0e5c80625c38130fe948c2a3656e"
13 11
12SRCREV = "6d7cf5f0672c577028462ec175fec9fda95cc5f0"
14 13
15inherit setuptools3 14inherit setuptools3
16 15
diff --git a/meta-python/recipes-devtools/python/python3-ujson_5.11.0.bb b/meta-python/recipes-devtools/python/python3-ujson_5.12.0.bb
index 95199de839..14b8049f3d 100644
--- a/meta-python/recipes-devtools/python/python3-ujson_5.11.0.bb
+++ b/meta-python/recipes-devtools/python/python3-ujson_5.12.0.bb
@@ -1,10 +1,10 @@
1SUMMARY = "Ultra fast JSON encoder and decoder for Python" 1SUMMARY = "Ultra fast JSON encoder and decoder for Python"
2DESCRIPTION = "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with bindings for Python 2.5+ and 3." 2DESCRIPTION = "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with bindings for Python 2.5+ and 3."
3 3
4LICENSE = "BSD-3-Clause" 4LICENSE = "BSD-3-Clause & TCL"
5LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=1e3768cfe2662fa77c49c9c2d3804d87" 5LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=1e3768cfe2662fa77c49c9c2d3804d87"
6 6
7SRC_URI[sha256sum] = "e204ae6f909f099ba6b6b942131cee359ddda2b6e4ea39c12eb8b991fe2010e0" 7SRC_URI[sha256sum] = "14b2e1eb528d77bc0f4c5bd1a7ebc05e02b5b41beefb7e8567c9675b8b13bcf4"
8 8
9inherit pypi ptest-python-pytest python_setuptools_build_meta 9inherit pypi ptest-python-pytest python_setuptools_build_meta
10 10
diff --git a/meta-python/recipes-devtools/python/python3-ukkonen_git.bb b/meta-python/recipes-devtools/python/python3-ukkonen_1.1.0.bb
index b9e85e78be..8fc5af1ef7 100644
--- a/meta-python/recipes-devtools/python/python3-ukkonen_git.bb
+++ b/meta-python/recipes-devtools/python/python3-ukkonen_1.1.0.bb
@@ -6,9 +6,8 @@ PYPI_PACKAGE = "ukkonen"
6 6
7inherit setuptools3 7inherit setuptools3
8 8
9PV = "1.0.1+git" 9SRC_URI += "git://github.com/asottile/ukkonen;protocol=https;branch=main;tag=v${PV}"
10SRC_URI += "git://github.com/asottile/ukkonen;protocol=https;branch=main" 10SRCREV = "5fa9858f0997927d9f9c1794e1741fe8dbd4c1e8"
11SRCREV = "ad108a16e8203867f4860287b61149e0bdd838ca"
12DEPENDS += " \ 11DEPENDS += " \
13 python3-pip-native \ 12 python3-pip-native \
14 python3-cffi-native \ 13 python3-cffi-native \
diff --git a/meta-python/recipes-devtools/python/python3-uswid_0.5.2.bb b/meta-python/recipes-devtools/python/python3-uswid_0.6.0.bb
index 3e6ec88a8e..e5ee5166f0 100644
--- a/meta-python/recipes-devtools/python/python3-uswid_0.5.2.bb
+++ b/meta-python/recipes-devtools/python/python3-uswid_0.6.0.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
4LICENSE = "BSD-2-Clause-Patent" 4LICENSE = "BSD-2-Clause-Patent"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=f3636dfe71e94cc72918423cec0d1971" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=f3636dfe71e94cc72918423cec0d1971"
6 6
7SRC_URI[sha256sum] = "1d6c53acf160edc9b42e4ba535343b3567f2f341d289b9e63ca6a84372c2c518" 7SRC_URI[sha256sum] = "98b04b2750aa7ca97fc83c65cb24808174c3cd5f7e99d96727161034963137bf"
8 8
9inherit setuptools3 python3native pypi 9inherit setuptools3 python3native pypi
10 10
diff --git a/meta-python/recipes-devtools/python/python3-uvicorn_0.40.0.bb b/meta-python/recipes-devtools/python/python3-uvicorn_0.44.0.bb
index 227202b8cc..ce92c96d8d 100644
--- a/meta-python/recipes-devtools/python/python3-uvicorn_0.40.0.bb
+++ b/meta-python/recipes-devtools/python/python3-uvicorn_0.44.0.bb
@@ -4,7 +4,7 @@ LICENSE = "BSD-3-Clause"
4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=5c778842f66a649636561c423c0eec2e" 4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=5c778842f66a649636561c423c0eec2e"
5RECIPE_MAINTAINER = "Tom Geelen <t.f.g.geelen@gmail.com>" 5RECIPE_MAINTAINER = "Tom Geelen <t.f.g.geelen@gmail.com>"
6 6
7SRC_URI[sha256sum] = "839676675e87e73694518b5574fd0f24c9d97b46bea16df7b8c05ea1a51071ea" 7SRC_URI[sha256sum] = "6c942071b68f07e178264b9152f1f16dfac5da85880c4ce06366a96d70d4f31e"
8 8
9SRC_URI += "file://0001-ptest-disable-failing-tests.patch" 9SRC_URI += "file://0001-ptest-disable-failing-tests.patch"
10 10
diff --git a/meta-python/recipes-devtools/python/python3-vector_1.7.0.bb b/meta-python/recipes-devtools/python/python3-vector_1.8.0.bb
index bb1e7eeed9..67312c4423 100644
--- a/meta-python/recipes-devtools/python/python3-vector_1.7.0.bb
+++ b/meta-python/recipes-devtools/python/python3-vector_1.8.0.bb
@@ -8,11 +8,11 @@ HOMEPAGE = "https://github.com/scikit-hep/vector"
8BUGTRACKER = "https://github.com/scikit-hep/vector/issues" 8BUGTRACKER = "https://github.com/scikit-hep/vector/issues"
9SECTION = "devel/python" 9SECTION = "devel/python"
10LICENSE = "BSD-3-Clause" 10LICENSE = "BSD-3-Clause"
11LIC_FILES_CHKSUM = "file://LICENSE;md5=2963f0dc7a24919505850460dd1a785b" 11LIC_FILES_CHKSUM = "file://LICENSE;md5=b9f683a957276148387db50971a7b3ef"
12 12
13DEPENDS += "python3-hatch-vcs-native" 13DEPENDS += "python3-hatch-vcs-native"
14 14
15SRC_URI[sha256sum] = "8b05ea2953322c74c49d2af180f7eac73ad0aa3d4c391cab896175ec4fa3d642" 15SRC_URI[sha256sum] = "58f95e9e24463851ca34176a20df2fd2e80b41d78615e5b1f7ae4bf313424ca6"
16 16
17inherit pypi python_hatchling 17inherit pypi python_hatchling
18 18
diff --git a/meta-python/recipes-devtools/python/python3-virtualenv_20.36.1.bb b/meta-python/recipes-devtools/python/python3-virtualenv_21.2.1.bb
index d5fad314fd..3ff03e43c7 100644
--- a/meta-python/recipes-devtools/python/python3-virtualenv_20.36.1.bb
+++ b/meta-python/recipes-devtools/python/python3-virtualenv_21.2.1.bb
@@ -6,7 +6,7 @@ HOMEPAGE = "https://github.com/pypa/virtualenv"
6LICENSE = "MIT" 6LICENSE = "MIT"
7LIC_FILES_CHKSUM = "file://LICENSE;md5=0ce089158cf60a8ab6abb452b6405538" 7LIC_FILES_CHKSUM = "file://LICENSE;md5=0ce089158cf60a8ab6abb452b6405538"
8 8
9SRC_URI[sha256sum] = "8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba" 9SRC_URI[sha256sum] = "b66ffe81301766c0d5e2208fc3576652c59d44e7b731fc5f5ed701c9b537fa78"
10 10
11BBCLASSEXTEND = "native nativesdk" 11BBCLASSEXTEND = "native nativesdk"
12inherit pypi python_hatchling 12inherit pypi python_hatchling
diff --git a/meta-python/recipes-devtools/python/python3-websocket-client_1.7.0.bb b/meta-python/recipes-devtools/python/python3-websocket-client_1.9.0.bb
index fc73f1b0a5..87f25db0fc 100644
--- a/meta-python/recipes-devtools/python/python3-websocket-client_1.7.0.bb
+++ b/meta-python/recipes-devtools/python/python3-websocket-client_1.9.0.bb
@@ -5,9 +5,11 @@ This provide the low level APIs for WebSocket. All APIs \
5are the synchronous functions." 5are the synchronous functions."
6HOMEPAGE = "https://github.com/websocket-client/websocket-client" 6HOMEPAGE = "https://github.com/websocket-client/websocket-client"
7LICENSE = "Apache-2.0" 7LICENSE = "Apache-2.0"
8LIC_FILES_CHKSUM = "file://LICENSE;md5=6eae3bb7247ccb2c3a087ea8de759c01" 8LIC_FILES_CHKSUM = "file://LICENSE;md5=b8d4a5e03977c68fad62beee8185704e"
9 9
10SRC_URI[sha256sum] = "10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6" 10SRC_URI[sha256sum] = "9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98"
11
12PYPI_PACKAGE = "websocket_client"
11 13
12inherit pypi setuptools3 14inherit pypi setuptools3
13 15
diff --git a/meta-python/recipes-devtools/python/python3-werkzeug_3.1.5.bb b/meta-python/recipes-devtools/python/python3-werkzeug_3.1.8.bb
index 1df88b78d0..4e1be5cb2f 100644
--- a/meta-python/recipes-devtools/python/python3-werkzeug_3.1.5.bb
+++ b/meta-python/recipes-devtools/python/python3-werkzeug_3.1.8.bb
@@ -10,7 +10,7 @@ HOMEPAGE = "https://werkzeug.palletsprojects.com"
10LICENSE = "BSD-3-Clause" 10LICENSE = "BSD-3-Clause"
11LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=5dc88300786f1c214c1e9827a5229462" 11LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=5dc88300786f1c214c1e9827a5229462"
12 12
13SRC_URI[sha256sum] = "6a548b0e88955dd07ccb25539d7d0cc97417ee9e179677d22c7041c8f078ce67" 13SRC_URI[sha256sum] = "9bad61a4268dac112f1c5cd4630a56ede601b6ed420300677a869083d70a4c44"
14 14
15CVE_PRODUCT = "werkzeug" 15CVE_PRODUCT = "werkzeug"
16 16
diff --git a/meta-python/recipes-devtools/python/python3-wheezy-template_3.2.5.bb b/meta-python/recipes-devtools/python/python3-wheezy-template_3.2.5.bb
new file mode 100644
index 0000000000..a2125a0a0c
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-wheezy-template_3.2.5.bb
@@ -0,0 +1,13 @@
1SUMMARY = "a lightweight template library"
2HOMEPAGE = "https://github.com/akornatskyy/wheezy.template"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=fa10554c46b94944529c6a886cf85631"
5
6PYPI_PACKAGE = "wheezy_template"
7UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
8
9SRC_URI[sha256sum] = "c7c0bf85af0f70ca2ef4b6ea9a74ef372f73392aa17bea0d885dcba7356d0867"
10
11inherit pypi python_setuptools_build_meta
12
13BBCLASSEXTEND = "native"
diff --git a/meta-python/recipes-devtools/python/python3-whitenoise_6.11.0.bb b/meta-python/recipes-devtools/python/python3-whitenoise_6.12.0.bb
index 142c10aa83..dd8f189f98 100644
--- a/meta-python/recipes-devtools/python/python3-whitenoise_6.11.0.bb
+++ b/meta-python/recipes-devtools/python/python3-whitenoise_6.12.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=aba4901cc64e401cea5a267eac2a2e1e"
5 5
6PYPI_PACKAGE = "whitenoise" 6PYPI_PACKAGE = "whitenoise"
7 7
8SRC_URI[sha256sum] = "0f5bfce6061ae6611cd9396a8231e088722e4fc67bc13a111be74c738d99375f" 8SRC_URI[sha256sum] = "f723ebb76a112e98816ff80fcea0a6c9b8ecde835f8ddda25df7a30a3c2db6ad"
9 9
10inherit pypi python_setuptools_build_meta 10inherit pypi python_setuptools_build_meta
11 11
diff --git a/meta-python/recipes-devtools/python/python3-wrapt_2.0.1.bb b/meta-python/recipes-devtools/python/python3-wrapt_2.1.2.bb
index e2cdc960ef..ee57717a5c 100644
--- a/meta-python/recipes-devtools/python/python3-wrapt_2.0.1.bb
+++ b/meta-python/recipes-devtools/python/python3-wrapt_2.1.2.bb
@@ -2,18 +2,18 @@ SUMMARY = "A Python module for decorators, wrappers and monkey patching."
2HOMEPAGE = "https://wrapt.readthedocs.org/" 2HOMEPAGE = "https://wrapt.readthedocs.org/"
3LICENSE = "BSD-2-Clause" 3LICENSE = "BSD-2-Clause"
4SECTION = "devel/python" 4SECTION = "devel/python"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=945f689eb1f8c581bb9d635baba5abb5" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=63a78af2900bfcc5ce482f3b8d445898"
6 6
7inherit pypi python_setuptools_build_meta ptest-python-pytest 7inherit pypi python_setuptools_build_meta ptest-python-pytest
8 8
9SRC_URI[sha256sum] = "9c9c635e78497cacb81e84f8b11b23e0aacac7a136e73b8e5b2109a1d9fc468f" 9SRC_URI[sha256sum] = "3996a67eecc2c68fd47b4e3c564405a5777367adfd9b8abb58387b63ee83b21e"
10 10
11# python3-misc for 'this' module 11# python3-misc for 'this' module
12RDEPENDS:${PN}-ptest += " \ 12RDEPENDS:${PN}-ptest += " \
13 python3-misc \ 13 python3-misc \
14" 14"
15 15
16RDEPENDS:${PN}:class-target += "\ 16RDEPENDS:${PN}:append:class-target = " \
17 python3-stringold \ 17 python3-stringold \
18 python3-threading \ 18 python3-threading \
19" 19"
diff --git a/meta-python/recipes-devtools/python/python3-wsproto_1.2.0.bb b/meta-python/recipes-devtools/python/python3-wsproto_1.3.2.bb
index 4aac092fbe..3a9b18b7af 100644
--- a/meta-python/recipes-devtools/python/python3-wsproto_1.2.0.bb
+++ b/meta-python/recipes-devtools/python/python3-wsproto_1.3.2.bb
@@ -3,11 +3,11 @@ HOMEPAGE = "https://github.com/python-hyper/wsproto/"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=69fabf732409f4ac61875827b258caaf" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=69fabf732409f4ac61875827b258caaf"
5 5
6inherit pypi setuptools3 ptest-python-pytest 6inherit pypi python_setuptools_build_meta ptest-python-pytest
7 7
8PTEST_PYTEST_DIR = "test" 8PTEST_PYTEST_DIR = "test"
9 9
10SRC_URI[sha256sum] = "ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065" 10SRC_URI[sha256sum] = "b86885dcf294e15204919950f666e06ffc6c7c114ca900b060d6e16293528294"
11 11
12RDEPENDS:${PN} += " \ 12RDEPENDS:${PN} += " \
13 python3-h11 \ 13 python3-h11 \
diff --git a/meta-python/recipes-devtools/python/python3-xmlschema_4.3.0.bb b/meta-python/recipes-devtools/python/python3-xmlschema_4.3.1.bb
index 86554f087f..a2f4070079 100644
--- a/meta-python/recipes-devtools/python/python3-xmlschema_4.3.0.bb
+++ b/meta-python/recipes-devtools/python/python3-xmlschema_4.3.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/sissaschool/xmlschema"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=385fddea479acdec12ab77a938f68cd9" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=385fddea479acdec12ab77a938f68cd9"
5 5
6SRC_URI[sha256sum] = "174c531dd869cd29bf2d1203603d9e619bddf168d6289725738914c96c80936e" 6SRC_URI[sha256sum] = "853effdfaf127849d4724368c17bd669e7f1486e15a0376404ad7954ec31a338"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9 9
diff --git a/meta-python/recipes-devtools/python/python3-xmodem_0.4.7.bb b/meta-python/recipes-devtools/python/python3-xmodem_0.5.0.bb
index e41afb56c0..55305c6cb9 100644
--- a/meta-python/recipes-devtools/python/python3-xmodem_0.4.7.bb
+++ b/meta-python/recipes-devtools/python/python3-xmodem_0.5.0.bb
@@ -3,9 +3,9 @@ DESCRIPTION = "XMODEM protocol implementation"
3LICENSE = "MIT" 3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=90bc9522130d68de0dcbf33707bbf124" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=90bc9522130d68de0dcbf33707bbf124"
5 5
6SRC_URI[sha256sum] = "2f1068aa8676f0d1d112498b5786c4f8ea4f89d8f25d07d3a0f293cd21db1c35" 6SRC_URI[sha256sum] = "a1a818f31c29412f1cab0cd69deccd7be77bc1feb516723af990d00161f6fb6a"
7 7
8inherit pypi setuptools3 8inherit pypi python_setuptools_build_meta
9 9
10do_install:append() { 10do_install:append() {
11 install -d ${D}${docdir}/${PN} 11 install -d ${D}${docdir}/${PN}
diff --git a/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_6.2.1.1.bb b/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_6.2.1.2.bb
index 0562cc2671..6231125237 100644
--- a/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_6.2.1.1.bb
+++ b/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_6.2.1.2.bb
@@ -1,13 +1,13 @@
1DESCRIPTION = "Font Awesome icons packaged for setuptools (easy_install) / pip." 1DESCRIPTION = "Font Awesome icons packaged for setuptools (easy_install) / pip."
2HOMEPAGE = "https://pypi.python.org/pypi/XStatic-Font-Awesome" 2HOMEPAGE = "https://pypi.python.org/pypi/XStatic-Font-Awesome"
3SECTION = "devel/python" 3SECTION = "devel/python"
4LICENSE = "Apache-2.0" 4LICENSE = "OFL-1.0 & MIT & CC-BY-4.0"
5LIC_FILES_CHKSUM = "file://PKG-INFO;md5=f1a2fe131dcb2fc6243c26cf05ecdb36" 5LIC_FILES_CHKSUM = "file://xstatic/pkg/font_awesome/data/LICENSE.txt;md5=57f9201afe70f877988912a7b233de47"
6 6
7PYPI_PACKAGE = "XStatic-Font-Awesome" 7PYPI_PACKAGE = "xstatic_font_awesome"
8UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 8UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
9 9
10SRC_URI[sha256sum] = "f075871096128638f2e1539020d8227754c3d885dd68e7ee6de9a01235076828" 10SRC_URI[sha256sum] = "9f3cb2f038fad7d352722375d3f25af346da9ee093ed9dc2c8c46bd911ab1971"
11 11
12DEPENDS += " \ 12DEPENDS += " \
13 python3-xstatic \ 13 python3-xstatic \
diff --git a/meta-python/recipes-devtools/python/python3-xstatic_1.0.3.bb b/meta-python/recipes-devtools/python/python3-xstatic_1.0.3.bb
index f4a75c9b6c..bf542aba5a 100644
--- a/meta-python/recipes-devtools/python/python3-xstatic_1.0.3.bb
+++ b/meta-python/recipes-devtools/python/python3-xstatic_1.0.3.bb
@@ -7,6 +7,7 @@ LIC_FILES_CHKSUM = "file://README.txt;md5=1418684272f85f400cebf1b1a255c5cd"
7PYPI_PACKAGE = "XStatic" 7PYPI_PACKAGE = "XStatic"
8UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 8UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
9 9
10SRC_URI += "file://0001-remove-pkg_resources-import.patch"
10SRC_URI[sha256sum] = "402544cc9e179489441054f09c807804e115ea246907de87c0355fb4f5a31268" 11SRC_URI[sha256sum] = "402544cc9e179489441054f09c807804e115ea246907de87c0355fb4f5a31268"
11 12
12DEPENDS += " \ 13DEPENDS += " \
diff --git a/meta-python/recipes-devtools/python/python3-yamlloader_1.6.0.bb b/meta-python/recipes-devtools/python/python3-yamlloader_1.6.0.bb
index 4844e10de1..281c73eec4 100644
--- a/meta-python/recipes-devtools/python/python3-yamlloader_1.6.0.bb
+++ b/meta-python/recipes-devtools/python/python3-yamlloader_1.6.0.bb
@@ -11,6 +11,6 @@ DEPENDS += "\
11 python3-hatch-vcs-native \ 11 python3-hatch-vcs-native \
12" 12"
13 13
14RDEPENDS:${PN}:class-target += "\ 14RDEPENDS:${PN}:append:class-target = " \
15 python3-pyyaml \ 15 python3-pyyaml \
16" 16"
diff --git a/meta-python/recipes-devtools/python/python3-yappi/0001-test_functionality-convert-line-endings-to-Unix.patch b/meta-python/recipes-devtools/python/python3-yappi/0001-test_functionality-convert-line-endings-to-Unix.patch
deleted file mode 100644
index 70d4607c29..0000000000
--- a/meta-python/recipes-devtools/python/python3-yappi/0001-test_functionality-convert-line-endings-to-Unix.patch
+++ /dev/null
@@ -1,3845 +0,0 @@
1From 0136ca731cba8b056b3f2ff0e7df3953b94f1e87 Mon Sep 17 00:00:00 2001
2From: Tim Orling <tim.orling@konsulko.com>
3Date: Sun, 24 Dec 2023 09:41:57 -0800
4Subject: [PATCH 1/2] test_functionality: convert line endings to Unix
5
6Convert the Windows line endings with dos2unix to be like the
7other files in tests/*
8
9Upstream-Status: Submitted [https://github.com/sumerc/yappi/pull/164]
10
11Signed-off-by: Tim Orling <tim.orling@konsulko.com>
12---
13 tests/test_functionality.py | 3822 +++++++++++++++++------------------
14 1 file changed, 1911 insertions(+), 1911 deletions(-)
15
16diff --git a/tests/test_functionality.py b/tests/test_functionality.py
17index 0e99c47..38bbe67 100644
18--- a/tests/test_functionality.py
19+++ b/tests/test_functionality.py
20@@ -1,1911 +1,1911 @@
21-import os
22-import sys
23-import time
24-import threading
25-import unittest
26-import yappi
27-import _yappi
28-import utils
29-import multiprocessing
30-import subprocess
31-
32-_counter = 0
33-
34-
35-class BasicUsage(utils.YappiUnitTestCase):
36-
37- def test_callback_function_int_return_overflow(self):
38- # this test is just here to check if any errors are generated, as the err
39- # is printed in C side, I did not include it here. THere are ways to test
40- # this deterministically, I did not bother
41- import ctypes
42-
43- def _unsigned_overflow_margin():
44- return 2**(ctypes.sizeof(ctypes.c_void_p) * 8) - 1
45-
46- def foo():
47- pass
48-
49- #with utils.captured_output() as (out, err):
50- yappi.set_context_id_callback(_unsigned_overflow_margin)
51- yappi.set_tag_callback(_unsigned_overflow_margin)
52- yappi.start()
53- foo()
54-
55- def test_issue60(self):
56-
57- def foo():
58- buf = bytearray()
59- buf += b't' * 200
60- view = memoryview(buf)[10:]
61- view = view.tobytes()
62- del buf[:10] # this throws exception
63- return view
64-
65- yappi.start(builtins=True)
66- foo()
67- self.assertTrue(
68- len(
69- yappi.get_func_stats(
70- filter_callback=lambda x: yappi.
71- func_matches(x, [memoryview.tobytes])
72- )
73- ) > 0
74- )
75- yappi.stop()
76-
77- def test_issue54(self):
78-
79- def _tag_cbk():
80- global _counter
81- _counter += 1
82- return _counter
83-
84- def a():
85- pass
86-
87- def b():
88- pass
89-
90- yappi.set_tag_callback(_tag_cbk)
91- yappi.start()
92- a()
93- a()
94- a()
95- yappi.stop()
96- stats = yappi.get_func_stats()
97- self.assertEqual(stats.pop().ncall, 3) # aggregated if no tag is given
98- stats = yappi.get_func_stats(tag=1)
99-
100- for i in range(1, 3):
101- stats = yappi.get_func_stats(tag=i)
102- stats = yappi.get_func_stats(
103- tag=i, filter_callback=lambda x: yappi.func_matches(x, [a])
104- )
105-
106- stat = stats.pop()
107- self.assertEqual(stat.ncall, 1)
108-
109- yappi.set_tag_callback(None)
110- yappi.clear_stats()
111- yappi.start()
112- b()
113- b()
114- stats = yappi.get_func_stats()
115- self.assertEqual(len(stats), 1)
116- stat = stats.pop()
117- self.assertEqual(stat.ncall, 2)
118-
119- def test_filter(self):
120-
121- def a():
122- pass
123-
124- def b():
125- a()
126-
127- def c():
128- b()
129-
130- _TCOUNT = 5
131-
132- ts = []
133- yappi.start()
134- for i in range(_TCOUNT):
135- t = threading.Thread(target=c)
136- t.start()
137- ts.append(t)
138-
139- for t in ts:
140- t.join()
141-
142- yappi.stop()
143-
144- ctx_ids = []
145- for tstat in yappi.get_thread_stats():
146- if tstat.name == '_MainThread':
147- main_ctx_id = tstat.id
148- else:
149- ctx_ids.append(tstat.id)
150-
151- fstats = yappi.get_func_stats(filter={"ctx_id": 9})
152- self.assertTrue(fstats.empty())
153- fstats = yappi.get_func_stats(
154- filter={
155- "ctx_id": main_ctx_id,
156- "name": "c"
157- }
158- ) # main thread
159- self.assertTrue(fstats.empty())
160-
161- for i in ctx_ids:
162- fstats = yappi.get_func_stats(
163- filter={
164- "ctx_id": i,
165- "name": "a",
166- "ncall": 1
167- }
168- )
169- self.assertEqual(fstats.pop().ncall, 1)
170- fstats = yappi.get_func_stats(filter={"ctx_id": i, "name": "b"})
171- self.assertEqual(fstats.pop().ncall, 1)
172- fstats = yappi.get_func_stats(filter={"ctx_id": i, "name": "c"})
173- self.assertEqual(fstats.pop().ncall, 1)
174-
175- yappi.clear_stats()
176- yappi.start(builtins=True)
177- time.sleep(0.1)
178- yappi.stop()
179- fstats = yappi.get_func_stats(filter={"module": "time"})
180- self.assertEqual(len(fstats), 1)
181-
182- # invalid filters`
183- self.assertRaises(
184- Exception, yappi.get_func_stats, filter={'tag': "sss"}
185- )
186- self.assertRaises(
187- Exception, yappi.get_func_stats, filter={'ctx_id': "None"}
188- )
189-
190- def test_filter_callback(self):
191-
192- def a():
193- time.sleep(0.1)
194-
195- def b():
196- a()
197-
198- def c():
199- pass
200-
201- def d():
202- pass
203-
204- yappi.set_clock_type("wall")
205- yappi.start(builtins=True)
206- a()
207- b()
208- c()
209- d()
210- stats = yappi.get_func_stats(
211- filter_callback=lambda x: yappi.func_matches(x, [a, b])
212- )
213- #stats.print_all()
214- r1 = '''
215- tests/test_functionality.py:98 a 2 0.000000 0.200350 0.100175
216- tests/test_functionality.py:101 b 1 0.000000 0.120000 0.100197
217- '''
218- self.assert_traces_almost_equal(r1, stats)
219- self.assertEqual(len(stats), 2)
220- stats = yappi.get_func_stats(
221- filter_callback=lambda x: yappi.
222- module_matches(x, [sys.modules[__name__]])
223- )
224- r1 = '''
225- tests/test_functionality.py:98 a 2 0.000000 0.230130 0.115065
226- tests/test_functionality.py:101 b 1 0.000000 0.120000 0.109011
227- tests/test_functionality.py:104 c 1 0.000000 0.000002 0.000002
228- tests/test_functionality.py:107 d 1 0.000000 0.000001 0.000001
229- '''
230- self.assert_traces_almost_equal(r1, stats)
231- self.assertEqual(len(stats), 4)
232-
233- stats = yappi.get_func_stats(
234- filter_callback=lambda x: yappi.func_matches(x, [time.sleep])
235- )
236- self.assertEqual(len(stats), 1)
237- r1 = '''
238- time.sleep 2 0.206804 0.220000 0.103402
239- '''
240- self.assert_traces_almost_equal(r1, stats)
241-
242- def test_print_formatting(self):
243-
244- def a():
245- pass
246-
247- def b():
248- a()
249-
250- func_cols = {
251- 1: ("name", 48),
252- 0: ("ncall", 5),
253- 2: ("tsub", 8),
254- }
255- thread_cols = {
256- 1: ("name", 48),
257- 0: ("ttot", 8),
258- }
259-
260- yappi.start()
261- a()
262- b()
263- yappi.stop()
264- fs = yappi.get_func_stats()
265- cs = fs[1].children
266- ts = yappi.get_thread_stats()
267- #fs.print_all(out=sys.stderr, columns={1:("name", 70), })
268- #cs.print_all(out=sys.stderr, columns=func_cols)
269- #ts.print_all(out=sys.stderr, columns=thread_cols)
270- #cs.print_all(out=sys.stderr, columns={})
271-
272- self.assertRaises(
273- yappi.YappiError, fs.print_all, columns={1: ("namee", 9)}
274- )
275- self.assertRaises(
276- yappi.YappiError, cs.print_all, columns={1: ("dd", 0)}
277- )
278- self.assertRaises(
279- yappi.YappiError, ts.print_all, columns={1: ("tidd", 0)}
280- )
281-
282- def test_get_clock(self):
283- yappi.set_clock_type('cpu')
284- self.assertEqual('cpu', yappi.get_clock_type())
285- clock_info = yappi.get_clock_info()
286- self.assertTrue('api' in clock_info)
287- self.assertTrue('resolution' in clock_info)
288-
289- yappi.set_clock_type('wall')
290- self.assertEqual('wall', yappi.get_clock_type())
291-
292- t0 = yappi.get_clock_time()
293- time.sleep(0.1)
294- duration = yappi.get_clock_time() - t0
295- self.assertTrue(0.05 < duration < 0.3)
296-
297- def test_profile_decorator(self):
298-
299- def aggregate(func, stats):
300- fname = f"tests/{func.__name__}.profile"
301- try:
302- stats.add(fname)
303- except OSError:
304- pass
305- stats.save(fname)
306- raise Exception("messing around")
307-
308- @yappi.profile(return_callback=aggregate)
309- def a(x, y):
310- if x + y == 25:
311- raise Exception("")
312- return x + y
313-
314- def b():
315- pass
316-
317- try:
318- os.remove(
319- "tests/a.profile"
320- ) # remove the one from prev test, if available
321- except:
322- pass
323-
324- # global profile is on to mess things up
325- yappi.start()
326- b()
327-
328- # assert functionality and call function at same time
329- try:
330- self.assertEqual(a(1, 2), 3)
331- except:
332- pass
333- try:
334- self.assertEqual(a(2, 5), 7)
335- except:
336- pass
337- try:
338- a(4, 21)
339- except:
340- pass
341- stats = yappi.get_func_stats().add("tests/a.profile")
342- fsa = utils.find_stat_by_name(stats, 'a')
343- self.assertEqual(fsa.ncall, 3)
344- self.assertEqual(len(stats), 1) # b() should be cleared out.
345-
346- @yappi.profile(return_callback=aggregate)
347- def count_down_rec(n):
348- if n == 0:
349- return
350- count_down_rec(n - 1)
351-
352- try:
353- os.remove(
354- "tests/count_down_rec.profile"
355- ) # remove the one from prev test, if available
356- except:
357- pass
358-
359- try:
360- count_down_rec(4)
361- except:
362- pass
363- try:
364- count_down_rec(3)
365- except:
366- pass
367-
368- stats = yappi.YFuncStats("tests/count_down_rec.profile")
369- fsrec = utils.find_stat_by_name(stats, 'count_down_rec')
370- self.assertEqual(fsrec.ncall, 9)
371- self.assertEqual(fsrec.nactualcall, 2)
372-
373- def test_strip_dirs(self):
374-
375- def a():
376- pass
377-
378- stats = utils.run_and_get_func_stats(a, )
379- stats.strip_dirs()
380- fsa = utils.find_stat_by_name(stats, "a")
381- self.assertEqual(fsa.module, os.path.basename(fsa.module))
382-
383- @unittest.skipIf(os.name == "nt", "do not run on Windows")
384- def test_run_as_script(self):
385- import re
386- p = subprocess.Popen(
387- ['yappi', os.path.join('./tests', 'run_as_script.py')],
388- stdout=subprocess.PIPE
389- )
390- out, err = p.communicate()
391- self.assertEqual(p.returncode, 0)
392- func_stats, thread_stats = re.split(
393- b'name\\s+id\\s+tid\\s+ttot\\s+scnt\\s*\n', out
394- )
395- self.assertTrue(b'FancyThread' in thread_stats)
396-
397- def test_yappi_overhead(self):
398- LOOP_COUNT = 100000
399-
400- def a():
401- pass
402-
403- def b():
404- for i in range(LOOP_COUNT):
405- a()
406-
407- t0 = time.time()
408- yappi.start()
409- b()
410- yappi.stop()
411- time_with_yappi = time.time() - t0
412- t0 = time.time()
413- b()
414- time_without_yappi = time.time() - t0
415- if time_without_yappi == 0:
416- time_without_yappi = 0.000001
417-
418- # in latest v0.82, I calculated this as close to "7.0" in my machine.
419- # however, %83 of this overhead is coming from tickcount(). The other %17
420- # seems to have been evenly distributed to the internal bookkeeping
421- # structures/algorithms which seems acceptable. Note that our test only
422- # tests one function being profiled at-a-time in a short interval.
423- # profiling high number of functions in a small time
424- # is a different beast, (which is pretty unlikely in most applications)
425- # So as a conclusion: I cannot see any optimization window for Yappi that
426- # is worth implementing as we will only optimize %17 of the time.
427- sys.stderr.write("\r\nYappi puts %0.1f times overhead to the profiled application in average.\r\n" % \
428- (time_with_yappi / time_without_yappi))
429-
430- def test_clear_stats_while_running(self):
431-
432- def a():
433- pass
434-
435- yappi.start()
436- a()
437- yappi.clear_stats()
438- a()
439- stats = yappi.get_func_stats()
440- fsa = utils.find_stat_by_name(stats, 'a')
441- self.assertEqual(fsa.ncall, 1)
442-
443- def test_generator(self):
444-
445- def _gen(n):
446- while (n > 0):
447- yield n
448- n -= 1
449-
450- yappi.start()
451- for x in _gen(5):
452- pass
453- self.assertTrue(
454- yappi.convert2pstats(yappi.get_func_stats()) is not None
455- )
456-
457- def test_slice_child_stats_and_strip_dirs(self):
458-
459- def b():
460- for i in range(10000000):
461- pass
462-
463- def a():
464- b()
465-
466- yappi.start(builtins=True)
467- a()
468- stats = yappi.get_func_stats()
469- fsa = utils.find_stat_by_name(stats, 'a')
470- fsb = utils.find_stat_by_name(stats, 'b')
471- self.assertTrue(fsa.children[0:1] is not None)
472- prev_afullname = fsa.full_name
473- prev_bchildfullname = fsa.children[fsb].full_name
474- stats.strip_dirs()
475- self.assertTrue(len(prev_afullname) > len(fsa.full_name))
476- self.assertTrue(
477- len(prev_bchildfullname) > len(fsa.children[fsb].full_name)
478- )
479-
480- def test_children_stat_functions(self):
481- _timings = {"a_1": 5, "b_1": 3, "c_1": 1}
482- _yappi._set_test_timings(_timings)
483-
484- def b():
485- pass
486-
487- def c():
488- pass
489-
490- def a():
491- b()
492- c()
493-
494- yappi.start()
495- a()
496- b() # non-child call
497- c() # non-child call
498- stats = yappi.get_func_stats()
499- fsa = utils.find_stat_by_name(stats, 'a')
500- childs_of_a = fsa.children.get().sort("tavg", "desc")
501- prev_item = None
502- for item in childs_of_a:
503- if prev_item:
504- self.assertTrue(prev_item.tavg > item.tavg)
505- prev_item = item
506- childs_of_a.sort("name", "desc")
507- prev_item = None
508- for item in childs_of_a:
509- if prev_item:
510- self.assertTrue(prev_item.name > item.name)
511- prev_item = item
512- childs_of_a.clear()
513- self.assertTrue(childs_of_a.empty())
514-
515- def test_no_stats_different_clock_type_load(self):
516-
517- def a():
518- pass
519-
520- yappi.start()
521- a()
522- yappi.stop()
523- yappi.get_func_stats().save("tests/ystats1.ys")
524- yappi.clear_stats()
525- yappi.set_clock_type("WALL")
526- yappi.start()
527- yappi.stop()
528- stats = yappi.get_func_stats().add("tests/ystats1.ys")
529- fsa = utils.find_stat_by_name(stats, 'a')
530- self.assertTrue(fsa is not None)
531-
532- def test_subsequent_profile(self):
533- _timings = {"a_1": 1, "b_1": 1}
534- _yappi._set_test_timings(_timings)
535-
536- def a():
537- pass
538-
539- def b():
540- pass
541-
542- yappi.start()
543- a()
544- yappi.stop()
545- yappi.start()
546- b()
547- yappi.stop()
548- stats = yappi.get_func_stats()
549- fsa = utils.find_stat_by_name(stats, 'a')
550- fsb = utils.find_stat_by_name(stats, 'b')
551- self.assertTrue(fsa is not None)
552- self.assertTrue(fsb is not None)
553- self.assertEqual(fsa.ttot, 1)
554- self.assertEqual(fsb.ttot, 1)
555-
556- def test_lambda(self):
557- f = lambda: time.sleep(0.3)
558- yappi.set_clock_type("wall")
559- yappi.start()
560- f()
561- stats = yappi.get_func_stats()
562- fsa = utils.find_stat_by_name(stats, '<lambda>')
563- self.assertTrue(fsa.ttot > 0.1)
564-
565- def test_module_stress(self):
566- self.assertEqual(yappi.is_running(), False)
567-
568- yappi.start()
569- yappi.clear_stats()
570- self.assertRaises(_yappi.error, yappi.set_clock_type, "wall")
571-
572- yappi.stop()
573- yappi.clear_stats()
574- yappi.set_clock_type("cpu")
575- self.assertRaises(yappi.YappiError, yappi.set_clock_type, "dummy")
576- self.assertEqual(yappi.is_running(), False)
577- yappi.clear_stats()
578- yappi.clear_stats()
579-
580- def test_stat_sorting(self):
581- _timings = {"a_1": 13, "b_1": 10, "a_2": 6, "b_2": 1}
582- _yappi._set_test_timings(_timings)
583-
584- self._ncall = 1
585-
586- def a():
587- b()
588-
589- def b():
590- if self._ncall == 2:
591- return
592- self._ncall += 1
593- a()
594-
595- stats = utils.run_and_get_func_stats(a)
596- stats = stats.sort("totaltime", "desc")
597- prev_stat = None
598- for stat in stats:
599- if prev_stat:
600- self.assertTrue(prev_stat.ttot >= stat.ttot)
601- prev_stat = stat
602- stats = stats.sort("totaltime", "asc")
603- prev_stat = None
604- for stat in stats:
605- if prev_stat:
606- self.assertTrue(prev_stat.ttot <= stat.ttot)
607- prev_stat = stat
608- stats = stats.sort("avgtime", "asc")
609- prev_stat = None
610- for stat in stats:
611- if prev_stat:
612- self.assertTrue(prev_stat.tavg <= stat.tavg)
613- prev_stat = stat
614- stats = stats.sort("name", "asc")
615- prev_stat = None
616- for stat in stats:
617- if prev_stat:
618- self.assertTrue(prev_stat.name <= stat.name)
619- prev_stat = stat
620- stats = stats.sort("subtime", "asc")
621- prev_stat = None
622- for stat in stats:
623- if prev_stat:
624- self.assertTrue(prev_stat.tsub <= stat.tsub)
625- prev_stat = stat
626-
627- self.assertRaises(
628- yappi.YappiError, stats.sort, "invalid_func_sorttype_arg"
629- )
630- self.assertRaises(
631- yappi.YappiError, stats.sort, "totaltime",
632- "invalid_func_sortorder_arg"
633- )
634-
635- def test_start_flags(self):
636- self.assertEqual(_yappi._get_start_flags(), None)
637- yappi.start()
638-
639- def a():
640- pass
641-
642- a()
643- self.assertEqual(_yappi._get_start_flags()["profile_builtins"], 0)
644- self.assertEqual(_yappi._get_start_flags()["profile_multicontext"], 1)
645- self.assertEqual(len(yappi.get_thread_stats()), 1)
646-
647- def test_builtin_profiling(self):
648-
649- def a():
650- time.sleep(0.4) # is a builtin function
651-
652- yappi.set_clock_type('wall')
653-
654- yappi.start(builtins=True)
655- a()
656- stats = yappi.get_func_stats()
657- fsa = utils.find_stat_by_name(stats, 'sleep')
658- self.assertTrue(fsa is not None)
659- self.assertTrue(fsa.ttot > 0.3)
660- yappi.stop()
661- yappi.clear_stats()
662-
663- def a():
664- pass
665-
666- yappi.start()
667- t = threading.Thread(target=a)
668- t.start()
669- t.join()
670- stats = yappi.get_func_stats()
671-
672- def test_singlethread_profiling(self):
673- yappi.set_clock_type('wall')
674-
675- def a():
676- time.sleep(0.2)
677-
678- class Worker1(threading.Thread):
679-
680- def a(self):
681- time.sleep(0.3)
682-
683- def run(self):
684- self.a()
685-
686- yappi.start(profile_threads=False)
687-
688- c = Worker1()
689- c.start()
690- c.join()
691- a()
692- stats = yappi.get_func_stats()
693- fsa1 = utils.find_stat_by_name(stats, 'Worker1.a')
694- fsa2 = utils.find_stat_by_name(stats, 'a')
695- self.assertTrue(fsa1 is None)
696- self.assertTrue(fsa2 is not None)
697- self.assertTrue(fsa2.ttot > 0.1)
698-
699- def test_run(self):
700-
701- def profiled():
702- pass
703-
704- yappi.clear_stats()
705- try:
706- with yappi.run():
707- profiled()
708- stats = yappi.get_func_stats()
709- finally:
710- yappi.clear_stats()
711-
712- self.assertIsNotNone(utils.find_stat_by_name(stats, 'profiled'))
713-
714- def test_run_recursive(self):
715-
716- def profiled():
717- pass
718-
719- def not_profiled():
720- pass
721-
722- yappi.clear_stats()
723- try:
724- with yappi.run():
725- with yappi.run():
726- profiled()
727- # Profiling stopped here
728- not_profiled()
729- stats = yappi.get_func_stats()
730- finally:
731- yappi.clear_stats()
732-
733- self.assertIsNotNone(utils.find_stat_by_name(stats, 'profiled'))
734- self.assertIsNone(utils.find_stat_by_name(stats, 'not_profiled'))
735-
736-
737-class StatSaveScenarios(utils.YappiUnitTestCase):
738-
739- def test_pstats_conversion(self):
740-
741- def pstat_id(fs):
742- return (fs.module, fs.lineno, fs.name)
743-
744- def a():
745- d()
746-
747- def b():
748- d()
749-
750- def c():
751- pass
752-
753- def d():
754- pass
755-
756- _timings = {"a_1": 12, "b_1": 7, "c_1": 5, "d_1": 2}
757- _yappi._set_test_timings(_timings)
758- stats = utils.run_and_get_func_stats(a, )
759- stats.strip_dirs()
760- stats.save("tests/a1.pstats", type="pstat")
761- fsa_pid = pstat_id(utils.find_stat_by_name(stats, "a"))
762- fsd_pid = pstat_id(utils.find_stat_by_name(stats, "d"))
763- yappi.clear_stats()
764- _yappi._set_test_timings(_timings)
765- stats = utils.run_and_get_func_stats(a, )
766- stats.strip_dirs()
767- stats.save("tests/a2.pstats", type="pstat")
768- yappi.clear_stats()
769- _yappi._set_test_timings(_timings)
770- stats = utils.run_and_get_func_stats(b, )
771- stats.strip_dirs()
772- stats.save("tests/b1.pstats", type="pstat")
773- fsb_pid = pstat_id(utils.find_stat_by_name(stats, "b"))
774- yappi.clear_stats()
775- _yappi._set_test_timings(_timings)
776- stats = utils.run_and_get_func_stats(c, )
777- stats.strip_dirs()
778- stats.save("tests/c1.pstats", type="pstat")
779- fsc_pid = pstat_id(utils.find_stat_by_name(stats, "c"))
780-
781- # merge saved stats and check pstats values are correct
782- import pstats
783- p = pstats.Stats(
784- 'tests/a1.pstats', 'tests/a2.pstats', 'tests/b1.pstats',
785- 'tests/c1.pstats'
786- )
787- p.strip_dirs()
788- # ct = ttot, tt = tsub
789- (cc, nc, tt, ct, callers) = p.stats[fsa_pid]
790- self.assertEqual(cc, nc, 2)
791- self.assertEqual(tt, 20)
792- self.assertEqual(ct, 24)
793- (cc, nc, tt, ct, callers) = p.stats[fsd_pid]
794- self.assertEqual(cc, nc, 3)
795- self.assertEqual(tt, 6)
796- self.assertEqual(ct, 6)
797- self.assertEqual(len(callers), 2)
798- (cc, nc, tt, ct) = callers[fsa_pid]
799- self.assertEqual(cc, nc, 2)
800- self.assertEqual(tt, 4)
801- self.assertEqual(ct, 4)
802- (cc, nc, tt, ct) = callers[fsb_pid]
803- self.assertEqual(cc, nc, 1)
804- self.assertEqual(tt, 2)
805- self.assertEqual(ct, 2)
806-
807- def test_merge_stats(self):
808- _timings = {
809- "a_1": 15,
810- "b_1": 14,
811- "c_1": 12,
812- "d_1": 10,
813- "e_1": 9,
814- "f_1": 7,
815- "g_1": 6,
816- "h_1": 5,
817- "i_1": 1
818- }
819- _yappi._set_test_timings(_timings)
820-
821- def a():
822- b()
823-
824- def b():
825- c()
826-
827- def c():
828- d()
829-
830- def d():
831- e()
832-
833- def e():
834- f()
835-
836- def f():
837- g()
838-
839- def g():
840- h()
841-
842- def h():
843- i()
844-
845- def i():
846- pass
847-
848- yappi.start()
849- a()
850- a()
851- yappi.stop()
852- stats = yappi.get_func_stats()
853- self.assertRaises(
854- NotImplementedError, stats.save, "", "INVALID_SAVE_TYPE"
855- )
856- stats.save("tests/ystats2.ys")
857- yappi.clear_stats()
858- _yappi._set_test_timings(_timings)
859- yappi.start()
860- a()
861- stats = yappi.get_func_stats().add("tests/ystats2.ys")
862- fsa = utils.find_stat_by_name(stats, "a")
863- fsb = utils.find_stat_by_name(stats, "b")
864- fsc = utils.find_stat_by_name(stats, "c")
865- fsd = utils.find_stat_by_name(stats, "d")
866- fse = utils.find_stat_by_name(stats, "e")
867- fsf = utils.find_stat_by_name(stats, "f")
868- fsg = utils.find_stat_by_name(stats, "g")
869- fsh = utils.find_stat_by_name(stats, "h")
870- fsi = utils.find_stat_by_name(stats, "i")
871- self.assertEqual(fsa.ttot, 45)
872- self.assertEqual(fsa.ncall, 3)
873- self.assertEqual(fsa.nactualcall, 3)
874- self.assertEqual(fsa.tsub, 3)
875- self.assertEqual(fsa.children[fsb].ttot, fsb.ttot)
876- self.assertEqual(fsa.children[fsb].tsub, fsb.tsub)
877- self.assertEqual(fsb.children[fsc].ttot, fsc.ttot)
878- self.assertEqual(fsb.children[fsc].tsub, fsc.tsub)
879- self.assertEqual(fsc.tsub, 6)
880- self.assertEqual(fsc.children[fsd].ttot, fsd.ttot)
881- self.assertEqual(fsc.children[fsd].tsub, fsd.tsub)
882- self.assertEqual(fsd.children[fse].ttot, fse.ttot)
883- self.assertEqual(fsd.children[fse].tsub, fse.tsub)
884- self.assertEqual(fse.children[fsf].ttot, fsf.ttot)
885- self.assertEqual(fse.children[fsf].tsub, fsf.tsub)
886- self.assertEqual(fsf.children[fsg].ttot, fsg.ttot)
887- self.assertEqual(fsf.children[fsg].tsub, fsg.tsub)
888- self.assertEqual(fsg.ttot, 18)
889- self.assertEqual(fsg.tsub, 3)
890- self.assertEqual(fsg.children[fsh].ttot, fsh.ttot)
891- self.assertEqual(fsg.children[fsh].tsub, fsh.tsub)
892- self.assertEqual(fsh.ttot, 15)
893- self.assertEqual(fsh.tsub, 12)
894- self.assertEqual(fsh.tavg, 5)
895- self.assertEqual(fsh.children[fsi].ttot, fsi.ttot)
896- self.assertEqual(fsh.children[fsi].tsub, fsi.tsub)
897- #stats.debug_print()
898-
899- def test_merge_multithreaded_stats(self):
900- import _yappi
901- timings = {"a_1": 2, "b_1": 1}
902- _yappi._set_test_timings(timings)
903-
904- def a():
905- pass
906-
907- def b():
908- pass
909-
910- yappi.start()
911- t = threading.Thread(target=a)
912- t.start()
913- t.join()
914- t = threading.Thread(target=b)
915- t.start()
916- t.join()
917- yappi.get_func_stats().save("tests/ystats1.ys")
918- yappi.clear_stats()
919- _yappi._set_test_timings(timings)
920- self.assertEqual(len(yappi.get_func_stats()), 0)
921- self.assertEqual(len(yappi.get_thread_stats()), 1)
922- t = threading.Thread(target=a)
923- t.start()
924- t.join()
925-
926- self.assertEqual(_yappi._get_start_flags()["profile_builtins"], 0)
927- self.assertEqual(_yappi._get_start_flags()["profile_multicontext"], 1)
928- yappi.get_func_stats().save("tests/ystats2.ys")
929-
930- stats = yappi.YFuncStats([
931- "tests/ystats1.ys",
932- "tests/ystats2.ys",
933- ])
934- fsa = utils.find_stat_by_name(stats, "a")
935- fsb = utils.find_stat_by_name(stats, "b")
936- self.assertEqual(fsa.ncall, 2)
937- self.assertEqual(fsb.ncall, 1)
938- self.assertEqual(fsa.tsub, fsa.ttot, 4)
939- self.assertEqual(fsb.tsub, fsb.ttot, 1)
940-
941- def test_merge_load_different_clock_types(self):
942- yappi.start(builtins=True)
943-
944- def a():
945- b()
946-
947- def b():
948- c()
949-
950- def c():
951- pass
952-
953- t = threading.Thread(target=a)
954- t.start()
955- t.join()
956- yappi.get_func_stats().sort("name", "asc").save("tests/ystats1.ys")
957- yappi.stop()
958- yappi.clear_stats()
959- yappi.start(builtins=False)
960- t = threading.Thread(target=a)
961- t.start()
962- t.join()
963- yappi.get_func_stats().save("tests/ystats2.ys")
964- yappi.stop()
965- self.assertRaises(_yappi.error, yappi.set_clock_type, "wall")
966- yappi.clear_stats()
967- yappi.set_clock_type("wall")
968- yappi.start()
969- t = threading.Thread(target=a)
970- t.start()
971- t.join()
972- yappi.get_func_stats().save("tests/ystats3.ys")
973- self.assertRaises(
974- yappi.YappiError,
975- yappi.YFuncStats().add("tests/ystats1.ys").add, "tests/ystats3.ys"
976- )
977- stats = yappi.YFuncStats(["tests/ystats1.ys",
978- "tests/ystats2.ys"]).sort("name")
979- fsa = utils.find_stat_by_name(stats, "a")
980- fsb = utils.find_stat_by_name(stats, "b")
981- fsc = utils.find_stat_by_name(stats, "c")
982- self.assertEqual(fsa.ncall, 2)
983- self.assertEqual(fsa.ncall, fsb.ncall, fsc.ncall)
984-
985- def test_merge_aabab_aabbc(self):
986- _timings = {
987- "a_1": 15,
988- "a_2": 14,
989- "b_1": 12,
990- "a_3": 10,
991- "b_2": 9,
992- "c_1": 4
993- }
994- _yappi._set_test_timings(_timings)
995-
996- def a():
997- if self._ncall == 1:
998- self._ncall += 1
999- a()
1000- elif self._ncall == 5:
1001- self._ncall += 1
1002- a()
1003- else:
1004- b()
1005-
1006- def b():
1007- if self._ncall == 2:
1008- self._ncall += 1
1009- a()
1010- elif self._ncall == 6:
1011- self._ncall += 1
1012- b()
1013- elif self._ncall == 7:
1014- c()
1015- else:
1016- return
1017-
1018- def c():
1019- pass
1020-
1021- self._ncall = 1
1022- stats = utils.run_and_get_func_stats(a, )
1023- stats.save("tests/ystats1.ys")
1024- yappi.clear_stats()
1025- _yappi._set_test_timings(_timings)
1026- #stats.print_all()
1027-
1028- self._ncall = 5
1029- stats = utils.run_and_get_func_stats(a, )
1030- stats.save("tests/ystats2.ys")
1031-
1032- #stats.print_all()
1033-
1034- def a(): # same name but another function(code object)
1035- pass
1036-
1037- yappi.start()
1038- a()
1039- stats = yappi.get_func_stats().add(
1040- ["tests/ystats1.ys", "tests/ystats2.ys"]
1041- )
1042- #stats.print_all()
1043- self.assertEqual(len(stats), 4)
1044-
1045- fsa = None
1046- for stat in stats:
1047- if stat.name == "a" and stat.ttot == 45:
1048- fsa = stat
1049- break
1050- self.assertTrue(fsa is not None)
1051-
1052- self.assertEqual(fsa.ncall, 7)
1053- self.assertEqual(fsa.nactualcall, 3)
1054- self.assertEqual(fsa.ttot, 45)
1055- self.assertEqual(fsa.tsub, 10)
1056- fsb = utils.find_stat_by_name(stats, "b")
1057- fsc = utils.find_stat_by_name(stats, "c")
1058- self.assertEqual(fsb.ncall, 6)
1059- self.assertEqual(fsb.nactualcall, 3)
1060- self.assertEqual(fsb.ttot, 36)
1061- self.assertEqual(fsb.tsub, 27)
1062- self.assertEqual(fsb.tavg, 6)
1063- self.assertEqual(fsc.ttot, 8)
1064- self.assertEqual(fsc.tsub, 8)
1065- self.assertEqual(fsc.tavg, 4)
1066- self.assertEqual(fsc.nactualcall, fsc.ncall, 2)
1067-
1068-
1069-class MultithreadedScenarios(utils.YappiUnitTestCase):
1070-
1071- def test_issue_32(self):
1072- '''
1073- Start yappi from different thread and we get Internal Error(15) as
1074- the current_ctx_id() called while enumerating the threads in start()
1075- and as it does not swap to the enumerated ThreadState* the THreadState_GetDict()
1076- returns wrong object and thus sets an invalid id for the _ctx structure.
1077-
1078- When this issue happens multiple Threads have same tid as the internal ts_ptr
1079- will be same for different contexts. So, let's see if that happens
1080- '''
1081-
1082- def foo():
1083- time.sleep(0.2)
1084-
1085- def bar():
1086- time.sleep(0.1)
1087-
1088- def thread_func():
1089- yappi.set_clock_type("wall")
1090- yappi.start()
1091-
1092- bar()
1093-
1094- t = threading.Thread(target=thread_func)
1095- t.start()
1096- t.join()
1097-
1098- foo()
1099-
1100- yappi.stop()
1101-
1102- thread_ids = set()
1103- for tstat in yappi.get_thread_stats():
1104- self.assertTrue(tstat.tid not in thread_ids)
1105- thread_ids.add(tstat.tid)
1106-
1107- def test_subsequent_profile(self):
1108- WORKER_COUNT = 5
1109-
1110- def a():
1111- pass
1112-
1113- def b():
1114- pass
1115-
1116- def c():
1117- pass
1118-
1119- _timings = {
1120- "a_1": 3,
1121- "b_1": 2,
1122- "c_1": 1,
1123- }
1124-
1125- yappi.start()
1126-
1127- def g():
1128- pass
1129-
1130- g()
1131- yappi.stop()
1132- yappi.clear_stats()
1133- _yappi._set_test_timings(_timings)
1134- yappi.start()
1135-
1136- _dummy = []
1137- for i in range(WORKER_COUNT):
1138- t = threading.Thread(target=a)
1139- t.start()
1140- t.join()
1141- for i in range(WORKER_COUNT):
1142- t = threading.Thread(target=b)
1143- t.start()
1144- _dummy.append(t)
1145- t.join()
1146- for i in range(WORKER_COUNT):
1147- t = threading.Thread(target=a)
1148- t.start()
1149- t.join()
1150- for i in range(WORKER_COUNT):
1151- t = threading.Thread(target=c)
1152- t.start()
1153- t.join()
1154- yappi.stop()
1155- yappi.start()
1156-
1157- def f():
1158- pass
1159-
1160- f()
1161- stats = yappi.get_func_stats()
1162- fsa = utils.find_stat_by_name(stats, 'a')
1163- fsb = utils.find_stat_by_name(stats, 'b')
1164- fsc = utils.find_stat_by_name(stats, 'c')
1165- self.assertEqual(fsa.ncall, 10)
1166- self.assertEqual(fsb.ncall, 5)
1167- self.assertEqual(fsc.ncall, 5)
1168- self.assertEqual(fsa.ttot, fsa.tsub, 30)
1169- self.assertEqual(fsb.ttot, fsb.tsub, 10)
1170- self.assertEqual(fsc.ttot, fsc.tsub, 5)
1171-
1172- # MACOSx optimizes by only creating one worker thread
1173- self.assertTrue(len(yappi.get_thread_stats()) >= 2)
1174-
1175- def test_basic(self):
1176- yappi.set_clock_type('wall')
1177-
1178- def dummy():
1179- pass
1180-
1181- def a():
1182- time.sleep(0.2)
1183-
1184- class Worker1(threading.Thread):
1185-
1186- def a(self):
1187- time.sleep(0.3)
1188-
1189- def run(self):
1190- self.a()
1191-
1192- yappi.start(builtins=False, profile_threads=True)
1193-
1194- c = Worker1()
1195- c.start()
1196- c.join()
1197- a()
1198- stats = yappi.get_func_stats()
1199- fsa1 = utils.find_stat_by_name(stats, 'Worker1.a')
1200- fsa2 = utils.find_stat_by_name(stats, 'a')
1201- self.assertTrue(fsa1 is not None)
1202- self.assertTrue(fsa2 is not None)
1203- self.assertTrue(fsa1.ttot > 0.2)
1204- self.assertTrue(fsa2.ttot > 0.1)
1205- tstats = yappi.get_thread_stats()
1206- self.assertEqual(len(tstats), 2)
1207- tsa = utils.find_stat_by_name(tstats, 'Worker1')
1208- tsm = utils.find_stat_by_name(tstats, '_MainThread')
1209- dummy() # call dummy to force ctx name to be retrieved again.
1210- self.assertTrue(tsa is not None)
1211- # TODO: I put dummy() to fix below, remove the comments after a while.
1212- self.assertTrue( # FIX: I see this fails sometimes?
1213- tsm is not None,
1214- f"Could not find \"_MainThread\". Found: {', '.join(utils.get_stat_names(tstats))}")
1215-
1216- def test_ctx_stats(self):
1217- from threading import Thread
1218- DUMMY_WORKER_COUNT = 5
1219- yappi.start()
1220-
1221- class DummyThread(Thread):
1222- pass
1223-
1224- def dummy():
1225- pass
1226-
1227- def dummy_worker():
1228- pass
1229-
1230- for i in range(DUMMY_WORKER_COUNT):
1231- t = DummyThread(target=dummy_worker)
1232- t.start()
1233- t.join()
1234- yappi.stop()
1235- stats = yappi.get_thread_stats()
1236- tsa = utils.find_stat_by_name(stats, "DummyThread")
1237- self.assertTrue(tsa is not None)
1238- yappi.clear_stats()
1239- time.sleep(1.0)
1240- _timings = {
1241- "a_1": 6,
1242- "b_1": 5,
1243- "c_1": 3,
1244- "d_1": 1,
1245- "a_2": 4,
1246- "b_2": 3,
1247- "c_2": 2,
1248- "d_2": 1
1249- }
1250- _yappi._set_test_timings(_timings)
1251-
1252- class Thread1(Thread):
1253- pass
1254-
1255- class Thread2(Thread):
1256- pass
1257-
1258- def a():
1259- b()
1260-
1261- def b():
1262- c()
1263-
1264- def c():
1265- d()
1266-
1267- def d():
1268- time.sleep(0.6)
1269-
1270- yappi.set_clock_type("wall")
1271- yappi.start()
1272- t1 = Thread1(target=a)
1273- t1.start()
1274- t2 = Thread2(target=a)
1275- t2.start()
1276- t1.join()
1277- t2.join()
1278- stats = yappi.get_thread_stats()
1279-
1280- # the fist clear_stats clears the context table?
1281- tsa = utils.find_stat_by_name(stats, "DummyThread")
1282- self.assertTrue(tsa is None)
1283-
1284- tst1 = utils.find_stat_by_name(stats, "Thread1")
1285- tst2 = utils.find_stat_by_name(stats, "Thread2")
1286- tsmain = utils.find_stat_by_name(stats, "_MainThread")
1287- dummy() # call dummy to force ctx name to be retrieved again.
1288- self.assertTrue(len(stats) == 3)
1289- self.assertTrue(tst1 is not None)
1290- self.assertTrue(tst2 is not None)
1291- # TODO: I put dummy() to fix below, remove the comments after a while.
1292- self.assertTrue( # FIX: I see this fails sometimes
1293- tsmain is not None,
1294- f"Could not find \"_MainThread\". Found: {', '.join(utils.get_stat_names(stats))}")
1295- self.assertTrue(1.0 > tst2.ttot >= 0.5)
1296- self.assertTrue(1.0 > tst1.ttot >= 0.5)
1297-
1298- # test sorting of the ctx stats
1299- stats = stats.sort("totaltime", "desc")
1300- prev_stat = None
1301- for stat in stats:
1302- if prev_stat:
1303- self.assertTrue(prev_stat.ttot >= stat.ttot)
1304- prev_stat = stat
1305- stats = stats.sort("totaltime", "asc")
1306- prev_stat = None
1307- for stat in stats:
1308- if prev_stat:
1309- self.assertTrue(prev_stat.ttot <= stat.ttot)
1310- prev_stat = stat
1311- stats = stats.sort("schedcount", "desc")
1312- prev_stat = None
1313- for stat in stats:
1314- if prev_stat:
1315- self.assertTrue(prev_stat.sched_count >= stat.sched_count)
1316- prev_stat = stat
1317- stats = stats.sort("name", "desc")
1318- prev_stat = None
1319- for stat in stats:
1320- if prev_stat:
1321- self.assertTrue(prev_stat.name.lower() >= stat.name.lower())
1322- prev_stat = stat
1323- self.assertRaises(
1324- yappi.YappiError, stats.sort, "invalid_thread_sorttype_arg"
1325- )
1326- self.assertRaises(
1327- yappi.YappiError, stats.sort, "invalid_thread_sortorder_arg"
1328- )
1329-
1330- def test_ctx_stats_cpu(self):
1331-
1332- def get_thread_name():
1333- try:
1334- return threading.current_thread().name
1335- except AttributeError:
1336- return "Anonymous"
1337-
1338- def burn_cpu(sec):
1339- t0 = yappi.get_clock_time()
1340- elapsed = 0
1341- while (elapsed < sec):
1342- for _ in range(1000):
1343- pass
1344- elapsed = yappi.get_clock_time() - t0
1345-
1346- def test():
1347-
1348- ts = []
1349- for i in (0.01, 0.05, 0.1):
1350- t = threading.Thread(target=burn_cpu, args=(i, ))
1351- t.name = f"burn_cpu-{str(i)}"
1352- t.start()
1353- ts.append(t)
1354- for t in ts:
1355- t.join()
1356-
1357- yappi.set_clock_type("cpu")
1358- yappi.set_context_name_callback(get_thread_name)
1359-
1360- yappi.start()
1361-
1362- test()
1363-
1364- yappi.stop()
1365-
1366- tstats = yappi.get_thread_stats()
1367- r1 = '''
1368- burn_cpu-0.1 3 123145356058624 0.100105 8
1369- burn_cpu-0.05 2 123145361313792 0.050149 8
1370- burn_cpu-0.01 1 123145356058624 0.010127 2
1371- MainThread 0 4321620864 0.001632 6
1372- '''
1373- self.assert_ctx_stats_almost_equal(r1, tstats)
1374-
1375- def test_producer_consumer_with_queues(self):
1376- # we currently just stress yappi, no functionality test is done here.
1377- yappi.start()
1378- from queue import Queue
1379- from threading import Thread
1380- WORKER_THREAD_COUNT = 50
1381- WORK_ITEM_COUNT = 2000
1382-
1383- def worker():
1384- while True:
1385- item = q.get()
1386- # do the work with item
1387- q.task_done()
1388-
1389- q = Queue()
1390- for i in range(WORKER_THREAD_COUNT):
1391- t = Thread(target=worker)
1392- t.daemon = True
1393- t.start()
1394-
1395- for item in range(WORK_ITEM_COUNT):
1396- q.put(item)
1397- q.join() # block until all tasks are done
1398- #yappi.get_func_stats().sort("callcount").print_all()
1399- yappi.stop()
1400-
1401- def test_temporary_lock_waiting(self):
1402- yappi.start()
1403- _lock = threading.Lock()
1404-
1405- def worker():
1406- _lock.acquire()
1407- try:
1408- time.sleep(1.0)
1409- finally:
1410- _lock.release()
1411-
1412- t1 = threading.Thread(target=worker)
1413- t2 = threading.Thread(target=worker)
1414- t1.start()
1415- t2.start()
1416- t1.join()
1417- t2.join()
1418- #yappi.get_func_stats().sort("callcount").print_all()
1419- yappi.stop()
1420-
1421- @unittest.skipIf(os.name != "posix", "requires Posix compliant OS")
1422- def test_signals_with_blocking_calls(self):
1423- import signal, os, time
1424-
1425- # just to verify if signal is handled correctly and stats/yappi are not corrupted.
1426- def handler(signum, frame):
1427- raise Exception("Signal handler executed!")
1428-
1429- yappi.start()
1430- signal.signal(signal.SIGALRM, handler)
1431- signal.alarm(1)
1432- self.assertRaises(Exception, time.sleep, 2)
1433- stats = yappi.get_func_stats()
1434- fsh = utils.find_stat_by_name(stats, "handler")
1435- self.assertTrue(fsh is not None)
1436-
1437- def test_concurrent_futures(self):
1438- yappi.start()
1439- from concurrent.futures import ThreadPoolExecutor
1440- with ThreadPoolExecutor(max_workers=5) as executor:
1441- f = executor.submit(pow, 5, 2)
1442- self.assertEqual(f.result(), 25)
1443- time.sleep(1.0)
1444- yappi.stop()
1445-
1446- def test_barrier(self):
1447- yappi.start()
1448- b = threading.Barrier(2, timeout=1)
1449-
1450- def worker():
1451- try:
1452- b.wait()
1453- except threading.BrokenBarrierError:
1454- pass
1455- except Exception:
1456- raise Exception("BrokenBarrierError not raised")
1457-
1458- t1 = threading.Thread(target=worker)
1459- t1.start()
1460- #b.wait()
1461- t1.join()
1462- yappi.stop()
1463-
1464-
1465-class NonRecursiveFunctions(utils.YappiUnitTestCase):
1466-
1467- def test_abcd(self):
1468- _timings = {"a_1": 6, "b_1": 5, "c_1": 3, "d_1": 1}
1469- _yappi._set_test_timings(_timings)
1470-
1471- def a():
1472- b()
1473-
1474- def b():
1475- c()
1476-
1477- def c():
1478- d()
1479-
1480- def d():
1481- pass
1482-
1483- stats = utils.run_and_get_func_stats(a)
1484- fsa = utils.find_stat_by_name(stats, 'a')
1485- fsb = utils.find_stat_by_name(stats, 'b')
1486- fsc = utils.find_stat_by_name(stats, 'c')
1487- fsd = utils.find_stat_by_name(stats, 'd')
1488- cfsab = fsa.children[fsb]
1489- cfsbc = fsb.children[fsc]
1490- cfscd = fsc.children[fsd]
1491-
1492- self.assertEqual(fsa.ttot, 6)
1493- self.assertEqual(fsa.tsub, 1)
1494- self.assertEqual(fsb.ttot, 5)
1495- self.assertEqual(fsb.tsub, 2)
1496- self.assertEqual(fsc.ttot, 3)
1497- self.assertEqual(fsc.tsub, 2)
1498- self.assertEqual(fsd.ttot, 1)
1499- self.assertEqual(fsd.tsub, 1)
1500- self.assertEqual(cfsab.ttot, 5)
1501- self.assertEqual(cfsab.tsub, 2)
1502- self.assertEqual(cfsbc.ttot, 3)
1503- self.assertEqual(cfsbc.tsub, 2)
1504- self.assertEqual(cfscd.ttot, 1)
1505- self.assertEqual(cfscd.tsub, 1)
1506-
1507- def test_stop_in_middle(self):
1508- _timings = {"a_1": 6, "b_1": 4}
1509- _yappi._set_test_timings(_timings)
1510-
1511- def a():
1512- b()
1513- yappi.stop()
1514-
1515- def b():
1516- time.sleep(0.2)
1517-
1518- yappi.start()
1519- a()
1520- stats = yappi.get_func_stats()
1521- fsa = utils.find_stat_by_name(stats, 'a')
1522- fsb = utils.find_stat_by_name(stats, 'b')
1523-
1524- self.assertEqual(fsa.ncall, 1)
1525- self.assertEqual(fsa.nactualcall, 0)
1526- self.assertEqual(fsa.ttot, 0) # no call_leave called
1527- self.assertEqual(fsa.tsub, 0) # no call_leave called
1528- self.assertEqual(fsb.ttot, 4)
1529-
1530-
1531-class RecursiveFunctions(utils.YappiUnitTestCase):
1532-
1533- def test_fibonacci(self):
1534-
1535- def fib(n):
1536- if n > 1:
1537- return fib(n - 1) + fib(n - 2)
1538- else:
1539- return n
1540-
1541- stats = utils.run_and_get_func_stats(fib, 22)
1542- fs = utils.find_stat_by_name(stats, 'fib')
1543- self.assertEqual(fs.ncall, 57313)
1544- self.assertEqual(fs.ttot, fs.tsub)
1545-
1546- def test_abcadc(self):
1547- _timings = {
1548- "a_1": 20,
1549- "b_1": 19,
1550- "c_1": 17,
1551- "a_2": 13,
1552- "d_1": 12,
1553- "c_2": 10,
1554- "a_3": 5
1555- }
1556- _yappi._set_test_timings(_timings)
1557-
1558- def a(n):
1559- if n == 3:
1560- return
1561- if n == 1 + 1:
1562- d(n)
1563- else:
1564- b(n)
1565-
1566- def b(n):
1567- c(n)
1568-
1569- def c(n):
1570- a(n + 1)
1571-
1572- def d(n):
1573- c(n)
1574-
1575- stats = utils.run_and_get_func_stats(a, 1)
1576- fsa = utils.find_stat_by_name(stats, 'a')
1577- fsb = utils.find_stat_by_name(stats, 'b')
1578- fsc = utils.find_stat_by_name(stats, 'c')
1579- fsd = utils.find_stat_by_name(stats, 'd')
1580- self.assertEqual(fsa.ncall, 3)
1581- self.assertEqual(fsa.nactualcall, 1)
1582- self.assertEqual(fsa.ttot, 20)
1583- self.assertEqual(fsa.tsub, 7)
1584- self.assertEqual(fsb.ttot, 19)
1585- self.assertEqual(fsb.tsub, 2)
1586- self.assertEqual(fsc.ttot, 17)
1587- self.assertEqual(fsc.tsub, 9)
1588- self.assertEqual(fsd.ttot, 12)
1589- self.assertEqual(fsd.tsub, 2)
1590- cfsca = fsc.children[fsa]
1591- self.assertEqual(cfsca.nactualcall, 0)
1592- self.assertEqual(cfsca.ncall, 2)
1593- self.assertEqual(cfsca.ttot, 13)
1594- self.assertEqual(cfsca.tsub, 6)
1595-
1596- def test_aaaa(self):
1597- _timings = {"d_1": 9, "d_2": 7, "d_3": 3, "d_4": 2}
1598- _yappi._set_test_timings(_timings)
1599-
1600- def d(n):
1601- if n == 3:
1602- return
1603- d(n + 1)
1604-
1605- stats = utils.run_and_get_func_stats(d, 0)
1606- fsd = utils.find_stat_by_name(stats, 'd')
1607- self.assertEqual(fsd.ncall, 4)
1608- self.assertEqual(fsd.nactualcall, 1)
1609- self.assertEqual(fsd.ttot, 9)
1610- self.assertEqual(fsd.tsub, 9)
1611- cfsdd = fsd.children[fsd]
1612- self.assertEqual(cfsdd.ttot, 7)
1613- self.assertEqual(cfsdd.tsub, 7)
1614- self.assertEqual(cfsdd.ncall, 3)
1615- self.assertEqual(cfsdd.nactualcall, 0)
1616-
1617- def test_abcabc(self):
1618- _timings = {
1619- "a_1": 20,
1620- "b_1": 19,
1621- "c_1": 17,
1622- "a_2": 13,
1623- "b_2": 11,
1624- "c_2": 9,
1625- "a_3": 6
1626- }
1627- _yappi._set_test_timings(_timings)
1628-
1629- def a(n):
1630- if n == 3:
1631- return
1632- else:
1633- b(n)
1634-
1635- def b(n):
1636- c(n)
1637-
1638- def c(n):
1639- a(n + 1)
1640-
1641- stats = utils.run_and_get_func_stats(a, 1)
1642- fsa = utils.find_stat_by_name(stats, 'a')
1643- fsb = utils.find_stat_by_name(stats, 'b')
1644- fsc = utils.find_stat_by_name(stats, 'c')
1645- self.assertEqual(fsa.ncall, 3)
1646- self.assertEqual(fsa.nactualcall, 1)
1647- self.assertEqual(fsa.ttot, 20)
1648- self.assertEqual(fsa.tsub, 9)
1649- self.assertEqual(fsb.ttot, 19)
1650- self.assertEqual(fsb.tsub, 4)
1651- self.assertEqual(fsc.ttot, 17)
1652- self.assertEqual(fsc.tsub, 7)
1653- cfsab = fsa.children[fsb]
1654- cfsbc = fsb.children[fsc]
1655- cfsca = fsc.children[fsa]
1656- self.assertEqual(cfsab.ttot, 19)
1657- self.assertEqual(cfsab.tsub, 4)
1658- self.assertEqual(cfsbc.ttot, 17)
1659- self.assertEqual(cfsbc.tsub, 7)
1660- self.assertEqual(cfsca.ttot, 13)
1661- self.assertEqual(cfsca.tsub, 8)
1662-
1663- def test_abcbca(self):
1664- _timings = {"a_1": 10, "b_1": 9, "c_1": 7, "b_2": 4, "c_2": 2, "a_2": 1}
1665- _yappi._set_test_timings(_timings)
1666- self._ncall = 1
1667-
1668- def a():
1669- if self._ncall == 1:
1670- b()
1671- else:
1672- return
1673-
1674- def b():
1675- c()
1676-
1677- def c():
1678- if self._ncall == 1:
1679- self._ncall += 1
1680- b()
1681- else:
1682- a()
1683-
1684- stats = utils.run_and_get_func_stats(a)
1685- fsa = utils.find_stat_by_name(stats, 'a')
1686- fsb = utils.find_stat_by_name(stats, 'b')
1687- fsc = utils.find_stat_by_name(stats, 'c')
1688- cfsab = fsa.children[fsb]
1689- cfsbc = fsb.children[fsc]
1690- cfsca = fsc.children[fsa]
1691- self.assertEqual(fsa.ttot, 10)
1692- self.assertEqual(fsa.tsub, 2)
1693- self.assertEqual(fsb.ttot, 9)
1694- self.assertEqual(fsb.tsub, 4)
1695- self.assertEqual(fsc.ttot, 7)
1696- self.assertEqual(fsc.tsub, 4)
1697- self.assertEqual(cfsab.ttot, 9)
1698- self.assertEqual(cfsab.tsub, 2)
1699- self.assertEqual(cfsbc.ttot, 7)
1700- self.assertEqual(cfsbc.tsub, 4)
1701- self.assertEqual(cfsca.ttot, 1)
1702- self.assertEqual(cfsca.tsub, 1)
1703- self.assertEqual(cfsca.ncall, 1)
1704- self.assertEqual(cfsca.nactualcall, 0)
1705-
1706- def test_aabccb(self):
1707- _timings = {
1708- "a_1": 13,
1709- "a_2": 11,
1710- "b_1": 9,
1711- "c_1": 5,
1712- "c_2": 3,
1713- "b_2": 1
1714- }
1715- _yappi._set_test_timings(_timings)
1716- self._ncall = 1
1717-
1718- def a():
1719- if self._ncall == 1:
1720- self._ncall += 1
1721- a()
1722- else:
1723- b()
1724-
1725- def b():
1726- if self._ncall == 3:
1727- return
1728- else:
1729- c()
1730-
1731- def c():
1732- if self._ncall == 2:
1733- self._ncall += 1
1734- c()
1735- else:
1736- b()
1737-
1738- stats = utils.run_and_get_func_stats(a)
1739- fsa = utils.find_stat_by_name(stats, 'a')
1740- fsb = utils.find_stat_by_name(stats, 'b')
1741- fsc = utils.find_stat_by_name(stats, 'c')
1742- cfsaa = fsa.children[fsa.index]
1743- cfsab = fsa.children[fsb]
1744- cfsbc = fsb.children[fsc.full_name]
1745- cfscc = fsc.children[fsc]
1746- cfscb = fsc.children[fsb]
1747- self.assertEqual(fsb.ttot, 9)
1748- self.assertEqual(fsb.tsub, 5)
1749- self.assertEqual(cfsbc.ttot, 5)
1750- self.assertEqual(cfsbc.tsub, 2)
1751- self.assertEqual(fsa.ttot, 13)
1752- self.assertEqual(fsa.tsub, 4)
1753- self.assertEqual(cfsab.ttot, 9)
1754- self.assertEqual(cfsab.tsub, 4)
1755- self.assertEqual(cfsaa.ttot, 11)
1756- self.assertEqual(cfsaa.tsub, 2)
1757- self.assertEqual(fsc.ttot, 5)
1758- self.assertEqual(fsc.tsub, 4)
1759-
1760- def test_abaa(self):
1761- _timings = {"a_1": 13, "b_1": 10, "a_2": 9, "a_3": 5}
1762- _yappi._set_test_timings(_timings)
1763-
1764- self._ncall = 1
1765-
1766- def a():
1767- if self._ncall == 1:
1768- b()
1769- elif self._ncall == 2:
1770- self._ncall += 1
1771- a()
1772- else:
1773- return
1774-
1775- def b():
1776- self._ncall += 1
1777- a()
1778-
1779- stats = utils.run_and_get_func_stats(a)
1780- fsa = utils.find_stat_by_name(stats, 'a')
1781- fsb = utils.find_stat_by_name(stats, 'b')
1782- cfsaa = fsa.children[fsa]
1783- cfsba = fsb.children[fsa]
1784- self.assertEqual(fsb.ttot, 10)
1785- self.assertEqual(fsb.tsub, 1)
1786- self.assertEqual(fsa.ttot, 13)
1787- self.assertEqual(fsa.tsub, 12)
1788- self.assertEqual(cfsaa.ttot, 5)
1789- self.assertEqual(cfsaa.tsub, 5)
1790- self.assertEqual(cfsba.ttot, 9)
1791- self.assertEqual(cfsba.tsub, 4)
1792-
1793- def test_aabb(self):
1794- _timings = {"a_1": 13, "a_2": 10, "b_1": 9, "b_2": 5}
1795- _yappi._set_test_timings(_timings)
1796-
1797- self._ncall = 1
1798-
1799- def a():
1800- if self._ncall == 1:
1801- self._ncall += 1
1802- a()
1803- elif self._ncall == 2:
1804- b()
1805- else:
1806- return
1807-
1808- def b():
1809- if self._ncall == 2:
1810- self._ncall += 1
1811- b()
1812- else:
1813- return
1814-
1815- stats = utils.run_and_get_func_stats(a)
1816- fsa = utils.find_stat_by_name(stats, 'a')
1817- fsb = utils.find_stat_by_name(stats, 'b')
1818- cfsaa = fsa.children[fsa]
1819- cfsab = fsa.children[fsb]
1820- cfsbb = fsb.children[fsb]
1821- self.assertEqual(fsa.ttot, 13)
1822- self.assertEqual(fsa.tsub, 4)
1823- self.assertEqual(fsb.ttot, 9)
1824- self.assertEqual(fsb.tsub, 9)
1825- self.assertEqual(cfsaa.ttot, 10)
1826- self.assertEqual(cfsaa.tsub, 1)
1827- self.assertEqual(cfsab.ttot, 9)
1828- self.assertEqual(cfsab.tsub, 4)
1829- self.assertEqual(cfsbb.ttot, 5)
1830- self.assertEqual(cfsbb.tsub, 5)
1831-
1832- def test_abbb(self):
1833- _timings = {"a_1": 13, "b_1": 10, "b_2": 6, "b_3": 1}
1834- _yappi._set_test_timings(_timings)
1835-
1836- self._ncall = 1
1837-
1838- def a():
1839- if self._ncall == 1:
1840- b()
1841-
1842- def b():
1843- if self._ncall == 3:
1844- return
1845- self._ncall += 1
1846- b()
1847-
1848- stats = utils.run_and_get_func_stats(a)
1849- fsa = utils.find_stat_by_name(stats, 'a')
1850- fsb = utils.find_stat_by_name(stats, 'b')
1851- cfsab = fsa.children[fsb]
1852- cfsbb = fsb.children[fsb]
1853- self.assertEqual(fsa.ttot, 13)
1854- self.assertEqual(fsa.tsub, 3)
1855- self.assertEqual(fsb.ttot, 10)
1856- self.assertEqual(fsb.tsub, 10)
1857- self.assertEqual(fsb.ncall, 3)
1858- self.assertEqual(fsb.nactualcall, 1)
1859- self.assertEqual(cfsab.ttot, 10)
1860- self.assertEqual(cfsab.tsub, 4)
1861- self.assertEqual(cfsbb.ttot, 6)
1862- self.assertEqual(cfsbb.tsub, 6)
1863- self.assertEqual(cfsbb.nactualcall, 0)
1864- self.assertEqual(cfsbb.ncall, 2)
1865-
1866- def test_aaab(self):
1867- _timings = {"a_1": 13, "a_2": 10, "a_3": 6, "b_1": 1}
1868- _yappi._set_test_timings(_timings)
1869-
1870- self._ncall = 1
1871-
1872- def a():
1873- if self._ncall == 3:
1874- b()
1875- return
1876- self._ncall += 1
1877- a()
1878-
1879- def b():
1880- return
1881-
1882- stats = utils.run_and_get_func_stats(a)
1883- fsa = utils.find_stat_by_name(stats, 'a')
1884- fsb = utils.find_stat_by_name(stats, 'b')
1885- cfsaa = fsa.children[fsa]
1886- cfsab = fsa.children[fsb]
1887- self.assertEqual(fsa.ttot, 13)
1888- self.assertEqual(fsa.tsub, 12)
1889- self.assertEqual(fsb.ttot, 1)
1890- self.assertEqual(fsb.tsub, 1)
1891- self.assertEqual(cfsaa.ttot, 10)
1892- self.assertEqual(cfsaa.tsub, 9)
1893- self.assertEqual(cfsab.ttot, 1)
1894- self.assertEqual(cfsab.tsub, 1)
1895-
1896- def test_abab(self):
1897- _timings = {"a_1": 13, "b_1": 10, "a_2": 6, "b_2": 1}
1898- _yappi._set_test_timings(_timings)
1899-
1900- self._ncall = 1
1901-
1902- def a():
1903- b()
1904-
1905- def b():
1906- if self._ncall == 2:
1907- return
1908- self._ncall += 1
1909- a()
1910-
1911- stats = utils.run_and_get_func_stats(a)
1912- fsa = utils.find_stat_by_name(stats, 'a')
1913- fsb = utils.find_stat_by_name(stats, 'b')
1914- cfsab = fsa.children[fsb]
1915- cfsba = fsb.children[fsa]
1916- self.assertEqual(fsa.ttot, 13)
1917- self.assertEqual(fsa.tsub, 8)
1918- self.assertEqual(fsb.ttot, 10)
1919- self.assertEqual(fsb.tsub, 5)
1920- self.assertEqual(cfsab.ttot, 10)
1921- self.assertEqual(cfsab.tsub, 5)
1922- self.assertEqual(cfsab.ncall, 2)
1923- self.assertEqual(cfsab.nactualcall, 1)
1924- self.assertEqual(cfsba.ttot, 6)
1925- self.assertEqual(cfsba.tsub, 5)
1926-
1927-
1928-if __name__ == '__main__':
1929- # import sys;sys.argv = ['', 'BasicUsage.test_run_as_script']
1930- # import sys;sys.argv = ['', 'MultithreadedScenarios.test_subsequent_profile']
1931- unittest.main()
1932+import os
1933+import sys
1934+import time
1935+import threading
1936+import unittest
1937+import yappi
1938+import _yappi
1939+import utils
1940+import multiprocessing
1941+import subprocess
1942+
1943+_counter = 0
1944+
1945+
1946+class BasicUsage(utils.YappiUnitTestCase):
1947+
1948+ def test_callback_function_int_return_overflow(self):
1949+ # this test is just here to check if any errors are generated, as the err
1950+ # is printed in C side, I did not include it here. THere are ways to test
1951+ # this deterministically, I did not bother
1952+ import ctypes
1953+
1954+ def _unsigned_overflow_margin():
1955+ return 2**(ctypes.sizeof(ctypes.c_void_p) * 8) - 1
1956+
1957+ def foo():
1958+ pass
1959+
1960+ #with utils.captured_output() as (out, err):
1961+ yappi.set_context_id_callback(_unsigned_overflow_margin)
1962+ yappi.set_tag_callback(_unsigned_overflow_margin)
1963+ yappi.start()
1964+ foo()
1965+
1966+ def test_issue60(self):
1967+
1968+ def foo():
1969+ buf = bytearray()
1970+ buf += b't' * 200
1971+ view = memoryview(buf)[10:]
1972+ view = view.tobytes()
1973+ del buf[:10] # this throws exception
1974+ return view
1975+
1976+ yappi.start(builtins=True)
1977+ foo()
1978+ self.assertTrue(
1979+ len(
1980+ yappi.get_func_stats(
1981+ filter_callback=lambda x: yappi.
1982+ func_matches(x, [memoryview.tobytes])
1983+ )
1984+ ) > 0
1985+ )
1986+ yappi.stop()
1987+
1988+ def test_issue54(self):
1989+
1990+ def _tag_cbk():
1991+ global _counter
1992+ _counter += 1
1993+ return _counter
1994+
1995+ def a():
1996+ pass
1997+
1998+ def b():
1999+ pass
2000+
2001+ yappi.set_tag_callback(_tag_cbk)
2002+ yappi.start()
2003+ a()
2004+ a()
2005+ a()
2006+ yappi.stop()
2007+ stats = yappi.get_func_stats()
2008+ self.assertEqual(stats.pop().ncall, 3) # aggregated if no tag is given
2009+ stats = yappi.get_func_stats(tag=1)
2010+
2011+ for i in range(1, 3):
2012+ stats = yappi.get_func_stats(tag=i)
2013+ stats = yappi.get_func_stats(
2014+ tag=i, filter_callback=lambda x: yappi.func_matches(x, [a])
2015+ )
2016+
2017+ stat = stats.pop()
2018+ self.assertEqual(stat.ncall, 1)
2019+
2020+ yappi.set_tag_callback(None)
2021+ yappi.clear_stats()
2022+ yappi.start()
2023+ b()
2024+ b()
2025+ stats = yappi.get_func_stats()
2026+ self.assertEqual(len(stats), 1)
2027+ stat = stats.pop()
2028+ self.assertEqual(stat.ncall, 2)
2029+
2030+ def test_filter(self):
2031+
2032+ def a():
2033+ pass
2034+
2035+ def b():
2036+ a()
2037+
2038+ def c():
2039+ b()
2040+
2041+ _TCOUNT = 5
2042+
2043+ ts = []
2044+ yappi.start()
2045+ for i in range(_TCOUNT):
2046+ t = threading.Thread(target=c)
2047+ t.start()
2048+ ts.append(t)
2049+
2050+ for t in ts:
2051+ t.join()
2052+
2053+ yappi.stop()
2054+
2055+ ctx_ids = []
2056+ for tstat in yappi.get_thread_stats():
2057+ if tstat.name == '_MainThread':
2058+ main_ctx_id = tstat.id
2059+ else:
2060+ ctx_ids.append(tstat.id)
2061+
2062+ fstats = yappi.get_func_stats(filter={"ctx_id": 9})
2063+ self.assertTrue(fstats.empty())
2064+ fstats = yappi.get_func_stats(
2065+ filter={
2066+ "ctx_id": main_ctx_id,
2067+ "name": "c"
2068+ }
2069+ ) # main thread
2070+ self.assertTrue(fstats.empty())
2071+
2072+ for i in ctx_ids:
2073+ fstats = yappi.get_func_stats(
2074+ filter={
2075+ "ctx_id": i,
2076+ "name": "a",
2077+ "ncall": 1
2078+ }
2079+ )
2080+ self.assertEqual(fstats.pop().ncall, 1)
2081+ fstats = yappi.get_func_stats(filter={"ctx_id": i, "name": "b"})
2082+ self.assertEqual(fstats.pop().ncall, 1)
2083+ fstats = yappi.get_func_stats(filter={"ctx_id": i, "name": "c"})
2084+ self.assertEqual(fstats.pop().ncall, 1)
2085+
2086+ yappi.clear_stats()
2087+ yappi.start(builtins=True)
2088+ time.sleep(0.1)
2089+ yappi.stop()
2090+ fstats = yappi.get_func_stats(filter={"module": "time"})
2091+ self.assertEqual(len(fstats), 1)
2092+
2093+ # invalid filters`
2094+ self.assertRaises(
2095+ Exception, yappi.get_func_stats, filter={'tag': "sss"}
2096+ )
2097+ self.assertRaises(
2098+ Exception, yappi.get_func_stats, filter={'ctx_id': "None"}
2099+ )
2100+
2101+ def test_filter_callback(self):
2102+
2103+ def a():
2104+ time.sleep(0.1)
2105+
2106+ def b():
2107+ a()
2108+
2109+ def c():
2110+ pass
2111+
2112+ def d():
2113+ pass
2114+
2115+ yappi.set_clock_type("wall")
2116+ yappi.start(builtins=True)
2117+ a()
2118+ b()
2119+ c()
2120+ d()
2121+ stats = yappi.get_func_stats(
2122+ filter_callback=lambda x: yappi.func_matches(x, [a, b])
2123+ )
2124+ #stats.print_all()
2125+ r1 = '''
2126+ tests/test_functionality.py:98 a 2 0.000000 0.200350 0.100175
2127+ tests/test_functionality.py:101 b 1 0.000000 0.120000 0.100197
2128+ '''
2129+ self.assert_traces_almost_equal(r1, stats)
2130+ self.assertEqual(len(stats), 2)
2131+ stats = yappi.get_func_stats(
2132+ filter_callback=lambda x: yappi.
2133+ module_matches(x, [sys.modules[__name__]])
2134+ )
2135+ r1 = '''
2136+ tests/test_functionality.py:98 a 2 0.000000 0.230130 0.115065
2137+ tests/test_functionality.py:101 b 1 0.000000 0.120000 0.109011
2138+ tests/test_functionality.py:104 c 1 0.000000 0.000002 0.000002
2139+ tests/test_functionality.py:107 d 1 0.000000 0.000001 0.000001
2140+ '''
2141+ self.assert_traces_almost_equal(r1, stats)
2142+ self.assertEqual(len(stats), 4)
2143+
2144+ stats = yappi.get_func_stats(
2145+ filter_callback=lambda x: yappi.func_matches(x, [time.sleep])
2146+ )
2147+ self.assertEqual(len(stats), 1)
2148+ r1 = '''
2149+ time.sleep 2 0.206804 0.220000 0.103402
2150+ '''
2151+ self.assert_traces_almost_equal(r1, stats)
2152+
2153+ def test_print_formatting(self):
2154+
2155+ def a():
2156+ pass
2157+
2158+ def b():
2159+ a()
2160+
2161+ func_cols = {
2162+ 1: ("name", 48),
2163+ 0: ("ncall", 5),
2164+ 2: ("tsub", 8),
2165+ }
2166+ thread_cols = {
2167+ 1: ("name", 48),
2168+ 0: ("ttot", 8),
2169+ }
2170+
2171+ yappi.start()
2172+ a()
2173+ b()
2174+ yappi.stop()
2175+ fs = yappi.get_func_stats()
2176+ cs = fs[1].children
2177+ ts = yappi.get_thread_stats()
2178+ #fs.print_all(out=sys.stderr, columns={1:("name", 70), })
2179+ #cs.print_all(out=sys.stderr, columns=func_cols)
2180+ #ts.print_all(out=sys.stderr, columns=thread_cols)
2181+ #cs.print_all(out=sys.stderr, columns={})
2182+
2183+ self.assertRaises(
2184+ yappi.YappiError, fs.print_all, columns={1: ("namee", 9)}
2185+ )
2186+ self.assertRaises(
2187+ yappi.YappiError, cs.print_all, columns={1: ("dd", 0)}
2188+ )
2189+ self.assertRaises(
2190+ yappi.YappiError, ts.print_all, columns={1: ("tidd", 0)}
2191+ )
2192+
2193+ def test_get_clock(self):
2194+ yappi.set_clock_type('cpu')
2195+ self.assertEqual('cpu', yappi.get_clock_type())
2196+ clock_info = yappi.get_clock_info()
2197+ self.assertTrue('api' in clock_info)
2198+ self.assertTrue('resolution' in clock_info)
2199+
2200+ yappi.set_clock_type('wall')
2201+ self.assertEqual('wall', yappi.get_clock_type())
2202+
2203+ t0 = yappi.get_clock_time()
2204+ time.sleep(0.1)
2205+ duration = yappi.get_clock_time() - t0
2206+ self.assertTrue(0.05 < duration < 0.3)
2207+
2208+ def test_profile_decorator(self):
2209+
2210+ def aggregate(func, stats):
2211+ fname = f"tests/{func.__name__}.profile"
2212+ try:
2213+ stats.add(fname)
2214+ except OSError:
2215+ pass
2216+ stats.save(fname)
2217+ raise Exception("messing around")
2218+
2219+ @yappi.profile(return_callback=aggregate)
2220+ def a(x, y):
2221+ if x + y == 25:
2222+ raise Exception("")
2223+ return x + y
2224+
2225+ def b():
2226+ pass
2227+
2228+ try:
2229+ os.remove(
2230+ "tests/a.profile"
2231+ ) # remove the one from prev test, if available
2232+ except:
2233+ pass
2234+
2235+ # global profile is on to mess things up
2236+ yappi.start()
2237+ b()
2238+
2239+ # assert functionality and call function at same time
2240+ try:
2241+ self.assertEqual(a(1, 2), 3)
2242+ except:
2243+ pass
2244+ try:
2245+ self.assertEqual(a(2, 5), 7)
2246+ except:
2247+ pass
2248+ try:
2249+ a(4, 21)
2250+ except:
2251+ pass
2252+ stats = yappi.get_func_stats().add("tests/a.profile")
2253+ fsa = utils.find_stat_by_name(stats, 'a')
2254+ self.assertEqual(fsa.ncall, 3)
2255+ self.assertEqual(len(stats), 1) # b() should be cleared out.
2256+
2257+ @yappi.profile(return_callback=aggregate)
2258+ def count_down_rec(n):
2259+ if n == 0:
2260+ return
2261+ count_down_rec(n - 1)
2262+
2263+ try:
2264+ os.remove(
2265+ "tests/count_down_rec.profile"
2266+ ) # remove the one from prev test, if available
2267+ except:
2268+ pass
2269+
2270+ try:
2271+ count_down_rec(4)
2272+ except:
2273+ pass
2274+ try:
2275+ count_down_rec(3)
2276+ except:
2277+ pass
2278+
2279+ stats = yappi.YFuncStats("tests/count_down_rec.profile")
2280+ fsrec = utils.find_stat_by_name(stats, 'count_down_rec')
2281+ self.assertEqual(fsrec.ncall, 9)
2282+ self.assertEqual(fsrec.nactualcall, 2)
2283+
2284+ def test_strip_dirs(self):
2285+
2286+ def a():
2287+ pass
2288+
2289+ stats = utils.run_and_get_func_stats(a, )
2290+ stats.strip_dirs()
2291+ fsa = utils.find_stat_by_name(stats, "a")
2292+ self.assertEqual(fsa.module, os.path.basename(fsa.module))
2293+
2294+ @unittest.skipIf(os.name == "nt", "do not run on Windows")
2295+ def test_run_as_script(self):
2296+ import re
2297+ p = subprocess.Popen(
2298+ ['yappi', os.path.join('./tests', 'run_as_script.py')],
2299+ stdout=subprocess.PIPE
2300+ )
2301+ out, err = p.communicate()
2302+ self.assertEqual(p.returncode, 0)
2303+ func_stats, thread_stats = re.split(
2304+ b'name\\s+id\\s+tid\\s+ttot\\s+scnt\\s*\n', out
2305+ )
2306+ self.assertTrue(b'FancyThread' in thread_stats)
2307+
2308+ def test_yappi_overhead(self):
2309+ LOOP_COUNT = 100000
2310+
2311+ def a():
2312+ pass
2313+
2314+ def b():
2315+ for i in range(LOOP_COUNT):
2316+ a()
2317+
2318+ t0 = time.time()
2319+ yappi.start()
2320+ b()
2321+ yappi.stop()
2322+ time_with_yappi = time.time() - t0
2323+ t0 = time.time()
2324+ b()
2325+ time_without_yappi = time.time() - t0
2326+ if time_without_yappi == 0:
2327+ time_without_yappi = 0.000001
2328+
2329+ # in latest v0.82, I calculated this as close to "7.0" in my machine.
2330+ # however, %83 of this overhead is coming from tickcount(). The other %17
2331+ # seems to have been evenly distributed to the internal bookkeeping
2332+ # structures/algorithms which seems acceptable. Note that our test only
2333+ # tests one function being profiled at-a-time in a short interval.
2334+ # profiling high number of functions in a small time
2335+ # is a different beast, (which is pretty unlikely in most applications)
2336+ # So as a conclusion: I cannot see any optimization window for Yappi that
2337+ # is worth implementing as we will only optimize %17 of the time.
2338+ sys.stderr.write("\r\nYappi puts %0.1f times overhead to the profiled application in average.\r\n" % \
2339+ (time_with_yappi / time_without_yappi))
2340+
2341+ def test_clear_stats_while_running(self):
2342+
2343+ def a():
2344+ pass
2345+
2346+ yappi.start()
2347+ a()
2348+ yappi.clear_stats()
2349+ a()
2350+ stats = yappi.get_func_stats()
2351+ fsa = utils.find_stat_by_name(stats, 'a')
2352+ self.assertEqual(fsa.ncall, 1)
2353+
2354+ def test_generator(self):
2355+
2356+ def _gen(n):
2357+ while (n > 0):
2358+ yield n
2359+ n -= 1
2360+
2361+ yappi.start()
2362+ for x in _gen(5):
2363+ pass
2364+ self.assertTrue(
2365+ yappi.convert2pstats(yappi.get_func_stats()) is not None
2366+ )
2367+
2368+ def test_slice_child_stats_and_strip_dirs(self):
2369+
2370+ def b():
2371+ for i in range(10000000):
2372+ pass
2373+
2374+ def a():
2375+ b()
2376+
2377+ yappi.start(builtins=True)
2378+ a()
2379+ stats = yappi.get_func_stats()
2380+ fsa = utils.find_stat_by_name(stats, 'a')
2381+ fsb = utils.find_stat_by_name(stats, 'b')
2382+ self.assertTrue(fsa.children[0:1] is not None)
2383+ prev_afullname = fsa.full_name
2384+ prev_bchildfullname = fsa.children[fsb].full_name
2385+ stats.strip_dirs()
2386+ self.assertTrue(len(prev_afullname) > len(fsa.full_name))
2387+ self.assertTrue(
2388+ len(prev_bchildfullname) > len(fsa.children[fsb].full_name)
2389+ )
2390+
2391+ def test_children_stat_functions(self):
2392+ _timings = {"a_1": 5, "b_1": 3, "c_1": 1}
2393+ _yappi._set_test_timings(_timings)
2394+
2395+ def b():
2396+ pass
2397+
2398+ def c():
2399+ pass
2400+
2401+ def a():
2402+ b()
2403+ c()
2404+
2405+ yappi.start()
2406+ a()
2407+ b() # non-child call
2408+ c() # non-child call
2409+ stats = yappi.get_func_stats()
2410+ fsa = utils.find_stat_by_name(stats, 'a')
2411+ childs_of_a = fsa.children.get().sort("tavg", "desc")
2412+ prev_item = None
2413+ for item in childs_of_a:
2414+ if prev_item:
2415+ self.assertTrue(prev_item.tavg > item.tavg)
2416+ prev_item = item
2417+ childs_of_a.sort("name", "desc")
2418+ prev_item = None
2419+ for item in childs_of_a:
2420+ if prev_item:
2421+ self.assertTrue(prev_item.name > item.name)
2422+ prev_item = item
2423+ childs_of_a.clear()
2424+ self.assertTrue(childs_of_a.empty())
2425+
2426+ def test_no_stats_different_clock_type_load(self):
2427+
2428+ def a():
2429+ pass
2430+
2431+ yappi.start()
2432+ a()
2433+ yappi.stop()
2434+ yappi.get_func_stats().save("tests/ystats1.ys")
2435+ yappi.clear_stats()
2436+ yappi.set_clock_type("WALL")
2437+ yappi.start()
2438+ yappi.stop()
2439+ stats = yappi.get_func_stats().add("tests/ystats1.ys")
2440+ fsa = utils.find_stat_by_name(stats, 'a')
2441+ self.assertTrue(fsa is not None)
2442+
2443+ def test_subsequent_profile(self):
2444+ _timings = {"a_1": 1, "b_1": 1}
2445+ _yappi._set_test_timings(_timings)
2446+
2447+ def a():
2448+ pass
2449+
2450+ def b():
2451+ pass
2452+
2453+ yappi.start()
2454+ a()
2455+ yappi.stop()
2456+ yappi.start()
2457+ b()
2458+ yappi.stop()
2459+ stats = yappi.get_func_stats()
2460+ fsa = utils.find_stat_by_name(stats, 'a')
2461+ fsb = utils.find_stat_by_name(stats, 'b')
2462+ self.assertTrue(fsa is not None)
2463+ self.assertTrue(fsb is not None)
2464+ self.assertEqual(fsa.ttot, 1)
2465+ self.assertEqual(fsb.ttot, 1)
2466+
2467+ def test_lambda(self):
2468+ f = lambda: time.sleep(0.3)
2469+ yappi.set_clock_type("wall")
2470+ yappi.start()
2471+ f()
2472+ stats = yappi.get_func_stats()
2473+ fsa = utils.find_stat_by_name(stats, '<lambda>')
2474+ self.assertTrue(fsa.ttot > 0.1)
2475+
2476+ def test_module_stress(self):
2477+ self.assertEqual(yappi.is_running(), False)
2478+
2479+ yappi.start()
2480+ yappi.clear_stats()
2481+ self.assertRaises(_yappi.error, yappi.set_clock_type, "wall")
2482+
2483+ yappi.stop()
2484+ yappi.clear_stats()
2485+ yappi.set_clock_type("cpu")
2486+ self.assertRaises(yappi.YappiError, yappi.set_clock_type, "dummy")
2487+ self.assertEqual(yappi.is_running(), False)
2488+ yappi.clear_stats()
2489+ yappi.clear_stats()
2490+
2491+ def test_stat_sorting(self):
2492+ _timings = {"a_1": 13, "b_1": 10, "a_2": 6, "b_2": 1}
2493+ _yappi._set_test_timings(_timings)
2494+
2495+ self._ncall = 1
2496+
2497+ def a():
2498+ b()
2499+
2500+ def b():
2501+ if self._ncall == 2:
2502+ return
2503+ self._ncall += 1
2504+ a()
2505+
2506+ stats = utils.run_and_get_func_stats(a)
2507+ stats = stats.sort("totaltime", "desc")
2508+ prev_stat = None
2509+ for stat in stats:
2510+ if prev_stat:
2511+ self.assertTrue(prev_stat.ttot >= stat.ttot)
2512+ prev_stat = stat
2513+ stats = stats.sort("totaltime", "asc")
2514+ prev_stat = None
2515+ for stat in stats:
2516+ if prev_stat:
2517+ self.assertTrue(prev_stat.ttot <= stat.ttot)
2518+ prev_stat = stat
2519+ stats = stats.sort("avgtime", "asc")
2520+ prev_stat = None
2521+ for stat in stats:
2522+ if prev_stat:
2523+ self.assertTrue(prev_stat.tavg <= stat.tavg)
2524+ prev_stat = stat
2525+ stats = stats.sort("name", "asc")
2526+ prev_stat = None
2527+ for stat in stats:
2528+ if prev_stat:
2529+ self.assertTrue(prev_stat.name <= stat.name)
2530+ prev_stat = stat
2531+ stats = stats.sort("subtime", "asc")
2532+ prev_stat = None
2533+ for stat in stats:
2534+ if prev_stat:
2535+ self.assertTrue(prev_stat.tsub <= stat.tsub)
2536+ prev_stat = stat
2537+
2538+ self.assertRaises(
2539+ yappi.YappiError, stats.sort, "invalid_func_sorttype_arg"
2540+ )
2541+ self.assertRaises(
2542+ yappi.YappiError, stats.sort, "totaltime",
2543+ "invalid_func_sortorder_arg"
2544+ )
2545+
2546+ def test_start_flags(self):
2547+ self.assertEqual(_yappi._get_start_flags(), None)
2548+ yappi.start()
2549+
2550+ def a():
2551+ pass
2552+
2553+ a()
2554+ self.assertEqual(_yappi._get_start_flags()["profile_builtins"], 0)
2555+ self.assertEqual(_yappi._get_start_flags()["profile_multicontext"], 1)
2556+ self.assertEqual(len(yappi.get_thread_stats()), 1)
2557+
2558+ def test_builtin_profiling(self):
2559+
2560+ def a():
2561+ time.sleep(0.4) # is a builtin function
2562+
2563+ yappi.set_clock_type('wall')
2564+
2565+ yappi.start(builtins=True)
2566+ a()
2567+ stats = yappi.get_func_stats()
2568+ fsa = utils.find_stat_by_name(stats, 'sleep')
2569+ self.assertTrue(fsa is not None)
2570+ self.assertTrue(fsa.ttot > 0.3)
2571+ yappi.stop()
2572+ yappi.clear_stats()
2573+
2574+ def a():
2575+ pass
2576+
2577+ yappi.start()
2578+ t = threading.Thread(target=a)
2579+ t.start()
2580+ t.join()
2581+ stats = yappi.get_func_stats()
2582+
2583+ def test_singlethread_profiling(self):
2584+ yappi.set_clock_type('wall')
2585+
2586+ def a():
2587+ time.sleep(0.2)
2588+
2589+ class Worker1(threading.Thread):
2590+
2591+ def a(self):
2592+ time.sleep(0.3)
2593+
2594+ def run(self):
2595+ self.a()
2596+
2597+ yappi.start(profile_threads=False)
2598+
2599+ c = Worker1()
2600+ c.start()
2601+ c.join()
2602+ a()
2603+ stats = yappi.get_func_stats()
2604+ fsa1 = utils.find_stat_by_name(stats, 'Worker1.a')
2605+ fsa2 = utils.find_stat_by_name(stats, 'a')
2606+ self.assertTrue(fsa1 is None)
2607+ self.assertTrue(fsa2 is not None)
2608+ self.assertTrue(fsa2.ttot > 0.1)
2609+
2610+ def test_run(self):
2611+
2612+ def profiled():
2613+ pass
2614+
2615+ yappi.clear_stats()
2616+ try:
2617+ with yappi.run():
2618+ profiled()
2619+ stats = yappi.get_func_stats()
2620+ finally:
2621+ yappi.clear_stats()
2622+
2623+ self.assertIsNotNone(utils.find_stat_by_name(stats, 'profiled'))
2624+
2625+ def test_run_recursive(self):
2626+
2627+ def profiled():
2628+ pass
2629+
2630+ def not_profiled():
2631+ pass
2632+
2633+ yappi.clear_stats()
2634+ try:
2635+ with yappi.run():
2636+ with yappi.run():
2637+ profiled()
2638+ # Profiling stopped here
2639+ not_profiled()
2640+ stats = yappi.get_func_stats()
2641+ finally:
2642+ yappi.clear_stats()
2643+
2644+ self.assertIsNotNone(utils.find_stat_by_name(stats, 'profiled'))
2645+ self.assertIsNone(utils.find_stat_by_name(stats, 'not_profiled'))
2646+
2647+
2648+class StatSaveScenarios(utils.YappiUnitTestCase):
2649+
2650+ def test_pstats_conversion(self):
2651+
2652+ def pstat_id(fs):
2653+ return (fs.module, fs.lineno, fs.name)
2654+
2655+ def a():
2656+ d()
2657+
2658+ def b():
2659+ d()
2660+
2661+ def c():
2662+ pass
2663+
2664+ def d():
2665+ pass
2666+
2667+ _timings = {"a_1": 12, "b_1": 7, "c_1": 5, "d_1": 2}
2668+ _yappi._set_test_timings(_timings)
2669+ stats = utils.run_and_get_func_stats(a, )
2670+ stats.strip_dirs()
2671+ stats.save("tests/a1.pstats", type="pstat")
2672+ fsa_pid = pstat_id(utils.find_stat_by_name(stats, "a"))
2673+ fsd_pid = pstat_id(utils.find_stat_by_name(stats, "d"))
2674+ yappi.clear_stats()
2675+ _yappi._set_test_timings(_timings)
2676+ stats = utils.run_and_get_func_stats(a, )
2677+ stats.strip_dirs()
2678+ stats.save("tests/a2.pstats", type="pstat")
2679+ yappi.clear_stats()
2680+ _yappi._set_test_timings(_timings)
2681+ stats = utils.run_and_get_func_stats(b, )
2682+ stats.strip_dirs()
2683+ stats.save("tests/b1.pstats", type="pstat")
2684+ fsb_pid = pstat_id(utils.find_stat_by_name(stats, "b"))
2685+ yappi.clear_stats()
2686+ _yappi._set_test_timings(_timings)
2687+ stats = utils.run_and_get_func_stats(c, )
2688+ stats.strip_dirs()
2689+ stats.save("tests/c1.pstats", type="pstat")
2690+ fsc_pid = pstat_id(utils.find_stat_by_name(stats, "c"))
2691+
2692+ # merge saved stats and check pstats values are correct
2693+ import pstats
2694+ p = pstats.Stats(
2695+ 'tests/a1.pstats', 'tests/a2.pstats', 'tests/b1.pstats',
2696+ 'tests/c1.pstats'
2697+ )
2698+ p.strip_dirs()
2699+ # ct = ttot, tt = tsub
2700+ (cc, nc, tt, ct, callers) = p.stats[fsa_pid]
2701+ self.assertEqual(cc, nc, 2)
2702+ self.assertEqual(tt, 20)
2703+ self.assertEqual(ct, 24)
2704+ (cc, nc, tt, ct, callers) = p.stats[fsd_pid]
2705+ self.assertEqual(cc, nc, 3)
2706+ self.assertEqual(tt, 6)
2707+ self.assertEqual(ct, 6)
2708+ self.assertEqual(len(callers), 2)
2709+ (cc, nc, tt, ct) = callers[fsa_pid]
2710+ self.assertEqual(cc, nc, 2)
2711+ self.assertEqual(tt, 4)
2712+ self.assertEqual(ct, 4)
2713+ (cc, nc, tt, ct) = callers[fsb_pid]
2714+ self.assertEqual(cc, nc, 1)
2715+ self.assertEqual(tt, 2)
2716+ self.assertEqual(ct, 2)
2717+
2718+ def test_merge_stats(self):
2719+ _timings = {
2720+ "a_1": 15,
2721+ "b_1": 14,
2722+ "c_1": 12,
2723+ "d_1": 10,
2724+ "e_1": 9,
2725+ "f_1": 7,
2726+ "g_1": 6,
2727+ "h_1": 5,
2728+ "i_1": 1
2729+ }
2730+ _yappi._set_test_timings(_timings)
2731+
2732+ def a():
2733+ b()
2734+
2735+ def b():
2736+ c()
2737+
2738+ def c():
2739+ d()
2740+
2741+ def d():
2742+ e()
2743+
2744+ def e():
2745+ f()
2746+
2747+ def f():
2748+ g()
2749+
2750+ def g():
2751+ h()
2752+
2753+ def h():
2754+ i()
2755+
2756+ def i():
2757+ pass
2758+
2759+ yappi.start()
2760+ a()
2761+ a()
2762+ yappi.stop()
2763+ stats = yappi.get_func_stats()
2764+ self.assertRaises(
2765+ NotImplementedError, stats.save, "", "INVALID_SAVE_TYPE"
2766+ )
2767+ stats.save("tests/ystats2.ys")
2768+ yappi.clear_stats()
2769+ _yappi._set_test_timings(_timings)
2770+ yappi.start()
2771+ a()
2772+ stats = yappi.get_func_stats().add("tests/ystats2.ys")
2773+ fsa = utils.find_stat_by_name(stats, "a")
2774+ fsb = utils.find_stat_by_name(stats, "b")
2775+ fsc = utils.find_stat_by_name(stats, "c")
2776+ fsd = utils.find_stat_by_name(stats, "d")
2777+ fse = utils.find_stat_by_name(stats, "e")
2778+ fsf = utils.find_stat_by_name(stats, "f")
2779+ fsg = utils.find_stat_by_name(stats, "g")
2780+ fsh = utils.find_stat_by_name(stats, "h")
2781+ fsi = utils.find_stat_by_name(stats, "i")
2782+ self.assertEqual(fsa.ttot, 45)
2783+ self.assertEqual(fsa.ncall, 3)
2784+ self.assertEqual(fsa.nactualcall, 3)
2785+ self.assertEqual(fsa.tsub, 3)
2786+ self.assertEqual(fsa.children[fsb].ttot, fsb.ttot)
2787+ self.assertEqual(fsa.children[fsb].tsub, fsb.tsub)
2788+ self.assertEqual(fsb.children[fsc].ttot, fsc.ttot)
2789+ self.assertEqual(fsb.children[fsc].tsub, fsc.tsub)
2790+ self.assertEqual(fsc.tsub, 6)
2791+ self.assertEqual(fsc.children[fsd].ttot, fsd.ttot)
2792+ self.assertEqual(fsc.children[fsd].tsub, fsd.tsub)
2793+ self.assertEqual(fsd.children[fse].ttot, fse.ttot)
2794+ self.assertEqual(fsd.children[fse].tsub, fse.tsub)
2795+ self.assertEqual(fse.children[fsf].ttot, fsf.ttot)
2796+ self.assertEqual(fse.children[fsf].tsub, fsf.tsub)
2797+ self.assertEqual(fsf.children[fsg].ttot, fsg.ttot)
2798+ self.assertEqual(fsf.children[fsg].tsub, fsg.tsub)
2799+ self.assertEqual(fsg.ttot, 18)
2800+ self.assertEqual(fsg.tsub, 3)
2801+ self.assertEqual(fsg.children[fsh].ttot, fsh.ttot)
2802+ self.assertEqual(fsg.children[fsh].tsub, fsh.tsub)
2803+ self.assertEqual(fsh.ttot, 15)
2804+ self.assertEqual(fsh.tsub, 12)
2805+ self.assertEqual(fsh.tavg, 5)
2806+ self.assertEqual(fsh.children[fsi].ttot, fsi.ttot)
2807+ self.assertEqual(fsh.children[fsi].tsub, fsi.tsub)
2808+ #stats.debug_print()
2809+
2810+ def test_merge_multithreaded_stats(self):
2811+ import _yappi
2812+ timings = {"a_1": 2, "b_1": 1}
2813+ _yappi._set_test_timings(timings)
2814+
2815+ def a():
2816+ pass
2817+
2818+ def b():
2819+ pass
2820+
2821+ yappi.start()
2822+ t = threading.Thread(target=a)
2823+ t.start()
2824+ t.join()
2825+ t = threading.Thread(target=b)
2826+ t.start()
2827+ t.join()
2828+ yappi.get_func_stats().save("tests/ystats1.ys")
2829+ yappi.clear_stats()
2830+ _yappi._set_test_timings(timings)
2831+ self.assertEqual(len(yappi.get_func_stats()), 0)
2832+ self.assertEqual(len(yappi.get_thread_stats()), 1)
2833+ t = threading.Thread(target=a)
2834+ t.start()
2835+ t.join()
2836+
2837+ self.assertEqual(_yappi._get_start_flags()["profile_builtins"], 0)
2838+ self.assertEqual(_yappi._get_start_flags()["profile_multicontext"], 1)
2839+ yappi.get_func_stats().save("tests/ystats2.ys")
2840+
2841+ stats = yappi.YFuncStats([
2842+ "tests/ystats1.ys",
2843+ "tests/ystats2.ys",
2844+ ])
2845+ fsa = utils.find_stat_by_name(stats, "a")
2846+ fsb = utils.find_stat_by_name(stats, "b")
2847+ self.assertEqual(fsa.ncall, 2)
2848+ self.assertEqual(fsb.ncall, 1)
2849+ self.assertEqual(fsa.tsub, fsa.ttot, 4)
2850+ self.assertEqual(fsb.tsub, fsb.ttot, 1)
2851+
2852+ def test_merge_load_different_clock_types(self):
2853+ yappi.start(builtins=True)
2854+
2855+ def a():
2856+ b()
2857+
2858+ def b():
2859+ c()
2860+
2861+ def c():
2862+ pass
2863+
2864+ t = threading.Thread(target=a)
2865+ t.start()
2866+ t.join()
2867+ yappi.get_func_stats().sort("name", "asc").save("tests/ystats1.ys")
2868+ yappi.stop()
2869+ yappi.clear_stats()
2870+ yappi.start(builtins=False)
2871+ t = threading.Thread(target=a)
2872+ t.start()
2873+ t.join()
2874+ yappi.get_func_stats().save("tests/ystats2.ys")
2875+ yappi.stop()
2876+ self.assertRaises(_yappi.error, yappi.set_clock_type, "wall")
2877+ yappi.clear_stats()
2878+ yappi.set_clock_type("wall")
2879+ yappi.start()
2880+ t = threading.Thread(target=a)
2881+ t.start()
2882+ t.join()
2883+ yappi.get_func_stats().save("tests/ystats3.ys")
2884+ self.assertRaises(
2885+ yappi.YappiError,
2886+ yappi.YFuncStats().add("tests/ystats1.ys").add, "tests/ystats3.ys"
2887+ )
2888+ stats = yappi.YFuncStats(["tests/ystats1.ys",
2889+ "tests/ystats2.ys"]).sort("name")
2890+ fsa = utils.find_stat_by_name(stats, "a")
2891+ fsb = utils.find_stat_by_name(stats, "b")
2892+ fsc = utils.find_stat_by_name(stats, "c")
2893+ self.assertEqual(fsa.ncall, 2)
2894+ self.assertEqual(fsa.ncall, fsb.ncall, fsc.ncall)
2895+
2896+ def test_merge_aabab_aabbc(self):
2897+ _timings = {
2898+ "a_1": 15,
2899+ "a_2": 14,
2900+ "b_1": 12,
2901+ "a_3": 10,
2902+ "b_2": 9,
2903+ "c_1": 4
2904+ }
2905+ _yappi._set_test_timings(_timings)
2906+
2907+ def a():
2908+ if self._ncall == 1:
2909+ self._ncall += 1
2910+ a()
2911+ elif self._ncall == 5:
2912+ self._ncall += 1
2913+ a()
2914+ else:
2915+ b()
2916+
2917+ def b():
2918+ if self._ncall == 2:
2919+ self._ncall += 1
2920+ a()
2921+ elif self._ncall == 6:
2922+ self._ncall += 1
2923+ b()
2924+ elif self._ncall == 7:
2925+ c()
2926+ else:
2927+ return
2928+
2929+ def c():
2930+ pass
2931+
2932+ self._ncall = 1
2933+ stats = utils.run_and_get_func_stats(a, )
2934+ stats.save("tests/ystats1.ys")
2935+ yappi.clear_stats()
2936+ _yappi._set_test_timings(_timings)
2937+ #stats.print_all()
2938+
2939+ self._ncall = 5
2940+ stats = utils.run_and_get_func_stats(a, )
2941+ stats.save("tests/ystats2.ys")
2942+
2943+ #stats.print_all()
2944+
2945+ def a(): # same name but another function(code object)
2946+ pass
2947+
2948+ yappi.start()
2949+ a()
2950+ stats = yappi.get_func_stats().add(
2951+ ["tests/ystats1.ys", "tests/ystats2.ys"]
2952+ )
2953+ #stats.print_all()
2954+ self.assertEqual(len(stats), 4)
2955+
2956+ fsa = None
2957+ for stat in stats:
2958+ if stat.name == "a" and stat.ttot == 45:
2959+ fsa = stat
2960+ break
2961+ self.assertTrue(fsa is not None)
2962+
2963+ self.assertEqual(fsa.ncall, 7)
2964+ self.assertEqual(fsa.nactualcall, 3)
2965+ self.assertEqual(fsa.ttot, 45)
2966+ self.assertEqual(fsa.tsub, 10)
2967+ fsb = utils.find_stat_by_name(stats, "b")
2968+ fsc = utils.find_stat_by_name(stats, "c")
2969+ self.assertEqual(fsb.ncall, 6)
2970+ self.assertEqual(fsb.nactualcall, 3)
2971+ self.assertEqual(fsb.ttot, 36)
2972+ self.assertEqual(fsb.tsub, 27)
2973+ self.assertEqual(fsb.tavg, 6)
2974+ self.assertEqual(fsc.ttot, 8)
2975+ self.assertEqual(fsc.tsub, 8)
2976+ self.assertEqual(fsc.tavg, 4)
2977+ self.assertEqual(fsc.nactualcall, fsc.ncall, 2)
2978+
2979+
2980+class MultithreadedScenarios(utils.YappiUnitTestCase):
2981+
2982+ def test_issue_32(self):
2983+ '''
2984+ Start yappi from different thread and we get Internal Error(15) as
2985+ the current_ctx_id() called while enumerating the threads in start()
2986+ and as it does not swap to the enumerated ThreadState* the THreadState_GetDict()
2987+ returns wrong object and thus sets an invalid id for the _ctx structure.
2988+
2989+ When this issue happens multiple Threads have same tid as the internal ts_ptr
2990+ will be same for different contexts. So, let's see if that happens
2991+ '''
2992+
2993+ def foo():
2994+ time.sleep(0.2)
2995+
2996+ def bar():
2997+ time.sleep(0.1)
2998+
2999+ def thread_func():
3000+ yappi.set_clock_type("wall")
3001+ yappi.start()
3002+
3003+ bar()
3004+
3005+ t = threading.Thread(target=thread_func)
3006+ t.start()
3007+ t.join()
3008+
3009+ foo()
3010+
3011+ yappi.stop()
3012+
3013+ thread_ids = set()
3014+ for tstat in yappi.get_thread_stats():
3015+ self.assertTrue(tstat.tid not in thread_ids)
3016+ thread_ids.add(tstat.tid)
3017+
3018+ def test_subsequent_profile(self):
3019+ WORKER_COUNT = 5
3020+
3021+ def a():
3022+ pass
3023+
3024+ def b():
3025+ pass
3026+
3027+ def c():
3028+ pass
3029+
3030+ _timings = {
3031+ "a_1": 3,
3032+ "b_1": 2,
3033+ "c_1": 1,
3034+ }
3035+
3036+ yappi.start()
3037+
3038+ def g():
3039+ pass
3040+
3041+ g()
3042+ yappi.stop()
3043+ yappi.clear_stats()
3044+ _yappi._set_test_timings(_timings)
3045+ yappi.start()
3046+
3047+ _dummy = []
3048+ for i in range(WORKER_COUNT):
3049+ t = threading.Thread(target=a)
3050+ t.start()
3051+ t.join()
3052+ for i in range(WORKER_COUNT):
3053+ t = threading.Thread(target=b)
3054+ t.start()
3055+ _dummy.append(t)
3056+ t.join()
3057+ for i in range(WORKER_COUNT):
3058+ t = threading.Thread(target=a)
3059+ t.start()
3060+ t.join()
3061+ for i in range(WORKER_COUNT):
3062+ t = threading.Thread(target=c)
3063+ t.start()
3064+ t.join()
3065+ yappi.stop()
3066+ yappi.start()
3067+
3068+ def f():
3069+ pass
3070+
3071+ f()
3072+ stats = yappi.get_func_stats()
3073+ fsa = utils.find_stat_by_name(stats, 'a')
3074+ fsb = utils.find_stat_by_name(stats, 'b')
3075+ fsc = utils.find_stat_by_name(stats, 'c')
3076+ self.assertEqual(fsa.ncall, 10)
3077+ self.assertEqual(fsb.ncall, 5)
3078+ self.assertEqual(fsc.ncall, 5)
3079+ self.assertEqual(fsa.ttot, fsa.tsub, 30)
3080+ self.assertEqual(fsb.ttot, fsb.tsub, 10)
3081+ self.assertEqual(fsc.ttot, fsc.tsub, 5)
3082+
3083+ # MACOSx optimizes by only creating one worker thread
3084+ self.assertTrue(len(yappi.get_thread_stats()) >= 2)
3085+
3086+ def test_basic(self):
3087+ yappi.set_clock_type('wall')
3088+
3089+ def dummy():
3090+ pass
3091+
3092+ def a():
3093+ time.sleep(0.2)
3094+
3095+ class Worker1(threading.Thread):
3096+
3097+ def a(self):
3098+ time.sleep(0.3)
3099+
3100+ def run(self):
3101+ self.a()
3102+
3103+ yappi.start(builtins=False, profile_threads=True)
3104+
3105+ c = Worker1()
3106+ c.start()
3107+ c.join()
3108+ a()
3109+ stats = yappi.get_func_stats()
3110+ fsa1 = utils.find_stat_by_name(stats, 'Worker1.a')
3111+ fsa2 = utils.find_stat_by_name(stats, 'a')
3112+ self.assertTrue(fsa1 is not None)
3113+ self.assertTrue(fsa2 is not None)
3114+ self.assertTrue(fsa1.ttot > 0.2)
3115+ self.assertTrue(fsa2.ttot > 0.1)
3116+ tstats = yappi.get_thread_stats()
3117+ self.assertEqual(len(tstats), 2)
3118+ tsa = utils.find_stat_by_name(tstats, 'Worker1')
3119+ tsm = utils.find_stat_by_name(tstats, '_MainThread')
3120+ dummy() # call dummy to force ctx name to be retrieved again.
3121+ self.assertTrue(tsa is not None)
3122+ # TODO: I put dummy() to fix below, remove the comments after a while.
3123+ self.assertTrue( # FIX: I see this fails sometimes?
3124+ tsm is not None,
3125+ f"Could not find \"_MainThread\". Found: {', '.join(utils.get_stat_names(tstats))}")
3126+
3127+ def test_ctx_stats(self):
3128+ from threading import Thread
3129+ DUMMY_WORKER_COUNT = 5
3130+ yappi.start()
3131+
3132+ class DummyThread(Thread):
3133+ pass
3134+
3135+ def dummy():
3136+ pass
3137+
3138+ def dummy_worker():
3139+ pass
3140+
3141+ for i in range(DUMMY_WORKER_COUNT):
3142+ t = DummyThread(target=dummy_worker)
3143+ t.start()
3144+ t.join()
3145+ yappi.stop()
3146+ stats = yappi.get_thread_stats()
3147+ tsa = utils.find_stat_by_name(stats, "DummyThread")
3148+ self.assertTrue(tsa is not None)
3149+ yappi.clear_stats()
3150+ time.sleep(1.0)
3151+ _timings = {
3152+ "a_1": 6,
3153+ "b_1": 5,
3154+ "c_1": 3,
3155+ "d_1": 1,
3156+ "a_2": 4,
3157+ "b_2": 3,
3158+ "c_2": 2,
3159+ "d_2": 1
3160+ }
3161+ _yappi._set_test_timings(_timings)
3162+
3163+ class Thread1(Thread):
3164+ pass
3165+
3166+ class Thread2(Thread):
3167+ pass
3168+
3169+ def a():
3170+ b()
3171+
3172+ def b():
3173+ c()
3174+
3175+ def c():
3176+ d()
3177+
3178+ def d():
3179+ time.sleep(0.6)
3180+
3181+ yappi.set_clock_type("wall")
3182+ yappi.start()
3183+ t1 = Thread1(target=a)
3184+ t1.start()
3185+ t2 = Thread2(target=a)
3186+ t2.start()
3187+ t1.join()
3188+ t2.join()
3189+ stats = yappi.get_thread_stats()
3190+
3191+ # the fist clear_stats clears the context table?
3192+ tsa = utils.find_stat_by_name(stats, "DummyThread")
3193+ self.assertTrue(tsa is None)
3194+
3195+ tst1 = utils.find_stat_by_name(stats, "Thread1")
3196+ tst2 = utils.find_stat_by_name(stats, "Thread2")
3197+ tsmain = utils.find_stat_by_name(stats, "_MainThread")
3198+ dummy() # call dummy to force ctx name to be retrieved again.
3199+ self.assertTrue(len(stats) == 3)
3200+ self.assertTrue(tst1 is not None)
3201+ self.assertTrue(tst2 is not None)
3202+ # TODO: I put dummy() to fix below, remove the comments after a while.
3203+ self.assertTrue( # FIX: I see this fails sometimes
3204+ tsmain is not None,
3205+ f"Could not find \"_MainThread\". Found: {', '.join(utils.get_stat_names(stats))}")
3206+ self.assertTrue(1.0 > tst2.ttot >= 0.5)
3207+ self.assertTrue(1.0 > tst1.ttot >= 0.5)
3208+
3209+ # test sorting of the ctx stats
3210+ stats = stats.sort("totaltime", "desc")
3211+ prev_stat = None
3212+ for stat in stats:
3213+ if prev_stat:
3214+ self.assertTrue(prev_stat.ttot >= stat.ttot)
3215+ prev_stat = stat
3216+ stats = stats.sort("totaltime", "asc")
3217+ prev_stat = None
3218+ for stat in stats:
3219+ if prev_stat:
3220+ self.assertTrue(prev_stat.ttot <= stat.ttot)
3221+ prev_stat = stat
3222+ stats = stats.sort("schedcount", "desc")
3223+ prev_stat = None
3224+ for stat in stats:
3225+ if prev_stat:
3226+ self.assertTrue(prev_stat.sched_count >= stat.sched_count)
3227+ prev_stat = stat
3228+ stats = stats.sort("name", "desc")
3229+ prev_stat = None
3230+ for stat in stats:
3231+ if prev_stat:
3232+ self.assertTrue(prev_stat.name.lower() >= stat.name.lower())
3233+ prev_stat = stat
3234+ self.assertRaises(
3235+ yappi.YappiError, stats.sort, "invalid_thread_sorttype_arg"
3236+ )
3237+ self.assertRaises(
3238+ yappi.YappiError, stats.sort, "invalid_thread_sortorder_arg"
3239+ )
3240+
3241+ def test_ctx_stats_cpu(self):
3242+
3243+ def get_thread_name():
3244+ try:
3245+ return threading.current_thread().name
3246+ except AttributeError:
3247+ return "Anonymous"
3248+
3249+ def burn_cpu(sec):
3250+ t0 = yappi.get_clock_time()
3251+ elapsed = 0
3252+ while (elapsed < sec):
3253+ for _ in range(1000):
3254+ pass
3255+ elapsed = yappi.get_clock_time() - t0
3256+
3257+ def test():
3258+
3259+ ts = []
3260+ for i in (0.01, 0.05, 0.1):
3261+ t = threading.Thread(target=burn_cpu, args=(i, ))
3262+ t.name = f"burn_cpu-{str(i)}"
3263+ t.start()
3264+ ts.append(t)
3265+ for t in ts:
3266+ t.join()
3267+
3268+ yappi.set_clock_type("cpu")
3269+ yappi.set_context_name_callback(get_thread_name)
3270+
3271+ yappi.start()
3272+
3273+ test()
3274+
3275+ yappi.stop()
3276+
3277+ tstats = yappi.get_thread_stats()
3278+ r1 = '''
3279+ burn_cpu-0.1 3 123145356058624 0.100105 8
3280+ burn_cpu-0.05 2 123145361313792 0.050149 8
3281+ burn_cpu-0.01 1 123145356058624 0.010127 2
3282+ MainThread 0 4321620864 0.001632 6
3283+ '''
3284+ self.assert_ctx_stats_almost_equal(r1, tstats)
3285+
3286+ def test_producer_consumer_with_queues(self):
3287+ # we currently just stress yappi, no functionality test is done here.
3288+ yappi.start()
3289+ from queue import Queue
3290+ from threading import Thread
3291+ WORKER_THREAD_COUNT = 50
3292+ WORK_ITEM_COUNT = 2000
3293+
3294+ def worker():
3295+ while True:
3296+ item = q.get()
3297+ # do the work with item
3298+ q.task_done()
3299+
3300+ q = Queue()
3301+ for i in range(WORKER_THREAD_COUNT):
3302+ t = Thread(target=worker)
3303+ t.daemon = True
3304+ t.start()
3305+
3306+ for item in range(WORK_ITEM_COUNT):
3307+ q.put(item)
3308+ q.join() # block until all tasks are done
3309+ #yappi.get_func_stats().sort("callcount").print_all()
3310+ yappi.stop()
3311+
3312+ def test_temporary_lock_waiting(self):
3313+ yappi.start()
3314+ _lock = threading.Lock()
3315+
3316+ def worker():
3317+ _lock.acquire()
3318+ try:
3319+ time.sleep(1.0)
3320+ finally:
3321+ _lock.release()
3322+
3323+ t1 = threading.Thread(target=worker)
3324+ t2 = threading.Thread(target=worker)
3325+ t1.start()
3326+ t2.start()
3327+ t1.join()
3328+ t2.join()
3329+ #yappi.get_func_stats().sort("callcount").print_all()
3330+ yappi.stop()
3331+
3332+ @unittest.skipIf(os.name != "posix", "requires Posix compliant OS")
3333+ def test_signals_with_blocking_calls(self):
3334+ import signal, os, time
3335+
3336+ # just to verify if signal is handled correctly and stats/yappi are not corrupted.
3337+ def handler(signum, frame):
3338+ raise Exception("Signal handler executed!")
3339+
3340+ yappi.start()
3341+ signal.signal(signal.SIGALRM, handler)
3342+ signal.alarm(1)
3343+ self.assertRaises(Exception, time.sleep, 2)
3344+ stats = yappi.get_func_stats()
3345+ fsh = utils.find_stat_by_name(stats, "handler")
3346+ self.assertTrue(fsh is not None)
3347+
3348+ def test_concurrent_futures(self):
3349+ yappi.start()
3350+ from concurrent.futures import ThreadPoolExecutor
3351+ with ThreadPoolExecutor(max_workers=5) as executor:
3352+ f = executor.submit(pow, 5, 2)
3353+ self.assertEqual(f.result(), 25)
3354+ time.sleep(1.0)
3355+ yappi.stop()
3356+
3357+ def test_barrier(self):
3358+ yappi.start()
3359+ b = threading.Barrier(2, timeout=1)
3360+
3361+ def worker():
3362+ try:
3363+ b.wait()
3364+ except threading.BrokenBarrierError:
3365+ pass
3366+ except Exception:
3367+ raise Exception("BrokenBarrierError not raised")
3368+
3369+ t1 = threading.Thread(target=worker)
3370+ t1.start()
3371+ #b.wait()
3372+ t1.join()
3373+ yappi.stop()
3374+
3375+
3376+class NonRecursiveFunctions(utils.YappiUnitTestCase):
3377+
3378+ def test_abcd(self):
3379+ _timings = {"a_1": 6, "b_1": 5, "c_1": 3, "d_1": 1}
3380+ _yappi._set_test_timings(_timings)
3381+
3382+ def a():
3383+ b()
3384+
3385+ def b():
3386+ c()
3387+
3388+ def c():
3389+ d()
3390+
3391+ def d():
3392+ pass
3393+
3394+ stats = utils.run_and_get_func_stats(a)
3395+ fsa = utils.find_stat_by_name(stats, 'a')
3396+ fsb = utils.find_stat_by_name(stats, 'b')
3397+ fsc = utils.find_stat_by_name(stats, 'c')
3398+ fsd = utils.find_stat_by_name(stats, 'd')
3399+ cfsab = fsa.children[fsb]
3400+ cfsbc = fsb.children[fsc]
3401+ cfscd = fsc.children[fsd]
3402+
3403+ self.assertEqual(fsa.ttot, 6)
3404+ self.assertEqual(fsa.tsub, 1)
3405+ self.assertEqual(fsb.ttot, 5)
3406+ self.assertEqual(fsb.tsub, 2)
3407+ self.assertEqual(fsc.ttot, 3)
3408+ self.assertEqual(fsc.tsub, 2)
3409+ self.assertEqual(fsd.ttot, 1)
3410+ self.assertEqual(fsd.tsub, 1)
3411+ self.assertEqual(cfsab.ttot, 5)
3412+ self.assertEqual(cfsab.tsub, 2)
3413+ self.assertEqual(cfsbc.ttot, 3)
3414+ self.assertEqual(cfsbc.tsub, 2)
3415+ self.assertEqual(cfscd.ttot, 1)
3416+ self.assertEqual(cfscd.tsub, 1)
3417+
3418+ def test_stop_in_middle(self):
3419+ _timings = {"a_1": 6, "b_1": 4}
3420+ _yappi._set_test_timings(_timings)
3421+
3422+ def a():
3423+ b()
3424+ yappi.stop()
3425+
3426+ def b():
3427+ time.sleep(0.2)
3428+
3429+ yappi.start()
3430+ a()
3431+ stats = yappi.get_func_stats()
3432+ fsa = utils.find_stat_by_name(stats, 'a')
3433+ fsb = utils.find_stat_by_name(stats, 'b')
3434+
3435+ self.assertEqual(fsa.ncall, 1)
3436+ self.assertEqual(fsa.nactualcall, 0)
3437+ self.assertEqual(fsa.ttot, 0) # no call_leave called
3438+ self.assertEqual(fsa.tsub, 0) # no call_leave called
3439+ self.assertEqual(fsb.ttot, 4)
3440+
3441+
3442+class RecursiveFunctions(utils.YappiUnitTestCase):
3443+
3444+ def test_fibonacci(self):
3445+
3446+ def fib(n):
3447+ if n > 1:
3448+ return fib(n - 1) + fib(n - 2)
3449+ else:
3450+ return n
3451+
3452+ stats = utils.run_and_get_func_stats(fib, 22)
3453+ fs = utils.find_stat_by_name(stats, 'fib')
3454+ self.assertEqual(fs.ncall, 57313)
3455+ self.assertEqual(fs.ttot, fs.tsub)
3456+
3457+ def test_abcadc(self):
3458+ _timings = {
3459+ "a_1": 20,
3460+ "b_1": 19,
3461+ "c_1": 17,
3462+ "a_2": 13,
3463+ "d_1": 12,
3464+ "c_2": 10,
3465+ "a_3": 5
3466+ }
3467+ _yappi._set_test_timings(_timings)
3468+
3469+ def a(n):
3470+ if n == 3:
3471+ return
3472+ if n == 1 + 1:
3473+ d(n)
3474+ else:
3475+ b(n)
3476+
3477+ def b(n):
3478+ c(n)
3479+
3480+ def c(n):
3481+ a(n + 1)
3482+
3483+ def d(n):
3484+ c(n)
3485+
3486+ stats = utils.run_and_get_func_stats(a, 1)
3487+ fsa = utils.find_stat_by_name(stats, 'a')
3488+ fsb = utils.find_stat_by_name(stats, 'b')
3489+ fsc = utils.find_stat_by_name(stats, 'c')
3490+ fsd = utils.find_stat_by_name(stats, 'd')
3491+ self.assertEqual(fsa.ncall, 3)
3492+ self.assertEqual(fsa.nactualcall, 1)
3493+ self.assertEqual(fsa.ttot, 20)
3494+ self.assertEqual(fsa.tsub, 7)
3495+ self.assertEqual(fsb.ttot, 19)
3496+ self.assertEqual(fsb.tsub, 2)
3497+ self.assertEqual(fsc.ttot, 17)
3498+ self.assertEqual(fsc.tsub, 9)
3499+ self.assertEqual(fsd.ttot, 12)
3500+ self.assertEqual(fsd.tsub, 2)
3501+ cfsca = fsc.children[fsa]
3502+ self.assertEqual(cfsca.nactualcall, 0)
3503+ self.assertEqual(cfsca.ncall, 2)
3504+ self.assertEqual(cfsca.ttot, 13)
3505+ self.assertEqual(cfsca.tsub, 6)
3506+
3507+ def test_aaaa(self):
3508+ _timings = {"d_1": 9, "d_2": 7, "d_3": 3, "d_4": 2}
3509+ _yappi._set_test_timings(_timings)
3510+
3511+ def d(n):
3512+ if n == 3:
3513+ return
3514+ d(n + 1)
3515+
3516+ stats = utils.run_and_get_func_stats(d, 0)
3517+ fsd = utils.find_stat_by_name(stats, 'd')
3518+ self.assertEqual(fsd.ncall, 4)
3519+ self.assertEqual(fsd.nactualcall, 1)
3520+ self.assertEqual(fsd.ttot, 9)
3521+ self.assertEqual(fsd.tsub, 9)
3522+ cfsdd = fsd.children[fsd]
3523+ self.assertEqual(cfsdd.ttot, 7)
3524+ self.assertEqual(cfsdd.tsub, 7)
3525+ self.assertEqual(cfsdd.ncall, 3)
3526+ self.assertEqual(cfsdd.nactualcall, 0)
3527+
3528+ def test_abcabc(self):
3529+ _timings = {
3530+ "a_1": 20,
3531+ "b_1": 19,
3532+ "c_1": 17,
3533+ "a_2": 13,
3534+ "b_2": 11,
3535+ "c_2": 9,
3536+ "a_3": 6
3537+ }
3538+ _yappi._set_test_timings(_timings)
3539+
3540+ def a(n):
3541+ if n == 3:
3542+ return
3543+ else:
3544+ b(n)
3545+
3546+ def b(n):
3547+ c(n)
3548+
3549+ def c(n):
3550+ a(n + 1)
3551+
3552+ stats = utils.run_and_get_func_stats(a, 1)
3553+ fsa = utils.find_stat_by_name(stats, 'a')
3554+ fsb = utils.find_stat_by_name(stats, 'b')
3555+ fsc = utils.find_stat_by_name(stats, 'c')
3556+ self.assertEqual(fsa.ncall, 3)
3557+ self.assertEqual(fsa.nactualcall, 1)
3558+ self.assertEqual(fsa.ttot, 20)
3559+ self.assertEqual(fsa.tsub, 9)
3560+ self.assertEqual(fsb.ttot, 19)
3561+ self.assertEqual(fsb.tsub, 4)
3562+ self.assertEqual(fsc.ttot, 17)
3563+ self.assertEqual(fsc.tsub, 7)
3564+ cfsab = fsa.children[fsb]
3565+ cfsbc = fsb.children[fsc]
3566+ cfsca = fsc.children[fsa]
3567+ self.assertEqual(cfsab.ttot, 19)
3568+ self.assertEqual(cfsab.tsub, 4)
3569+ self.assertEqual(cfsbc.ttot, 17)
3570+ self.assertEqual(cfsbc.tsub, 7)
3571+ self.assertEqual(cfsca.ttot, 13)
3572+ self.assertEqual(cfsca.tsub, 8)
3573+
3574+ def test_abcbca(self):
3575+ _timings = {"a_1": 10, "b_1": 9, "c_1": 7, "b_2": 4, "c_2": 2, "a_2": 1}
3576+ _yappi._set_test_timings(_timings)
3577+ self._ncall = 1
3578+
3579+ def a():
3580+ if self._ncall == 1:
3581+ b()
3582+ else:
3583+ return
3584+
3585+ def b():
3586+ c()
3587+
3588+ def c():
3589+ if self._ncall == 1:
3590+ self._ncall += 1
3591+ b()
3592+ else:
3593+ a()
3594+
3595+ stats = utils.run_and_get_func_stats(a)
3596+ fsa = utils.find_stat_by_name(stats, 'a')
3597+ fsb = utils.find_stat_by_name(stats, 'b')
3598+ fsc = utils.find_stat_by_name(stats, 'c')
3599+ cfsab = fsa.children[fsb]
3600+ cfsbc = fsb.children[fsc]
3601+ cfsca = fsc.children[fsa]
3602+ self.assertEqual(fsa.ttot, 10)
3603+ self.assertEqual(fsa.tsub, 2)
3604+ self.assertEqual(fsb.ttot, 9)
3605+ self.assertEqual(fsb.tsub, 4)
3606+ self.assertEqual(fsc.ttot, 7)
3607+ self.assertEqual(fsc.tsub, 4)
3608+ self.assertEqual(cfsab.ttot, 9)
3609+ self.assertEqual(cfsab.tsub, 2)
3610+ self.assertEqual(cfsbc.ttot, 7)
3611+ self.assertEqual(cfsbc.tsub, 4)
3612+ self.assertEqual(cfsca.ttot, 1)
3613+ self.assertEqual(cfsca.tsub, 1)
3614+ self.assertEqual(cfsca.ncall, 1)
3615+ self.assertEqual(cfsca.nactualcall, 0)
3616+
3617+ def test_aabccb(self):
3618+ _timings = {
3619+ "a_1": 13,
3620+ "a_2": 11,
3621+ "b_1": 9,
3622+ "c_1": 5,
3623+ "c_2": 3,
3624+ "b_2": 1
3625+ }
3626+ _yappi._set_test_timings(_timings)
3627+ self._ncall = 1
3628+
3629+ def a():
3630+ if self._ncall == 1:
3631+ self._ncall += 1
3632+ a()
3633+ else:
3634+ b()
3635+
3636+ def b():
3637+ if self._ncall == 3:
3638+ return
3639+ else:
3640+ c()
3641+
3642+ def c():
3643+ if self._ncall == 2:
3644+ self._ncall += 1
3645+ c()
3646+ else:
3647+ b()
3648+
3649+ stats = utils.run_and_get_func_stats(a)
3650+ fsa = utils.find_stat_by_name(stats, 'a')
3651+ fsb = utils.find_stat_by_name(stats, 'b')
3652+ fsc = utils.find_stat_by_name(stats, 'c')
3653+ cfsaa = fsa.children[fsa.index]
3654+ cfsab = fsa.children[fsb]
3655+ cfsbc = fsb.children[fsc.full_name]
3656+ cfscc = fsc.children[fsc]
3657+ cfscb = fsc.children[fsb]
3658+ self.assertEqual(fsb.ttot, 9)
3659+ self.assertEqual(fsb.tsub, 5)
3660+ self.assertEqual(cfsbc.ttot, 5)
3661+ self.assertEqual(cfsbc.tsub, 2)
3662+ self.assertEqual(fsa.ttot, 13)
3663+ self.assertEqual(fsa.tsub, 4)
3664+ self.assertEqual(cfsab.ttot, 9)
3665+ self.assertEqual(cfsab.tsub, 4)
3666+ self.assertEqual(cfsaa.ttot, 11)
3667+ self.assertEqual(cfsaa.tsub, 2)
3668+ self.assertEqual(fsc.ttot, 5)
3669+ self.assertEqual(fsc.tsub, 4)
3670+
3671+ def test_abaa(self):
3672+ _timings = {"a_1": 13, "b_1": 10, "a_2": 9, "a_3": 5}
3673+ _yappi._set_test_timings(_timings)
3674+
3675+ self._ncall = 1
3676+
3677+ def a():
3678+ if self._ncall == 1:
3679+ b()
3680+ elif self._ncall == 2:
3681+ self._ncall += 1
3682+ a()
3683+ else:
3684+ return
3685+
3686+ def b():
3687+ self._ncall += 1
3688+ a()
3689+
3690+ stats = utils.run_and_get_func_stats(a)
3691+ fsa = utils.find_stat_by_name(stats, 'a')
3692+ fsb = utils.find_stat_by_name(stats, 'b')
3693+ cfsaa = fsa.children[fsa]
3694+ cfsba = fsb.children[fsa]
3695+ self.assertEqual(fsb.ttot, 10)
3696+ self.assertEqual(fsb.tsub, 1)
3697+ self.assertEqual(fsa.ttot, 13)
3698+ self.assertEqual(fsa.tsub, 12)
3699+ self.assertEqual(cfsaa.ttot, 5)
3700+ self.assertEqual(cfsaa.tsub, 5)
3701+ self.assertEqual(cfsba.ttot, 9)
3702+ self.assertEqual(cfsba.tsub, 4)
3703+
3704+ def test_aabb(self):
3705+ _timings = {"a_1": 13, "a_2": 10, "b_1": 9, "b_2": 5}
3706+ _yappi._set_test_timings(_timings)
3707+
3708+ self._ncall = 1
3709+
3710+ def a():
3711+ if self._ncall == 1:
3712+ self._ncall += 1
3713+ a()
3714+ elif self._ncall == 2:
3715+ b()
3716+ else:
3717+ return
3718+
3719+ def b():
3720+ if self._ncall == 2:
3721+ self._ncall += 1
3722+ b()
3723+ else:
3724+ return
3725+
3726+ stats = utils.run_and_get_func_stats(a)
3727+ fsa = utils.find_stat_by_name(stats, 'a')
3728+ fsb = utils.find_stat_by_name(stats, 'b')
3729+ cfsaa = fsa.children[fsa]
3730+ cfsab = fsa.children[fsb]
3731+ cfsbb = fsb.children[fsb]
3732+ self.assertEqual(fsa.ttot, 13)
3733+ self.assertEqual(fsa.tsub, 4)
3734+ self.assertEqual(fsb.ttot, 9)
3735+ self.assertEqual(fsb.tsub, 9)
3736+ self.assertEqual(cfsaa.ttot, 10)
3737+ self.assertEqual(cfsaa.tsub, 1)
3738+ self.assertEqual(cfsab.ttot, 9)
3739+ self.assertEqual(cfsab.tsub, 4)
3740+ self.assertEqual(cfsbb.ttot, 5)
3741+ self.assertEqual(cfsbb.tsub, 5)
3742+
3743+ def test_abbb(self):
3744+ _timings = {"a_1": 13, "b_1": 10, "b_2": 6, "b_3": 1}
3745+ _yappi._set_test_timings(_timings)
3746+
3747+ self._ncall = 1
3748+
3749+ def a():
3750+ if self._ncall == 1:
3751+ b()
3752+
3753+ def b():
3754+ if self._ncall == 3:
3755+ return
3756+ self._ncall += 1
3757+ b()
3758+
3759+ stats = utils.run_and_get_func_stats(a)
3760+ fsa = utils.find_stat_by_name(stats, 'a')
3761+ fsb = utils.find_stat_by_name(stats, 'b')
3762+ cfsab = fsa.children[fsb]
3763+ cfsbb = fsb.children[fsb]
3764+ self.assertEqual(fsa.ttot, 13)
3765+ self.assertEqual(fsa.tsub, 3)
3766+ self.assertEqual(fsb.ttot, 10)
3767+ self.assertEqual(fsb.tsub, 10)
3768+ self.assertEqual(fsb.ncall, 3)
3769+ self.assertEqual(fsb.nactualcall, 1)
3770+ self.assertEqual(cfsab.ttot, 10)
3771+ self.assertEqual(cfsab.tsub, 4)
3772+ self.assertEqual(cfsbb.ttot, 6)
3773+ self.assertEqual(cfsbb.tsub, 6)
3774+ self.assertEqual(cfsbb.nactualcall, 0)
3775+ self.assertEqual(cfsbb.ncall, 2)
3776+
3777+ def test_aaab(self):
3778+ _timings = {"a_1": 13, "a_2": 10, "a_3": 6, "b_1": 1}
3779+ _yappi._set_test_timings(_timings)
3780+
3781+ self._ncall = 1
3782+
3783+ def a():
3784+ if self._ncall == 3:
3785+ b()
3786+ return
3787+ self._ncall += 1
3788+ a()
3789+
3790+ def b():
3791+ return
3792+
3793+ stats = utils.run_and_get_func_stats(a)
3794+ fsa = utils.find_stat_by_name(stats, 'a')
3795+ fsb = utils.find_stat_by_name(stats, 'b')
3796+ cfsaa = fsa.children[fsa]
3797+ cfsab = fsa.children[fsb]
3798+ self.assertEqual(fsa.ttot, 13)
3799+ self.assertEqual(fsa.tsub, 12)
3800+ self.assertEqual(fsb.ttot, 1)
3801+ self.assertEqual(fsb.tsub, 1)
3802+ self.assertEqual(cfsaa.ttot, 10)
3803+ self.assertEqual(cfsaa.tsub, 9)
3804+ self.assertEqual(cfsab.ttot, 1)
3805+ self.assertEqual(cfsab.tsub, 1)
3806+
3807+ def test_abab(self):
3808+ _timings = {"a_1": 13, "b_1": 10, "a_2": 6, "b_2": 1}
3809+ _yappi._set_test_timings(_timings)
3810+
3811+ self._ncall = 1
3812+
3813+ def a():
3814+ b()
3815+
3816+ def b():
3817+ if self._ncall == 2:
3818+ return
3819+ self._ncall += 1
3820+ a()
3821+
3822+ stats = utils.run_and_get_func_stats(a)
3823+ fsa = utils.find_stat_by_name(stats, 'a')
3824+ fsb = utils.find_stat_by_name(stats, 'b')
3825+ cfsab = fsa.children[fsb]
3826+ cfsba = fsb.children[fsa]
3827+ self.assertEqual(fsa.ttot, 13)
3828+ self.assertEqual(fsa.tsub, 8)
3829+ self.assertEqual(fsb.ttot, 10)
3830+ self.assertEqual(fsb.tsub, 5)
3831+ self.assertEqual(cfsab.ttot, 10)
3832+ self.assertEqual(cfsab.tsub, 5)
3833+ self.assertEqual(cfsab.ncall, 2)
3834+ self.assertEqual(cfsab.nactualcall, 1)
3835+ self.assertEqual(cfsba.ttot, 6)
3836+ self.assertEqual(cfsba.tsub, 5)
3837+
3838+
3839+if __name__ == '__main__':
3840+ # import sys;sys.argv = ['', 'BasicUsage.test_run_as_script']
3841+ # import sys;sys.argv = ['', 'MultithreadedScenarios.test_subsequent_profile']
3842+ unittest.main()
3843--
38442.34.1
3845
diff --git a/meta-python/recipes-devtools/python/python3-yappi_1.7.3.bb b/meta-python/recipes-devtools/python/python3-yappi_1.7.6.bb
index 3e735f7124..fefed051ab 100644
--- a/meta-python/recipes-devtools/python/python3-yappi_1.7.3.bb
+++ b/meta-python/recipes-devtools/python/python3-yappi_1.7.6.bb
@@ -4,10 +4,9 @@ HOMEPAGE = "https://github.com/sumerc/yappi"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=71c208c9a4fd864385eb69ad4caa3bee" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=71c208c9a4fd864385eb69ad4caa3bee"
6 6
7SRC_URI[sha256sum] = "bef71ad0595b600261668dcb1e18b935a7117a724c04d7be60d9d246e32d0928" 7SRC_URI[sha256sum] = "c94281936af77c00c6ac2306a0e7f85a67e354d717120df85fcc5dfb9243d4dd"
8 8
9SRC_URI += " \ 9SRC_URI += " \
10 file://0001-test_functionality-convert-line-endings-to-Unix.patch \
11 file://0002-Fix-import-of-tests.utils-to-enable-pytest.patch \ 10 file://0002-Fix-import-of-tests.utils-to-enable-pytest.patch \
12 " 11 "
13 12
diff --git a/meta-python/recipes-devtools/python/python3-yarl/0001-build-wheel-in-place.patch b/meta-python/recipes-devtools/python/python3-yarl/0001-build-wheel-in-place.patch
deleted file mode 100644
index 84f81da775..0000000000
--- a/meta-python/recipes-devtools/python/python3-yarl/0001-build-wheel-in-place.patch
+++ /dev/null
@@ -1,31 +0,0 @@
1From 606843ad079d9d0dac1172533d42b5a2327b99ed Mon Sep 17 00:00:00 2001
2From: Hongxu Jia <hongxu.jia@windriver.com>
3Date: Wed, 17 Sep 2025 15:41:09 +0800
4Subject: [PATCH] build wheel in place
5
6In order to make the generated library be reproducible, build wheel
7in source dir other than tmp dir (/tmp/xxxxxx), then yocto toolchain's
8option -fdebug-prefix-map could work as expected
9
10Upstream-Status: Pending
11Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
12---
13 packaging/pep517_backend/_backend.py | 2 +-
14 1 file changed, 1 insertion(+), 1 deletion(-)
15
16diff --git a/packaging/pep517_backend/_backend.py b/packaging/pep517_backend/_backend.py
17index 61cad34..d5d839e 100644
18--- a/packaging/pep517_backend/_backend.py
19+++ b/packaging/pep517_backend/_backend.py
20@@ -316,7 +316,7 @@ def build_wheel(
21 """
22 with maybe_prebuild_c_extensions(
23 line_trace_cython_when_unset=False,
24- build_inplace=False,
25+ build_inplace=True,
26 config_settings=config_settings,
27 ):
28 return _setuptools_build_wheel(
29--
302.34.1
31
diff --git a/meta-python/recipes-devtools/python/python3-yarl_1.22.0.bb b/meta-python/recipes-devtools/python/python3-yarl_1.23.0.bb
index 6c2e2259b7..6a973f9acb 100644
--- a/meta-python/recipes-devtools/python/python3-yarl_1.22.0.bb
+++ b/meta-python/recipes-devtools/python/python3-yarl_1.23.0.bb
@@ -3,15 +3,14 @@ HOMEPAGE = "https://github.com/aio-libs/yarl/"
3LICENSE = "Apache-2.0" 3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
5 5
6SRC_URI[sha256sum] = "bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71" 6SRC_URI[sha256sum] = "53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5"
7 7
8PYPI_PACKAGE = "yarl" 8PYPI_PACKAGE = "yarl"
9 9
10inherit pypi ptest-python-pytest python_setuptools_build_meta cython 10inherit pypi ptest-python-pytest python_setuptools_build_meta cython
11 11
12SRC_URI += " \ 12PEP517_BUILD_OPTS = "--config-setting=build-inplace=true"
13 file://0001-build-wheel-in-place.patch \ 13
14"
15 14
16DEPENDS += " \ 15DEPENDS += " \
17 python3-expandvars-native \ 16 python3-expandvars-native \
@@ -33,4 +32,6 @@ RDEPENDS:${PN}-ptest += " \
33 python3-unittest-automake-output \ 32 python3-unittest-automake-output \
34" 33"
35 34
35INSANE_SKIP:${PN} = "already-stripped"
36
36BBCLASSEXTEND = "native nativesdk" 37BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-zopeinterface/0001-Allow-using-setuptools-74.patch b/meta-python/recipes-devtools/python/python3-zopeinterface/0001-Allow-using-setuptools-74.patch
deleted file mode 100644
index a01247fe5a..0000000000
--- a/meta-python/recipes-devtools/python/python3-zopeinterface/0001-Allow-using-setuptools-74.patch
+++ /dev/null
@@ -1,24 +0,0 @@
1From 5060ecfe6cff5110cbfbc781fc7342ad08fc6f90 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sat, 23 Nov 2024 18:30:40 -0800
4Subject: [PATCH] Allow using setuptools > 74
5
6Upstream-Status: Pending
7Signed-off-by: Khem Raj <raj.khem@gmail.com>
8---
9 pyproject.toml | 2 +-
10 1 file changed, 1 insertion(+), 1 deletion(-)
11
12diff --git a/pyproject.toml b/pyproject.toml
13index 17da486..7906a37 100644
14--- a/pyproject.toml
15+++ b/pyproject.toml
16@@ -3,7 +3,7 @@
17 # https://github.com/zopefoundation/meta/tree/master/config/c-code
18
19 [build-system]
20-requires = ["setuptools<74"]
21+requires = ["setuptools"]
22 build-backend = "setuptools.build_meta"
23
24 [tool.coverage.run]
diff --git a/meta-python/recipes-devtools/python/python3-zopeinterface_7.1.1.bb b/meta-python/recipes-devtools/python/python3-zopeinterface_8.3.bb
index 79e00ce23e..2dc586a3ab 100644
--- a/meta-python/recipes-devtools/python/python3-zopeinterface_7.1.1.bb
+++ b/meta-python/recipes-devtools/python/python3-zopeinterface_8.3.bb
@@ -1,18 +1,17 @@
1SUMMARY = "Interface definitions for Zope products" 1SUMMARY = "Interface definitions for Zope products"
2LICENSE = "ZPL-2.1" 2LICENSE = "ZPL-2.1"
3LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e54fd776274c1b7423ec128974bd9d46" 3LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=78ccb3640dc841e1baecb3e27a6966b2"
4 4
5PYPI_PACKAGE = "zope.interface" 5PYPI_PACKAGE = "zope_interface"
6UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 6UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
7 7
8inherit pypi python_setuptools_build_meta 8inherit pypi python_setuptools_build_meta
9SRC_URI += "file://0001-Allow-using-setuptools-74.patch" 9SRC_URI[sha256sum] = "e1a9de7d0b5b5c249a73b91aebf4598ce05e334303af6aa94865893283e9ff10"
10SRC_URI[sha256sum] = "4284d664ef0ff7b709836d4de7b13d80873dc5faeffc073abdb280058bfac5e3"
11PACKAGES =. "${PN}-test " 10PACKAGES =. "${PN}-test "
12 11
13RPROVIDES:${PN} += "zope-interfaces" 12RPROVIDES:${PN} += "zope-interfaces"
14 13
15RDEPENDS:${PN}:class-target += "python3-datetime" 14RDEPENDS:${PN}:append:class-target = " python3-datetime"
16RDEPENDS:${PN}-test += "python3-unittest python3-doctest" 15RDEPENDS:${PN}-test += "python3-unittest python3-doctest"
17 16
18FILES:${PN}-dbg += "${PYTHON_SITEPACKAGES_DIR}/*.egg/*/*/.debug" 17FILES:${PN}-dbg += "${PYTHON_SITEPACKAGES_DIR}/*.egg/*/*/.debug"
diff --git a/meta-python/recipes-devtools/python/tftpy_0.8.6.bb b/meta-python/recipes-devtools/python/tftpy_0.8.7.bb
index 74889c2841..7bb1ebeb57 100644
--- a/meta-python/recipes-devtools/python/tftpy_0.8.6.bb
+++ b/meta-python/recipes-devtools/python/tftpy_0.8.7.bb
@@ -8,6 +8,6 @@ HOMEPAGE = "https://github.com/msoulier/tftpy"
8LICENSE = "MIT" 8LICENSE = "MIT"
9LIC_FILES_CHKSUM = "file://LICENSE;md5=22770e72ae03c61f5bcc4e333b61368d" 9LIC_FILES_CHKSUM = "file://LICENSE;md5=22770e72ae03c61f5bcc4e333b61368d"
10 10
11SRC_URI[sha256sum] = "f616f6a43a36d481c266573608597b9dd3c7c63818415d72aa04f1d1795480ea" 11SRC_URI[sha256sum] = "e8a5aa092dab2e1cbb9b94392036827b808dc37eb6cf1b1ab33c81957b3f5fe2"
12 12
13inherit pypi python_setuptools_build_meta 13inherit pypi python_setuptools_build_meta
diff --git a/meta-python/recipes-devtools/python3-mlcommons-loadgen/files/source-date-epoch.patch b/meta-python/recipes-devtools/python3-mlcommons-loadgen/files/source-date-epoch.patch
index 32e529d483..3eac44e738 100644
--- a/meta-python/recipes-devtools/python3-mlcommons-loadgen/files/source-date-epoch.patch
+++ b/meta-python/recipes-devtools/python3-mlcommons-loadgen/files/source-date-epoch.patch
@@ -1,6 +1,6 @@
1From dd7925397b84c2a327cd4594edba9f7ca5acef61 Mon Sep 17 00:00:00 2001 1From 99dfd88de60dd55bd3b5e7c0516b3882a8e56698 Mon Sep 17 00:00:00 2001
2From: Hongxu Jia <hongxu.jia@windriver.com> 2From: Liu Yiding <liuyd.fnst@fujitsu.com>
3Date: Fri, 26 Sep 2025 14:02:23 +0800 3Date: Wed, 15 Apr 2026 06:09:37 +0000
4Subject: [PATCH] Honor the SOURCE_DATE_EPOCH variable 4Subject: [PATCH] Honor the SOURCE_DATE_EPOCH variable
5 5
6Implement the SOURCE_DATE_EPOCH specification[1] for reproducible 6Implement the SOURCE_DATE_EPOCH specification[1] for reproducible
@@ -12,30 +12,33 @@ current time.
12Upstream-Status: Submitted [https://github.com/mlcommons/inference/pull/2345] 12Upstream-Status: Submitted [https://github.com/mlcommons/inference/pull/2345]
13 13
14Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> 14Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
15
16Update for 6.0.14
17Signed-off-by: Liu Yiding <liuyd.fnst@fujitsu.com>
15--- 18---
16 version_generator.py | 9 +++++++-- 19 version_generator.py | 9 +++++++--
17 1 file changed, 7 insertions(+), 2 deletions(-) 20 1 file changed, 7 insertions(+), 2 deletions(-)
18 21
19diff --git a/version_generator.py b/version_generator.py 22diff --git a/version_generator.py b/version_generator.py
20index 2e75243..5202da9 100644 23index b88ae8e..b083eec 100644
21--- a/version_generator.py 24--- a/version_generator.py
22+++ b/version_generator.py 25+++ b/version_generator.py
23@@ -110,8 +110,13 @@ def generate_loadgen_version_definitions(cc_filename, loadgen_root): 26@@ -113,8 +113,13 @@ def generate_loadgen_version_definitions(cc_filename, loadgen_root):
24 # Write the version into the function definition 27 # Write the version into the function definition
25 ofile.write(func_def("Version", f"\"{version_contents}\"")) 28 ofile.write(func_def("Version", f"\"{version_contents}\""))
26
27- date_time_now_local = datetime.datetime.now().isoformat()
28- date_time_now_utc = datetime.datetime.utcnow().isoformat()
29+ if os.environ.get('SOURCE_DATE_EPOCH', False):
30+ source_date_epoch = int(os.environ['SOURCE_DATE_EPOCH'])
31+ date_time_now_local = datetime.datetime.fromtimestamp(source_date_epoch).isoformat()
32+ date_time_now_utc = datetime.datetime.fromtimestamp(source_date_epoch, tz=datetime.timezone.utc).isoformat()
33+ else:
34+ date_time_now_local = datetime.datetime.now().isoformat()
35+ date_time_now_utc = datetime.datetime.utcnow().isoformat()
36 ofile.write(func_def("BuildDateLocal", '"' + date_time_now_local + '"'))
37 ofile.write(func_def("BuildDateUtc", '"' + date_time_now_utc + '"'))
38 29
30- date_time_now_local = datetime.datetime.now().isoformat()
31- date_time_now_utc = datetime.datetime.utcnow().isoformat()
32+ if os.environ.get('SOURCE_DATE_EPOCH', False):
33+ source_date_epoch = int(os.environ['SOURCE_DATE_EPOCH'])
34+ date_time_now_local = datetime.datetime.fromtimestamp(source_date_epoch).isoformat()
35+ date_time_now_utc = datetime.datetime.fromtimestamp(source_date_epoch, tz=datetime.timezone.utc).isoformat()
36+ else:
37+ date_time_now_local = datetime.datetime.now().isoformat()
38+ date_time_now_utc = datetime.datetime.utcnow().isoformat()
39 ofile.write(
40 func_def(
41 "BuildDateLocal",
39-- 42--
402.34.1 432.43.0
41 44
diff --git a/meta-python/recipes-devtools/python3-mlcommons-loadgen/python3-mlcommons-loadgen_5.1.2.bb b/meta-python/recipes-devtools/python3-mlcommons-loadgen/python3-mlcommons-loadgen_6.0.14.bb
index 79687290f5..3299f25080 100644
--- a/meta-python/recipes-devtools/python3-mlcommons-loadgen/python3-mlcommons-loadgen_5.1.2.bb
+++ b/meta-python/recipes-devtools/python3-mlcommons-loadgen/python3-mlcommons-loadgen_6.0.14.bb
@@ -21,7 +21,7 @@ SRC_URI += " \
21PYPI_PACKAGE = "mlcommons_loadgen" 21PYPI_PACKAGE = "mlcommons_loadgen"
22UPSTREAM_CHECK_PYPI_PACKAGE = "mlcommons_loadgen" 22UPSTREAM_CHECK_PYPI_PACKAGE = "mlcommons_loadgen"
23 23
24SRC_URI[sha256sum] = "cd686a6223c978d1056e38a417e4807bfa21c855189f7882d24c8313174bca74" 24SRC_URI[sha256sum] = "9a56e361b4614938acdb6a601cc9c57ce551809f831023401bbac6dd7eb00970"
25 25
26# Because the pyproject.toml contains invalid requirements. 26# Because the pyproject.toml contains invalid requirements.
27INSANE_SKIP += "pep517-backend" 27INSANE_SKIP += "pep517-backend"
diff --git a/meta-python/recipes-devtools/python3-nltk/python3-nltk_3.9.2.bb b/meta-python/recipes-devtools/python3-nltk/python3-nltk_3.9.4.bb
index 43c23254d9..50c751ba98 100644
--- a/meta-python/recipes-devtools/python3-nltk/python3-nltk_3.9.2.bb
+++ b/meta-python/recipes-devtools/python3-nltk/python3-nltk_3.9.4.bb
@@ -8,6 +8,7 @@ LICENSE = "Apache-2.0"
8LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57" 8LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
9 9
10CVE_PRODUCT = "nltk" 10CVE_PRODUCT = "nltk"
11CVE_STATUS[CVE-2026-0846] = "fixed-version: fixed in 3.9.3"
11 12
12RDEPENDS:${PN} = "\ 13RDEPENDS:${PN} = "\
13 python3-click \ 14 python3-click \
@@ -23,4 +24,4 @@ RRECOMMENDS:${PN} = "\
23 24
24inherit setuptools3 pypi 25inherit setuptools3 pypi
25 26
26SRC_URI[sha256sum] = "0f409e9b069ca4177c1903c3e843eef90c7e92992fa4931ae607da6de49e1419" 27SRC_URI[sha256sum] = "ed03bc098a40481310320808b2db712d95d13ca65b27372f8a403949c8b523d0"
diff --git a/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.4.bb b/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.5.bb
index 2899f6909e..857d8e46fa 100644
--- a/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.4.bb
+++ b/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.5.bb
@@ -16,12 +16,10 @@ SRC_URI += "file://add-back-option-build-base.patch \
16 file://not-overwrite-cflags-cxxflags.patch \ 16 file://not-overwrite-cflags-cxxflags.patch \
17 file://0001-sip-Conditionally-use-GetAssertStackTrace-under-USE_.patch \ 17 file://0001-sip-Conditionally-use-GetAssertStackTrace-under-USE_.patch \
18 " 18 "
19SRC_URI[sha256sum] = "2eb123979c87bcb329e8a2452269d60ff8f9f651e9bf25c67579e53c4ebbae3c" 19SRC_URI[sha256sum] = "44e836d1bccd99c38790bb034b6ecf70d9060f6734320560f7c4b0d006144793"
20 20
21inherit pypi setuptools3 cython pkgconfig features_check 21inherit pypi setuptools3 cython pkgconfig features_check
22 22
23S = "${UNPACKDIR}/wxPython-${PV}"
24
25REQUIRED_DISTRO_FEATURES = "x11" 23REQUIRED_DISTRO_FEATURES = "x11"
26 24
27export WX_CONFIG = "'${RECIPE_SYSROOT_NATIVE}${bindir}/wx-config --prefix=${STAGING_EXECPREFIXDIR} --baselib=${baselib}'" 25export WX_CONFIG = "'${RECIPE_SYSROOT_NATIVE}${bindir}/wx-config --prefix=${STAGING_EXECPREFIXDIR} --baselib=${baselib}'"