diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.12.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.13.0.bb
similarity index 67%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.12.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.13.0.bb
index 2ecf10c..2ebd358 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.12.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.13.0.bb
@@ -4,8 +4,8 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
-SRC_URI[md5sum] = "cfc383e2c647698666a7c5d8ef83a675"
-SRC_URI[sha256sum] = "b44f68984a5ceb2607d135a615999b93924c771238a63920d17d3387b0d229d5"
+SRC_URI[md5sum] = "afb3ffb4b59d53575e8eb073c3a52803"
+SRC_URI[sha256sum] = "6953272383486044699fd0e9f00aad167a27e08ce19aae66c6c4b10e7e767793"
 
 PYPI_PACKAGE = "absl-py"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohue_2.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohue_2.5.1.bb
similarity index 76%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-aiohue_2.5.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-aiohue_2.5.1.bb
index a29625a..4a203cc 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohue_2.5.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohue_2.5.1.bb
@@ -4,7 +4,7 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=dab31a1d28183826937f4b152143a33f"
 
-SRC_URI[sha256sum] = "e2ae49be45261283a899cc1b95786f07fe5076be9a311d250dbe2de1b8c38f0f"
+SRC_URI[sha256sum] = "3ee8e857b07364516f8b9f0e5c52d4cd775036f3ace37c2769de1e8579f4dc07"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aspectlib/0001-Remove-tornado-6-test-constraint.-Ref-15.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-aspectlib/0001-Remove-tornado-6-test-constraint.-Ref-15.patch
new file mode 100644
index 0000000..174f088
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-aspectlib/0001-Remove-tornado-6-test-constraint.-Ref-15.patch
@@ -0,0 +1,45 @@
+From d3ae6ac951cc5bbce29b9c987741e0a557c9b777 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ionel=20Cristian=20M=C4=83rie=C8=99?= <contact@ionelmc.ro>
+Date: Sun, 2 May 2021 09:50:43 +0300
+Subject: [PATCH] Remove tornado<6 test constraint. Ref #15.
+
+Upstream-Status: Backport [https://github.com/ionelmc/python-aspectlib/commit/7dccb198dfb426f529b81a28a755f3c02f8b50cb]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tests/test_integrations_py3.py | 5 ++++-
+ tox.ini                        | 3 ++-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/tests/test_integrations_py3.py b/tests/test_integrations_py3.py
+index e025eac..596589d 100644
+--- a/tests/test_integrations_py3.py
++++ b/tests/test_integrations_py3.py
+@@ -36,7 +36,10 @@ def test_decorate_tornado_coroutine():
+     @gen.coroutine
+     @debug.log(print_to=buf, module=False, stacktrace=2, result_repr=repr)
+     def coro():
+-        yield gen.Task(loop.add_timeout, timedelta(microseconds=10))
++        if hasattr(gen, 'Task'):
++            yield gen.Task(loop.add_timeout, timedelta(microseconds=10))
++        else:
++            yield gen.sleep(0.01)
+         return "result"
+ 
+     loop = ioloop.IOLoop.current()
+diff --git a/tox.ini b/tox.ini
+index 8c607de..08c31b3 100644
+--- a/tox.ini
++++ b/tox.ini
+@@ -55,7 +55,8 @@ deps =
+     pytest-clarity
+     pytest-cov
+     pytest-travis-fold
+-    tornado<6.0
++    six
++    tornado
+ commands =
+     {posargs:pytest --cov --cov-report=term-missing -vv --ignore=src}
+ 
+-- 
+2.32.0
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aspectlib/run-ptest b/meta-openembedded/meta-python/recipes-devtools/python/python3-aspectlib/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-aspectlib/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest -o log_cli=true -o log_cli_level=INFO | sed -e 's/\[...%\]//g'| sed -e 's/PASSED/PASS/g'| sed -e 's/FAILED/FAIL/g'|sed -e 's/SKIPPED/SKIP/g'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS"){printf "%s: %s\n", $NF, $0}else{print}}'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS") {$NF="";print $0}else{print}}'
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aspectlib_1.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-aspectlib_1.5.2.bb
new file mode 100644
index 0000000..2dc57a6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-aspectlib_1.5.2.bb
@@ -0,0 +1,29 @@
+# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "``aspectlib`` is an aspect-oriented programming, monkey-patch and decorators library. It is useful when changing"
+HOMEPAGE = "https://github.com/ionelmc/python-aspectlib"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d58b3f20fd10347a9458b8a03793b62e"
+
+SRC_URI[sha256sum] = "d275ec82c4c2712e564bb760e4accff8f061f648e38774feabeb8b241cf3a4aa"
+
+inherit ptest pypi setuptools3
+
+SRC_URI += "file://run-ptest \
+            file://0001-Remove-tornado-6-test-constraint.-Ref-15.patch \
+           "
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS_${PN}-ptest += "\
+    python3-tornado \
+    python3-process-tests \
+"
+
+RDEPENDS_${PN} += "python3-core python3-fields"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.5.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.6.5.bb
similarity index 89%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.5.7.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.6.5.bb
index c805dc4..513235b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.5.7.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.6.5.bb
@@ -4,7 +4,7 @@
 LICENSE = "LGPL-2.1"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=a70cf540abf41acb644ac3b621b2fad1"
 
-SRC_URI[sha256sum] = "d66a600e1602736a0f24f725a511b0e50d12eb18f54b31ec276d2c26a0a62c6a"
+SRC_URI[sha256sum] = "83e494b02d75d07d4e347b27c066fd791c0c74fc96c613d1ea3de0c82c48168f"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.2.2.bb
similarity index 77%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.1.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.2.2.bb
index 12de2c9..01f474d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.1.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.2.2.bb
@@ -3,7 +3,7 @@
 LICENSE = "PSF"
 LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=2ad702cdcd49e8d2ac01d7e7d0810d2d"
 
-SRC_URI[sha256sum] = "97224a19325ecee49a3bf4df3ee0531d3af9cf288b67d089a7ef44a3c4ea3839"
+SRC_URI[sha256sum] = "5ed37f0482199de5a3e096405a646ab3f45dd020d234c42539b3c11ea0e2278d"
 
 inherit setuptools3 pypi
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.25.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.25.0.bb
index a1941bf..ad446d6 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.25.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.25.0.bb
@@ -10,17 +10,11 @@
 
 SRC_URI[sha256sum] = "8ad7d7c090eb1cac6110b3bfc1fd2d334ac62f415aac09350ebb8d241b7aa7ee"
 
-DISTUTILS_BUILD_ARGS += " \
-    --no-libev \
-"
-DISTUTILS_INSTALL_ARGS += " \
-    --no-libev \
-"
-
 inherit pypi setuptools3
 
 RDEPENDS_${PN} += "\
     ${PYTHON_PN}-cython \
+    ${PYTHON_PN}-geomet \
     ${PYTHON_PN}-json \
     ${PYTHON_PN}-misc \
     ${PYTHON_PN}-multiprocessing \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.4.0.bb
similarity index 87%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.3.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.4.0.bb
index 32d2016..b791588 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.3.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.4.0.bb
@@ -4,7 +4,7 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
 
-SRC_URI[sha256sum] = "462b3604d9579458a79e6ca350943c49aabbc98c794c111a79b98720b9164336"
+SRC_URI[sha256sum] = "a7926f7244b08c413f1a4fa71a81aa256771c75bdf1a4fd77308547a2d63dd48"
 
 inherit pypi setuptools3 ptest
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.6.bb
similarity index 83%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.5.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.6.bb
index 16928f0..bcd185d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.5.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.6.bb
@@ -4,7 +4,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=5677e2fdbf7cdda61d6dd2b57df547bf"
 DEPENDS += "libffi ${PYTHON_PN}-pycparser"
 
-SRC_URI[sha256sum] = "fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c"
+SRC_URI[sha256sum] = "c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_1.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_2.1.2.bb
similarity index 60%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_1.5.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_2.1.2.bb
index 18c7a66..38f050a 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_1.5.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_2.1.2.bb
@@ -1,11 +1,11 @@
 SUMMARY = "Extra features for standard library's cmd module"
 HOMEPAGE = "https://github.com/python-cmd2/cmd2"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=9791cd24ca7d1807388ccd55cd066def"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4c527bcb481233ebcb803de975f42701"
 
 DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
 
-SRC_URI[sha256sum] = "701a8c9975c4abc45e5d13906ab149f959f812869106347323a3f89ac0e82a62"
+SRC_URI[sha256sum] = "25dbb2e9847aaa686a8a21e84e3d101db8b79f5cb992e044fc54210ab8c0ad41"
 
 inherit pypi setuptools3
 
@@ -14,6 +14,9 @@
     ${PYTHON_PN}-colorama \
     ${PYTHON_PN}-pyperclip \
     ${PYTHON_PN}-wcwidth \
+    ${PYTHON_PN}-compression \
+    ${PYTHON_PN}-pydoc \
+    ${PYTHON_PN}-json \
 "
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-coloredlogs_15.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-coloredlogs_15.0.1.bb
similarity index 84%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-coloredlogs_15.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-coloredlogs_15.0.1.bb
index daeda6b..5de59d5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-coloredlogs_15.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-coloredlogs_15.0.1.bb
@@ -4,7 +4,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=764e737b117a38d773609885e8d04f0b"
 
-SRC_URI[sha256sum] = "5e78691e2673a8e294499e1832bb13efcfb44a86b92e18109fa18951093218ab"
+SRC_URI[sha256sum] = "7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-configargparse_1.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-configargparse_1.5.1.bb
similarity index 81%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-configargparse_1.4.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-configargparse_1.5.1.bb
index 0c851fe..596d16f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-configargparse_1.4.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-configargparse_1.5.1.bb
@@ -3,7 +3,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=da746463714cc35999ed9a42339f2943"
 
-SRC_URI[sha256sum] = "6df537158f28c5ef2e8a8146781833abbc6cb7fca81b1b55d18808ce3439235e"
+SRC_URI[sha256sum] = "371f46577e76ec71a183b88378f36dd09f4b946f60fe60712f411b020f26b812"
 
 PYPI_PACKAGE = "ConfigArgParse"
 
@@ -15,6 +15,7 @@
 RDEPENDS_${PN} += "\
     ${PYTHON_PN}-core \
     ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-json \
 "
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_1.0.13.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_1.0.15.bb
similarity index 77%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_1.0.13.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_1.0.15.bb
index c520fa7..1782391 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_1.0.13.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_1.0.15.bb
@@ -5,7 +5,7 @@
 
 PYPI_PACKAGE = "croniter"
 
-SRC_URI[sha256sum] = "57f36df4f5a1c31bbf50bbffa3551612c19f6156ab1e88e2e42342ccbb9f9b9a"
+SRC_URI[sha256sum] = "a70dfc9d52de9fc1a886128b9148c89dd9e76b67d55f46516ca94d2d73d58219"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_3.4.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_3.4.7.bb
similarity index 81%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_3.4.6.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_3.4.7.bb
index b5f34da..565e223 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_3.4.6.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_3.4.7.bb
@@ -4,7 +4,7 @@
 LICENSE = "Apache-2.0 | BSD"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4"
 
-SRC_URI[sha256sum] = "e5f88a5fb03d60b4f20eed4920638b6a3ed32a363523a77086528d557a2c2da8"
+SRC_URI[sha256sum] = "a7ac3aaa57514687696ad65f833e5e39b6fa3c5d41de2b8c938346ee119204c2"
 
 PYPI_PACKAGE = "cryptography_vectors"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.8.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.8.2.bb
similarity index 83%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.8.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.8.2.bb
index 5326924..a68a736 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.8.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.8.2.bb
@@ -4,8 +4,7 @@
 LICENSE = "BSD-3-Clause & Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=e3155c7bdc71f66e02678411d2abf996"
 
-SRC_URI[md5sum] = "f2a1d4b680b297b367a974664ca3a4f6"
-SRC_URI[sha256sum] = "73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"
+SRC_URI[sha256sum] = "0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"
 
 PYPI_PACKAGE = "python-dateutil"
 inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.3.bb
deleted file mode 100644
index bf26ba3..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.3.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-SUMMARY = "Serialize all of python"
-HOMEPAGE = "https://pypi.org/project/dill/"
-LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=90fee9f98d11d59df3f8aa813ff9a3de"
-
-SRC_URI[md5sum] = "99c878e2e4e924f3234c0efcbcff6abf"
-SRC_URI[sha256sum] = "efb7f6cb65dba7087c1e111bb5390291ba3616741f96840bfc75792a1a9b5ded"
-
-inherit pypi setuptools3
-
-PYPI_PACKAGE_EXT = "zip"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.4.bb
new file mode 100644
index 0000000..0634e17
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.4.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Serialize all of python"
+HOMEPAGE = "https://pypi.org/project/dill/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=41adceb584fdde8323ddf9ad23c07fe5"
+
+SRC_URI[sha256sum] = "9f9734205146b2b353ab3fec9af0070237b6ddae78452af83d2fca84d739e675"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE_EXT = "zip"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-multiprocessing \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.23.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.23.bb
deleted file mode 100644
index ab4b68f..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.23.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require python-django.inc
-inherit setuptools3
-
-SRC_URI[md5sum] = "d72405637143e201b745714e300bb546"
-SRC_URI[sha256sum] = "12cfc045a4ccb2348719aaaa77b17e66a26bff9fc238b4c765a3e825ef92e414"
-
-RDEPENDS_${PN} += "\
-    ${PYTHON_PN}-sqlparse \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.24.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.24.bb
new file mode 100644
index 0000000..964ca6b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.24.bb
@@ -0,0 +1,9 @@
+require python-django.inc
+inherit setuptools3
+
+SRC_URI[md5sum] = "ebf3bbb7716a7b11029e860475b9a122"
+SRC_URI[sha256sum] = "3339ff0e03dee13045aef6ae7b523edff75b6d726adf7a7a48f53d5a501f7db7"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-sqlparse \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_3.2.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_3.2.5.bb
similarity index 77%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-django_3.2.3.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-django_3.2.5.bb
index 7a9611c..5890c85 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_3.2.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_3.2.5.bb
@@ -1,7 +1,7 @@
 require python-django.inc
 inherit setuptools3
 
-SRC_URI[sha256sum] = "13ac78dbfd189532cad8f383a27e58e18b3d33f80009ceb476d7fcbfc5dcebd8"
+SRC_URI[sha256sum] = "3da05fea54fdec2315b54a563d5b59f3b4e2b1e69c3a5841dda35019c01855cd"
 
 RDEPENDS_${PN} += "\
     ${PYTHON_PN}-sqlparse \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-elementpath_2.2.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-elementpath_2.2.3.bb
similarity index 74%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-elementpath_2.2.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-elementpath_2.2.3.bb
index c793592..2d9c531 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-elementpath_2.2.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-elementpath_2.2.3.bb
@@ -3,9 +3,13 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=5dbb7fb7d72da3921202dd7b995d3ecf"
 
-SRC_URI[sha256sum] = "68de07c1aec3b1d33126111252cc699600dd1e45802625344aa6eb9e680ef157"
+SRC_URI[sha256sum] = "60139b91ef9646e27381fd62b8c38f1fc8ebc78dc4bc231c08c51240062e58e6"
 
 PYPI_PACKAGE = "elementpath"
 inherit pypi setuptools3
 
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-xml \
+"
+
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-execnet/run-ptest b/meta-openembedded/meta-python/recipes-devtools/python/python3-execnet/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-execnet/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest -o log_cli=true -o log_cli_level=INFO | sed -e 's/\[...%\]//g'| sed -e 's/PASSED/PASS/g'| sed -e 's/FAILED/FAIL/g'|sed -e 's/SKIPPED/SKIP/g'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS"){printf "%s: %s\n", $NF, $0}else{print}}'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS") {$NF="";print $0}else{print}}'
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-execnet_1.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-execnet_1.9.0.bb
new file mode 100644
index 0000000..a7b1565
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-execnet_1.9.0.bb
@@ -0,0 +1,28 @@
+# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "execnet: rapid multi-Python deployment"
+HOMEPAGE = "https://execnet.readthedocs.io/en/latest/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=772fcdaca14b378878d05c7d857e6c3e"
+
+DEPENDS += "python3-pip-native"
+
+SRC_URI += "file://run-ptest \
+           "
+SRC_URI[sha256sum] = "8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"
+
+inherit ptest pypi setuptools3
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/testing/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS_${PN}-ptest += "\
+    python3-pytest \
+"
+
+RDEPENDS_${PN} += "python3-core python3-crypt python3-ctypes python3-fcntl python3-io python3-shell python3-threading"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.16.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.16.3.bb
new file mode 100644
index 0000000..6f283a3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.16.3.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A python package that provides useful locks."
+HOMEPAGE = "https://github.com/harlowja/fasteners"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4476c4be31402271e101d9a4a3430d52"
+
+SRC_URI[sha256sum] = "b1ab4e5adfbc28681ce44b3024421c4f567e705cc3963c732bf1cba3348307de"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-fcntl \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.16.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.16.bb
deleted file mode 100644
index eed8d2c..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.16.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-SUMMARY = "A python package that provides useful locks."
-HOMEPAGE = "https://github.com/harlowja/fasteners"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=4476c4be31402271e101d9a4a3430d52"
-
-SRC_URI[sha256sum] = "c995d8c26b017c5d6a6de9ad29a0f9cdd57de61ae1113d28fac26622b06a0933"
-
-inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-fastjsonschema/run-ptest b/meta-openembedded/meta-python/recipes-devtools/python/python3-fastjsonschema/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-fastjsonschema/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest -o log_cli=true -o log_cli_level=INFO | sed -e 's/\[...%\]//g'| sed -e 's/PASSED/PASS/g'| sed -e 's/FAILED/FAIL/g'|sed -e 's/SKIPPED/SKIP/g'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS"){printf "%s: %s\n", $NF, $0}else{print}}'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS") {$NF="";print $0}else{print}}'
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-fastjsonschema_2.15.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-fastjsonschema_2.15.1.bb
new file mode 100644
index 0000000..d901fcb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-fastjsonschema_2.15.1.bb
@@ -0,0 +1,38 @@
+# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Fastest Python implementation of JSON schema"
+HOMEPAGE = "https://github.com/seznam/python-fastjsonschema"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=18950e8362b69c0c617b42b8bd8e7532"
+
+SRCREV = "1e214911fe83dbaeea3d50dfb3a539118de8a442"
+PYPI_SRC_URI = "git://github.com/horejsek/python-fastjsonschema;protocol=https;branch=master"
+
+SRC_URI += "file://run-ptest"
+
+inherit ptest pypi setuptools3
+
+S = "${WORKDIR}/git"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS_${PN}-ptest += "\
+    python3-colorama \
+    python3-jsonschema \
+    python3-pylint \
+    python3-pytest \
+    python3-pytest-benchmark \
+    python3-pytest-cache \
+"
+RDEPENDS_${PN} += "\
+    python3-core \
+    python3-urllib3 \
+    python3-numbers \
+    python3-pickle \
+    "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-fields_5.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-fields_5.0.0.bb
new file mode 100644
index 0000000..9c22b92
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-fields_5.0.0.bb
@@ -0,0 +1,15 @@
+# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Container class boilerplate killer."
+HOMEPAGE = "https://github.com/ionelmc/python-fields"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e32c6705498713d9c904a9f565953a2c"
+
+SRC_URI[sha256sum] = "31d4aa03d8d44e35df13c431de35136997f047a924a597d84f7bc209e1be5727"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-core"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_3.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_3.0.1.bb
similarity index 79%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_3.0.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_3.0.1.bb
index 8f84e05..77fd172 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_3.0.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_3.0.1.bb
@@ -2,7 +2,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b69377f79f3f48c661701236d5a6a85"
 
-SRC_URI[sha256sum] = "a6607e66bf1d68489b2281ead5caa6fdf7a21b71984fae922ef5f915ac45bbcb"
+SRC_URI[sha256sum] = "4d42e8f861d78cb6e9319afcba5bf76062e5efd7784184dd2a1cccd9de34a702"
 
 PYPI_PACKAGE = "Flask-Migrate"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.1.0.bb
similarity index 80%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.0.3.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.1.0.bb
index 5def762..5a6b83b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.0.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_5.1.0.bb
@@ -9,7 +9,7 @@
 
 PYPI_PACKAGE = "Flask-SocketIO"
 
-SRC_URI[sha256sum] = "4fb968c43bc384f184cd1a25c1842297c2e3d6efc2f755a61be6d4406858220f"
+SRC_URI[sha256sum] = "b41b9f6fb0d7f3fcadd54c44653307a9b96e985c7da73f92779480248b5b6874"
 
 RDEPENDS_${PN} += "\
     ${PYTHON_PN}-flask \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-gast_0.4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-gast_0.5.0.bb
similarity index 69%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-gast_0.4.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-gast_0.5.0.bb
index 7ef2eb4..9908950 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-gast_0.4.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-gast_0.5.0.bb
@@ -4,8 +4,7 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=a3ad9b6802e713fc5e307e1230f1ea90"
 
-SRC_URI[md5sum] = "d1f258eb70bb916f8fe5535351d5ff05"
-SRC_URI[sha256sum] = "40feb7b8b8434785585ab224d1568b857edb18297e5a3047f1ba012bc83b42c1"
+SRC_URI[sha256sum] = "8109cbe7aa0f7bf7e4348379da05b8137ea1f059f073332c3c1cedd57db8541f"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-geomet_0.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-geomet_0.3.0.bb
new file mode 100644
index 0000000..de05534
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-geomet_0.3.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary), and vice versa."
+DESCRIPTION = "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary), and vice versa."
+HOMEPAGE = "https://github.com/geomet/geomet"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
+SRCNAME = "geomet"
+
+SRC_URI[sha256sum] = "cb52411978ee01ff104ab48f108d7333b14423ae7a15a65fee25b7d29bda2e1b"
+
+S = "${WORKDIR}/git"
+SRC_URI = "git://github.com/geomet/geomet.git;protocol=https;branch=release-${PV} \
+           "
+SRCREV = "73ec5ec96cca32f2e2461d3964fc3d4ab80248f9"
+
+inherit setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-click \
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-gnupg_0.4.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-gnupg_0.4.7.bb
similarity index 62%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-gnupg_0.4.6.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-gnupg_0.4.7.bb
index ff0a91c..cc441af 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-gnupg_0.4.6.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-gnupg_0.4.7.bb
@@ -4,8 +4,11 @@
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b0b7ac63b60085b23fa9f7e1951daa1d"
 
 PYPI_PACKAGE = "python-gnupg"
-SRC_URI[sha256sum] = "3aa0884b3bd414652c2385b9df39e7b87272c2eca1b8fcc3089bc9e58652019a"
+SRC_URI[sha256sum] = "2061f56b1942c29b92727bf9aecbd3cea3893acc9cccbdc7eb4604285efe4ac7"
 
 inherit pypi setuptools3
 
-RDEPENDS_${PN} +=  "gnupg-gpg"
+RDEPENDS_${PN} +=  " \
+	gnupg-gpg \
+	python3-logging \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_1.30.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_1.30.0.bb
new file mode 100644
index 0000000..08cc35d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_1.30.0.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "Google API client core library"
+HOMEPAGE = "https://github.com/googleapis/python-api-core"
+AUTHOR = "Google LLC"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "0724d354d394b3d763bc10dfee05807813c5210f0bd9b8e2ddf6b6925603411c"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-asyncio \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-math \
+"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-googleapis-common-protos \
+    ${PYTHON_PN}-google-auth \
+    ${PYTHON_PN}-grpcio \
+    ${PYTHON_PN}-protobuf \
+    ${PYTHON_PN}-pytz \
+    ${PYTHON_PN}-requests \
+    ${PYTHON_PN}-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.12.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.12.0.bb
new file mode 100644
index 0000000..67d05b5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.12.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "The Google API Client for Python is a client library for accessing the Plus, \
+Moderator, and many other Google APIs."
+HOMEPAGE = "https://github.com/googleapis/google-api-python-client"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=94023d14f6b58272fd885e4e3f2f08b3"
+
+SRC_URI[sha256sum] = "a5d203241a93201a770c966f8eca39de7f88b28194f9d252065b18e83bd99c4b"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-httplib2 \
+    ${PYTHON_PN}-uritemplate \
+    ${PYTHON_PN}-google-api-core \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.6.0.bb
deleted file mode 100644
index c6ae6e8..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.6.0.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY = "The Google API Client for Python is a client library for accessing the Plus, \
-Moderator, and many other Google APIs."
-HOMEPAGE = "https://github.com/googleapis/google-api-python-client"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=94023d14f6b58272fd885e4e3f2f08b3"
-
-SRC_URI[sha256sum] = "6a87f324334247bf7ba24406da586424b09e715d04336fb7cf45a402b80d38e8"
-
-inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_1.32.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_1.32.0.bb
new file mode 100644
index 0000000..d492bbb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_1.32.0.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "Google Authentication Library"
+HOMEPAGE = "https://github.com/googleapis/google-auth-library-python"
+AUTHOR = "Google Cloud Platform"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "e34e5f5de5610b202f9b40ebd9f8b27571d5c5537db9afed3a72b2db5a345039"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-asyncio \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-aiohttp \
+    ${PYTHON_PN}-cachetools \
+    ${PYTHON_PN}-pyasn1-modules \
+    ${PYTHON_PN}-rsa \
+    ${PYTHON_PN}-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-googleapis-common-protos_1.53.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-googleapis-common-protos_1.53.0.bb
new file mode 100644
index 0000000..2c59ae8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-googleapis-common-protos_1.53.0.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Common protobufs used in Google APIs"
+HOMEPAGE = "https://github.com/googleapis/python-api-common-protos"
+AUTHOR = "Google LLC"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "a88ee8903aa0a81f6c3cec2d5cf62d3c8aa67c06439b0496b49048fb1854ebf4"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-grpcio \
+    ${PYTHON_PN}-protobuf \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.37.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.38.1.bb
similarity index 85%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.37.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.38.1.bb
index d1b934b..e6680e8 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.37.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.38.1.bb
@@ -11,7 +11,7 @@
 
 SRC_URI += "file://0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch"
 
-SRC_URI[sha256sum] = "3ec510c1b6bfc32effc639acf9a055e72dab7a7b6757bf72f2132790d6a7cf1c"
+SRC_URI[sha256sum] = "cd85f58038b92e1961f8127d79691e84e151390d35cae73c4c0cbe2042f76b77"
 
 RDEPENDS_${PN} = "${PYTHON_PN}-grpcio"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.38.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.38.1.bb
similarity index 93%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.38.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.38.1.bb
index d9e0042..3af033d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.38.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.38.1.bb
@@ -12,7 +12,7 @@
                                 file://mips_bigendian.patch \
                                 file://0001-absl-always-use-asm-sgidefs.h.patch \
 "
-SRC_URI[sha256sum] = "abbf9c8c3df4d5233d5888c6cfa85c1bb68a6923749bd4dd1abc6e1e93986f17"
+SRC_URI[sha256sum] = "1f79d8a24261e3c12ec3a6c25945ff799ae09874fd24815bc17c2dc37715ef6c"
 
 RDEPENDS_${PN} = "${PYTHON_PN}-protobuf \
                   ${PYTHON_PN}-setuptools \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.3.0.bb
similarity index 89%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.2.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.3.0.bb
index 5faa0b8..58498f8 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.2.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.3.0.bb
@@ -4,7 +4,7 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=113251d71fb0384712c719b567261c5c"
 
-SRC_URI[sha256sum] = "89474be911bfcdb34cbf0d98b8ec48b578c27a89fdb1ae4ee7513f1ef8d9249e"
+SRC_URI[sha256sum] = "e0dac887d779929778b3cfd13309a939359cc9e74756fc09af7c527a82797186"
 
 SRC_URI_append = " \
            file://0001-setup_build.py-avoid-absolute-path.patch \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine/0001-setup.py-Correct-the-license-assignment.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine/0001-setup.py-Correct-the-license-assignment.patch
deleted file mode 100644
index bb5955a..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine/0001-setup.py-Correct-the-license-assignment.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-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-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb
deleted file mode 100644
index 624d30c..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-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"
-
-inherit pypi setuptools3
-
-RDEPENDS_${PN} += "python3-numpy"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.3.1.bb
new file mode 100644
index 0000000..c325162
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.3.1.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Calculate the distance between 2 points on Earth"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI[sha256sum] = "75a7f859b3fb6df746564ca66ad1fd5b4052cdbab3d74ff16e8f1a7c3d4a26a5"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-numpy"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-httplib2_0.19.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-httplib2_0.19.1.bb
index a16f8d9..122b4bd 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-httplib2_0.19.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-httplib2_0.19.1.bb
@@ -7,3 +7,9 @@
 SRC_URI[sha256sum] = "0b12617eeca7433d4c396a100eaecfa4b08ee99aa881e6df6e257a7aad5d533d"
 
 inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-compression \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-pyparsing \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-humanfriendly_9.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-humanfriendly_9.2.bb
similarity index 74%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-humanfriendly_9.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-humanfriendly_9.2.bb
index fb6a7e3..6be27f7 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-humanfriendly_9.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-humanfriendly_9.2.bb
@@ -2,11 +2,11 @@
 HOMEPAGE = "https://humanfriendly.readthedocs.io/"
 SECTION = "devel/python"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=764e737b117a38d773609885e8d04f0b"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=5d178009f806c2bdd498a19be0013a7a"
 
 PYPI_PACKAGE = "humanfriendly"
 
-SRC_URI[sha256sum] = "066562956639ab21ff2676d1fda0b5987e985c534fc76700a19bd54bcb81121d"
+SRC_URI[sha256sum] = "f7dba53ac7935fd0b4a2fc9a29e316ddd9ea135fb3052d3d0279d10c18ff9c48"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_3.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_3.10.0.bb
similarity index 75%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_3.6.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_3.10.0.bb
index 1c269ba..eba13db 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_3.6.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_3.10.0.bb
@@ -5,7 +5,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENCE;md5=4ecc42519e84f6f3e23529464df7bd1d"
 
-SRC_URI[sha256sum] = "a31704cf41f023e268032c4813c6482573320150a0d986f76b245e0451bb89e1"
+SRC_URI[sha256sum] = "b2413730ce6684f85e0439a5b80b8f402e09f03e16ab8023d1da758c6ff41148"
 
 inherit pypi setuptools3
 
@@ -15,6 +15,7 @@
 
 RDEPENDS_${PN} += "\
     ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-setuptools \
 "
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_3.2.bb
similarity index 82%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-idna_3.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-idna_3.2.bb
index fbdbab6..4ca7f62 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_3.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_3.2.bb
@@ -3,7 +3,7 @@
 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-openembedded/meta-python/recipes-devtools/python/python3-ifaddr_0.1.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ifaddr_0.1.7.bb
index 4fff7d1..6d4fab3 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ifaddr_0.1.7.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ifaddr_0.1.7.bb
@@ -8,3 +8,7 @@
 SRC_URI[sha256sum] = "1f9e8a6ca6f16db5a37d3356f07b6e52344f6f9f7e806d618537731669eb1a94"
 
 inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-ctypes \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.24.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.25.0.bb
similarity index 88%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.24.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.25.0.bb
index 1c11eec..b8a6db2 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.24.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.25.0.bb
@@ -6,7 +6,7 @@
 
 PYPI_PACKAGE = "ipython"
 
-SRC_URI[sha256sum] = "a171caa3d3d4c819a1c0742e3abecfd5a2b8ab525ca1c9f114b40b76b0679ab1"
+SRC_URI[sha256sum] = "54bbd1fe3882457aaf28ae060a5ccdef97f212a741754e420028d4ec5c2291dc"
 
 RDEPENDS_${PN} = "\
     ${PYTHON_PN}-setuptools \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.8.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.9.2.bb
similarity index 66%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.8.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.9.2.bb
index 36de825..5832136 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.8.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.9.2.bb
@@ -4,13 +4,17 @@
 SECTION = "devel/python"
 LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=8227180126797a0148f94f483f3e1489"
 
-SRC_URI[sha256sum] = "0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6"
+SRC_URI[sha256sum] = "f65ce5bd4cbc6abdfbe29afc2f0245538ab358c14590912df638033f157d555e"
 
 inherit pypi setuptools3
 
 RDEPENDS_${PN} += "\
     ${PYTHON_PN}-datetime \
     ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-profile \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-difflib \
 "
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-joblib_1.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-joblib_1.0.1.bb
new file mode 100644
index 0000000..4e63b05
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-joblib_1.0.1.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Joblib is a set of tools to provide lightweight pipelining in Python."
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=32b289008fb813a27c9025f02b59d03d"
+
+inherit setuptools3 pypi
+
+SRC_URI[md5sum] = "9914b330916395c0a1feca54949867a3"
+SRC_URI[sha256sum] = "9c17567692206d2f3fb9ecf5e991084254fe631665c450b443761c4186a613f7"
+
+RDEPENDS_${PN} += " \
+    python3-asyncio \
+    python3-distutils \
+    python3-json \
+    python3-multiprocessing \
+    python3-pprint \
+    python3-pydoc \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_21.6.14.bb
similarity index 64%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_1.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_21.6.14.bb
index c033bd3..0513d09 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_1.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_21.6.14.bb
@@ -2,16 +2,20 @@
 HOMEPAGE = "https://github.com/nexB/license-expression"
 
 LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://apache-2.0.LICENSE;md5=e23fadd6ceef8c618fc1c65191d846fa"
+LIC_FILES_CHKSUM = "file://apache-2.0.LICENSE;md5=9429839cdc4b292ff46e88b524c6e0c9"
 
-SRC_URI[md5sum] = "fd4cb295cc345be1071274cdbd81c969"
-SRC_URI[sha256sum] = "7960e1dfdf20d127e75ead931476f2b5c7556df05b117a73880b22ade17d1abc"
+SRC_URI[sha256sum] = "9de87a427c9a449eee7913472fb9ed03b63036295547369fdbf95f76a8b924b2"
 
 inherit pypi ptest setuptools3
 
+DEPENDS += "\
+    ${PYTHON_PN}-setuptools-scm-native \
+    ${PYTHON_PN}-wheel-native \
+"
+
 RDEPENDS_${PN} += "\
     ${PYTHON_PN}-booleanpy \
-    "
+"
 
 BBCLASSEXTEND = "native nativesdk"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/0001-Allow-verify_cb_-to-be-called-with-ok-True.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/0001-Allow-verify_cb_-to-be-called-with-ok-True.patch
deleted file mode 100644
index 3c83663..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/0001-Allow-verify_cb_-to-be-called-with-ok-True.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-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-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/0001-Use-of-RSA_SSLV23_PADDING-has-been-deprecated.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/0001-Use-of-RSA_SSLV23_PADDING-has-been-deprecated.patch
deleted file mode 100644
index 2313a32..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/0001-Use-of-RSA_SSLV23_PADDING-has-been-deprecated.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-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-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/avoid-host-contamination.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/avoid-host-contamination.patch
new file mode 100644
index 0000000..9d9b844
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/avoid-host-contamination.patch
@@ -0,0 +1,23 @@
+Filter out '/usr/include' for swig to avoid host contamination issue.
+
+Upstream-Status: Upstream-Status: Inappropriate [cross compile specific]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ setup.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index 5a12981..389d49f 100644
+--- a/setup.py
++++ b/setup.py
+@@ -153,7 +153,8 @@ class _M2CryptoBuildExt(build_ext.build_ext):
+             self.swig_opts.append('-py3')
+ 
+         # swig seems to need the default header file directories
+-        self.swig_opts.extend(['-I%s' % i for i in _get_additional_includes()])
++        self.swig_opts.extend(['-I%s' % i for i in _get_additional_includes()
++                                            if i != '/usr/include'])
+ 
+         log.debug('self.include_dirs = %s', self.include_dirs)
+         log.debug('self.library_dirs = %s', self.library_dirs)
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/cross-compile-platform.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/cross-compile-platform.patch
index f039ae8..77ef7e5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/cross-compile-platform.patch
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto/cross-compile-platform.patch
@@ -6,7 +6,7 @@
 
 --- a/setup.py
 +++ b/setup.py
-@@ -169,22 +169,6 @@ class _M2CryptoBuildExt(build_ext.build_
+@@ -169,24 +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)
  
@@ -25,6 +25,8 @@
 -            self.swig_opts.append('-D%s' % arch)
 -            if mach in ('ppc64le', 'ppc64el'):
 -                self.swig_opts.append('-D_CALL_ELF=2')
+-            if mach in ('arm64_be'):
+-                self.swig_opts.append('-D__AARCH64EB__')
 -
          self.swig_opts.extend(['-I%s' % i for i in self.include_dirs])
  
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.37.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.38.0.bb
similarity index 84%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.37.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.38.0.bb
index e1f9292..950de56 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.37.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.38.0.bb
@@ -8,10 +8,9 @@
 
 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 \
+            file://avoid-host-contamination.patch \
            "
-SRC_URI[sha256sum] = "e4e42f068b78ccbf113e5d0a72ae5f480f6c3ace4940b91e4fff5598cfff6fb3"
+SRC_URI[sha256sum] = "99f2260a30901c949a8dc6d5f82cd5312ffb8abc92e76633baf231bbbcb2decb"
 
 PYPI_PACKAGE = "M2Crypto"
 inherit pypi siteinfo setuptools3
@@ -39,6 +38,9 @@
 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
 
+export STAGING_DIR
+
 BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_0.812.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_0.812.bb
deleted file mode 100644
index 8faab60..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_0.812.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Optional static typing for Python 3 and 2 (PEP 484)"
-HOMEPAGE = "https://github.com/python/mypy"
-LICENSE = "MIT & Python-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=6afb7c151c4dedb5c3dc292cc120fadc"
-
-RDEPENDS_${PN} = " \
-    ${PYTHON_PN}-mypy-extensions \
-    ${PYTHON_PN}-typed-ast \
-    ${PYTHON_PN}-typing-extensions \
-"
-
-PYPI_PACKAGE = "mypy"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "cd07039aa5df222037005b08fbbfd69b3ab0b0bd7a07d7906de75ae52c4e3119"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_0.910.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_0.910.bb
new file mode 100644
index 0000000..8e675e6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_0.910.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Optional static typing for Python 3 and 2 (PEP 484)"
+HOMEPAGE = "https://github.com/python/mypy"
+LICENSE = "MIT & Python-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=17b7180fcfc43c4e70c07c71588604c4"
+
+PYPI_PACKAGE = "mypy"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"
+
+BBCLASSEXTEND = "native"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-mypy-extensions \
+    ${PYTHON_PN}-typed-ast \
+    ${PYTHON_PN}-typing-extensions \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-compression \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-difflib \
+    ${PYTHON_PN}-toml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.5.1.bb
deleted file mode 100644
index 0b52cfd..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.5.1.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "Python package for creating and manipulating graphs and networks"
-HOMEPAGE = "http://networkx.github.io/"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a24ea029adac8935699bf69b2e38c728"
-
-SRC_URI[sha256sum] = "109cd585cac41297f71103c3c42ac6ef7379f29788eb54cb751be5a663bb235a"
-
-inherit pypi setuptools3
-
-RDEPENDS_${PN} += "\
-                   ${PYTHON_PN}-decorator \
-                   "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.6.1.bb
new file mode 100644
index 0000000..676e1db
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.6.1.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Python package for creating and manipulating graphs and networks"
+HOMEPAGE = "http://networkx.github.io/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=5cfa4d8f5881e0d053bb497130b9c73a"
+
+SRC_URI[sha256sum] = "bf4cb807d1bccf1593c7d0742d9127d9e04e021867299082658b0fc3907924e8"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+                   ${PYTHON_PN}-decorator \
+                   ${PYTHON_PN}-netclient \
+                   ${PYTHON_PN}-compression \
+                   ${PYTHON_PN}-numbers \
+                   ${PYTHON_PN}-pickle \
+                   ${PYTHON_PN}-html \
+                   ${PYTHON_PN}-xml \
+                   ${PYTHON_PN}-json \
+                   "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_3.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_3.1.1.bb
similarity index 88%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_3.1.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_3.1.1.bb
index fe27e8e..e117863 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_3.1.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_3.1.1.bb
@@ -4,8 +4,7 @@
 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-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.2.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.3.0.bb
similarity index 73%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.2.4.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.3.0.bb
index 54fa910..b98e286 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.2.4.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.3.0.bb
@@ -4,9 +4,9 @@
 the Python programming language."
 HOMEPAGE = "http://pandas.pydata.org/"
 LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=c2a8f987b2ce77c368c6b3e1b5b10774"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3f23c5c092b74d245d48eeef72bc3fd2"
 
-SRC_URI[sha256sum] = "649ecab692fade3cbfcf967ff936496b0cfba0af00a55dfaacd82bdda5cb2279"
+SRC_URI[sha256sum] = "c554e6c9cf2d5ea1aba5979cc837b3649539ced0e18ece186f055450c86622e2"
 
 inherit pypi setuptools3
 
@@ -20,5 +20,7 @@
     ${PYTHON_PN}-json \
     ${PYTHON_PN}-numpy \
     ${PYTHON_PN}-dateutil \
+    ${PYTHON_PN}-dateutil-zoneinfo \
     ${PYTHON_PN}-pytz \
+    ${PYTHON_PN}-profile \
 "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_8.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_8.3.1.bb
similarity index 86%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_8.2.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_8.3.1.bb
index 3241230..045357a 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_8.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_8.3.1.bb
@@ -5,11 +5,11 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=0337b116233da4616ae9fdb130bf6f1a"
 
-SRC_URI = "git://github.com/python-pillow/Pillow.git;branch=8.2.x \
+SRC_URI = "git://github.com/python-pillow/Pillow.git;branch=8.3.x \
            file://0001-support-cross-compiling.patch \
            file://0001-explicitly-set-compile-options.patch \
 "
-SRCREV ?= "e0e353c0ef7516979a9aedce3792596649ce4433"
+SRCREV ?= "92933b86574b9c80764bf52c357ed29e1ef53382"
 
 inherit setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.5.bb
similarity index 80%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.5.bb
index 7a98ef2..4c0e799 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pkgconfig_1.5.5.bb
@@ -4,7 +4,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=faa7f82be8f220bff6156be4790344fc"
 
-SRC_URI[sha256sum] = "38d612488f0633755a2e7a8acab6c01d20d63dbc31af75e2a9ac98a6f638ca94"
+SRC_URI[sha256sum] = "deb4163ef11f75b520d822d9505c1f462761b4309b1bb713d08689759ea8b899"
 
 RDEPENDS_${PN} = "pkgconfig \
                  ${PYTHON_PN}-shell \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-process-tests_2.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-process-tests_2.1.2.bb
new file mode 100644
index 0000000..dccdeb7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-process-tests_2.1.2.bb
@@ -0,0 +1,15 @@
+# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Tools for testing processes."
+HOMEPAGE = "https://github.com/ionelmc/python-process-tests"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=37031056aff37e4b3310872a9a3d0b1e"
+
+SRC_URI[sha256sum] = "a3747ad947bdfc93e5c986bdb17a6d718f3f26e8577a0807a00962f29e26deba"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-core"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.18.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.19.bb
similarity index 82%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.18.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.19.bb
index 3662875..f384e21 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.18.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.19.bb
@@ -3,7 +3,7 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=b2cde7da89f0c1f3e49bf968d00d554f"
 
-SRC_URI[sha256sum] = "e1b4f11b9336a28fa11810bc623c357420f69dfdb6d2dac41ca2c21a55c033bc"
+SRC_URI[sha256sum] = "08360ee3a3148bdb5163621709ee322ec34fc4375099afa4bbf751e9b7b7fa4f"
 
 inherit pypi setuptools3
 
@@ -18,6 +18,7 @@
     ${PYTHON_PN}-datetime \
     ${PYTHON_PN}-shell \
     ${PYTHON_PN}-image \
+    ${PYTHON_PN}-asyncio \
 "
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.17.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.17.3.bb
similarity index 91%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.17.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.17.3.bb
index be846f7..b3f9f6f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.17.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.17.3.bb
@@ -7,7 +7,7 @@
 
 inherit pypi setuptools3
 
-SRC_URI[sha256sum] = "05dfe9319939a8473c21b469f34f6486646e54fb8542637cf7ed8e2fbfe21538"
+SRC_URI[sha256sum] = "72804ea5eaa9c22a090d2803813e280fb273b62d5ae497aaf3553d141c4fdd7b"
 
 # http://errors.yoctoproject.org/Errors/Details/184715/
 # Can't find required file: ../src/google/protobuf/descriptor.proto
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pulsectl_21.5.17.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pulsectl_21.5.18.bb
similarity index 84%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pulsectl_21.5.17.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pulsectl_21.5.18.bb
index 3c0a9c0..d039b7e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pulsectl_21.5.17.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pulsectl_21.5.18.bb
@@ -3,7 +3,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://COPYING;md5=f1d10048469ff90123263eb5e214061d"
 
-SRC_URI[sha256sum] = "3f782b3adf6d91b2398504002d248b36aa047bd04d5acd0ae5d4e2d3c8e746a0"
+SRC_URI[sha256sum] = "14e34563cdad5f01d193f1ef7cd859a0fbdaa846726d44b0b68f4451a7458458"
 
 RDEPENDS_${PN} += " \
 	libpulse \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo/run-ptest b/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest -o log_cli=true -o log_cli_level=INFO | sed -e 's/\[...%\]//g'| sed -e 's/PASSED/PASS/g'| sed -e 's/FAILED/FAIL/g'|sed -e 's/SKIPPED/SKIP/g'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS"){printf "%s: %s\n", $NF, $0}else{print}}'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS") {$NF="";print $0}else{print}}'
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo_8.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo_8.0.0.bb
new file mode 100644
index 0000000..1b62a76
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo_8.0.0.bb
@@ -0,0 +1,27 @@
+# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "Get CPU info with pure Python 2 & 3"
+HOMEPAGE = "https://github.com/workhorsy/py-cpuinfo"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b0b97c022f12b14d9e02de0b283ee9e9"
+
+SRC_URI[sha256sum] = "5f269be0e08e33fd959de96b34cd4aeeeacac014dd8305f70eb28d06de2345c5"
+
+inherit ptest pypi setuptools3
+
+SRC_URI += "file://run-ptest \
+           "
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS_${PN}-ptest += "\
+    python3-pytest \
+"
+
+RDEPENDS_${PN} += "python3-core python3-ctypes python3-datetime python3-json python3-io python3-mmap python3-multiprocessing python3-netclient python3-pickle python3-pprint python3-shell"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_9.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_9.1.2.bb
deleted file mode 100644
index c392261..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_9.1.2.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-SUMMARY = "Library for Python 3.6+ to communicate with the Google Chromecast."
-HOMEPAGE = "https://github.com/balloob/pychromecast"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b1dbd4e85f47b389bdadee9c694669f5"
-
-SRC_URI[sha256sum] = "907656cea46d39d0e93ec815979578ef4fb6f655fd8bf4e88e6421fcd7824e85"
-
-PYPI_PACKAGE = "PyChromecast"
-
-inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_9.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_9.2.0.bb
new file mode 100644
index 0000000..ebe1124
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_9.2.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Library for Python 3.6+ to communicate with the Google Chromecast."
+HOMEPAGE = "https://github.com/balloob/pychromecast"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b1dbd4e85f47b389bdadee9c694669f5"
+
+SRC_URI[sha256sum] = "6d34593575cf77565df47af4c75dd47c6a65831ec18a8c10b5367b2f1c172f0a"
+
+PYPI_PACKAGE = "PyChromecast"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-zeroconf \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-requests \
+    ${PYTHON_PN}-protobuf \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.143.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.144.bb
similarity index 92%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.143.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.144.bb
index 1e3ef27..1e97b27 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.143.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.144.bb
@@ -4,7 +4,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=a3639cf5780f71b125d3e9d1dc127c20"
 
 SRC_URI = "git://github.com/MISP/PyMISP.git;protocol=https;branch=main"
-SRCREV = "c2e9663765e83f1a4aa70099546bec653ed770e7"
+SRCREV = "7dbaf665d9288f2a2692bee3d6207bb6abe3c51f"
 S = "${WORKDIR}/git"
 
 inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.17.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.17.3.bb
deleted file mode 100644
index 72736c8..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.17.3.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "Persistent/Immutable/Functional data structures for Python"
-HOMEPAGE = "https://github.com/tobgu/pyrsistent"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENCE.mit;md5=ca574f2891cf528b3e7a2ee570337e7c"
-
-SRC_URI[md5sum] = "cd38658ea772a7f9b12b6f9485a7018b"
-SRC_URI[sha256sum] = "2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e"
-
-inherit pypi setuptools3
-
-RDEPENDS_${PN} += " \
-    ${PYTHON_PN}-numbers \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.18.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.18.0.bb
new file mode 100644
index 0000000..7b79228
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.18.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Persistent/Immutable/Functional data structures for Python"
+HOMEPAGE = "https://github.com/tobgu/pyrsistent"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.mit;md5=a4b94c2b800b582a8d3925a9939cbf44"
+
+SRC_URI[sha256sum] = "773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-numbers \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pysonos_0.0.50.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pysonos_0.0.53.bb
similarity index 79%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pysonos_0.0.50.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pysonos_0.0.53.bb
index cfa0d6e..dc7f676 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pysonos_0.0.50.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pysonos_0.0.53.bb
@@ -4,7 +4,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=07b0e2ca9ac77cd65cd4edf2e13367ea"
 
-SRC_URI[sha256sum] = "15a583b819c1e758cca72d5e148d59dd3bf7c9d59f19b5e79ab38c743c3e0738"
+SRC_URI[sha256sum] = "e24ea33f4ab810ff5e698d5e577d382413a2994565439ebc67fb42614f899e93"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-benchmark_3.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-benchmark_3.4.1.bb
new file mode 100644
index 0000000..5fb11dd
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-benchmark_3.4.1.bb
@@ -0,0 +1,15 @@
+# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "A ``pytest`` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer."
+HOMEPAGE = "https://github.com/ionelmc/pytest-benchmark"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9c5c2c74370826468065c5702b8a1fcf"
+
+SRC_URI[sha256sum] = "40e263f912de5a81d891619032983557d62a3d85843f9a9f30b98baea0cd7b47"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-core python3-py-cpuinfo python3-pytest python3-aspectlib"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-cache_1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-cache_1.0.bb
new file mode 100644
index 0000000..4ce91dd
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-cache_1.0.bb
@@ -0,0 +1,15 @@
+# Copyright (C) 2021 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "pytest plugin with mechanisms for caching across test runs"
+HOMEPAGE = "http://bitbucket.org/hpk42/pytest-cache/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6bb0320b04a0a503f12f69fea479de9"
+
+SRC_URI[sha256sum] = "be7468edd4d3d83f1e844959fd6e3fd28e77a481440a7118d430130ea31b07a9"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-core python3-execnet python3-pprint python3-py python3-pytest"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pythonping_1.0.16.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pythonping_1.1.0.bb
similarity index 68%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pythonping_1.0.16.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pythonping_1.1.0.bb
index 5affb93..fd66a6f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pythonping_1.0.16.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pythonping_1.1.0.bb
@@ -4,8 +4,7 @@
 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-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.2.1.bb
similarity index 66%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.1.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.2.1.bb
index a8c7031..30b2c6d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.1.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.2.1.bb
@@ -5,8 +5,14 @@
 
 DEPENDS += "libusb1 ${PYTHON_PN}-setuptools-scm-native"
 
-SRC_URI[sha256sum] = "7d449ad916ce58aff60b89aae0b65ac130f289c24d6a5b7b317742eccffafc38"
+RDEPENDS_${PN} += " \
+	python3-logging \
+"
+
+SRC_URI[sha256sum] = "a4cc7404a203144754164b8b40994e2849fde1cfff06b08492f12fff9d9de7b9"
 
 inherit pypi setuptools3
 
+RDEPENDS_${PN} += "libusb1"
+
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-qrcode_6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-qrcode_7.1.bb
similarity index 73%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-qrcode_6.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-qrcode_7.1.bb
index df99d40..329bf3e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-qrcode_6.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-qrcode_7.1.bb
@@ -4,7 +4,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=4b802d2a65df4626623c79757f486af9"
 
 PYPI_PACKAGE = "qrcode"
-SRC_URI[sha256sum] = "505253854f607f2abf4d16092c61d4e9d511a3b4392e60bff957a68592b04369"
+SRC_URI[sha256sum] = "59ba630fa2adb637b06571e6ceec1bb0ecf372c458c4447ceba763061bd3af72"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2021.4.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2021.7.6.bb
similarity index 69%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2021.4.4.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2021.7.6.bb
index 177b06b..458236d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2021.4.4.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2021.7.6.bb
@@ -5,6 +5,10 @@
 
 inherit pypi setuptools3
 
-SRC_URI[sha256sum] = "52ba3d3f9b942c49d7e4bc105bb28551c44065f139a65062ab7912bef10c9afb"
+SRC_URI[sha256sum] = "8394e266005f2d8c6f0bc6780001f7afa3ef81a7a2111fa35058ded6fce79e4d"
+
+RDEPENDS_${PN} += " \
+	python3-stringold \
+"
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-requests/setup.py-Support-idna-version-3.1.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-requests/setup.py-Support-idna-version-3.1.patch
deleted file mode 100644
index 2633224..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-requests/setup.py-Support-idna-version-3.1.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From fc45beed40a86c8fc38fc430765c1c5d2c9961c2 Mon Sep 17 00:00:00 2001
-From: Fabio Berton <fabio.berton@ossystems.com.br>
-Date: Thu, 4 Mar 2021 09:26:48 -0300
-Subject: [PATCH] setup.py: Support idna version 3.1
-Organization: O.S. Systems Software LTDA.
-
-Change idna required version to use python3-idna recipe that currently
-is on version 3.1.
-
-Without this change python-request doesn't work as the idna version
-doesn't match the required versions. When bump python-request recipe,
-verify if the upstream project bumped the idna version and drop this
-patch.
-
-As this recipe was tested with python3-idna_3.1 don't allow higher
-versions.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
----
- setup.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/setup.py b/setup.py
-index 7ba4b2a2..9d3b973e 100755
---- a/setup.py
-+++ b/setup.py
-@@ -43,7 +43,7 @@ packages = ['requests']
- 
- requires = [
-     'chardet>=3.0.2,<5',
--    'idna>=2.5,<3',
-+    'idna>=2.5,<3.2',
-     'urllib3>=1.21.1,<1.27',
-     'certifi>=2017.4.17'
- 
--- 
-2.30.1
-
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.25.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.26.0.bb
similarity index 78%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.25.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.26.0.bb
index cea8fd5..95e6e1a 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.25.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.26.0.bb
@@ -3,9 +3,7 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=34400b68072d710fecd0a2940a0d1658"
 
-SRC_URI += "file://setup.py-Support-idna-version-3.1.patch"
-
-SRC_URI[sha256sum] = "27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"
+SRC_URI[sha256sum] = "b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.10.bb
similarity index 74%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.7.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.10.bb
index 5da0ac3..3414ed0 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.7.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.17.10.bb
@@ -8,9 +8,11 @@
 
 inherit pypi setuptools3
 
-BBCLASSEXTEND = "native nativesdk"
+SRC_URI[sha256sum] = "106bc8d6dc6a0ff7c9196a47570432036f41d556b779c6b4e618085f57e39e67"
 
-SRC_URI[sha256sum] = "5c3fa739bbedd2f23769656784e671c6335d17a5bf163c3c3901d8663c0af287"
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-shell \
+"
 
 do_install_prepend() {
     export RUAMEL_NO_PIP_INSTALL_CHECK=1
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.17.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.18.bb
similarity index 79%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.17.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.18.bb
index bcd5891..da31300 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.17.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.18.bb
@@ -5,7 +5,7 @@
 
 SRC_URI += "file://0001-py-scrypt-remove-the-hard-coded-include-paths.patch"
 
-SRC_URI[sha256sum] = "25b5075f2238be93af1cd574540a5ea01b8547f9b678aa72d22fce22577475ec"
+SRC_URI[sha256sum] = "bcf04257af12e6d52974d177a7b08e314b66f350a73f9b6f7b232d69a6a1e041"
 
 inherit pypi ptest setuptools3 dos2unix
 
@@ -17,6 +17,10 @@
     ${PYTHON_PN}-pytest \
 "
 
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-ctypes \
+"
+
 do_install_ptest() {
     install -d ${D}${PTEST_PATH}/tests
     cp -rf ${S}/scrypt/tests/* ${D}${PTEST_PATH}/tests/
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.2.0.bb
similarity index 82%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.1.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.2.0.bb
index 89c659d..e86ff46 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.1.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.2.0.bb
@@ -7,7 +7,7 @@
 
 RDEPENDS_${PN} += "python3-urllib3"
 
-SRC_URI[sha256sum] = "c1227d38dca315ba35182373f129c3e2722e8ed999e52584e6aca7d287870739"
+SRC_URI[sha256sum] = "9907adbdd30a55b818914512cc143e6beae0bb3ba78b2649f4b079752eb0e424"
 
 PYPI_PACKAGE = "sentry-sdk"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.15.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.20.bb
similarity index 86%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.15.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.20.bb
index 2d7273b..b96cdd3 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.15.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.4.20.bb
@@ -4,7 +4,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3359ed561ac16aaa25b6c6eff84df595"
 
-SRC_URI[sha256sum] = "0ff100c75cd175f35f4d24375a0b3d82461f5b1af5fc8d112ef0e5ceea8049e6"
+SRC_URI[sha256sum] = "38ee3a266afef2978e82824650457f70c5d74ec0cadec1b10fe5ed6f038eb5d0"
 
 PYPI_PACKAGE = "SQLAlchemy"
 inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.4.bb
similarity index 64%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.3.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.4.bb
index 03ebd01..6916a72 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.4.bb
@@ -5,7 +5,6 @@
 
 inherit pypi setuptools3
 
-SRC_URI[md5sum] = "68e6b31d36f5c20221da7d5db3eca772"
-SRC_URI[sha256sum] = "ce0faf21aa77d806bbff22b107cc22cce68dc9438f97a2df32c93e9afa4ce436"
+SRC_URI[sha256sum] = "42ee7b9e15f7b225747c3fa08f43c5d6c83bc899f80ff9bae9319334824076e9"
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.61.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.61.2.bb
similarity index 67%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.61.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.61.2.bb
index 0c04b67..1e127f7 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.61.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.61.2.bb
@@ -5,10 +5,15 @@
 LICENSE = "MIT & MPL-2.0"
 LIC_FILES_CHKSUM = "file://LICENCE;md5=59e4271a933d33edfe60237db377a14b"
 
-SRC_URI[sha256sum] = "cd5791b5d7c3f2f1819efc81d36eb719a38e0906a7380365c556779f585ea042"
+SRC_URI[sha256sum] = "8bb94db0d4468fea27d004a0f1d1c02da3cdedc00fe491c0de986b76a04d6b0a"
 
 inherit pypi setuptools3
 
 DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
 
+RDEPENDS_${PN} += " \
+	python3-logging \
+	python3-numbers \
+"
+
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_2.12.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_2.12.1.bb
similarity index 87%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_2.12.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_2.12.1.bb
index 148806e..8030676 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_2.12.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_2.12.1.bb
@@ -3,7 +3,7 @@
 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-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.26.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.26.6.bb
similarity index 86%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.26.5.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.26.6.bb
index f2fb33c..f9b49fe 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.26.5.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.26.6.bb
@@ -3,7 +3,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c2823cb995439c984fd62a973d79815c"
 
-SRC_URI[sha256sum] = "a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098"
+SRC_URI[sha256sum] = "f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-watchdog_2.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-watchdog_2.1.3.bb
similarity index 80%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-watchdog_2.1.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-watchdog_2.1.3.bb
index c2bf68a..ba0fdf1 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-watchdog_2.1.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-watchdog_2.1.3.bb
@@ -4,7 +4,7 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
-SRC_URI[sha256sum] = "0237db4d9024859bea27d0efb59fe75eef290833fd988b8ead7a879b0308c2db"
+SRC_URI[sha256sum] = "e5236a8e8602ab6db4b873664c2d356c365ab3cac96fbdec4970ad616415dd45"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.1.0.bb
similarity index 82%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.0.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.1.0.bb
index da4e05f..b46392a 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.0.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.1.0.bb
@@ -7,7 +7,7 @@
 LICENSE = "LGPLv2.1"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=c96ca6c1de8adc025adfada81d06fba5"
 
-SRC_URI[sha256sum] = "3e2bf58191d4619b161389a95bdce84ce9e0b24eb8107e7e590db682c2d0ca81"
+SRC_URI[sha256sum] = "b68e4959d704768fa20e35c9d508c8dc2bbc041fd8d267c0d7345cffe2824568"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_1.4.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_1.4.4.bb
similarity index 82%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_1.4.3.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_1.4.4.bb
index e6b1969..64ab8af 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_1.4.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_1.4.4.bb
@@ -16,6 +16,6 @@
 	python3-io \
 "
 
-SRC_URI[sha256sum] = "641db6e7b4f4982fd407a3f372f45b878766098250d26963e95e50121168cbe2"
+SRC_URI[sha256sum] = "791567acccc485ba76e0b84bccced2651981171de5b47d541520416f2f9f93e3"
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-yamlloader_1.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-yamlloader_1.1.0.bb
similarity index 76%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-yamlloader_1.0.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-yamlloader_1.1.0.bb
index a2483a6..25e7eda 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-yamlloader_1.0.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-yamlloader_1.1.0.bb
@@ -3,7 +3,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=6831ef36faa29329bce2420c5356f97e"
 
-SRC_URI[sha256sum] = "e96dc3dc6895d814c330c054c966d993fc81ef1dbf5a30a4bdafeb256359e058"
+SRC_URI[sha256sum] = "8a297c7a197683ba02e5e2b882ffd6c6180d01bdefb534b69cd3962df020bfe6"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi/0001-Fix-imports-for-ptests.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi/0001-Fix-imports-for-ptests.patch
new file mode 100644
index 0000000..fa58897
--- /dev/null
+++ b/meta-openembedded/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-openembedded/meta-python/recipes-devtools/python/python3-yappi_1.3.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_1.3.2.bb
index 7c3f0fd..8a1aca2 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_1.3.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_1.3.2.bb
@@ -8,6 +8,7 @@
 
 SRC_URI += " \
     file://run-ptest \
+    file://0001-Fix-imports-for-ptests.patch \
 "
 
 inherit pypi setuptools3 ptest
@@ -19,9 +20,11 @@
 "
 
 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-openembedded/meta-python/recipes-devtools/python/python3-yarl/0001-Drop-tests-for-semicolon-as-a-separator.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-yarl/0001-Drop-tests-for-semicolon-as-a-separator.patch
new file mode 100644
index 0000000..1a9d5d0
--- /dev/null
+++ b/meta-openembedded/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-openembedded/meta-python/recipes-devtools/python/python3-yarl_1.6.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-yarl_1.6.3.bb
index 01682a4..e0e2626 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-yarl_1.6.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-yarl_1.6.3.bb
@@ -7,6 +7,7 @@
 
 SRC_URI += " \
     file://run-ptest \
+    file://0001-Drop-tests-for-semicolon-as-a-separator.patch \
 "
 
 PYPI_PACKAGE = "yarl"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.33.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.33.1.bb
new file mode 100644
index 0000000..a0af842
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.33.1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Pure Python Multicast DNS Service Discovery Library (Bonjour/Avahi compatible)"
+HOMEPAGE = "https://github.com/jstasiak/python-zeroconf"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bb705b228ea4a14ea2728215b780d80"
+
+SRC_URI[sha256sum] = "ac88738639669f924859a4e01d9742f3783e619e710103f4a0d321a47f260fd2"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-ifaddr \
+    ${PYTHON_PN}-asyncio \
+"
