aboutsummaryrefslogtreecommitdiffstats
path: root/meta-python/recipes-devtools/python
diff options
context:
space:
mode:
Diffstat (limited to 'meta-python/recipes-devtools/python')
-rw-r--r--meta-python/recipes-devtools/python/python-m2crypto.inc63
-rw-r--r--meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch35
-rw-r--r--meta-python/recipes-devtools/python/python3-aenum_3.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-aenum_3.0.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-aiofiles_0.7.0.bb (renamed from meta-python/recipes-devtools/python/python3-aiofiles_0.6.0.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-aiohue_2.2.0.bb12
-rw-r--r--meta-python/recipes-devtools/python/python3-aiohue_2.5.1.bb11
-rw-r--r--meta-python/recipes-devtools/python/python3-alembic_1.6.5.bb (renamed from meta-python/recipes-devtools/python/python3-alembic_1.5.8.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-argcomplete_1.12.3.bb (renamed from meta-python/recipes-devtools/python/python3-argcomplete_1.12.2.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-arpeggio_1.10.2.bb (renamed from meta-python/recipes-devtools/python/python3-arpeggio_1.10.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-astroid_2.5.7.bb (renamed from meta-python/recipes-devtools/python/python3-astroid_2.5.3.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-asttokens_2.0.5.bb (renamed from meta-python/recipes-devtools/python/python3-asttokens_2.0.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-asyncio-glib_0.1.bb11
-rw-r--r--meta-python/recipes-devtools/python/python3-babel_2.9.1.bb (renamed from meta-python/recipes-devtools/python/python3-babel_2.9.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-bidict_0.21.2.bb11
-rw-r--r--meta-python/recipes-devtools/python/python3-bitarray_2.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-bitarray_1.9.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-cachetools_4.2.2.bb (renamed from meta-python/recipes-devtools/python/python3-cachetools_4.2.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-can_3.3.4.bb (renamed from meta-python/recipes-devtools/python/python3-can_3.3.3.bb)5
-rw-r--r--meta-python/recipes-devtools/python/python3-cbor2_5.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-cbor2_5.2.0.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-cerberus_1.3.4.bb (renamed from meta-python/recipes-devtools/python/python3-cerberus_1.3.3.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-certifi_2021.5.30.bb (renamed from meta-python/recipes-devtools/python/python3-certifi_2020.12.5.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-click-repl_0.2.0.bb (renamed from meta-python/recipes-devtools/python/python3-click-repl_0.1.6.bb)5
-rw-r--r--meta-python/recipes-devtools/python/python3-click_8.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-click_7.1.2.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-colorlog_5.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-colorlog_4.8.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-configargparse_1.4.1.bb (renamed from meta-python/recipes-devtools/python/python3-configargparse_1.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-croniter_1.0.13.bb (renamed from meta-python/recipes-devtools/python/python3-croniter_1.0.11.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-cryptography_3.3.2.bb (renamed from meta-python/recipes-devtools/python/python3-cryptography_3.3.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-decorator_5.0.9.bb (renamed from meta-python/recipes-devtools/python/python3-decorator_5.0.6.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-deprecated_1.2.12.bb9
-rw-r--r--meta-python/recipes-devtools/python/python3-django_2.2.16.bb9
-rw-r--r--meta-python/recipes-devtools/python/python3-django_2.2.23.bb9
-rw-r--r--meta-python/recipes-devtools/python/python3-django_3.2.4.bb (renamed from meta-python/recipes-devtools/python/python3-django_3.2.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-docutils_0.17.bb9
-rw-r--r--meta-python/recipes-devtools/python/python3-ecdsa_0.17.0.bb (renamed from meta-python/recipes-devtools/python/python3-ecdsa_0.16.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-elementpath_2.2.2.bb (renamed from meta-python/recipes-devtools/python/python3-elementpath_2.2.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-engineio_4.2.0.bb (renamed from meta-python/recipes-devtools/python/python3-engineio_3.13.0.bb)12
-rw-r--r--meta-python/recipes-devtools/python/python3-et-xmlfile_1.0.1.bb20
-rw-r--r--meta-python/recipes-devtools/python/python3-et-xmlfile_1.1.0.bb17
-rw-r--r--meta-python/recipes-devtools/python/python3-fasteners_0.16.1.bb (renamed from meta-python/recipes-devtools/python/python3-fasteners_0.16.bb)7
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-migrate_3.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-flask-migrate_2.7.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-restful_0.3.9.bb (renamed from meta-python/recipes-devtools/python/python3-flask-restful_0.3.8.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-socketio_5.0.3.bb (renamed from meta-python/recipes-devtools/python/python3-flask-socketio_5.0.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-flask-wtf_0.15.1.bb (renamed from meta-python/recipes-devtools/python/python3-flask-wtf_0.14.3.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-flask_2.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-flask_1.1.2.bb)11
-rw-r--r--meta-python/recipes-devtools/python/python3-google-api-python-client_2.6.0.bb (renamed from meta-python/recipes-devtools/python/python3-google-api-python-client_2.1.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-greenlet_1.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-greenlet_1.0.0.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-grpcio/mips_bigendian.patch2
-rw-r--r--meta-python/recipes-devtools/python/python3-grpcio/riscv64_support.patch21
-rw-r--r--meta-python/recipes-devtools/python/python3-grpcio_1.38.0.bb (renamed from meta-python/recipes-devtools/python/python3-grpcio_1.37.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-haversine/0001-setup.py-Correct-the-license-assignment.patch32
-rw-r--r--meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-huey_2.3.2.bb (renamed from meta-python/recipes-devtools/python/python3-huey_2.3.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-humanize_3.7.1.bb (renamed from meta-python/recipes-devtools/python/python3-humanize_3.4.0.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-icu/0001-Fix-host-contamination-of-include-files.patch (renamed from meta-python/recipes-devtools/python/python3-icu/fix_host_include.patch)26
-rw-r--r--meta-python/recipes-devtools/python/python3-icu_2.6.bb13
-rw-r--r--meta-python/recipes-devtools/python/python3-icu_2.7.2.bb13
-rw-r--r--meta-python/recipes-devtools/python/python3-idna_3.2.bb (renamed from meta-python/recipes-devtools/python/python3-idna_3.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-ipython_7.24.1.bb (renamed from meta-python/recipes-devtools/python/python3-ipython_7.22.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-itsdangerous_2.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-itsdangerous_1.1.0.bb)6
-rw-r--r--meta-python/recipes-devtools/python/python3-javaobj-py3_0.4.3.bb (renamed from meta-python/recipes-devtools/python/python3-javaobj-py3_0.4.2.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-jinja2_2.%.bbappend13
-rw-r--r--meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.6.0.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-m2crypto/0001-Allow-verify_cb_-to-be-called-with-ok-True.patch47
-rw-r--r--meta-python/recipes-devtools/python/python3-m2crypto/0001-Use-of-RSA_SSLV23_PADDING-has-been-deprecated.patch29
-rw-r--r--meta-python/recipes-devtools/python/python3-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch (renamed from meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch)12
-rw-r--r--meta-python/recipes-devtools/python/python3-m2crypto/cross-compile-platform.patch (renamed from meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch)8
-rw-r--r--meta-python/recipes-devtools/python/python3-m2crypto_0.30.1.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-m2crypto_0.37.1.bb45
-rw-r--r--meta-python/recipes-devtools/python/python3-markdown_3.3.4.bb12
-rw-r--r--meta-python/recipes-devtools/python/python3-markupsafe_1.%.bbappend12
-rw-r--r--meta-python/recipes-devtools/python/python3-matplotlib-inline_0.1.2.bb8
-rw-r--r--meta-python/recipes-devtools/python/python3-netifaces_0.11.0.bb (renamed from meta-python/recipes-devtools/python/python3-netifaces_0.10.9.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-ntplib_0.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-ntplib_0.3.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-oauthlib_3.1.1.bb (renamed from meta-python/recipes-devtools/python/python3-oauthlib_3.1.0.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-paho-mqtt_1.5.1.bb11
-rw-r--r--meta-python/recipes-devtools/python/python3-pandas_1.2.4.bb (renamed from meta-python/recipes-devtools/python/python3-pandas_1.2.3.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pkgconfig_1.5.4.bb (renamed from meta-python/recipes-devtools/python/python3-pkgconfig_1.5.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-portion_2.1.6.bb (renamed from meta-python/recipes-devtools/python/python3-portion_2.1.5.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-prettytable_2.1.0.bb3
-rw-r--r--meta-python/recipes-devtools/python/python3-protobuf_3.17.0.bb (renamed from meta-python/recipes-devtools/python/python3-protobuf_3.14.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pulsectl_21.5.17.bb (renamed from meta-python/recipes-devtools/python/python3-pulsectl_21.3.4.bb)7
-rw-r--r--meta-python/recipes-devtools/python/python3-pycocotools_2.0.2.bb12
-rw-r--r--meta-python/recipes-devtools/python/python3-pydbus-manager_git.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-pyjwt_2.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-pyjwt_2.0.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pymisp_2.4.143.bb (renamed from meta-python/recipes-devtools/python/python3-pymisp_2.4.141.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-pymongo_3.11.4.bb (renamed from meta-python/recipes-devtools/python/python3-pymongo_3.11.3.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pyroute2_0.5.19.bb (renamed from meta-python/recipes-devtools/python/python3-pyroute2_0.5.17.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pyscaffold_4.0.2.bb (renamed from meta-python/recipes-devtools/python/python3-pyscaffold_4.0.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pysonos_0.0.50.bb (renamed from meta-python/recipes-devtools/python/python3-pysonos_0.0.42.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pytest-asyncio_0.15.1.bb (renamed from meta-python/recipes-devtools/python/python3-pytest-asyncio_0.14.0.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2021.4.29.bb (renamed from meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2021.3.24.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pytest-runner_5.3.1.bb (renamed from meta-python/recipes-devtools/python/python3-pytest-runner_5.3.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-python-vlc_3.0.12118.bb (renamed from meta-python/recipes-devtools/python/python3-python-vlc_3.0.12117.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-pythonping_1.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-pythonping_1.0.16.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-pyyaml_5.4.1.bb18
-rw-r--r--meta-python/recipes-devtools/python/python3-pyzmq_22.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-pyzmq_22.0.3.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb (renamed from meta-python/recipes-devtools/python/python3-rfc3339-validator_0.1.3.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-robotframework_4.0.3.bb (renamed from meta-python/recipes-devtools/python/python3-robotframework_4.0.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.7.bb (renamed from meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-scapy_0.26.bb13
-rw-r--r--meta-python/recipes-devtools/python/python3-sentry-sdk_1.1.0.bb (renamed from meta-python/recipes-devtools/python/python3-sentry-sdk_1.0.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-serpent_1.40.bb (renamed from meta-python/recipes-devtools/python/python3-serpent_1.30.2.bb)5
-rw-r--r--meta-python/recipes-devtools/python/python3-sh_1.14.2.bb (renamed from meta-python/recipes-devtools/python/python3-sh_1.14.1.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-socketio_5.3.0.bb (renamed from meta-python/recipes-devtools/python/python3-socketio_5.1.0.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.17.bb (renamed from meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.7.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-supervisor_4.2.2.bb (renamed from meta-python/recipes-devtools/python/python3-supervisor_4.2.1.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-sympy_1.8.bb (renamed from meta-python/recipes-devtools/python/python3-sympy_1.7.1.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-tqdm_4.61.0.bb (renamed from meta-python/recipes-devtools/python/python3-tqdm_4.60.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-typeguard_2.12.1.bb (renamed from meta-python/recipes-devtools/python/python3-typeguard_2.12.0.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-typing-extensions_3.10.0.0.bb (renamed from meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.3.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-ujson/run-ptest2
-rw-r--r--meta-python/recipes-devtools/python/python3-ujson_4.0.2.bb2
-rw-r--r--meta-python/recipes-devtools/python/python3-urllib3_1.26.5.bb (renamed from meta-python/recipes-devtools/python/python3-urllib3_1.26.4.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-watchdog_2.1.2.bb (renamed from meta-python/recipes-devtools/python/python3-watchdog_2.0.2.bb)2
-rw-r--r--meta-python/recipes-devtools/python/python3-websocket-client_1.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-websocket-client_0.58.0.bb)4
-rw-r--r--meta-python/recipes-devtools/python/python3-websockets_9.1.bb (renamed from meta-python/recipes-devtools/python/python3-websockets_8.1.bb)5
-rw-r--r--meta-python/recipes-devtools/python/python3-werkzeug_2.0.1.bb (renamed from meta-python/recipes-devtools/python/python3-werkzeug_1.0.1.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-xlsxwriter_1.4.3.bb (renamed from meta-python/recipes-devtools/python/python3-xlsxwriter_1.3.8.bb)10
-rw-r--r--meta-python/recipes-devtools/python/python3-xmlschema_1.6.2.bb (renamed from meta-python/recipes-devtools/python/python3-xmlschema_1.6.1.bb)3
-rw-r--r--meta-python/recipes-devtools/python/python3-xxhash_2.0.2.bb (renamed from meta-python/recipes-devtools/python/python3-xxhash_2.0.0.bb)5
-rw-r--r--meta-python/recipes-devtools/python/python3-yappi/0001-Fix-imports-for-ptests.patch3905
-rw-r--r--meta-python/recipes-devtools/python/python3-yappi_1.3.2.bb5
-rw-r--r--meta-python/recipes-devtools/python/python3-yarl/0001-Drop-tests-for-semicolon-as-a-separator.patch45
-rw-r--r--meta-python/recipes-devtools/python/python3-yarl_1.6.3.bb1
-rw-r--r--meta-python/recipes-devtools/python/python3-zopeinterface_5.4.0.bb (renamed from meta-python/recipes-devtools/python/python3-zopeinterface_5.3.0.bb)2
124 files changed, 4403 insertions, 397 deletions
diff --git a/meta-python/recipes-devtools/python/python-m2crypto.inc b/meta-python/recipes-devtools/python/python-m2crypto.inc
deleted file mode 100644
index 797a0354b..000000000
--- a/meta-python/recipes-devtools/python/python-m2crypto.inc
+++ /dev/null
@@ -1,63 +0,0 @@
-SUMMARY = "A Python crypto and SSL toolkit"
-HOMEPAGE = "https://gitlab.com/m2crypto/m2crypto"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENCE;md5=b0e1f0b7d0ce8a62c18b1287b991800e"
-
-FILESEXTRAPATHS_prepend := "${THISDIR}/python-m2crypto:"
-
-SRC_URI += "file://0001-setup.py-link-in-sysroot-not-in-host-directories.patch \
- file://cross-compile-platform.patch \
- file://m2crypto-0.26.4-gcc_macros.patch \
- "
-SRC_URI[md5sum] = "7fce3cbf85eb84a669682892b935746b"
-SRC_URI[sha256sum] = "a1b2751cdadc6afac3df8a5799676b7b7c67a6ad144bb62d38563062e7cd3fc6"
-
-PYPI_PACKAGE = "M2Crypto"
-inherit pypi siteinfo
-
-DEPENDS += "openssl swig-native"
-RDEPENDS_${PN} += "\
- ${PYTHON_PN}-datetime \
- ${PYTHON_PN}-distutils \
- ${PYTHON_PN}-logging \
- ${PYTHON_PN}-netclient \
- ${PYTHON_PN}-netserver \
- ${PYTHON_PN}-numbers \
- ${PYTHON_PN}-smtpd \
- ${PYTHON_PN}-xmlrpc \
-"
-
-DISTUTILS_BUILD_ARGS += "build_ext --openssl=${STAGING_EXECPREFIXDIR} -I${STAGING_INCDIR}"
-DISTUTILS_INSTALL_ARGS += "build_ext --openssl=${STAGING_EXECPREFIXDIR}"
-
-SWIG_FEATURES_x86 = "-D__i386__"
-SWIG_FEATURES_x32 = "-D__ILP32__"
-SWIG_FEATURES ?= "-D__${HOST_ARCH}__"
-export SWIG_FEATURES
-
-# Get around a problem with swig, but only if the
-# multilib header file exists.
-#
-do_configure_prepend() {
- ${CPP} -dM - < /dev/null | grep -v '__\(STDC\|REGISTER_PREFIX\|GNUC\|STDC_HOSTED\)__' \
- | sed 's/^\(#define \([^ ]*\) .*\)$/#undef \2\n\1/' > ${S}/SWIG/gcc_macros.h
-
- if [ "${SITEINFO_BITS}" = "64" ];then
- bit="64"
- else
- bit="32"
- fi
-
- if [ -e ${STAGING_INCDIR}/openssl/opensslconf-${bit}.h ] ;then
- for i in SWIG/_ec.i SWIG/_evp.i; do
- sed -i -e "s/opensslconf.*\./opensslconf-${bit}\./" "${S}/$i"
- done
- elif [ -e ${STAGING_INCDIR}/openssl/opensslconf-n${bit}.h ] ;then
- for i in SWIG/_ec.i SWIG/_evp.i; do
- sed -i -e "s/opensslconf.*\./opensslconf-n${bit}\./" "${S}/$i"
- done
- fi
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch b/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch
deleted file mode 100644
index 7f6dd29f8..000000000
--- a/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Imported from Fedora
-
-Index: M2Crypto-0.30.1/SWIG/_m2crypto.i
-===================================================================
---- M2Crypto-0.30.1.orig/SWIG/_m2crypto.i
-+++ M2Crypto-0.30.1/SWIG/_m2crypto.i
-@@ -8,6 +8,11 @@
- *
- */
-
-+%import "gcc_macros.h"
-+
-+%ignore WCHAR_MAX;
-+%ignore WCHAR_MIN;
-+
- %module(threads=1) m2crypto
- /* We really don't need threadblock (PyGILState_Ensure() etc.) anywhere.
- Disable threadallow as well, only enable it for operations likely to
-@@ -15,11 +20,6 @@
- %nothreadblock;
- %nothreadallow;
-
--#if SWIG_VERSION >= 0x030000
--#define __WCHAR_MAX__ __WCHAR_MAX
--#define __WCHAR_MIN__ __WCHAR_MIN
--#endif
--
- %{
- #ifdef _WIN32
- #define _WINSOCKAPI_
-@@ -95,4 +95,3 @@ static PyObject *x509_store_verify_cb_fu
- %constant int encrypt = 1;
- %constant int decrypt = 0;
- #endif
--
diff --git a/meta-python/recipes-devtools/python/python3-aenum_3.0.0.bb b/meta-python/recipes-devtools/python/python3-aenum_3.1.0.bb
index cb8462d24..cb5eab15a 100644
--- a/meta-python/recipes-devtools/python/python3-aenum_3.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-aenum_3.1.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://pypi.org/project/aenum/"
LICENSE = "BSD"
LIC_FILES_CHKSUM = "file://aenum/LICENSE;md5=c6a85477543f8b8591b9c1f82abebbe9"
-SRC_URI[sha256sum] = "17cd8cfed1ee4b617198c9fabbabd70ebd8f01e54ac29cd6c3a92df14bd86656"
+SRC_URI[sha256sum] = "87f0e9ef4f828578ab06af30e4d7944043bf4ecd3f4b7bd1cbe37e2173cde94a"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-aiofiles_0.6.0.bb b/meta-python/recipes-devtools/python/python3-aiofiles_0.7.0.bb
index 89157b504..9d7a49eb6 100644
--- a/meta-python/recipes-devtools/python/python3-aiofiles_0.6.0.bb
+++ b/meta-python/recipes-devtools/python/python3-aiofiles_0.7.0.bb
@@ -4,8 +4,7 @@ HOMEPAGE = "https://github.com/aio-libs/aiohttp"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
-SRC_URI[md5sum] = "3b7ba03babd3d3a6101524469358843e"
-SRC_URI[sha256sum] = "e0281b157d3d5d59d803e3f4557dcc9a3dff28a4dd4829a9ff478adae50ca092"
+SRC_URI[sha256sum] = "a1c4fc9b2ff81568c83e21392a82f344ea9d23da906e4f6a52662764545e19d4"
PYPI_PACKAGE = "aiofiles"
diff --git a/meta-python/recipes-devtools/python/python3-aiohue_2.2.0.bb b/meta-python/recipes-devtools/python/python3-aiohue_2.2.0.bb
deleted file mode 100644
index a2a7363f6..000000000
--- a/meta-python/recipes-devtools/python/python3-aiohue_2.2.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "Asynchronous library to control Philips Hue"
-HOMEPAGE = "https://pypi.org/project/aiohue/"
-SECTION = "devel/python"
-LICENSE = "Apache-2.0"
-# No license file available but the license is specified in PKG-INFO and setup.py.
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=7145f7cdd263359b62d342a02f005515"
-
-SRC_URI[sha256sum] = "35696d04d6eb0328b7031ea3c0a3cfe5d83dfcf62f920522e4767d165c6bc529"
-
-inherit pypi setuptools3
-
-RDEPENDS_${PN} += "${PYTHON_PN}-aiohttp"
diff --git a/meta-python/recipes-devtools/python/python3-aiohue_2.5.1.bb b/meta-python/recipes-devtools/python/python3-aiohue_2.5.1.bb
new file mode 100644
index 000000000..4a203ccc6
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-aiohue_2.5.1.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Asynchronous library to control Philips Hue"
+HOMEPAGE = "https://pypi.org/project/aiohue/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dab31a1d28183826937f4b152143a33f"
+
+SRC_URI[sha256sum] = "3ee8e857b07364516f8b9f0e5c52d4cd775036f3ace37c2769de1e8579f4dc07"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-aiohttp"
diff --git a/meta-python/recipes-devtools/python/python3-alembic_1.5.8.bb b/meta-python/recipes-devtools/python/python3-alembic_1.6.5.bb
index fdf0d36b5..6b58c7704 100644
--- a/meta-python/recipes-devtools/python/python3-alembic_1.5.8.bb
+++ b/meta-python/recipes-devtools/python/python3-alembic_1.6.5.bb
@@ -4,7 +4,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=c4ece55266dcdd02ce165b1ee0e490bb"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "e27fd67732c97a1c370c33169ef4578cf96436fa0e7dcfaeeef4a917d0737d56"
+SRC_URI[sha256sum] = "a21fedebb3fb8f6bbbba51a11114f08c78709377051384c9c5ead5705ee93a51"
PYPI_PACKAGE = "alembic"
@@ -13,4 +13,5 @@ RDEPENDS_${PN} += "\
${PYTHON_PN}-editor \
${PYTHON_PN}-mako \
${PYTHON_PN}-sqlalchemy \
+ ${PYTHON_PN}-misc \
"
diff --git a/meta-python/recipes-devtools/python/python3-argcomplete_1.12.2.bb b/meta-python/recipes-devtools/python/python3-argcomplete_1.12.3.bb
index a08f882ab..7fdf9e019 100644
--- a/meta-python/recipes-devtools/python/python3-argcomplete_1.12.2.bb
+++ b/meta-python/recipes-devtools/python/python3-argcomplete_1.12.3.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/kislyuk/argcomplete"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=2ee41112a44fe7014dce33e26468ba93"
-SRC_URI[sha256sum] = "de0e1282330940d52ea92a80fea2e4b9e0da1932aaa570f84d268939d1897b04"
+SRC_URI[sha256sum] = "2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"
PYPI_PACKAGE = "argcomplete"
@@ -11,6 +11,7 @@ inherit pypi setuptools3
RDEPENDS_${PN} += "\
${PYTHON_PN}-core \
+ ${PYTHON_PN}-io \
"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-arpeggio_1.10.1.bb b/meta-python/recipes-devtools/python/python3-arpeggio_1.10.2.bb
index 38e26623f..468e6d5fd 100644
--- a/meta-python/recipes-devtools/python/python3-arpeggio_1.10.1.bb
+++ b/meta-python/recipes-devtools/python/python3-arpeggio_1.10.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://pypi.org/project/Arpeggio/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=33b8d1ba459a2fa4d801acfd1d1b7ceb"
-SRC_URI[sha256sum] = "920d12cc762edb2eb56daae64a14c93e43dc181b481c88fc79314c0df6ee639e"
+SRC_URI[sha256sum] = "bfe349f252f82f82d84cb886f1d5081d1a31451e6045275e9f90b65d0daa06f1"
PYPI_PACKAGE = "Arpeggio"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-astroid_2.5.3.bb b/meta-python/recipes-devtools/python/python3-astroid_2.5.7.bb
index f1d9c66af..c805dc4dc 100644
--- a/meta-python/recipes-devtools/python/python3-astroid_2.5.3.bb
+++ b/meta-python/recipes-devtools/python/python3-astroid_2.5.7.bb
@@ -2,9 +2,9 @@ SUMMARY = "An abstract syntax tree for Python with inference support."
HOMEPAGE = "https://pypi.python.org/pypi/astroid"
SECTION = "devel/python"
LICENSE = "LGPL-2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a70cf540abf41acb644ac3b621b2fad1"
-SRC_URI[sha256sum] = "ad63b8552c70939568966811a088ef0bc880f99a24a00834abd0e3681b514f91"
+SRC_URI[sha256sum] = "d66a600e1602736a0f24f725a511b0e50d12eb18f54b31ec276d2c26a0a62c6a"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-asttokens_2.0.4.bb b/meta-python/recipes-devtools/python/python3-asttokens_2.0.5.bb
index c2149336f..429a56bae 100644
--- a/meta-python/recipes-devtools/python/python3-asttokens_2.0.4.bb
+++ b/meta-python/recipes-devtools/python/python3-asttokens_2.0.5.bb
@@ -7,7 +7,7 @@ PYPI_PACKAGE = "asttokens"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "a42e57e28f2ac1c85ed9b1f84109401427e5c63c04f61d15b8842b027eec5128"
+SRC_URI[sha256sum] = "9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5"
DEPENDS += "\
python3-setuptools-scm-native \
diff --git a/meta-python/recipes-devtools/python/python3-asyncio-glib_0.1.bb b/meta-python/recipes-devtools/python/python3-asyncio-glib_0.1.bb
new file mode 100644
index 000000000..72da6081a
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-asyncio-glib_0.1.bb
@@ -0,0 +1,11 @@
+SUMMARY = "An implementation of the Python 3 asyncio event loop on top of GLib"
+AUTHOR = "James Henstridge"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+inherit setuptools3 pypi
+
+SRC_URI[md5sum] = "60153055e76ceaacdfbaeafb03d61dd9"
+SRC_URI[sha256sum] = "fe3ceb2ba5f541330c07ca1bd7ae792468d625bad1acf5354a3a7a0b9fd87521"
+
+RDEPENDS_${PN} += "python3-asyncio python3-pygobject"
diff --git a/meta-python/recipes-devtools/python/python3-babel_2.9.0.bb b/meta-python/recipes-devtools/python/python3-babel_2.9.1.bb
index 7248abf33..a54f0d210 100644
--- a/meta-python/recipes-devtools/python/python3-babel_2.9.0.bb
+++ b/meta-python/recipes-devtools/python/python3-babel_2.9.1.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "A collection of tools for internationalizing Python applications"
HOMEPAGE = "http://babel.edgewall.org/"
LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=22a580b27e4ebf9689e466b63aedeb7f"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=05fb707293a85504aa67afc8ea34d747"
-SRC_URI[sha256sum] = "da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05"
+SRC_URI[sha256sum] = "bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"
PYPI_PACKAGE = "Babel"
diff --git a/meta-python/recipes-devtools/python/python3-bidict_0.21.2.bb b/meta-python/recipes-devtools/python/python3-bidict_0.21.2.bb
new file mode 100644
index 000000000..237bd2a63
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-bidict_0.21.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "The bidirectional mapping library for Python."
+DESCRIPTION = "The bidirectional mapping library for Python."
+HOMEPAGE = "https://bidict.readthedocs.io/"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9741c346eef56131163e13b9db1241b3"
+
+SRC_URI[sha256sum] = "4fa46f7ff96dc244abfc437383d987404ae861df797e2fd5b190e233c302be09"
+
+inherit pypi setuptools3
+
+DEPENDS += "python3-setuptools-scm-native"
diff --git a/meta-python/recipes-devtools/python/python3-bitarray_1.9.2.bb b/meta-python/recipes-devtools/python/python3-bitarray_2.1.0.bb
index 0716e8e1d..12de2c97a 100644
--- a/meta-python/recipes-devtools/python/python3-bitarray_1.9.2.bb
+++ b/meta-python/recipes-devtools/python/python3-bitarray_2.1.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/ilanschnell/bitarray"
LICENSE = "PSF"
LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=2ad702cdcd49e8d2ac01d7e7d0810d2d"
-SRC_URI[sha256sum] = "d7a49d21ae04c5af195023b140800186ebf208e3a4fc5b21a1389531cb7a7170"
+SRC_URI[sha256sum] = "97224a19325ecee49a3bf4df3ee0531d3af9cf288b67d089a7ef44a3c4ea3839"
inherit setuptools3 pypi
diff --git a/meta-python/recipes-devtools/python/python3-cachetools_4.2.1.bb b/meta-python/recipes-devtools/python/python3-cachetools_4.2.2.bb
index 616e88045..43049dafe 100644
--- a/meta-python/recipes-devtools/python/python3-cachetools_4.2.1.bb
+++ b/meta-python/recipes-devtools/python/python3-cachetools_4.2.2.bb
@@ -6,7 +6,7 @@ Python 3 Standard Library @lru_cache function decorator."
SECTION = "devel/python"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=2d1e1bf0ccb26126a230c51f997ce362"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=439a07e400525964c3c82684146e46eb"
inherit pypi setuptools3 ptest
@@ -27,6 +27,6 @@ do_install_ptest() {
cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
}
-SRC_URI[sha256sum] = "f469e29e7aa4cff64d8de4aad95ce76de8ea1125a16c68e0d93f65c3c3dc92e9"
+SRC_URI[sha256sum] = "61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-can_3.3.3.bb b/meta-python/recipes-devtools/python/python3-can_3.3.4.bb
index 4da233959..3ca303c72 100644
--- a/meta-python/recipes-devtools/python/python3-can_3.3.3.bb
+++ b/meta-python/recipes-devtools/python/python3-can_3.3.4.bb
@@ -3,8 +3,8 @@ SECTION = "devel/python"
LICENSE = "LGPLv3"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e6a600fd5e1d9cbde2d983680233ad02"
-SRC_URI[md5sum] = "1310da316799e4b12944a6c1dcb017a9"
-SRC_URI[sha256sum] = "ecd69cf6b2f0235345ebe607a15325cf1384c85b24ffbe1d68c3754357f87488"
+SRC_URI[md5sum] = "305075968c56bd85130b19d86e9e505d"
+SRC_URI[sha256sum] = "2d3c223b7adc4dd46ce258d4a33b7e0dbb6c339e002faa40ee4a69d5fdce9449"
PYPI_PACKAGE="python-can"
@@ -21,6 +21,7 @@ RDEPENDS_${PN}_class-target += "\
${PYTHON_PN}-netserver \
${PYTHON_PN}-sqlite3 \
${PYTHON_PN}-wrapt \
+ ${PYTHON_PN}-pkg-resources \
"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-cbor2_5.2.0.bb b/meta-python/recipes-devtools/python/python3-cbor2_5.4.0.bb
index cc067c41a..b791588b4 100644
--- a/meta-python/recipes-devtools/python/python3-cbor2_5.2.0.bb
+++ b/meta-python/recipes-devtools/python/python3-cbor2_5.4.0.bb
@@ -4,8 +4,7 @@ DEPENDS +="${PYTHON_PN}-setuptools-scm-native"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-SRC_URI[sha256sum] = "a33aa2e5534fd74401ac95686886e655e3b2ce6383b3f958199b6e70a87c94bf"
-SRC_URI[md5sum] = "0940aa8bfd1a07f06a983bb6dc78f1ca"
+SRC_URI[sha256sum] = "a7926f7244b08c413f1a4fa71a81aa256771c75bdf1a4fd77308547a2d63dd48"
inherit pypi setuptools3 ptest
diff --git a/meta-python/recipes-devtools/python/python3-cerberus_1.3.3.bb b/meta-python/recipes-devtools/python/python3-cerberus_1.3.4.bb
index fa0bbb0aa..95934c6e4 100644
--- a/meta-python/recipes-devtools/python/python3-cerberus_1.3.3.bb
+++ b/meta-python/recipes-devtools/python/python3-cerberus_1.3.4.bb
@@ -4,8 +4,10 @@ SECTION = "devel/python"
LICENSE = "ISC"
LIC_FILES_CHKSUM = "file://LICENSE;md5=48f8e9432d0dac5e0e7a18211a0bacdb"
+RDEPENDS_${PN} += "python3-setuptools"
+
# The PyPI package uses a capital letter so we have to specify this explicitly
PYPI_PACKAGE = "Cerberus"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "eec10585c33044fb7c69650bc5b68018dac0443753337e2b07684ee0f3c83329"
+SRC_URI[sha256sum] = "d1b21b3954b2498d9a79edf16b3170a3ac1021df88d197dc2ce5928ba519237c"
diff --git a/meta-python/recipes-devtools/python/python3-certifi_2020.12.5.bb b/meta-python/recipes-devtools/python/python3-certifi_2021.5.30.bb
index dd2f6a2f6..ef2c66b14 100644
--- a/meta-python/recipes-devtools/python/python3-certifi_2020.12.5.bb
+++ b/meta-python/recipes-devtools/python/python3-certifi_2021.5.30.bb
@@ -5,9 +5,9 @@ which ships with the Requests codebase, and is derived from Mozilla Firefox's ca
HOMEPAGE = " http://certifi.io/"
LICENSE = "ISC"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=f77f61d14ee6feac4228d3ebd26cc1f1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=67da0714c3f9471067b729eca6c9fbe8"
-SRC_URI[sha256sum] = "1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"
+SRC_URI[sha256sum] = "2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-click-repl_0.1.6.bb b/meta-python/recipes-devtools/python/python3-click-repl_0.2.0.bb
index fce9f9805..76affe274 100644
--- a/meta-python/recipes-devtools/python/python3-click-repl_0.1.6.bb
+++ b/meta-python/recipes-devtools/python/python3-click-repl_0.2.0.bb
@@ -3,7 +3,8 @@ HOMEPAGE = "https://github.com/untitaker/click-repl"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=fee2943fdd4d8afbac9ccc1c8ac137d5"
-SRC_URI[md5sum] = "2d5f4d42cbd1da9a50a49dff4d6087ca"
-SRC_URI[sha256sum] = "b9f29d52abc4d6059f8e276132a111ab8d94980afe6a5432b9d996544afa95d5"
+SRC_URI[sha256sum] = "cd12f68d745bf6151210790540b4cb064c7b13e571bc64b6957d98d120dacfd8"
inherit pypi setuptools3
+
+RDEPENDS_${PN} = "${PYTHON_PN}-click"
diff --git a/meta-python/recipes-devtools/python/python3-click_7.1.2.bb b/meta-python/recipes-devtools/python/python3-click_8.0.1.bb
index 0b513e7cb..22c6c7903 100644
--- a/meta-python/recipes-devtools/python/python3-click_7.1.2.bb
+++ b/meta-python/recipes-devtools/python/python3-click_8.0.1.bb
@@ -8,8 +8,7 @@ HOMEPAGE = "http://click.pocoo.org/"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=1fa98232fd645608937a0fdc82e999b8"
-SRC_URI[md5sum] = "53692f62cb99a1a10c59248f1776d9c0"
-SRC_URI[sha256sum] = "d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"
+SRC_URI[sha256sum] = "8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"
inherit pypi setuptools3 ptest
diff --git a/meta-python/recipes-devtools/python/python3-colorlog_4.8.0.bb b/meta-python/recipes-devtools/python/python3-colorlog_5.0.1.bb
index 6f9b8d47a..61b8152a1 100644
--- a/meta-python/recipes-devtools/python/python3-colorlog_4.8.0.bb
+++ b/meta-python/recipes-devtools/python/python3-colorlog_5.0.1.bb
@@ -1,10 +1,10 @@
DESCRIPTION = "A colored formatter for the python logging module"
HOMEPAGE = "https://github.com/borntyping/python-colorlog"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=85a1d478cd35d62763a1419e948bdde4"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5c3c6ebdec7792ae12df8d1c0a46b26a"
inherit pypi setuptools3
PYPI_PACKAGE = "colorlog"
-SRC_URI[sha256sum] = "59b53160c60902c405cdec28d38356e09d40686659048893e026ecbd589516b1"
+SRC_URI[sha256sum] = "f17c013a06962b02f4449ee07cfdbe6b287df29efc2c9a1515b4a376f4e588ea"
diff --git a/meta-python/recipes-devtools/python/python3-configargparse_1.4.bb b/meta-python/recipes-devtools/python/python3-configargparse_1.4.1.bb
index 393f13874..0c851fef3 100644
--- a/meta-python/recipes-devtools/python/python3-configargparse_1.4.bb
+++ b/meta-python/recipes-devtools/python/python3-configargparse_1.4.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/bw2/ConfigArgParse"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=da746463714cc35999ed9a42339f2943"
-SRC_URI[sha256sum] = "abef9ff44fb0091f0e3bb2ee7e5b26a02b5b62d45408a5272a9bd461f5b59b4b"
+SRC_URI[sha256sum] = "6df537158f28c5ef2e8a8146781833abbc6cb7fca81b1b55d18808ce3439235e"
PYPI_PACKAGE = "ConfigArgParse"
diff --git a/meta-python/recipes-devtools/python/python3-croniter_1.0.11.bb b/meta-python/recipes-devtools/python/python3-croniter_1.0.13.bb
index ca9bf71a5..c520fa715 100644
--- a/meta-python/recipes-devtools/python/python3-croniter_1.0.11.bb
+++ b/meta-python/recipes-devtools/python/python3-croniter_1.0.13.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://docs/LICENSE;md5=b8ee59850b882cbf623188489ea748e2"
PYPI_PACKAGE = "croniter"
-SRC_URI[sha256sum] = "cd89bcbed4d79f56bbf2c9415c2bbbfd09fadc8a59dbae3898fbca5bab34103d"
+SRC_URI[sha256sum] = "57f36df4f5a1c31bbf50bbffa3551612c19f6156ab1e88e2e42342ccbb9f9b9a"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-cryptography_3.3.1.bb b/meta-python/recipes-devtools/python/python3-cryptography_3.3.2.bb
index 79a7ac1bf..0a36ffe1b 100644
--- a/meta-python/recipes-devtools/python/python3-cryptography_3.3.1.bb
+++ b/meta-python/recipes-devtools/python/python3-cryptography_3.3.2.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=bf405a8056a6647e7d077b0e7bc36aba"
LDSHARED += "-pthread"
-SRC_URI[sha256sum] = "7e177e4bea2de937a584b13645cab32f25e3d96fc0bc4a4cf99c27dc77682be6"
+SRC_URI[sha256sum] = "5a60d3780149e13b7a6ff7ad6526b38846354d11a15e21068e57073e29e19bed"
SRC_URI += " \
file://run-ptest \
diff --git a/meta-python/recipes-devtools/python/python3-decorator_5.0.6.bb b/meta-python/recipes-devtools/python/python3-decorator_5.0.9.bb
index 9e837b719..c3acc518a 100644
--- a/meta-python/recipes-devtools/python/python3-decorator_5.0.6.bb
+++ b/meta-python/recipes-devtools/python/python3-decorator_5.0.9.bb
@@ -9,7 +9,7 @@ decorator, just because you can."
LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=be2fd2007972bf96c08af3293d728b22"
-SRC_URI[sha256sum] = "f2e71efb39412bfd23d878e896a51b07744f2e2250b2e87d158e76828c5ae202"
+SRC_URI[sha256sum] = "72ecfba4320a893c53f9706bebb2d55c270c1e51a28789361aa93e4a21319ed5"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-deprecated_1.2.12.bb b/meta-python/recipes-devtools/python/python3-deprecated_1.2.12.bb
new file mode 100644
index 000000000..4651a8ae3
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-deprecated_1.2.12.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Python @deprecated decorator to deprecate old python classes, functions or methods."
+HOMEPAGE = "https://deprecated.readthedocs.io/en/latest/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=44288e26f4896bdab14072d4fa35ff01"
+
+PYPI_PACKAGE = "Deprecated"
+SRC_URI[sha256sum] = "6d2de2de7931a968874481ef30208fd4e08da39177d61d3d4ebdf4366e7dbca1"
+
+inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-django_2.2.16.bb b/meta-python/recipes-devtools/python/python3-django_2.2.16.bb
deleted file mode 100644
index 0715abbd4..000000000
--- a/meta-python/recipes-devtools/python/python3-django_2.2.16.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require python-django.inc
-inherit setuptools3
-
-SRC_URI[md5sum] = "93faf5bbd54a19ea49f4932a813b9758"
-SRC_URI[sha256sum] = "62cf45e5ee425c52e411c0742e641a6588b7e8af0d2c274a27940931b2786594"
-
-RDEPENDS_${PN} += "\
- ${PYTHON_PN}-sqlparse \
-"
diff --git a/meta-python/recipes-devtools/python/python3-django_2.2.23.bb b/meta-python/recipes-devtools/python/python3-django_2.2.23.bb
new file mode 100644
index 000000000..ab4b68fc8
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-django_2.2.23.bb
@@ -0,0 +1,9 @@
+require python-django.inc
+inherit setuptools3
+
+SRC_URI[md5sum] = "d72405637143e201b745714e300bb546"
+SRC_URI[sha256sum] = "12cfc045a4ccb2348719aaaa77b17e66a26bff9fc238b4c765a3e825ef92e414"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-sqlparse \
+"
diff --git a/meta-python/recipes-devtools/python/python3-django_3.2.bb b/meta-python/recipes-devtools/python/python3-django_3.2.4.bb
index e147e2f9d..52504885e 100644
--- a/meta-python/recipes-devtools/python/python3-django_3.2.bb
+++ b/meta-python/recipes-devtools/python/python3-django_3.2.4.bb
@@ -1,7 +1,7 @@
require python-django.inc
inherit setuptools3
-SRC_URI[sha256sum] = "21f0f9643722675976004eb683c55d33c05486f94506672df3d6a141546f389d"
+SRC_URI[sha256sum] = "66c9d8db8cc6fe938a28b7887c1596e42d522e27618562517cc8929eb7e7f296"
RDEPENDS_${PN} += "\
${PYTHON_PN}-sqlparse \
@@ -9,5 +9,5 @@ RDEPENDS_${PN} += "\
# Set DEFAULT_PREFERENCE so that the LTS version of django is built by
# default. To build the 3.x branch,
-# PREFERRED_VERSION_python3-django = "3.2" can be added to local.conf
+# PREFERRED_VERSION_python3-django = "3.2.2" can be added to local.conf
DEFAULT_PREFERENCE = "-1"
diff --git a/meta-python/recipes-devtools/python/python3-docutils_0.17.bb b/meta-python/recipes-devtools/python/python3-docutils_0.17.bb
deleted file mode 100644
index 8605e93b5..000000000
--- a/meta-python/recipes-devtools/python/python3-docutils_0.17.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY = "Docutils is a modular system for processing documentation into useful formats"
-HOMEPAGE = "https://pypi.org/project/docutils/"
-SECTION = "devel/python"
-LICENSE = "BSD-2-Clause & GPL-2.0 & Python-2.0"
-LIC_FILES_CHKSUM = "file://COPYING.txt;md5=836a1950177996968a49ff477a4a61c4"
-
-SRC_URI[sha256sum] = "e2ffeea817964356ba4470efba7c2f42b6b0de0b04e66378507e3e2504bbff4c"
-
-inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-ecdsa_0.16.1.bb b/meta-python/recipes-devtools/python/python3-ecdsa_0.17.0.bb
index 819d41e86..1401f8e58 100644
--- a/meta-python/recipes-devtools/python/python3-ecdsa_0.16.1.bb
+++ b/meta-python/recipes-devtools/python/python3-ecdsa_0.17.0.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=66ffc5e30f76cbb5358fe54b645e5a1d"
DEPENDS += "python3-pip python3-pbr"
PYPI_PACKAGE = "ecdsa"
-SRC_URI[sha256sum] = "cfc046a2ddd425adbd1a78b3c46f0d1325c657811c0f45ecc3a0a6236c1e50ff"
+SRC_URI[sha256sum] = "b9f500bb439e4153d0330610f5d26baaf18d17b8ced1bc54410d189385ea68aa"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-elementpath_2.2.1.bb b/meta-python/recipes-devtools/python/python3-elementpath_2.2.2.bb
index b0a733968..c793592be 100644
--- a/meta-python/recipes-devtools/python/python3-elementpath_2.2.1.bb
+++ b/meta-python/recipes-devtools/python/python3-elementpath_2.2.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/sissaschool/elementpath"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=5dbb7fb7d72da3921202dd7b995d3ecf"
-SRC_URI[sha256sum] = "c7b996c5624926f329f4379fbcffd5787629e08b2f8d7159d23525e9243ba637"
+SRC_URI[sha256sum] = "68de07c1aec3b1d33126111252cc699600dd1e45802625344aa6eb9e680ef157"
PYPI_PACKAGE = "elementpath"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-engineio_3.13.0.bb b/meta-python/recipes-devtools/python/python3-engineio_4.2.0.bb
index 51f853390..15b321c35 100644
--- a/meta-python/recipes-devtools/python/python3-engineio_3.13.0.bb
+++ b/meta-python/recipes-devtools/python/python3-engineio_4.2.0.bb
@@ -9,5 +9,13 @@ inherit pypi setuptools3
PYPI_PACKAGE = "python-engineio"
-SRC_URI[md5sum] = "822b5dba0308dde6b8cbfd022daae0e4"
-SRC_URI[sha256sum] = "2da5e1e5565e170a17169d1a76eb6a099cc96f0a25a5b1e0f9785f151485daea"
+RDEPENDS_${PN} += " \
+ python3-netclient \
+ python3-json \
+ python3-logging \
+ python3-compression \
+ python3-asyncio \
+"
+
+SRC_URI[md5sum] = "1fa937ec2a9f6feac27e9f65824c5781"
+SRC_URI[sha256sum] = "4e97c1189c23923858f5bb6dc47cfcd915005383c3c039ff01c89f2c00d62077"
diff --git a/meta-python/recipes-devtools/python/python3-et-xmlfile_1.0.1.bb b/meta-python/recipes-devtools/python/python3-et-xmlfile_1.0.1.bb
deleted file mode 100644
index cfff150cc..000000000
--- a/meta-python/recipes-devtools/python/python3-et-xmlfile_1.0.1.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "et_xmlfile is a low memory library for creating large XML files"
-DESCRIPTION = "It is based upon the xmlfile module from lxml with the aim of allowing code \
-to be developed that will work with both libraries. It was developed initially for \
-the openpyxl project but is now a standalone module."
-
-HOMEPAGE = "https://bitbucket.org/openpyxl/et_xmlfile/src/default/"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://PKG-INFO;md5=b3d89cae66f26c3a0799be8a96f3178b"
-
-SRC_URI[md5sum] = "f47940fd9d556375420b2e276476cfaf"
-SRC_URI[sha256sum] = "614d9722d572f6246302c4491846d2c393c199cfa4edc9af593437691683335b"
-
-RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-io ${PYTHON_PN}-pprint ${PYTHON_PN}-shell"
-
-inherit setuptools3
-PYPI_PACKAGE ?= "et_xmlfile"
-PYPI_SRC_URI ?= "https://files.pythonhosted.org/packages/source/e/et_xmlfile/et_xmlfile-1.0.1.tar.gz"
-SECTION = "devel/python"
-SRC_URI += "${PYPI_SRC_URI}"
-S = "${WORKDIR}/${PYPI_PACKAGE}-${PV}"
diff --git a/meta-python/recipes-devtools/python/python3-et-xmlfile_1.1.0.bb b/meta-python/recipes-devtools/python/python3-et-xmlfile_1.1.0.bb
new file mode 100644
index 000000000..182a81d69
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-et-xmlfile_1.1.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "et_xmlfile is a low memory library for creating large XML files"
+DESCRIPTION = "It is based upon the xmlfile module from lxml with the aim of allowing code \
+to be developed that will work with both libraries. It was developed initially for \
+the openpyxl project but is now a standalone module."
+
+HOMEPAGE = "https://foss.heptapod.net/openpyxl/et_xmlfile"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[sha256sum] = "8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-io ${PYTHON_PN}-pprint ${PYTHON_PN}-shell"
+
+inherit setuptools3 pypi
+
+PYPI_PACKAGE = "et_xmlfile"
diff --git a/meta-python/recipes-devtools/python/python3-fasteners_0.16.bb b/meta-python/recipes-devtools/python/python3-fasteners_0.16.1.bb
index eed8d2c95..4b33a9ec6 100644
--- a/meta-python/recipes-devtools/python/python3-fasteners_0.16.bb
+++ b/meta-python/recipes-devtools/python/python3-fasteners_0.16.1.bb
@@ -3,6 +3,11 @@ HOMEPAGE = "https://github.com/harlowja/fasteners"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=4476c4be31402271e101d9a4a3430d52"
-SRC_URI[sha256sum] = "c995d8c26b017c5d6a6de9ad29a0f9cdd57de61ae1113d28fac26622b06a0933"
+SRC_URI[sha256sum] = "b6f488d0fc9a3591a32d779400a00c3ebfadd41f45eb024d66f15a6c4e1c4a72"
inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-fcntl \
+"
diff --git a/meta-python/recipes-devtools/python/python3-flask-migrate_2.7.0.bb b/meta-python/recipes-devtools/python/python3-flask-migrate_3.0.0.bb
index 1bf0dfa80..8f84e0597 100644
--- a/meta-python/recipes-devtools/python/python3-flask-migrate_2.7.0.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-migrate_3.0.0.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "SQLAlchemy database migrations for Flask applications using Alemb
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3b69377f79f3f48c661701236d5a6a85"
-SRC_URI[sha256sum] = "ae2f05671588762dd83a21d8b18c51fe355e86783e24594995ff8d7380dffe38"
+SRC_URI[sha256sum] = "a6607e66bf1d68489b2281ead5caa6fdf7a21b71984fae922ef5f915ac45bbcb"
PYPI_PACKAGE = "Flask-Migrate"
diff --git a/meta-python/recipes-devtools/python/python3-flask-restful_0.3.8.bb b/meta-python/recipes-devtools/python/python3-flask-restful_0.3.9.bb
index 3de916afd..4b83158a7 100644
--- a/meta-python/recipes-devtools/python/python3-flask-restful_0.3.8.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-restful_0.3.9.bb
@@ -6,8 +6,7 @@ HOMEPAGE = "https://github.com/flask-restful/flask-restful"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=685bb55ed99a366bb431995f5eef2783"
-SRC_URI[md5sum] = "e8051ff104ab4b3b867ba18d28953fae"
-SRC_URI[sha256sum] = "5ea9a5991abf2cb69b4aac19793faac6c032300505b325687d7c305ffaa76915"
+SRC_URI[sha256sum] = "ccec650b835d48192138c85329ae03735e6ced58e9b2d9c2146d6c84c06fa53e"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-flask-socketio_5.0.1.bb b/meta-python/recipes-devtools/python/python3-flask-socketio_5.0.3.bb
index 4c5d0a3fb..5def7621e 100644
--- a/meta-python/recipes-devtools/python/python3-flask-socketio_5.0.1.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-socketio_5.0.3.bb
@@ -9,7 +9,7 @@ inherit pypi setuptools3
PYPI_PACKAGE = "Flask-SocketIO"
-SRC_URI[sha256sum] = "5c4319f5214ada20807857dc8fdf3dc7d2afe8d6dd38f5c516c72e2be47d2227"
+SRC_URI[sha256sum] = "4fb968c43bc384f184cd1a25c1842297c2e3d6efc2f755a61be6d4406858220f"
RDEPENDS_${PN} += "\
${PYTHON_PN}-flask \
diff --git a/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.3.bb b/meta-python/recipes-devtools/python/python3-flask-wtf_0.15.1.bb
index 213a0b58b..84b2a9e27 100644
--- a/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.3.bb
+++ b/meta-python/recipes-devtools/python/python3-flask-wtf_0.15.1.bb
@@ -2,8 +2,7 @@ DESCRIPTION = "Simple integration of Flask and WTForms."
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3ca6bb31670492f791e6a9f2fb9f8a80"
-SRC_URI[md5sum] = "1b60b7dd1245b0d0173c21123717af61"
-SRC_URI[sha256sum] = "d417e3a0008b5ba583da1763e4db0f55a1269d9dd91dcc3eb3c026d3c5dbd720"
+SRC_URI[sha256sum] = "ff177185f891302dc253437fe63081e7a46a4e99aca61dfe086fb23e54fff2dc"
PYPI_PACKAGE = "Flask-WTF"
diff --git a/meta-python/recipes-devtools/python/python3-flask_1.1.2.bb b/meta-python/recipes-devtools/python/python3-flask_2.0.1.bb
index 23799617f..6c63a388a 100644
--- a/meta-python/recipes-devtools/python/python3-flask_1.1.2.bb
+++ b/meta-python/recipes-devtools/python/python3-flask_2.0.1.bb
@@ -6,8 +6,7 @@ HOMEPAGE = "https://github.com/mitsuhiko/flask/"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
-SRC_URI[md5sum] = "0da4145d172993cd28a6c619630cc19c"
-SRC_URI[sha256sum] = "4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060"
+SRC_URI[sha256sum] = "1c4c257b1892aec1398784c63791cbaa43062f1f7aeb555c4da961b20ee68f55"
PYPI_PACKAGE = "Flask"
@@ -15,4 +14,10 @@ inherit pypi setuptools3
CLEANBROKEN = "1"
-RDEPENDS_${PN} = "${PYTHON_PN}-werkzeug ${PYTHON_PN}-jinja2 ${PYTHON_PN}-itsdangerous ${PYTHON_PN}-click"
+RDEPENDS_${PN} = " \
+ ${PYTHON_PN}-werkzeug \
+ ${PYTHON_PN}-jinja2 \
+ ${PYTHON_PN}-itsdangerous \
+ ${PYTHON_PN}-click \
+ ${PYTHON_PN}-profile \
+"
diff --git a/meta-python/recipes-devtools/python/python3-google-api-python-client_2.1.0.bb b/meta-python/recipes-devtools/python/python3-google-api-python-client_2.6.0.bb
index 11b94b3fc..c6ae6e847 100644
--- a/meta-python/recipes-devtools/python/python3-google-api-python-client_2.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-google-api-python-client_2.6.0.bb
@@ -4,6 +4,6 @@ HOMEPAGE = "https://github.com/googleapis/google-api-python-client"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=94023d14f6b58272fd885e4e3f2f08b3"
-SRC_URI[sha256sum] = "f9ac377efe69571aea1acc9e15760d4204aca23c4464eb63f963ae4defc95d97"
+SRC_URI[sha256sum] = "6a87f324334247bf7ba24406da586424b09e715d04336fb7cf45a402b80d38e8"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-greenlet_1.0.0.bb b/meta-python/recipes-devtools/python/python3-greenlet_1.1.0.bb
index 32194dba7..0f0f18fe3 100644
--- a/meta-python/recipes-devtools/python/python3-greenlet_1.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-greenlet_1.1.0.bb
@@ -1,8 +1,9 @@
SUMMARY = "Python lightweight in-process concurrent programming"
+HOMEPAGE = "https://greenlet.readthedocs.io/en/latest/"
LICENSE = "MIT & PSF"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e95668d68e4329085c7ab3535e6a7aee \
file://LICENSE.PSF;md5=c106931d9429eda0492617f037b8f69a"
-SRC_URI[sha256sum] = "719e169c79255816cdcf6dccd9ed2d089a72a9f6c42273aae12d55e8d35bdcf8"
+SRC_URI[sha256sum] = "c87df8ae3f01ffb4483c796fe1b15232ce2b219f0b18126948616224d3f658ee"
inherit pypi distutils3 setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-grpcio/mips_bigendian.patch b/meta-python/recipes-devtools/python/python3-grpcio/mips_bigendian.patch
index 343f25a46..775afa415 100644
--- a/meta-python/recipes-devtools/python/python3-grpcio/mips_bigendian.patch
+++ b/meta-python/recipes-devtools/python/python3-grpcio/mips_bigendian.patch
@@ -12,4 +12,4 @@
+#elif defined(__mips__) && defined(__LP64__)
#define OPENSSL_64_BIT
#define OPENSSL_MIPS64
- #elif defined(__riscv)
+ #elif defined(__riscv) && __SIZEOF_POINTER__ == 8
diff --git a/meta-python/recipes-devtools/python/python3-grpcio/riscv64_support.patch b/meta-python/recipes-devtools/python/python3-grpcio/riscv64_support.patch
deleted file mode 100644
index 350c67dea..000000000
--- a/meta-python/recipes-devtools/python/python3-grpcio/riscv64_support.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Add RISC-V 64bit support
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
---- a/third_party/boringssl-with-bazel/src/include/openssl/base.h
-+++ b/third_party/boringssl-with-bazel/src/include/openssl/base.h
-@@ -108,6 +108,14 @@ extern "C" {
- #elif defined(__MIPSEL__) && defined(__LP64__)
- #define OPENSSL_64_BIT
- #define OPENSSL_MIPS64
-+#elif defined(__riscv)
-+# if (__riscv_xlen == 64)
-+# define OPENSSL_64_BIT
-+# define OPENSSL_RISCV64
-+# elif(__riscv_xlen == 32)
-+# define OPENSSL_32_BIT
-+# define OPENSSL_RISCV32
-+# endif
- #elif defined(__pnacl__)
- #define OPENSSL_32_BIT
- #define OPENSSL_PNACL
diff --git a/meta-python/recipes-devtools/python/python3-grpcio_1.37.0.bb b/meta-python/recipes-devtools/python/python3-grpcio_1.38.0.bb
index 47fb71120..d9e00422b 100644
--- a/meta-python/recipes-devtools/python/python3-grpcio_1.37.0.bb
+++ b/meta-python/recipes-devtools/python/python3-grpcio_1.38.0.bb
@@ -8,12 +8,11 @@ DEPENDS += "${PYTHON_PN}-protobuf"
SRC_URI += "file://0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch"
SRC_URI_append_class-target = " file://ppc-boringssl-support.patch \
- file://riscv64_support.patch \
file://boring_ssl.patch \
file://mips_bigendian.patch \
file://0001-absl-always-use-asm-sgidefs.h.patch \
"
-SRC_URI[sha256sum] = "b3ce16aa91569760fdabd77ca901b2288152eb16941d28edd9a3a75a0c4a8a85"
+SRC_URI[sha256sum] = "abbf9c8c3df4d5233d5888c6cfa85c1bb68a6923749bd4dd1abc6e1e93986f17"
RDEPENDS_${PN} = "${PYTHON_PN}-protobuf \
${PYTHON_PN}-setuptools \
@@ -46,4 +45,3 @@ CCACHE_DISABLE = "1"
# needs vdso support
COMPATIBLE_HOST_libc-musl_powerpc64le = "null"
-
diff --git a/meta-python/recipes-devtools/python/python3-haversine/0001-setup.py-Correct-the-license-assignment.patch b/meta-python/recipes-devtools/python/python3-haversine/0001-setup.py-Correct-the-license-assignment.patch
new file mode 100644
index 000000000..bb5955a44
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-haversine/0001-setup.py-Correct-the-license-assignment.patch
@@ -0,0 +1,32 @@
+From 56b421a18ef8acb41ab9e4bde7e1f5452ec67da9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 17 May 2021 22:17:07 -0700
+Subject: [PATCH] setup.py: Correct the license assignment
+
+latest python/2.9 + setuptools bail out otherwise
+
+lines = header.split('\n')
+| AttributeError: 'list' object has no attribute 'split'
+
+Upstream-Status: Submitted [https://github.com/mapado/haversine/pull/38]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index 549436d..9e7fb00 100755
+--- a/setup.py
++++ b/setup.py
+@@ -15,7 +15,7 @@ setup(
+ maintainer_email='julien.deniau@mapado.com',
+ url='https://github.com/mapado/haversine',
+ packages=['haversine'],
+- license=['MIT'],
++ license='MIT',
+ classifiers=[
+ 'Development Status :: 4 - Beta',
+ 'Intended Audience :: Developers',
+--
+2.31.1
+
diff --git a/meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb b/meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb
index 6e02fcf71..624d30ca0 100644
--- a/meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb
+++ b/meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb
@@ -2,6 +2,8 @@ SUMMARY = "Calculate the distance between 2 points on Earth"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+SRC_URI += "file://0001-setup.py-Correct-the-license-assignment.patch"
+
SRC_URI[md5sum] = "ff2d43a74195ec00c42ccd5da2a3f3de"
SRC_URI[sha256sum] = "72c76855ac25e6ad054c7ed380e95c1a96803185f005dd11f40ccaa9620b551f"
diff --git a/meta-python/recipes-devtools/python/python3-huey_2.3.1.bb b/meta-python/recipes-devtools/python/python3-huey_2.3.2.bb
index d8141c8e8..4ef80c4a8 100644
--- a/meta-python/recipes-devtools/python/python3-huey_2.3.1.bb
+++ b/meta-python/recipes-devtools/python/python3-huey_2.3.2.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=5cac039fcc82f01141cc170b48f315d4"
PYPI_PACKAGE = "huey"
-SRC_URI[sha256sum] = "de9b6d0fd59794378fe05813d302be68038044ef3b68274b84ca8d285e20f803"
+SRC_URI[sha256sum] = "7176acb113850824490da5a31f328cc48a2002a59bfb396efbab8ecbd3573910"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-humanize_3.4.0.bb b/meta-python/recipes-devtools/python/python3-humanize_3.7.1.bb
index f9c22e891..977b6ebfe 100644
--- a/meta-python/recipes-devtools/python/python3-humanize_3.4.0.bb
+++ b/meta-python/recipes-devtools/python/python3-humanize_3.7.1.bb
@@ -5,7 +5,7 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENCE;md5=4ecc42519e84f6f3e23529464df7bd1d"
-SRC_URI[sha256sum] = "096b9ae6d1d56321d3d81f17117c2068179d7b4f7f73ba4baf302726923b48ec"
+SRC_URI[sha256sum] = "b8e7878f3063174b212bb82b9e5bee3b24bc47931e44df0bd34bcb1d8e0acf2f"
inherit pypi setuptools3
@@ -15,6 +15,7 @@ DEPENDS += "\
RDEPENDS_${PN} += "\
${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-setuptools \
"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-icu/fix_host_include.patch b/meta-python/recipes-devtools/python/python3-icu/0001-Fix-host-contamination-of-include-files.patch
index 1b6e89043..c45217a88 100644
--- a/meta-python/recipes-devtools/python/python3-icu/fix_host_include.patch
+++ b/meta-python/recipes-devtools/python/python3-icu/0001-Fix-host-contamination-of-include-files.patch
@@ -1,17 +1,24 @@
-Fixed host contamination of include files
+From 8abf79f77d9151d6786da3c8e868117822bce6d4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Apr 2021 10:48:36 -0700
+Subject: [PATCH] Fix host contamination of include files
python3-icu-2.5-r0 do_package_qa: QA Issue: python3-icu: The compile log indicates that host include and/or library paths were used.
Also, don't use icu-config
-Upstream-Status: [inappropriate] OE specific
+Upstream-Status: Inappropriate [OE specific]
Signed-off-by: Armin Kuster <akuster808@gmail.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ setup.py | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
-Index: PyICU-2.5/setup.py
-===================================================================
---- PyICU-2.5.orig/setup.py
-+++ PyICU-2.5/setup.py
-@@ -81,7 +81,7 @@ Building PyICU %s for ICU %s (max ICU ma
+diff --git a/setup.py b/setup.py
+index e647db4..abed399 100644
+--- a/setup.py
++++ b/setup.py
+@@ -81,7 +81,7 @@ Building PyICU %s for ICU %s (max ICU major version supported: %s)
CONFIGURE_WITH_ICU_CONFIG = {
'darwin': True,
@@ -20,7 +27,7 @@ Index: PyICU-2.5/setup.py
'freebsd': False, # not tested
'win32': False, # no icu-config
'sunos5': False, # not tested
-@@ -274,7 +274,6 @@ setup(name="PyICU",
+@@ -267,7 +267,6 @@ setup(name="PyICU",
ext_modules=[Extension('_icu',
[filename for filename in sorted(os.listdir(os.curdir))
if filename.endswith('.cpp')],
@@ -28,3 +35,6 @@ Index: PyICU-2.5/setup.py
extra_compile_args=_cflags,
extra_link_args=_lflags,
libraries=_libraries)],
+--
+2.31.1
+
diff --git a/meta-python/recipes-devtools/python/python3-icu_2.6.bb b/meta-python/recipes-devtools/python/python3-icu_2.6.bb
deleted file mode 100644
index 58f5e563b..000000000
--- a/meta-python/recipes-devtools/python/python3-icu_2.6.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "Python extension wrapping the ICU C++ API"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=c7c4bfd81a21e3b6368bdcced992bf59"
-
-DEPENDS += "pkgconfig icu"
-
-PYPI_PACKAGE = "PyICU"
-SRC_URI[sha256sum] = "a9a5bf6833360f8f69e9375b91c1a7dd6e0c9157a42aee5bb7d6891804d96371"
-
-SRC_URI += "file://fix_host_include.patch"
-
-inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-icu_2.7.2.bb b/meta-python/recipes-devtools/python/python3-icu_2.7.2.bb
new file mode 100644
index 000000000..4c064c3d4
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-icu_2.7.2.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Python extension wrapping the ICU C++ API"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://setup.py;beginline=244;endline=252;md5=3e00c41c6d04310707992b93307a224f"
+
+DEPENDS += "pkgconfig icu"
+
+PYPI_PACKAGE = "PyICU"
+SRC_URI[sha256sum] = "1382869b22d91cc99274f9b525fa7d9199b44d9007ff0036a09747839a01e9dc"
+
+SRC_URI += "file://0001-Fix-host-contamination-of-include-files.patch"
+
+inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-idna_3.1.bb b/meta-python/recipes-devtools/python/python3-idna_3.2.bb
index fbdbab6df..4ca7f625a 100644
--- a/meta-python/recipes-devtools/python/python3-idna_3.1.bb
+++ b/meta-python/recipes-devtools/python/python3-idna_3.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/kjd/idna"
LICENSE = "BSD-3-Clause & Python-2.0 & Unicode"
LIC_FILES_CHKSUM = "file://LICENSE.md;md5=239668a7c6066d9e0c5382e9c8c6c0e1"
-SRC_URI[sha256sum] = "c5b02147e01ea9920e6b0a3f1f7bb833612d507592c837a6c49552768f4054e1"
+SRC_URI[sha256sum] = "467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-ipython_7.22.0.bb b/meta-python/recipes-devtools/python/python3-ipython_7.24.1.bb
index 7bc0d1d00..96d50b76d 100644
--- a/meta-python/recipes-devtools/python/python3-ipython_7.22.0.bb
+++ b/meta-python/recipes-devtools/python/python3-ipython_7.24.1.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING.rst;md5=59b20262b8663cdd094005bddf47af5f"
PYPI_PACKAGE = "ipython"
-SRC_URI[sha256sum] = "9c900332d4c5a6de534b4befeeb7de44ad0cc42e8327fa41b7685abde58cec74"
+SRC_URI[sha256sum] = "9bc24a99f5d19721fb8a2d1408908e9c0520a17fff2233ffe82620847f17f1b6"
RDEPENDS_${PN} = "\
${PYTHON_PN}-setuptools \
diff --git a/meta-python/recipes-devtools/python/python3-itsdangerous_1.1.0.bb b/meta-python/recipes-devtools/python/python3-itsdangerous_2.0.1.bb
index 7f50641c8..f8f2fbdaa 100644
--- a/meta-python/recipes-devtools/python/python3-itsdangerous_1.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-itsdangerous_2.0.1.bb
@@ -1,10 +1,9 @@
SUMMARY = "Various helpers to pass trusted data to untrusted environments and back."
HOMEPAGE = "http://github.com/mitsuhiko/itsdangerous"
LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=370799bf709a1e4a6a369fa089ac73a6"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=4cda9a0ebd516714f360b0e9418cfb37"
-SRC_URI[md5sum] = "9b7f5afa7f1e3acfb7786eeca3d99307"
-SRC_URI[sha256sum] = "321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"
+SRC_URI[sha256sum] = "9e724d68fc22902a1435351f84c3fb8623f303fffcc566a4cb952df8c572cff0"
inherit pypi setuptools3
@@ -14,4 +13,5 @@ RDEPENDS_${PN} += " \
${PYTHON_PN}-simplejson \
${PYTHON_PN}-netclient \
${PYTHON_PN}-compression \
+ ${PYTHON_PN}-json \
"
diff --git a/meta-python/recipes-devtools/python/python3-javaobj-py3_0.4.2.bb b/meta-python/recipes-devtools/python/python3-javaobj-py3_0.4.3.bb
index 2f2421981..eb93e7173 100644
--- a/meta-python/recipes-devtools/python/python3-javaobj-py3_0.4.2.bb
+++ b/meta-python/recipes-devtools/python/python3-javaobj-py3_0.4.3.bb
@@ -5,9 +5,9 @@ DESCRIPTION = "python-javaobj is a python library that provides functions\
representation is a standard data interchange format in Java world."
HOMEPAGE = "https://github.com/tcalmant/python-javaobj"
LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=d273d63619c9aeaf15cdaf76422c4f87"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-SRC_URI[sha256sum] = "ed3b1ffcfd39f165729cb53587cca02ab0bfa4c332c837a92d5ffe6aef5c8010"
+SRC_URI[sha256sum] = "38f74db3a57e9998a9774e3614afb95cb396f139f29b3fdb130c5af554435259"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-jinja2_2.%.bbappend b/meta-python/recipes-devtools/python/python3-jinja2_2.%.bbappend
deleted file mode 100644
index 9fe358427..000000000
--- a/meta-python/recipes-devtools/python/python3-jinja2_2.%.bbappend
+++ /dev/null
@@ -1,13 +0,0 @@
-# Main recipe was moved to oe-core, but with ptest disabled
-inherit ${@bb.utils.filter('DISTRO_FEATURES', 'ptest', d)}
-
-do_install_ptest() {
- install -d ${D}${PTEST_PATH}/tests
- cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
-}
-
-RDEPENDS_${PN}-ptest += " \
- ${PYTHON_PN}-pytest \
- ${PYTHON_PN}-toml \
- ${PYTHON_PN}-unixadmin \
-"
diff --git a/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.6.0.bb b/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.6.0.bb
index 700c70e53..60eb2a62b 100644
--- a/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.6.0.bb
+++ b/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.6.0.bb
@@ -4,7 +4,7 @@ LICENSE = "BSD-2-Clause"
SECTION = "devel/python"
LIC_FILES_CHKSUM = "file://LICENSE;md5=9c5c2c74370826468065c5702b8a1fcf"
-DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native ${PYTHON_PN}-pip-native"
SRC_URI[sha256sum] = "489000d368377571c6f982fba6497f2aa13c6d1facc40660963da62f5c379726"
diff --git a/meta-python/recipes-devtools/python/python3-m2crypto/0001-Allow-verify_cb_-to-be-called-with-ok-True.patch b/meta-python/recipes-devtools/python/python3-m2crypto/0001-Allow-verify_cb_-to-be-called-with-ok-True.patch
new file mode 100644
index 000000000..3c836635a
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-m2crypto/0001-Allow-verify_cb_-to-be-called-with-ok-True.patch
@@ -0,0 +1,47 @@
+From 73fbd1e646f6bbf202d4418bae80eb9941fbf552 Mon Sep 17 00:00:00 2001
+From: Casey Deccio <casey@deccio.net>
+Date: Fri, 8 Jan 2021 12:43:09 -0700
+Subject: [PATCH] Allow verify_cb_* to be called with ok=True
+
+With https://github.com/openssl/openssl/commit/2e06150e3928daa06d5ff70c32bffad8088ebe58
+OpenSSL allowed verificaton to continue on UNABLE_TO_VERIFY_LEAF_SIGNATURE
+---
+ tests/test_ssl.py | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/tests/test_ssl.py b/tests/test_ssl.py
+index 92b6942..7a3271a 100644
+--- a/tests/test_ssl.py
++++ b/tests/test_ssl.py
+@@ -59,8 +59,13 @@ def allocate_srv_port():
+
+
+ def verify_cb_new_function(ok, store):
+- assert not ok
+ err = store.get_error()
++ # If err is X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE, then instead of
++ # aborting, this callback is called to retrieve additional error
++ # information. In this case, ok might not be False.
++ # See https://github.com/openssl/openssl/commit/2e06150e3928daa06d5ff70c32bffad8088ebe58
++ if err != m2.X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE:
++ assert not ok
+ assert err in [m2.X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT,
+ m2.X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY,
+ m2.X509_V_ERR_CERT_UNTRUSTED,
+@@ -618,7 +623,12 @@ class MiscSSLClientTestCase(BaseSSLClientTestCase):
+
+ def verify_cb_old(self, ctx_ptr, x509_ptr, err, depth, ok):
+ try:
+- self.assertFalse(ok)
++ # If err is X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE, then instead of
++ # aborting, this callback is called to retrieve additional error
++ # information. In this case, ok might not be False.
++ # See https://github.com/openssl/openssl/commit/2e06150e3928daa06d5ff70c32bffad8088ebe58
++ if err != m2.X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE:
++ self.assertFalse(ok)
+ self.assertIn(err,
+ [m2.X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT,
+ m2.X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY,
+--
+2.29.2
+
diff --git a/meta-python/recipes-devtools/python/python3-m2crypto/0001-Use-of-RSA_SSLV23_PADDING-has-been-deprecated.patch b/meta-python/recipes-devtools/python/python3-m2crypto/0001-Use-of-RSA_SSLV23_PADDING-has-been-deprecated.patch
new file mode 100644
index 000000000..2313a324a
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-m2crypto/0001-Use-of-RSA_SSLV23_PADDING-has-been-deprecated.patch
@@ -0,0 +1,29 @@
+From d06eaa88a5f491827733f32027c46de3557fbd05 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= <mcepl@cepl.eu>
+Date: Fri, 19 Feb 2021 15:53:02 +0100
+Subject: [PATCH] Use of RSA_SSLV23_PADDING has been deprecated.
+
+Fixes #293.
+---
+ tests/test_rsa.py | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/tests/test_rsa.py b/tests/test_rsa.py
+index 3de5016..7299785 100644
+--- a/tests/test_rsa.py
++++ b/tests/test_rsa.py
+@@ -124,11 +124,6 @@ class RSATestCase(unittest.TestCase):
+ ptxt = priv.private_decrypt(ctxt, p)
+ self.assertEqual(ptxt, self.data)
+
+- # sslv23_padding
+- ctxt = priv.public_encrypt(self.data, RSA.sslv23_padding)
+- res = priv.private_decrypt(ctxt, RSA.sslv23_padding)
+- self.assertEqual(res, self.data)
+-
+ # no_padding
+ with six.assertRaisesRegex(self, RSA.RSAError, 'data too small'):
+ priv.public_encrypt(self.data, RSA.no_padding)
+--
+2.29.2
+
diff --git a/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch b/meta-python/recipes-devtools/python/python3-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch
index b339d93f7..f4c74384f 100644
--- a/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch
+++ b/meta-python/recipes-devtools/python/python3-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch
@@ -10,19 +10,17 @@ Upstream-status: Unknown
setup.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
-Index: M2Crypto-0.30.1/setup.py
-===================================================================
---- M2Crypto-0.30.1.orig/setup.py
-+++ M2Crypto-0.30.1/setup.py
-@@ -130,6 +130,7 @@ class _M2CryptoBuildExt(build_ext.build_
+--- a/setup.py
++++ b/setup.py
+@@ -135,6 +135,7 @@ class _M2CryptoBuildExt(build_ext.build_
self.set_undefined_options('build', ('bundledlls', 'bundledlls'))
self.libraries = ['ssl', 'crypto']
+ self.openssl = os.environ.get( "STAGING_DIR" )
if sys.platform == 'win32':
self.libraries = ['ssleay32', 'libeay32']
- if self.openssl and openssl_version(self.openssl, 0x10100000, True):
-@@ -150,8 +151,8 @@ class _M2CryptoBuildExt(build_ext.build_
+ if self.openssl and openssl_version(self.openssl,
+@@ -159,8 +160,8 @@ class _M2CryptoBuildExt(build_ext.build_
if self.openssl is not None:
log.debug('self.openssl = %s', self.openssl)
diff --git a/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch b/meta-python/recipes-devtools/python/python3-m2crypto/cross-compile-platform.patch
index 4b64f4613..f039ae866 100644
--- a/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch
+++ b/meta-python/recipes-devtools/python/python3-m2crypto/cross-compile-platform.patch
@@ -4,11 +4,9 @@ since it pokes at the system for getting architecture values
Upstream-Status: Inappropriate
Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Index: M2Crypto-0.30.1/setup.py
-===================================================================
---- M2Crypto-0.30.1.orig/setup.py
-+++ M2Crypto-0.30.1/setup.py
-@@ -160,22 +160,6 @@ class _M2CryptoBuildExt(build_ext.build_
+--- a/setup.py
++++ b/setup.py
+@@ -169,22 +169,6 @@ class _M2CryptoBuildExt(build_ext.build_
log.debug('self.include_dirs = %s', self.include_dirs)
log.debug('self.library_dirs = %s', self.library_dirs)
diff --git a/meta-python/recipes-devtools/python/python3-m2crypto_0.30.1.bb b/meta-python/recipes-devtools/python/python3-m2crypto_0.30.1.bb
deleted file mode 100644
index 4d63d4bd3..000000000
--- a/meta-python/recipes-devtools/python/python3-m2crypto_0.30.1.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-m2crypto.inc
diff --git a/meta-python/recipes-devtools/python/python3-m2crypto_0.37.1.bb b/meta-python/recipes-devtools/python/python3-m2crypto_0.37.1.bb
new file mode 100644
index 000000000..2284a43a3
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-m2crypto_0.37.1.bb
@@ -0,0 +1,45 @@
+SUMMARY = "A Python crypto and SSL toolkit"
+HOMEPAGE = "https://gitlab.com/m2crypto/m2crypto"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=b0e1f0b7d0ce8a62c18b1287b991800e"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-m2crypto:"
+
+SRC_URI += "file://0001-setup.py-link-in-sysroot-not-in-host-directories.patch \
+ file://cross-compile-platform.patch \
+ file://0001-Allow-verify_cb_-to-be-called-with-ok-True.patch \
+ file://0001-Use-of-RSA_SSLV23_PADDING-has-been-deprecated.patch \
+ "
+SRC_URI[sha256sum] = "e4e42f068b78ccbf113e5d0a72ae5f480f6c3ace4940b91e4fff5598cfff6fb3"
+
+PYPI_PACKAGE = "M2Crypto"
+inherit pypi siteinfo setuptools3
+
+DEPENDS += "openssl swig-native"
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-distutils \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-smtpd \
+ ${PYTHON_PN}-xmlrpc \
+"
+
+DISTUTILS_BUILD_ARGS += "build_ext --openssl=${STAGING_EXECPREFIXDIR} -I${STAGING_INCDIR}"
+DISTUTILS_INSTALL_ARGS += "build_ext --openssl=${STAGING_EXECPREFIXDIR}"
+
+SWIG_FEATURES_x86 = "-D__i386__"
+SWIG_FEATURES_x32 = "-D__ILP32__"
+
+SWIG_FEATURES ?= "-D__${HOST_ARCH}__ ${@['-D__ILP32__','-D__LP64__'][d.getVar('SITEINFO_BITS') != '32']}"
+
+SWIG_FEATURES_append_riscv64 = " -D__SIZEOF_POINTER__=${SITEINFO_BITS}/8 -D__riscv_xlen=${SITEINFO_BITS}"
+SWIG_FEATURES_append_riscv32 = " -D__SIZEOF_POINTER__=${SITEINFO_BITS}/8 -D__riscv_xlen=${SITEINFO_BITS}"
+SWIG_FEATURES_append_mipsarch = " -D_MIPS_SZPTR=${SITEINFO_BITS}"
+SWIG_FEATURES_append_powerpc64le = " -D__powerpc64__"
+export SWIG_FEATURES
+
+BBCLASSEXTEND = "native"
diff --git a/meta-python/recipes-devtools/python/python3-markdown_3.3.4.bb b/meta-python/recipes-devtools/python/python3-markdown_3.3.4.bb
deleted file mode 100644
index b51e8eef1..000000000
--- a/meta-python/recipes-devtools/python/python3-markdown_3.3.4.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-SUMMARY = "A Python implementation of John Gruber's Markdown."
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.md;md5=745aaad0c69c60039e638bff9ffc59ed"
-
-inherit pypi setuptools3
-
-PYPI_PACKAGE = "Markdown"
-SRC_URI[sha256sum] = "31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49"
-
-BBCLASSEXTEND = "native"
-
-RDEPENDS_${PN} += "${PYTHON_PN}-logging ${PYTHON_PN}-setuptools"
diff --git a/meta-python/recipes-devtools/python/python3-markupsafe_1.%.bbappend b/meta-python/recipes-devtools/python/python3-markupsafe_1.%.bbappend
deleted file mode 100644
index abfda6065..000000000
--- a/meta-python/recipes-devtools/python/python3-markupsafe_1.%.bbappend
+++ /dev/null
@@ -1,12 +0,0 @@
-# Main recipe was moved to oe-core, but with ptest disabled
-inherit ${@bb.utils.filter('DISTRO_FEATURES', 'ptest', d)}
-
-RDEPENDS_${PN}-ptest += " \
- ${PYTHON_PN}-pytest \
-"
-
-do_install_ptest() {
- install -d ${D}${PTEST_PATH}/tests
- cp -f ${S}/tests/* ${D}${PTEST_PATH}/tests/
-}
-
diff --git a/meta-python/recipes-devtools/python/python3-matplotlib-inline_0.1.2.bb b/meta-python/recipes-devtools/python/python3-matplotlib-inline_0.1.2.bb
new file mode 100644
index 000000000..f060f9333
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-matplotlib-inline_0.1.2.bb
@@ -0,0 +1,8 @@
+SUMMARY = "Inline Matplotlib backend for Jupyter"
+HOMEPAGE = "https://pypi.org/project/matplotlib-inline/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c2728819a4288030f51c594327977be0"
+
+SRC_URI[sha256sum] = "f41d5ff73c9f5385775d5c0bc13b424535c8402fe70ea8210f93e11f3683993e"
+
+inherit pypi
diff --git a/meta-python/recipes-devtools/python/python3-netifaces_0.10.9.bb b/meta-python/recipes-devtools/python/python3-netifaces_0.11.0.bb
index 7edb7e7fb..09e54b0ba 100644
--- a/meta-python/recipes-devtools/python/python3-netifaces_0.10.9.bb
+++ b/meta-python/recipes-devtools/python/python3-netifaces_0.11.0.bb
@@ -4,7 +4,6 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=a53cbc7cb75660694e138ba973c148df"
-SRC_URI[md5sum] = "de92cc322b4f56047c073f802ad77860"
-SRC_URI[sha256sum] = "2dee9ffdd16292878336a58d04a20f0ffe95555465fee7c9bd23b3490ef2abf3"
+SRC_URI[sha256sum] = "043a79146eb2907edf439899f262b3dfe41717d34124298ed281139a8b93ca32"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-ntplib_0.3.4.bb b/meta-python/recipes-devtools/python/python3-ntplib_0.4.0.bb
index ae4c10f38..9477a7606 100644
--- a/meta-python/recipes-devtools/python/python3-ntplib_0.3.4.bb
+++ b/meta-python/recipes-devtools/python/python3-ntplib_0.4.0.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://ntplib.py;beginline=1;endline=23;md5=afa07338a9595257e94c205c3e72224d"
SRC_URI = "git://github.com/cf-natali/ntplib.git"
-SRCREV ?= "aea7925c26152024ca8cf207e77f403f8127727a"
+SRCREV ?= "b9c11c5906bc802a20a2dab390e57c50be558808"
S = "${WORKDIR}/git"
diff --git a/meta-python/recipes-devtools/python/python3-oauthlib_3.1.0.bb b/meta-python/recipes-devtools/python/python3-oauthlib_3.1.1.bb
index fe27e8e50..e11786349 100644
--- a/meta-python/recipes-devtools/python/python3-oauthlib_3.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-oauthlib_3.1.1.bb
@@ -4,8 +4,7 @@ HOMEPAGE = "https://github.com/idan/oauthlib"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=abd2675e944a2011aed7e505290ba482"
-SRC_URI[md5sum] = "43cb2b5bac983712ee55076b61181cc2"
-SRC_URI[sha256sum] = "bee41cc35fcca6e988463cacc3bcb8a96224f470ca547e697b604cc697b2f889"
+SRC_URI[sha256sum] = "8f0215fcc533dd8dd1bee6f4c412d4f0cd7297307d43ac61666389e3bc3198a3"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-paho-mqtt_1.5.1.bb b/meta-python/recipes-devtools/python/python3-paho-mqtt_1.5.1.bb
index d93bc884e..d002c0fc5 100644
--- a/meta-python/recipes-devtools/python/python3-paho-mqtt_1.5.1.bb
+++ b/meta-python/recipes-devtools/python/python3-paho-mqtt_1.5.1.bb
@@ -13,6 +13,17 @@ SRC_URI[sha256sum] = "9feb068e822be7b3a116324e01fb6028eb1d66412bf98595ae72698965
DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+do_install_append() {
+ install -d -m0755 ${D}${datadir}/${BPN}/examples
+ cp --preserve=mode,timestamps -R ${S}/examples/* ${D}${datadir}/${BPN}/examples
+}
+
+PACKAGES =+ "${PN}-examples"
+
+RDEPENDS_${PN}-examples += "${PN}"
+
+FILES_${PN}-examples = "${datadir}/${BPN}/examples"
+
RDEPENDS_${PN} = "\
${PYTHON_PN}-io \
${PYTHON_PN}-logging \
diff --git a/meta-python/recipes-devtools/python/python3-pandas_1.2.3.bb b/meta-python/recipes-devtools/python/python3-pandas_1.2.4.bb
index 8c36c21bb..54fa910a9 100644
--- a/meta-python/recipes-devtools/python/python3-pandas_1.2.3.bb
+++ b/meta-python/recipes-devtools/python/python3-pandas_1.2.4.bb
@@ -6,7 +6,7 @@ HOMEPAGE = "http://pandas.pydata.org/"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c2a8f987b2ce77c368c6b3e1b5b10774"
-SRC_URI[sha256sum] = "df6f10b85aef7a5bb25259ad651ad1cc1d6bb09000595cab47e718cbac250b1d"
+SRC_URI[sha256sum] = "649ecab692fade3cbfcf967ff936496b0cfba0af00a55dfaacd82bdda5cb2279"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.2.bb b/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.4.bb
index 7a98ef288..852b27816 100644
--- a/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.2.bb
+++ b/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.4.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=faa7f82be8f220bff6156be4790344fc"
-SRC_URI[sha256sum] = "38d612488f0633755a2e7a8acab6c01d20d63dbc31af75e2a9ac98a6f638ca94"
+SRC_URI[sha256sum] = "c34503829fd226822fd93c902b1cf275516908a023a24be0a02ba687f3a00399"
RDEPENDS_${PN} = "pkgconfig \
${PYTHON_PN}-shell \
diff --git a/meta-python/recipes-devtools/python/python3-portion_2.1.5.bb b/meta-python/recipes-devtools/python/python3-portion_2.1.6.bb
index 0fa107c33..a1076f9f0 100644
--- a/meta-python/recipes-devtools/python/python3-portion_2.1.5.bb
+++ b/meta-python/recipes-devtools/python/python3-portion_2.1.6.bb
@@ -7,6 +7,6 @@ LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=05f1e16a8e59ce3e9a979e881816c2ab"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "ed62fd1450336026f55c7d40b92b7159efd81d1420c778dd1b592bb634b14b4c"
+SRC_URI[sha256sum] = "725b65da806fb79df05c0b6383b01631c510f371d9bc0ece93a996b4260ba085"
BBCLASSEXTEND = "native"
diff --git a/meta-python/recipes-devtools/python/python3-prettytable_2.1.0.bb b/meta-python/recipes-devtools/python/python3-prettytable_2.1.0.bb
index fe7206255..70034f840 100644
--- a/meta-python/recipes-devtools/python/python3-prettytable_2.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-prettytable_2.1.0.bb
@@ -31,7 +31,8 @@ RDEPENDS_${PN} += " \
"
RDEPENDS_${PN}-ptest += " \
- ${PYTHON_PN}-pytest \
+ ${PYTHON_PN}-pytest \
+ ${PYTHON_PN}-sqlite3 \
"
do_install_ptest() {
diff --git a/meta-python/recipes-devtools/python/python3-protobuf_3.14.0.bb b/meta-python/recipes-devtools/python/python3-protobuf_3.17.0.bb
index 3cf850d1f..be846f799 100644
--- a/meta-python/recipes-devtools/python/python3-protobuf_3.14.0.bb
+++ b/meta-python/recipes-devtools/python/python3-protobuf_3.17.0.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=19e8f490f9526b1de8
inherit pypi setuptools3
-SRC_URI[sha256sum] = "1d63eb389347293d8915fb47bee0951c7b5dab522a4a60118b9a18f33e21f8ce"
+SRC_URI[sha256sum] = "05dfe9319939a8473c21b469f34f6486646e54fb8542637cf7ed8e2fbfe21538"
# http://errors.yoctoproject.org/Errors/Details/184715/
# Can't find required file: ../src/google/protobuf/descriptor.proto
diff --git a/meta-python/recipes-devtools/python/python3-pulsectl_21.3.4.bb b/meta-python/recipes-devtools/python/python3-pulsectl_21.5.17.bb
index a4455eeb1..3c0a9c0e5 100644
--- a/meta-python/recipes-devtools/python/python3-pulsectl_21.3.4.bb
+++ b/meta-python/recipes-devtools/python/python3-pulsectl_21.5.17.bb
@@ -3,8 +3,11 @@ HOMEPAGE = "https://github.com/mk-fg/python-pulse-control"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=f1d10048469ff90123263eb5e214061d"
-SRC_URI[sha256sum] = "faa8b9336237565990298f20870e13dd1678a4586847ca5a7ff2abf10752f356"
+SRC_URI[sha256sum] = "3f782b3adf6d91b2398504002d248b36aa047bd04d5acd0ae5d4e2d3c8e746a0"
-RDEPENDS_${PN} += "pulseaudio"
+RDEPENDS_${PN} += " \
+ libpulse \
+ python3-ctypes \
+"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-pycocotools_2.0.2.bb b/meta-python/recipes-devtools/python/python3-pycocotools_2.0.2.bb
new file mode 100644
index 000000000..ef2a7c589
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-pycocotools_2.0.2.bb
@@ -0,0 +1,12 @@
+SUMMARY = "COCO is a large image dataset designed for object detection, segmentation, \
+ person keypoints detection, stuff segmentation, and caption generation."
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://pycocotools/coco.py;beginline=45;endline=45;md5=12cb539683cf245df8b6ce782d78f647"
+
+inherit setuptools3 pypi
+
+SRC_URI[md5sum] = "33858f23c8b99ce8116b70c32f6b6dd9"
+SRC_URI[sha256sum] = "24717a12799b4471c2e54aa210d642e6cd4028826a1d49fcc2b0e3497e041f1a"
+
+DEPENDS = "python3-cython-native python3-numpy-native virtual/crypt"
+RDEPENDS_${PN} = "python3-matplotlib python3-pillow python3-profile"
diff --git a/meta-python/recipes-devtools/python/python3-pydbus-manager_git.bb b/meta-python/recipes-devtools/python/python3-pydbus-manager_git.bb
index ae9e42160..9fb3a485b 100644
--- a/meta-python/recipes-devtools/python/python3-pydbus-manager_git.bb
+++ b/meta-python/recipes-devtools/python/python3-pydbus-manager_git.bb
@@ -11,3 +11,5 @@ SRCREV = "6b576b969cbda50521dca62a7df929167207f9fc"
PV = "git${SRCPV}"
S = "${WORKDIR}/git"
+
+RDEPENDS_${PN} += "python3-pydbus"
diff --git a/meta-python/recipes-devtools/python/python3-pyjwt_2.0.1.bb b/meta-python/recipes-devtools/python/python3-pyjwt_2.1.0.bb
index ed52da4d4..f1486f477 100644
--- a/meta-python/recipes-devtools/python/python3-pyjwt_2.0.1.bb
+++ b/meta-python/recipes-devtools/python/python3-pyjwt_2.1.0.bb
@@ -5,7 +5,7 @@ HOMEPAGE = "http://github.com/jpadilla/pyjwt"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=68626705a7b513ca8d5f44a3e200ed0c"
-SRC_URI[sha256sum] = "a5c70a06e1f33d81ef25eecd50d50bd30e34de1ca8b2b9fa3fe0daaabcf69bf7"
+SRC_URI[sha256sum] = "fba44e7898bbca160a2b2b501f492824fc8382485d3a6f11ba5d0c1937ce6130"
PYPI_PACKAGE = "PyJWT"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-pymisp_2.4.141.1.bb b/meta-python/recipes-devtools/python/python3-pymisp_2.4.143.bb
index df6f1c762..1e3ef27a7 100644
--- a/meta-python/recipes-devtools/python/python3-pymisp_2.4.141.1.bb
+++ b/meta-python/recipes-devtools/python/python3-pymisp_2.4.143.bb
@@ -4,7 +4,7 @@ LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=a3639cf5780f71b125d3e9d1dc127c20"
SRC_URI = "git://github.com/MISP/PyMISP.git;protocol=https;branch=main"
-SRCREV = "62cd5173f087e88834e88472060181b681b0b4d2"
+SRCREV = "c2e9663765e83f1a4aa70099546bec653ed770e7"
S = "${WORKDIR}/git"
inherit setuptools3
@@ -15,6 +15,8 @@ RDEPENDS_${PN} += " \
${PYTHON_PN}-jsonschema \
${PYTHON_PN}-requests \
${PYTHON_PN}-six \
+ ${PYTHON_PN}-deprecated \
+ ${PYTHON_PN}-wrapt \
"
# Fixes: python3-pymisp requires /bin/bash, but no
diff --git a/meta-python/recipes-devtools/python/python3-pymongo_3.11.3.bb b/meta-python/recipes-devtools/python/python3-pymongo_3.11.4.bb
index 3549adce7..0c07344cb 100644
--- a/meta-python/recipes-devtools/python/python3-pymongo_3.11.3.bb
+++ b/meta-python/recipes-devtools/python/python3-pymongo_3.11.4.bb
@@ -8,7 +8,7 @@ HOMEPAGE = "http://github.com/mongodb/mongo-python-driver"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-SRC_URI[sha256sum] = "db5098587f58fbf8582d9bda2462762b367207246d3e19623782fb449c3c5fcc"
+SRC_URI[sha256sum] = "539d4cb1b16b57026999c53e5aab857fe706e70ae5310cc8c232479923f932e6"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-pyroute2_0.5.17.bb b/meta-python/recipes-devtools/python/python3-pyroute2_0.5.19.bb
index 1d3d5a253..903bd6459 100644
--- a/meta-python/recipes-devtools/python/python3-pyroute2_0.5.17.bb
+++ b/meta-python/recipes-devtools/python/python3-pyroute2_0.5.19.bb
@@ -3,7 +3,7 @@ LICENSE = "GPLv2 & Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE.GPL.v2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://LICENSE.Apache.v2;md5=34281e312165f843a2b7d1f114fe65ce"
-SRC_URI[sha256sum] = "12d51066ea5628a6fa76fc244f301a8eea5d25d71a9d664016976edfa3889733"
+SRC_URI[sha256sum] = "45460d12ed2a5caf272a357a3360b36d1e346f17afe1425b66fc21d70f462b29"
inherit setuptools3 pypi ptest
diff --git a/meta-python/recipes-devtools/python/python3-pyscaffold_4.0.1.bb b/meta-python/recipes-devtools/python/python3-pyscaffold_4.0.2.bb
index b0f8f3e9f..bba94f8a0 100644
--- a/meta-python/recipes-devtools/python/python3-pyscaffold_4.0.1.bb
+++ b/meta-python/recipes-devtools/python/python3-pyscaffold_4.0.2.bb
@@ -12,6 +12,6 @@ inherit pypi setuptools3
PYPI_PACKAGE = "PyScaffold"
-SRC_URI[sha256sum] = "8fd7b2bdbfc7f7758a66d66cbf796af338e40d69fd4f7b4ddb9996c38add1dbe"
+SRC_URI[sha256sum] = "cfa719c2d97392ec3cd5f44d95ec0d40df2dd483d5ee05ea029896cfd7c04af8"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-pysonos_0.0.42.bb b/meta-python/recipes-devtools/python/python3-pysonos_0.0.50.bb
index 25defabc5..cfa0d6ef0 100644
--- a/meta-python/recipes-devtools/python/python3-pysonos_0.0.42.bb
+++ b/meta-python/recipes-devtools/python/python3-pysonos_0.0.50.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=07b0e2ca9ac77cd65cd4edf2e13367ea"
-SRC_URI[sha256sum] = "20b45fa1779a01325e67822d243e1a3f7657d8b515308d84c1eb3c805cc3bdb5"
+SRC_URI[sha256sum] = "15a583b819c1e758cca72d5e148d59dd3bf7c9d59f19b5e79ab38c743c3e0738"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.14.0.bb b/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.15.1.bb
index 1e94c25f7..1aa606b78 100644
--- a/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.14.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.15.1.bb
@@ -3,8 +3,7 @@ DESCRIPTION = "pytest-asyncio is an Apache2 licensed library, written in Python,
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
-SRC_URI[md5sum] = "b63593bc08f445f6e3f14c34128a68ed"
-SRC_URI[sha256sum] = "9882c0c6b24429449f5f969a5158b528f39bde47dc32e85b9f0403965017e700"
+SRC_URI[sha256sum] = "2564ceb9612bbd560d19ca4b41347b54e7835c2f792c504f698e05395ed63f6f"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2021.3.24.bb b/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2021.4.29.bb
index 9211ac394..86b66f021 100644
--- a/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2021.3.24.bb
+++ b/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2021.4.29.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=440a4cdb311cd7ad181efb4cba06d562"
-SRC_URI[sha256sum] = "188df5a7c52390fa27d6cd2f18e74d64a2ef0b9fb6e12f15fdf5a95f4813d25f"
+SRC_URI[sha256sum] = "183524e3db4e2a1fea92e0ca3662a624ba44c9f3568da15679d7535ba6838a6a"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-pytest-runner_5.3.0.bb b/meta-python/recipes-devtools/python/python3-pytest-runner_5.3.1.bb
index 35f6c6c0a..fcbd29050 100644
--- a/meta-python/recipes-devtools/python/python3-pytest-runner_5.3.0.bb
+++ b/meta-python/recipes-devtools/python/python3-pytest-runner_5.3.1.bb
@@ -2,7 +2,7 @@ SUMMARY = "Invoke py.test as distutils command with dependency resolution"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=7a7126e068206290f3fe9f8d6c713ea6"
-SRC_URI[sha256sum] = "ca3f58ff4957e8be6c54c55d575b235725cbbcf4dc0d5091c29c6444cfc8a5fe"
+SRC_URI[sha256sum] = "0fce5b8dc68760f353979d99fdd6b3ad46330b6b1837e2077a89ebcf204aac91"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-python-vlc_3.0.12117.bb b/meta-python/recipes-devtools/python/python3-python-vlc_3.0.12118.bb
index 5d9dde9d2..3e799cf62 100644
--- a/meta-python/recipes-devtools/python/python3-python-vlc_3.0.12117.bb
+++ b/meta-python/recipes-devtools/python/python3-python-vlc_3.0.12118.bb
@@ -3,6 +3,6 @@ HOMEPAGE = "wiki.videolan.org/PythonBinding"
LICENSE = "LGPL-2.0"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-SRC_URI[sha256sum] = "dd512f8438c1bba032fe9d22a7f8f98423a537992141ce2d1b28e29aff30381d"
+SRC_URI[sha256sum] = "566f2f7c303f6800851cacc016df1c6eeec094ad63e0a49d87db9d698094f1fb"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-pythonping_1.0.16.bb b/meta-python/recipes-devtools/python/python3-pythonping_1.1.0.bb
index 5affb934c..fd66a6ffd 100644
--- a/meta-python/recipes-devtools/python/python3-pythonping_1.0.16.bb
+++ b/meta-python/recipes-devtools/python/python3-pythonping_1.1.0.bb
@@ -4,8 +4,7 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://setup.py;beginline=12;endline=12;md5=2d33c00f47720c7e35e1fdb4b9fab027"
-SRC_URI[md5sum] = "9b505ad8a5b8a6a8e57ccf75098ea364"
-SRC_URI[sha256sum] = "d025c8b25952580dea47bc241421e17a5a97f97f50098e1096dd10d845d0f156"
+SRC_URI[sha256sum] = "71199bdeee942ba1258b65f88ca5624278e63b31e7643ee8ca7292d2f5f77e99"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-pyyaml_5.4.1.bb b/meta-python/recipes-devtools/python/python3-pyyaml_5.4.1.bb
deleted file mode 100644
index c3025fdc6..000000000
--- a/meta-python/recipes-devtools/python/python3-pyyaml_5.4.1.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Python support for YAML"
-DEPENDS += "libyaml ${PYTHON_PN}-cython-native"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=6d8242660a8371add5fe547adf083079"
-
-PYPI_PACKAGE = "PyYAML"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"
-
-RDEPENDS_${PN} += "\
- ${PYTHON_PN}-datetime \
- ${PYTHON_PN}-netclient \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-pyzmq_22.0.3.bb b/meta-python/recipes-devtools/python/python3-pyzmq_22.1.0.bb
index dbf8e6446..f213131da 100644
--- a/meta-python/recipes-devtools/python/python3-pyzmq_22.0.3.bb
+++ b/meta-python/recipes-devtools/python/python3-pyzmq_22.1.0.bb
@@ -8,7 +8,7 @@ DEPENDS = "zeromq"
FILESEXTRAPATHS_prepend := "${THISDIR}/python-pyzmq:"
SRC_URI += "file://club-rpath-out.patch"
-SRC_URI[sha256sum] = "f7f63ce127980d40f3e6a5fdb87abf17ce1a7c2bd8bf2c7560e1bbce8ab1f92d"
+SRC_URI[sha256sum] = "7040d6dd85ea65703904d023d7f57fab793d7ffee9ba9e14f3b897f34ff2415d"
inherit pypi pkgconfig setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-rfc3339-validator_0.1.3.bb b/meta-python/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb
index a07a09447..f1064f327 100644
--- a/meta-python/recipes-devtools/python/python3-rfc3339-validator_0.1.3.bb
+++ b/meta-python/recipes-devtools/python/python3-rfc3339-validator_0.1.4.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=a21b13b5a996f08f7e0b088aa38ce9c6"
FILESEXTRAPATHS_prepend := "${THISDIR}/python-rfc3339-validator:"
-SRC_URI[sha256sum] = "7a578aa0740e9ee2b48356fe1f347139190c4c72e27f303b3617054efd15df32"
+SRC_URI[sha256sum] = "138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"
PYPI_PACKAGE = "rfc3339_validator"
diff --git a/meta-python/recipes-devtools/python/python3-robotframework_4.0.1.bb b/meta-python/recipes-devtools/python/python3-robotframework_4.0.3.bb
index 3e5d67e0a..d95ab109a 100644
--- a/meta-python/recipes-devtools/python/python3-robotframework_4.0.1.bb
+++ b/meta-python/recipes-devtools/python/python3-robotframework_4.0.3.bb
@@ -13,7 +13,7 @@ inherit pypi setuptools3
PYPI_PACKAGE_EXT = "zip"
-SRC_URI[sha256sum] = "9fa609ceb78f67b1476edce8a7011b16bf3ab41c0fb8c211de6c99955eaf9fde"
+SRC_URI[sha256sum] = "93c2107f789fd897f234f4b8f1ba8e7b9f4ef326d9bcbfceb71dda8cc197388c"
RDEPENDS_${PN} += " \
${PYTHON_PN}-shell \
diff --git a/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.4.bb b/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.7.bb
index 2543269fc..5da0ac3fc 100644
--- a/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.4.bb
+++ b/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.7.bb
@@ -10,7 +10,7 @@ inherit pypi setuptools3
BBCLASSEXTEND = "native nativesdk"
-SRC_URI[sha256sum] = "44bc6b54fddd45e4bc0619059196679f9e8b79c027f4131bb072e6a22f4d5e28"
+SRC_URI[sha256sum] = "5c3fa739bbedd2f23769656784e671c6335d17a5bf163c3c3901d8663c0af287"
do_install_prepend() {
export RUAMEL_NO_PIP_INSTALL_CHECK=1
diff --git a/meta-python/recipes-devtools/python/python3-scapy_0.26.bb b/meta-python/recipes-devtools/python/python3-scapy_0.26.bb
deleted file mode 100644
index 31c88942d..000000000
--- a/meta-python/recipes-devtools/python/python3-scapy_0.26.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "Packet crafting/sending/sniffing, PCAP processing tool,\
-based on scapy with python3 compatibility"
-SECTION = "devel/python"
-HOMEPAGE = "https://github.com/phaethon/scapy"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://PKG-INFO;md5=a88f5c4e1c935f295ebeaf51fc8644ef"
-
-inherit pypi setuptools3
-
-PYPI_PACKAGE = "scapy-python3"
-
-SRC_URI[md5sum] = "513469447735a4a416d495f63e28aa4b"
-SRC_URI[sha256sum] = "81e4f5522d38c136fd3f1be4e35ffe4fd1f4c2091db3c021d95f8b9d5978b9eb"
diff --git a/meta-python/recipes-devtools/python/python3-sentry-sdk_1.0.0.bb b/meta-python/recipes-devtools/python/python3-sentry-sdk_1.1.0.bb
index 22b9f55dd..89c659dba 100644
--- a/meta-python/recipes-devtools/python/python3-sentry-sdk_1.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-sentry-sdk_1.1.0.bb
@@ -5,7 +5,9 @@ HOMEPAGE = "https://github.com/getsentry/sentry-python"
LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=0c79f8d3c91fc847350efd28bfe0a341"
-SRC_URI[sha256sum] = "71de00c9711926816f750bc0f57ef2abbcb1bfbdf5378c601df7ec978f44857a"
+RDEPENDS_${PN} += "python3-urllib3"
+
+SRC_URI[sha256sum] = "c1227d38dca315ba35182373f129c3e2722e8ed999e52584e6aca7d287870739"
PYPI_PACKAGE = "sentry-sdk"
diff --git a/meta-python/recipes-devtools/python/python3-serpent_1.30.2.bb b/meta-python/recipes-devtools/python/python3-serpent_1.40.bb
index 64edff76b..305222f76 100644
--- a/meta-python/recipes-devtools/python/python3-serpent_1.30.2.bb
+++ b/meta-python/recipes-devtools/python/python3-serpent_1.40.bb
@@ -1,9 +1,8 @@
SUMMARY = "Serialization based on ast.literal_eval"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://PKG-INFO;md5=5271c65b7cf83bd28055e592c2d14667"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d7c28f460fafe7be454fcdcac0b60263"
-SRC_URI[md5sum] = "cbef4f9c88f88c38195d11a0363a095f"
-SRC_URI[sha256sum] = "72753820246a7d8486e8b385353e3bbf769abfceec2e850fa527a288b084ff7a"
+SRC_URI[sha256sum] = "10b34e7f8e3207ee6fb70dcdc9bce473851ee3daf0b47c58aec1b48032ac11ce"
inherit pypi ptest setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-sh_1.14.1.bb b/meta-python/recipes-devtools/python/python3-sh_1.14.2.bb
index 89d5008e9..5728ccf25 100644
--- a/meta-python/recipes-devtools/python/python3-sh_1.14.1.bb
+++ b/meta-python/recipes-devtools/python/python3-sh_1.14.2.bb
@@ -3,8 +3,7 @@ HOMEPAGE = "https://github.com/amoffat/sh"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=5317094292296f03405f59ae5f6544b6"
-SRC_URI[md5sum] = "50fc0a2953930ed8d0f6570835e88abf"
-SRC_URI[sha256sum] = "39aa9af22f6558a0c5d132881cf43e34828ca03e4ae11114852ca6a55c7c1d8e"
+SRC_URI[sha256sum] = "9d7bd0334d494b2a4609fe521b2107438cdb21c0e469ffeeb191489883d6fe0d"
PYPI_PACKAGE = "sh"
diff --git a/meta-python/recipes-devtools/python/python3-socketio_5.1.0.bb b/meta-python/recipes-devtools/python/python3-socketio_5.3.0.bb
index 8cf6a96ba..4a9d3ebef 100644
--- a/meta-python/recipes-devtools/python/python3-socketio_5.1.0.bb
+++ b/meta-python/recipes-devtools/python/python3-socketio_5.3.0.bb
@@ -9,7 +9,7 @@ inherit pypi setuptools3
PYPI_PACKAGE = "python-socketio"
-SRC_URI[sha256sum] = "338cc29abb6f3ca14c88f1f8d05ed27c690df4648f62062b299f92625bbf7093"
+SRC_URI[sha256sum] = "3dcc9785aaeef3a9eeb36c3818095662342744bdcdabd050fe697cdb826a1c2b"
PACKAGECONFIG ?= "asyncio_client client"
PACKAGECONFIG[asyncio_client] = ",,,${PYTHON_PN}-aiohttp ${PYTHON_PN}-websockets"
@@ -24,4 +24,5 @@ RDEPENDS_${PN} += "\
${PYTHON_PN}-threading \
${PYTHON_PN}-six \
${PYTHON_PN}-attrs \
+ ${PYTHON_PN}-bidict \
"
diff --git a/meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.7.bb b/meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.17.bb
index 883b2660b..5b881ea0b 100644
--- a/meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.7.bb
+++ b/meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.17.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://www.sqlalchemy.org/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3359ed561ac16aaa25b6c6eff84df595"
-SRC_URI[sha256sum] = "84115f97d88c8ccf26db81b7997c5f5de9ae360e0785ef859d0987794495f0a9"
+SRC_URI[sha256sum] = "651cdb3adcee13624ba22d5ff3e96f91e16a115d2ca489ddc16a8e4c217e8509"
PYPI_PACKAGE = "SQLAlchemy"
inherit pypi setuptools3
@@ -16,4 +16,6 @@ RDEPENDS_${PN} += " \
${PYTHON_PN}-netclient \
${PYTHON_PN}-numbers \
${PYTHON_PN}-threading \
+ ${PYTHON_PN}-compression \
+ ${PYTHON_PN}-profile \
"
diff --git a/meta-python/recipes-devtools/python/python3-supervisor_4.2.1.bb b/meta-python/recipes-devtools/python/python3-supervisor_4.2.2.bb
index 0ff4b35d9..6944ecb97 100644
--- a/meta-python/recipes-devtools/python/python3-supervisor_4.2.1.bb
+++ b/meta-python/recipes-devtools/python/python3-supervisor_4.2.2.bb
@@ -7,7 +7,7 @@ HOMEPAGE = "https://github.com/Supervisor/supervisor"
LICENSE = "BSD-4-Clause"
LIC_FILES_CHKSUM = "file://LICENSES.txt;md5=5b4e3a2172bba4c47cded5885e7e507e"
-SRC_URI[sha256sum] = "c479c875853e9c013d1fa73e529fd2165ff1ecaecc7e82810ba57e7362ae984d"
+SRC_URI[sha256sum] = "5b2b8882ec8a3c3733cce6965cc098b6d80b417f21229ab90b18fe551d619f90"
PYPI_PACKAGE = "supervisor"
inherit pypi systemd setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-sympy_1.7.1.bb b/meta-python/recipes-devtools/python/python3-sympy_1.8.bb
index d4508689f..3c05c7639 100644
--- a/meta-python/recipes-devtools/python/python3-sympy_1.7.1.bb
+++ b/meta-python/recipes-devtools/python/python3-sympy_1.8.bb
@@ -4,9 +4,9 @@
SUMMARY = "Computer algebra system (CAS) in Python"
HOMEPAGE = "https://pypi.org/project/sympy/"
LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ebb06e9df8f57522b72d0edb0fcf83d4"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2245824980a408ef1749391dfba32b3b"
-SRC_URI[sha256sum] = "a3de9261e97535b83bb8607b0da2c7d03126650fafea2b2789657b229c246b2e"
+SRC_URI[sha256sum] = "1ca588a9f6ce6a323c5592f9635159c2093572826668a1022c75c75bdf0297cb"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-tqdm_4.60.0.bb b/meta-python/recipes-devtools/python/python3-tqdm_4.61.0.bb
index e20ba779a..0c04b676a 100644
--- a/meta-python/recipes-devtools/python/python3-tqdm_4.60.0.bb
+++ b/meta-python/recipes-devtools/python/python3-tqdm_4.61.0.bb
@@ -5,7 +5,7 @@ SECTION = "devel/python"
LICENSE = "MIT & MPL-2.0"
LIC_FILES_CHKSUM = "file://LICENCE;md5=59e4271a933d33edfe60237db377a14b"
-SRC_URI[sha256sum] = "ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"
+SRC_URI[sha256sum] = "cd5791b5d7c3f2f1819efc81d36eb719a38e0906a7380365c556779f585ea042"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-typeguard_2.12.0.bb b/meta-python/recipes-devtools/python/python3-typeguard_2.12.1.bb
index 148806e10..803067651 100644
--- a/meta-python/recipes-devtools/python/python3-typeguard_2.12.0.bb
+++ b/meta-python/recipes-devtools/python/python3-typeguard_2.12.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://pypi.org/project/typeguard/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=f0e423eea5c91e7aa21bdb70184b3e53"
-SRC_URI[sha256sum] = "fca77fd4ccba63465b421cdbbab5a1a8e3994e6d6f18b45da2bb475c09f147ef"
+SRC_URI[sha256sum] = "c2af8b9bdd7657f4bd27b45336e7930171aead796711bc4cfc99b4731bb9d051"
inherit pypi setuptools3 ptest
diff --git a/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.3.bb b/meta-python/recipes-devtools/python/python3-typing-extensions_3.10.0.0.bb
index 8ef15fab7..a8e632487 100644
--- a/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.3.bb
+++ b/meta-python/recipes-devtools/python/python3-typing-extensions_3.10.0.0.bb
@@ -5,8 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=64fc2b30b67d0a8423c250e0386ed72f"
# The name on PyPi is slightly different.
PYPI_PACKAGE = "typing_extensions"
-SRC_URI[md5sum] = "5fcbfcb22e6f8c9bf23fb9f8e020f6ee"
-SRC_URI[sha256sum] = "99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"
+SRC_URI[sha256sum] = "50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-ujson/run-ptest b/meta-python/recipes-devtools/python/python3-ujson/run-ptest
index 1b3914647..b1539453a 100644
--- a/meta-python/recipes-devtools/python/python3-ujson/run-ptest
+++ b/meta-python/recipes-devtools/python/python3-ujson/run-ptest
@@ -1,3 +1,3 @@
#!/bin/sh
-python3 tests/tests.py
+python3 tests/test_ujson.py
diff --git a/meta-python/recipes-devtools/python/python3-ujson_4.0.2.bb b/meta-python/recipes-devtools/python/python3-ujson_4.0.2.bb
index d79206fe6..43f286d16 100644
--- a/meta-python/recipes-devtools/python/python3-ujson_4.0.2.bb
+++ b/meta-python/recipes-devtools/python/python3-ujson_4.0.2.bb
@@ -20,6 +20,8 @@ RDEPENDS_${PN} += "\
"
RDEPENDS_${PN}-ptest += " \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-pytest \
${PYTHON_PN}-pytz \
"
diff --git a/meta-python/recipes-devtools/python/python3-urllib3_1.26.4.bb b/meta-python/recipes-devtools/python/python3-urllib3_1.26.5.bb
index 0a31fb1e2..f2fb33c6d 100644
--- a/meta-python/recipes-devtools/python/python3-urllib3_1.26.4.bb
+++ b/meta-python/recipes-devtools/python/python3-urllib3_1.26.5.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/shazow/urllib3"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c2823cb995439c984fd62a973d79815c"
-SRC_URI[sha256sum] = "e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"
+SRC_URI[sha256sum] = "a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-watchdog_2.0.2.bb b/meta-python/recipes-devtools/python/python3-watchdog_2.1.2.bb
index c5387dc35..c2bf68a2d 100644
--- a/meta-python/recipes-devtools/python/python3-watchdog_2.0.2.bb
+++ b/meta-python/recipes-devtools/python/python3-watchdog_2.1.2.bb
@@ -4,7 +4,7 @@ DEPENDS = "${PYTHON_PN}-argh"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-SRC_URI[sha256sum] = "532fedd993e75554671faa36cd04c580ced3fae084254a779afbbd8aaf00566b"
+SRC_URI[sha256sum] = "0237db4d9024859bea27d0efb59fe75eef290833fd988b8ead7a879b0308c2db"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-websocket-client_0.58.0.bb b/meta-python/recipes-devtools/python/python3-websocket-client_1.0.1.bb
index a5d7d901b..da4e05f30 100644
--- a/meta-python/recipes-devtools/python/python3-websocket-client_0.58.0.bb
+++ b/meta-python/recipes-devtools/python/python3-websocket-client_1.0.1.bb
@@ -7,9 +7,7 @@ HOMEPAGE = "https://github.com/websocket-client/websocket-client"
LICENSE = "LGPLv2.1"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c96ca6c1de8adc025adfada81d06fba5"
-SRC_URI[sha256sum] = "63509b41d158ae5b7f67eb4ad20fecbb4eee99434e73e140354dc3ff8e09716f"
-
-PYPI_PACKAGE = "websocket_client"
+SRC_URI[sha256sum] = "3e2bf58191d4619b161389a95bdce84ce9e0b24eb8107e7e590db682c2d0ca81"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-websockets_8.1.bb b/meta-python/recipes-devtools/python/python3-websockets_9.1.bb
index b09e978af..8802ee370 100644
--- a/meta-python/recipes-devtools/python/python3-websockets_8.1.bb
+++ b/meta-python/recipes-devtools/python/python3-websockets_9.1.bb
@@ -2,12 +2,11 @@ SUMMARY = "An implementation of the WebSocket Protocol (RFC 6455)"
HOMEPAGE = "https://github.com/aaugustin/websockets"
LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ad5c6d36b3d0098b2f33a5ab69a9e750"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=78c2cc91e172ca96d6f8e4a76c739ec6"
inherit pypi setuptools3
-SRC_URI[md5sum] = "f12d7f31fe8d0b3e65c12f845bcd0ad8"
-SRC_URI[sha256sum] = "5c65d2da8c6bce0fca2528f69f44b2f977e06954c8512a952222cea50dad430f"
+SRC_URI[sha256sum] = "276d2339ebf0df4f45df453923ebd2270b87900eda5dfd4a6b0cfa15f82111c3"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-werkzeug_1.0.1.bb b/meta-python/recipes-devtools/python/python3-werkzeug_2.0.1.bb
index 8af0fef60..1653eeabd 100644
--- a/meta-python/recipes-devtools/python/python3-werkzeug_1.0.1.bb
+++ b/meta-python/recipes-devtools/python/python3-werkzeug_2.0.1.bb
@@ -12,8 +12,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=5dc88300786f1c214c1e9827a5229462"
PYPI_PACKAGE = "Werkzeug"
-SRC_URI[md5sum] = "5d499cfdd30de5d9c946994783772efd"
-SRC_URI[sha256sum] = "6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"
+SRC_URI[sha256sum] = "1de1db30d010ff1af14a009224ec49ab2329ad2cde454c8a708130642d579c42"
inherit pypi setuptools3
diff --git a/meta-python/recipes-devtools/python/python3-xlsxwriter_1.3.8.bb b/meta-python/recipes-devtools/python/python3-xlsxwriter_1.4.3.bb
index e89221e5c..e6b196956 100644
--- a/meta-python/recipes-devtools/python/python3-xlsxwriter_1.3.8.bb
+++ b/meta-python/recipes-devtools/python/python3-xlsxwriter_1.4.3.bb
@@ -8,6 +8,14 @@ inherit pypi setuptools3
PYPI_PACKAGE = "XlsxWriter"
-SRC_URI[sha256sum] = "2b7e22b1268c2ed85d73e5629097c9a63357f2429667ada9863cd05ff8ee33aa"
+RDEPENDS_${PN} += " \
+ python3-crypt \
+ python3-datetime \
+ python3-compression \
+ python3-numbers \
+ python3-io \
+"
+
+SRC_URI[sha256sum] = "641db6e7b4f4982fd407a3f372f45b878766098250d26963e95e50121168cbe2"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-xmlschema_1.6.1.bb b/meta-python/recipes-devtools/python/python3-xmlschema_1.6.2.bb
index 91697e39a..acdb39942 100644
--- a/meta-python/recipes-devtools/python/python3-xmlschema_1.6.1.bb
+++ b/meta-python/recipes-devtools/python/python3-xmlschema_1.6.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/sissaschool/xmlschema"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=47489cb18c469474afeb259ed1d4832f"
-SRC_URI[sha256sum] = "d02b82bb4fce3af09495b85e6ada5ce0cfdaa865b09b28ecc0f5ab81fad7e328"
+SRC_URI[sha256sum] = "31ddf77a44e4b121de212beeb2cc039e2e8b7a7a4f1678c9b29be1f5341aec52"
PYPI_PACKAGE = "xmlschema"
inherit pypi setuptools3
@@ -14,6 +14,7 @@ DEPENDS += "\
RDEPENDS_${PN} += "\
${PYTHON_PN}-elementpath \
+ ${PYTHON_PN}-modules \
"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-python/recipes-devtools/python/python3-xxhash_2.0.0.bb b/meta-python/recipes-devtools/python/python3-xxhash_2.0.2.bb
index c5add103c..965e8107d 100644
--- a/meta-python/recipes-devtools/python/python3-xxhash_2.0.0.bb
+++ b/meta-python/recipes-devtools/python/python3-xxhash_2.0.2.bb
@@ -1,10 +1,9 @@
SUMMARY = "xxhash is a Python binding for the xxHash library by Yann Collet."
SECTION = "devel/python"
LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5a8d76283514a1b7e6a414aba38629b5"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3a9dab7f159514231249aa3e108ab26b"
-SRC_URI[md5sum] = "010fda0427b621e5fe6930ad42511d88"
-SRC_URI[sha256sum] = "58ca818554c1476fa1456f6cd4b87002e2294f09baf0f81e5a2a4968e62c423c"
+SRC_URI[sha256sum] = "b7bead8cf6210eadf9cecf356e17af794f57c0939a3d420a00d87ea652f87b49"
SRC_URI += " \
file://run-ptest \
diff --git a/meta-python/recipes-devtools/python/python3-yappi/0001-Fix-imports-for-ptests.patch b/meta-python/recipes-devtools/python/python3-yappi/0001-Fix-imports-for-ptests.patch
new file mode 100644
index 000000000..fa58897e6
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-yappi/0001-Fix-imports-for-ptests.patch
@@ -0,0 +1,3905 @@
+From 0dedc1c573ddc4e87475eb03c64555cd54a72e92 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <trevor.gamblin@windriver.com>
+Date: Mon, 7 Jun 2021 09:40:20 -0400
+Subject: [PATCH] Fix imports for tests
+
+Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
+---
+ tests/test_asyncio.py | 2 +-
+ tests/test_asyncio_context_vars.py | 2 +-
+ tests/test_functionality.py | 2 +-
+ tests/test_gevent.py | 2 +-
+ tests/test_hooks.py | 2 +-
+ tests/test_tags.py | 2 +-
+ 6 files changed, 6 insertions(+), 6 deletions(-)
+
+--- a/tests/test_asyncio.py
++++ b/tests/test_asyncio.py
+@@ -2,7 +2,7 @@ import unittest
+ import yappi
+ import asyncio
+ import threading
+-from utils import YappiUnitTestCase, find_stat_by_name, burn_cpu, burn_io
++from .utils import YappiUnitTestCase, find_stat_by_name, burn_cpu, burn_io
+
+
+ @asyncio.coroutine
+--- a/tests/test_asyncio_context_vars.py
++++ b/tests/test_asyncio_context_vars.py
+@@ -5,7 +5,7 @@ import contextvars
+ import functools
+ import time
+ import os
+-import utils
++import tests.utils as utils
+ import yappi
+
+ async_context_id = contextvars.ContextVar('async_context_id')
+--- a/tests/test_functionality.py
++++ b/tests/test_functionality.py
+@@ -1,1916 +1,1916 @@
+-import os
+-import sys
+-import time
+-import threading
+-import unittest
+-import yappi
+-import _yappi
+-import utils
+-import multiprocessing # added to fix http://bugs.python.org/issue15881 for > Py2.6
+-import subprocess
+-
+-_counter = 0
+-
+-
+-class BasicUsage(utils.YappiUnitTestCase):
+-
+- def test_callback_function_int_return_overflow(self):
+- # this test is just here to check if any errors are generated, as the err
+- # is printed in C side, I did not include it here. THere are ways to test
+- # this deterministically, I did not bother
+- import ctypes
+-
+- def _unsigned_overflow_margin():
+- return 2**(ctypes.sizeof(ctypes.c_void_p) * 8) - 1
+-
+- def foo():
+- pass
+-
+- #with utils.captured_output() as (out, err):
+- yappi.set_context_id_callback(_unsigned_overflow_margin)
+- yappi.set_tag_callback(_unsigned_overflow_margin)
+- yappi.start()
+- foo()
+-
+- def test_issue60(self):
+-
+- def foo():
+- buf = bytearray()
+- buf += b't' * 200
+- view = memoryview(buf)[10:]
+- view = view.tobytes()
+- del buf[:10] # this throws exception
+- return view
+-
+- yappi.start(builtins=True)
+- foo()
+- self.assertTrue(
+- len(
+- yappi.get_func_stats(
+- filter_callback=lambda x: yappi.
+- func_matches(x, [memoryview.tobytes])
+- )
+- ) > 0
+- )
+- yappi.stop()
+-
+- def test_issue54(self):
+-
+- def _tag_cbk():
+- global _counter
+- _counter += 1
+- return _counter
+-
+- def a():
+- pass
+-
+- def b():
+- pass
+-
+- yappi.set_tag_callback(_tag_cbk)
+- yappi.start()
+- a()
+- a()
+- a()
+- yappi.stop()
+- stats = yappi.get_func_stats()
+- self.assertEqual(stats.pop().ncall, 3) # aggregated if no tag is given
+- stats = yappi.get_func_stats(tag=1)
+-
+- for i in range(1, 3):
+- stats = yappi.get_func_stats(tag=i)
+- stats = yappi.get_func_stats(
+- tag=i, filter_callback=lambda x: yappi.func_matches(x, [a])
+- )
+-
+- stat = stats.pop()
+- self.assertEqual(stat.ncall, 1)
+-
+- yappi.set_tag_callback(None)
+- yappi.clear_stats()
+- yappi.start()
+- b()
+- b()
+- stats = yappi.get_func_stats()
+- self.assertEqual(len(stats), 1)
+- stat = stats.pop()
+- self.assertEqual(stat.ncall, 2)
+-
+- def test_filter(self):
+-
+- def a():
+- pass
+-
+- def b():
+- a()
+-
+- def c():
+- b()
+-
+- _TCOUNT = 5
+-
+- ts = []
+- yappi.start()
+- for i in range(_TCOUNT):
+- t = threading.Thread(target=c)
+- t.start()
+- ts.append(t)
+-
+- for t in ts:
+- t.join()
+-
+- yappi.stop()
+-
+- ctx_ids = []
+- for tstat in yappi.get_thread_stats():
+- if tstat.name == '_MainThread':
+- main_ctx_id = tstat.id
+- else:
+- ctx_ids.append(tstat.id)
+-
+- fstats = yappi.get_func_stats(filter={"ctx_id": 9})
+- self.assertTrue(fstats.empty())
+- fstats = yappi.get_func_stats(
+- filter={
+- "ctx_id": main_ctx_id,
+- "name": "c"
+- }
+- ) # main thread
+- self.assertTrue(fstats.empty())
+-
+- for i in ctx_ids:
+- fstats = yappi.get_func_stats(
+- filter={
+- "ctx_id": i,
+- "name": "a",
+- "ncall": 1
+- }
+- )
+- self.assertEqual(fstats.pop().ncall, 1)
+- fstats = yappi.get_func_stats(filter={"ctx_id": i, "name": "b"})
+- self.assertEqual(fstats.pop().ncall, 1)
+- fstats = yappi.get_func_stats(filter={"ctx_id": i, "name": "c"})
+- self.assertEqual(fstats.pop().ncall, 1)
+-
+- yappi.clear_stats()
+- yappi.start(builtins=True)
+- time.sleep(0.1)
+- yappi.stop()
+- fstats = yappi.get_func_stats(filter={"module": "time"})
+- self.assertEqual(len(fstats), 1)
+-
+- # invalid filters`
+- self.assertRaises(
+- Exception, yappi.get_func_stats, filter={'tag': "sss"}
+- )
+- self.assertRaises(
+- Exception, yappi.get_func_stats, filter={'ctx_id': "None"}
+- )
+-
+- def test_filter_callback(self):
+-
+- def a():
+- time.sleep(0.1)
+-
+- def b():
+- a()
+-
+- def c():
+- pass
+-
+- def d():
+- pass
+-
+- yappi.set_clock_type("wall")
+- yappi.start(builtins=True)
+- a()
+- b()
+- c()
+- d()
+- stats = yappi.get_func_stats(
+- filter_callback=lambda x: yappi.func_matches(x, [a, b])
+- )
+- #stats.print_all()
+- r1 = '''
+- tests/test_functionality.py:98 a 2 0.000000 0.200350 0.100175
+- tests/test_functionality.py:101 b 1 0.000000 0.120000 0.100197
+- '''
+- self.assert_traces_almost_equal(r1, stats)
+- self.assertEqual(len(stats), 2)
+- stats = yappi.get_func_stats(
+- filter_callback=lambda x: yappi.
+- module_matches(x, [sys.modules[__name__]])
+- )
+- r1 = '''
+- tests/test_functionality.py:98 a 2 0.000000 0.230130 0.115065
+- tests/test_functionality.py:101 b 1 0.000000 0.120000 0.109011
+- tests/test_functionality.py:104 c 1 0.000000 0.000002 0.000002
+- tests/test_functionality.py:107 d 1 0.000000 0.000001 0.000001
+- '''
+- self.assert_traces_almost_equal(r1, stats)
+- self.assertEqual(len(stats), 4)
+-
+- stats = yappi.get_func_stats(
+- filter_callback=lambda x: yappi.func_matches(x, [time.sleep])
+- )
+- self.assertEqual(len(stats), 1)
+- r1 = '''
+- time.sleep 2 0.206804 0.220000 0.103402
+- '''
+- self.assert_traces_almost_equal(r1, stats)
+-
+- def test_print_formatting(self):
+-
+- def a():
+- pass
+-
+- def b():
+- a()
+-
+- func_cols = {
+- 1: ("name", 48),
+- 0: ("ncall", 5),
+- 2: ("tsub", 8),
+- }
+- thread_cols = {
+- 1: ("name", 48),
+- 0: ("ttot", 8),
+- }
+-
+- yappi.start()
+- a()
+- b()
+- yappi.stop()
+- fs = yappi.get_func_stats()
+- cs = fs[1].children
+- ts = yappi.get_thread_stats()
+- #fs.print_all(out=sys.stderr, columns={1:("name", 70), })
+- #cs.print_all(out=sys.stderr, columns=func_cols)
+- #ts.print_all(out=sys.stderr, columns=thread_cols)
+- #cs.print_all(out=sys.stderr, columns={})
+-
+- self.assertRaises(
+- yappi.YappiError, fs.print_all, columns={1: ("namee", 9)}
+- )
+- self.assertRaises(
+- yappi.YappiError, cs.print_all, columns={1: ("dd", 0)}
+- )
+- self.assertRaises(
+- yappi.YappiError, ts.print_all, columns={1: ("tidd", 0)}
+- )
+-
+- def test_get_clock(self):
+- yappi.set_clock_type('cpu')
+- self.assertEqual('cpu', yappi.get_clock_type())
+- clock_info = yappi.get_clock_info()
+- self.assertTrue('api' in clock_info)
+- self.assertTrue('resolution' in clock_info)
+-
+- yappi.set_clock_type('wall')
+- self.assertEqual('wall', yappi.get_clock_type())
+-
+- t0 = yappi.get_clock_time()
+- time.sleep(0.1)
+- duration = yappi.get_clock_time() - t0
+- self.assertTrue(0.05 < duration < 0.3)
+-
+- def test_profile_decorator(self):
+-
+- def aggregate(func, stats):
+- fname = "tests/%s.profile" % (func.__name__)
+- try:
+- stats.add(fname)
+- except IOError:
+- pass
+- stats.save(fname)
+- raise Exception("messing around")
+-
+- @yappi.profile(return_callback=aggregate)
+- def a(x, y):
+- if x + y == 25:
+- raise Exception("")
+- return x + y
+-
+- def b():
+- pass
+-
+- try:
+- os.remove(
+- "tests/a.profile"
+- ) # remove the one from prev test, if available
+- except:
+- pass
+-
+- # global profile is on to mess things up
+- yappi.start()
+- b()
+-
+- # assert functionality and call function at same time
+- try:
+- self.assertEqual(a(1, 2), 3)
+- except:
+- pass
+- try:
+- self.assertEqual(a(2, 5), 7)
+- except:
+- pass
+- try:
+- a(4, 21)
+- except:
+- pass
+- stats = yappi.get_func_stats().add("tests/a.profile")
+- fsa = utils.find_stat_by_name(stats, 'a')
+- self.assertEqual(fsa.ncall, 3)
+- self.assertEqual(len(stats), 1) # b() should be cleared out.
+-
+- @yappi.profile(return_callback=aggregate)
+- def count_down_rec(n):
+- if n == 0:
+- return
+- count_down_rec(n - 1)
+-
+- try:
+- os.remove(
+- "tests/count_down_rec.profile"
+- ) # remove the one from prev test, if available
+- except:
+- pass
+-
+- try:
+- count_down_rec(4)
+- except:
+- pass
+- try:
+- count_down_rec(3)
+- except:
+- pass
+-
+- stats = yappi.YFuncStats("tests/count_down_rec.profile")
+- fsrec = utils.find_stat_by_name(stats, 'count_down_rec')
+- self.assertEqual(fsrec.ncall, 9)
+- self.assertEqual(fsrec.nactualcall, 2)
+-
+- def test_strip_dirs(self):
+-
+- def a():
+- pass
+-
+- stats = utils.run_and_get_func_stats(a, )
+- stats.strip_dirs()
+- fsa = utils.find_stat_by_name(stats, "a")
+- self.assertEqual(fsa.module, os.path.basename(fsa.module))
+-
+- @unittest.skipIf(os.name == "nt", "do not run on Windows")
+- def test_run_as_script(self):
+- import re
+- p = subprocess.Popen(
+- ['yappi', os.path.join('./tests', 'run_as_script.py')],
+- stdout=subprocess.PIPE
+- )
+- out, err = p.communicate()
+- self.assertEqual(p.returncode, 0)
+- func_stats, thread_stats = re.split(
+- b'name\\s+id\\s+tid\\s+ttot\\s+scnt\\s*\n', out
+- )
+- self.assertTrue(b'FancyThread' in thread_stats)
+-
+- def test_yappi_overhead(self):
+- LOOP_COUNT = 100000
+-
+- def a():
+- pass
+-
+- def b():
+- for i in range(LOOP_COUNT):
+- a()
+-
+- t0 = time.time()
+- yappi.start()
+- b()
+- yappi.stop()
+- time_with_yappi = time.time() - t0
+- t0 = time.time()
+- b()
+- time_without_yappi = time.time() - t0
+- if time_without_yappi == 0:
+- time_without_yappi = 0.000001
+-
+- # in latest v0.82, I calculated this as close to "7.0" in my machine.
+- # however, %83 of this overhead is coming from tickcount(). The other %17
+- # seems to have been evenly distributed to the internal bookkeeping
+- # structures/algorithms which seems acceptable. Note that our test only
+- # tests one function being profiled at-a-time in a short interval.
+- # profiling high number of functions in a small time
+- # is a different beast, (which is pretty unlikely in most applications)
+- # So as a conclusion: I cannot see any optimization window for Yappi that
+- # is worth implementing as we will only optimize %17 of the time.
+- sys.stderr.write("\r\nYappi puts %0.1f times overhead to the profiled application in average.\r\n" % \
+- (time_with_yappi / time_without_yappi))
+-
+- def test_clear_stats_while_running(self):
+-
+- def a():
+- pass
+-
+- yappi.start()
+- a()
+- yappi.clear_stats()
+- a()
+- stats = yappi.get_func_stats()
+- fsa = utils.find_stat_by_name(stats, 'a')
+- self.assertEqual(fsa.ncall, 1)
+-
+- def test_generator(self):
+-
+- def _gen(n):
+- while (n > 0):
+- yield n
+- n -= 1
+-
+- yappi.start()
+- for x in _gen(5):
+- pass
+- self.assertTrue(
+- yappi.convert2pstats(yappi.get_func_stats()) is not None
+- )
+-
+- def test_slice_child_stats_and_strip_dirs(self):
+-
+- def b():
+- for i in range(10000000):
+- pass
+-
+- def a():
+- b()
+-
+- yappi.start(builtins=True)
+- a()
+- stats = yappi.get_func_stats()
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- self.assertTrue(fsa.children[0:1] is not None)
+- prev_afullname = fsa.full_name
+- prev_bchildfullname = fsa.children[fsb].full_name
+- stats.strip_dirs()
+- self.assertTrue(len(prev_afullname) > len(fsa.full_name))
+- self.assertTrue(
+- len(prev_bchildfullname) > len(fsa.children[fsb].full_name)
+- )
+-
+- def test_children_stat_functions(self):
+- _timings = {"a_1": 5, "b_1": 3, "c_1": 1}
+- _yappi._set_test_timings(_timings)
+-
+- def b():
+- pass
+-
+- def c():
+- pass
+-
+- def a():
+- b()
+- c()
+-
+- yappi.start()
+- a()
+- b() # non-child call
+- c() # non-child call
+- stats = yappi.get_func_stats()
+- fsa = utils.find_stat_by_name(stats, 'a')
+- childs_of_a = fsa.children.get().sort("tavg", "desc")
+- prev_item = None
+- for item in childs_of_a:
+- if prev_item:
+- self.assertTrue(prev_item.tavg > item.tavg)
+- prev_item = item
+- childs_of_a.sort("name", "desc")
+- prev_item = None
+- for item in childs_of_a:
+- if prev_item:
+- self.assertTrue(prev_item.name > item.name)
+- prev_item = item
+- childs_of_a.clear()
+- self.assertTrue(childs_of_a.empty())
+-
+- def test_no_stats_different_clock_type_load(self):
+-
+- def a():
+- pass
+-
+- yappi.start()
+- a()
+- yappi.stop()
+- yappi.get_func_stats().save("tests/ystats1.ys")
+- yappi.clear_stats()
+- yappi.set_clock_type("WALL")
+- yappi.start()
+- yappi.stop()
+- stats = yappi.get_func_stats().add("tests/ystats1.ys")
+- fsa = utils.find_stat_by_name(stats, 'a')
+- self.assertTrue(fsa is not None)
+-
+- def test_subsequent_profile(self):
+- _timings = {"a_1": 1, "b_1": 1}
+- _yappi._set_test_timings(_timings)
+-
+- def a():
+- pass
+-
+- def b():
+- pass
+-
+- yappi.start()
+- a()
+- yappi.stop()
+- yappi.start()
+- b()
+- yappi.stop()
+- stats = yappi.get_func_stats()
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- self.assertTrue(fsa is not None)
+- self.assertTrue(fsb is not None)
+- self.assertEqual(fsa.ttot, 1)
+- self.assertEqual(fsb.ttot, 1)
+-
+- def test_lambda(self):
+- f = lambda: time.sleep(0.3)
+- yappi.set_clock_type("wall")
+- yappi.start()
+- f()
+- stats = yappi.get_func_stats()
+- fsa = utils.find_stat_by_name(stats, '<lambda>')
+- self.assertTrue(fsa.ttot > 0.1)
+-
+- def test_module_stress(self):
+- self.assertEqual(yappi.is_running(), False)
+-
+- yappi.start()
+- yappi.clear_stats()
+- self.assertRaises(_yappi.error, yappi.set_clock_type, "wall")
+-
+- yappi.stop()
+- yappi.clear_stats()
+- yappi.set_clock_type("cpu")
+- self.assertRaises(yappi.YappiError, yappi.set_clock_type, "dummy")
+- self.assertEqual(yappi.is_running(), False)
+- yappi.clear_stats()
+- yappi.clear_stats()
+-
+- def test_stat_sorting(self):
+- _timings = {"a_1": 13, "b_1": 10, "a_2": 6, "b_2": 1}
+- _yappi._set_test_timings(_timings)
+-
+- self._ncall = 1
+-
+- def a():
+- b()
+-
+- def b():
+- if self._ncall == 2:
+- return
+- self._ncall += 1
+- a()
+-
+- stats = utils.run_and_get_func_stats(a)
+- stats = stats.sort("totaltime", "desc")
+- prev_stat = None
+- for stat in stats:
+- if prev_stat:
+- self.assertTrue(prev_stat.ttot >= stat.ttot)
+- prev_stat = stat
+- stats = stats.sort("totaltime", "asc")
+- prev_stat = None
+- for stat in stats:
+- if prev_stat:
+- self.assertTrue(prev_stat.ttot <= stat.ttot)
+- prev_stat = stat
+- stats = stats.sort("avgtime", "asc")
+- prev_stat = None
+- for stat in stats:
+- if prev_stat:
+- self.assertTrue(prev_stat.tavg <= stat.tavg)
+- prev_stat = stat
+- stats = stats.sort("name", "asc")
+- prev_stat = None
+- for stat in stats:
+- if prev_stat:
+- self.assertTrue(prev_stat.name <= stat.name)
+- prev_stat = stat
+- stats = stats.sort("subtime", "asc")
+- prev_stat = None
+- for stat in stats:
+- if prev_stat:
+- self.assertTrue(prev_stat.tsub <= stat.tsub)
+- prev_stat = stat
+-
+- self.assertRaises(
+- yappi.YappiError, stats.sort, "invalid_func_sorttype_arg"
+- )
+- self.assertRaises(
+- yappi.YappiError, stats.sort, "totaltime",
+- "invalid_func_sortorder_arg"
+- )
+-
+- def test_start_flags(self):
+- self.assertEqual(_yappi._get_start_flags(), None)
+- yappi.start()
+-
+- def a():
+- pass
+-
+- a()
+- self.assertEqual(_yappi._get_start_flags()["profile_builtins"], 0)
+- self.assertEqual(_yappi._get_start_flags()["profile_multicontext"], 1)
+- self.assertEqual(len(yappi.get_thread_stats()), 1)
+-
+- def test_builtin_profiling(self):
+-
+- def a():
+- time.sleep(0.4) # is a builtin function
+-
+- yappi.set_clock_type('wall')
+-
+- yappi.start(builtins=True)
+- a()
+- stats = yappi.get_func_stats()
+- fsa = utils.find_stat_by_name(stats, 'sleep')
+- self.assertTrue(fsa is not None)
+- self.assertTrue(fsa.ttot > 0.3)
+- yappi.stop()
+- yappi.clear_stats()
+-
+- def a():
+- pass
+-
+- yappi.start()
+- t = threading.Thread(target=a)
+- t.start()
+- t.join()
+- stats = yappi.get_func_stats()
+-
+- def test_singlethread_profiling(self):
+- yappi.set_clock_type('wall')
+-
+- def a():
+- time.sleep(0.2)
+-
+- class Worker1(threading.Thread):
+-
+- def a(self):
+- time.sleep(0.3)
+-
+- def run(self):
+- self.a()
+-
+- yappi.start(profile_threads=False)
+-
+- c = Worker1()
+- c.start()
+- c.join()
+- a()
+- stats = yappi.get_func_stats()
+- fsa1 = utils.find_stat_by_name(stats, 'Worker1.a')
+- fsa2 = utils.find_stat_by_name(stats, 'a')
+- self.assertTrue(fsa1 is None)
+- self.assertTrue(fsa2 is not None)
+- self.assertTrue(fsa2.ttot > 0.1)
+-
+- def test_run(self):
+-
+- def profiled():
+- pass
+-
+- yappi.clear_stats()
+- try:
+- with yappi.run():
+- profiled()
+- stats = yappi.get_func_stats()
+- finally:
+- yappi.clear_stats()
+-
+- self.assertIsNotNone(utils.find_stat_by_name(stats, 'profiled'))
+-
+- def test_run_recursive(self):
+-
+- def profiled():
+- pass
+-
+- def not_profiled():
+- pass
+-
+- yappi.clear_stats()
+- try:
+- with yappi.run():
+- with yappi.run():
+- profiled()
+- # Profiling stopped here
+- not_profiled()
+- stats = yappi.get_func_stats()
+- finally:
+- yappi.clear_stats()
+-
+- self.assertIsNotNone(utils.find_stat_by_name(stats, 'profiled'))
+- self.assertIsNone(utils.find_stat_by_name(stats, 'not_profiled'))
+-
+-
+-class StatSaveScenarios(utils.YappiUnitTestCase):
+-
+- def test_pstats_conversion(self):
+-
+- def pstat_id(fs):
+- return (fs.module, fs.lineno, fs.name)
+-
+- def a():
+- d()
+-
+- def b():
+- d()
+-
+- def c():
+- pass
+-
+- def d():
+- pass
+-
+- _timings = {"a_1": 12, "b_1": 7, "c_1": 5, "d_1": 2}
+- _yappi._set_test_timings(_timings)
+- stats = utils.run_and_get_func_stats(a, )
+- stats.strip_dirs()
+- stats.save("tests/a1.pstats", type="pstat")
+- fsa_pid = pstat_id(utils.find_stat_by_name(stats, "a"))
+- fsd_pid = pstat_id(utils.find_stat_by_name(stats, "d"))
+- yappi.clear_stats()
+- _yappi._set_test_timings(_timings)
+- stats = utils.run_and_get_func_stats(a, )
+- stats.strip_dirs()
+- stats.save("tests/a2.pstats", type="pstat")
+- yappi.clear_stats()
+- _yappi._set_test_timings(_timings)
+- stats = utils.run_and_get_func_stats(b, )
+- stats.strip_dirs()
+- stats.save("tests/b1.pstats", type="pstat")
+- fsb_pid = pstat_id(utils.find_stat_by_name(stats, "b"))
+- yappi.clear_stats()
+- _yappi._set_test_timings(_timings)
+- stats = utils.run_and_get_func_stats(c, )
+- stats.strip_dirs()
+- stats.save("tests/c1.pstats", type="pstat")
+- fsc_pid = pstat_id(utils.find_stat_by_name(stats, "c"))
+-
+- # merge saved stats and check pstats values are correct
+- import pstats
+- p = pstats.Stats(
+- 'tests/a1.pstats', 'tests/a2.pstats', 'tests/b1.pstats',
+- 'tests/c1.pstats'
+- )
+- p.strip_dirs()
+- # ct = ttot, tt = tsub
+- (cc, nc, tt, ct, callers) = p.stats[fsa_pid]
+- self.assertEqual(cc, nc, 2)
+- self.assertEqual(tt, 20)
+- self.assertEqual(ct, 24)
+- (cc, nc, tt, ct, callers) = p.stats[fsd_pid]
+- self.assertEqual(cc, nc, 3)
+- self.assertEqual(tt, 6)
+- self.assertEqual(ct, 6)
+- self.assertEqual(len(callers), 2)
+- (cc, nc, tt, ct) = callers[fsa_pid]
+- self.assertEqual(cc, nc, 2)
+- self.assertEqual(tt, 4)
+- self.assertEqual(ct, 4)
+- (cc, nc, tt, ct) = callers[fsb_pid]
+- self.assertEqual(cc, nc, 1)
+- self.assertEqual(tt, 2)
+- self.assertEqual(ct, 2)
+-
+- def test_merge_stats(self):
+- _timings = {
+- "a_1": 15,
+- "b_1": 14,
+- "c_1": 12,
+- "d_1": 10,
+- "e_1": 9,
+- "f_1": 7,
+- "g_1": 6,
+- "h_1": 5,
+- "i_1": 1
+- }
+- _yappi._set_test_timings(_timings)
+-
+- def a():
+- b()
+-
+- def b():
+- c()
+-
+- def c():
+- d()
+-
+- def d():
+- e()
+-
+- def e():
+- f()
+-
+- def f():
+- g()
+-
+- def g():
+- h()
+-
+- def h():
+- i()
+-
+- def i():
+- pass
+-
+- yappi.start()
+- a()
+- a()
+- yappi.stop()
+- stats = yappi.get_func_stats()
+- self.assertRaises(
+- NotImplementedError, stats.save, "", "INVALID_SAVE_TYPE"
+- )
+- stats.save("tests/ystats2.ys")
+- yappi.clear_stats()
+- _yappi._set_test_timings(_timings)
+- yappi.start()
+- a()
+- stats = yappi.get_func_stats().add("tests/ystats2.ys")
+- fsa = utils.find_stat_by_name(stats, "a")
+- fsb = utils.find_stat_by_name(stats, "b")
+- fsc = utils.find_stat_by_name(stats, "c")
+- fsd = utils.find_stat_by_name(stats, "d")
+- fse = utils.find_stat_by_name(stats, "e")
+- fsf = utils.find_stat_by_name(stats, "f")
+- fsg = utils.find_stat_by_name(stats, "g")
+- fsh = utils.find_stat_by_name(stats, "h")
+- fsi = utils.find_stat_by_name(stats, "i")
+- self.assertEqual(fsa.ttot, 45)
+- self.assertEqual(fsa.ncall, 3)
+- self.assertEqual(fsa.nactualcall, 3)
+- self.assertEqual(fsa.tsub, 3)
+- self.assertEqual(fsa.children[fsb].ttot, fsb.ttot)
+- self.assertEqual(fsa.children[fsb].tsub, fsb.tsub)
+- self.assertEqual(fsb.children[fsc].ttot, fsc.ttot)
+- self.assertEqual(fsb.children[fsc].tsub, fsc.tsub)
+- self.assertEqual(fsc.tsub, 6)
+- self.assertEqual(fsc.children[fsd].ttot, fsd.ttot)
+- self.assertEqual(fsc.children[fsd].tsub, fsd.tsub)
+- self.assertEqual(fsd.children[fse].ttot, fse.ttot)
+- self.assertEqual(fsd.children[fse].tsub, fse.tsub)
+- self.assertEqual(fse.children[fsf].ttot, fsf.ttot)
+- self.assertEqual(fse.children[fsf].tsub, fsf.tsub)
+- self.assertEqual(fsf.children[fsg].ttot, fsg.ttot)
+- self.assertEqual(fsf.children[fsg].tsub, fsg.tsub)
+- self.assertEqual(fsg.ttot, 18)
+- self.assertEqual(fsg.tsub, 3)
+- self.assertEqual(fsg.children[fsh].ttot, fsh.ttot)
+- self.assertEqual(fsg.children[fsh].tsub, fsh.tsub)
+- self.assertEqual(fsh.ttot, 15)
+- self.assertEqual(fsh.tsub, 12)
+- self.assertEqual(fsh.tavg, 5)
+- self.assertEqual(fsh.children[fsi].ttot, fsi.ttot)
+- self.assertEqual(fsh.children[fsi].tsub, fsi.tsub)
+- #stats.debug_print()
+-
+- def test_merge_multithreaded_stats(self):
+- import _yappi
+- timings = {"a_1": 2, "b_1": 1}
+- _yappi._set_test_timings(timings)
+-
+- def a():
+- pass
+-
+- def b():
+- pass
+-
+- yappi.start()
+- t = threading.Thread(target=a)
+- t.start()
+- t.join()
+- t = threading.Thread(target=b)
+- t.start()
+- t.join()
+- yappi.get_func_stats().save("tests/ystats1.ys")
+- yappi.clear_stats()
+- _yappi._set_test_timings(timings)
+- self.assertEqual(len(yappi.get_func_stats()), 0)
+- self.assertEqual(len(yappi.get_thread_stats()), 1)
+- t = threading.Thread(target=a)
+- t.start()
+- t.join()
+-
+- self.assertEqual(_yappi._get_start_flags()["profile_builtins"], 0)
+- self.assertEqual(_yappi._get_start_flags()["profile_multicontext"], 1)
+- yappi.get_func_stats().save("tests/ystats2.ys")
+-
+- stats = yappi.YFuncStats([
+- "tests/ystats1.ys",
+- "tests/ystats2.ys",
+- ])
+- fsa = utils.find_stat_by_name(stats, "a")
+- fsb = utils.find_stat_by_name(stats, "b")
+- self.assertEqual(fsa.ncall, 2)
+- self.assertEqual(fsb.ncall, 1)
+- self.assertEqual(fsa.tsub, fsa.ttot, 4)
+- self.assertEqual(fsb.tsub, fsb.ttot, 1)
+-
+- def test_merge_load_different_clock_types(self):
+- yappi.start(builtins=True)
+-
+- def a():
+- b()
+-
+- def b():
+- c()
+-
+- def c():
+- pass
+-
+- t = threading.Thread(target=a)
+- t.start()
+- t.join()
+- yappi.get_func_stats().sort("name", "asc").save("tests/ystats1.ys")
+- yappi.stop()
+- yappi.clear_stats()
+- yappi.start(builtins=False)
+- t = threading.Thread(target=a)
+- t.start()
+- t.join()
+- yappi.get_func_stats().save("tests/ystats2.ys")
+- yappi.stop()
+- self.assertRaises(_yappi.error, yappi.set_clock_type, "wall")
+- yappi.clear_stats()
+- yappi.set_clock_type("wall")
+- yappi.start()
+- t = threading.Thread(target=a)
+- t.start()
+- t.join()
+- yappi.get_func_stats().save("tests/ystats3.ys")
+- self.assertRaises(
+- yappi.YappiError,
+- yappi.YFuncStats().add("tests/ystats1.ys").add, "tests/ystats3.ys"
+- )
+- stats = yappi.YFuncStats(["tests/ystats1.ys",
+- "tests/ystats2.ys"]).sort("name")
+- fsa = utils.find_stat_by_name(stats, "a")
+- fsb = utils.find_stat_by_name(stats, "b")
+- fsc = utils.find_stat_by_name(stats, "c")
+- self.assertEqual(fsa.ncall, 2)
+- self.assertEqual(fsa.ncall, fsb.ncall, fsc.ncall)
+-
+- def test_merge_aabab_aabbc(self):
+- _timings = {
+- "a_1": 15,
+- "a_2": 14,
+- "b_1": 12,
+- "a_3": 10,
+- "b_2": 9,
+- "c_1": 4
+- }
+- _yappi._set_test_timings(_timings)
+-
+- def a():
+- if self._ncall == 1:
+- self._ncall += 1
+- a()
+- elif self._ncall == 5:
+- self._ncall += 1
+- a()
+- else:
+- b()
+-
+- def b():
+- if self._ncall == 2:
+- self._ncall += 1
+- a()
+- elif self._ncall == 6:
+- self._ncall += 1
+- b()
+- elif self._ncall == 7:
+- c()
+- else:
+- return
+-
+- def c():
+- pass
+-
+- self._ncall = 1
+- stats = utils.run_and_get_func_stats(a, )
+- stats.save("tests/ystats1.ys")
+- yappi.clear_stats()
+- _yappi._set_test_timings(_timings)
+- #stats.print_all()
+-
+- self._ncall = 5
+- stats = utils.run_and_get_func_stats(a, )
+- stats.save("tests/ystats2.ys")
+-
+- #stats.print_all()
+-
+- def a(): # same name but another function(code object)
+- pass
+-
+- yappi.start()
+- a()
+- stats = yappi.get_func_stats().add(
+- ["tests/ystats1.ys", "tests/ystats2.ys"]
+- )
+- #stats.print_all()
+- self.assertEqual(len(stats), 4)
+-
+- fsa = None
+- for stat in stats:
+- if stat.name == "a" and stat.ttot == 45:
+- fsa = stat
+- break
+- self.assertTrue(fsa is not None)
+-
+- self.assertEqual(fsa.ncall, 7)
+- self.assertEqual(fsa.nactualcall, 3)
+- self.assertEqual(fsa.ttot, 45)
+- self.assertEqual(fsa.tsub, 10)
+- fsb = utils.find_stat_by_name(stats, "b")
+- fsc = utils.find_stat_by_name(stats, "c")
+- self.assertEqual(fsb.ncall, 6)
+- self.assertEqual(fsb.nactualcall, 3)
+- self.assertEqual(fsb.ttot, 36)
+- self.assertEqual(fsb.tsub, 27)
+- self.assertEqual(fsb.tavg, 6)
+- self.assertEqual(fsc.ttot, 8)
+- self.assertEqual(fsc.tsub, 8)
+- self.assertEqual(fsc.tavg, 4)
+- self.assertEqual(fsc.nactualcall, fsc.ncall, 2)
+-
+-
+-class MultithreadedScenarios(utils.YappiUnitTestCase):
+-
+- def test_issue_32(self):
+- '''
+- Start yappi from different thread and we get Internal Error(15) as
+- the current_ctx_id() called while enumerating the threads in start()
+- and as it does not swap to the enumerated ThreadState* the THreadState_GetDict()
+- returns wrong object and thus sets an invalid id for the _ctx structure.
+-
+- When this issue happens multiple Threads have same tid as the internal ts_ptr
+- will be same for different contexts. So, let's see if that happens
+- '''
+-
+- def foo():
+- time.sleep(0.2)
+-
+- def bar():
+- time.sleep(0.1)
+-
+- def thread_func():
+- yappi.set_clock_type("wall")
+- yappi.start()
+-
+- bar()
+-
+- t = threading.Thread(target=thread_func)
+- t.start()
+- t.join()
+-
+- foo()
+-
+- yappi.stop()
+-
+- thread_ids = set()
+- for tstat in yappi.get_thread_stats():
+- self.assertTrue(tstat.tid not in thread_ids)
+- thread_ids.add(tstat.tid)
+-
+- def test_subsequent_profile(self):
+- WORKER_COUNT = 5
+-
+- def a():
+- pass
+-
+- def b():
+- pass
+-
+- def c():
+- pass
+-
+- _timings = {
+- "a_1": 3,
+- "b_1": 2,
+- "c_1": 1,
+- }
+-
+- yappi.start()
+-
+- def g():
+- pass
+-
+- g()
+- yappi.stop()
+- yappi.clear_stats()
+- _yappi._set_test_timings(_timings)
+- yappi.start()
+-
+- _dummy = []
+- for i in range(WORKER_COUNT):
+- t = threading.Thread(target=a)
+- t.start()
+- t.join()
+- for i in range(WORKER_COUNT):
+- t = threading.Thread(target=b)
+- t.start()
+- _dummy.append(t)
+- t.join()
+- for i in range(WORKER_COUNT):
+- t = threading.Thread(target=a)
+- t.start()
+- t.join()
+- for i in range(WORKER_COUNT):
+- t = threading.Thread(target=c)
+- t.start()
+- t.join()
+- yappi.stop()
+- yappi.start()
+-
+- def f():
+- pass
+-
+- f()
+- stats = yappi.get_func_stats()
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- fsc = utils.find_stat_by_name(stats, 'c')
+- self.assertEqual(fsa.ncall, 10)
+- self.assertEqual(fsb.ncall, 5)
+- self.assertEqual(fsc.ncall, 5)
+- self.assertEqual(fsa.ttot, fsa.tsub, 30)
+- self.assertEqual(fsb.ttot, fsb.tsub, 10)
+- self.assertEqual(fsc.ttot, fsc.tsub, 5)
+-
+- # MACOSx optimizes by only creating one worker thread
+- self.assertTrue(len(yappi.get_thread_stats()) >= 2)
+-
+- def test_basic(self):
+- yappi.set_clock_type('wall')
+-
+- def dummy():
+- pass
+-
+- def a():
+- time.sleep(0.2)
+-
+- class Worker1(threading.Thread):
+-
+- def a(self):
+- time.sleep(0.3)
+-
+- def run(self):
+- self.a()
+-
+- yappi.start(builtins=False, profile_threads=True)
+-
+- c = Worker1()
+- c.start()
+- c.join()
+- a()
+- stats = yappi.get_func_stats()
+- fsa1 = utils.find_stat_by_name(stats, 'Worker1.a')
+- fsa2 = utils.find_stat_by_name(stats, 'a')
+- self.assertTrue(fsa1 is not None)
+- self.assertTrue(fsa2 is not None)
+- self.assertTrue(fsa1.ttot > 0.2)
+- self.assertTrue(fsa2.ttot > 0.1)
+- tstats = yappi.get_thread_stats()
+- self.assertEqual(len(tstats), 2)
+- tsa = utils.find_stat_by_name(tstats, 'Worker1')
+- tsm = utils.find_stat_by_name(tstats, '_MainThread')
+- dummy() # call dummy to force ctx name to be retrieved again.
+- self.assertTrue(tsa is not None)
+- # TODO: I put dummy() to fix below, remove the comments after a while.
+- self.assertTrue( # FIX: I see this fails sometimes?
+- tsm is not None,
+- 'Could not find "_MainThread". Found: %s' % (', '.join(utils.get_stat_names(tstats))))
+-
+- def test_ctx_stats(self):
+- from threading import Thread
+- DUMMY_WORKER_COUNT = 5
+- yappi.start()
+-
+- class DummyThread(Thread):
+- pass
+-
+- def dummy():
+- pass
+-
+- def dummy_worker():
+- pass
+-
+- for i in range(DUMMY_WORKER_COUNT):
+- t = DummyThread(target=dummy_worker)
+- t.start()
+- t.join()
+- yappi.stop()
+- stats = yappi.get_thread_stats()
+- tsa = utils.find_stat_by_name(stats, "DummyThread")
+- self.assertTrue(tsa is not None)
+- yappi.clear_stats()
+- time.sleep(1.0)
+- _timings = {
+- "a_1": 6,
+- "b_1": 5,
+- "c_1": 3,
+- "d_1": 1,
+- "a_2": 4,
+- "b_2": 3,
+- "c_2": 2,
+- "d_2": 1
+- }
+- _yappi._set_test_timings(_timings)
+-
+- class Thread1(Thread):
+- pass
+-
+- class Thread2(Thread):
+- pass
+-
+- def a():
+- b()
+-
+- def b():
+- c()
+-
+- def c():
+- d()
+-
+- def d():
+- time.sleep(0.6)
+-
+- yappi.set_clock_type("wall")
+- yappi.start()
+- t1 = Thread1(target=a)
+- t1.start()
+- t2 = Thread2(target=a)
+- t2.start()
+- t1.join()
+- t2.join()
+- stats = yappi.get_thread_stats()
+-
+- # the fist clear_stats clears the context table?
+- tsa = utils.find_stat_by_name(stats, "DummyThread")
+- self.assertTrue(tsa is None)
+-
+- tst1 = utils.find_stat_by_name(stats, "Thread1")
+- tst2 = utils.find_stat_by_name(stats, "Thread2")
+- tsmain = utils.find_stat_by_name(stats, "_MainThread")
+- dummy() # call dummy to force ctx name to be retrieved again.
+- self.assertTrue(len(stats) == 3)
+- self.assertTrue(tst1 is not None)
+- self.assertTrue(tst2 is not None)
+- # TODO: I put dummy() to fix below, remove the comments after a while.
+- self.assertTrue( # FIX: I see this fails sometimes
+- tsmain is not None,
+- 'Could not find "_MainThread". Found: %s' % (', '.join(utils.get_stat_names(stats))))
+- self.assertTrue(1.0 > tst2.ttot >= 0.5)
+- self.assertTrue(1.0 > tst1.ttot >= 0.5)
+-
+- # test sorting of the ctx stats
+- stats = stats.sort("totaltime", "desc")
+- prev_stat = None
+- for stat in stats:
+- if prev_stat:
+- self.assertTrue(prev_stat.ttot >= stat.ttot)
+- prev_stat = stat
+- stats = stats.sort("totaltime", "asc")
+- prev_stat = None
+- for stat in stats:
+- if prev_stat:
+- self.assertTrue(prev_stat.ttot <= stat.ttot)
+- prev_stat = stat
+- stats = stats.sort("schedcount", "desc")
+- prev_stat = None
+- for stat in stats:
+- if prev_stat:
+- self.assertTrue(prev_stat.sched_count >= stat.sched_count)
+- prev_stat = stat
+- stats = stats.sort("name", "desc")
+- prev_stat = None
+- for stat in stats:
+- if prev_stat:
+- self.assertTrue(prev_stat.name.lower() >= stat.name.lower())
+- prev_stat = stat
+- self.assertRaises(
+- yappi.YappiError, stats.sort, "invalid_thread_sorttype_arg"
+- )
+- self.assertRaises(
+- yappi.YappiError, stats.sort, "invalid_thread_sortorder_arg"
+- )
+-
+- def test_ctx_stats_cpu(self):
+-
+- def get_thread_name():
+- try:
+- return threading.current_thread().name
+- except AttributeError:
+- return "Anonymous"
+-
+- def burn_cpu(sec):
+- t0 = yappi.get_clock_time()
+- elapsed = 0
+- while (elapsed < sec):
+- for _ in range(1000):
+- pass
+- elapsed = yappi.get_clock_time() - t0
+-
+- def test():
+-
+- ts = []
+- for i in (0.01, 0.05, 0.1):
+- t = threading.Thread(target=burn_cpu, args=(i, ))
+- t.name = "burn_cpu-%s" % str(i)
+- t.start()
+- ts.append(t)
+- for t in ts:
+- t.join()
+-
+- yappi.set_clock_type("cpu")
+- yappi.set_context_name_callback(get_thread_name)
+-
+- yappi.start()
+-
+- test()
+-
+- yappi.stop()
+-
+- tstats = yappi.get_thread_stats()
+- r1 = '''
+- burn_cpu-0.1 3 123145356058624 0.100105 8
+- burn_cpu-0.05 2 123145361313792 0.050149 8
+- burn_cpu-0.01 1 123145356058624 0.010127 2
+- MainThread 0 4321620864 0.001632 6
+- '''
+- self.assert_ctx_stats_almost_equal(r1, tstats)
+-
+- def test_producer_consumer_with_queues(self):
+- # we currently just stress yappi, no functionality test is done here.
+- yappi.start()
+- if utils.is_py3x():
+- from queue import Queue
+- else:
+- from Queue import Queue
+- from threading import Thread
+- WORKER_THREAD_COUNT = 50
+- WORK_ITEM_COUNT = 2000
+-
+- def worker():
+- while True:
+- item = q.get()
+- # do the work with item
+- q.task_done()
+-
+- q = Queue()
+- for i in range(WORKER_THREAD_COUNT):
+- t = Thread(target=worker)
+- t.daemon = True
+- t.start()
+-
+- for item in range(WORK_ITEM_COUNT):
+- q.put(item)
+- q.join() # block until all tasks are done
+- #yappi.get_func_stats().sort("callcount").print_all()
+- yappi.stop()
+-
+- def test_temporary_lock_waiting(self):
+- yappi.start()
+- _lock = threading.Lock()
+-
+- def worker():
+- _lock.acquire()
+- try:
+- time.sleep(1.0)
+- finally:
+- _lock.release()
+-
+- t1 = threading.Thread(target=worker)
+- t2 = threading.Thread(target=worker)
+- t1.start()
+- t2.start()
+- t1.join()
+- t2.join()
+- #yappi.get_func_stats().sort("callcount").print_all()
+- yappi.stop()
+-
+- @unittest.skipIf(os.name != "posix", "requires Posix compliant OS")
+- def test_signals_with_blocking_calls(self):
+- import signal, os, time
+-
+- # just to verify if signal is handled correctly and stats/yappi are not corrupted.
+- def handler(signum, frame):
+- raise Exception("Signal handler executed!")
+-
+- yappi.start()
+- signal.signal(signal.SIGALRM, handler)
+- signal.alarm(1)
+- self.assertRaises(Exception, time.sleep, 2)
+- stats = yappi.get_func_stats()
+- fsh = utils.find_stat_by_name(stats, "handler")
+- self.assertTrue(fsh is not None)
+-
+- @unittest.skipIf(not sys.version_info >= (3, 2), "requires Python 3.2")
+- def test_concurrent_futures(self):
+- yappi.start()
+- from concurrent.futures import ThreadPoolExecutor
+- with ThreadPoolExecutor(max_workers=5) as executor:
+- f = executor.submit(pow, 5, 2)
+- self.assertEqual(f.result(), 25)
+- time.sleep(1.0)
+- yappi.stop()
+-
+- @unittest.skipIf(not sys.version_info >= (3, 2), "requires Python 3.2")
+- def test_barrier(self):
+- yappi.start()
+- b = threading.Barrier(2, timeout=1)
+-
+- def worker():
+- try:
+- b.wait()
+- except threading.BrokenBarrierError:
+- pass
+- except Exception:
+- raise Exception("BrokenBarrierError not raised")
+-
+- t1 = threading.Thread(target=worker)
+- t1.start()
+- #b.wait()
+- t1.join()
+- yappi.stop()
+-
+-
+-class NonRecursiveFunctions(utils.YappiUnitTestCase):
+-
+- def test_abcd(self):
+- _timings = {"a_1": 6, "b_1": 5, "c_1": 3, "d_1": 1}
+- _yappi._set_test_timings(_timings)
+-
+- def a():
+- b()
+-
+- def b():
+- c()
+-
+- def c():
+- d()
+-
+- def d():
+- pass
+-
+- stats = utils.run_and_get_func_stats(a)
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- fsc = utils.find_stat_by_name(stats, 'c')
+- fsd = utils.find_stat_by_name(stats, 'd')
+- cfsab = fsa.children[fsb]
+- cfsbc = fsb.children[fsc]
+- cfscd = fsc.children[fsd]
+-
+- self.assertEqual(fsa.ttot, 6)
+- self.assertEqual(fsa.tsub, 1)
+- self.assertEqual(fsb.ttot, 5)
+- self.assertEqual(fsb.tsub, 2)
+- self.assertEqual(fsc.ttot, 3)
+- self.assertEqual(fsc.tsub, 2)
+- self.assertEqual(fsd.ttot, 1)
+- self.assertEqual(fsd.tsub, 1)
+- self.assertEqual(cfsab.ttot, 5)
+- self.assertEqual(cfsab.tsub, 2)
+- self.assertEqual(cfsbc.ttot, 3)
+- self.assertEqual(cfsbc.tsub, 2)
+- self.assertEqual(cfscd.ttot, 1)
+- self.assertEqual(cfscd.tsub, 1)
+-
+- def test_stop_in_middle(self):
+- _timings = {"a_1": 6, "b_1": 4}
+- _yappi._set_test_timings(_timings)
+-
+- def a():
+- b()
+- yappi.stop()
+-
+- def b():
+- time.sleep(0.2)
+-
+- yappi.start()
+- a()
+- stats = yappi.get_func_stats()
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+-
+- self.assertEqual(fsa.ncall, 1)
+- self.assertEqual(fsa.nactualcall, 0)
+- self.assertEqual(fsa.ttot, 0) # no call_leave called
+- self.assertEqual(fsa.tsub, 0) # no call_leave called
+- self.assertEqual(fsb.ttot, 4)
+-
+-
+-class RecursiveFunctions(utils.YappiUnitTestCase):
+-
+- def test_fibonacci(self):
+-
+- def fib(n):
+- if n > 1:
+- return fib(n - 1) + fib(n - 2)
+- else:
+- return n
+-
+- stats = utils.run_and_get_func_stats(fib, 22)
+- fs = utils.find_stat_by_name(stats, 'fib')
+- self.assertEqual(fs.ncall, 57313)
+- self.assertEqual(fs.ttot, fs.tsub)
+-
+- def test_abcadc(self):
+- _timings = {
+- "a_1": 20,
+- "b_1": 19,
+- "c_1": 17,
+- "a_2": 13,
+- "d_1": 12,
+- "c_2": 10,
+- "a_3": 5
+- }
+- _yappi._set_test_timings(_timings)
+-
+- def a(n):
+- if n == 3:
+- return
+- if n == 1 + 1:
+- d(n)
+- else:
+- b(n)
+-
+- def b(n):
+- c(n)
+-
+- def c(n):
+- a(n + 1)
+-
+- def d(n):
+- c(n)
+-
+- stats = utils.run_and_get_func_stats(a, 1)
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- fsc = utils.find_stat_by_name(stats, 'c')
+- fsd = utils.find_stat_by_name(stats, 'd')
+- self.assertEqual(fsa.ncall, 3)
+- self.assertEqual(fsa.nactualcall, 1)
+- self.assertEqual(fsa.ttot, 20)
+- self.assertEqual(fsa.tsub, 7)
+- self.assertEqual(fsb.ttot, 19)
+- self.assertEqual(fsb.tsub, 2)
+- self.assertEqual(fsc.ttot, 17)
+- self.assertEqual(fsc.tsub, 9)
+- self.assertEqual(fsd.ttot, 12)
+- self.assertEqual(fsd.tsub, 2)
+- cfsca = fsc.children[fsa]
+- self.assertEqual(cfsca.nactualcall, 0)
+- self.assertEqual(cfsca.ncall, 2)
+- self.assertEqual(cfsca.ttot, 13)
+- self.assertEqual(cfsca.tsub, 6)
+-
+- def test_aaaa(self):
+- _timings = {"d_1": 9, "d_2": 7, "d_3": 3, "d_4": 2}
+- _yappi._set_test_timings(_timings)
+-
+- def d(n):
+- if n == 3:
+- return
+- d(n + 1)
+-
+- stats = utils.run_and_get_func_stats(d, 0)
+- fsd = utils.find_stat_by_name(stats, 'd')
+- self.assertEqual(fsd.ncall, 4)
+- self.assertEqual(fsd.nactualcall, 1)
+- self.assertEqual(fsd.ttot, 9)
+- self.assertEqual(fsd.tsub, 9)
+- cfsdd = fsd.children[fsd]
+- self.assertEqual(cfsdd.ttot, 7)
+- self.assertEqual(cfsdd.tsub, 7)
+- self.assertEqual(cfsdd.ncall, 3)
+- self.assertEqual(cfsdd.nactualcall, 0)
+-
+- def test_abcabc(self):
+- _timings = {
+- "a_1": 20,
+- "b_1": 19,
+- "c_1": 17,
+- "a_2": 13,
+- "b_2": 11,
+- "c_2": 9,
+- "a_3": 6
+- }
+- _yappi._set_test_timings(_timings)
+-
+- def a(n):
+- if n == 3:
+- return
+- else:
+- b(n)
+-
+- def b(n):
+- c(n)
+-
+- def c(n):
+- a(n + 1)
+-
+- stats = utils.run_and_get_func_stats(a, 1)
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- fsc = utils.find_stat_by_name(stats, 'c')
+- self.assertEqual(fsa.ncall, 3)
+- self.assertEqual(fsa.nactualcall, 1)
+- self.assertEqual(fsa.ttot, 20)
+- self.assertEqual(fsa.tsub, 9)
+- self.assertEqual(fsb.ttot, 19)
+- self.assertEqual(fsb.tsub, 4)
+- self.assertEqual(fsc.ttot, 17)
+- self.assertEqual(fsc.tsub, 7)
+- cfsab = fsa.children[fsb]
+- cfsbc = fsb.children[fsc]
+- cfsca = fsc.children[fsa]
+- self.assertEqual(cfsab.ttot, 19)
+- self.assertEqual(cfsab.tsub, 4)
+- self.assertEqual(cfsbc.ttot, 17)
+- self.assertEqual(cfsbc.tsub, 7)
+- self.assertEqual(cfsca.ttot, 13)
+- self.assertEqual(cfsca.tsub, 8)
+-
+- def test_abcbca(self):
+- _timings = {"a_1": 10, "b_1": 9, "c_1": 7, "b_2": 4, "c_2": 2, "a_2": 1}
+- _yappi._set_test_timings(_timings)
+- self._ncall = 1
+-
+- def a():
+- if self._ncall == 1:
+- b()
+- else:
+- return
+-
+- def b():
+- c()
+-
+- def c():
+- if self._ncall == 1:
+- self._ncall += 1
+- b()
+- else:
+- a()
+-
+- stats = utils.run_and_get_func_stats(a)
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- fsc = utils.find_stat_by_name(stats, 'c')
+- cfsab = fsa.children[fsb]
+- cfsbc = fsb.children[fsc]
+- cfsca = fsc.children[fsa]
+- self.assertEqual(fsa.ttot, 10)
+- self.assertEqual(fsa.tsub, 2)
+- self.assertEqual(fsb.ttot, 9)
+- self.assertEqual(fsb.tsub, 4)
+- self.assertEqual(fsc.ttot, 7)
+- self.assertEqual(fsc.tsub, 4)
+- self.assertEqual(cfsab.ttot, 9)
+- self.assertEqual(cfsab.tsub, 2)
+- self.assertEqual(cfsbc.ttot, 7)
+- self.assertEqual(cfsbc.tsub, 4)
+- self.assertEqual(cfsca.ttot, 1)
+- self.assertEqual(cfsca.tsub, 1)
+- self.assertEqual(cfsca.ncall, 1)
+- self.assertEqual(cfsca.nactualcall, 0)
+-
+- def test_aabccb(self):
+- _timings = {
+- "a_1": 13,
+- "a_2": 11,
+- "b_1": 9,
+- "c_1": 5,
+- "c_2": 3,
+- "b_2": 1
+- }
+- _yappi._set_test_timings(_timings)
+- self._ncall = 1
+-
+- def a():
+- if self._ncall == 1:
+- self._ncall += 1
+- a()
+- else:
+- b()
+-
+- def b():
+- if self._ncall == 3:
+- return
+- else:
+- c()
+-
+- def c():
+- if self._ncall == 2:
+- self._ncall += 1
+- c()
+- else:
+- b()
+-
+- stats = utils.run_and_get_func_stats(a)
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- fsc = utils.find_stat_by_name(stats, 'c')
+- cfsaa = fsa.children[fsa.index]
+- cfsab = fsa.children[fsb]
+- cfsbc = fsb.children[fsc.full_name]
+- cfscc = fsc.children[fsc]
+- cfscb = fsc.children[fsb]
+- self.assertEqual(fsb.ttot, 9)
+- self.assertEqual(fsb.tsub, 5)
+- self.assertEqual(cfsbc.ttot, 5)
+- self.assertEqual(cfsbc.tsub, 2)
+- self.assertEqual(fsa.ttot, 13)
+- self.assertEqual(fsa.tsub, 4)
+- self.assertEqual(cfsab.ttot, 9)
+- self.assertEqual(cfsab.tsub, 4)
+- self.assertEqual(cfsaa.ttot, 11)
+- self.assertEqual(cfsaa.tsub, 2)
+- self.assertEqual(fsc.ttot, 5)
+- self.assertEqual(fsc.tsub, 4)
+-
+- def test_abaa(self):
+- _timings = {"a_1": 13, "b_1": 10, "a_2": 9, "a_3": 5}
+- _yappi._set_test_timings(_timings)
+-
+- self._ncall = 1
+-
+- def a():
+- if self._ncall == 1:
+- b()
+- elif self._ncall == 2:
+- self._ncall += 1
+- a()
+- else:
+- return
+-
+- def b():
+- self._ncall += 1
+- a()
+-
+- stats = utils.run_and_get_func_stats(a)
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- cfsaa = fsa.children[fsa]
+- cfsba = fsb.children[fsa]
+- self.assertEqual(fsb.ttot, 10)
+- self.assertEqual(fsb.tsub, 1)
+- self.assertEqual(fsa.ttot, 13)
+- self.assertEqual(fsa.tsub, 12)
+- self.assertEqual(cfsaa.ttot, 5)
+- self.assertEqual(cfsaa.tsub, 5)
+- self.assertEqual(cfsba.ttot, 9)
+- self.assertEqual(cfsba.tsub, 4)
+-
+- def test_aabb(self):
+- _timings = {"a_1": 13, "a_2": 10, "b_1": 9, "b_2": 5}
+- _yappi._set_test_timings(_timings)
+-
+- self._ncall = 1
+-
+- def a():
+- if self._ncall == 1:
+- self._ncall += 1
+- a()
+- elif self._ncall == 2:
+- b()
+- else:
+- return
+-
+- def b():
+- if self._ncall == 2:
+- self._ncall += 1
+- b()
+- else:
+- return
+-
+- stats = utils.run_and_get_func_stats(a)
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- cfsaa = fsa.children[fsa]
+- cfsab = fsa.children[fsb]
+- cfsbb = fsb.children[fsb]
+- self.assertEqual(fsa.ttot, 13)
+- self.assertEqual(fsa.tsub, 4)
+- self.assertEqual(fsb.ttot, 9)
+- self.assertEqual(fsb.tsub, 9)
+- self.assertEqual(cfsaa.ttot, 10)
+- self.assertEqual(cfsaa.tsub, 1)
+- self.assertEqual(cfsab.ttot, 9)
+- self.assertEqual(cfsab.tsub, 4)
+- self.assertEqual(cfsbb.ttot, 5)
+- self.assertEqual(cfsbb.tsub, 5)
+-
+- def test_abbb(self):
+- _timings = {"a_1": 13, "b_1": 10, "b_2": 6, "b_3": 1}
+- _yappi._set_test_timings(_timings)
+-
+- self._ncall = 1
+-
+- def a():
+- if self._ncall == 1:
+- b()
+-
+- def b():
+- if self._ncall == 3:
+- return
+- self._ncall += 1
+- b()
+-
+- stats = utils.run_and_get_func_stats(a)
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- cfsab = fsa.children[fsb]
+- cfsbb = fsb.children[fsb]
+- self.assertEqual(fsa.ttot, 13)
+- self.assertEqual(fsa.tsub, 3)
+- self.assertEqual(fsb.ttot, 10)
+- self.assertEqual(fsb.tsub, 10)
+- self.assertEqual(fsb.ncall, 3)
+- self.assertEqual(fsb.nactualcall, 1)
+- self.assertEqual(cfsab.ttot, 10)
+- self.assertEqual(cfsab.tsub, 4)
+- self.assertEqual(cfsbb.ttot, 6)
+- self.assertEqual(cfsbb.tsub, 6)
+- self.assertEqual(cfsbb.nactualcall, 0)
+- self.assertEqual(cfsbb.ncall, 2)
+-
+- def test_aaab(self):
+- _timings = {"a_1": 13, "a_2": 10, "a_3": 6, "b_1": 1}
+- _yappi._set_test_timings(_timings)
+-
+- self._ncall = 1
+-
+- def a():
+- if self._ncall == 3:
+- b()
+- return
+- self._ncall += 1
+- a()
+-
+- def b():
+- return
+-
+- stats = utils.run_and_get_func_stats(a)
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- cfsaa = fsa.children[fsa]
+- cfsab = fsa.children[fsb]
+- self.assertEqual(fsa.ttot, 13)
+- self.assertEqual(fsa.tsub, 12)
+- self.assertEqual(fsb.ttot, 1)
+- self.assertEqual(fsb.tsub, 1)
+- self.assertEqual(cfsaa.ttot, 10)
+- self.assertEqual(cfsaa.tsub, 9)
+- self.assertEqual(cfsab.ttot, 1)
+- self.assertEqual(cfsab.tsub, 1)
+-
+- def test_abab(self):
+- _timings = {"a_1": 13, "b_1": 10, "a_2": 6, "b_2": 1}
+- _yappi._set_test_timings(_timings)
+-
+- self._ncall = 1
+-
+- def a():
+- b()
+-
+- def b():
+- if self._ncall == 2:
+- return
+- self._ncall += 1
+- a()
+-
+- stats = utils.run_and_get_func_stats(a)
+- fsa = utils.find_stat_by_name(stats, 'a')
+- fsb = utils.find_stat_by_name(stats, 'b')
+- cfsab = fsa.children[fsb]
+- cfsba = fsb.children[fsa]
+- self.assertEqual(fsa.ttot, 13)
+- self.assertEqual(fsa.tsub, 8)
+- self.assertEqual(fsb.ttot, 10)
+- self.assertEqual(fsb.tsub, 5)
+- self.assertEqual(cfsab.ttot, 10)
+- self.assertEqual(cfsab.tsub, 5)
+- self.assertEqual(cfsab.ncall, 2)
+- self.assertEqual(cfsab.nactualcall, 1)
+- self.assertEqual(cfsba.ttot, 6)
+- self.assertEqual(cfsba.tsub, 5)
+-
+-
+-if __name__ == '__main__':
+- # import sys;sys.argv = ['', 'BasicUsage.test_run_as_script']
+- # import sys;sys.argv = ['', 'MultithreadedScenarios.test_subsequent_profile']
+- unittest.main()
++import os
++import sys
++import time
++import threading
++import unittest
++import yappi
++import _yappi
++import tests.utils as utils
++import multiprocessing # added to fix http://bugs.python.org/issue15881 for > Py2.6
++import subprocess
++
++_counter = 0
++
++
++class BasicUsage(utils.YappiUnitTestCase):
++
++ def test_callback_function_int_return_overflow(self):
++ # this test is just here to check if any errors are generated, as the err
++ # is printed in C side, I did not include it here. THere are ways to test
++ # this deterministically, I did not bother
++ import ctypes
++
++ def _unsigned_overflow_margin():
++ return 2**(ctypes.sizeof(ctypes.c_void_p) * 8) - 1
++
++ def foo():
++ pass
++
++ #with utils.captured_output() as (out, err):
++ yappi.set_context_id_callback(_unsigned_overflow_margin)
++ yappi.set_tag_callback(_unsigned_overflow_margin)
++ yappi.start()
++ foo()
++
++ def test_issue60(self):
++
++ def foo():
++ buf = bytearray()
++ buf += b't' * 200
++ view = memoryview(buf)[10:]
++ view = view.tobytes()
++ del buf[:10] # this throws exception
++ return view
++
++ yappi.start(builtins=True)
++ foo()
++ self.assertTrue(
++ len(
++ yappi.get_func_stats(
++ filter_callback=lambda x: yappi.
++ func_matches(x, [memoryview.tobytes])
++ )
++ ) > 0
++ )
++ yappi.stop()
++
++ def test_issue54(self):
++
++ def _tag_cbk():
++ global _counter
++ _counter += 1
++ return _counter
++
++ def a():
++ pass
++
++ def b():
++ pass
++
++ yappi.set_tag_callback(_tag_cbk)
++ yappi.start()
++ a()
++ a()
++ a()
++ yappi.stop()
++ stats = yappi.get_func_stats()
++ self.assertEqual(stats.pop().ncall, 3) # aggregated if no tag is given
++ stats = yappi.get_func_stats(tag=1)
++
++ for i in range(1, 3):
++ stats = yappi.get_func_stats(tag=i)
++ stats = yappi.get_func_stats(
++ tag=i, filter_callback=lambda x: yappi.func_matches(x, [a])
++ )
++
++ stat = stats.pop()
++ self.assertEqual(stat.ncall, 1)
++
++ yappi.set_tag_callback(None)
++ yappi.clear_stats()
++ yappi.start()
++ b()
++ b()
++ stats = yappi.get_func_stats()
++ self.assertEqual(len(stats), 1)
++ stat = stats.pop()
++ self.assertEqual(stat.ncall, 2)
++
++ def test_filter(self):
++
++ def a():
++ pass
++
++ def b():
++ a()
++
++ def c():
++ b()
++
++ _TCOUNT = 5
++
++ ts = []
++ yappi.start()
++ for i in range(_TCOUNT):
++ t = threading.Thread(target=c)
++ t.start()
++ ts.append(t)
++
++ for t in ts:
++ t.join()
++
++ yappi.stop()
++
++ ctx_ids = []
++ for tstat in yappi.get_thread_stats():
++ if tstat.name == '_MainThread':
++ main_ctx_id = tstat.id
++ else:
++ ctx_ids.append(tstat.id)
++
++ fstats = yappi.get_func_stats(filter={"ctx_id": 9})
++ self.assertTrue(fstats.empty())
++ fstats = yappi.get_func_stats(
++ filter={
++ "ctx_id": main_ctx_id,
++ "name": "c"
++ }
++ ) # main thread
++ self.assertTrue(fstats.empty())
++
++ for i in ctx_ids:
++ fstats = yappi.get_func_stats(
++ filter={
++ "ctx_id": i,
++ "name": "a",
++ "ncall": 1
++ }
++ )
++ self.assertEqual(fstats.pop().ncall, 1)
++ fstats = yappi.get_func_stats(filter={"ctx_id": i, "name": "b"})
++ self.assertEqual(fstats.pop().ncall, 1)
++ fstats = yappi.get_func_stats(filter={"ctx_id": i, "name": "c"})
++ self.assertEqual(fstats.pop().ncall, 1)
++
++ yappi.clear_stats()
++ yappi.start(builtins=True)
++ time.sleep(0.1)
++ yappi.stop()
++ fstats = yappi.get_func_stats(filter={"module": "time"})
++ self.assertEqual(len(fstats), 1)
++
++ # invalid filters`
++ self.assertRaises(
++ Exception, yappi.get_func_stats, filter={'tag': "sss"}
++ )
++ self.assertRaises(
++ Exception, yappi.get_func_stats, filter={'ctx_id': "None"}
++ )
++
++ def test_filter_callback(self):
++
++ def a():
++ time.sleep(0.1)
++
++ def b():
++ a()
++
++ def c():
++ pass
++
++ def d():
++ pass
++
++ yappi.set_clock_type("wall")
++ yappi.start(builtins=True)
++ a()
++ b()
++ c()
++ d()
++ stats = yappi.get_func_stats(
++ filter_callback=lambda x: yappi.func_matches(x, [a, b])
++ )
++ #stats.print_all()
++ r1 = '''
++ tests/test_functionality.py:98 a 2 0.000000 0.200350 0.100175
++ tests/test_functionality.py:101 b 1 0.000000 0.120000 0.100197
++ '''
++ self.assert_traces_almost_equal(r1, stats)
++ self.assertEqual(len(stats), 2)
++ stats = yappi.get_func_stats(
++ filter_callback=lambda x: yappi.
++ module_matches(x, [sys.modules[__name__]])
++ )
++ r1 = '''
++ tests/test_functionality.py:98 a 2 0.000000 0.230130 0.115065
++ tests/test_functionality.py:101 b 1 0.000000 0.120000 0.109011
++ tests/test_functionality.py:104 c 1 0.000000 0.000002 0.000002
++ tests/test_functionality.py:107 d 1 0.000000 0.000001 0.000001
++ '''
++ self.assert_traces_almost_equal(r1, stats)
++ self.assertEqual(len(stats), 4)
++
++ stats = yappi.get_func_stats(
++ filter_callback=lambda x: yappi.func_matches(x, [time.sleep])
++ )
++ self.assertEqual(len(stats), 1)
++ r1 = '''
++ time.sleep 2 0.206804 0.220000 0.103402
++ '''
++ self.assert_traces_almost_equal(r1, stats)
++
++ def test_print_formatting(self):
++
++ def a():
++ pass
++
++ def b():
++ a()
++
++ func_cols = {
++ 1: ("name", 48),
++ 0: ("ncall", 5),
++ 2: ("tsub", 8),
++ }
++ thread_cols = {
++ 1: ("name", 48),
++ 0: ("ttot", 8),
++ }
++
++ yappi.start()
++ a()
++ b()
++ yappi.stop()
++ fs = yappi.get_func_stats()
++ cs = fs[1].children
++ ts = yappi.get_thread_stats()
++ #fs.print_all(out=sys.stderr, columns={1:("name", 70), })
++ #cs.print_all(out=sys.stderr, columns=func_cols)
++ #ts.print_all(out=sys.stderr, columns=thread_cols)
++ #cs.print_all(out=sys.stderr, columns={})
++
++ self.assertRaises(
++ yappi.YappiError, fs.print_all, columns={1: ("namee", 9)}
++ )
++ self.assertRaises(
++ yappi.YappiError, cs.print_all, columns={1: ("dd", 0)}
++ )
++ self.assertRaises(
++ yappi.YappiError, ts.print_all, columns={1: ("tidd", 0)}
++ )
++
++ def test_get_clock(self):
++ yappi.set_clock_type('cpu')
++ self.assertEqual('cpu', yappi.get_clock_type())
++ clock_info = yappi.get_clock_info()
++ self.assertTrue('api' in clock_info)
++ self.assertTrue('resolution' in clock_info)
++
++ yappi.set_clock_type('wall')
++ self.assertEqual('wall', yappi.get_clock_type())
++
++ t0 = yappi.get_clock_time()
++ time.sleep(0.1)
++ duration = yappi.get_clock_time() - t0
++ self.assertTrue(0.05 < duration < 0.3)
++
++ def test_profile_decorator(self):
++
++ def aggregate(func, stats):
++ fname = "tests/%s.profile" % (func.__name__)
++ try:
++ stats.add(fname)
++ except IOError:
++ pass
++ stats.save(fname)
++ raise Exception("messing around")
++
++ @yappi.profile(return_callback=aggregate)
++ def a(x, y):
++ if x + y == 25:
++ raise Exception("")
++ return x + y
++
++ def b():
++ pass
++
++ try:
++ os.remove(
++ "tests/a.profile"
++ ) # remove the one from prev test, if available
++ except:
++ pass
++
++ # global profile is on to mess things up
++ yappi.start()
++ b()
++
++ # assert functionality and call function at same time
++ try:
++ self.assertEqual(a(1, 2), 3)
++ except:
++ pass
++ try:
++ self.assertEqual(a(2, 5), 7)
++ except:
++ pass
++ try:
++ a(4, 21)
++ except:
++ pass
++ stats = yappi.get_func_stats().add("tests/a.profile")
++ fsa = utils.find_stat_by_name(stats, 'a')
++ self.assertEqual(fsa.ncall, 3)
++ self.assertEqual(len(stats), 1) # b() should be cleared out.
++
++ @yappi.profile(return_callback=aggregate)
++ def count_down_rec(n):
++ if n == 0:
++ return
++ count_down_rec(n - 1)
++
++ try:
++ os.remove(
++ "tests/count_down_rec.profile"
++ ) # remove the one from prev test, if available
++ except:
++ pass
++
++ try:
++ count_down_rec(4)
++ except:
++ pass
++ try:
++ count_down_rec(3)
++ except:
++ pass
++
++ stats = yappi.YFuncStats("tests/count_down_rec.profile")
++ fsrec = utils.find_stat_by_name(stats, 'count_down_rec')
++ self.assertEqual(fsrec.ncall, 9)
++ self.assertEqual(fsrec.nactualcall, 2)
++
++ def test_strip_dirs(self):
++
++ def a():
++ pass
++
++ stats = utils.run_and_get_func_stats(a, )
++ stats.strip_dirs()
++ fsa = utils.find_stat_by_name(stats, "a")
++ self.assertEqual(fsa.module, os.path.basename(fsa.module))
++
++ @unittest.skipIf(os.name == "nt", "do not run on Windows")
++ def test_run_as_script(self):
++ import re
++ p = subprocess.Popen(
++ ['yappi', os.path.join('./tests', 'run_as_script.py')],
++ stdout=subprocess.PIPE
++ )
++ out, err = p.communicate()
++ self.assertEqual(p.returncode, 0)
++ func_stats, thread_stats = re.split(
++ b'name\\s+id\\s+tid\\s+ttot\\s+scnt\\s*\n', out
++ )
++ self.assertTrue(b'FancyThread' in thread_stats)
++
++ def test_yappi_overhead(self):
++ LOOP_COUNT = 100000
++
++ def a():
++ pass
++
++ def b():
++ for i in range(LOOP_COUNT):
++ a()
++
++ t0 = time.time()
++ yappi.start()
++ b()
++ yappi.stop()
++ time_with_yappi = time.time() - t0
++ t0 = time.time()
++ b()
++ time_without_yappi = time.time() - t0
++ if time_without_yappi == 0:
++ time_without_yappi = 0.000001
++
++ # in latest v0.82, I calculated this as close to "7.0" in my machine.
++ # however, %83 of this overhead is coming from tickcount(). The other %17
++ # seems to have been evenly distributed to the internal bookkeeping
++ # structures/algorithms which seems acceptable. Note that our test only
++ # tests one function being profiled at-a-time in a short interval.
++ # profiling high number of functions in a small time
++ # is a different beast, (which is pretty unlikely in most applications)
++ # So as a conclusion: I cannot see any optimization window for Yappi that
++ # is worth implementing as we will only optimize %17 of the time.
++ sys.stderr.write("\r\nYappi puts %0.1f times overhead to the profiled application in average.\r\n" % \
++ (time_with_yappi / time_without_yappi))
++
++ def test_clear_stats_while_running(self):
++
++ def a():
++ pass
++
++ yappi.start()
++ a()
++ yappi.clear_stats()
++ a()
++ stats = yappi.get_func_stats()
++ fsa = utils.find_stat_by_name(stats, 'a')
++ self.assertEqual(fsa.ncall, 1)
++
++ def test_generator(self):
++
++ def _gen(n):
++ while (n > 0):
++ yield n
++ n -= 1
++
++ yappi.start()
++ for x in _gen(5):
++ pass
++ self.assertTrue(
++ yappi.convert2pstats(yappi.get_func_stats()) is not None
++ )
++
++ def test_slice_child_stats_and_strip_dirs(self):
++
++ def b():
++ for i in range(10000000):
++ pass
++
++ def a():
++ b()
++
++ yappi.start(builtins=True)
++ a()
++ stats = yappi.get_func_stats()
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ self.assertTrue(fsa.children[0:1] is not None)
++ prev_afullname = fsa.full_name
++ prev_bchildfullname = fsa.children[fsb].full_name
++ stats.strip_dirs()
++ self.assertTrue(len(prev_afullname) > len(fsa.full_name))
++ self.assertTrue(
++ len(prev_bchildfullname) > len(fsa.children[fsb].full_name)
++ )
++
++ def test_children_stat_functions(self):
++ _timings = {"a_1": 5, "b_1": 3, "c_1": 1}
++ _yappi._set_test_timings(_timings)
++
++ def b():
++ pass
++
++ def c():
++ pass
++
++ def a():
++ b()
++ c()
++
++ yappi.start()
++ a()
++ b() # non-child call
++ c() # non-child call
++ stats = yappi.get_func_stats()
++ fsa = utils.find_stat_by_name(stats, 'a')
++ childs_of_a = fsa.children.get().sort("tavg", "desc")
++ prev_item = None
++ for item in childs_of_a:
++ if prev_item:
++ self.assertTrue(prev_item.tavg > item.tavg)
++ prev_item = item
++ childs_of_a.sort("name", "desc")
++ prev_item = None
++ for item in childs_of_a:
++ if prev_item:
++ self.assertTrue(prev_item.name > item.name)
++ prev_item = item
++ childs_of_a.clear()
++ self.assertTrue(childs_of_a.empty())
++
++ def test_no_stats_different_clock_type_load(self):
++
++ def a():
++ pass
++
++ yappi.start()
++ a()
++ yappi.stop()
++ yappi.get_func_stats().save("tests/ystats1.ys")
++ yappi.clear_stats()
++ yappi.set_clock_type("WALL")
++ yappi.start()
++ yappi.stop()
++ stats = yappi.get_func_stats().add("tests/ystats1.ys")
++ fsa = utils.find_stat_by_name(stats, 'a')
++ self.assertTrue(fsa is not None)
++
++ def test_subsequent_profile(self):
++ _timings = {"a_1": 1, "b_1": 1}
++ _yappi._set_test_timings(_timings)
++
++ def a():
++ pass
++
++ def b():
++ pass
++
++ yappi.start()
++ a()
++ yappi.stop()
++ yappi.start()
++ b()
++ yappi.stop()
++ stats = yappi.get_func_stats()
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ self.assertTrue(fsa is not None)
++ self.assertTrue(fsb is not None)
++ self.assertEqual(fsa.ttot, 1)
++ self.assertEqual(fsb.ttot, 1)
++
++ def test_lambda(self):
++ f = lambda: time.sleep(0.3)
++ yappi.set_clock_type("wall")
++ yappi.start()
++ f()
++ stats = yappi.get_func_stats()
++ fsa = utils.find_stat_by_name(stats, '<lambda>')
++ self.assertTrue(fsa.ttot > 0.1)
++
++ def test_module_stress(self):
++ self.assertEqual(yappi.is_running(), False)
++
++ yappi.start()
++ yappi.clear_stats()
++ self.assertRaises(_yappi.error, yappi.set_clock_type, "wall")
++
++ yappi.stop()
++ yappi.clear_stats()
++ yappi.set_clock_type("cpu")
++ self.assertRaises(yappi.YappiError, yappi.set_clock_type, "dummy")
++ self.assertEqual(yappi.is_running(), False)
++ yappi.clear_stats()
++ yappi.clear_stats()
++
++ def test_stat_sorting(self):
++ _timings = {"a_1": 13, "b_1": 10, "a_2": 6, "b_2": 1}
++ _yappi._set_test_timings(_timings)
++
++ self._ncall = 1
++
++ def a():
++ b()
++
++ def b():
++ if self._ncall == 2:
++ return
++ self._ncall += 1
++ a()
++
++ stats = utils.run_and_get_func_stats(a)
++ stats = stats.sort("totaltime", "desc")
++ prev_stat = None
++ for stat in stats:
++ if prev_stat:
++ self.assertTrue(prev_stat.ttot >= stat.ttot)
++ prev_stat = stat
++ stats = stats.sort("totaltime", "asc")
++ prev_stat = None
++ for stat in stats:
++ if prev_stat:
++ self.assertTrue(prev_stat.ttot <= stat.ttot)
++ prev_stat = stat
++ stats = stats.sort("avgtime", "asc")
++ prev_stat = None
++ for stat in stats:
++ if prev_stat:
++ self.assertTrue(prev_stat.tavg <= stat.tavg)
++ prev_stat = stat
++ stats = stats.sort("name", "asc")
++ prev_stat = None
++ for stat in stats:
++ if prev_stat:
++ self.assertTrue(prev_stat.name <= stat.name)
++ prev_stat = stat
++ stats = stats.sort("subtime", "asc")
++ prev_stat = None
++ for stat in stats:
++ if prev_stat:
++ self.assertTrue(prev_stat.tsub <= stat.tsub)
++ prev_stat = stat
++
++ self.assertRaises(
++ yappi.YappiError, stats.sort, "invalid_func_sorttype_arg"
++ )
++ self.assertRaises(
++ yappi.YappiError, stats.sort, "totaltime",
++ "invalid_func_sortorder_arg"
++ )
++
++ def test_start_flags(self):
++ self.assertEqual(_yappi._get_start_flags(), None)
++ yappi.start()
++
++ def a():
++ pass
++
++ a()
++ self.assertEqual(_yappi._get_start_flags()["profile_builtins"], 0)
++ self.assertEqual(_yappi._get_start_flags()["profile_multicontext"], 1)
++ self.assertEqual(len(yappi.get_thread_stats()), 1)
++
++ def test_builtin_profiling(self):
++
++ def a():
++ time.sleep(0.4) # is a builtin function
++
++ yappi.set_clock_type('wall')
++
++ yappi.start(builtins=True)
++ a()
++ stats = yappi.get_func_stats()
++ fsa = utils.find_stat_by_name(stats, 'sleep')
++ self.assertTrue(fsa is not None)
++ self.assertTrue(fsa.ttot > 0.3)
++ yappi.stop()
++ yappi.clear_stats()
++
++ def a():
++ pass
++
++ yappi.start()
++ t = threading.Thread(target=a)
++ t.start()
++ t.join()
++ stats = yappi.get_func_stats()
++
++ def test_singlethread_profiling(self):
++ yappi.set_clock_type('wall')
++
++ def a():
++ time.sleep(0.2)
++
++ class Worker1(threading.Thread):
++
++ def a(self):
++ time.sleep(0.3)
++
++ def run(self):
++ self.a()
++
++ yappi.start(profile_threads=False)
++
++ c = Worker1()
++ c.start()
++ c.join()
++ a()
++ stats = yappi.get_func_stats()
++ fsa1 = utils.find_stat_by_name(stats, 'Worker1.a')
++ fsa2 = utils.find_stat_by_name(stats, 'a')
++ self.assertTrue(fsa1 is None)
++ self.assertTrue(fsa2 is not None)
++ self.assertTrue(fsa2.ttot > 0.1)
++
++ def test_run(self):
++
++ def profiled():
++ pass
++
++ yappi.clear_stats()
++ try:
++ with yappi.run():
++ profiled()
++ stats = yappi.get_func_stats()
++ finally:
++ yappi.clear_stats()
++
++ self.assertIsNotNone(utils.find_stat_by_name(stats, 'profiled'))
++
++ def test_run_recursive(self):
++
++ def profiled():
++ pass
++
++ def not_profiled():
++ pass
++
++ yappi.clear_stats()
++ try:
++ with yappi.run():
++ with yappi.run():
++ profiled()
++ # Profiling stopped here
++ not_profiled()
++ stats = yappi.get_func_stats()
++ finally:
++ yappi.clear_stats()
++
++ self.assertIsNotNone(utils.find_stat_by_name(stats, 'profiled'))
++ self.assertIsNone(utils.find_stat_by_name(stats, 'not_profiled'))
++
++
++class StatSaveScenarios(utils.YappiUnitTestCase):
++
++ def test_pstats_conversion(self):
++
++ def pstat_id(fs):
++ return (fs.module, fs.lineno, fs.name)
++
++ def a():
++ d()
++
++ def b():
++ d()
++
++ def c():
++ pass
++
++ def d():
++ pass
++
++ _timings = {"a_1": 12, "b_1": 7, "c_1": 5, "d_1": 2}
++ _yappi._set_test_timings(_timings)
++ stats = utils.run_and_get_func_stats(a, )
++ stats.strip_dirs()
++ stats.save("tests/a1.pstats", type="pstat")
++ fsa_pid = pstat_id(utils.find_stat_by_name(stats, "a"))
++ fsd_pid = pstat_id(utils.find_stat_by_name(stats, "d"))
++ yappi.clear_stats()
++ _yappi._set_test_timings(_timings)
++ stats = utils.run_and_get_func_stats(a, )
++ stats.strip_dirs()
++ stats.save("tests/a2.pstats", type="pstat")
++ yappi.clear_stats()
++ _yappi._set_test_timings(_timings)
++ stats = utils.run_and_get_func_stats(b, )
++ stats.strip_dirs()
++ stats.save("tests/b1.pstats", type="pstat")
++ fsb_pid = pstat_id(utils.find_stat_by_name(stats, "b"))
++ yappi.clear_stats()
++ _yappi._set_test_timings(_timings)
++ stats = utils.run_and_get_func_stats(c, )
++ stats.strip_dirs()
++ stats.save("tests/c1.pstats", type="pstat")
++ fsc_pid = pstat_id(utils.find_stat_by_name(stats, "c"))
++
++ # merge saved stats and check pstats values are correct
++ import pstats
++ p = pstats.Stats(
++ 'tests/a1.pstats', 'tests/a2.pstats', 'tests/b1.pstats',
++ 'tests/c1.pstats'
++ )
++ p.strip_dirs()
++ # ct = ttot, tt = tsub
++ (cc, nc, tt, ct, callers) = p.stats[fsa_pid]
++ self.assertEqual(cc, nc, 2)
++ self.assertEqual(tt, 20)
++ self.assertEqual(ct, 24)
++ (cc, nc, tt, ct, callers) = p.stats[fsd_pid]
++ self.assertEqual(cc, nc, 3)
++ self.assertEqual(tt, 6)
++ self.assertEqual(ct, 6)
++ self.assertEqual(len(callers), 2)
++ (cc, nc, tt, ct) = callers[fsa_pid]
++ self.assertEqual(cc, nc, 2)
++ self.assertEqual(tt, 4)
++ self.assertEqual(ct, 4)
++ (cc, nc, tt, ct) = callers[fsb_pid]
++ self.assertEqual(cc, nc, 1)
++ self.assertEqual(tt, 2)
++ self.assertEqual(ct, 2)
++
++ def test_merge_stats(self):
++ _timings = {
++ "a_1": 15,
++ "b_1": 14,
++ "c_1": 12,
++ "d_1": 10,
++ "e_1": 9,
++ "f_1": 7,
++ "g_1": 6,
++ "h_1": 5,
++ "i_1": 1
++ }
++ _yappi._set_test_timings(_timings)
++
++ def a():
++ b()
++
++ def b():
++ c()
++
++ def c():
++ d()
++
++ def d():
++ e()
++
++ def e():
++ f()
++
++ def f():
++ g()
++
++ def g():
++ h()
++
++ def h():
++ i()
++
++ def i():
++ pass
++
++ yappi.start()
++ a()
++ a()
++ yappi.stop()
++ stats = yappi.get_func_stats()
++ self.assertRaises(
++ NotImplementedError, stats.save, "", "INVALID_SAVE_TYPE"
++ )
++ stats.save("tests/ystats2.ys")
++ yappi.clear_stats()
++ _yappi._set_test_timings(_timings)
++ yappi.start()
++ a()
++ stats = yappi.get_func_stats().add("tests/ystats2.ys")
++ fsa = utils.find_stat_by_name(stats, "a")
++ fsb = utils.find_stat_by_name(stats, "b")
++ fsc = utils.find_stat_by_name(stats, "c")
++ fsd = utils.find_stat_by_name(stats, "d")
++ fse = utils.find_stat_by_name(stats, "e")
++ fsf = utils.find_stat_by_name(stats, "f")
++ fsg = utils.find_stat_by_name(stats, "g")
++ fsh = utils.find_stat_by_name(stats, "h")
++ fsi = utils.find_stat_by_name(stats, "i")
++ self.assertEqual(fsa.ttot, 45)
++ self.assertEqual(fsa.ncall, 3)
++ self.assertEqual(fsa.nactualcall, 3)
++ self.assertEqual(fsa.tsub, 3)
++ self.assertEqual(fsa.children[fsb].ttot, fsb.ttot)
++ self.assertEqual(fsa.children[fsb].tsub, fsb.tsub)
++ self.assertEqual(fsb.children[fsc].ttot, fsc.ttot)
++ self.assertEqual(fsb.children[fsc].tsub, fsc.tsub)
++ self.assertEqual(fsc.tsub, 6)
++ self.assertEqual(fsc.children[fsd].ttot, fsd.ttot)
++ self.assertEqual(fsc.children[fsd].tsub, fsd.tsub)
++ self.assertEqual(fsd.children[fse].ttot, fse.ttot)
++ self.assertEqual(fsd.children[fse].tsub, fse.tsub)
++ self.assertEqual(fse.children[fsf].ttot, fsf.ttot)
++ self.assertEqual(fse.children[fsf].tsub, fsf.tsub)
++ self.assertEqual(fsf.children[fsg].ttot, fsg.ttot)
++ self.assertEqual(fsf.children[fsg].tsub, fsg.tsub)
++ self.assertEqual(fsg.ttot, 18)
++ self.assertEqual(fsg.tsub, 3)
++ self.assertEqual(fsg.children[fsh].ttot, fsh.ttot)
++ self.assertEqual(fsg.children[fsh].tsub, fsh.tsub)
++ self.assertEqual(fsh.ttot, 15)
++ self.assertEqual(fsh.tsub, 12)
++ self.assertEqual(fsh.tavg, 5)
++ self.assertEqual(fsh.children[fsi].ttot, fsi.ttot)
++ self.assertEqual(fsh.children[fsi].tsub, fsi.tsub)
++ #stats.debug_print()
++
++ def test_merge_multithreaded_stats(self):
++ import _yappi
++ timings = {"a_1": 2, "b_1": 1}
++ _yappi._set_test_timings(timings)
++
++ def a():
++ pass
++
++ def b():
++ pass
++
++ yappi.start()
++ t = threading.Thread(target=a)
++ t.start()
++ t.join()
++ t = threading.Thread(target=b)
++ t.start()
++ t.join()
++ yappi.get_func_stats().save("tests/ystats1.ys")
++ yappi.clear_stats()
++ _yappi._set_test_timings(timings)
++ self.assertEqual(len(yappi.get_func_stats()), 0)
++ self.assertEqual(len(yappi.get_thread_stats()), 1)
++ t = threading.Thread(target=a)
++ t.start()
++ t.join()
++
++ self.assertEqual(_yappi._get_start_flags()["profile_builtins"], 0)
++ self.assertEqual(_yappi._get_start_flags()["profile_multicontext"], 1)
++ yappi.get_func_stats().save("tests/ystats2.ys")
++
++ stats = yappi.YFuncStats([
++ "tests/ystats1.ys",
++ "tests/ystats2.ys",
++ ])
++ fsa = utils.find_stat_by_name(stats, "a")
++ fsb = utils.find_stat_by_name(stats, "b")
++ self.assertEqual(fsa.ncall, 2)
++ self.assertEqual(fsb.ncall, 1)
++ self.assertEqual(fsa.tsub, fsa.ttot, 4)
++ self.assertEqual(fsb.tsub, fsb.ttot, 1)
++
++ def test_merge_load_different_clock_types(self):
++ yappi.start(builtins=True)
++
++ def a():
++ b()
++
++ def b():
++ c()
++
++ def c():
++ pass
++
++ t = threading.Thread(target=a)
++ t.start()
++ t.join()
++ yappi.get_func_stats().sort("name", "asc").save("tests/ystats1.ys")
++ yappi.stop()
++ yappi.clear_stats()
++ yappi.start(builtins=False)
++ t = threading.Thread(target=a)
++ t.start()
++ t.join()
++ yappi.get_func_stats().save("tests/ystats2.ys")
++ yappi.stop()
++ self.assertRaises(_yappi.error, yappi.set_clock_type, "wall")
++ yappi.clear_stats()
++ yappi.set_clock_type("wall")
++ yappi.start()
++ t = threading.Thread(target=a)
++ t.start()
++ t.join()
++ yappi.get_func_stats().save("tests/ystats3.ys")
++ self.assertRaises(
++ yappi.YappiError,
++ yappi.YFuncStats().add("tests/ystats1.ys").add, "tests/ystats3.ys"
++ )
++ stats = yappi.YFuncStats(["tests/ystats1.ys",
++ "tests/ystats2.ys"]).sort("name")
++ fsa = utils.find_stat_by_name(stats, "a")
++ fsb = utils.find_stat_by_name(stats, "b")
++ fsc = utils.find_stat_by_name(stats, "c")
++ self.assertEqual(fsa.ncall, 2)
++ self.assertEqual(fsa.ncall, fsb.ncall, fsc.ncall)
++
++ def test_merge_aabab_aabbc(self):
++ _timings = {
++ "a_1": 15,
++ "a_2": 14,
++ "b_1": 12,
++ "a_3": 10,
++ "b_2": 9,
++ "c_1": 4
++ }
++ _yappi._set_test_timings(_timings)
++
++ def a():
++ if self._ncall == 1:
++ self._ncall += 1
++ a()
++ elif self._ncall == 5:
++ self._ncall += 1
++ a()
++ else:
++ b()
++
++ def b():
++ if self._ncall == 2:
++ self._ncall += 1
++ a()
++ elif self._ncall == 6:
++ self._ncall += 1
++ b()
++ elif self._ncall == 7:
++ c()
++ else:
++ return
++
++ def c():
++ pass
++
++ self._ncall = 1
++ stats = utils.run_and_get_func_stats(a, )
++ stats.save("tests/ystats1.ys")
++ yappi.clear_stats()
++ _yappi._set_test_timings(_timings)
++ #stats.print_all()
++
++ self._ncall = 5
++ stats = utils.run_and_get_func_stats(a, )
++ stats.save("tests/ystats2.ys")
++
++ #stats.print_all()
++
++ def a(): # same name but another function(code object)
++ pass
++
++ yappi.start()
++ a()
++ stats = yappi.get_func_stats().add(
++ ["tests/ystats1.ys", "tests/ystats2.ys"]
++ )
++ #stats.print_all()
++ self.assertEqual(len(stats), 4)
++
++ fsa = None
++ for stat in stats:
++ if stat.name == "a" and stat.ttot == 45:
++ fsa = stat
++ break
++ self.assertTrue(fsa is not None)
++
++ self.assertEqual(fsa.ncall, 7)
++ self.assertEqual(fsa.nactualcall, 3)
++ self.assertEqual(fsa.ttot, 45)
++ self.assertEqual(fsa.tsub, 10)
++ fsb = utils.find_stat_by_name(stats, "b")
++ fsc = utils.find_stat_by_name(stats, "c")
++ self.assertEqual(fsb.ncall, 6)
++ self.assertEqual(fsb.nactualcall, 3)
++ self.assertEqual(fsb.ttot, 36)
++ self.assertEqual(fsb.tsub, 27)
++ self.assertEqual(fsb.tavg, 6)
++ self.assertEqual(fsc.ttot, 8)
++ self.assertEqual(fsc.tsub, 8)
++ self.assertEqual(fsc.tavg, 4)
++ self.assertEqual(fsc.nactualcall, fsc.ncall, 2)
++
++
++class MultithreadedScenarios(utils.YappiUnitTestCase):
++
++ def test_issue_32(self):
++ '''
++ Start yappi from different thread and we get Internal Error(15) as
++ the current_ctx_id() called while enumerating the threads in start()
++ and as it does not swap to the enumerated ThreadState* the THreadState_GetDict()
++ returns wrong object and thus sets an invalid id for the _ctx structure.
++
++ When this issue happens multiple Threads have same tid as the internal ts_ptr
++ will be same for different contexts. So, let's see if that happens
++ '''
++
++ def foo():
++ time.sleep(0.2)
++
++ def bar():
++ time.sleep(0.1)
++
++ def thread_func():
++ yappi.set_clock_type("wall")
++ yappi.start()
++
++ bar()
++
++ t = threading.Thread(target=thread_func)
++ t.start()
++ t.join()
++
++ foo()
++
++ yappi.stop()
++
++ thread_ids = set()
++ for tstat in yappi.get_thread_stats():
++ self.assertTrue(tstat.tid not in thread_ids)
++ thread_ids.add(tstat.tid)
++
++ def test_subsequent_profile(self):
++ WORKER_COUNT = 5
++
++ def a():
++ pass
++
++ def b():
++ pass
++
++ def c():
++ pass
++
++ _timings = {
++ "a_1": 3,
++ "b_1": 2,
++ "c_1": 1,
++ }
++
++ yappi.start()
++
++ def g():
++ pass
++
++ g()
++ yappi.stop()
++ yappi.clear_stats()
++ _yappi._set_test_timings(_timings)
++ yappi.start()
++
++ _dummy = []
++ for i in range(WORKER_COUNT):
++ t = threading.Thread(target=a)
++ t.start()
++ t.join()
++ for i in range(WORKER_COUNT):
++ t = threading.Thread(target=b)
++ t.start()
++ _dummy.append(t)
++ t.join()
++ for i in range(WORKER_COUNT):
++ t = threading.Thread(target=a)
++ t.start()
++ t.join()
++ for i in range(WORKER_COUNT):
++ t = threading.Thread(target=c)
++ t.start()
++ t.join()
++ yappi.stop()
++ yappi.start()
++
++ def f():
++ pass
++
++ f()
++ stats = yappi.get_func_stats()
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ fsc = utils.find_stat_by_name(stats, 'c')
++ self.assertEqual(fsa.ncall, 10)
++ self.assertEqual(fsb.ncall, 5)
++ self.assertEqual(fsc.ncall, 5)
++ self.assertEqual(fsa.ttot, fsa.tsub, 30)
++ self.assertEqual(fsb.ttot, fsb.tsub, 10)
++ self.assertEqual(fsc.ttot, fsc.tsub, 5)
++
++ # MACOSx optimizes by only creating one worker thread
++ self.assertTrue(len(yappi.get_thread_stats()) >= 2)
++
++ def test_basic(self):
++ yappi.set_clock_type('wall')
++
++ def dummy():
++ pass
++
++ def a():
++ time.sleep(0.2)
++
++ class Worker1(threading.Thread):
++
++ def a(self):
++ time.sleep(0.3)
++
++ def run(self):
++ self.a()
++
++ yappi.start(builtins=False, profile_threads=True)
++
++ c = Worker1()
++ c.start()
++ c.join()
++ a()
++ stats = yappi.get_func_stats()
++ fsa1 = utils.find_stat_by_name(stats, 'Worker1.a')
++ fsa2 = utils.find_stat_by_name(stats, 'a')
++ self.assertTrue(fsa1 is not None)
++ self.assertTrue(fsa2 is not None)
++ self.assertTrue(fsa1.ttot > 0.2)
++ self.assertTrue(fsa2.ttot > 0.1)
++ tstats = yappi.get_thread_stats()
++ self.assertEqual(len(tstats), 2)
++ tsa = utils.find_stat_by_name(tstats, 'Worker1')
++ tsm = utils.find_stat_by_name(tstats, '_MainThread')
++ dummy() # call dummy to force ctx name to be retrieved again.
++ self.assertTrue(tsa is not None)
++ # TODO: I put dummy() to fix below, remove the comments after a while.
++ self.assertTrue( # FIX: I see this fails sometimes?
++ tsm is not None,
++ 'Could not find "_MainThread". Found: %s' % (', '.join(utils.get_stat_names(tstats))))
++
++ def test_ctx_stats(self):
++ from threading import Thread
++ DUMMY_WORKER_COUNT = 5
++ yappi.start()
++
++ class DummyThread(Thread):
++ pass
++
++ def dummy():
++ pass
++
++ def dummy_worker():
++ pass
++
++ for i in range(DUMMY_WORKER_COUNT):
++ t = DummyThread(target=dummy_worker)
++ t.start()
++ t.join()
++ yappi.stop()
++ stats = yappi.get_thread_stats()
++ tsa = utils.find_stat_by_name(stats, "DummyThread")
++ self.assertTrue(tsa is not None)
++ yappi.clear_stats()
++ time.sleep(1.0)
++ _timings = {
++ "a_1": 6,
++ "b_1": 5,
++ "c_1": 3,
++ "d_1": 1,
++ "a_2": 4,
++ "b_2": 3,
++ "c_2": 2,
++ "d_2": 1
++ }
++ _yappi._set_test_timings(_timings)
++
++ class Thread1(Thread):
++ pass
++
++ class Thread2(Thread):
++ pass
++
++ def a():
++ b()
++
++ def b():
++ c()
++
++ def c():
++ d()
++
++ def d():
++ time.sleep(0.6)
++
++ yappi.set_clock_type("wall")
++ yappi.start()
++ t1 = Thread1(target=a)
++ t1.start()
++ t2 = Thread2(target=a)
++ t2.start()
++ t1.join()
++ t2.join()
++ stats = yappi.get_thread_stats()
++
++ # the fist clear_stats clears the context table?
++ tsa = utils.find_stat_by_name(stats, "DummyThread")
++ self.assertTrue(tsa is None)
++
++ tst1 = utils.find_stat_by_name(stats, "Thread1")
++ tst2 = utils.find_stat_by_name(stats, "Thread2")
++ tsmain = utils.find_stat_by_name(stats, "_MainThread")
++ dummy() # call dummy to force ctx name to be retrieved again.
++ self.assertTrue(len(stats) == 3)
++ self.assertTrue(tst1 is not None)
++ self.assertTrue(tst2 is not None)
++ # TODO: I put dummy() to fix below, remove the comments after a while.
++ self.assertTrue( # FIX: I see this fails sometimes
++ tsmain is not None,
++ 'Could not find "_MainThread". Found: %s' % (', '.join(utils.get_stat_names(stats))))
++ self.assertTrue(1.0 > tst2.ttot >= 0.5)
++ self.assertTrue(1.0 > tst1.ttot >= 0.5)
++
++ # test sorting of the ctx stats
++ stats = stats.sort("totaltime", "desc")
++ prev_stat = None
++ for stat in stats:
++ if prev_stat:
++ self.assertTrue(prev_stat.ttot >= stat.ttot)
++ prev_stat = stat
++ stats = stats.sort("totaltime", "asc")
++ prev_stat = None
++ for stat in stats:
++ if prev_stat:
++ self.assertTrue(prev_stat.ttot <= stat.ttot)
++ prev_stat = stat
++ stats = stats.sort("schedcount", "desc")
++ prev_stat = None
++ for stat in stats:
++ if prev_stat:
++ self.assertTrue(prev_stat.sched_count >= stat.sched_count)
++ prev_stat = stat
++ stats = stats.sort("name", "desc")
++ prev_stat = None
++ for stat in stats:
++ if prev_stat:
++ self.assertTrue(prev_stat.name.lower() >= stat.name.lower())
++ prev_stat = stat
++ self.assertRaises(
++ yappi.YappiError, stats.sort, "invalid_thread_sorttype_arg"
++ )
++ self.assertRaises(
++ yappi.YappiError, stats.sort, "invalid_thread_sortorder_arg"
++ )
++
++ def test_ctx_stats_cpu(self):
++
++ def get_thread_name():
++ try:
++ return threading.current_thread().name
++ except AttributeError:
++ return "Anonymous"
++
++ def burn_cpu(sec):
++ t0 = yappi.get_clock_time()
++ elapsed = 0
++ while (elapsed < sec):
++ for _ in range(1000):
++ pass
++ elapsed = yappi.get_clock_time() - t0
++
++ def test():
++
++ ts = []
++ for i in (0.01, 0.05, 0.1):
++ t = threading.Thread(target=burn_cpu, args=(i, ))
++ t.name = "burn_cpu-%s" % str(i)
++ t.start()
++ ts.append(t)
++ for t in ts:
++ t.join()
++
++ yappi.set_clock_type("cpu")
++ yappi.set_context_name_callback(get_thread_name)
++
++ yappi.start()
++
++ test()
++
++ yappi.stop()
++
++ tstats = yappi.get_thread_stats()
++ r1 = '''
++ burn_cpu-0.1 3 123145356058624 0.100105 8
++ burn_cpu-0.05 2 123145361313792 0.050149 8
++ burn_cpu-0.01 1 123145356058624 0.010127 2
++ MainThread 0 4321620864 0.001632 6
++ '''
++ self.assert_ctx_stats_almost_equal(r1, tstats)
++
++ def test_producer_consumer_with_queues(self):
++ # we currently just stress yappi, no functionality test is done here.
++ yappi.start()
++ if utils.is_py3x():
++ from queue import Queue
++ else:
++ from Queue import Queue
++ from threading import Thread
++ WORKER_THREAD_COUNT = 50
++ WORK_ITEM_COUNT = 2000
++
++ def worker():
++ while True:
++ item = q.get()
++ # do the work with item
++ q.task_done()
++
++ q = Queue()
++ for i in range(WORKER_THREAD_COUNT):
++ t = Thread(target=worker)
++ t.daemon = True
++ t.start()
++
++ for item in range(WORK_ITEM_COUNT):
++ q.put(item)
++ q.join() # block until all tasks are done
++ #yappi.get_func_stats().sort("callcount").print_all()
++ yappi.stop()
++
++ def test_temporary_lock_waiting(self):
++ yappi.start()
++ _lock = threading.Lock()
++
++ def worker():
++ _lock.acquire()
++ try:
++ time.sleep(1.0)
++ finally:
++ _lock.release()
++
++ t1 = threading.Thread(target=worker)
++ t2 = threading.Thread(target=worker)
++ t1.start()
++ t2.start()
++ t1.join()
++ t2.join()
++ #yappi.get_func_stats().sort("callcount").print_all()
++ yappi.stop()
++
++ @unittest.skipIf(os.name != "posix", "requires Posix compliant OS")
++ def test_signals_with_blocking_calls(self):
++ import signal, os, time
++
++ # just to verify if signal is handled correctly and stats/yappi are not corrupted.
++ def handler(signum, frame):
++ raise Exception("Signal handler executed!")
++
++ yappi.start()
++ signal.signal(signal.SIGALRM, handler)
++ signal.alarm(1)
++ self.assertRaises(Exception, time.sleep, 2)
++ stats = yappi.get_func_stats()
++ fsh = utils.find_stat_by_name(stats, "handler")
++ self.assertTrue(fsh is not None)
++
++ @unittest.skipIf(not sys.version_info >= (3, 2), "requires Python 3.2")
++ def test_concurrent_futures(self):
++ yappi.start()
++ from concurrent.futures import ThreadPoolExecutor
++ with ThreadPoolExecutor(max_workers=5) as executor:
++ f = executor.submit(pow, 5, 2)
++ self.assertEqual(f.result(), 25)
++ time.sleep(1.0)
++ yappi.stop()
++
++ @unittest.skipIf(not sys.version_info >= (3, 2), "requires Python 3.2")
++ def test_barrier(self):
++ yappi.start()
++ b = threading.Barrier(2, timeout=1)
++
++ def worker():
++ try:
++ b.wait()
++ except threading.BrokenBarrierError:
++ pass
++ except Exception:
++ raise Exception("BrokenBarrierError not raised")
++
++ t1 = threading.Thread(target=worker)
++ t1.start()
++ #b.wait()
++ t1.join()
++ yappi.stop()
++
++
++class NonRecursiveFunctions(utils.YappiUnitTestCase):
++
++ def test_abcd(self):
++ _timings = {"a_1": 6, "b_1": 5, "c_1": 3, "d_1": 1}
++ _yappi._set_test_timings(_timings)
++
++ def a():
++ b()
++
++ def b():
++ c()
++
++ def c():
++ d()
++
++ def d():
++ pass
++
++ stats = utils.run_and_get_func_stats(a)
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ fsc = utils.find_stat_by_name(stats, 'c')
++ fsd = utils.find_stat_by_name(stats, 'd')
++ cfsab = fsa.children[fsb]
++ cfsbc = fsb.children[fsc]
++ cfscd = fsc.children[fsd]
++
++ self.assertEqual(fsa.ttot, 6)
++ self.assertEqual(fsa.tsub, 1)
++ self.assertEqual(fsb.ttot, 5)
++ self.assertEqual(fsb.tsub, 2)
++ self.assertEqual(fsc.ttot, 3)
++ self.assertEqual(fsc.tsub, 2)
++ self.assertEqual(fsd.ttot, 1)
++ self.assertEqual(fsd.tsub, 1)
++ self.assertEqual(cfsab.ttot, 5)
++ self.assertEqual(cfsab.tsub, 2)
++ self.assertEqual(cfsbc.ttot, 3)
++ self.assertEqual(cfsbc.tsub, 2)
++ self.assertEqual(cfscd.ttot, 1)
++ self.assertEqual(cfscd.tsub, 1)
++
++ def test_stop_in_middle(self):
++ _timings = {"a_1": 6, "b_1": 4}
++ _yappi._set_test_timings(_timings)
++
++ def a():
++ b()
++ yappi.stop()
++
++ def b():
++ time.sleep(0.2)
++
++ yappi.start()
++ a()
++ stats = yappi.get_func_stats()
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++
++ self.assertEqual(fsa.ncall, 1)
++ self.assertEqual(fsa.nactualcall, 0)
++ self.assertEqual(fsa.ttot, 0) # no call_leave called
++ self.assertEqual(fsa.tsub, 0) # no call_leave called
++ self.assertEqual(fsb.ttot, 4)
++
++
++class RecursiveFunctions(utils.YappiUnitTestCase):
++
++ def test_fibonacci(self):
++
++ def fib(n):
++ if n > 1:
++ return fib(n - 1) + fib(n - 2)
++ else:
++ return n
++
++ stats = utils.run_and_get_func_stats(fib, 22)
++ fs = utils.find_stat_by_name(stats, 'fib')
++ self.assertEqual(fs.ncall, 57313)
++ self.assertEqual(fs.ttot, fs.tsub)
++
++ def test_abcadc(self):
++ _timings = {
++ "a_1": 20,
++ "b_1": 19,
++ "c_1": 17,
++ "a_2": 13,
++ "d_1": 12,
++ "c_2": 10,
++ "a_3": 5
++ }
++ _yappi._set_test_timings(_timings)
++
++ def a(n):
++ if n == 3:
++ return
++ if n == 1 + 1:
++ d(n)
++ else:
++ b(n)
++
++ def b(n):
++ c(n)
++
++ def c(n):
++ a(n + 1)
++
++ def d(n):
++ c(n)
++
++ stats = utils.run_and_get_func_stats(a, 1)
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ fsc = utils.find_stat_by_name(stats, 'c')
++ fsd = utils.find_stat_by_name(stats, 'd')
++ self.assertEqual(fsa.ncall, 3)
++ self.assertEqual(fsa.nactualcall, 1)
++ self.assertEqual(fsa.ttot, 20)
++ self.assertEqual(fsa.tsub, 7)
++ self.assertEqual(fsb.ttot, 19)
++ self.assertEqual(fsb.tsub, 2)
++ self.assertEqual(fsc.ttot, 17)
++ self.assertEqual(fsc.tsub, 9)
++ self.assertEqual(fsd.ttot, 12)
++ self.assertEqual(fsd.tsub, 2)
++ cfsca = fsc.children[fsa]
++ self.assertEqual(cfsca.nactualcall, 0)
++ self.assertEqual(cfsca.ncall, 2)
++ self.assertEqual(cfsca.ttot, 13)
++ self.assertEqual(cfsca.tsub, 6)
++
++ def test_aaaa(self):
++ _timings = {"d_1": 9, "d_2": 7, "d_3": 3, "d_4": 2}
++ _yappi._set_test_timings(_timings)
++
++ def d(n):
++ if n == 3:
++ return
++ d(n + 1)
++
++ stats = utils.run_and_get_func_stats(d, 0)
++ fsd = utils.find_stat_by_name(stats, 'd')
++ self.assertEqual(fsd.ncall, 4)
++ self.assertEqual(fsd.nactualcall, 1)
++ self.assertEqual(fsd.ttot, 9)
++ self.assertEqual(fsd.tsub, 9)
++ cfsdd = fsd.children[fsd]
++ self.assertEqual(cfsdd.ttot, 7)
++ self.assertEqual(cfsdd.tsub, 7)
++ self.assertEqual(cfsdd.ncall, 3)
++ self.assertEqual(cfsdd.nactualcall, 0)
++
++ def test_abcabc(self):
++ _timings = {
++ "a_1": 20,
++ "b_1": 19,
++ "c_1": 17,
++ "a_2": 13,
++ "b_2": 11,
++ "c_2": 9,
++ "a_3": 6
++ }
++ _yappi._set_test_timings(_timings)
++
++ def a(n):
++ if n == 3:
++ return
++ else:
++ b(n)
++
++ def b(n):
++ c(n)
++
++ def c(n):
++ a(n + 1)
++
++ stats = utils.run_and_get_func_stats(a, 1)
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ fsc = utils.find_stat_by_name(stats, 'c')
++ self.assertEqual(fsa.ncall, 3)
++ self.assertEqual(fsa.nactualcall, 1)
++ self.assertEqual(fsa.ttot, 20)
++ self.assertEqual(fsa.tsub, 9)
++ self.assertEqual(fsb.ttot, 19)
++ self.assertEqual(fsb.tsub, 4)
++ self.assertEqual(fsc.ttot, 17)
++ self.assertEqual(fsc.tsub, 7)
++ cfsab = fsa.children[fsb]
++ cfsbc = fsb.children[fsc]
++ cfsca = fsc.children[fsa]
++ self.assertEqual(cfsab.ttot, 19)
++ self.assertEqual(cfsab.tsub, 4)
++ self.assertEqual(cfsbc.ttot, 17)
++ self.assertEqual(cfsbc.tsub, 7)
++ self.assertEqual(cfsca.ttot, 13)
++ self.assertEqual(cfsca.tsub, 8)
++
++ def test_abcbca(self):
++ _timings = {"a_1": 10, "b_1": 9, "c_1": 7, "b_2": 4, "c_2": 2, "a_2": 1}
++ _yappi._set_test_timings(_timings)
++ self._ncall = 1
++
++ def a():
++ if self._ncall == 1:
++ b()
++ else:
++ return
++
++ def b():
++ c()
++
++ def c():
++ if self._ncall == 1:
++ self._ncall += 1
++ b()
++ else:
++ a()
++
++ stats = utils.run_and_get_func_stats(a)
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ fsc = utils.find_stat_by_name(stats, 'c')
++ cfsab = fsa.children[fsb]
++ cfsbc = fsb.children[fsc]
++ cfsca = fsc.children[fsa]
++ self.assertEqual(fsa.ttot, 10)
++ self.assertEqual(fsa.tsub, 2)
++ self.assertEqual(fsb.ttot, 9)
++ self.assertEqual(fsb.tsub, 4)
++ self.assertEqual(fsc.ttot, 7)
++ self.assertEqual(fsc.tsub, 4)
++ self.assertEqual(cfsab.ttot, 9)
++ self.assertEqual(cfsab.tsub, 2)
++ self.assertEqual(cfsbc.ttot, 7)
++ self.assertEqual(cfsbc.tsub, 4)
++ self.assertEqual(cfsca.ttot, 1)
++ self.assertEqual(cfsca.tsub, 1)
++ self.assertEqual(cfsca.ncall, 1)
++ self.assertEqual(cfsca.nactualcall, 0)
++
++ def test_aabccb(self):
++ _timings = {
++ "a_1": 13,
++ "a_2": 11,
++ "b_1": 9,
++ "c_1": 5,
++ "c_2": 3,
++ "b_2": 1
++ }
++ _yappi._set_test_timings(_timings)
++ self._ncall = 1
++
++ def a():
++ if self._ncall == 1:
++ self._ncall += 1
++ a()
++ else:
++ b()
++
++ def b():
++ if self._ncall == 3:
++ return
++ else:
++ c()
++
++ def c():
++ if self._ncall == 2:
++ self._ncall += 1
++ c()
++ else:
++ b()
++
++ stats = utils.run_and_get_func_stats(a)
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ fsc = utils.find_stat_by_name(stats, 'c')
++ cfsaa = fsa.children[fsa.index]
++ cfsab = fsa.children[fsb]
++ cfsbc = fsb.children[fsc.full_name]
++ cfscc = fsc.children[fsc]
++ cfscb = fsc.children[fsb]
++ self.assertEqual(fsb.ttot, 9)
++ self.assertEqual(fsb.tsub, 5)
++ self.assertEqual(cfsbc.ttot, 5)
++ self.assertEqual(cfsbc.tsub, 2)
++ self.assertEqual(fsa.ttot, 13)
++ self.assertEqual(fsa.tsub, 4)
++ self.assertEqual(cfsab.ttot, 9)
++ self.assertEqual(cfsab.tsub, 4)
++ self.assertEqual(cfsaa.ttot, 11)
++ self.assertEqual(cfsaa.tsub, 2)
++ self.assertEqual(fsc.ttot, 5)
++ self.assertEqual(fsc.tsub, 4)
++
++ def test_abaa(self):
++ _timings = {"a_1": 13, "b_1": 10, "a_2": 9, "a_3": 5}
++ _yappi._set_test_timings(_timings)
++
++ self._ncall = 1
++
++ def a():
++ if self._ncall == 1:
++ b()
++ elif self._ncall == 2:
++ self._ncall += 1
++ a()
++ else:
++ return
++
++ def b():
++ self._ncall += 1
++ a()
++
++ stats = utils.run_and_get_func_stats(a)
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ cfsaa = fsa.children[fsa]
++ cfsba = fsb.children[fsa]
++ self.assertEqual(fsb.ttot, 10)
++ self.assertEqual(fsb.tsub, 1)
++ self.assertEqual(fsa.ttot, 13)
++ self.assertEqual(fsa.tsub, 12)
++ self.assertEqual(cfsaa.ttot, 5)
++ self.assertEqual(cfsaa.tsub, 5)
++ self.assertEqual(cfsba.ttot, 9)
++ self.assertEqual(cfsba.tsub, 4)
++
++ def test_aabb(self):
++ _timings = {"a_1": 13, "a_2": 10, "b_1": 9, "b_2": 5}
++ _yappi._set_test_timings(_timings)
++
++ self._ncall = 1
++
++ def a():
++ if self._ncall == 1:
++ self._ncall += 1
++ a()
++ elif self._ncall == 2:
++ b()
++ else:
++ return
++
++ def b():
++ if self._ncall == 2:
++ self._ncall += 1
++ b()
++ else:
++ return
++
++ stats = utils.run_and_get_func_stats(a)
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ cfsaa = fsa.children[fsa]
++ cfsab = fsa.children[fsb]
++ cfsbb = fsb.children[fsb]
++ self.assertEqual(fsa.ttot, 13)
++ self.assertEqual(fsa.tsub, 4)
++ self.assertEqual(fsb.ttot, 9)
++ self.assertEqual(fsb.tsub, 9)
++ self.assertEqual(cfsaa.ttot, 10)
++ self.assertEqual(cfsaa.tsub, 1)
++ self.assertEqual(cfsab.ttot, 9)
++ self.assertEqual(cfsab.tsub, 4)
++ self.assertEqual(cfsbb.ttot, 5)
++ self.assertEqual(cfsbb.tsub, 5)
++
++ def test_abbb(self):
++ _timings = {"a_1": 13, "b_1": 10, "b_2": 6, "b_3": 1}
++ _yappi._set_test_timings(_timings)
++
++ self._ncall = 1
++
++ def a():
++ if self._ncall == 1:
++ b()
++
++ def b():
++ if self._ncall == 3:
++ return
++ self._ncall += 1
++ b()
++
++ stats = utils.run_and_get_func_stats(a)
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ cfsab = fsa.children[fsb]
++ cfsbb = fsb.children[fsb]
++ self.assertEqual(fsa.ttot, 13)
++ self.assertEqual(fsa.tsub, 3)
++ self.assertEqual(fsb.ttot, 10)
++ self.assertEqual(fsb.tsub, 10)
++ self.assertEqual(fsb.ncall, 3)
++ self.assertEqual(fsb.nactualcall, 1)
++ self.assertEqual(cfsab.ttot, 10)
++ self.assertEqual(cfsab.tsub, 4)
++ self.assertEqual(cfsbb.ttot, 6)
++ self.assertEqual(cfsbb.tsub, 6)
++ self.assertEqual(cfsbb.nactualcall, 0)
++ self.assertEqual(cfsbb.ncall, 2)
++
++ def test_aaab(self):
++ _timings = {"a_1": 13, "a_2": 10, "a_3": 6, "b_1": 1}
++ _yappi._set_test_timings(_timings)
++
++ self._ncall = 1
++
++ def a():
++ if self._ncall == 3:
++ b()
++ return
++ self._ncall += 1
++ a()
++
++ def b():
++ return
++
++ stats = utils.run_and_get_func_stats(a)
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ cfsaa = fsa.children[fsa]
++ cfsab = fsa.children[fsb]
++ self.assertEqual(fsa.ttot, 13)
++ self.assertEqual(fsa.tsub, 12)
++ self.assertEqual(fsb.ttot, 1)
++ self.assertEqual(fsb.tsub, 1)
++ self.assertEqual(cfsaa.ttot, 10)
++ self.assertEqual(cfsaa.tsub, 9)
++ self.assertEqual(cfsab.ttot, 1)
++ self.assertEqual(cfsab.tsub, 1)
++
++ def test_abab(self):
++ _timings = {"a_1": 13, "b_1": 10, "a_2": 6, "b_2": 1}
++ _yappi._set_test_timings(_timings)
++
++ self._ncall = 1
++
++ def a():
++ b()
++
++ def b():
++ if self._ncall == 2:
++ return
++ self._ncall += 1
++ a()
++
++ stats = utils.run_and_get_func_stats(a)
++ fsa = utils.find_stat_by_name(stats, 'a')
++ fsb = utils.find_stat_by_name(stats, 'b')
++ cfsab = fsa.children[fsb]
++ cfsba = fsb.children[fsa]
++ self.assertEqual(fsa.ttot, 13)
++ self.assertEqual(fsa.tsub, 8)
++ self.assertEqual(fsb.ttot, 10)
++ self.assertEqual(fsb.tsub, 5)
++ self.assertEqual(cfsab.ttot, 10)
++ self.assertEqual(cfsab.tsub, 5)
++ self.assertEqual(cfsab.ncall, 2)
++ self.assertEqual(cfsab.nactualcall, 1)
++ self.assertEqual(cfsba.ttot, 6)
++ self.assertEqual(cfsba.tsub, 5)
++
++
++if __name__ == '__main__':
++ # import sys;sys.argv = ['', 'BasicUsage.test_run_as_script']
++ # import sys;sys.argv = ['', 'MultithreadedScenarios.test_subsequent_profile']
++ unittest.main()
+--- a/tests/test_gevent.py
++++ b/tests/test_gevent.py
+@@ -4,7 +4,7 @@ import yappi
+ import gevent
+ from gevent.event import Event
+ import threading
+-from utils import (
++from .utils import (
+ YappiUnitTestCase, find_stat_by_name, burn_cpu, burn_io,
+ burn_io_gevent
+ )
+--- a/tests/test_hooks.py
++++ b/tests/test_hooks.py
+@@ -5,7 +5,7 @@ import unittest
+ import time
+
+ import yappi
+-import utils
++import tests.utils as utils
+
+
+ def a():
+--- a/tests/test_tags.py
++++ b/tests/test_tags.py
+@@ -2,7 +2,7 @@ import unittest
+ import yappi
+ import threading
+ import time
+-from utils import YappiUnitTestCase, find_stat_by_name, burn_cpu, burn_io
++from .utils import YappiUnitTestCase, find_stat_by_name, burn_cpu, burn_io
+
+
+ class MultiThreadTests(YappiUnitTestCase):
diff --git a/meta-python/recipes-devtools/python/python3-yappi_1.3.2.bb b/meta-python/recipes-devtools/python/python3-yappi_1.3.2.bb
index 7c3f0fd4b..8a1aca21f 100644
--- a/meta-python/recipes-devtools/python/python3-yappi_1.3.2.bb
+++ b/meta-python/recipes-devtools/python/python3-yappi_1.3.2.bb
@@ -8,6 +8,7 @@ SRC_URI[sha256sum] = "a51d3e6e5563cc74b5bb82ed6e7bd44a9c1a7eae3d97e4d52e9465edb3
SRC_URI += " \
file://run-ptest \
+ file://0001-Fix-imports-for-ptests.patch \
"
inherit pypi setuptools3 ptest
@@ -19,9 +20,11 @@ RDEPENDS_${PN} += "\
"
RDEPENDS_${PN}-ptest += " \
- ${PYTHON_PN}-pytest \
+ ${PYTHON_PN}-gevent \
${PYTHON_PN}-multiprocessing \
+ ${PYTHON_PN}-pytest \
${PYTHON_PN}-profile \
+ ${PYTHON_PN}-zopeinterface \
"
do_install_ptest() {
diff --git a/meta-python/recipes-devtools/python/python3-yarl/0001-Drop-tests-for-semicolon-as-a-separator.patch b/meta-python/recipes-devtools/python/python3-yarl/0001-Drop-tests-for-semicolon-as-a-separator.patch
new file mode 100644
index 000000000..1a9d5d02d
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-yarl/0001-Drop-tests-for-semicolon-as-a-separator.patch
@@ -0,0 +1,45 @@
+From 47eabc562a8883d757e3cff487c6c6e98def5a21 Mon Sep 17 00:00:00 2001
+From: Andrew Svetlov <andrew.svetlov@gmail.com>
+Date: Fri, 28 May 2021 12:42:17 +0300
+Subject: [PATCH] Drop tests for semicolon as a separator
+
+yarl 1.6.3 ptests check the use of semicolons as separators in URLs,
+which are no longer valid by default in newer versions of Python. This
+patch is in python3-yarl master, but there is no release with it yet, so
+backport it until there is a new release.
+
+For more info, see:
+https://bugs.python.org/issue42967
+https://github.com/aio-libs/yarl/issues/563
+
+Upstream-Status: Backport
+(https://github.com/aio-libs/yarl/commit/47eabc562a8883d757e3cff487c6c6e98def5a21)
+
+Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
+
+---
+ tests/test_url_query.py | 11 -----------
+ 1 file changed, 11 deletions(-)
+
+diff --git a/tests/test_url_query.py b/tests/test_url_query.py
+index d2ca640..07f858b 100644
+--- a/tests/test_url_query.py
++++ b/tests/test_url_query.py
+@@ -60,14 +60,3 @@ def test_ampersand_as_value():
+ u = URL("http://127.0.0.1/?a=1%26b=2")
+ assert len(u.query) == 1
+ assert u.query["a"] == "1&b=2"
+-
+-
+-def test_semicolon_as_separator():
+- u = URL("http://127.0.0.1/?a=1;b=2")
+- assert len(u.query) == 2
+-
+-
+-def test_semicolon_as_value():
+- u = URL("http://127.0.0.1/?a=1%3Bb=2")
+- assert len(u.query) == 1
+- assert u.query["a"] == "1;b=2"
+--
+2.31.1
+
diff --git a/meta-python/recipes-devtools/python/python3-yarl_1.6.3.bb b/meta-python/recipes-devtools/python/python3-yarl_1.6.3.bb
index 01682a46d..e0e262646 100644
--- a/meta-python/recipes-devtools/python/python3-yarl_1.6.3.bb
+++ b/meta-python/recipes-devtools/python/python3-yarl_1.6.3.bb
@@ -7,6 +7,7 @@ SRC_URI[sha256sum] = "8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b4
SRC_URI += " \
file://run-ptest \
+ file://0001-Drop-tests-for-semicolon-as-a-separator.patch \
"
PYPI_PACKAGE = "yarl"
diff --git a/meta-python/recipes-devtools/python/python3-zopeinterface_5.3.0.bb b/meta-python/recipes-devtools/python/python3-zopeinterface_5.4.0.bb
index 5da5a88b9..305e42a61 100644
--- a/meta-python/recipes-devtools/python/python3-zopeinterface_5.3.0.bb
+++ b/meta-python/recipes-devtools/python/python3-zopeinterface_5.4.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e54fd776274c1b7423
PYPI_PACKAGE = "zope.interface"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "b18a855f8504743e0a2d8b75d008c7720d44e4c76687e13f959e35d9a13eb397"
+SRC_URI[sha256sum] = "5dba5f530fec3f0988d83b78cc591b58c0b6eb8431a85edd1569a0539a8a5a0e"
PACKAGES =. "${PN}-test "