[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/COPYING.MIT b/cap/zx297520v3/sources/meta-openembedded/meta-python/COPYING.MIT
new file mode 100644
index 0000000..fb950dc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/COPYING.MIT
@@ -0,0 +1,17 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy 
+of this software and associated documentation files (the "Software"), to deal 
+in the Software without restriction, including without limitation the rights 
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the Software is 
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in 
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
+THE SOFTWARE.
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/README b/cap/zx297520v3/sources/meta-openembedded/meta-python/README
new file mode 100644
index 0000000..237dff3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/README
@@ -0,0 +1,47 @@
+meta-python
+================================
+
+Introduction
+-------------------------
+
+This layer is intended to be the home of python modules for OpenEmbedded.
+
+Dependencies
+-------------------------
+
+The meta-python layer depends on:
+
+	URI: git://git.openembedded.org/openembedded-core
+	layers: meta
+	branch: dunfell
+	revision: HEAD
+
+	URI: git://git.openembedded.org/meta-openembedded
+	layers: meta-oe
+	branch: dunfell
+	revision: HEAD
+
+Please follow the recommended setup procedures of your OE distribution.
+For Angstrom that is:
+        http://www.angstrom-distribution.org/building-angstrom,
+other distros should have similar online resources.
+
+Contributing
+-------------------------
+
+The meta-openembedded mailinglist
+(openembedded-devel@lists.openembedded.org) is used for questions,
+comments and patch review. It is subscriber only, so please register
+before posting.
+
+Send pull requests to openembedded-devel@lists.openembedded.org with
+'[meta-python][dunfell]' in the subject.
+
+When sending single patches, please use something like: 
+'git send-email -M -1 --to=openembedded-devel@lists.openembedded.org --subject-prefix=meta-python][dunfell][PATCH'
+
+Maintenance
+-------------------------
+
+dunfell Maintainers: Armin Kuster <akuster808@gmail.com>
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/classes/bandit.bbclass b/cap/zx297520v3/sources/meta-openembedded/meta-python/classes/bandit.bbclass
new file mode 100644
index 0000000..dc1041e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/classes/bandit.bbclass
@@ -0,0 +1,63 @@
+# Class to scan Python code for security issues, using Bandit.
+#
+# $ bitbake python-foo -c bandit
+#
+# Writes the report to $DEPLOY_DIR/bandit/python-foo.html.
+# No output if no issues found, a warning if issues found.
+#
+# https://github.com/PyCQA/bandit
+
+# Default location of sources, based on standard distutils
+BANDIT_SOURCE ?= "${S}/build"
+
+# The report format to use.
+# https://bandit.readthedocs.io/en/latest/formatters/index.html
+BANDIT_FORMAT ?= "html"
+
+# Whether a scan should be done every time the recipe is built.
+#
+# By default the scanning needs to be done explicitly, but by setting BANDIT_AUTO
+# to 1 the scan will be done whenever the recipe it built.  Note that you
+# shouldn't set BANDIT_AUTO to 1 globally as it will then try to scan every
+# recipe, including non-Python recipes, causing circular loops.
+BANDIT_AUTO ?= "0"
+
+# Whether Bandit finding issues results in a warning (0) or an error (1).
+BANDIT_FATAL ?= "0"
+
+do_bandit[depends] = "python3-bandit-native:do_populate_sysroot"
+python do_bandit() {
+    import os, subprocess
+    try:
+        report = d.expand("${DEPLOY_DIR}/bandit/${PN}-${PV}.${BANDIT_FORMAT}")
+        os.makedirs(os.path.dirname(report), exist_ok=True)
+
+        args = ("bandit",
+                "--format", d.getVar("BANDIT_FORMAT"),
+                "--output", report,
+                "-ll",
+                "--recursive", d.getVar("BANDIT_SOURCE"))
+        subprocess.check_output(args, stderr=subprocess.STDOUT)
+        bb.note("Bandit found no issues (report written to %s)" % report)
+    except subprocess.CalledProcessError as e:
+        if e.returncode == 1:
+            if oe.types.boolean(d.getVar("BANDIT_FATAL")):
+                bb.error("Bandit found issues (report written to %s)" % report)
+            else:
+                bb.warn("Bandit found issues (report written to %s)" % report)
+        else:
+            bb.error("Bandit failed:\n" + e.output.decode("utf-8"))
+}
+
+python() {
+    before = "do_build"
+    after = "do_compile"
+
+    if oe.types.boolean(d.getVar("BANDIT_AUTO")):
+        bb.build.addtask("do_bandit", before, after, d)
+    else:
+        bb.build.addtask("do_bandit", None, after, d)
+}
+
+# TODO: store report in sstate
+# TODO: a way to pass extra args or .bandit file, basically control -ll
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/conf/layer.conf b/cap/zx297520v3/sources/meta-openembedded/meta-python/conf/layer.conf
new file mode 100644
index 0000000..0dbc429
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/conf/layer.conf
@@ -0,0 +1,19 @@
+# We might have a conf and classes directory, append to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes*/*/*.bb ${LAYERDIR}/recipes*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "meta-python"
+BBFILE_PATTERN_meta-python := "^${LAYERDIR}/"
+BBFILE_PRIORITY_meta-python = "7"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_meta-python = "1"
+
+LAYERDEPENDS_meta-python = "core (>= 12) openembedded-layer"
+
+LAYERSERIES_COMPAT_meta-python = "thud warrior zeus dunfell"
+
+LICENSE_PATH += "${LAYERDIR}/licenses"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/licenses/LLNL b/cap/zx297520v3/sources/meta-openembedded/meta-python/licenses/LLNL
new file mode 100644
index 0000000..1127d56
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/licenses/LLNL
@@ -0,0 +1,16 @@
+Legal Notice
+
+*** Legal Notice for all LLNL-contributed files ***
+
+Copyright (c) 1996. The Regents of the University of California. All rights reserved.
+
+Permission to use, copy, modify, and distribute this software for any purpose without
+fee is hereby granted, provided that this entire notice is included in all copies of any software which is or includes a copy or modification of this software and in all copies of the supporting documentation for such software.
+
+This work was produced at the University of California, Lawrence Livermore National
+Laboratory under contract no. W-7405-ENG-48 between the U.S. Department of Energy and The Regents of the University of California for the operation of UC LLNL.
+
+DISCLAIMER
+
+This software was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the University of California nor any of their employees, makes any warranty, express or implied, or assumes any liability or responsibility for the accuracy, completeness, or usefulness of any
+information, apparatus, product, or process disclosed, or represents that its use would not infringe privately-owned rights. Reference herein to any specific commercial products, process, or service by trade name, trademark, manufacturer, or otherwise, does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government or the University of California. The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or the University of California, and shall not be used for advertising or product endorsement purposes.
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/licenses/Unicode b/cap/zx297520v3/sources/meta-openembedded/meta-python/licenses/Unicode
new file mode 100644
index 0000000..5d2cc4a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/licenses/Unicode
@@ -0,0 +1,37 @@
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright 1991-2015 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in
+http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software,
+(b) this copyright and permission notice appear in associated
+documentation, and
+(c) there is clear notice in each modified Data File or in the Software
+as well as in the documentation associated with the Data File(s) or
+Software that the data or software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/80oe.conf.in b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/80oe.conf.in
new file mode 100644
index 0000000..4503da4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/80oe.conf.in
@@ -0,0 +1,24 @@
+// Some custom Gate One settings for OpenEmbedded
+{
+    "*": {
+        "gateone": { // These settings apply to all of Gate One
+            "log_file_prefix": "@localstate@/log/gateone.log", // default would be /var/log/gateone/gateone.log
+            "log_file_max_size": 5242880, // 5 megabyte logs for OE by default (default would normally be 100Mb)
+            "log_file_num_backups": 2, // Default is normally 10
+            "origins": ["*"], // Every device has a unique origin
+            "logging": "info",
+            "pid_file": "/run/gateone.pid",
+            "session_dir": "/tmp/gateone",
+            "user_dir": "@localstate@/lib/gateone/users"
+        },
+        "terminal": {
+            // Disabling session logging for embedded devices is a good idea (limited/slow storage)
+            "session_logging": false,
+            "syslog_session_logging": false
+//             "commands": {
+//                 // For some reason this doesn't work (never asks for the password)
+//                 "login": "setsid /bin/login" // Normally this would emulate logging into the host console
+//             }
+        }
+    }
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-avahi.service b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-avahi.service
new file mode 100644
index 0000000..0f613d1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-avahi.service
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
+<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
+
+<service-group>
+  <name replace-wildcards="yes">GateOne on %h</name>
+  <service>
+    <type>_https._tcp</type>
+    <port>443</port>
+  </service>
+</service-group>
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-init.in b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-init.in
new file mode 100644
index 0000000..86d655c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-init.in
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+### BEGIN INIT INFO
+# Provides:          gateone
+# Required-Start:    networking
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Gateone HTML5 ssh client
+# Description:       Gateone HTML5 terminal emulator and SSH client.
+### END INIT INFO
+
+. /etc/init.d/functions
+
+NAME=gateone
+DAEMON=@bindir@/gateone
+PIDFILE=/run/gateone.pid
+WORKDIR=@localstate@/lib/gateone
+
+do_start() {
+    cd $WORKDIR
+    @bindir@/python $DAEMON > /dev/null 2>&1 &
+    cd $OLDPWD
+}
+
+do_stop() {
+    kill -TERM `cat $PIDFILE`
+}
+
+case "$1" in
+    start)
+        echo "Starting gateone"
+        do_start
+        ;;
+    stop)
+        echo "Stopping gateone"
+        do_stop
+        ;;
+    restart|force-reload)
+        echo "Restart gateone"
+        do_stop
+        sleep 1
+        do_start
+        ;;
+    *)
+        echo "Usage: $0 {start|stop|restart|force-reload}" >&2
+        exit 1
+        ;;
+esac
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone.service.in b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone.service.in
new file mode 100644
index 0000000..4466727
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone.service.in
@@ -0,0 +1,10 @@
+[Unit]
+Description=GateOne daemon
+ConditionPathExists=|@localstate@/lib/gateone
+
+[Service]
+WorkingDirectory=@localstate@/lib/gateone
+ExecStart=@bindir@/python @bindir@/gateone
+
+[Install]
+WantedBy=multi-user.target
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool.inc
new file mode 100644
index 0000000..11971dc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool.inc
@@ -0,0 +1,12 @@
+SUMMARY = "A simple connection pool for gevent"
+DESCRIPTION = "creates a pool of connections that can be used with gevent"
+HOMEPAGE = "https://github.com/studio-ousia/gsocketpool"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ba825394aec026b5f94edca44426859"
+DEPENDS += "${PYTHON_PN}-gevent"
+RDEPENDS_${PN} += "${PYTHON_PN}-gevent"
+
+SRC_URI[md5sum] = "49f5f292ef1b60944ae92ca426a5e550"
+SRC_URI[sha256sum] = "f2e2749aceadce6b27ca52e2b0a64af99797746a8681e1a2963f72007c14cb14"
+
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb
new file mode 100644
index 0000000..883621e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb
@@ -0,0 +1,2 @@
+require python-gsocketpool.inc
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-h2/python-h2.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-h2/python-h2.inc
new file mode 100644
index 0000000..c457836
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-h2/python-h2.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "HTTP/2 State-Machine based protocol implementation"
+HOMEPAGE = "https://github.com/python-hyper/hyper-h2"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b6b2f6bbe76528af543242d606c14851"
+
+SRC_URI[md5sum] = "950b5a62a2a608dc4547a01edf99aa8f"
+SRC_URI[sha256sum] = "b8a32bd282594424c0ac55845377eea13fa54fe4a8db012f3a198ed923dc3ab4"
+
+inherit pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-hpack ${PYTHON_PN}-hyperframe"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-h2/python3-h2_3.1.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-h2/python3-h2_3.1.1.bb
new file mode 100644
index 0000000..7230a27
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-h2/python3-h2_3.1.1.bb
@@ -0,0 +1,3 @@
+require python-h2.inc
+
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python-hpack.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python-hpack.inc
new file mode 100644
index 0000000..eccfa8c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python-hpack.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "Pure-Python HPACK header compression"
+HOMEPAGE = "https://github.com/python-hyper/hpack"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5bf1c68e73fbaec2b1687b7e71514393"
+
+SRC_URI[md5sum] = "556b0ae66180f54c2ce8029a0952088b"
+SRC_URI[sha256sum] = "8eec9c1f4bfae3408a3f30500261f7e6a65912dc138526ea054f9ad98892e9d2"
+
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python3-hpack_3.0.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python3-hpack_3.0.0.bb
new file mode 100644
index 0000000..e196c55
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python3-hpack_3.0.0.bb
@@ -0,0 +1,3 @@
+require python-hpack.inc
+
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python-hyperframe.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python-hyperframe.inc
new file mode 100644
index 0000000..0066bf8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python-hyperframe.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "HTTP/2 framing layer for Python"
+HOMEPAGE = "https://github.com/python-hyper/hyperframe"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5bf1c68e73fbaec2b1687b7e71514393"
+
+SRC_URI[md5sum] = "6919183242feb26d8bce3b4cba81defd"
+SRC_URI[sha256sum] = "a9f5c17f2cc3c719b917c4f33ed1c61bd1f8dfac4b1bd23b7c80b3400971b41f"
+
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python3-hyperframe_5.2.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python3-hyperframe_5.2.0.bb
new file mode 100644
index 0000000..f10fb6d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python3-hyperframe_5.2.0.bb
@@ -0,0 +1,3 @@
+require python-hyperframe.inc
+
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc.inc
new file mode 100644
index 0000000..e9eebe8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc.inc
@@ -0,0 +1,13 @@
+SUMMARY = "A gevent based messagpack rpc library"
+DESCRIPTION = "mprpc is a fast implementation of the messagepack rpc protocol for python. \
+It is based on gevent for handling connections and enabling concurrent connections."
+HOMEPAGE = "https://github.com/studio-ousia/mprpc"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ba825394aec026b5f94edca44426859"
+DEPENDS += "${PYTHON_PN}-gevent"
+RDEPENDS_${PN} += "${PYTHON_PN}-gevent ${PYTHON_PN}-msgpack ${PYTHON_PN}-gsocketpool"
+
+SRC_URI[md5sum] = "8d97961051422f3de315613434982d3b"
+SRC_URI[sha256sum] = "3589fd127482e291b1ec314d6f0e55cc13311c12932ace356d6178ea1ca28f6a"
+
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.17.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.17.bb
new file mode 100644
index 0000000..837d604
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.17.bb
@@ -0,0 +1,2 @@
+require python-mprpc.inc
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-priority/python-priority.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-priority/python-priority.inc
new file mode 100644
index 0000000..aa93819
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-priority/python-priority.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "A pure-Python implementation of the HTTP/2 priority tree"
+HOMEPAGE = "https://github.com/python-hyper/priority"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae57d8a09fc8b6b164d7357339619045"
+
+SRC_URI[md5sum] = "4f1ff52f7fa448e9d9cb46337ae86d1e"
+SRC_URI[sha256sum] = "6bc1961a6d7fcacbfc337769f1a382c8e746566aaa365e78047abe9f66b2ffbe"
+
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-priority/python3-priority_1.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-priority/python3-priority_1.3.0.bb
new file mode 100644
index 0000000..fe756b5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-priority/python3-priority_1.3.0.bb
@@ -0,0 +1,3 @@
+require python-priority.inc
+
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pyconnman/python-pyconnman.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pyconnman/python-pyconnman.inc
new file mode 100644
index 0000000..8517079
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pyconnman/python-pyconnman.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "Python-based Network Connectivity Management"
+HOMEPAGE = "https://pypi.python.org/pypi/pyconnman/"
+LICENSE = "Apache-2.0"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[md5sum] = "d60bdffbd9c920f005fdc5e05a8b94cd"
+SRC_URI[sha256sum] = "d3a63a039c82b08a1171b003eafa62c6f128aa4eaa1ce7a55a9401b48f9ad926"
+
+inherit pypi
+
+RDEPENDS_${PN} = "connman"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pyconnman/python3-pyconnman_0.2.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pyconnman/python3-pyconnman_0.2.0.bb
new file mode 100644
index 0000000..e0f3fdd
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pyconnman/python3-pyconnman_0.2.0.bb
@@ -0,0 +1,5 @@
+require python-pyconnman.inc
+
+inherit setuptools3
+
+RDEPENDS_${PN} += "python3-dbus python3-pprint"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pyro4/python3-pyro4_4.77.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pyro4/python3-pyro4_4.77.bb
new file mode 100644
index 0000000..ffe58ee
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pyro4/python3-pyro4_4.77.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Python Remote Objects"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cd13dafd4eeb0802bb6efea6b4a4bdbc"
+
+SRC_URI[md5sum] = "21f015ae93cf9ea2bbbc418a2267e9fb"
+SRC_URI[sha256sum] = "2bfe12a22f396474b0e57c898c7e2c561a8f850bf2055d8cf0f7119f0c7a523f"
+
+PYPI_PACKAGE = "Pyro4"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-serpent \
+    ${PYTHON_PN}-threading \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun.inc
new file mode 100644
index 0000000..3991a83
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun.inc
@@ -0,0 +1,10 @@
+SUMMARY = "Python TUN/TAP tunnel module"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=13f7629e8e4989b66b4a913ab05a91de"
+
+SRC_URI[md5sum] = "adcaeea56d0ed06814487cdbde32d198"
+SRC_URI[sha256sum] = "5ead86b3391acef239535ebcabeb04d2cdc6b40ab14580d28c6da193c2d1fe53"
+
+PYPI_PACKAGE = "python-pytun"
+
+inherit pypi 
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python3-pytun_2.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python3-pytun_2.3.0.bb
new file mode 100644
index 0000000..938d9d7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python3-pytun_2.3.0.bb
@@ -0,0 +1,2 @@
+require python-pytun.inc
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-thrift/python3-thrift_0.13.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-thrift/python3-thrift_0.13.0.bb
new file mode 100644
index 0000000..80f1a50
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-thrift/python3-thrift_0.13.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Python bindings for the Apache Thrift RPC system"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=e95cd2f17c70d3180a2b361332319fe0"
+
+SRC_URI[md5sum] = "c3bc8d9a910d2c9ce26f2ad1f7c96762"
+SRC_URI[sha256sum] = "9af1c86bf73433afc6010ed376a6c6aca2b54099cc0d61895f640870a9ae7d89"
+
+inherit pypi setuptools3
+
+# Use different filename to prevent conflicts with thrift itself
+PYPI_SRC_URI_append = ";downloadfilename=${BP}.${PYPI_PACKAGE_EXT}"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-stringold \
+    ${PYTHON_PN}-threading \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-txws/python3-txws_0.9.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-txws/python3-txws_0.9.1.bb
new file mode 100644
index 0000000..e235682
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/python-txws/python3-txws_0.9.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Twisted Web Sockets"
+HOMEPAGE = "https://github.com/MostAwesomeDude/txWS"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=76699830db7fa9e897f6a1ad05f98ec8"
+
+DEPENDS = "python3-twisted python3-six python3-vcversioner python3-six-native python3-vcversioner-native"
+
+SRC_URI = "git://github.com/MostAwesomeDude/txWS.git"
+SRCREV= "88cf6d9b9b685ffa1720644bd53c742afb10a414"
+
+S = "${WORKDIR}/git"
+
+inherit setuptools3
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3-0.15.19/parallel_make.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3-0.15.19/parallel_make.patch
new file mode 100644
index 0000000..2488246
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3-0.15.19/parallel_make.patch
@@ -0,0 +1,43 @@
+Add dependency of __init__.py
+
+Tasks must be done after exec of __init__, which creates the
+src/_generated directory that tasks are based on.
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+
+Upstream-Status: Submitted
+(However it seems that this project is out of maintanence.)
+
+diff -ruN telepathy-python-0.15.19-orig/src/Makefile.am telepathy-python-0.15.19/src/Makefile.am
+--- telepathy-python-0.15.19-orig/src/Makefile.am	2011-03-10 08:51:49.000000000 +0800
++++ telepathy-python-0.15.19/src/Makefile.am	2011-03-10 08:54:45.000000000 +0800
+@@ -39,17 +39,17 @@
+ XSLTPROC_OPTS = --nonet --novalid --xinclude
+ tools_dir = $(top_srcdir)/tools
+ 
+-_generated/interfaces.py: $(tools_dir)/python-interfaces-generator.xsl $(wildcard $(spec_dir)/*.xml)
++_generated/interfaces.py: _generated/__init__.py $(tools_dir)/python-interfaces-generator.xsl $(wildcard $(spec_dir)/*.xml)
+ 	$(AM_V_GEN)$(XSLTPROC) $(XSLTPROC_OPTS) -o $@ \
+ 	    $(tools_dir)/python-interfaces-generator.xsl \
+ 	    $(spec_dir)/all.xml
+ 
+-_generated/constants.py: $(tools_dir)/python-constants-generator.xsl $(wildcard $(spec_dir)/*.xml)
++_generated/constants.py: _generated/__init__.py $(tools_dir)/python-constants-generator.xsl $(wildcard $(spec_dir)/*.xml)
+ 	$(AM_V_GEN)$(XSLTPROC) $(XSLTPROC_OPTS) -o $@ \
+ 	    $(tools_dir)/python-constants-generator.xsl \
+ 	    $(spec_dir)/all.xml
+ 
+-_generated/errors.py: $(tools_dir)/python-errors-generator.xsl $(wildcard $(spec_dir)/*.xml)
++_generated/errors.py: _generated/__init__.py $(tools_dir)/python-errors-generator.xsl $(wildcard $(spec_dir)/*.xml)
+ 	$(AM_V_GEN)$(XSLTPROC) $(XSLTPROC_OPTS) -o $@ \
+ 	    $(tools_dir)/python-errors-generator.xsl \
+ 	    $(spec_dir)/all.xml
+@@ -58,7 +58,7 @@
+ 	$(AM_V_GEN)$(mkdir_p) $(dir $@)
+ 	@echo "# Placeholder for package" > $@
+ 
+-_generated/%.py: $(tools_dir)/spec-to-python.xsl $(spec_dir)/%.xml
++_generated/%.py: _generated/__init__.py $(tools_dir)/spec-to-python.xsl $(spec_dir)/%.xml
+ 	$(AM_V_GEN)$(XSLTPROC) $(XSLTPROC_OPTS) -o $@ \
+ 	    $(tools_dir)/spec-to-python.xsl \
+ 	    $(spec_dir)/$*.xml
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3-0.15.19/remove_duplicate_install.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3-0.15.19/remove_duplicate_install.patch
new file mode 100644
index 0000000..df95a4c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3-0.15.19/remove_duplicate_install.patch
@@ -0,0 +1,26 @@
+commit f6c67662145de889055a86a6b3b12c70a45fc8d5
+Author: Dongxiao Xu <dongxiao.xu@intel.com>
+Date:   Wed Sep 7 16:02:20 2011 +0800
+
+    Avoid duplicated installation of errors.py
+    
+    newer version of autotools don't seem to like listing files to install
+    twice. Remove one errors.py from the installation list.
+    
+    Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+    
+    Upstream-Status: Inappropirate [upstream inactive]
+    
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 5c27dfe..7536e43 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -11,7 +11,7 @@ telepathy_PYTHON = \
+ 
+ # telepathy._generated.* auto-generated modules
+ spec_dir = $(top_srcdir)/spec
+-spec_files := $(patsubst $(spec_dir)%.xml,_generated%.py,$(wildcard $(spec_dir)/*.xml))
++spec_files := $(filter-out _generated/errors.py, $(patsubst $(spec_dir)%.xml,_generated%.py,$(wildcard $(spec_dir)/*.xml)))
+ 
+ BUILT_SOURCES = \
+ 	_generated/interfaces.py \
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3-0.15.19/telepathy-python_fix_for_automake_1.12.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3-0.15.19/telepathy-python_fix_for_automake_1.12.patch
new file mode 100644
index 0000000..f613fdc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3-0.15.19/telepathy-python_fix_for_automake_1.12.patch
@@ -0,0 +1,26 @@
+Upstream-Status: Pending
+
+automake 1.12 has deprecated use of mkdir_p, and it recommends
+use of MKDIR_P instead. Changed the code to avoid these kind 
+of warning-errors.
+
+| make[1]: _generated/: Command not found
+| make[1]: *** [_generated/__init__.py] Error 127
+| make[1]: Leaving directory `/srv/home/nitin/builds2/build0/tmp/work/i586-poky-linux/telepathy-python-0.15.19-r4/telepathy-python-0.15.19/src'
+| make: *** [all-recursive] Error 1
+
+Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com>
+2012/07/10
+Index: telepathy-python-0.15.19/src/Makefile.am
+===================================================================
+--- telepathy-python-0.15.19.orig/src/Makefile.am
++++ telepathy-python-0.15.19/src/Makefile.am
+@@ -55,7 +55,7 @@ _generated/errors.py: _generated/__init_
+ 	    $(spec_dir)/all.xml
+ 
+ _generated/__init__.py:
+-	$(AM_V_GEN)$(mkdir_p) $(dir $@)
++	$(AM_V_GEN)$(MKDIR_P) $(dir $@)
+ 	@echo "# Placeholder for package" > $@
+ 
+ _generated/%.py: _generated/__init__.py $(tools_dir)/spec-to-python.xsl $(spec_dir)/%.xml
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3_0.15.19.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3_0.15.19.bb
new file mode 100644
index 0000000..d92e657
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python3_0.15.19.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Telepathy IM framework - Python package"
+HOMEPAGE = "http://telepathy.freedesktop.org/wiki/"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+                    file://src/utils.py;beginline=1;endline=17;md5=9a07d1a9791a7429a14e7b25c6c86822"
+
+DEPENDS = "libxslt-native"
+
+SRC_URI = "http://telepathy.freedesktop.org/releases/telepathy-python/telepathy-python-${PV}.tar.gz \
+           file://parallel_make.patch \
+           file://remove_duplicate_install.patch \
+           file://telepathy-python_fix_for_automake_1.12.patch"
+
+PR = "r6"
+
+S = "${WORKDIR}/telepathy-python-${PV}"
+
+inherit autotools python3native
+
+SRC_URI[md5sum] = "f7ca25ab3c88874015b7e9728f7f3017"
+SRC_URI[sha256sum] = "244c0e1bf4bbd78ae298ea659fe10bf3a73738db550156767cc2477aedf72376"
+
+FILES_${PN} += "\
+    ${libdir}/python*/site-packages/telepathy/*.py \
+    ${libdir}/python*/site-packages/telepathy/*/*.py \
+"
+
+do_install_append () {
+    rm -fr ${D}${libdir}/python*/site-packages/telepathy/__pycache__
+    rm -fr ${D}${libdir}/python*/site-packages/telepathy/__pycache__
+    rm -fr ${D}${libdir}/python*/site-packages/telepathy/*/__pycache__
+    rm -fr ${D}${libdir}/python*/site-packages/telepathy/*/__pycache__
+}
+RDEPENDS_${PN} += "python3-dbus"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/images/meta-python-image-base.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/images/meta-python-image-base.bb
new file mode 100644
index 0000000..81081e6
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/images/meta-python-image-base.bb
@@ -0,0 +1,7 @@
+SUMMARY = "meta-python build test image"
+
+IMAGE_INSTALL = "packagegroup-core-boot"
+
+LICENSE = "MIT"
+
+inherit core-image
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/images/meta-python-image.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/images/meta-python-image.bb
new file mode 100644
index 0000000..cc75fe6
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/images/meta-python-image.bb
@@ -0,0 +1,6 @@
+require  meta-python-image-base.bb
+
+SUMMARY = "meta-python build test image"
+
+IMAGE_INSTALL += "packagegroup-meta-python \
+                  packagegroup-meta-python3"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/images/meta-python-ptest-image.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/images/meta-python-ptest-image.bb
new file mode 100644
index 0000000..7ee1535
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/images/meta-python-ptest-image.bb
@@ -0,0 +1,5 @@
+require  meta-python-image-base.bb
+
+SUMMARY = "meta-python ptest test image"
+
+IMAGE_INSTALL += "packagegroup-meta-python-ptest"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb
new file mode 100644
index 0000000..12a0562
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb
@@ -0,0 +1,74 @@
+SUMMARY = "Meta-oe ptest packagegroups"
+
+inherit packagegroup
+
+PROVIDES = "${PACKAGES}"
+PACKAGES = ' \
+    packagegroup-meta-python3 \
+'
+
+RDEPENDS_packagegroup-meta-python3 = "\
+    packagegroup-meta-python3-extended \
+    packagegroup-meta-python3-connectivity \
+"
+
+RDEPENDS_packagegroup-meta-python3 = "\
+    python3-pyserial python3-gevent python3-alembic python3-robotframework-seriallibrary \
+    python3-rfc3987 python3-xlrd python3-bandit python3-constantly python3-inflection \
+    python3-javaobj-py3 python3-sh python3-pycrypto python3-pyasn1 python3-pydbus python3-wtforms \
+    python3-pybluez python3-babel python3-parse-type python3-bitarray python3-django-south \
+    python3-pyusb python3-prctl python3-jinja2 python3-werkzeug python3-pyjks python3-requests-ftp \
+    python3-behave python3-pyparsing python3-pyyaml python3-tzlocal python3-pretend python3-stevedore \
+    python3-sijax python3-langtable python3-requests-file python3-crcmod python3-robotframework \
+    python3-pint python3-coverage python3-iso8601 python3-ndg-httpsclient python3-yappi python3-twofish \
+    python3-speaklater python3-smbus python3-djangorestframework python3-msgpack python3-jsonpointer \
+    python3-flask-script python3-cassandra-driver python3-cython python3-ujson python3-aws-iot-device-sdk-python \
+    python3-pytest-runner python3-pyiface python3-docutils python3-flask-login python3-markupsafe python3-setuptools-scm \
+    python3-semver python3-sdnotify python3-flask-user python3-tornado python3-jsonpatch python3-pexpect \
+    python3-progress python3-jsonschema python3-xstatic python3-pyroute2 python3-idna python3-sqlalchemy \
+    python3-urllib3 python3-flask-mail python3-asn1crypto python3-pyinotify python3-intervals python3-pyperclip \
+    python3-flask-bootstrap python3-pyudev python3-decorator python3-pybind11 python3-pluggy python3-redis \
+    python3-pycryptodome python3-passlib python3-dominate python3-ply python3-ntplib python3-serpent python3-wrapt \
+    python3-attrs python3-appdirs python3-isort python3-evdev python3-incremental python3-click python3-flask-nav \
+    python3-webcolors python3-dateutil python3-blinker python3-hyperlink python3-lxml python3-pylint \
+    python3-flask-migrate python3-pytest-tempdir python3-flask-restful python3-feedformatter \
+    python3-pyasn1-modules python3-scapy python3-html5lib python3-dnspython python3-automat \
+    python3-itsdangerous python3-pandas python3-pyfirmata python3-protobuf  \
+    python3-flask-babel python3-anyjson python3-flask-xstatic python3-multidict python3-prompt-toolkit \
+    python3-periphery python3-greenlet python3-pytz python3-pyexpect python3-zopeinterface \
+    python3-bcrypt python3-xstatic-font-awesome python3-m2crypto python3-parse python3-attr \
+    python3-beautifulsoup4 python3-pycodestyle python3-oauthlib python3-grpcio python3-scrypt \
+    python3-pyjwt python3-astroid python3-flask-pymongo python3-wcwidth python3-lazy-object-proxy \
+    python3-websockets python3-pyzmq python3-pytest python3-chardet python3-vcversioner python3-whoosh \
+    python3-pymisp python3-certifi python3-psutil python3-flask-sqlalchemy python3-humanize \
+    python3-grpcio-tools python3-configparser python3-strict-rfc3339 python3-paho-mqtt \
+    python3-pytest-helpers-namespace python3-flask python3-flask-wtf python3-visitor python3-pynetlinux \
+    python3-requests python3-cryptography-vectors python3-spidev python3-pid python3-pymongo \
+    python3-future python3-django python3-unidiff python3-webencodings python3-can python3-pyalsaaudio \
+    python3-flask-sijax python3-cryptography python3-twisted python3-netaddr python3-pycparser \
+    python3-flask-uploads python3-pysocks python3-cffi python3-editor python3-ptyprocess \
+    python3-pyopenssl python3-ordered-set python3-simplejson python3-py \
+    ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "python3-systemd", "", d)} \
+"
+
+RDEPENDS_packagegroup-meta-python3-extended = "\
+    python3-pykickstart \
+    python3-meh \
+    python3-blivet \
+    python3-pywbem \
+    python3-pyparted \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "python3-blivetgui", "", d)} \
+"
+
+RDEPENDS_packagegroup-meta-python3-connectivity = "\
+    python3-pytun \
+    python3-mprpc \
+    python3-pyconnman \
+    python3-gsocketpool \
+"
+
+RDEPENDS_packagegroup-meta-python3-ptest = "\
+    python3-cryptography \
+    "
+
+EXCLUDE_FROM_WORLD = "1"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/gyp/gyp.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/gyp/gyp.inc
new file mode 100644
index 0000000..98ed42c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/gyp/gyp.inc
@@ -0,0 +1,13 @@
+DESCRIPTION = "GYP is a Meta-Build system: a build system that generates other build systems."
+HOMEPAGE = "https://gyp.gsrc.io/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ab828cb8ce4c62ee82945a11247b6bbd"
+SECTION = "devel"
+
+SRC_URI = "git://chromium.googlesource.com/external/gyp;protocol=https"
+SRCREV = "fcd686f1880fa52a1ee78d3e98af1b88cb334528"
+
+S = "${WORKDIR}/git"
+PV = "0.1+git${SRCPV}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/gyp/gyp_git.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/gyp/gyp_git.bb
new file mode 100644
index 0000000..8e48a27
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/gyp/gyp_git.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require gyp.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python-jsonref.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python-jsonref.inc
new file mode 100644
index 0000000..45deb09
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python-jsonref.inc
@@ -0,0 +1,11 @@
+SUMMARY = "jsonref is a library for automatic dereferencing of JSON Reference objects for Python"
+HOMEPAGE = "https://github.com/gazpachoking/jsonref"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a34264f25338d41744dca1abfe4eb18f"
+
+SRC_URI[md5sum] = "42b518b9ccd6852d1d709749bc96cb70"
+SRC_URI[sha256sum] = "f3c45b121cf6257eafabdc3a8008763aed1cd7da06dbabc59a9e4d2a5e4e6697"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_0.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_0.2.bb
new file mode 100644
index 0000000..d97893f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_0.2.bb
@@ -0,0 +1 @@
+require python-jsonref.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/pamela_0.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/pamela_0.3.0.bb
new file mode 100644
index 0000000..b6bee0c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/pamela_0.3.0.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Pamela: yet another Python wrapper for PAM"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=bfb663f37eb99232bc8ccfa4ea8f1202"
+
+SRC_URI[md5sum] = "de6516118d51eb5fc97017f3b6d5c68b"
+SRC_URI[sha256sum] = "1e198446a6cdd87704aa0def7621d62e7c20b0e6068e2788b9a866a8355e5d6b"
+
+PYPI_PACKAGE = "pamela"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "libpam"
+
+inherit features_check
+REQUIRED_DISTRO_FEATURES = "pam"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/pyrtm_0.4.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/pyrtm_0.4.2.bb
new file mode 100644
index 0000000..798daeb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/pyrtm_0.4.2.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Python interface for Remember The Milk API"
+AUTHOR = "Sridhar Ratnakumar / srid"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=a53cbc7cb75660694e138ba973c148df"
+
+PYPI_PACKAGE_EXT = "tar.bz2"
+
+SRC_URI[md5sum] = "7c87da94656b620dfe532ca63d642eb8"
+SRC_URI[sha256sum] = "b2d701b25ad3f9a1542057f3eb492c5c1d7dbe2b8d1e8f763043dcc14ee1d933"
+
+inherit pypi setuptools3
+
+PACKAGES =+ "${PN}-tests ${PN}-samples"
+
+FILES_${PN}-samples += " \
+    ${PYTHON_SITEPACKAGES_DIR}/rtm/samples \
+"
+
+FILES_${PN}-tests += " \
+    ${PYTHON_SITEPACKAGES_DIR}/rtm/tests \
+"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+"
+
+RDEPENDS_${PN}-samples += " \
+    ${PN} \
+"
+
+RDEPENDS_${PN}-tests += " \
+    ${PN} \
+    ${PYTHON_PN}-unittest \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-cython.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-cython.inc
new file mode 100644
index 0000000..3260e92
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-cython.inc
@@ -0,0 +1,40 @@
+DESCRIPTION = "Cython is a language specially designed for writing Python extension modules. \
+It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \
+and the messy, low-level world of C."
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e23fadd6ceef8c618fc1c65191d846fa"
+PYPI_PACKAGE = "Cython"
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[md5sum] = "6e2f139e30bb08d68366f9370d87964c"
+SRC_URI[sha256sum] = "e4d6bb8703d0319eb04b7319b12ea41580df44fd84d83ccda13ea463c6801414"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-misc \
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-pkgutil \
+    ${PYTHON_PN}-pyparsing \
+    ${PYTHON_PN}-setuptools \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-xml \
+"
+
+RDEPENDS_${PN}_class-nativesdk += "\
+    nativesdk-${PYTHON_PN}-misc \
+    nativesdk-${PYTHON_PN}-netserver \
+    nativesdk-${PYTHON_PN}-pkgutil \
+    nativesdk-${PYTHON_PN}-pyparsing \
+    nativesdk-${PYTHON_PN}-setuptools \
+    nativesdk-${PYTHON_PN}-shell \
+    nativesdk-${PYTHON_PN}-xml \
+"
+
+do_install_append() {
+	# Make sure we use /usr/bin/env python
+	for PYTHSCRIPT in `grep -rIl '^#!.*python' ${D}`; do
+		sed -i -e '1s|^#!.*|#!/usr/bin/env ${PYTHON_PN}|' $PYTHSCRIPT
+	done
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-daemon/0001-Workaround-for-issue-2-1.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-daemon/0001-Workaround-for-issue-2-1.patch
new file mode 100644
index 0000000..dbb8407
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-daemon/0001-Workaround-for-issue-2-1.patch
@@ -0,0 +1,31 @@
+From 0981eee9f0198c2045dc0eaa78a005d06fc7bfe4 Mon Sep 17 00:00:00 2001
+From: Carlos Eduardo Moreira dos Santos <cems@cemshost.com.br>
+Date: Tue, 28 Mar 2017 18:23:44 -0300
+Subject: [PATCH] Workaround for issue 2 [1]
+
+[1] https://pagure.io/python-daemon/issue/2
+---
+ version.py | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/version.py b/version.py
+index d58422a377ee..293e2d64c2b7 100644
+--- a/version.py
++++ b/version.py
+@@ -648,9 +648,10 @@ class ChangelogAwareDistribution(distutils.dist.Distribution, object):
+ 
+     @lru_cache(maxsize=128)
+     def get_version_info(self):
+-        changelog_path = get_changelog_path(self)
+-        version_info = generate_version_info_from_changelog(changelog_path)
+-        return version_info
++        return {
++            'version': '2.1.2',
++            'maintainer': 'Ben Finney'
++        }
+ 
+     def get_version(self):
+         version_info = self.get_version_info()
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc
new file mode 100644
index 0000000..e70e963
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc
@@ -0,0 +1,25 @@
+SUMMARY = "Extensions to the standard Python datetime module"
+DESCRIPTION = "The dateutil module provides powerful extensions to the datetime module available in the Python standard library."
+HOMEPAGE = "https://dateutil.readthedocs.org"
+LICENSE = "BSD-3-Clause & Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e3155c7bdc71f66e02678411d2abf996"
+
+SRC_URI[md5sum] = "f2a1d4b680b297b367a974664ca3a4f6"
+SRC_URI[sha256sum] = "73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"
+
+PYPI_PACKAGE = "python-dateutil"
+inherit pypi
+
+PACKAGES =+ "${PN}-zoneinfo"
+FILES_${PN}-zoneinfo = "${libdir}/${PYTHON_DIR}/site-packages/dateutil/zoneinfo"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-stringold \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-decorator.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-decorator.inc
new file mode 100644
index 0000000..3faee39
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-decorator.inc
@@ -0,0 +1,19 @@
+SUMMARY = "Python decorator utilities"
+DESCRIPTION = "\
+The aim of the decorator module it to simplify the usage of decorators \
+for the average programmer, and to popularize decorators by showing \
+various non-trivial examples. Of course, as all techniques, decorators \
+can be abused and you should not try to solve every problem with a \
+decorator, just because you can."
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=be2fd2007972bf96c08af3293d728b22"
+
+SRC_URI[md5sum] = "d83c624cce93e6bdfab144821b526e1d"
+SRC_URI[sha256sum] = "e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-stringold \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-django-south.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-django-south.inc
new file mode 100644
index 0000000..e4f03b9
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-django-south.inc
@@ -0,0 +1,17 @@
+SUMMARY = "Migrations for Django"
+DESCRIPTION = "South is an intelligent database migrations library for the Django web framework. It is database-independent and DVCS-friendly, as well as a whole host of other features."
+HOMEPAGE = "http://south.aeracode.org/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=17;endline=18;md5=2155d8ae21e7c23101d5febac696b27e"
+
+SRC_URI[md5sum] = "c76a9758b2011bc3b6c39f881bba2f66"
+SRC_URI[sha256sum] = "d360bd31898f9df59f6faa786551065bba45b35e7ee3c39b381b4fbfef7392f4"
+
+PYPI_PACKAGE = "South"
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-django \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-django.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-django.inc
new file mode 100644
index 0000000..c02b3fa
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-django.inc
@@ -0,0 +1,34 @@
+SUMMARY = "A high-level Python Web framework"
+HOMEPAGE = "http://www.djangoproject.com/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f09eb47206614a4954c51db8a94840fa"
+
+PYPI_PACKAGE = "Django"
+inherit pypi
+
+UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/"
+
+FILES_${PN} += "${datadir}/django"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-compression \
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-email \
+    ${PYTHON_PN}-html \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-multiprocessing \
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-pkgutil \
+    ${PYTHON_PN}-pytz \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-unixadmin \
+    ${PYTHON_PN}-xml \
+    ${PYTHON_PN}-distutils \
+"
+
+CVE_PRODUCT = "django"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-djangorestframework.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-djangorestframework.inc
new file mode 100644
index 0000000..8551a83
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-djangorestframework.inc
@@ -0,0 +1,16 @@
+SUMMARY =  "djangorestframework"
+DESCRIPTION = "pip3 install djangorestframework"
+HOMEPAGE = "https://pypi.python.org/pypi/djangorestframework"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=7879a5a716147a784f7e524c9cf103c1"
+
+SRC_URI[md5sum] = "0d481bf8dbb87bb927b46798edc1a9bd"
+SRC_URI[sha256sum] = "607865b0bb1598b153793892101d881466bd5a991de12bd6229abb18b1c86136"
+PYPI_PACKAGE = "djangorestframework"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-django \
+"
\ No newline at end of file
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython.inc
new file mode 100644
index 0000000..84502af
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython.inc
@@ -0,0 +1,20 @@
+DESCRIPTION = "DNS toolkit for Python"
+HOMEPAGE = "http://www.dnspython.org/"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5af50906b5929837f667dfe31052bd34"
+
+SRC_URI[md5sum] = "bc9ca3b3a82164667d5730ec6d5248a2"
+SRC_URI[sha256sum] = "36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01"
+
+PYPI_PACKAGE_EXT = "zip"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-crypt \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-math \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-threading \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-editor.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-editor.inc
new file mode 100644
index 0000000..734ce2b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-editor.inc
@@ -0,0 +1,9 @@
+DESCRIPTION = "Programmatically open and editor, capture the result"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
+
+SRC_URI[md5sum] = "0e52648a4a6e7c89e3be44e9456530b4"
+SRC_URI[sha256sum] = "51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b"
+
+PYPI_PACKAGE = "python-editor"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-engineio.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-engineio.inc
new file mode 100644
index 0000000..965f420
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-engineio.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Engine.IO server"
+HOMEPAGE = "https://github.com/miguelgrinberg/python-engineio/"
+SECTION = "devel/python"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=42d0a9e728978f0eeb759c3be91536b8"
+
+inherit pypi
+
+PYPI_PACKAGE = "python-engineio"
+
+SRC_URI[md5sum] = "e6ea8b3f2f32eeeb02014c46092f2adb"
+SRC_URI[sha256sum] = "2481732d93646998f7372ef0ecf003af7817b82720b881db173c3d50b4887916"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc
new file mode 100644
index 0000000..5f5426a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc
@@ -0,0 +1,25 @@
+SUMMARY = "Python evdev lib"
+HOMEPAGE = "https://github.com/gvalkov/python-evdev"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=18debddbb3f52c661a129724a883a8e2"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-evdev:"
+
+SRC_URI = "${PYPI_SRC_URI}"
+
+SRC_URI[md5sum] = "05f9e900d6e11e1674475d2dd2668f0d"
+SRC_URI[sha256sum] = "b1c649b4fed7252711011da235782b2c260b32e004058d62473471e5cd30634d"
+
+do_compile_prepend() {
+    rm -rf ${S}/evdev/ecodes.c
+}
+
+DISTUTILS_BUILD_ARGS = "build_ecodes --evdev-headers ${STAGING_DIR_TARGET}/usr/include/linux/input.h:${STAGING_DIR_TARGET}/usr/include/linux/input-event-codes.h"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-fcntl \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-stringold \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-fann2.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-fann2.inc
new file mode 100644
index 0000000..c415b35
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-fann2.inc
@@ -0,0 +1,9 @@
+SUMMARY = "Python bindings for Fast Artificial Neural Networks 2.2.0 (FANN >= 2.2.0)"
+SECTION = "devel/python"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c73b943dc75f6f65e007c56ac6515c8f"
+
+SRC_URI[md5sum] = "0b85b418018746d63ed66b55465697a9"
+SRC_URI[sha256sum] = "cdca0a65ad48e08320672affe38c3dd4ea15e27821e5e1db9fa2b34299bdd41e"
+
+DEPENDS += "swig-native libfann"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter.inc
new file mode 100644
index 0000000..6ddcaa9
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "A Python library for generating news feeds in RSS and Atom formats"
+HOMEPAGE = "http://code.google.com/p/feedformatter/"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=258e3f39e2383fbd011035d04311008d"
+SRCREV = "7391193c83e10420b5a2d8ef846d23fc368c6d85"
+
+SRC_URI = "git://github.com/marianoguerra/feedformatter.git"
+
+S = "${WORKDIR}/git"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-xml \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel.inc
new file mode 100644
index 0000000..0e507f3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "i18n and l10n support for Flask based on babel and pytz"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51917f3e8e858f5ae295a7d0e2eb3cc9"
+
+SRC_URI[md5sum] = "fcf2f360ff279d3133e40974804efd72"
+SRC_URI[sha256sum] = "316ad183e42003f3922957fa643d0a1e8e34a0f0301a88c3a8f605bc37ba5c86"
+
+PYPI_PACKAGE = "Flask-Babel"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-speaklater \
+    ${PYTHON_PN}-babel \
+    ${PYTHON_PN}-flask \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap.inc
new file mode 100644
index 0000000..0723b97
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "An extension that includes Bootstrap in your project, without any boilerplate code."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=a03749709f06118a17349deb5a210619"
+
+SRC_URI[md5sum] = "e40d50f5c5b6438c1c6200a6f2871f81"
+SRC_URI[sha256sum] = "cb08ed940183f6343a64e465e83b3a3f13c53e1baabb8d72b5da4545ef123ac8"
+
+PYPI_PACKAGE = "Flask-Bootstrap"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-dominate \
+    ${PYTHON_PN}-flask \
+    ${PYTHON_PN}-visitor \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login.inc
new file mode 100644
index 0000000..59eb64f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login.inc
@@ -0,0 +1,14 @@
+SUMMARY = "User session management for Flask"
+DESCRIPTION = "Flask-Login provides user session management for Flask. \
+It handles the common tasks of logging in, logging out, and remembering \
+your users’ sessions over extended periods of time."
+HOMEPAGE = " https://github.com/maxcountryman/flask-login"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8aa87a1cd9fa41d969ad32cfdac2c596"
+
+SRC_URI[md5sum] = "25b34c74bd509792f291c16e184225df"
+SRC_URI[sha256sum] = "c815c1ac7b3e35e2081685e389a665f2c74d7e077cb93cecabaea352da4752ec"
+
+PYPI_PACKAGE = "Flask-Login"
+
+RDEPENDS_${PN}_class-target = "${PYTHON_PN}-flask"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc
new file mode 100644
index 0000000..0df276d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc
@@ -0,0 +1,12 @@
+SUMMARY = "Flask extension for sending email"
+DESCRIPTION = "A Flask extension for sending email"
+HOMEPAGE = " https://github.com/rduplain/flask-email"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5b16dfa6d3f275ace5985bb92949f770"
+
+SRC_URI[md5sum] = "04b35a42a44ec7aa724ec8ce55e2e08e"
+SRC_URI[sha256sum] = "22e5eb9a940bf407bcf30410ecc3708f3c56cc44b29c34e1726fe85006935f41"
+
+PYPI_PACKAGE = "Flask-Mail"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-flask"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc
new file mode 100644
index 0000000..5202f8b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "SQLAlchemy database migrations for Flask applications using Alembic"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b69377f79f3f48c661701236d5a6a85"
+
+SRC_URI[md5sum] = "bedeb0366740fda6912fea683be11968"
+SRC_URI[sha256sum] = "a96ff1875a49a40bd3e8ac04fce73fdb0870b9211e6168608cbafa4eb839d502"
+
+PYPI_PACKAGE = "Flask-Migrate"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-flask-sqlalchemy \
+    ${PYTHON_PN}-alembic \
+    ${PYTHON_PN}-flask \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc
new file mode 100644
index 0000000..932ccdf
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc
@@ -0,0 +1,13 @@
+DESCRIPTION = "Easily create navigation for Flask applications."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=2729ee82259d601d90d28b0574d12416"
+
+SRC_URI[md5sum] = "4d51cfd06d58f8d0fe85775a6696c0e5"
+SRC_URI[sha256sum] = "44e40b755380a1e68ab521a2f9174de259a2c94ddcdaabf36b3aca2e110a33f4"
+
+PYPI_PACKAGE = "flask-nav"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-blinker \
+    ${PYTHON_PN}-flask \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc
new file mode 100644
index 0000000..5fc35c1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc
@@ -0,0 +1,15 @@
+SUMMARY = "PyMongo support for Flask applications"
+DESCRIPTION = "PyMongo support for Flask applications."
+HOMEPAGE = "https://github.com/mitsuhiko/flask/"
+SECTION = "devel/python"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://flask_pymongo/wrappers.py;beginline=1;endline=24;md5=424c4e1047d28e01b4e4634a069c019d"
+
+SRC_URI[md5sum] = "94df71e6800b1d7915cc91a74b70f959"
+SRC_URI[sha256sum] = "620eb02dc8808a5fcb90f26cab6cba9d6bf497b15032ae3ca99df80366e33314"
+
+PYPI_PACKAGE = "Flask-PyMongo"
+
+DEPENDS = "${PYTHON_PN}-vcversioner ${PYTHON_PN}-vcversioner-native"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pymongo ${PYTHON_PN}-flask"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc
new file mode 100644
index 0000000..dcbcd0d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Simple framework for creating REST APIs"
+DESCRIPTION = "\
+Flask-RESTful is an extension for Flask that adds support for quickly building \
+REST APIs"
+HOMEPAGE = "https://github.com/flask-restful/flask-restful"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=685bb55ed99a366bb431995f5eef2783"
+
+SRC_URI[md5sum] = "a7217ef1159be38af5faf61aa09aabef"
+SRC_URI[sha256sum] = "f8240ec12349afe8df1db168ea7c336c4e5b0271a36982bff7394f93275f2ca9"
+
+inherit pypi
+
+PYPI_PACKAGE = "Flask-RESTful"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-flask"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc
new file mode 100644
index 0000000..f48af8b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "Scripting support for flask"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e686048adb69341fc8a08caeda528b41"
+
+SRC_URI[md5sum] = "3fbd91fe13cebedfb2431331f6eabb68"
+SRC_URI[sha256sum] = "6425963d91054cfcc185807141c7314a9c5ad46325911bd24dcb489bd0161c65"
+
+PYPI_PACKAGE = "Flask-Script"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-flask \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sijax.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sijax.inc
new file mode 100644
index 0000000..ff4e70a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sijax.inc
@@ -0,0 +1,8 @@
+DESCRIPTION = "An extension for the Flask microframework that adds Sijax support."
+HOMEPAGE = "https://github.com/spantaleev/flask-sijax"
+LICENSE = "BSD-3-Clause"
+
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=266adc7b911b7c84b837bf77196e1ba6"
+
+PYPI_PACKAGE = "Flask-Sijax"
+RDEPENDS_${PN} = "${PYTHON_PN}-sijax"
\ No newline at end of file
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-socketio.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-socketio.inc
new file mode 100644
index 0000000..8d778d4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-socketio.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Socket.IO integration for Flask applications"
+HOMEPAGE = "https://github.com/miguelgrinberg/Flask-SocketIO/"
+SECTION = "devel/python"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=38cc21254909604298ce763a6e4440a0"
+
+inherit pypi
+
+PYPI_PACKAGE = "Flask-SocketIO"
+
+SRC_URI[md5sum] = "b23222fb7dd2f0676d78bbe24153fd80"
+SRC_URI[sha256sum] = "2172dff1e42415ba480cee02c30c2fc833671ff326f1598ee3d69aa02cf768ec"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-flask \
+    ${PYTHON_PN}-socketio \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc
new file mode 100644
index 0000000..86ba9dd
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "Adds SQLAlchemy support to your Flask application."
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
+
+SRC_URI[md5sum] = "1f5781cf3e1a2b1aabda47a5b20d2073"
+SRC_URI[sha256sum] = "6974785d913666587949f7c2946f7001e4fa2cb2d19f4e69ead02e4b8f50b33d"
+
+PYPI_PACKAGE = "Flask-SQLAlchemy"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-sqlalchemy ${PYTHON_PN}-flask"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads.inc
new file mode 100644
index 0000000..cd7ac1a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "Flexible and efficient upload handling for Flask"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=b712ac634b39469660c9bdfb8d03421c"
+
+SRC_URI[md5sum] = "e5eee34aa92b64a4d22847672b3858a1"
+SRC_URI[sha256sum] = "53ecbd6033667d50ae02b63adebbaa33c7fc56c09e5293025810cf9d841ecb02"
+
+PYPI_PACKAGE = "Flask-Uploads"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-flask \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc
new file mode 100644
index 0000000..adef32c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc
@@ -0,0 +1,17 @@
+SUMMARY = "Customizable user account management for Flask"
+DESCRIPTION = "Customizable User Account Management for Flask; Register \
+Confirm email, Login, Change username, Change password, Forgot Password \
+and more."
+HOMEPAGE = " https://github.com/lingthio/Flask-User"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=97de97cd9d6e23c88129d884588ce71a"
+
+SRC_URI[md5sum] = "f7965e66ca139c8436896da07e66c21f"
+SRC_URI[sha256sum] = "601abcc0343dfbae0c56273d98362d5cdc266ac84d20b3f65a212e4a2c83b302"
+
+PYPI_PACKAGE = "Flask-User"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-flask \
+    ${PYTHON_PN}-flask-login \
+    ${PYTHON_PN}-flask-mail \
+    ${PYTHON_PN}-babel"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc
new file mode 100644
index 0000000..8636711
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "Simple integration of Flask and WTForms."
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3ca6bb31670492f791e6a9f2fb9f8a80"
+
+SRC_URI[md5sum] = "586f50f233926cade42e3d744aca3e8f"
+SRC_URI[sha256sum] = "5d14d55cfd35f613d99ee7cba0fc3fbbe63ba02f544d349158c14ca15561cc36"
+
+PYPI_PACKAGE = "Flask-WTF"
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-flask \
+    ${PYTHON_PN}-itsdangerous \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-wtforms \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc
new file mode 100644
index 0000000..48ff714
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "XStatic support for flask"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=659968f6ebd4b70b6c3190d20b4a924c"
+
+SRC_URI[md5sum] = "2f56023e1444c8bd1fec41afe93de743"
+SRC_URI[sha256sum] = "226ea8e97065a9488b59bfe5c94af4c6e2ea70a25052e301fb231a1381490133"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-flask-xstatic:"
+SRC_URI += "file://remove-pip-requires.patch"
+
+PYPI_PACKAGE = "Flask-XStatic"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-flask \
+    ${PYTHON_PN}-xstatic \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic/remove-pip-requires.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic/remove-pip-requires.patch
new file mode 100644
index 0000000..a2d620a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic/remove-pip-requires.patch
@@ -0,0 +1,7 @@
+--- Flask-XStatic-0.0.1/setup.py.orig	2015-01-30 08:01:56.000000000 -0800
++++ Flask-XStatic-0.0.1/setup.py	2017-04-17 21:40:32.570181626 -0700
+@@ -1,4 +1,3 @@
+-from pip.req import parse_requirements
+ import setuptools
+ 
+ with open('README.rst') as f:
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc
new file mode 100644
index 0000000..1263383
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc
@@ -0,0 +1,16 @@
+SUMMARY = "A microframework based on Werkzeug, Jinja2 and good intentions"
+DESCRIPTION = "\
+Flask is a microframework for Python based on Werkzeug, Jinja 2 and good \
+intentions. And before you ask: It’s BSD licensed!"
+HOMEPAGE = "https://github.com/mitsuhiko/flask/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
+
+SRC_URI[md5sum] = "0e3ed44ece1c489ed835d1b7047e349c"
+SRC_URI[sha256sum] = "13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52"
+
+CLEANBROKEN = "1"
+
+PYPI_PACKAGE = "Flask"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-werkzeug ${PYTHON_PN}-jinja2 ${PYTHON_PN}-itsdangerous ${PYTHON_PN}-click"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-future.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-future.inc
new file mode 100644
index 0000000..c0a2b39
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-future.inc
@@ -0,0 +1,13 @@
+DESCRIPTION = "Clean single-source support for Python 3 and 2"
+HOMEPAGE = "https://python-future.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a253924061f8ecc41ad7a2ba1560e8e7"
+
+SRC_URI[md5sum] = "e4579c836b9c025872efe230f6270349"
+SRC_URI[sha256sum] = "b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"
+
+PYPI_PACKAGE_HASH = "99abde815842bc6e97d5a7806ad51236630da14ca2f3b1fce94c0bb94d3d"
+
+inherit pypi
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc
new file mode 100644
index 0000000..bc89d10
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc
@@ -0,0 +1,35 @@
+SUMMARY = "A coroutine-based Python networking library"
+DESCRIPTION = "gevent is a coroutine-based Python networking library that uses greenlet to provide \
+a high-level synchronous API on top of the libevent event loop."
+HOMEPAGE = "http://www.gevent.org"
+LICENSE = "MIT & Python-2.0 & BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4de99aac27b470c29c6c309e0c279b65 \
+                    file://NOTICE;md5=18108df3583462cafd457f024b9b09b5 \
+                    file://deps/libev/LICENSE;md5=d6ad416afd040c90698edcdf1cbee347 \
+                    "
+DEPENDS += "libevent"
+DEPENDS += "${PYTHON_PN}-greenlet"
+RDEPENDS_${PN} = "${PYTHON_PN}-greenlet \
+		  ${PYTHON_PN}-mime \
+		  ${PYTHON_PN}-pprint \
+		 "
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-gevent:"
+
+SRC_URI_append = " \
+    file://libev-conf.patch;patch=1;pnum=1 \
+    file://0002-setup.py-do-not-query-for-include-dir.patch \
+"
+
+SRC_URI[md5sum] = "6b9dd98917061803d9158e5258b8f412"
+SRC_URI[sha256sum] = "1eb7fa3b9bd9174dfe9c3b59b7a09b768ecd496debfc4976a9530a3e15c990d1"
+
+# The python-gevent has no autoreconf ability
+# and the logic for detecting a cross compile is flawed
+# so always force a cross compile
+do_configure_append() {
+	sed -i -e 's/^cross_compiling=no/cross_compiling=yes/' ${S}/deps/libev/configure
+	sed -i -e 's/^cross_compiling=no/cross_compiling=yes/' ${S}/deps/c-ares/configure
+}
+
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/0002-setup.py-do-not-query-for-include-dir.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/0002-setup.py-do-not-query-for-include-dir.patch
new file mode 100644
index 0000000..7536b71
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/0002-setup.py-do-not-query-for-include-dir.patch
@@ -0,0 +1,26 @@
+From a53ed6b2f967a5f95e69d51cad3f8c120d7df65b Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Thu, 7 Feb 2019 15:21:15 +0100
+Subject: [PATCH] setup.py: do not query for include dir
+
+As this will return the native python directory erroneously.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index 86d6c5a..5d22291 100755
+--- a/setup.py
++++ b/setup.py
+@@ -52,7 +52,7 @@ from _setupares import ARES
+ # Get access to the greenlet header file.
+ # The sysconfig dir is not enough if we're in a virtualenv
+ # See https://github.com/pypa/pip/issues/4610
+-include_dirs = [sysconfig.get_path("include")]
++include_dirs = []
+ venv_include_dir = os.path.join(sys.prefix, 'include', 'site',
+                                 'python' + sysconfig.get_python_version())
+ venv_include_dir = os.path.abspath(venv_include_dir)
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/libev-conf.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/libev-conf.patch
new file mode 100644
index 0000000..79c1867
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/libev-conf.patch
@@ -0,0 +1,26 @@
+From 2294734ef9d5e2efb05820e9759a1635799bdea9 Mon Sep 17 00:00:00 2001
+From: Andrej Rode <andrej.rode@ettus.com>
+Date: Mon, 10 Apr 2017 19:25:18 -0700
+Subject: [PATCH] libev: make configure crosscompile compatible
+
+Signed-off-by: Andrej Rode <andrej.rode@ettus.com>
+---
+ deps/libev/configure | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/deps/libev/configure b/deps/libev/configure
+index 743817e..96c2366 100755
+--- a/deps/libev/configure
++++ b/deps/libev/configure
+@@ -2208,7 +2208,7 @@ fi
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_link='$CC -static -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+-- 
+2.10.2
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet.inc
new file mode 100644
index 0000000..c7c656c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet.inc
@@ -0,0 +1,9 @@
+SUMMARY = "Python lightweight in-process concurrent programming"
+LICENSE = "MIT & PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=03143d7a1a9f5d8a0fee825f24ca9c36 \
+                    file://LICENSE.PSF;md5=c106931d9429eda0492617f037b8f69a"
+
+SRC_URI[md5sum] = "10fa304f673fc18b28fa6d8c6658cb80"
+SRC_URI[sha256sum] = "9416443e219356e3c31f1f918a91badf2e37acf297e2fa13d24d1cc2380f8fbc"
+
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools.inc
new file mode 100644
index 0000000..6675f90
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "Google gRPC tools"
+HOMEPAGE = "http://www.grpc.io/"
+SECTION = "devel/python"
+
+DEPENDS_append = " ${PYTHON_PN}-grpcio"
+RDEPENDS_${PN} = "${PYTHON_PN}-grpcio"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=7145f7cdd263359b62d342a02f005515"
+
+inherit pypi
+
+SRC_URI[md5sum] = "b2fabfb54c7824c1e49a02de2aa6628e"
+SRC_URI[sha256sum] = "4ce5aa660d7884f23aac1eafa93b97a4c3e2b512edff871e91fdb6ee86ebd5ea"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-html2text.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-html2text.inc
new file mode 100644
index 0000000..678dcef
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-html2text.inc
@@ -0,0 +1,12 @@
+SUMMARY = "Convert HTML to Markdown-formatted text"
+HOMEPAGE = "https://github.com/Alir3z4/html2text"
+
+LICENSE = "GPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI[md5sum] = "21aad7ec95b70606024b783c8253899c"
+SRC_URI[sha256sum] = "f516b9c10284174e2a974d86f91cab02b3cf983a17752075da751af0e895ef5e"
+
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc
new file mode 100644
index 0000000..a8e0fb4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc
@@ -0,0 +1,17 @@
+SUMMARY = "HTML parser based on the WHATWG HTML specifcation"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1ba5ada9e6fead1fdc32f43c9f10ba7c"
+
+SRC_URI[md5sum] = "942a0688d6bdf20d087c9805c40182ad"
+SRC_URI[sha256sum] = "66cb0dcfdbbc4f9c3ba1a63fdb511ffdbd4f513b2b6d81b80cd26ce6b3fb3736"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-lxml \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-webencodings \
+    ${PYTHON_PN}-xml \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-humanfriendly.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-humanfriendly.inc
new file mode 100644
index 0000000..94f7f8b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-humanfriendly.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "Human friendly output for text interfaces using Python"
+HOMEPAGE = "https://humanfriendly.readthedocs.io/"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=690da298a43805797a4fa7bbe180b3c6"
+
+PYPI_PACKAGE = "humanfriendly"
+
+SRC_URI[md5sum] = "9573f9f37a5454d8205cfd1b9b8db9d2"
+SRC_URI[sha256sum] = "33ee8ceb63f1db61cce8b5c800c531e1a61023ac5488ccde2ba574a85be00a85"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += " \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-fcntl \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-math \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-stringold \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-humanize.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-humanize.inc
new file mode 100644
index 0000000..17a3449
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-humanize.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Python humanize utilities"
+HOMEPAGE = "http://github.com/jmoiron/humanize"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=d2eff82fc25dd07c919a02465884f02e"
+
+SRC_URI[md5sum] = "e8473d9dc1b220911cac2edd53b1d973"
+SRC_URI[sha256sum] = "a43f57115831ac7c70de098e6ac46ac13be00d69abbf60bdcac251344785bb19"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-datetime \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink.inc
new file mode 100644
index 0000000..653170c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink.inc
@@ -0,0 +1,17 @@
+DESCRIPTION = "A featureful, correct URL for Python"
+HOMEPAGE = "https://github.com/python-hyper/hyperlink"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3893d4ed05dcc823f8ed685a9ea19bcb"
+
+SRC_URI[sha256sum] = "4288e34705da077fada1111a24a0aa08bb1e76699c9ce49876af722441845654"
+SRC_URI[md5sum] = "4772fb4d87c26a1ab22a6161424e3cba"
+
+inherit pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-stringold ${PYTHON_PN}-netclient ${PYTHON_PN}-idna"
+
+PACKAGES =. "${PN}-test "
+
+FILES_${PN}-test += " \
+        ${PYTHON_SITEPACKAGES_DIR}/hyperlinkt/test \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-idna-ssl.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-idna-ssl.inc
new file mode 100644
index 0000000..e74bbd7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-idna-ssl.inc
@@ -0,0 +1,10 @@
+SUMMARY = "Patch ssl.match_hostname for Unicode(idna) domains support"
+HOMEPAGE = "https://github.com/aio-libs/idna-ssl"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a61b9c5aec8796b64a6bf15d42605073"
+
+SRC_URI[md5sum] = "dd44ec53bac36e68446766fd8d3835bd"
+SRC_URI[sha256sum] = "a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c"
+
+PYPI_PACKAGE = "idna-ssl"
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-idna.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-idna.inc
new file mode 100644
index 0000000..13b0cdb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-idna.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Internationalised Domain Names in Applications"
+HOMEPAGE = "https://github.com/kjd/idna"
+LICENSE = "BSD-3-Clause & Python-2.0 & Unicode"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=782775b32f96098512e283fb5d4546cd"
+
+SRC_URI[md5sum] = "2e9ae0b4a0b26d1747c6127cdb060bc1"
+SRC_URI[sha256sum] = "c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"
+
+RDEPENDS_${PN}_class-target = "\
+    ${PYTHON_PN}-codecs \
+"
+
+# Remove bundled egg-info
+do_compile_prepend() {
+    rm -rf ${S}/idna.egg-info
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch
new file mode 100644
index 0000000..2575306
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch
@@ -0,0 +1,55 @@
+From 07d4f095a9e22ae676a8d68073101131e65012dc Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 15 Nov 2011 13:16:54 +0100
+Subject: [PATCH] python imaging setup.py: force paths for zlib, freetype and jpeg and don't add host paths
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+
+Upstream-Status: Inappropriate [embedded specific]
+---
+ setup.py |   14 +++-----------
+ 1 files changed, 3 insertions(+), 11 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 5d4d53a..b1a22ec 100644
+--- a/setup.py
++++ b/setup.py
+@@ -34,10 +34,10 @@ def libinclude(root):
+ # TIFF_ROOT = libinclude("/opt/tiff")
+ 
+ TCL_ROOT = None
+-JPEG_ROOT = None
+-ZLIB_ROOT = None
++JPEG_ROOT = os.environ['STAGING_LIBDIR']
++ZLIB_ROOT = os.environ['STAGING_LIBDIR']
+ TIFF_ROOT = None
+-FREETYPE_ROOT = None
++FREETYPE_ROOT =  os.environ['STAGING_LIBDIR'], os.environ['STAGING_INCDIR']
+ LCMS_ROOT = None
+ 
+ # FIXME: add mechanism to explicitly *disable* the use of a library
+@@ -147,7 +147,6 @@ class pil_build_ext(build_ext):
+             add_directory(library_dirs, "/opt/local/lib")
+             add_directory(include_dirs, "/opt/local/include")
+ 
+-        add_directory(library_dirs, "/usr/local/lib")
+         # FIXME: check /opt/stuff directories here?
+ 
+         prefix = sysconfig.get_config_var("prefix")
+@@ -207,13 +206,6 @@ class pil_build_ext(build_ext):
+             if os.path.isfile(os.path.join(tcl_dir, "tk.h")):
+                 add_directory(include_dirs, tcl_dir)
+ 
+-        # standard locations
+-        add_directory(library_dirs, "/usr/local/lib")
+-        add_directory(include_dirs, "/usr/local/include")
+-
+-        add_directory(library_dirs, "/usr/lib")
+-        add_directory(include_dirs, "/usr/include")
+-
+         #
+         # insert new dirs *before* default libs, to avoid conflicts
+         # between Python PYD stub libs and real libraries
+-- 
+1.7.2.5
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/allow.to.disable.some.features.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/allow.to.disable.some.features.patch
new file mode 100644
index 0000000..4960ed4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/allow.to.disable.some.features.patch
@@ -0,0 +1,65 @@
+At least lcms wasn't deterministicly detected from sysroot.
+
+This will allow to export LCMS_ENABLED=False when lcms isn't in PACKAGECONFIG.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+diff -uNr Imaging-1.1.7.orig/setup.py Imaging-1.1.7/setup.py
+--- Imaging-1.1.7.orig/setup.py	2013-07-22 10:17:02.081457075 +0200
++++ Imaging-1.1.7/setup.py	2013-07-22 13:10:09.029707492 +0200
+@@ -39,6 +39,12 @@
+ TIFF_ROOT = None
+ FREETYPE_ROOT =  os.environ['STAGING_LIBDIR'], os.environ['STAGING_INCDIR']
+ LCMS_ROOT = None
++TCL_ENABLED = os.getenv('TCL_ENABLED', "True")
++JPEG_ENABLED = os.getenv('JPEG_ENABLED', "True")
++ZLIB_ENABLED = os.getenv('ZLIB_ENABLED', "True")
++TIFF_ENABLED = os.getenv('TIFF_ENABLED', "True")
++FREETYPE_ENABLED = os.getenv('FREETYPE_ENABLED', "True")
++LCMS_ENABLED = os.getenv('LCMS_ENABLED', "True")
+ 
+ # FIXME: add mechanism to explicitly *disable* the use of a library
+ 
+@@ -220,22 +226,22 @@
+             zlib = jpeg = tiff = freetype = tcl = tk = lcms = None
+         feature = feature()
+ 
+-        if find_include_file(self, "zlib.h"):
++        if ZLIB_ENABLED == 'True' and find_include_file(self, "zlib.h"):
+             if find_library_file(self, "z"):
+                 feature.zlib = "z"
+             elif sys.platform == "win32" and find_library_file(self, "zlib"):
+                 feature.zlib = "zlib" # alternative name
+ 
+-        if find_include_file(self, "jpeglib.h"):
++        if JPEG_ENABLED == 'True' and find_include_file(self, "jpeglib.h"):
+             if find_library_file(self, "jpeg"):
+                 feature.jpeg = "jpeg"
+             elif sys.platform == "win32" and find_library_file(self, "libjpeg"):
+                 feature.jpeg = "libjpeg" # alternative name
+ 
+-        if find_library_file(self, "tiff"):
++        if TIFF_ENABLED == 'True' and find_library_file(self, "tiff"):
+             feature.tiff = "tiff"
+ 
+-        if find_library_file(self, "freetype"):
++        if FREETYPE_ENABLED == 'True' and find_library_file(self, "freetype"):
+             # look for freetype2 include files
+             freetype_version = 0
+             for dir in self.compiler.include_dirs:
+@@ -256,11 +262,11 @@
+                 if dir:
+                     add_directory(self.compiler.include_dirs, dir, 0)
+ 
+-        if find_include_file(self, "lcms.h"):
++        if LCMS_ENABLED == 'True' and find_include_file(self, "lcms.h"):
+             if find_library_file(self, "lcms"):
+                 feature.lcms = "lcms"
+ 
+-        if _tkinter and find_include_file(self, "tk.h"):
++        if TCL_ENABLED == 'True' and _tkinter and find_include_file(self, "tk.h"):
+             # the library names may vary somewhat (e.g. tcl84 or tcl8.4)
+             version = TCL_VERSION[0] + TCL_VERSION[2]
+             if find_library_file(self, "tcl" + version):
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/fix-freetype-includes.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/fix-freetype-includes.patch
new file mode 100644
index 0000000..9ecc63a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/fix-freetype-includes.patch
@@ -0,0 +1,30 @@
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From c6040f618d8f2706a7b46d1cdf37d1a587f9701f Mon Sep 17 00:00:00 2001
+From: Andrew Stromnov <stromnov@gmail.com>
+Date: Thu, 28 Nov 2013 16:58:43 +0400
+Subject: [PATCH] fix compiling with FreeType 2.5.1
+
+---
+ _imagingft.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/_imagingft.c b/_imagingft.c
+index 47d50bd..f19555b 100644
+--- a/_imagingft.c
++++ b/_imagingft.c
+@@ -59,7 +59,11 @@ struct {
+     const char* message;
+ } ft_errors[] =
+ 
++#if defined(USE_FREETYPE_2_1)
++#include FT_ERRORS_H
++#else
+ #include <freetype/fterrors.h>
++#endif
+ 
+ /* -------------------------------------------------------------------- */
+ /* font objects */
+-- 
+1.8.5.1
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/python-imaging-CVE-2016-2533.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/python-imaging-CVE-2016-2533.patch
new file mode 100644
index 0000000..b01136f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/python-imaging-CVE-2016-2533.patch
@@ -0,0 +1,38 @@
+python-imaging: CVE-2016-2533
+
+the patch comes from:
+https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-2533
+https://github.com/python-pillow/Pillow/commit/ae453aa18b66af54e7ff716f4ccb33adca60afd4#diff-8ff6909c159597e22288ad818938fd6b
+
+PCD decoder overruns the shuffle buffer, Fixes #568
+
+Signed-off-by: Li Wang <li.wang@windriver.com>
+---
+ libImaging/PcdDecode.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libImaging/PcdDecode.c b/libImaging/PcdDecode.c
+index b6898e3..c02d005 100644
+--- a/libImaging/PcdDecode.c
++++ b/libImaging/PcdDecode.c
+@@ -47,7 +47,7 @@ ImagingPcdDecode(Imaging im, ImagingCodecState state, UINT8* buf, int bytes)
+ 	    out[0] = ptr[x];
+ 	    out[1] = ptr[(x+4*state->xsize)/2];
+ 	    out[2] = ptr[(x+5*state->xsize)/2];
+-	    out += 4;
++	    out += 3;
+ 	}
+ 
+ 	state->shuffle((UINT8*) im->image[state->y],
+@@ -62,7 +62,7 @@ ImagingPcdDecode(Imaging im, ImagingCodecState state, UINT8* buf, int bytes)
+ 	    out[0] = ptr[x+state->xsize];
+ 	    out[1] = ptr[(x+4*state->xsize)/2];
+ 	    out[2] = ptr[(x+5*state->xsize)/2];
+-	    out += 4;
++	    out += 3;
+ 	}
+ 
+ 	state->shuffle((UINT8*) im->image[state->y],
+-- 
+1.7.9.5
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/remove-host-libdir.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/remove-host-libdir.patch
new file mode 100644
index 0000000..028a51a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/remove-host-libdir.patch
@@ -0,0 +1,25 @@
+Avoid getting host sysroot paths in the library paths to fix issue like:
+
+| /home/andrei/work/yocto/build-rpi-master/tmp/sysroots/x86_64-linux/usr/lib/libz.so: file not recognized: File format not recognized
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
+
+
+Index: Imaging-1.1.7/setup.py
+===================================================================
+--- Imaging-1.1.7.orig/setup.py
++++ Imaging-1.1.7/setup.py
+@@ -155,11 +155,6 @@ class pil_build_ext(build_ext):
+ 
+         # FIXME: check /opt/stuff directories here?
+ 
+-        prefix = sysconfig.get_config_var("prefix")
+-        if prefix:
+-            add_directory(library_dirs, os.path.join(prefix, "lib"))
+-            add_directory(include_dirs, os.path.join(prefix, "include"))
+-
+         #
+         # locate tkinter libraries
+ 
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-importlib-metadata.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-importlib-metadata.inc
new file mode 100644
index 0000000..b6165dc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-importlib-metadata.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "Read metadata from Python packages"
+HOMEPAGE = "https://pypi.org/project/importlib-metadata/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e88ae122f3925d8bde8319060f2ddb8e"
+
+SRC_URI = "https://files.pythonhosted.org/packages/d7/cd/3b1dffa46b19dac269d586b9d45090588a8bd7a5741602a369d45e1bdf65/importlib_metadata-1.5.2.tar.gz"
+S = "${WORKDIR}/importlib_metadata-${PV}"
+SRC_URI[md5sum] = "35a85a81c7d86605f4f49397f4e7e39c"
+SRC_URI[sha256sum] = "dfc83688553a91a786c6c91eeb5f3b1d31f24d71877bbd94ecbf5484e57690a2"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+RDEPENDS_${PN} += "${PYTHON_PN}-zipp ${PYTHON_PN}-pathlib2"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-incremental.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-incremental.inc
new file mode 100644
index 0000000..ef5e903
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-incremental.inc
@@ -0,0 +1,20 @@
+DESCRIPTION = "Incremental is a small library that versions your Python projects"
+HOMEPAGE = "https://github.com/twisted/incremental"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6ca9b07f08e2c72d48c74d363d1e0e15"
+
+SRC_URI[md5sum] = "602746e0d438e075a5a9e0678140bba2"
+SRC_URI[sha256sum] = "7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-twisted \
+    ${PYTHON_PN}-click \
+"
+
+# -native is needed to build python[3]-twisted, however, we need to take steps to
+# prevent a circular dependency. The build apparently does not use the part of
+# python-incremental which uses python-twisted, so this hack is OK.
+RDEPENDS_${PYTHON_PN}-incremental-native_remove = "${PYTHON_PN}-twisted-native"
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-inflection.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-inflection.inc
new file mode 100644
index 0000000..556b268
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-inflection.inc
@@ -0,0 +1,14 @@
+SUMMARY = "A port of Ruby on Rails' inflection to Python."
+HOMEPAGE = "https://pypi.org/project/inflection"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=de7833d9c2ce0052a4073928c76a13d7"
+
+SRC_URI[md5sum] = "7941165e9f148e0520023941c0886b40"
+SRC_URI[sha256sum] = "18ea7fb7a7d152853386523def08736aa8c32636b047ade55f7578c4edeb16ca"
+
+inherit pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-pytest"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-intervals.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-intervals.inc
new file mode 100644
index 0000000..4489aa5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-intervals.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "Interval arithmetic for Python"
+HOMEPAGE = "https://github.com/AlexandreDecan/python-intervals"
+SECTION = "devel/python"
+
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=05f1e16a8e59ce3e9a979e881816c2ab"
+
+PYPI_PACKAGE := "python-intervals"
+
+inherit pypi
+
+SRC_URI[md5sum] = "8955317ff4e42590c90ba6247b1caaed"
+SRC_URI[sha256sum] = "0d26746eaed0be78a61dd289bb7a10721b08770bb3e807614835f490d514f2a5"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ipy.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ipy.inc
new file mode 100644
index 0000000..46b2fad
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ipy.inc
@@ -0,0 +1,19 @@
+SUMMARY = "IPy - class and tools for handling of IPv4 and IPv6 addresses and networks"
+DESCRIPTION = "IPy is a Python module for handling IPv4 and IPv6 Addresses and Networks \
+in a fashion similar to perl's Net::IP and friends. The IP class allows \
+a comfortable parsing and handling for most notations in use for IPv4 \
+and IPv6 Addresses and Networks."
+SECTION = "devel/python"
+HOMEPAGE = "https://github.com/autocracy/python-ipy"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=848d24919845901b4f48bae5f13252e6"
+
+SRC_URI[md5sum] = "1a90c68174234672241a7e60c7ea0fb9"
+SRC_URI[sha256sum] = "2f2bf658a858d43868d8a4352b3889cf78c66e2ce678b300dcf518c9149ba621"
+
+inherit pypi
+
+PYPI_PACKAGE = "IPy"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc
new file mode 100644
index 0000000..a70843e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Simple module to parse ISO 8601 dates"
+HOMEPAGE = "http://pyiso8601.readthedocs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b05625f2336fa024e8d57e65c6595844"
+
+SRC_URI[md5sum] = "4de940f691c5ea759fb254384c8ddcf6"
+SRC_URI[sha256sum] = "49c4b20e1f38aa5cf109ddcd39647ac419f928512c869dc01d5c7098eddede82"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-numbers \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-isodate.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-isodate.inc
new file mode 100644
index 0000000..8c12891
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-isodate.inc
@@ -0,0 +1,14 @@
+SUMMARY = "ISO 8601 date/time parser"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
+
+SRC_URI[md5sum] = "0e1203fce27ce65e2d01c5f21c4d428f"
+SRC_URI[sha256sum] = "2e364a3d5759479cdb2d37cce6b9376ea504db2ff90252a2e5b7cc89cc9ff2d8"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-isort.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-isort.inc
new file mode 100644
index 0000000..324d4cf
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-isort.inc
@@ -0,0 +1,17 @@
+SUMMARY = "A Python utility / library to sort Python imports."
+HOMEPAGE = "https://pypi.python.org/pypi/isort"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[md5sum] = "05d66f2eb7ce2c2d702e86bac24bf9e4"
+SRC_URI[sha256sum] = "54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous.inc
new file mode 100644
index 0000000..241786a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Various helpers to pass trusted data to untrusted environments and back."
+HOMEPAGE = "http://github.com/mitsuhiko/itsdangerous"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=370799bf709a1e4a6a369fa089ac73a6"
+
+SRC_URI[md5sum] = "9b7f5afa7f1e3acfb7786eeca3d99307"
+SRC_URI[sha256sum] = "321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"
+
+CLEANBROKEN = "1"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-simplejson \
+    ${PYTHON_PN}-netclient \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3.inc
new file mode 100644
index 0000000..e667057
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3.inc
@@ -0,0 +1,15 @@
+SUMMARY = "Module for serializing and de-serializing Java objects."
+DESCRIPTION = "python-javaobj is a python library that provides functions\
+ for reading and writing (writing is WIP currently) Java objects serialized\
+ or will be deserialized by ObjectOutputStream. This form of object\
+ representation is a standard data interchange format in Java world."
+HOMEPAGE = "https://github.com/tcalmant/python-javaobj"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://setup.py;beginline=15;endline=27;md5=af9ce26ac2de1b7436eb08c9308b4a1e"
+
+SRC_URI[md5sum] = "352fe0df9336b8699ad0799ef152da6b"
+SRC_URI[sha256sum] = "18c44cfaa214813784a823432b4ab9829c9626b2b00072011627b4008b0067cd"
+
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch.inc
new file mode 100644
index 0000000..e23f96b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch.inc
@@ -0,0 +1,12 @@
+SUMMARY  = "Appling JSON patches in Python 2.6+ and 3.x"
+HOMEPAGE = "https://github.com/stefankoegl/python-json-patch"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=32b15c843b7a329130f4e266a281ebb3"
+
+inherit pypi
+
+SRC_URI[md5sum] = "fcc546892414bef2f7f89f0e2a618a9e"
+SRC_URI[sha256sum] = "ddc0f7628b8bfdd62e3cbfbc24ca6671b0b6265b50d186c2cf3659dc0f78fd6a"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-json ${PYTHON_PN}-jsonpointer ${PYTHON_PN}-netclient ${PYTHON_PN}-stringold"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc
new file mode 100644
index 0000000..3e41b70
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc
@@ -0,0 +1,27 @@
+SUMMARY = "Resolve JSON Pointers in Python"
+HOMEPAGE = "https://github.com/stefankoegl/python-json-pointer"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=32b15c843b7a329130f4e266a281ebb3"
+
+inherit pypi ptest
+
+SRC_URI[md5sum] = "741b98d0e693b08b5e44e0a9da5a7bb7"
+SRC_URI[sha256sum] = "c192ba86648e05fdae4f08a17ec25180a9aef5008d973407b581798a83975362"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-json \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	cp -f ${S}/tests.py ${D}${PTEST_PATH}/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc
new file mode 100644
index 0000000..8135b0f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc
@@ -0,0 +1,48 @@
+SUMMARY = "An implementation of JSON Schema validation for Python"
+HOMEPAGE = "https://github.com/Julian/jsonschema"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8 \
+                    file://json/LICENSE;md5=9d4de43111d33570c8fe49b4cb0e01af"
+DEPENDS += "${PYTHON_PN}-vcversioner-native ${PYTHON_PN}-setuptools-scm-native"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-jsonschema:"
+
+SRC_URI[md5sum] = "f1a0b5011f05a02a8dee1070cd10a26d"
+SRC_URI[sha256sum] = "c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"
+
+PACKAGECONFIG ??= "format"
+PACKAGECONFIG[format] = ",,,\
+    ${PYTHON_PN}-idna \
+    ${PYTHON_PN}-jsonpointer \
+    ${PYTHON_PN}-webcolors \
+    ${PYTHON_PN}-rfc3987 \
+    ${PYTHON_PN}-strict-rfc3339 \
+"
+PACKAGECONFIG[nongpl] = ",,,\
+    ${PYTHON_PN}-idna \
+    ${PYTHON_PN}-jsonpointer \
+    ${PYTHON_PN}-webcolors \
+    ${PYTHON_PN}-rfc3986-validator \
+    ${PYTHON_PN}-rfc3339-validator \
+"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-attrs \
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-importlib-metadata \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-pkgutil \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-pyrsistent \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-unittest \
+    ${PYTHON_PN}-setuptools-scm \
+    ${PYTHON_PN}-zipp \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-kconfiglib.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-kconfiglib.inc
new file mode 100644
index 0000000..3dc4961
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-kconfiglib.inc
@@ -0,0 +1,8 @@
+DESCRIPTION = "Kconfiglib is a Kconfig implementation in Python"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=712177a72a3937909543eda3ad1bfb7c"
+
+SRC_URI[md5sum] = "4ad68618824d4bad1d1de1d7eb838bba"
+SRC_URI[sha256sum] = "bed2cc2216f538eca4255a83a4588d8823563cdd50114f86cf1a2674e602c93c"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc
new file mode 100644
index 0000000..bbbd66c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc
@@ -0,0 +1,12 @@
+SUMMARY = "A fast and thorough lazy object proxy"
+HOMEPAGE = "https://python-lazy-object-proxy.readthedocs.io/"
+LICENSE = "BSD-2-Clause"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9c5c2c74370826468065c5702b8a1fcf"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+SRC_URI[md5sum] = "5c64c06affcd2a7c6ddc848af4280cca"
+SRC_URI[sha256sum] = "f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"
+
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-license-expression.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-license-expression.inc
new file mode 100644
index 0000000..add2581
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-license-expression.inc
@@ -0,0 +1,29 @@
+SUMMARY = "Utility library to parse, compare, simplify and normalize license expressions"
+HOMEPAGE = "https://github.com/nexB/license-expression"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://apache-2.0.LICENSE;md5=e23fadd6ceef8c618fc1c65191d846fa"
+
+SRC_URI[md5sum] = "81477f779099f55071c6a7b88a29bb01"
+SRC_URI[sha256sum] = "8aaa455c5b97c4f2174090178b19792b2a1c620e80591aafd4e0a99b713f9e8d"
+
+inherit pypi ptest
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-booleanpy \
+    "
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-lrparsing.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-lrparsing.inc
new file mode 100644
index 0000000..d125151
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-lrparsing.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Python LR parsing library"
+SECTION = "devel/python"
+LICENSE = "AGPL-3.0"
+LIC_FILES_CHKSUM = "file://agpl-3.0.txt;md5=73f1eb20517c55bf9493b7dd6e480788"
+
+HOMEPAGE = "http://lrparsing.sourceforge.net/"
+BUGTRACKER = "https://sourceforge.net/p/lrparsing/tickets/"
+UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/lrparsing/files/"
+UPSTREAM_CHECK_REGEX = "lrparsing-(?P<pver>\d+(\.\d+)+)"
+SRC_URI = "${SOURCEFORGE_MIRROR}/lrparsing/lrparsing-${PV}.tar.gz"
+SRC_URI[md5sum] = "34357d69bce87654d792cd8f02d148b2"
+SRC_URI[sha256sum] = "b45afda44001dc5ba632934f74c043d40cce653f1a7526cfbcb68f6be055b8d7"
+
+S = "${WORKDIR}/lrparsing-${PV}"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc
new file mode 100644
index 0000000..05b5eae
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc
@@ -0,0 +1,50 @@
+SUMMARY = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
+DESCRIPTION = "lxml is a Pythonic, mature binding for the libxml2 and \
+libxslt libraries. It provides safe and convenient access to these \
+libraries using the ElementTree API. It extends the ElementTree API \
+significantly to offer support for XPath, RelaxNG, XML Schema, XSLT, \
+C14N and much more."
+HOMEPAGE = "http://codespeak.net/lxml"
+SECTION = "devel/python"
+LICENSE = "BSD & GPLv2 & MIT & PSF"
+LIC_FILES_CHKSUM = "file://LICENSES.txt;md5=e4c045ebad958ead4b48008f70838403 \
+                    file://doc/licenses/elementtree.txt;md5=eb34d036a6e3d56314ee49a6852ac891 \
+                    file://doc/licenses/BSD.txt;md5=700a1fc17f4797d4f2d34970c8ee694b \
+                    file://doc/licenses/GPL.txt;md5=94d55d512a9ba36caa9b7df079bae19f \
+                    file://src/lxml/isoschematron/resources/rng/iso-schematron.rng;beginline=2;endline=7;md5=fc85684a8dd5fa272c086bceb0d99e10 \
+                    file://src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl;beginline=2;endline=24;md5=cc86b7b2bbc678e13f58ea403eb9929b \
+                    file://src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl;beginline=2;endline=7;md5=5b03236d293dc3784205542b409d2f53 \
+                    "
+
+DEPENDS += "libxml2 libxslt"
+
+SRC_URI[md5sum] = "f088e452ed45b030b6f84269f1e84d11"
+SRC_URI[sha256sum] = "8620ce80f50d023d414183bf90cc2576c2837b88e00bea3f33ad2630133bbb60"
+
+DISTUTILS_BUILD_ARGS += " \
+                     --with-xslt-config='pkg-config libxslt' \
+                     --with-xml2-config='pkg-config libxml-2.0' \
+"
+
+DISTUTILS_INSTALL_ARGS += " \
+                     --with-xslt-config='pkg-config libxslt' \
+                     --with-xml2-config='pkg-config libxml-2.0' \
+"
+
+inherit pypi
+
+# {standard input}: Assembler messages:
+# {standard input}:1488805: Error: branch out of range
+DEBUG_OPTIMIZATION_remove_mips = " -Og"
+DEBUG_OPTIMIZATION_append_mips = " -O"
+BUILD_OPTIMIZATION_remove_mips = " -Og"
+BUILD_OPTIMIZATION_append_mips = " -O"
+
+DEBUG_OPTIMIZATION_remove_mipsel = " -Og"
+DEBUG_OPTIMIZATION_append_mipsel = " -O"
+BUILD_OPTIMIZATION_remove_mipsel = " -Og"
+BUILD_OPTIMIZATION_append_mipsel = " -O"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} += "libxml2 libxslt ${PYTHON_PN}-compression"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto.inc
new file mode 100644
index 0000000..81c8164
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto.inc
@@ -0,0 +1,64 @@
+SUMMARY = "A Python crypto and SSL toolkit"
+HOMEPAGE = "https://gitlab.com/m2crypto/m2crypto"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=b0e1f0b7d0ce8a62c18b1287b991800e"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-m2crypto:"
+
+SRC_URI += "file://0001-setup.py-link-in-sysroot-not-in-host-directories.patch \
+            file://cross-compile-platform.patch \
+            file://m2crypto-0.26.4-gcc_macros.patch \
+           "
+SRC_URI[md5sum] = "7fce3cbf85eb84a669682892b935746b"
+SRC_URI[sha256sum] = "a1b2751cdadc6afac3df8a5799676b7b7c67a6ad144bb62d38563062e7cd3fc6"
+
+PYPI_PACKAGE = "M2Crypto"
+inherit pypi siteinfo
+
+DEPENDS += "openssl swig-native"
+RDEPENDS_${PN} += "\
+  ${PYTHON_PN}-datetime \
+  ${PYTHON_PN}-distutils \
+  ${PYTHON_PN}-logging \
+  ${PYTHON_PN}-netclient \
+  ${PYTHON_PN}-netserver \
+  ${PYTHON_PN}-numbers \
+  ${PYTHON_PN}-smtpd \
+  ${PYTHON_PN}-typing \
+  ${PYTHON_PN}-xmlrpc \
+"
+
+DISTUTILS_BUILD_ARGS += "build_ext --openssl=${STAGING_EXECPREFIXDIR} -I${STAGING_INCDIR}"
+DISTUTILS_INSTALL_ARGS += "build_ext --openssl=${STAGING_EXECPREFIXDIR}"
+
+SWIG_FEATURES_x86 = "-D__i386__"
+SWIG_FEATURES_x32 = "-D__ILP32__"
+SWIG_FEATURES ?= "-D__${HOST_ARCH}__"
+export SWIG_FEATURES
+
+# Get around a problem with swig, but only if the
+# multilib header file exists.
+#
+do_configure_prepend() {
+    ${CPP} -dM - < /dev/null | grep -v '__\(STDC\|REGISTER_PREFIX\|GNUC\|STDC_HOSTED\)__' \
+    | sed 's/^\(#define \([^ ]*\) .*\)$/#undef \2\n\1/' > ${S}/SWIG/gcc_macros.h
+
+    if [ "${SITEINFO_BITS}" = "64" ];then
+        bit="64"
+    else
+        bit="32"
+    fi
+
+    if [ -e ${STAGING_INCDIR}/openssl/opensslconf-${bit}.h ] ;then
+        for i in SWIG/_ec.i SWIG/_evp.i; do
+            sed -i -e "s/opensslconf.*\./opensslconf-${bit}\./" "${S}/$i"
+        done
+    elif [ -e ${STAGING_INCDIR}/openssl/opensslconf-n${bit}.h ] ;then
+        for i in SWIG/_ec.i SWIG/_evp.i; do
+            sed -i -e "s/opensslconf.*\./opensslconf-n${bit}\./" "${S}/$i"
+        done
+    fi
+}
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch
new file mode 100644
index 0000000..b339d93
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch
@@ -0,0 +1,35 @@
+From dfb83a41aaeae326e9b6f02b233af375bc7b8815 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 29 Mar 2013 15:17:17 +0100
+Subject: [PATCH] setup.py: link in sysroot, not in host directories
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+
+Upstream-status: Unknown
+---
+ setup.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+Index: M2Crypto-0.30.1/setup.py
+===================================================================
+--- M2Crypto-0.30.1.orig/setup.py
++++ M2Crypto-0.30.1/setup.py
+@@ -130,6 +130,7 @@ class _M2CryptoBuildExt(build_ext.build_
+         self.set_undefined_options('build', ('bundledlls', 'bundledlls'))
+ 
+         self.libraries = ['ssl', 'crypto']
++        self.openssl = os.environ.get( "STAGING_DIR" )
+         if sys.platform == 'win32':
+             self.libraries = ['ssleay32', 'libeay32']
+             if self.openssl and openssl_version(self.openssl, 0x10100000, True):
+@@ -150,8 +151,8 @@ class _M2CryptoBuildExt(build_ext.build_
+ 
+         if self.openssl is not None:
+             log.debug('self.openssl = %s', self.openssl)
+-            openssl_library_dir = os.path.join(self.openssl, 'lib')
+-            openssl_include_dir = os.path.join(self.openssl, 'include')
++            openssl_library_dir = os.environ.get( "STAGING_LIBDIR" )
++            openssl_include_dir = os.environ.get( "STAGING_INCDIR" )
+ 
+             self.library_dirs.append(openssl_library_dir)
+             self.include_dirs.append(openssl_include_dir)
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch
new file mode 100644
index 0000000..4b64f46
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch
@@ -0,0 +1,33 @@
+Do not compute platform, this does not work in cross compile environment
+since it pokes at the system for getting architecture values
+
+Upstream-Status: Inappropriate
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: M2Crypto-0.30.1/setup.py
+===================================================================
+--- M2Crypto-0.30.1.orig/setup.py
++++ M2Crypto-0.30.1/setup.py
+@@ -160,22 +160,6 @@ class _M2CryptoBuildExt(build_ext.build_
+             log.debug('self.include_dirs = %s', self.include_dirs)
+             log.debug('self.library_dirs = %s', self.library_dirs)
+ 
+-        if platform.system() == "Linux":
+-            # For RedHat-based distros, the '-D__{arch}__' option for
+-            # Swig needs to be normalized, particularly on i386.
+-            mach = platform.machine().lower()
+-            if mach in ('i386', 'i486', 'i586', 'i686'):
+-                arch = '__i386__'
+-            elif mach in ('ppc64', 'powerpc64', 'ppc64le', 'ppc64el'):
+-                arch = '__powerpc64__'
+-            elif mach in ('ppc', 'powerpc'):
+-                arch = '__powerpc__'
+-            else:
+-                arch = '__%s__' % mach
+-            self.swig_opts.append('-D%s' % arch)
+-            if mach in ('ppc64le', 'ppc64el'):
+-                self.swig_opts.append('-D_CALL_ELF=2')
+-
+         self.swig_opts.extend(['-I%s' % i for i in self.include_dirs])
+ 
+         # Some Linux distributor has added the following line in
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch
new file mode 100644
index 0000000..7f6dd29
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch
@@ -0,0 +1,35 @@
+Imported from Fedora
+
+Index: M2Crypto-0.30.1/SWIG/_m2crypto.i
+===================================================================
+--- M2Crypto-0.30.1.orig/SWIG/_m2crypto.i
++++ M2Crypto-0.30.1/SWIG/_m2crypto.i
+@@ -8,6 +8,11 @@
+  *
+  */
+ 
++%import "gcc_macros.h"
++
++%ignore WCHAR_MAX;
++%ignore WCHAR_MIN;
++
+ %module(threads=1) m2crypto
+ /* We really don't need threadblock (PyGILState_Ensure() etc.) anywhere.
+    Disable threadallow as well, only enable it for operations likely to
+@@ -15,11 +20,6 @@
+ %nothreadblock;
+ %nothreadallow;
+ 
+-#if SWIG_VERSION >= 0x030000
+-#define __WCHAR_MAX__ __WCHAR_MAX
+-#define __WCHAR_MIN__ __WCHAR_MIN
+-#endif
+-
+ %{
+ #ifdef _WIN32
+ #define _WINSOCKAPI_
+@@ -95,4 +95,3 @@ static PyObject *x509_store_verify_cb_fu
+ %constant int encrypt = 1;
+ %constant int decrypt = 0;
+ #endif
+-  
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-mako.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-mako.inc
new file mode 100644
index 0000000..abcbb88
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-mako.inc
@@ -0,0 +1,21 @@
+SUMMARY = "A super-fast templating language that borrows the best ideas from the existing templating languages"
+HOMEPAGE = "http://www.makotemplates.org/"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=df7e6c7c82990acf0228a55e00d29bc9"
+
+PYPI_PACKAGE = "Mako"
+
+inherit pypi
+
+SRC_URI[md5sum] = "6c3f2da0b74af529a4c4a537d0848bf2"
+SRC_URI[sha256sum] = "a36919599a9b7dc5d86a7a8988f23a9a3a3d083070023bab23d64f7f1d1e0a4b"
+
+RDEPENDS_${PN} = " \
+    ${PYTHON_PN}-html \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc
new file mode 100644
index 0000000..4808762
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc
@@ -0,0 +1,27 @@
+DESCRIPTION = "Implements a XML/HTML/XHTML Markup safe string for Python"
+HOMEPAGE = "http://github.com/mitsuhiko/markupsafe"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
+
+SRC_URI[md5sum] = "43fd756864fe42063068e092e220c57b"
+SRC_URI[sha256sum] = "29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"
+
+PYPI_PACKAGE = "MarkupSafe"
+inherit pypi ptest
+
+RDEPENDS_${PN} += "${PYTHON_PN}-stringold"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -f ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe/0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe/0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch
new file mode 100644
index 0000000..941bed3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe/0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch
@@ -0,0 +1,33 @@
+From 3484bdfa7adbaebcf8bb8e7d4820f64b12717932 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Fri, 29 Jul 2016 15:37:18 +0800
+Subject: [PATCH] python-mccabe: remove unnecessary setup_requires
+ pytest-runner
+
+* Remove setup_requires pytest-runner as the
+  setup_requires pytest-runner actually is not
+  used for pytest which only in do_compile phase
+  via setup.py build
+
+Upstream-Status: Pending
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ setup.py | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index e59903d..bf2aaba 100644
+--- a/setup.py
++++ b/setup.py
+@@ -33,7 +33,6 @@ setup(
+     license='Expat license',
+     py_modules=['mccabe'],
+     zip_safe=False,
+-    setup_requires=['pytest-runner'],
+     tests_require=['pytest'],
+     entry_points={
+         'flake8.extension': [
+-- 
+2.8.1
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-meld3.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-meld3.inc
new file mode 100644
index 0000000..558e436
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-meld3.inc
@@ -0,0 +1,15 @@
+SUMMARY = "meld3 templating system used by Supervisor"
+DESCRIPTION = "\
+meld3 is an HTML/XML templating system for Python which keeps \
+template markup and dynamic rendering logic separate from one \
+another.  See http://www.entrian.com/PyMeld for a treatise on the \
+benefits of this pattern."
+HOMEPAGE = "https://github.com/supervisor/meld3"
+LICENSE = "BSD-4-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=9e7581cef5645475fcefebdc15ed7abf"
+
+SRC_URI[md5sum] = "3ccc78cd79cffd63a751ad7684c02c91"
+SRC_URI[sha256sum] = "f7b754a0fde7a4429b2ebe49409db240b5699385a572501bb0d5627d299f9558"
+
+PYPI_PACKAGE = "meld3"
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-more-itertools.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-more-itertools.inc
new file mode 100644
index 0000000..0b684c1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-more-itertools.inc
@@ -0,0 +1,21 @@
+DESCRIPTION = "More routines for operating on iterables, beyond itertools"
+HOMEPAGE = "https://github.com/erikrose/more-itertools"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3396ea30f9d21389d7857719816f83b5"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit ptest
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient.inc
new file mode 100644
index 0000000..bca58f7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "Provides enhanced HTTPS support for httplib and urllib2 using PyOpenSSL"
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://MANIFEST.in;md5=ce22c0cd986d2de3f7073cd6b5523ae0"
+
+SRC_URI[md5sum] = "b0fc8ea38f87d2c1ab1ed79a95c078f9"
+SRC_URI[sha256sum] = "d72faed0376ab039736c2ba12e30695e2788c4aa569c9c3e3d72131de2592210"
+
+PYPI_PACKAGE = "ndg_httpsclient"
+
+DEPENDS += " \
+    ${PYTHON_PN}-pyopenssl \
+    ${PYTHON_PN}-pyasn1 \
+"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-pyopenssl \
+    ${PYTHON_PN}-pyasn1 \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = ""
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc
new file mode 100644
index 0000000..bea9be6
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc
@@ -0,0 +1,13 @@
+SUMMARY = "A network address manipulation library for Python."
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e6345d695ffe3776f68a56fe7962db44"
+
+SRC_URI[md5sum] = "51019ef59c93f3979bcb37d3b8527e07"
+SRC_URI[sha256sum] = "38aeec7cdd035081d3a4c306394b19d677623bf76fa0913f6695127c7753aefd"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-xml \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-netifaces.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-netifaces.inc
new file mode 100644
index 0000000..daccc4f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-netifaces.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "Portable network interface information for Python"
+SECTION = "devel/python"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=a53cbc7cb75660694e138ba973c148df"
+
+SRC_URI[md5sum] = "de92cc322b4f56047c073f802ad77860"
+SRC_URI[sha256sum] = "2dee9ffdd16292878336a58d04a20f0ffe95555465fee7c9bd23b3490ef2abf3"
+
+inherit pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-networkx.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-networkx.inc
new file mode 100644
index 0000000..4bca636
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-networkx.inc
@@ -0,0 +1,8 @@
+DESCRIPTION = "Python package for creating and manipulating graphs and networks"
+LICENSE = "BSD-3-Clause"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+                   ${PYTHON_PN}-decorator \
+                   "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-numeric/0001-it-tries-to-define-this-function-differently-than-it.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-numeric/0001-it-tries-to-define-this-function-differently-than-it.patch
new file mode 100644
index 0000000..81ed744
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-numeric/0001-it-tries-to-define-this-function-differently-than-it.patch
@@ -0,0 +1,30 @@
+From 322e781c67d7a78fc2cfc3d377f50b825fc64abb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Jun 2017 20:21:01 -0700
+Subject: [PATCH] it tries to define this function differently than it is
+ defined in sys/time.h.
+
+Use the definition from system
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Packages/RNG/Src/ranf.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/Packages/RNG/Src/ranf.c b/Packages/RNG/Src/ranf.c
+index 5ca7dc5..e669fa8 100644
+--- a/Packages/RNG/Src/ranf.c
++++ b/Packages/RNG/Src/ranf.c
+@@ -149,9 +149,6 @@ void Mixranf(int *s,u32 s48[2])
+ #else
+ 	struct timeval tv;
+ 	struct timezone tz;
+-#if !defined(__sgi)
+-	int gettimeofday(struct timeval *, struct timezone *);
+-#endif
+ 
+ 	(void)gettimeofday(&tv,&tz);
+ 	s48[0] = (u32)tv.tv_sec;
+-- 
+2.13.0
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib.inc
new file mode 100644
index 0000000..fea0714
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib.inc
@@ -0,0 +1,25 @@
+SUMMARY = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"
+HOMEPAGE = "https://github.com/idan/oauthlib"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5ba9ce41463615e082609806255bce1b"
+
+SRC_URI = "https://pypi.python.org/packages/a5/8a/212e9b47fb54be109f3ff0684165bb38c51117f34e175c379fce5c7df754/oauthlib-${PV}.tar.gz"
+SRC_URI[md5sum] = "277a9a966cc8c72e492b4eeb41332445"
+SRC_URI[sha256sum] = "ce57b501e906ff4f614e71c36a3ab9eacbb96d35c24d1970d2539bbc3ec70ce1"
+
+S = "${WORKDIR}/oauthlib-${PV}"
+
+# The following configs & dependencies are from setuptools extras_require.
+# These dependencies are optional, hence can be controlled via PACKAGECONFIG.
+# The upstream names may not correspond exactly to bitbake package names.
+#
+# Uncomment this line to enable all the optional features.
+#PACKAGECONFIG ?= "test signedtoken signals rsa"
+PACKAGECONFIG[test] = ",,,${PYTHON_PN}-blinker ${PYTHON_PN}-cryptography ${PYTHON_PN}-nose ${PYTHON_PN}-pyjwt"
+PACKAGECONFIG[signedtoken] = ",,,${PYTHON_PN}-cryptography ${PYTHON_PN}-pyjwt"
+PACKAGECONFIG[signals] = ",,,${PYTHON_PN}-blinker"
+PACKAGECONFIG[rsa] = ",,,${PYTHON_PN}-cryptography"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-core ${PYTHON_PN}-crypt ${PYTHON_PN}-datetime ${PYTHON_PN}-json ${PYTHON_PN}-logging ${PYTHON_PN}-math ${PYTHON_PN}-netclient ${PYTHON_PN}-unittest"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-packaging.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-packaging.inc
new file mode 100644
index 0000000..418483f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-packaging.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "Core utilities for Python packages"
+HOMEPAGE = "https://github.com/pypa/packaging"
+LICENSE = "Apache-2.0 & BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=faadaedca9251a90b205c9167578ce91"
+
+SRC_URI[md5sum] = "19e0d1f82a9007b448650ccfeffd0a26"
+SRC_URI[sha256sum] = "3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+RDEPENDS_${PN} += "${PYTHON_PN}-six ${PYTHON_PN}-pyparsing"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type.inc
new file mode 100644
index 0000000..147ea64
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type.inc
@@ -0,0 +1,25 @@
+SUMMARY = "Simplifies building parse types based on the parse module"
+HOMEPAGE = "https://github.com/jenisys/parse_type"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d07323820cca0f1d192cbbf8a0516f95"
+
+SRC_URI[md5sum] = "b5fa59e45965d1b2896023742df2e707"
+SRC_URI[sha256sum] = "f596bdc75d3dd93036fbfe3d04127da9f6df0c26c36e01e76da85adef4336b3c"
+
+PYPI_PACKAGE = "parse_type"
+inherit pypi ptest
+
+RDEPENDS_${PN} += "${PYTHON_PN}-parse"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-parse.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-parse.inc
new file mode 100644
index 0000000..ecfd671
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-parse.inc
@@ -0,0 +1,26 @@
+SUMMARY = "Parse strings using a specification based on the Python format() syntax"
+HOMEPAGE = "https://github.com/r1chardj0n3s/parse"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://parse.py;beginline=1325;endline=1345;md5=3d987b2e73881bbce768a80f9cdd23d9"
+
+SRC_URI[md5sum] = "a5aa82b2b8b4d733d227e3c99d7d01b4"
+SRC_URI[sha256sum] = "a6d4e2c2f1fbde6717d28084a191a052950f758c0cbd83805357e6575c2b95c0"
+
+inherit pypi ptest
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-logging \
+    "
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	cp -f ${S}/test_parse.py ${D}${PTEST_PATH}/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-passlib.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-passlib.inc
new file mode 100644
index 0000000..9cf0280
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-passlib.inc
@@ -0,0 +1,19 @@
+SUMMARY = "comprehensive password hashing framework supporting over 30 schemes"
+DESCRIPTION = "\
+Passlib is a password hashing library for Python 2 & 3, which provides cross-platform \
+implementations of over 30 password hashing algorithms, as well as a framework for \
+managing existing password hashes. It’s designed to be useful for a wide range of \
+tasks, from verifying a hash found in /etc/shadow, to providing full-strength password \
+hashing for multi-user applications."
+HOMEPAGE = "https://bitbucket.org/ecollins/passlib"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=44fd7dcd5d42b48d6dea59ac643a0179"
+
+SRC_URI[md5sum] = "b908529cfd4c33057c244324c692eae7"
+SRC_URI[sha256sum] = "8d666cef936198bc2ab47ee9b0410c94adf2ba798e5a84bf220be079ae7ab6a8"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-crypt \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pathlib2.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pathlib2.inc
new file mode 100644
index 0000000..d69d527
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pathlib2.inc
@@ -0,0 +1,11 @@
+DESCRIPTION = "Object-oriented filesystem paths"
+HOMEPAGE = "https://github.com/mcmtroffaes/pathlib2"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=042856c23a3e903b33bf361ea1cbe29a"
+
+SRC_URI[md5sum] = "f2bd0a363eb0f8fa0556f35c1d9e66fb"
+SRC_URI[sha256sum] = "6cd9a47b597b37cc57de1c05e56fb1a1c9cc9fab04fe78c29acd090418529868"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-six ${PYTHON_PN}-ctypes"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-periphery.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-periphery.inc
new file mode 100644
index 0000000..0171f63
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-periphery.inc
@@ -0,0 +1,9 @@
+DESCRIPTION = "A pure Python 2/3 library for peripheral I/O (GPIO, LED, PWM, SPI, I2C, MMIO, Serial) in Linux."
+HOMEPAGE = "http://pythonhosted.org/python-periphery/"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=1ecf5c2354c22fb5bfd53eefb8f9e65b"
+
+PYPI_PACKAGE = "python-periphery"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-mmap"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc
new file mode 100644
index 0000000..c6230b2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc
@@ -0,0 +1,23 @@
+SUMMARY = "A Pure Python Expect like Module for Python"
+HOMEPAGE = "http://pexpect.readthedocs.org/"
+SECTION = "devel/python"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1c7a725251880af8c6a148181665385b"
+
+SRC_URI += "file://0001-FSM.py-change-shebang-from-python-to-python3.patch"
+
+SRC_URI[md5sum] = "153eb25184249d6a85fde9acf4804085"
+SRC_URI[sha256sum] = "fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/pexpect"
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-terminal \
+    ${PYTHON_PN}-resource \
+    ${PYTHON_PN}-fcntl \
+    ${PYTHON_PN}-ptyprocess \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pika.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pika.inc
new file mode 100644
index 0000000..bde154f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pika.inc
@@ -0,0 +1,22 @@
+SUMMARY = "Pika is a RabbitMQ (AMQP 0-9-1) client library for Python."
+DESCRIPTION = " \
+Pika is a pure-Python implementation of the AMQP 0-9-1 protocol \
+including RabbitMQ’s extensions. \
+"
+SECTION = "devel/python"
+HOMEPAGE = "https://pika.readthedocs.io"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=535836bf0a5de515a7bfee026075701d"
+
+SRC_URI[md5sum] = "6002400cdd33bf85ec8680ece72910d4"
+SRC_URI[sha256sum] = "9fa76ba4b65034b878b2b8de90ff8660a59d925b087c5bb88f8fdbb4b64a1dbf"
+
+inherit pypi
+
+PYPI_PACKAGE = "pika"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-tornado \
+    ${PYTHON_PN}-twisted \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pint.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pint.inc
new file mode 100644
index 0000000..d022c41
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pint.inc
@@ -0,0 +1,35 @@
+DESCRIPTION = "Interval arithmetic for Python"
+HOMEPAGE = "https://github.com/AlexandreDecan/python-intervals"
+SECTION = "devel/python"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=bccf824202692270a1e0829a62e3f47b"
+
+PYPI_PACKAGE := "Pint"
+
+inherit pypi ptest
+
+SRC_URI[md5sum] = "3a8f29c2a30efd35af4b5c5a224ef965"
+SRC_URI[sha256sum] = "308f1070500e102f83b6adfca6db53debfce2ffc5d3cbe3f6c367da359b5cf4d"
+
+DEPENDS += "python3-setuptools-scm-native"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-setuptools \
+    ${PYTHON_PN}-packaging \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/testsuite
+	cp -rf ${S}/pint/testsuite/* ${D}${PTEST_PATH}/testsuite/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc
new file mode 100644
index 0000000..1198d5f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc
@@ -0,0 +1,27 @@
+SUMMARY = "Plugin and hook calling mechanisms for python"
+HOMEPAGE = "https://github.com/pytest-dev/pluggy"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1c8206d16fd5cc02fa9b0bb98955e5c2"
+
+SRC_URI[md5sum] = "7f610e28b8b34487336b585a3dfb803d"
+SRC_URI[sha256sum] = "15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+RDEPENDS_${PN} += "${PYTHON_PN}-importlib-metadata \
+                   ${PYTHON_PN}-more-itertools \
+"
+
+inherit pypi ptest
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/testing
+	cp -rf ${S}/testing/* ${D}${PTEST_PATH}/testing/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ply.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ply.inc
new file mode 100644
index 0000000..149fe05
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ply.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Python Lex and Yacc"
+DESCRIPTION = "Python ply: PLY is yet another implementation of lex and yacc for Python"
+HOMEPAGE = "https://pypi.python.org/pypi/ply"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://README.md;beginline=5;endline=32;md5=f5ee5c355c0e6719c787a71b8f0fa96c"
+
+SRC_URI[md5sum] = "6465f602e656455affcd7c5734c638f8"
+SRC_URI[sha256sum] = "00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pocketsphinx.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pocketsphinx.inc
new file mode 100644
index 0000000..1f8f66a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pocketsphinx.inc
@@ -0,0 +1,9 @@
+SUMMARY = "This package provides a python interface to CMU Sphinxbase and Pocketsphinx libraries created with SWIG and Setuptools."
+SECTION = "devel/python"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=826ebda787eb48e78aec2624f9faba72"
+
+SRC_URI[md5sum] = "c0f2bfd54bc4c438c3bb64825f57d575"
+SRC_URI[sha256sum] = "2cc493ed48c1301e0d2e69b137dc646c2f8caca190ef4bce61836eac96d1796f"
+
+DEPENDS += "swig-native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pretend.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pretend.inc
new file mode 100644
index 0000000..58f1961
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pretend.inc
@@ -0,0 +1,9 @@
+SUMMARY = "A library for stubbing in Python"
+HOMEPAGE = "https://github.com/alex/pretend"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=411780c0b7fa756753e94affeee5bc99"
+
+SRC_URI[md5sum] = "ad53883ede48aeac7ae584f0de0240e8"
+SRC_URI[sha256sum] = "c90eb810cde8ebb06dafcb8796f9a95228ce796531bc806e794c2f4649aa1b10"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-prettytable.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-prettytable.inc
new file mode 100644
index 0000000..c77a491
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-prettytable.inc
@@ -0,0 +1,43 @@
+SUMMARY = "Python library for displaying tabular data in a ASCII table format"
+HOMEPAGE = "http://code.google.com/p/prettytable"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3e73500ffa52de5071cff65990055282"
+
+SRC_URI[md5sum] = "0c1361104caff8b09f220748f9d69899"
+SRC_URI[sha256sum] = "a53da3b43d7a5c229b5e3ca2892ef982c46b7923b51e98f0db49956531211c4f"
+
+SRCNAME = "prettytable"
+
+SRC_URI = "https://pypi.python.org/packages/source/P/PrettyTable/${SRCNAME}-${PV}.zip"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+do_install_append() {
+    perm_files=`find "${D}${PYTHON_SITEPACKAGES_DIR}/" -name "*.txt" -o -name "PKG-INFO"`
+    for f in $perm_files; do
+        chmod 644 "${f}"
+    done
+}
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/PrettyTable/"
+UPSTREAM_CHECK_REGEX = "/PrettyTable/(?P<pver>(\d+[\.\-_]*)+)"
+
+BBCLASSEXTEND = "native nativesdk"
+inherit ptest
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN} += " \
+	${PYTHON_PN}-math \
+	${PYTHON_PN}-html \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	cp -f ${S}/prettytable_test.py ${D}${PTEST_PATH}/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-progress.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-progress.inc
new file mode 100644
index 0000000..d59ba2c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-progress.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Easy progress reporting for Python"
+HOMEPAGE = "http://github.com/verigak/progress/"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aef5566ac4fede9815eccf124c281317"
+
+SRC_URI[md5sum] = "408df0e3db0ad4b74f19f6beec814ae4"
+SRC_URI[sha256sum] = "69ecedd1d1bbe71bf6313d88d1e6c4d2957b7f1d4f71312c211257f7dae64372"
+
+RDEPENDS_${PN}_class-target += " \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-math \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit.inc
new file mode 100644
index 0000000..91aa7bb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Library for building powerful interactive command lines in Python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b2cde7da89f0c1f3e49bf968d00d554f"
+
+SRC_URI[md5sum] = "5016c523e603cd7119644fbc0f00ce53"
+SRC_URI[sha256sum] = "f15af68f66e664eaa559d4ac8a928111eebd5feda0c11738b5998045224829db"
+
+PYPI_PACKAGE = "prompt_toolkit"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-terminal \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-wcwidth \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc
new file mode 100644
index 0000000..5716894
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc
@@ -0,0 +1,32 @@
+DESCRIPTION = "Protocol Buffers"
+HOMEPAGE = "https://developers.google.com/protocol-buffers/"
+SECTION = "devel/python"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=19e8f490f9526b1de84f8d949cfcfd4e"
+
+inherit pypi
+
+SRC_URI[md5sum] = "eeda7dea65fc94e560fc9a8180eb1872"
+SRC_URI[sha256sum] = "c77c974d1dadf246d789f6dad1c24426137c9091e930dbf50e0a29c1fcf00b1f"
+
+# http://errors.yoctoproject.org/Errors/Details/184715/
+# Can't find required file: ../src/google/protobuf/descriptor.proto
+CLEANBROKEN = "1"
+
+UPSTREAM_CHECK_REGEX = "protobuf/(?P<pver>\d+(\.\d+)+)/"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-pkgutil \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-unittest \
+"
+
+# For usage in other recipies when compiling protobuf files (e.g. by grpcio-tools)
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc
new file mode 100644
index 0000000..dfb33e8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc
@@ -0,0 +1,22 @@
+SUMMARY = "A cross-platform process and system utilities module for Python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e35fd9f271d19d5f742f20a9d1f8bb8b"
+
+SRC_URI[md5sum] = "ed7b0f11ed214bcabbe76b7cf52f3ae3"
+SRC_URI[sha256sum] = "685ec16ca14d079455892f25bd124df26ff9137664af445563c1bd36629b5e0e"
+
+PACKAGES =+ "${PN}-tests"
+
+FILES_${PN}-tests += " \
+    ${PYTHON_SITEPACKAGES_DIR}/psutil/test* \
+    ${PYTHON_SITEPACKAGES_DIR}/psutil/__pycache__/test* \
+"
+
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-xml \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc
new file mode 100644
index 0000000..a6dc21c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc
@@ -0,0 +1,41 @@
+SUMMARY = "Run a subprocess in a pseudo terminal"
+HOMEPAGE = "http://ptyprocess.readthedocs.io/en/latest/"
+SECTION = "devel/python"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cfdcd51fa7d5808da4e74346ee394490"
+
+SRCNAME = "ptyprocess"
+
+SRC_URI[md5sum] = "37402d69f3b50913d4d483587bffad8f"
+SRC_URI[sha256sum] = "923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0"
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/ptyprocess"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-fcntl \
+    ${PYTHON_PN}-terminal \
+    ${PYTHON_PN}-resource \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit ptest
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+	${PYTHON_PN}-fcntl \
+	${PYTHON_PN}-terminal \
+	${PYTHON_PN}-resource \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio.inc
new file mode 100644
index 0000000..d150409
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio.inc
@@ -0,0 +1,11 @@
+SUMMARY = "Support for the Linux 2.6.x ALSA Sound System"
+SECTION = "devel/python"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1a3b161aa0fcec32a0c8907a2219ad9d"
+
+SRC_URI[md5sum] = "b46f69561bc85fc52e698b2440ca251e"
+SRC_URI[sha256sum] = "84e8f8da544d7f4bd96479ce4a237600077984d9be1d7f16c1d9a492ecf50085"
+
+DEPENDS += "alsa-lib"
+
+RDEPENDS_${PN} += "libasound"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc
new file mode 100644
index 0000000..ce97919
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc
@@ -0,0 +1,29 @@
+SUMMARY = "A collection of ASN.1-based protocols modules."
+DESCRIPTION = "A collection of ASN.1 modules expressed in form of pyasn1\
+ classes. Includes protocols PDUs definition (SNMP, LDAP etc.) and various\
+ data structures (X.509, PKCS etc.)."
+HOMEPAGE = "https://github.com/etingof/pyasn1-modules"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a14482d15c2249de3b6f0e8a47e021fd"
+
+SRC_URI[md5sum] = "18c77d56abeef631d94f95ff2d652859"
+SRC_URI[sha256sum] = "0c35a52e00b672f832e5846826f1fb7507907f7d52fba6faa9e3c4cbe874fe4b"
+
+inherit pypi ptest
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pyasn1"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc
new file mode 100644
index 0000000..d955764
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc
@@ -0,0 +1,31 @@
+SUMMARY = "Python library implementing ASN.1 types."
+HOMEPAGE = "http://pyasn1.sourceforge.net/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=a14482d15c2249de3b6f0e8a47e021fd"
+
+SRC_URI[md5sum] = "dffae4ff9f997a83324b3f33fe62be54"
+SRC_URI[sha256sum] = "aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"
+
+RDEPENDS_${PN}_class-target += " \
+    ${PYTHON_PN}-codecs \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-math \
+    ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+inherit ptest
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyaudio.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyaudio.inc
new file mode 100644
index 0000000..0d3ddb1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyaudio.inc
@@ -0,0 +1,13 @@
+SUMMARY = "PyAudio provides Python bindings for PortAudio, the cross-platform audio I/O library"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README;md5=288793c2b9b05bd67abbd2a8f5d144f7"
+
+PYPI_PACKAGE = "PyAudio"
+
+SRC_URI[md5sum] = "7e4c88139284033f67b4336c74eda3b8"
+SRC_URI[sha256sum] = "93bfde30e0b64e63a46f2fd77e85c41fd51182a4a3413d9edfaf9ffaa26efb74"
+
+DEPENDS += "portaudio-v19"
+
+RDEPENDS_${PN} += "portaudio-v19"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11.inc
new file mode 100644
index 0000000..d1d53e1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11.inc
@@ -0,0 +1,7 @@
+SUMMARY = "Seamless operability between C++11 and Python"
+HOMEPAGE = "https://github.com/wjakob/pybind11"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=beb87117af69fd10fbf9fb14c22a2e62"
+
+SRC_URI[md5sum] = "23fdca8191b16ce3e7f38fb9e4252b2d"
+SRC_URI[sha256sum] = "72e6def53fb491f7f4e92692029d2e7bb5a0783314f20d80222735ff10a75758"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto.inc
new file mode 100644
index 0000000..232cdb7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto.inc
@@ -0,0 +1,21 @@
+DESCRIPTION = "Cryptographic modules for Python."
+HOMEPAGE = "http://www.pycrypto.org/"
+LICENSE = "PSFv2"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=35f354d199e8cb7667b059a23578e63d"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-pycrypto:"
+
+DEPENDS += " gmp"
+
+inherit pypi autotools-brokensep
+
+SRC_URI += "file://cross-compiling.patch \
+            file://CVE-2013-7459.patch \
+           "
+
+SRC_URI[md5sum] = "55a61a054aa66812daf5161a0d5d7eda"
+SRC_URI[sha256sum] = "f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c"
+
+do_compile[noexec] = "1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/CVE-2013-7459.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/CVE-2013-7459.patch
new file mode 100644
index 0000000..9006c5c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/CVE-2013-7459.patch
@@ -0,0 +1,98 @@
+From 8dbe0dc3eea5c689d4f76b37b93fe216cf1f00d4 Mon Sep 17 00:00:00 2001
+From: Legrandin <helderijs@gmail.com>
+Date: Sun, 22 Dec 2013 22:24:46 +0100
+Subject: [PATCH] Throw exception when IV is used with ECB or CTR
+
+The IV parameter is currently ignored when initializing
+a cipher in ECB or CTR mode.
+
+For CTR mode, it is confusing: it takes some time to see
+that a different parameter is needed (the counter).
+
+For ECB mode, it is outright dangerous.
+
+This patch forces an exception to be raised.
+
+Upstream-Status: Backport
+[https://github.com/dlitz/pycrypto/commit/8dbe0dc3eea5c689d4f76b37b93fe216cf1f00d4]
+
+CVE: CVE-2013-7459
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ lib/Crypto/SelfTest/Cipher/common.py | 31 +++++++++++++++++++++++--------
+ src/block_template.c                 | 11 +++++++++++
+ 2 files changed, 34 insertions(+), 8 deletions(-)
+
+diff --git a/lib/Crypto/SelfTest/Cipher/common.py b/lib/Crypto/SelfTest/Cipher/common.py
+index 8bebed9..91ec743 100644
+--- a/lib/Crypto/SelfTest/Cipher/common.py
++++ b/lib/Crypto/SelfTest/Cipher/common.py
+@@ -239,19 +239,34 @@ class RoundtripTest(unittest.TestCase):
+         return """%s .decrypt() output of .encrypt() should not be garbled""" % (self.module_name,)
+ 
+     def runTest(self):
+-        for mode in (self.module.MODE_ECB, self.module.MODE_CBC, self.module.MODE_CFB, self.module.MODE_OFB, self.module.MODE_OPENPGP):
++
++        ## ECB mode
++        mode = self.module.MODE_ECB
++        encryption_cipher = self.module.new(a2b_hex(self.key), mode)
++        ciphertext = encryption_cipher.encrypt(self.plaintext)
++        decryption_cipher = self.module.new(a2b_hex(self.key), mode)
++        decrypted_plaintext = decryption_cipher.decrypt(ciphertext)
++        self.assertEqual(self.plaintext, decrypted_plaintext)
++
++        ## OPENPGP mode
++        mode = self.module.MODE_OPENPGP
++        encryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
++        eiv_ciphertext = encryption_cipher.encrypt(self.plaintext)
++        eiv = eiv_ciphertext[:self.module.block_size+2]
++        ciphertext = eiv_ciphertext[self.module.block_size+2:]
++        decryption_cipher = self.module.new(a2b_hex(self.key), mode, eiv)
++        decrypted_plaintext = decryption_cipher.decrypt(ciphertext)
++        self.assertEqual(self.plaintext, decrypted_plaintext)
++
++        ## All other non-AEAD modes (but CTR)
++        for mode in (self.module.MODE_CBC, self.module.MODE_CFB, self.module.MODE_OFB):
+             encryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
+             ciphertext = encryption_cipher.encrypt(self.plaintext)
+-            
+-            if mode != self.module.MODE_OPENPGP:
+-                decryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
+-            else:
+-                eiv = ciphertext[:self.module.block_size+2]
+-                ciphertext = ciphertext[self.module.block_size+2:]
+-                decryption_cipher = self.module.new(a2b_hex(self.key), mode, eiv)
++            decryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
+             decrypted_plaintext = decryption_cipher.decrypt(ciphertext)
+             self.assertEqual(self.plaintext, decrypted_plaintext)
+ 
++
+ class PGPTest(unittest.TestCase):
+     def __init__(self, module, params):
+         unittest.TestCase.__init__(self)
+diff --git a/src/block_template.c b/src/block_template.c
+index c36b316..8746948 100644
+--- a/src/block_template.c
++++ b/src/block_template.c
+@@ -170,6 +170,17 @@ ALGnew(PyObject *self, PyObject *args, PyObject *kwdict)
+ 				"Key cannot be the null string");
+ 		return NULL;
+ 	}
++	if (IVlen != 0 && mode == MODE_ECB)
++	{
++		PyErr_Format(PyExc_ValueError, "ECB mode does not use IV");
++		return NULL;
++	}
++	if (IVlen != 0 && mode == MODE_CTR)
++	{
++		PyErr_Format(PyExc_ValueError,
++			"CTR mode needs counter parameter, not IV");
++		return NULL;
++	}
+ 	if (IVlen != BLOCK_SIZE && mode != MODE_ECB && mode != MODE_CTR)
+ 	{
+ 		PyErr_Format(PyExc_ValueError,
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/cross-compiling.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/cross-compiling.patch
new file mode 100644
index 0000000..712f3e8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/cross-compiling.patch
@@ -0,0 +1,23 @@
+Index: pycrypto-2.6/setup.py
+===================================================================
+--- pycrypto-2.6.orig/setup.py
++++ pycrypto-2.6/setup.py
+@@ -271,7 +271,8 @@ class PCTBuildConfigure(Command):
+         if not os.path.exists("config.status"):
+             if os.system("chmod 0755 configure") != 0:
+                 raise RuntimeError("chmod error")
+-            cmd = "sh configure"    # we use "sh" here so that it'll work on mingw32 with standard python.org binaries
++            host = os.environ.get("HOST_SYS")
++            cmd = "ac_cv_func_malloc_0_nonnull=yes sh configure --host " + host   # we use "sh" here so that it'll work on mingw32 with standard python.org binaries
+             if self.verbose < 1:
+                 cmd += " -q"
+             if os.system(cmd) != 0:
+@@ -370,7 +371,7 @@ kw = {'name':"pycrypto",
+       'ext_modules': plat_ext + [
+             # _fastmath (uses GNU mp library)
+             Extension("Crypto.PublicKey._fastmath",
+-                      include_dirs=['src/','/usr/include/'],
++                      include_dirs=['src/'],
+                       libraries=['gmp'],
+                       sources=["src/_fastmath.c"]),
+ 
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0001-reflect-2.1-reporting-for-key-imports.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0001-reflect-2.1-reporting-for-key-imports.patch
new file mode 100644
index 0000000..1f31cb8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0001-reflect-2.1-reporting-for-key-imports.patch
@@ -0,0 +1,90 @@
+From ed44474c11f577c1644910964a917a4cf701bb0f Mon Sep 17 00:00:00 2001
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 26 Jan 2016 14:24:26 -0500
+Subject: [PATCH] reflect 2.1 reporting for key imports
+
+GnuPG 2.1 changes how it reports key imports.  These changes should
+make the pygpgme test suite compatible with GnuPG 2.1.
+
+See also:
+https://lists.gnupg.org/pipermail/gnupg-devel/2016-January/030718.html
+
+Upstream-Status: Backport
+
+Signed-off-by: Catalin Enache <catalin.enache@windriver.com>
+
+---
+ tests/test_import.py | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/tests/test_import.py b/tests/test_import.py
+index 10eb816..597eb47 100644
+--- a/tests/test_import.py
++++ b/tests/test_import.py
+@@ -55,7 +55,7 @@ class ImportTestCase(GpgHomeTestCase):
+         ctx = gpgme.Context()
+         with self.keyfile('key1.sec') as fp:
+             result = ctx.import_(fp)
+-        self.assertEqual(result.considered, 1)
++        self.assertEqual(result.considered, 3)
+         self.assertEqual(result.no_user_id, 0)
+         self.assertEqual(result.imported, 1)
+         self.assertEqual(result.imported_rsa, 0)
+@@ -64,18 +64,18 @@ class ImportTestCase(GpgHomeTestCase):
+         self.assertEqual(result.new_sub_keys, 0)
+         self.assertEqual(result.new_signatures, 0)
+         self.assertEqual(result.new_revocations, 0)
+-        self.assertEqual(result.secret_read, 1)
+-        self.assertEqual(result.secret_imported, 1)
++        self.assertEqual(result.secret_read, 3)
++        self.assertEqual(result.secret_imported, 2)
+         self.assertEqual(result.secret_unchanged, 0)
+         self.assertEqual(result.skipped_new_keys, 0)
+         self.assertEqual(result.not_imported, 0)
+         self.assertEqual(len(result.imports), 2)
+         self.assertEqual(result.imports[0],
+                          ('E79A842DA34A1CA383F64A1546BB55F0885C65A4',
+-                          None, gpgme.IMPORT_NEW | gpgme.IMPORT_SECRET))
++                          None, gpgme.IMPORT_NEW))
+         self.assertEqual(result.imports[1],
+                          ('E79A842DA34A1CA383F64A1546BB55F0885C65A4',
+-                          None, gpgme.IMPORT_NEW))
++                          None, gpgme.IMPORT_NEW | gpgme.IMPORT_SECRET))
+         # can we get the public key?
+         key = ctx.get_key('E79A842DA34A1CA383F64A1546BB55F0885C65A4')
+         # can we get the secret key?
+@@ -102,17 +102,17 @@ class ImportTestCase(GpgHomeTestCase):
+         fp = BytesIO(b'\n'.join(keys))
+         ctx = gpgme.Context()
+         result = ctx.import_(fp)
+-        self.assertEqual(result.considered, 3)
++        self.assertEqual(result.considered, 5)
+         self.assertEqual(result.no_user_id, 0)
+         self.assertEqual(result.imported, 2)
+-        self.assertEqual(result.imported_rsa, 1)
++        self.assertEqual(result.imported_rsa, 0)
+         self.assertEqual(result.unchanged, 0)
+         self.assertEqual(result.new_user_ids, 0)
+         self.assertEqual(result.new_sub_keys, 0)
+         self.assertEqual(result.new_signatures, 1)
+         self.assertEqual(result.new_revocations, 0)
+-        self.assertEqual(result.secret_read, 1)
+-        self.assertEqual(result.secret_imported, 1)
++        self.assertEqual(result.secret_read, 3)
++        self.assertEqual(result.secret_imported, 2)
+         self.assertEqual(result.secret_unchanged, 0)
+         self.assertEqual(result.skipped_new_keys, 0)
+         self.assertEqual(result.not_imported, 0)
+@@ -122,10 +122,10 @@ class ImportTestCase(GpgHomeTestCase):
+                           None, gpgme.IMPORT_NEW))
+         self.assertEqual(result.imports[1],
+                          ('E79A842DA34A1CA383F64A1546BB55F0885C65A4',
+-                          None, gpgme.IMPORT_NEW | gpgme.IMPORT_SECRET))
++                          None, gpgme.IMPORT_SIG))
+         self.assertEqual(result.imports[2],
+                          ('E79A842DA34A1CA383F64A1546BB55F0885C65A4',
+-                          None, gpgme.IMPORT_SIG))
++                          None, gpgme.IMPORT_NEW | gpgme.IMPORT_SECRET))
+         self.assertEqual(result.imports[3],
+                          ('93C2240D6B8AA10AB28F701D2CF46B7FC97E6B0F',
+                           None, gpgme.IMPORT_NEW))
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0002-passphrase_cb-is-deprecated.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0002-passphrase_cb-is-deprecated.patch
new file mode 100644
index 0000000..c18cf3f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0002-passphrase_cb-is-deprecated.patch
@@ -0,0 +1,52 @@
+From ba0dc8273e4f83bcd2d43baa5910aae34b93048c Mon Sep 17 00:00:00 2001
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Mon, 1 Feb 2016 19:25:12 -0500
+Subject: [PATCH] passphrase_cb is deprecated
+
+https://bugs.gnupg.org/gnupg/issue767 indicates that
+gpgme_set_passphrase_cb is a deprecated corner of the API and that
+developers using gpgme should really rely on the gpg-agent to handle
+this stuff.  This should actually simplify things for most
+installations -- just strip out all passphrase handling from your
+application entirely, relying on gpg to figure out how to find the
+agent, and relying on the agent figuring out how to prompt the user
+(if necessary).
+
+However, if a developer really wants to use the passphrase callback
+approach, they'll have to use loopback pinentry.  This sets up the
+test suite to be able to make those tests.
+
+Upstream-Status: Backport
+
+Signed-off-by: Catalin Enache <catalin.enache@windriver.com>
+
+---
+ tests/util.py | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/tests/util.py b/tests/util.py
+index cd803c2..86892ca 100644
+--- a/tests/util.py
++++ b/tests/util.py
+@@ -28,7 +28,9 @@ keydir = os.path.join(os.path.dirname(__file__), 'keys')
+ 
+ class GpgHomeTestCase(unittest.TestCase):
+ 
+-    gpg_conf_contents = ''
++    gpg_conf_contents = 'pinentry-mode loopback'
++    gpg_agent_conf_contents = 'allow-loopback-pinentry'
++
+     import_keys = []
+ 
+     def keyfile(self, key):
+@@ -41,6 +43,10 @@ class GpgHomeTestCase(unittest.TestCase):
+         fp.write(self.gpg_conf_contents.encode('UTF-8'))
+         fp.close()
+ 
++        fp = open(os.path.join(self._gpghome, 'gpg-agent.conf'), 'wb')
++        fp.write(self.gpg_agent_conf_contents.encode('UTF-8'))
++        fp.close()
++
+         # import requested keys into the keyring
+         ctx = gpgme.Context()
+         for key in self.import_keys:
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0003-handle-generic-error-when-no-passphrase-callback-pre.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0003-handle-generic-error-when-no-passphrase-callback-pre.patch
new file mode 100644
index 0000000..6acb68b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0003-handle-generic-error-when-no-passphrase-callback-pre.patch
@@ -0,0 +1,30 @@
+From 579b5930e15de8855bf63b3c20b6c3aaf894c3eb Mon Sep 17 00:00:00 2001
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Mon, 1 Feb 2016 19:27:59 -0500
+Subject: [PATCH] handle generic error when no passphrase callback present
+
+apparently gpg 2.1 returns ERR_GENERAL right now if the pinentry was
+in loopback mode and no passphrase callback was supplied.  Earlier
+versions supplied ERR_BAD_PASSPHRASE.
+
+Upstream-Status: Backport
+
+Signed-off-by: Catalin Enache <catalin.enache@windriver.com>
+
+---
+ tests/test_passphrase.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test_passphrase.py b/tests/test_passphrase.py
+index 0a235e9..35b3c59 100644
+--- a/tests/test_passphrase.py
++++ b/tests/test_passphrase.py
+@@ -41,7 +41,7 @@ class PassphraseTestCase(GpgHomeTestCase):
+             new_sigs = ctx.sign(plaintext, signature, gpgme.SIG_MODE_CLEAR)
+         except gpgme.GpgmeError as exc:
+             self.assertEqual(exc.args[0], gpgme.ERR_SOURCE_GPGME)
+-            self.assertEqual(exc.args[1], gpgme.ERR_BAD_PASSPHRASE)
++            self.assertEqual(exc.args[1], gpgme.ERR_GENERAL)
+         else:
+             self.fail('gpgme.GpgmeError not raised')
+ 
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/run-ptest
new file mode 100644
index 0000000..ce2abb6
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+GPG_AGENT_INFO= python test_all.py -v 2>&1 | sed -e '/\.\.\. ok/ s/^/PASS: /g' -e '/\.\.\. [ERROR|FAIL]/ s/^/FAIL: /g' -e '/\.\.\. skipped/ s/^/SKIP: /g' -e 's/ \.\.\. ok//g' -e 's/ \.\.\. ERROR//g' -e 's/ \.\.\. FAIL//g' -e 's/ \.\.\. skipped//g'
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex/pyrex-fix-optimized-mode.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex/pyrex-fix-optimized-mode.patch
new file mode 100644
index 0000000..c58c328
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex/pyrex-fix-optimized-mode.patch
@@ -0,0 +1,15 @@
+Upstream-Status: Pending
+
+Index: Pyrex-0.9.8.4/Pyrex/Distutils/extension.py
+===================================================================
+--- Pyrex-0.9.8.4.orig/Pyrex/Distutils/extension.py
++++ Pyrex-0.9.8.4/Pyrex/Distutils/extension.py
+@@ -15,7 +15,7 @@ except ImportError:
+     warnings = None
+ 
+ class Extension(_Extension.Extension):
+-    _Extension.Extension.__doc__ + \
++    _Extension.Extension.__doc__ or "" + \
+     """pyrex_include_dirs : [string]
+         list of directories to search for Pyrex header files (.pxd) (in
+         Unix form for portability)
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq/club-rpath-out.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq/club-rpath-out.patch
new file mode 100644
index 0000000..936f165
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq/club-rpath-out.patch
@@ -0,0 +1,13 @@
+diff --git a/setup.py b/setup.py
+index d243eaa..98099bc 100755
+--- a/setup.py
++++ b/setup.py
+@@ -192,8 +192,6 @@ def _add_rpath(settings, path):
+     """
+     if sys.platform == 'darwin':
+         settings['extra_link_args'].extend(['-Wl,-rpath','-Wl,%s' % path])
+-    else:
+-        settings['runtime_library_dirs'].append(path)
+ 
+ def settings_from_prefix(prefix=None, bundle_libzmq_dylib=False):
+     """load appropriate library/include settings from ZMQ prefix"""
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3339-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3339-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch
new file mode 100644
index 0000000..ce8ca0b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3339-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch
@@ -0,0 +1,32 @@
+From 2de281fdca88f223ace1eb6428a77b9903c69264 Mon Sep 17 00:00:00 2001
+From: Nicola Lunghi <nicola.lunghi@jci.com>
+Date: Thu, 14 Nov 2019 11:58:28 +0000
+Subject: [PATCH] setup.py: move pytest-runner to test_requirements
+
+This fixes an issue with yocto build.
+pytest-runner is only needed when running tests.
+
+Upstream-Status: Pending
+---
+ setup.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 9a50767..e3b1c6e 100644
+--- a/setup.py
++++ b/setup.py
+@@ -12,9 +12,9 @@ requirements = [
+     'six',
+ ]
+ 
+-setup_requirements = ['pytest-runner', ]
++setup_requirements = []
+ 
+-test_requirements = ['pytest>=3', ]
++test_requirements = ['pytest>=3', 'pytest-runner']
+ 
+ setup(
+     author="Nicolas Aimetti",
+-- 
+2.20.1
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch
new file mode 100644
index 0000000..8a64687
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3986-validator/0001-setup.py-move-pytest-runner-to-test_requirements.patch
@@ -0,0 +1,32 @@
+From 3531ff73631a0d59234eb4713e7b3a7f5ea57bbb Mon Sep 17 00:00:00 2001
+From: Nicola Lunghi <nicola.lunghi@jci.com>
+Date: Thu, 14 Nov 2019 12:17:51 +0000
+Subject: [PATCH] setup.py: move pytest-runner to test_requirements
+
+This fixes an issue with yocto build.
+pytest-runner is only needed when running tests.
+
+Upstream-Status: Pending
+---
+ setup.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 53ebea7..ebb0de2 100644
+--- a/setup.py
++++ b/setup.py
+@@ -10,9 +10,9 @@ with open('README.md') as readme_file:
+ 
+ requirements = []
+ 
+-setup_requirements = ['pytest-runner', ]
++setup_requirements = []
+ 
+-test_requirements = ['pytest>=3', ]
++test_requirements = ['pytest>=3', 'pytest-runner']
+ 
+ setup(
+     author="Nicolas Aimetti",
+-- 
+2.20.1
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc
new file mode 100644
index 0000000..b14f825
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc
@@ -0,0 +1,20 @@
+SUMMARY = "Python interface for libsystemd"
+HOMEPAGE = "https://github.com/systemd/python-systemd"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4fbd65380cdd255951079008b364516c"
+
+PYPI_PACKAGE = "systemd-python"
+DEPENDS += "systemd (<=234)"
+RDEPENDS_${PN} += "systemd ${PYTHON_PN}-syslog ${PYTHON_PN}-logging"
+REQUIRED_DISTRO_FEATURES = "systemd"
+inherit pypi features_check
+
+SRC_URI[md5sum] = "5071ea5bcb976186e92a3f5e75df221d"
+SRC_URI[sha256sum] = "fd0e44bf70eadae45aadc292cb0a7eb5b0b6372cd1b391228047d33895db83e7"
+
+# allow for common patches for python- and python3-systemd
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-systemd:"
+
+SRC_URI += "file://endian.patch"
+
+SRC_URI_append_libc-musl = " file://0001-Provide-implementation-of-strndupa-for-musl.patch"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/0001-Provide-implementation-of-strndupa-for-musl.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/0001-Provide-implementation-of-strndupa-for-musl.patch
new file mode 100644
index 0000000..d7085a8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/0001-Provide-implementation-of-strndupa-for-musl.patch
@@ -0,0 +1,42 @@
+From 8b639f9faf6199e47b9eae0698d01a22917b6abe Mon Sep 17 00:00:00 2001
+From: Tim Orling <timothy.t.orling@linux.intel.com>
+Date: Fri, 29 Dec 2017 09:17:17 -0800
+Subject: [PATCH] Provide implementation of strndupa for musl
+
+Reuse the approach from oe-core:
+/meta/recipes-core/systemd/systemd/0002-src-basic-missing.h-check-for-missing-strndupa.patch
+
+Original patch author: Emil Renner Berthing <systemd@esmil.dk>
+
+Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com
+---
+Upstream-Status: Pending
+
+ systemd/util.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/systemd/util.c b/systemd/util.c
+index e02c825..277e611 100644
+--- a/systemd/util.c
++++ b/systemd/util.c
+@@ -34,6 +34,17 @@
+ 
+ #include "util.h"
+ 
++#if !HAVE_DECL_STRNDUPA
++#define strndupa(s, n) \
++  ({ \
++    const char *__old = (s); \
++    size_t __len = strnlen(__old, (n)); \
++    char *__new = (char *)alloca(__len + 1); \
++    __new[__len] = '\0'; \
++    (char *)memcpy(__new, __old, __len); \
++  })
++#endif
++
+ int safe_atou(const char *s, unsigned *ret_u) {
+         char *x = NULL;
+         unsigned long l;
+-- 
+2.13.6
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/endian.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/endian.patch
new file mode 100644
index 0000000..e09aea7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/endian.patch
@@ -0,0 +1,14 @@
+Include endian.h for missing definitions of htobe16
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/systemd/util.c
++++ b/systemd/util.c
+@@ -28,6 +28,7 @@
+ #include <stdbool.h>
+ #include <assert.h>
+ #include <errno.h>
++#include <endian.h>
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include <net/if.h>
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-tornado.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-tornado.inc
new file mode 100644
index 0000000..7cb6193
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-tornado.inc
@@ -0,0 +1,25 @@
+SUMMARY  = "Tornado is an open source version of the scalable, non-blocking web server and tools that power FriendFeed."
+DESCRIPTION = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. \
+By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long \
+polling, WebSockets, and other applications that require a long-lived connection to each user."
+HOMEPAGE = "http://www.tornadoweb.org/en/stable/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[md5sum] = "cab4b11480f6d032e46465586192d343"
+SRC_URI[sha256sum] = "c845db36ba616912074c5b1ee897f8e0124df269468f25e4fe21fe72f6edd7a9"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-numbers ${PYTHON_PN}-email \
+                   ${PYTHON_PN}-pkgutil ${PYTHON_PN}-html ${PYTHON_PN}-json ${PYTHON_PN}-certifi ${PYTHON_PN}-threading \
+                   ${PYTHON_PN}-ctypes"
+
+RDEPENDS_${PN}-test += "${PN} ${PYTHON_PN}-unittest"
+
+PACKAGES =+ "\
+    ${PN}-test \
+"
+
+FILES_${PN}-test = " \
+    ${libdir}/${PYTHON_DIR}/site-packages/*/test \
+    ${libdir}/${PYTHON_DIR}/site-packages/*/testing.py* \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc
new file mode 100644
index 0000000..7537baf
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc
@@ -0,0 +1,266 @@
+DESCRIPTION = "Twisted is an event-driven networking framework written in Python and licensed under the LGPL. \
+Twisted supports TCP, UDP, SSL/TLS, multicast, Unix sockets, a large number of protocols                   \
+(including HTTP, NNTP, IMAP, SSH, IRC, FTP, and others), and much more."
+HOMEPAGE = "http://www.twistedmatrix.com"
+
+#twisted/topfiles/NEWS:655: - Relicensed: Now under the MIT license, rather than LGPL.
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1743f12d8b8f5aec625c0569a058f0a6"
+
+# allow for common patches for python- and python3-twisted
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-twisted:"
+
+SRC_URI += "file://0001-fix-MemoryReactor-import-in-test_runner-to-be-from-t.patch"
+
+SRC_URI[sha256sum] = "7394ba7f272ae722a74f3d969dcf599bc4ef093bc392038748a490f1724a515d"
+SRC_URI[md5sum] = "f2d70f7a66ecdf54152310164cceadfe"
+
+PYPI_PACKAGE = "Twisted"
+PYPI_PACKAGE_EXT = "tar.bz2"
+
+do_install_append() {
+    # remove some useless files before packaging
+    find ${D} \( -name "*.bat" -o -name "*.c" -o -name "*.h" \) -exec rm -f {} \;
+}
+
+PACKAGES += "\
+    ${PN}-zsh \
+    ${PN}-test \
+    ${PN}-protocols \
+    ${PN}-conch \
+    ${PN}-mail \
+    ${PN}-names \
+    ${PN}-news \
+    ${PN}-runner \
+    ${PN}-web \
+    ${PN}-words \
+    ${PN}-flow \
+    ${PN}-pair \
+    ${PN}-core \
+"
+
+PACKAGES =+ "\
+    ${PN}-bin \
+"
+
+DEPENDS += " \
+    ${PYTHON_PN}-incremental-native \
+"
+
+RDEPENDS_${PN} = "\
+    ${PN}-bin \
+    ${PN}-core \
+    ${PN}-conch \
+    ${PN}-mail \
+    ${PN}-names \
+    ${PN}-pair \
+    ${PN}-protocols \
+    ${PN}-runner \
+    ${PN}-web \
+    ${PN}-words \
+    ${PN}-zsh \
+"
+
+RDEPENDS_${PN}-core = "${PYTHON_PN}-appdirs \
+                       ${PYTHON_PN}-automat \
+                       ${PYTHON_PN}-constantly \
+                       ${PYTHON_PN}-core \ 
+                       ${PYTHON_PN}-debugger \
+                       ${PYTHON_PN}-hyperlink \
+                       ${PYTHON_PN}-incremental \
+                       ${PYTHON_PN}-pyhamcrest \
+                       ${PYTHON_PN}-pyserial \
+                       ${PYTHON_PN}-unixadmin \
+                       ${PYTHON_PN}-zopeinterface \
+"
+RDEPENDS_${PN}-test = "${PN}"
+RDEPENDS_${PN}-conch = "${PN}-core ${PN}-protocols ${PYTHON_PN}-bcrypt ${PYTHON_PN}-cryptography ${PYTHON_PN}-pyasn1 ${PYTHON_PN}-pickle"
+RDEPENDS_${PN}-mail = "${PN}-core ${PN}-protocols"
+RDEPENDS_${PN}-names = "${PN}-core"
+RDEPENDS_${PN}-news = "${PN}-core ${PN}-protocols"
+RDEPENDS_${PN}-runner = "${PN}-core ${PN}-protocols"
+RDEPENDS_${PN}-web += "${PN}-core ${PN}-protocols"
+RDEPENDS_${PN}-words += "${PN}-core"
+RDEPENDS_${PN}-flow += "${PN}-core"
+RDEPENDS_${PN}-pair += "${PN}-core"
+RDEPENDS_${PN}-dbg = "${PN}"
+
+ALLOW_EMPTY_${PN} = "1"
+FILES_${PN} = ""
+
+FILES_${PN}-test = " \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/test \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/*/test \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/haproxy/test/ \
+"
+
+FILES_${PN}-protocols = " \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/*.py* \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/gps/ \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/mice/ \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/haproxy \
+"
+
+FILES_${PN}-zsh = " \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zsh \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zshcomp.* \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/twisted-completion.zsh \
+"
+
+FILES_${PN}-conch = " \
+    ${bindir}/ckeygen \
+    ${bindir}/tkconch \
+    ${bindir}/conch \
+    ${bindir}/conchftp \
+    ${bindir}/cftp \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_conch.py* \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/conch  \
+"
+
+FILES_${PN}-core = " \
+${bindir}/manhole \
+${bindir}/mktap \
+${bindir}/twistd \
+${bindir}/tap2deb \
+${bindir}/tap2rpm \
+${bindir}/tapconvert \
+${bindir}/tkmktap \
+${bindir}/trial \
+${bindir}/easy_install* \
+${bindir}/pyhtmlizer \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/*.so \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__init__.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/notestplugin.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/testplugin.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_ftp.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_inet.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_manhole.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_portforward.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_socks.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_telnet.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_trial.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/dropin.cache \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/application \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/cred \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/enterprise \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/internet \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/manhole \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/manhole \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/persisted \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols\
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python\
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/timeoutqueue.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/filepath.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/dxprofile.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/plugin.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/htmlizer.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/__init__.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/dispatch.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/hook.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/threadpool.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/otp.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/usage.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/roots.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/versions.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/urlpath.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/util.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/components.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/logfile.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/runtime.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/reflect.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/context.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/threadable.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/rebuild.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/failure.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/lockfile.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/formmethod.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/finalize.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/win32.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/dist.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/shortcut.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zipstream.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/release.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/syslog.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/log.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/compat.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zshcomp.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/procutils.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/text.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/_twisted_zsh_stub \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/scripts/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/spread/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/tap/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/trial/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/__init__.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/_version.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/copyright.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/im.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/topfiles \
+${libdir}/${PYTHON_DIR}/site-packages/Twisted*egg-info \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/logger/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/_threads/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/positioning/ \
+"
+
+FILES_${PN}-mail = " \
+${bindir}/mailmail \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_mail.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/mail \
+"
+
+FILES_${PN}-names = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_names.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/names \
+"
+
+FILES_${PN}-news = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_news.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/news \
+"
+
+FILES_${PN}-runner = " \
+${libdir}/site-packages/twisted/runner/portmap.so \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/runner\
+"
+
+FILES_${PN}-web = " \
+${bindir}/websetroot \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_web.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/web\
+"
+
+FILES_${PN}-words = " \
+${bindir}/im \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_words.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/words\
+"
+
+FILES_${PN}-flow = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_flow.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/flow \"
+
+FILES_${PN}-pair = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_pair.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/pair \
+"
+
+FILES_${PN}-dbg += " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*/.debug \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*/*/.debug \
+"
+
+FILES_${PN}-doc += " \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/_pydoctortemplates/ \
+"
+
+RDEPENDS_${PN}-src = "${PN}"
+FILES_${PN}-src = " \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/*.py \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/*/*.py \
+    ${libdir}/${PYTHON_DIR}/site-packages/twisted/*/*/*.py \
+"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-twisted/0001-fix-MemoryReactor-import-in-test_runner-to-be-from-t.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-twisted/0001-fix-MemoryReactor-import-in-test_runner-to-be-from-t.patch
new file mode 100644
index 0000000..39fc7d4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python-twisted/0001-fix-MemoryReactor-import-in-test_runner-to-be-from-t.patch
@@ -0,0 +1,38 @@
+From 754f21282ad2775db8ff501d40bbc497faeb17ba Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <trevor.gamblin@windriver.com>
+Date: Tue, 17 Dec 2019 15:09:22 -0500
+Subject: [PATCH] fix MemoryReactor import in test_runner to be from
+ twisted.internet.testing
+
+Upstream-Status: Backport [https://github.com/twisted/twisted/commit/754f21282ad2775db8ff501d40bbc497faeb17ba]
+
+Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
+---
+ src/twisted/application/newsfragments/9746.misc    | 1 +
+ src/twisted/application/runner/test/test_runner.py | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+ create mode 100644 src/twisted/application/newsfragments/9746.misc
+
+diff --git a/src/twisted/application/newsfragments/9746.misc b/src/twisted/application/newsfragments/9746.misc
+new file mode 100644
+index 000000000..8b1378917
+--- /dev/null
++++ b/src/twisted/application/newsfragments/9746.misc
+@@ -0,0 +1 @@
++
+diff --git a/src/twisted/application/runner/test/test_runner.py b/src/twisted/application/runner/test/test_runner.py
+index 9abc3449a..cce495b12 100644
+--- a/src/twisted/application/runner/test/test_runner.py
++++ b/src/twisted/application/runner/test/test_runner.py
+@@ -15,7 +15,7 @@ from twisted.logger import (
+     LogLevel, LogPublisher, LogBeginner,
+     FileLogObserver, FilteringLogObserver, LogLevelFilterPredicate,
+ )
+-from twisted.test.proto_helpers import MemoryReactor
++from twisted.internet.testing import MemoryReactor
+ 
+ from ...runner import _runner
+ from .._exit import ExitStatus
+-- 
+2.24.1
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.7.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.7.0.bb
new file mode 100644
index 0000000..c65a6d7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.7.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Abseil Python Common Libraries"
+HOMEPAGE = "https://github.com/abseil/abseil-py"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI = "git://github.com/abseil/abseil-py.git"
+SRCREV ?= "e3ce504183c57fc4eca52fe84732c11cda99d131"
+
+inherit setuptools3
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aenum_2.2.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aenum_2.2.3.bb
new file mode 100644
index 0000000..16d2a88
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aenum_2.2.3.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Advanced Enumerations library"
+HOMEPAGE = "https://pypi.org/project/aenum/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://aenum/LICENSE;md5=c6a85477543f8b8591b9c1f82abebbe9"
+
+SRC_URI[md5sum] = "026786dbb37c15c2c8dc91fbf5828e97"
+SRC_URI[sha256sum] = "a4334cabf47c167d44ab5a6198837b80deec5d5bad1b5cf70c966c3a330260e8"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aiofiles_0.4.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aiofiles_0.4.0.bb
new file mode 100644
index 0000000..b21cade
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aiofiles_0.4.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "File support for asyncio"
+DESCRIPTION = "Asynchronous local file IO library for asyncio and Python"
+HOMEPAGE = "https://github.com/aio-libs/aiohttp"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
+
+SRC_URI[md5sum] = "cb33cf96c371fbd56fc27ab0bd81bd61"
+SRC_URI[sha256sum] = "021ea0ba314a86027c166ecc4b4c07f2d40fc0f4b3a950d1868a0f2571c2bbee"
+
+PYPI_PACKAGE = "aiofiles"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-asyncio \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp_3.6.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp_3.6.2.bb
new file mode 100644
index 0000000..24eb021
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp_3.6.2.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Async http client/server framework"
+DESCRIPTION = "Asynchronous HTTP client/server framework for asyncio and Python"
+HOMEPAGE = "https://github.com/aio-libs/aiohttp"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=cf056e8e7a0a5477451af18b7b5aa98c"
+
+SRC_URI[md5sum] = "ca40144c199a09fc1a141960cf6295f0"
+SRC_URI[sha256sum] = "259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326"
+
+PYPI_PACKAGE = "aiohttp"
+inherit setuptools3 pypi
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-async-timeout \
+    ${PYTHON_PN}-attrs \
+    ${PYTHON_PN}-chardet \
+    ${PYTHON_PN}-html \
+    ${PYTHON_PN}-idna-ssl \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-misc \
+    ${PYTHON_PN}-multidict \
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-yarl \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.4.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.4.2.bb
new file mode 100644
index 0000000..2263060
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.4.2.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "A database migration tool for SQLAlchemy"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=bd64aba1b968c2bfbc2b525a181ce85c"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "1d67bdbd3abd33f0319afcd29bc59686"
+SRC_URI[sha256sum] = "035ab00497217628bf5d0be82d664d8713ab13d37b630084da8e1f98facf4dbf"
+
+PYPI_PACKAGE = "alembic"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-dateutil \
+    ${PYTHON_PN}-editor \
+    ${PYTHON_PN}-mako \
+    ${PYTHON_PN}-sqlalchemy \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ansi2html_1.5.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ansi2html_1.5.2.bb
new file mode 100644
index 0000000..8e586ea
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ansi2html_1.5.2.bb
@@ -0,0 +1,13 @@
+DESCRPTION = "ansi2html - Convert text with ANSI color codes to HTML or to LaTeX"
+HOMEPAGE = "https://github.com/ralphbean/ansi2html"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3000208d539ec061b899bce1d9ce9404"
+LICENSE = "GPLv3"
+
+PYPI_PACKAGE = "ansi2html"
+
+SRC_URI[md5sum] = "52d6085ad1c5970082ea5305a26af981"
+SRC_URI[sha256sum] = "96ae85ae7b26b7da674d87de2870ba4d1964bca733ae4614587080b6358c3ba9"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "${PYTHON_PN}-six"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb
new file mode 100644
index 0000000..91c6672
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Wraps the best available JSON implementation available in a common interface"
+DESCRIPTION = "Anyjson loads whichever is the fastest JSON module installed and  \
+provides a uniform API regardless of which JSON implementation is used."
+HOMEPAGE = "https://bitbucket.org/runeh/anyjson"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=989aa97e73c912a83a3c873fa11deb08"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "2ea28d6ec311aeeebaf993cb3008b27c"
+SRC_URI[sha256sum] = "37812d863c9ad3e35c0734c42e0bf0320ce8c3bed82cd20ad54cb34d158157ba"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-simplejson"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs/run-ptest
new file mode 100644
index 0000000..5287f3e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest | sed -e 's/\[100%\]//g' | sed -e 's/\.\.F/: FAIL/g' | sed -e 's/\.\.\./: PASS/g'
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.4.bb
new file mode 100644
index 0000000..eef5c02
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.4.bb
@@ -0,0 +1,21 @@
+SUMMARY = "A small Python module for determining appropriate + platform-specific dirs, e.g. a user data dir."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=31625363c45eb0c67c630a2f73e438e4"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+SRC_URI[md5sum] = "d6bca12613174185dd9abc8a29f4f012"
+SRC_URI[sha256sum] = "7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"
+
+inherit pypi setuptools3 ptest
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/test
+	cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-apply-defaults_0.1.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-apply-defaults_0.1.4.bb
new file mode 100644
index 0000000..8d23678
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-apply-defaults_0.1.4.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Apply values to optional params"
+HOMEPAGE = "https://github.com/bcb/apply_defaults"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c89120516900f96f4c60d35fdc4c3f15"
+
+PYPI_PACKAGE = "apply_defaults"
+
+SRC_URI[md5sum] = "719abb133f4b46283ebd940fcdf30a78"
+SRC_URI[sha256sum] = "1ce26326a61d8773d38a9726a345c6525a91a6120d7333af79ad792dacb6246c"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-core"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-arpeggio_1.9.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-arpeggio_1.9.2.bb
new file mode 100644
index 0000000..802a5b2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-arpeggio_1.9.2.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Arpeggio is a recursive descent parser with memoization based on PEG grammars (aka Packrat parser)"
+HOMEPAGE = "https://pypi.org/project/Arpeggio/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=33b8d1ba459a2fa4d801acfd1d1b7ceb"
+
+SRC_URI[md5sum] = "39667a626217c670bc634444be6e904a"
+SRC_URI[sha256sum] = "948ce06163a48a72c97f4fe79ad3d1c1330b6fec4f22ece182fb60ef60bd022b"
+
+PYPI_PACKAGE = "Arpeggio"
+inherit pypi setuptools3
+
+# setup.py of Arpeggio needs this.
+DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_1.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_1.3.0.bb
new file mode 100644
index 0000000..0d38da9
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_1.3.0.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "A fast, pure Python library for parsing and serializing ASN.1 structures"
+HOMEPAGE = "https://github.com/wbond/asn1crypto"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7439e38f5e04ff62fae436184786b7ca"
+
+PYPI_PACKAGE = "asn1crypto"
+
+SRC_URI[md5sum] = "daad112940181917e3ff169b47b9bd9a"
+SRC_URI[sha256sum] = "5a215cb8dc12f892244e3a113fe05397ee23c5c4ca7a69cd6e69811755efc42d"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN}_class-target += " \
+    ${PYTHON_PN}-codecs \
+    ${PYTHON_PN}-crypt \
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-astor_0.8.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-astor_0.8.1.bb
new file mode 100644
index 0000000..125a023
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-astor_0.8.1.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Easy manipulation of Python source via the AST."
+HOMEPAGE = "https://github.com/berkerpeksag/astor"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=561205fdabc3ec52cae2d30815b8ade7"
+
+SRC_URI = "git://github.com/berkerpeksag/astor.git "
+SRCREV ?= "c7553c79f9222e20783fe9bd8a553f932e918072"
+
+inherit setuptools3
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.3.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.3.3.bb
new file mode 100644
index 0000000..dc1ce0e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_2.3.3.bb
@@ -0,0 +1,33 @@
+SUMMARY = "An abstract syntax tree for Python with inference support."
+HOMEPAGE = "https://pypi.python.org/pypi/astroid"
+SECTION = "devel/python"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI[md5sum] = "5f3d73d82d1753b59bb49a6bc6046dee"
+SRC_URI[sha256sum] = "71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a"
+
+inherit pypi setuptools3
+
+DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+PACKAGES =+ "${PN}-tests"
+
+FILES_${PN}-tests += " \
+    ${PYTHON_SITEPACKAGES_DIR}/astroid/test* \
+    ${PYTHON_SITEPACKAGES_DIR}/astroid/__pycache__/test* \
+"
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-distutils \
+    ${PYTHON_PN}-lazy-object-proxy \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-wrapt \
+    ${PYTHON_PN}-setuptools \
+"
+
+RDEPENDS_${PN}-tests_class-target += "\
+    ${PYTHON_PN}-unittest \
+    ${PYTHON_PN}-xml \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-async-timeout_3.0.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-async-timeout_3.0.1.bb
new file mode 100644
index 0000000..22dffe6
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-async-timeout_3.0.1.bb
@@ -0,0 +1,19 @@
+SUMMARY = "asyncio-compatible timeout context manager"
+DESCRIPTION = "\
+The context manager is useful in cases when you want to apply \
+timeout logic around block of code or in cases when asyncio.wait_for() \
+is not suitable. Also it's much faster than asyncio.wait_for() because \
+timeout doesn't create a new task."
+HOMEPAGE = "https://github.com/aio-libs/async-timeout"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
+
+SRC_URI[md5sum] = "305c4fa529f2485c403d0dbe14390175"
+SRC_URI[sha256sum] = "0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f"
+
+PYPI_PACKAGE = "async-timeout"
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-asyncio \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-atomicwrites_1.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-atomicwrites_1.3.0.bb
new file mode 100644
index 0000000..e43bf08
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-atomicwrites_1.3.0.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Powerful Python library for atomic file writes"
+HOMEPAGE = "https://github.com/untitaker/python-atomicwrites"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=91cc36cfafeefb7863673bcfcb1d4da4"
+
+SRC_URI[md5sum] = "ce11f780a4ce0fce8a55d64494a88178"
+SRC_URI[sha256sum] = "75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "${PYTHON_PN}-misc"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb
new file mode 100644
index 0000000..22c5218
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "Simple decorator to set attributes of target function or class in a DRY way"
+HOMEPAGE = "https://github.com/denis-ryzhkov/attr"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=59805a0285f4d2b6abdedae73db4f5c1"
+
+SRC_URI[md5sum] = "68b9a503991241fb2df28488686b0e1e"
+SRC_URI[sha256sum] = "9091548058d17f132596e61fa7518e504f76b9a4c61ca7d86e1f96dbf7d4775d"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_19.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_19.3.0.bb
new file mode 100644
index 0000000..7ff8049
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_19.3.0.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Classes Without Boilerplate"
+HOMEPAGE = "http://www.attrs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d4ab25949a73fe7d4fdee93bcbdbf8ff"
+
+SRC_URI[sha256sum] = "f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
+SRC_URI[md5sum] = "5b2db50fcc31be34d32798183c9bd062"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN}_class-target += " \
+    ${PYTHON_PN}-crypt \
+    ${PYTHON_PN}-ctypes \
+"
+RDEPENDS_${PN}_class-nativesdk += " \
+    ${PYTHON_PN}-crypt \
+    ${PYTHON_PN}-ctypes \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-automat/0001-setup.py-remove-the-dependency-on-m2r.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-automat/0001-setup.py-remove-the-dependency-on-m2r.patch
new file mode 100644
index 0000000..c29b659
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-automat/0001-setup.py-remove-the-dependency-on-m2r.patch
@@ -0,0 +1,50 @@
+From 33b70266930c9093712173c4e0c419815b55e313 Mon Sep 17 00:00:00 2001
+From: Derek Straka <derek@asterius.io>
+Date: Fri, 22 Dec 2017 09:07:00 -0500
+Subject: [PATCH] setup.py: remove the dependency on m2r
+
+The dependency on m2r is removed here as it only provides the
+long_description value that is optional.  This item is just the
+text that would be present on PyPi, so it doesn't provide much
+value in this case
+
+Upstream-Status: Inappropriate (OE specific)
+
+Signed-off-by: Derek Straka <derek@asterius.io>
+
+---
+ setup.py | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index d360c64..7b4180a 100644
+--- a/setup.py
++++ b/setup.py
+@@ -4,14 +4,6 @@ Setup file for automat
+ 
+ from setuptools import setup, find_packages
+ 
+-try:
+-    from m2r import parse_from_file
+-    long_description = parse_from_file('README.md')
+-except(IOError, ImportError):
+-    print("\n\n!!! m2r not found, long_description is bad, don't upload this to PyPI !!!\n\n")
+-    import io
+-    long_description = io.open('README.md', encoding="utf-8").read()
+-
+ setup(
+     name='Automat',
+     use_scm_version=True,
+@@ -19,12 +11,10 @@ setup(
+     description="""
+     Self-service finite-state machines for the programmer on the go.
+     """.strip(),
+-    long_description=long_description,
+     packages=find_packages(exclude=[]),
+     package_dir={'automat': 'automat'},
+     setup_requires=[
+         'setuptools-scm',
+-        'm2r',
+     ],
+     install_requires=[
+         "attrs>=16.1.0",
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.8.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.8.0.bb
new file mode 100644
index 0000000..f8981bc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.8.0.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Self-service finite-state machines for the programmer on the go"
+HOMEPAGE = "https://github.com/glyph/Automat"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ad213bcca81688e94593e5f60c87477"
+
+SRC_URI[md5sum] = "47e980a48201a1dabe37fa11f0187013"
+SRC_URI[sha256sum] = "269a09dfb063a3b078983f4976d83f0a0d3e6e7aaf8e27d8df1095e09dc4a484"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+SRC_URI_append = " \
+    file://0001-setup.py-remove-the-dependency-on-m2r.patch \
+"
+
+PYPI_PACKAGE = "Automat"
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+   ${PYTHON_PN}-attrs \
+   ${PYTHON_PN}-six \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.4.8.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.4.8.bb
new file mode 100644
index 0000000..f763067
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.4.8.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "SDK for connecting to AWS IoT using Python."
+HOMEPAGE = "https://github.com/aws/aws-iot-device-sdk-python"
+LICENSE = "Apache-2.0 & (EPL-1.0 | EDL-1.0)"
+LICENSE_${PN}-examples = "Apache-2.0"
+LIC_FILES_CHKSUM = "\
+    file://LICENSE.txt;md5=9ac49901b833e769c7d6f21e8dbd7b30 \
+    file://AWSIoTPythonSDK/core/protocol/paho/client.py;endline=14;md5=5a3c8a1a4bb71bd934f450ecff972ad9 \
+"
+
+SRC_URI[md5sum] = "d05596f02774ea39517765c5dced874a"
+SRC_URI[sha256sum] = "bcd68cb7fdb044dbd5e5d3a02c311b25717c0376168e7c992982130f19c51b03"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "AWSIoTPythonSDK"
+
+do_install_append() {
+        install -d -m0755 ${D}${datadir}/${BPN}/examples
+        cp --preserve=mode,timestamps -R ${S}/samples/* ${D}${datadir}/${BPN}/examples
+        # this requires the full blown AWS Python SDK
+        rm -r ${D}${datadir}/${BPN}/examples/basicPubSub
+}
+
+PACKAGES =+ "${PN}-examples"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-crypt \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-math \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-threading \
+"
+RDEPENDS_${PN}-examples += "${PN}"
+
+FILES_${PN}-examples = "${datadir}/${BPN}/examples"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.8.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.8.0.bb
new file mode 100644
index 0000000..c69098b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.8.0.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "A collection of tools for internationalizing Python applications"
+HOMEPAGE = "http://babel.edgewall.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=942469df9305abb1c59e95f778310384"
+
+SRC_URI[md5sum] = "6fad9772e75421969ddb41975483abdf"
+SRC_URI[sha256sum] = "1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38"
+
+PYPI_PACKAGE = "Babel"
+
+inherit pypi setuptools3
+
+CLEANBROKEN = "1"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-codecs \
+    ${PYTHON_PN}-difflib \
+    ${PYTHON_PN}-distutils \
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-pickle \
+    ${PYTHON_PN}-pytz \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-backports-functools-lru-cache_1.6.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-backports-functools-lru-cache_1.6.1.bb
new file mode 100644
index 0000000..c95a759
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-backports-functools-lru-cache_1.6.1.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Backport of functools.lru_cache from Python 3.3"
+HOMEPAGE = "https://github.com/jaraco/backports.functools_lru_cache"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a33f38bbf47d48c70fe0d40e5f77498e"
+
+PYPI_PACKAGE = "backports.functools_lru_cache"
+
+SRC_URI[md5sum] = "103000b21a8e683647e2ce41929f2a9d"
+SRC_URI[sha256sum] = "8fde5f188da2d593bd5bc0be98d9abc46c95bb8a9dde93429570192ee6cc2d4a"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-pickle \
+    ${PYTHON_PN}-threading \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.6.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.6.2.bb
new file mode 100644
index 0000000..fa28861
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.6.2.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Security oriented static analyser for python code."
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1dece7821bf3fd70fe1309eaa37d52a2"
+
+SRC_URI[md5sum] = "c6a6772d7afa0af8828b3384e73b7085"
+SRC_URI[sha256sum] = "41e75315853507aa145d62a78a2a6c5e3240fe14ee7c601459d0df9418196065"
+
+DEPENDS = "python3-pbr-native python3-git python3-pbr python3-pyyaml python3-six python3-stevedore"
+
+inherit setuptools3 pypi
+
+RDEPENDS_${PN} += "python3-modules python3-git python3-pbr python3-pyyaml python3-six python3-stevedore"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.7.bb
new file mode 100644
index 0000000..0f2d31f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.7.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Modern password hashing for your software and your servers."
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8f7bb094c7232b058c7e9f2e431f389c"
+
+DEPENDS += "${PYTHON_PN}-cffi-native"
+
+SRC_URI[md5sum] = "5d6f93b575ce52470af37a8e7dce76fe"
+SRC_URI[sha256sum] = "0b0069c752ec14172c5f78208f1863d7ad6755a6fae6fe76ec2c80d13be41e42"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-cffi \
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-six \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.8.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.8.2.bb
new file mode 100644
index 0000000..63fbd09
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.8.2.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Screen-scraping library"
+HOMEPAGE = " https://www.crummy.com/software/BeautifulSoup/bs4"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=f2d38d8a40bf73fd4b3d16ca2e5882d1"
+
+SRC_URI[md5sum] = "5dbdb56c009e4632bae7bed1b385804b"
+SRC_URI[sha256sum] = "05fd825eb01c290877657a56df4c6e4c311b3965bda790c613a3d6fb01a5462a"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-html5lib \
+    ${PYTHON_PN}-lxml \
+    ${PYTHON_PN}-soupsieve \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-behave_1.2.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-behave_1.2.6.bb
new file mode 100644
index 0000000..a28e527
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-behave_1.2.6.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A behavior-driven development framework, Python style"
+HOMEPAGE = "https://github.com/behave/behave"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d950439e8ea6ed233e4288f5e1a49c06"
+
+SRC_URI[md5sum] = "3f05c859a1c45f5ed33e925817ad887d"
+SRC_URI[sha256sum] = "b9662327aa53294c1351b0a9c369093ccec1d21026f050c3bd9b3e5cccf81a86"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-parse-type \
+    ${PYTHON_PN}-setuptools \
+    ${PYTHON_PN}-six \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_1.2.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_1.2.1.bb
new file mode 100644
index 0000000..2bf2937
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_1.2.1.bb
@@ -0,0 +1,11 @@
+SUMMARY = "A high-level Python efficient arrays of booleans -- C extension"
+HOMEPAGE = "https://github.com/ilanschnell/bitarray"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=dc301a25ebe210dcc53b0a2d5a038eae"
+
+SRC_URI[md5sum] = "a46bf869f6adf34f5b0dc82b469793b7"
+SRC_URI[sha256sum] = "2ed675f460bb0d3d66fd8042a6f1f0d36cf213e52e72a745283ddb245da7b9cf"
+
+inherit setuptools3 pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb
new file mode 100644
index 0000000..e2f76c3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "Fast, simple object-to-object and broadcast signaling."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=946d7e89af6f7733aeaebed5635d2682"
+
+SRC_URI[md5sum] = "8b3722381f83c2813c52de3016b68d33"
+SRC_URI[sha256sum] = "471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-booleanpy_3.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-booleanpy_3.7.bb
new file mode 100644
index 0000000..ebf7ba4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-booleanpy_3.7.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL"
+HOMEPAGE = "https://github.com/bastikr/boolean.py"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e319747a5eb94cddf646037c01ddba47"
+
+SRC_URI[md5sum] = "1189d115a38f84f5df743014926a9159"
+SRC_URI[sha256sum] = "bd19b412435611ecc712603d0fd7d0e280e24698e7a6e3d5f610473870c5dd1e"
+
+PYPI_PACKAGE = "boolean.py"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cachecontrol_0.12.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cachecontrol_0.12.6.bb
new file mode 100644
index 0000000..7c45ed3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cachecontrol_0.12.6.bb
@@ -0,0 +1,29 @@
+SUMMARY = "httplib2 caching for requests"
+HOMEPAGE = "https://pypi.org/project/CacheControl/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=6dc7e1b428eda03d850209fdbd6c71f1"
+
+# On PyPi, this is "CacheControl", rather than "cachecontrol", so we need to
+# override PYPI_PACKAGE so fetch succeeds.
+PYPI_PACKAGE = "CacheControl"
+
+SRC_URI[md5sum] = "5890b797f9b48b2b4cd1448cca89e396"
+SRC_URI[sha256sum] = "be9aa45477a134aee56c8fac518627e1154df063e85f67d4f83ce0ccc23688e8"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    python3-crypt \
+    python3-datetime \
+    python3-email \
+    python3-lockfile \
+    python3-json \
+    python3-logging \
+    python3-msgpack \
+    python3-netclient \
+    python3-pickle \
+    python3-requests \
+    python3-urllib3 \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cachetools_4.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cachetools_4.1.0.bb
new file mode 100644
index 0000000..7411a74
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cachetools_4.1.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Extensible memoizing collections and decorators"
+HOMEPAGE = "https://github.com/tkem/cachetools"
+DESCRIPTION = "This module provides various memoizing \
+collections and decorators, including variants of the \
+Python 3 Standard Library @lru_cache function decorator."
+SECTION = "devel/python"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2d1e1bf0ccb26126a230c51f997ce362"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "4468da43443115a00c02c126cf601ae0"
+SRC_URI[sha256sum] = "1d057645db16ca7fe1f3bd953558897603d6f0b9c51ed9d11eb4d071ec4e2aab"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-can_3.3.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-can_3.3.2.bb
new file mode 100644
index 0000000..698eaf5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-can_3.3.2.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Controller Area Network (CAN) interface module for Python"
+SECTION = "devel/python"
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+SRC_URI[md5sum] = "b724553a330478270267380b4888a18e"
+SRC_URI[sha256sum] = "5fefb5c1e7e7f07faefc02c6eac79f9b58376f007048a04d8e7f325d48ec6b2e"
+
+PYPI_PACKAGE="python-can"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-aenum \
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-codecs \
+    ${PYTHON_PN}-compression \
+    ${PYTHON_PN}-fcntl \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-misc \
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-sqlite3 \
+    ${PYTHON_PN}-wrapt \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.14.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.14.0.bb
new file mode 100644
index 0000000..768e557
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.14.0.bb
@@ -0,0 +1,35 @@
+SUMMARY = "DataStax Python Driver for Apache Cassandra"
+DESCRIPTION = "A modern, feature-rich and highly-tunable Python client \
+library for Apache Cassandra (1.2+) and DataStax Enterprise (3.1+) using \
+exclusively Cassandra's binary protocol and Cassandra Query Language v3."
+HOMEPAGE = "https://github.com/datastax/python-driver"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93"
+SRCNAME = "cassandra-driver"
+
+SRC_URI[md5sum] = "c5bed026bf48c821424c1f6296193908"
+SRC_URI[sha256sum] = "b65218e2582277f5b77d1436e420db8616f63e3437a9e839cdcd7172d760e861"
+
+DISTUTILS_BUILD_ARGS += " \
+    --no-libev \
+"
+DISTUTILS_INSTALL_ARGS += " \
+    --no-libev \
+"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-cython \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-misc \
+    ${PYTHON_PN}-multiprocessing \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-six \
+    libevent \
+"
+
+DEPENDS += "\
+    ${PYTHON_PN}-cython \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2019.11.28.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2019.11.28.bb
new file mode 100644
index 0000000..c9e945f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2019.11.28.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python package for providing Mozilla's CA Bundle."
+DESCRIPTION = "This installable Python package contains a CA Bundle that you can reference in your \
+Python code. This is useful for verifying HTTP requests, for example.  This is the same CA Bundle \
+which ships with the Requests codebase, and is derived from Mozilla Firefox's canonical set."
+HOMEPAGE = " http://certifi.io/"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f77f61d14ee6feac4228d3ebd26cc1f1"
+
+SRC_URI[md5sum] = "4d5229c4d9f0a4a79106f9e2c2cfd381"
+SRC_URI[sha256sum] = "25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.0.bb
new file mode 100644
index 0000000..53c8ee2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Foreign Function Interface for Python calling C code"
+HOMEPAGE = "http://cffi.readthedocs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5677e2fdbf7cdda61d6dd2b57df547bf"
+DEPENDS += "libffi ${PYTHON_PN}-pycparser"
+
+SRC_URI[md5sum] = "74845f8d2b7b583dd9a3574f402edf39"
+SRC_URI[sha256sum] = "2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN}_class-target = " \
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-pycparser \
+    ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb
new file mode 100644
index 0000000..80785b8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Universal encoding detector for Python 2 and 3"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6f89e2100d9b6cdffcea4f398e37343"
+
+SRC_URI[md5sum] = "7dd1ba7f9c77e32351b0a0cfacf4055c"
+SRC_URI[sha256sum] = "84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"
+
+# setup.py of chardet needs this.
+DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+inherit pypi setuptools3
+
+PACKAGES =+ "${PN}-cli"
+FILES_${PN}-cli += " \
+    ${PYTHON_SITEPACKAGES_DIR}/chardet/cli \
+"
+
+RDEPENDS_${PN}-cli = "${PN} "
+
+RDEPENDS_${PN}_class-target += " \
+    ${PYTHON_PN}-logging \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cheetah_3.2.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cheetah_3.2.4.bb
new file mode 100644
index 0000000..05882d0
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cheetah_3.2.4.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Python template engine and code generation tool"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=15e13a4ed0e5880e3e55ec88b0921181"
+
+PYPI_PACKAGE = "Cheetah3"
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "python3-pickle python3-pprint"
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[md5sum] = "8c0ac643263ffc3454fb321342284d0a"
+SRC_URI[sha256sum] = "caabb9c22961a3413ac85cd1e5525ec9ca80daeba6555f4f60802b6c256e252b"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-click_7.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-click_7.0.bb
new file mode 100644
index 0000000..cfa3e0f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-click_7.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A simple wrapper around optparse for powerful command line utilities."
+DESCRIPTION = "\
+Click is a Python package for creating beautiful command line interfaces \
+in a composable way with as little code as necessary. It's the "Command \
+Line Interface Creation Kit". It's highly configurable but comes with \
+sensible defaults out of the box."
+HOMEPAGE = "http://click.pocoo.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=c13ed890b210a882c1778216694c98c7"
+
+SRC_URI[md5sum] = "7f53d50f7b7373ebc7963f9ff697450a"
+SRC_URI[sha256sum] = "5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
+
+PYPI_PACKAGE = "Click"
+inherit pypi setuptools3
+
+UPSTREAM_CHECK_REGEX = "click/(?P<pver>\d+(\.\d+)+)/"
+
+CLEANBROKEN = "1"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-threading \
+    "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_0.9.23.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_0.9.23.bb
new file mode 100644
index 0000000..803ca4a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_0.9.23.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Extra features for standard library's cmd module"
+HOMEPAGE = "http://packages.python.org/cmd2/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9791cd24ca7d1807388ccd55cd066def"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+SRC_URI[md5sum] = "6db66a06210d5f1edb44693b887ed62b"
+SRC_URI[sha256sum] = "8ad12ef3cc46d03073c545b6e80a3f84a5921f6653073a60e7d9a7ff3b352c9e"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-attrs \
+    ${PYTHON_PN}-colorama \
+    ${PYTHON_PN}-pyperclip \
+    ${PYTHON_PN}-wcwidth \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-colorama_0.4.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-colorama_0.4.3.bb
new file mode 100644
index 0000000..7a3f533
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-colorama_0.4.3.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Cross-platform colored terminal text."
+HOMEPAGE = "https://github.com/tartley/colorama"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b4936429a56a652b84c5c01280dcaa26"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "02daee502863d24112a8c05a5d69a612"
+SRC_URI[sha256sum] = "e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-coloredlogs_10.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-coloredlogs_10.0.bb
new file mode 100644
index 0000000..88fac87
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-coloredlogs_10.0.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Colored terminal output for Python's logging module"
+HOMEPAGE = "https://coloredlogs.readthedocs.io"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=690da298a43805797a4fa7bbe180b3c6"
+
+SRC_URI[md5sum] = "0a186966a1955fff8cf9489373e691d9"
+SRC_URI[sha256sum] = "b869a2dda3fa88154b9dd850e27828d8755bfab5a838a1c97fbc850c6e377c36"
+
+inherit pypi setuptools3
+
+do_compile_prepend() {
+    sed -ie "s/find_pth_directory(),/'',/g" ${S}/setup.py
+}
+
+do_install_append() {
+    rm -rf ${D}${datadir}
+}
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-humanfriendly \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-colorlog_4.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-colorlog_4.1.0.bb
new file mode 100644
index 0000000..ea4c575
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-colorlog_4.1.0.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "A colored formatter for the python logging module"
+HOMEPAGE = "https://github.com/borntyping/python-colorlog"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README.md;md5=05592f7a5b83bfc756f62dbd70a9b9b5"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "colorlog"
+
+SRC_URI[md5sum] = "25f79b76421132e2a9e08da15e4e0a73"
+SRC_URI[sha256sum] = "30aaef5ab2a1873dec5da38fd6ba568fa761c9fa10b40241027fa3edea47f3d2"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-configargparse_0.15.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-configargparse_0.15.1.bb
new file mode 100644
index 0000000..0797898
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-configargparse_0.15.1.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A drop-in replacement for argparse that allows options to also be set via config files and/or environment variables."
+HOMEPAGE = "https://github.com/bw2/ConfigArgParse"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=da746463714cc35999ed9a42339f2943"
+
+SRC_URI[md5sum] = "aba15b7973b7a70bea86fd69289f8fe3"
+SRC_URI[sha256sum] = "baaf0fd2c1c108d007f402dab5481ac5f12d77d034825bf5a27f8224757bd0ac"
+
+PYPI_PACKAGE = "ConfigArgParse"
+
+inherit pypi setuptools3
+
+PACKAGECONFIG ?= "yaml"
+PACKAGECONFIG[yaml] = ",,,${PYTHON_PN}-pyyaml"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_4.0.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_4.0.2.bb
new file mode 100644
index 0000000..1966609
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_4.0.2.bb
@@ -0,0 +1,14 @@
+SUMMARY = "This module provides the ConfigParser class which implements a basic configuration language which provides a structure similar to what's found in Microsoft Windows INI files."
+SECTION = "devel/python"
+HOMEPAGE = "https://docs.python.org/3/library/configparser.html"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=10;endline=10;md5=23f9ad5cad3d8cc0336e2a5d8a87e1fa"
+
+SRC_URI[md5sum] = "35926cc4b9133f1f9ca70a1fd2fdf237"
+SRC_URI[sha256sum] = "c7d282687a5308319bf3d2e7706e575c635b0a470342641c93bea0ea3b5331df"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-configshell-fb_1.1.28.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-configshell-fb_1.1.28.bb
new file mode 100644
index 0000000..2d9ec07
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-configshell-fb_1.1.28.bb
@@ -0,0 +1,16 @@
+SUMMARY = "A Python library for building configuration shells"
+DESCRIPTION = "configshell-fb is a Python library that provides a framework for \
+building simple but nice CLI-based applications. This runs with Python 2 and \
+2to3 is run by setup.py to run on Python 3."
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1dece7821bf3fd70fe1309eaa37d52a2"
+
+SRC_URI = "git://github.com/open-iscsi/configshell-fb.git;protocol=https;branch=master"
+SRCREV = "da8f0cef114e7343a7ae96ff1db7c8c574f819be"
+
+S = "${WORKDIR}/git"
+
+inherit setuptools3
+
+RDEPENDS_${PN} += "python3-modules python3-fcntl python3-six"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb
new file mode 100644
index 0000000..ad24f6d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Symbolic constants in Python"
+HOMEPAGE = "https://github.com/twisted/constantly"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e393e4ddd223e3a74982efa784f89fd7"
+
+SRC_URI[md5sum] = "f0762f083d83039758e53f8cf0086eef"
+SRC_URI[sha256sum] = "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-json"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-contextlib2_0.6.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-contextlib2_0.6.0.bb
new file mode 100644
index 0000000..6074efa
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-contextlib2_0.6.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Backports and enhancements for the contextlib module"
+HOMEPAGE = "http://contextlib2.readthedocs.org/"
+SECTION = "devel/python"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=43d1c7827e8fad6454b553caf0e1d734"
+
+SRC_URI[md5sum] = "d03a631073b40073b5c41364ad8f5979"
+SRC_URI[sha256sum] = "7197aa736777caac513dbd800944c209a49765bf1979b12b037dce0277077ed3"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_5.0.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_5.0.2.bb
new file mode 100644
index 0000000..9407278
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_5.0.2.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Code coverage measurement for Python"
+HOMEPAGE = "https://coverage.readthedocs.io"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2ee41112a44fe7014dce33e26468ba93"
+
+SRC_URI[md5sum] = "876be562bc78deac6fc2a06ee4a6d551"
+SRC_URI[sha256sum] = "b251c7092cbb6d789d62dc9c9e7c4fb448c9138b51285c36aeb72462cad3600e"
+
+inherit pypi setuptools3
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-crcmod_1.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-crcmod_1.7.bb
new file mode 100644
index 0000000..14a344f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-crcmod_1.7.bb
@@ -0,0 +1,14 @@
+SUMMARY = "A Python module for generating objects that compute the Cyclic Redundancy Check."
+HOMEPAGE = "https://pypi.org/project/crcmod"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f9a19291627cad2d1dfbfcf3c9fb85c2"
+
+SRC_URI[md5sum] = "2d5b92117d958dcead94f9e17f54cd32"
+SRC_URI[sha256sum] = "dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-unittest"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.8.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.8.bb
new file mode 100644
index 0000000..948aab9
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.8.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Test vectors for the cryptography package."
+HOMEPAGE = "https://cryptography.io/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4"
+
+SRC_URI[md5sum] = "a744ed29bb9ef56b3a50317fea3b218e"
+SRC_URI[sha256sum] = "6cd32174c56a3eca72f64af43c1daacaae758cfa5ff9d280dfcf818fa11ef116"
+
+PYPI_PACKAGE = "cryptography_vectors"
+
+inherit pypi setuptools3
+
+DEPENDS += " \
+    ${PYTHON_PN}-cryptography \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = ""
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest
new file mode 100644
index 0000000..0ba239c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest
@@ -0,0 +1,2 @@
+#!/bin/sh
+py.test
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.8.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.8.bb
new file mode 100644
index 0000000..c75dabb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.8.bb
@@ -0,0 +1,65 @@
+SUMMARY = "Provides cryptographic recipes and primitives to python developers"
+HOMEPAGE = "https://cryptography.io/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=097f805837700cfac572ac274cd38124"
+
+LDSHARED += "-pthread"
+
+SRC_URI[md5sum] = "77730058b556c6d9838679a94c6229ce"
+SRC_URI[sha256sum] = "3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651"
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+inherit pypi setuptools3
+
+DEPENDS += " \
+    ${PYTHON_PN}-cffi \
+    ${PYTHON_PN}-cffi-native \
+    ${PYTHON_PN}-asn1crypto \
+    ${PYTHON_PN}-six \
+"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-cffi \
+    ${PYTHON_PN}-idna \
+    ${PYTHON_PN}-asn1crypto \
+    ${PYTHON_PN}-setuptools \
+    ${PYTHON_PN}-six \
+"
+
+RDEPENDS_${PN}_class-target += " \
+    ${PYTHON_PN}-cffi \
+    ${PYTHON_PN}-idna \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-asn1crypto \
+    ${PYTHON_PN}-setuptools \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-threading \
+"
+
+RDEPENDS_${PN}-ptest += " \
+    ${PN} \
+    ${PYTHON_PN}-cryptography-vectors \
+    ${PYTHON_PN}-iso8601 \
+    ${PYTHON_PN}-pretend \
+    ${PYTHON_PN}-pytest \
+    ${PYTHON_PN}-pytz \
+"
+
+inherit ptest
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+    install -d ${D}${PTEST_PATH}/tests/hazmat
+    cp -rf ${S}/tests/hazmat/* ${D}${PTEST_PATH}/tests/hazmat/
+}
+
+FILES_${PN}-dbg += " \
+    ${libdir}/${PYTHON_PN}2.7/site-packages/${SRCNAME}/hazmat/bindings/.debug \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cycler_0.10.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cycler_0.10.0.bb
new file mode 100644
index 0000000..cd21be8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cycler_0.10.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Composable style cycles"
+HOMEPAGE = "http://github.com/matplotlib/cycler"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7713fe42cd766b15c710e19392bfa811"
+
+SRC_URI[md5sum] = "4cb42917ac5007d1cdff6cccfe2d016b"
+SRC_URI[sha256sum] = "cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    python3-core \
+    python3-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.29.14.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.29.14.bb
new file mode 100644
index 0000000..2ce6bdb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.29.14.bb
@@ -0,0 +1,18 @@
+inherit setuptools3
+require python-cython.inc
+
+RDEPENDS_${PN} += "\
+    python3-setuptools \
+"
+
+# running build_ext a second time during install fails, because Python
+# would then attempt to import cythonized modules built for the target
+# architecture.
+DISTUTILS_INSTALL_ARGS += "--skip-build"
+
+do_install_append() {
+    # rename scripts that would conflict with the Python 2 build of Cython
+    mv ${D}${bindir}/cython ${D}${bindir}/cython3
+    mv ${D}${bindir}/cythonize ${D}${bindir}/cythonize3
+    mv ${D}${bindir}/cygdb ${D}${bindir}/cygdb3
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.8.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.8.1.bb
new file mode 100644
index 0000000..1d2baf5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.8.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-dateutil.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-next_0.1.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-next_0.1.2.bb
new file mode 100644
index 0000000..2784013
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-next_0.1.2.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A zero-dependency DBus library for Python with asyncio support"
+HOMEPAGE = "https://github.com/acrisci/python-dbus-next"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=b32e18a71bcdd072bce21f204629a104"
+
+SRC_URI[md5sum] = "df838d695284dd1775860f9691a8663f"
+SRC_URI[sha256sum] = "a567d845ceed5feac48dda7faeb9ff2571f9a434a3c32b9b363f763e82368762"
+
+PYPI_PACKAGE = "dbus_next"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbusmock/0001-Add-functionality-to-add-own-objects-to-internal-obj.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbusmock/0001-Add-functionality-to-add-own-objects-to-internal-obj.patch
new file mode 100644
index 0000000..c4d8178
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbusmock/0001-Add-functionality-to-add-own-objects-to-internal-obj.patch
@@ -0,0 +1,52 @@
+From c4436fd42f2936e5fb0f95434d06e45aa9959ca0 Mon Sep 17 00:00:00 2001
+From: Simon Busch <simon.busch@lge.com>
+Date: Wed, 9 Apr 2014 13:18:33 +0200
+Subject: [PATCH] Add functionality to add own objects to internal object
+
+ list
+
+In some case the tests might want to create dynamically dbus objects which extended
+functionality from own class definitions within templates. In such cases we need to
+register those objects with the internal object manager of dbusmock.
+
+Signed-off-by: Simon Busch <simon.busch@lge.com>
+
+---
+ dbusmock/__init__.py   | 4 ++--
+ dbusmock/mockobject.py | 8 ++++++++
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/dbusmock/__init__.py b/dbusmock/__init__.py
+index 8a482ab..3d5d71a 100644
+--- a/dbusmock/__init__.py
++++ b/dbusmock/__init__.py
+@@ -14,8 +14,8 @@ __license__ = 'LGPL 3+'
+ __version__ = '0.16.7'
+ 
+ from dbusmock.mockobject import (DBusMockObject, MOCK_IFACE,
+-                                 OBJECT_MANAGER_IFACE, get_object, get_objects)
++                                 OBJECT_MANAGER_IFACE, get_object, get_objects, add_object)
+ from dbusmock.testcase import DBusTestCase
+ 
+ __all__ = ['DBusMockObject', 'MOCK_IFACE', 'OBJECT_MANAGER_IFACE',
+-           'DBusTestCase', 'get_object', 'get_objects']
++           'DBusTestCase', 'get_object', 'get_objects', 'add_object']
+diff --git a/dbusmock/mockobject.py b/dbusmock/mockobject.py
+index 586dbad..e4f130f 100644
+--- a/dbusmock/mockobject.py
++++ b/dbusmock/mockobject.py
+@@ -688,6 +688,14 @@ dbus.service._method_lookup = _dbusmock_method_lookup
+ # Helper API for templates
+ #
+ 
++def add_object(path, obj):
++    if path in objects:
++        raise dbus.exceptions.DBusException(
++                'org.freedesktop.DBus.Mock.NameError',
++                'object %s already exists' % path)
++
++    objects[path] = obj
++
+ 
+ def get_objects():
+     '''Return all existing object paths'''
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbusmock/0002-Add-possibility-to-import-templates-from-packages.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbusmock/0002-Add-possibility-to-import-templates-from-packages.patch
new file mode 100644
index 0000000..06ab1f0
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbusmock/0002-Add-possibility-to-import-templates-from-packages.patch
@@ -0,0 +1,27 @@
+From 03bd5cb77c54033857810bb17562859eefa41221 Mon Sep 17 00:00:00 2001
+From: Simon Busch <simon.busch@lge.com>
+Date: Wed, 9 Apr 2014 13:20:33 +0200
+Subject: [PATCH] Add possibility to import templates from packages
+
+Does not have any unit tests yet.
+
+Signed-off-by: Simon Busch <simon.busch@lge.com>
+
+---
+ dbusmock/mockobject.py | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/dbusmock/mockobject.py b/dbusmock/mockobject.py
+index e4f130f..389df70 100644
+--- a/dbusmock/mockobject.py
++++ b/dbusmock/mockobject.py
+@@ -46,6 +46,9 @@ def load_module(name):
+             exec(f.read(), mod.__dict__, mod.__dict__)
+         return mod
+ 
++    if '.' in name:
++        return importlib.import_module(name)
++
+     return importlib.import_module('dbusmock.templates.' + name)
+ 
+ 
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbusmock_0.16.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbusmock_0.16.7.bb
new file mode 100644
index 0000000..cd760ab
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbusmock_0.16.7.bb
@@ -0,0 +1,25 @@
+# Copyright (c) 2014 LG Electronics, Inc.
+
+SUMMARY = "With this program/Python library you can easily create mock objects on D-Bus"
+AUTHOR = "Martin Pitt <martin.pitt@ubuntu.com>"
+
+LICENSE = "GPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+SRC_URI[md5sum] = "80f8caa838fad96483a8751e11d384f9"
+SRC_URI[sha256sum] = "2d2ea892fa4633c3ec6ac1e912120ec493047a5c6522849b7d1c95ad755bce75"
+
+SRC_URI += " \
+    file://0001-Add-functionality-to-add-own-objects-to-internal-obj.patch \
+    file://0002-Add-possibility-to-import-templates-from-packages.patch \
+"
+
+PYPI_PACKAGE = "python-dbusmock"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-dbus \
+    ${PYTHON_PN}-pygobject \
+    ${PYTHON_PN}-xml \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbussy_1.2.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbussy_1.2.1.bb
new file mode 100644
index 0000000..ac4b8c2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dbussy_1.2.1.bb
@@ -0,0 +1,22 @@
+SUMMARY = "language bindings for libdbus, for Python 3.5 or later"
+HOMEPAGE = "https://github.com/ldo/dbussy"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
+
+SRC_URI = "git://github.com/ldo/dbussy.git"
+
+SRCREV = "d0ec0223f3797e1612d835e71694a1083881149f"
+
+S = "${WORKDIR}/git"
+
+inherit distutils3
+
+RDEPENDS_${PN} += "\
+    python3-asyncio \
+    python3-core \
+    python3-ctypes \
+    python3-xml \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.4.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.4.2.bb
new file mode 100644
index 0000000..844cbdc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.4.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-decorator.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-defusedxml_0.6.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-defusedxml_0.6.0.bb
new file mode 100644
index 0000000..d041d0e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-defusedxml_0.6.0.bb
@@ -0,0 +1,11 @@
+SUMMARY = "XML bomb protection for Python stdlib modules"
+DESCRIPTION = "Python package with modified subclasses of all stdlib XML \
+parsers that prevent any potentially malicious operation."
+
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=056fea6a4b395a24d0d278bf5c80249e"
+
+SRC_URI[md5sum] = "a59741f675c4cba649de40a99f732897"
+SRC_URI[sha256sum] = "f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-distro_1.5.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-distro_1.5.0.bb
new file mode 100644
index 0000000..aaaee0d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-distro_1.5.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Distro is an OS platform information API"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
+
+PYPI_PACKAGE = "distro"
+
+SRC_URI[md5sum] = "0ed68b4064709bdaaf6cce69780ddc51"
+SRC_URI[sha256sum] = "0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-django-south_1.0.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-django-south_1.0.2.bb
new file mode 100644
index 0000000..1051911
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-django-south_1.0.2.bb
@@ -0,0 +1,2 @@
+require python-django-south.inc
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.7.bb
new file mode 100644
index 0000000..e56453a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.7.bb
@@ -0,0 +1,9 @@
+require python-django.inc
+inherit setuptools3
+
+SRC_URI[md5sum] = "b0833024aac4c8240467e4dc91a12e9b"
+SRC_URI[sha256sum] = "16040e1288c6c9f68c6da2fe75ebde83c0a158f6f5d54f4c5177b0c1478c5b86"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-sqlparse \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-djangorestframework_3.9.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-djangorestframework_3.9.0.bb
new file mode 100644
index 0000000..9ed6d17
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-djangorestframework_3.9.0.bb
@@ -0,0 +1,2 @@
+require python-djangorestframework.inc
+inherit setuptools3
\ No newline at end of file
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.16.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.16.0.bb
new file mode 100644
index 0000000..ce4dfdc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.16.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-dnspython.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.5.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.5.1.bb
new file mode 100644
index 0000000..dd8c596
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.5.1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Dominate is a Python library for creating and manipulating HTML documents using an elegant DOM API."
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b52f2d57d10c4f7ee67a7eb9615d5d24"
+
+SRC_URI[md5sum] = "35eeb6b5587c8c9a51cd22c83e07ac49"
+SRC_URI[sha256sum] = "9b05481605ea8c0afd0a98c0156a9fb78d9c406368d66b3e6fedf36920fb9d78"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-threading \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dt-schema_git.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dt-schema_git.bb
new file mode 100644
index 0000000..06a9012
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-dt-schema_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Tooling for devicetree validation using YAML and jsonschema"
+AUTHOR = "Rob Herring"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://setup.py;beginline=2;endline=3;md5=c795d4924c5f739424fa8d9b569c6659"
+
+inherit setuptools3
+
+SRC_URI = "git://github.com/robherring/dt-schema.git"
+SRCREV = "5009e47c1c76e48871f5988e08dad61f3c91196b"
+PV = "0.1+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+RDEPENDS_${PN} = "python3-jsonschema python3-ruamel-yaml"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.4.bb
new file mode 100644
index 0000000..8ad2b86
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-editor.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_3.12.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_3.12.1.bb
new file mode 100644
index 0000000..028d110
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_3.12.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-engineio.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-et-xmlfile_1.0.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-et-xmlfile_1.0.1.bb
new file mode 100644
index 0000000..cfff150
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-et-xmlfile_1.0.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "et_xmlfile is a low memory library for creating large XML files"
+DESCRIPTION = "It is based upon the xmlfile module from lxml with the aim of allowing code \
+to be developed that will work with both libraries. It was developed initially for \
+the openpyxl project but is now a standalone module."
+
+HOMEPAGE = "https://bitbucket.org/openpyxl/et_xmlfile/src/default/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=b3d89cae66f26c3a0799be8a96f3178b"
+
+SRC_URI[md5sum] = "f47940fd9d556375420b2e276476cfaf"
+SRC_URI[sha256sum] = "614d9722d572f6246302c4491846d2c393c199cfa4edc9af593437691683335b"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-io ${PYTHON_PN}-pprint ${PYTHON_PN}-shell"
+
+inherit setuptools3
+PYPI_PACKAGE ?= "et_xmlfile"
+PYPI_SRC_URI ?= "https://files.pythonhosted.org/packages/source/e/et_xmlfile/et_xmlfile-1.0.1.tar.gz"
+SECTION = "devel/python"
+SRC_URI += "${PYPI_SRC_URI}"
+S = "${WORKDIR}/${PYPI_PACKAGE}-${PV}"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_1.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_1.3.0.bb
new file mode 100644
index 0000000..d87bf2f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_1.3.0.bb
@@ -0,0 +1,3 @@
+inherit pypi setuptools3
+require python-evdev.inc
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-fann2/0001-setup.py-Don-t-hardcode-swig-and-fann2-binary-locati.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-fann2/0001-setup.py-Don-t-hardcode-swig-and-fann2-binary-locati.patch
new file mode 100644
index 0000000..cbc838f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-fann2/0001-setup.py-Don-t-hardcode-swig-and-fann2-binary-locati.patch
@@ -0,0 +1,28 @@
+From 85307f592c7cb87af162cca4b121b874108b7754 Mon Sep 17 00:00:00 2001
+From: Alistair Francis <alistair.francis@wdc.com>
+Date: Tue, 2 Apr 2019 11:25:15 -0700
+Subject: [PATCH] setup.py: Don't hardcode swig and fann2 binary locations
+
+Upstream-Status: Inappropriate [configuration]
+Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
+---
+ setup.py | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 37af7c7..8e416f2 100755
+--- a/setup.py
++++ b/setup.py
+@@ -81,11 +81,8 @@ def find_swig():
+ 
+ def build_swig():
+     '''Run SWIG with specified parameters'''
+-    print("Looking for FANN libs...")
+-    find_fann()
+-    print("running SWIG...")
+     swig_bin = find_swig()
+-    swig_cmd = [swig_bin, '-c++', '-python', 'fann2/fann2.i']
++    swig_cmd = ['swig', '-c++', '-python', 'fann2/fann2.i']
+     subprocess.Popen(swig_cmd).wait()
+ 
+ if "sdist" not in sys.argv:
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-fann2_1.1.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-fann2_1.1.2.bb
new file mode 100644
index 0000000..a04c961
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-fann2_1.1.2.bb
@@ -0,0 +1,4 @@
+require python-fann2.inc
+inherit pypi setuptools3
+
+SRC_URI += " file://0001-setup.py-Don-t-hardcode-swig-and-fann2-binary-locati.patch"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.15.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.15.bb
new file mode 100644
index 0000000..8786a14
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-fasteners_0.15.bb
@@ -0,0 +1,9 @@
+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[md5sum] = "440f8ab461c8fed941355860d8669556"
+SRC_URI[sha256sum] = "3a176da6b70df9bb88498e1a18a9e4a8579ed5b9141207762368a1017bf8f5ef"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-feedformatter_0.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-feedformatter_0.4.bb
new file mode 100644
index 0000000..95a5405
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-feedformatter_0.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-feedformatter.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.12.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.12.2.bb
new file mode 100644
index 0000000..104e7c2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.12.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-babel.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-bootstrap_3.3.7.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-bootstrap_3.3.7.1.bb
new file mode 100644
index 0000000..877c754
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-bootstrap_3.3.7.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-bootstrap.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jsonpify_1.5.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jsonpify_1.5.0.bb
new file mode 100644
index 0000000..5d7e9b5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jsonpify_1.5.0.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "A Flask extension adding a decorator for JSONP support"
+HOMEPAGE = "https://github.com/CoryDolphin/flask-jsonpify"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README.rst;md5=bd59445a234a0c8250b39178d42e3148"
+
+PYPI_PACKAGE = "Flask-Jsonpify"
+
+SRC_URI[md5sum] = "8a10e37942c43d93d107644a3fe77d98"
+SRC_URI[sha256sum] = "8ac4c732aa5b11d9f6c2de58065d3b669f139518ca8f529bce943817e2fedbfb"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-flask"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt_0.3.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt_0.3.2.bb
new file mode 100644
index 0000000..779a2e2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt_0.3.2.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "JWT token authentication for Flask apps"
+HOMEPAGE = "https://github.com/mattupstate/flask-jwt"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ff00db41c47ec84b4567a8b3c246a959"
+
+PYPI_PACKAGE = "Flask-JWT"
+
+SRC_URI[md5sum] = "878ad79a12afa70ad38a12d5ffd2dc1e"
+SRC_URI[sha256sum] = "49c0672fbde0f1cd3374bd834918d28956e3c521c7e00089cdc5380d323bd0ad"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-pyjwt ${PYTHON_PN}-flask"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.4.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.4.1.bb
new file mode 100644
index 0000000..2d23fe1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.4.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-login.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb
new file mode 100644
index 0000000..0b963be
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-mail.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.5.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.5.2.bb
new file mode 100644
index 0000000..c98cbfd
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.5.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-migrate.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb
new file mode 100644
index 0000000..d251152
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-nav.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_2.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_2.3.0.bb
new file mode 100644
index 0000000..2102554
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_2.3.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-pymongo.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.7.bb
new file mode 100644
index 0000000..6bff59a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.7.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-flask-restful.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-script_2.0.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-script_2.0.6.bb
new file mode 100644
index 0000000..9f88519
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-script_2.0.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-script.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sijax_0.4.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sijax_0.4.1.bb
new file mode 100644
index 0000000..e9a65c4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sijax_0.4.1.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools3
+require python-flask-sijax.inc
+
+SRC_URI[sha256sum] = "fb2bf2d4f75408185102195055d75549fee8d9c9e954dca2427186925cdc429f"
\ No newline at end of file
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_4.2.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_4.2.1.bb
new file mode 100644
index 0000000..ffc4aa7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_4.2.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-flask-socketio.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.4.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.4.1.bb
new file mode 100644
index 0000000..07f45bc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.4.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-sqlalchemy.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-uploads_0.2.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-uploads_0.2.1.bb
new file mode 100644
index 0000000..758c2ac
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-uploads_0.2.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-uploads.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb
new file mode 100644
index 0000000..251017f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-user.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb
new file mode 100644
index 0000000..52362a8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-wtf.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-xstatic_0.0.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-xstatic_0.0.1.bb
new file mode 100644
index 0000000..5412bef
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-xstatic_0.0.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-xstatic.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.1.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.1.1.bb
new file mode 100644
index 0000000..cd43990
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.1.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-future_0.18.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-future_0.18.2.bb
new file mode 100644
index 0000000..f059186
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-future_0.18.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-future.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gast_0.2.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gast_0.2.2.bb
new file mode 100644
index 0000000..6e08a19
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gast_0.2.2.bb
@@ -0,0 +1,14 @@
+SUMMARY = "A generic AST to represent Python2 and Python3's Abstract Syntax Tree(AST)."
+HOMEPAGE = "https://github.com/serge-sans-paille/gast"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a3ad9b6802e713fc5e307e1230f1ea90"
+
+SRC_URI = "git://github.com/serge-sans-paille/gast.git"
+SRCREV ?= "ed82e2a507505c6b18eb665d3738b6c0602da5e7"
+
+inherit setuptools3
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-geojson_2.5.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-geojson_2.5.0.bb
new file mode 100644
index 0000000..7c3c23b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-geojson_2.5.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Python bindings and utilities for GeoJSON"
+HOMEPAGE = "https://pypi.org/project/geojson/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=f48972abe5cddee79e301574742ed745"
+
+SRC_URI[md5sum] = "14753ed28678828b1de73f68b04e2324"
+SRC_URI[sha256sum] = "6e4bb7ace4226a45d9c8c8b1348b3fc43540658359f93c3f7e03efa9f15f658a"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-simplejson python3-math"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.4.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.4.0.bb
new file mode 100644
index 0000000..df688e4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.4.0.bb
@@ -0,0 +1,2 @@
+require python-gevent.inc
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gmqtt_0.6.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gmqtt_0.6.5.bb
new file mode 100644
index 0000000..379c767
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gmqtt_0.6.5.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Client for MQTT protocol"
+HOMEPAGE = "https://github.com/wialon/gmqtt"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=903f1792621a3b35ee546da75d139177"
+
+SRC_URI[md5sum] = "9388ec09b6536c4e68c5ac5c31de3dc9"
+SRC_URI[sha256sum] = "c12b2d7d5a90f3304b7291b1d9d21df47e228dfb4ff990e965008fdd1a55ce60"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    python3-asyncio \
+    python3-core \
+    python3-datetime \
+    python3-json \
+    python3-logging \
+    python3-netclient \
+    python3-typing \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_1.7.11.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_1.7.11.bb
new file mode 100644
index 0000000..25e3b9c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_1.7.11.bb
@@ -0,0 +1,9 @@
+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[md5sum] = "6e28e8caf2e4d55ed5b7c48a538a61c9"
+SRC_URI[sha256sum] = "a8a88174f66d92aed7ebbd73744c2c319b4b1ce828e565f9ec721352d2e2fb8c"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.15.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.15.bb
new file mode 100644
index 0000000..1aedf7f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.15.bb
@@ -0,0 +1,2 @@
+inherit distutils3
+require python-greenlet.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.14.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.14.1.bb
new file mode 100644
index 0000000..2da1a4d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.14.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-grpcio-tools.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/0001-Fix-build-on-riscv32.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/0001-Fix-build-on-riscv32.patch
new file mode 100644
index 0000000..920fc11
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/0001-Fix-build-on-riscv32.patch
@@ -0,0 +1,65 @@
+From 04e28fdda03b545a0f7b446a784ec2fa7249cbb8 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 29 Apr 2020 15:37:40 -0700
+Subject: [PATCH] Fix build on riscv32
+
+Define __NR_mmap in terms of __NR_mmap2 and __NR_futex interms of
+__NR_futex_time64 for rv32, since there calls dont exist for rv32
+
+Also recognise rv32 as a new 32bit platform
+
+Upstream-Status: Submitted [https://github.com/abseil/abseil-cpp/pull/675]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ absl/base/internal/direct_mmap.h        | 5 +++++
+ absl/base/internal/spinlock_linux.inc   | 4 ++++
+ absl/synchronization/internal/waiter.cc | 4 ++++
+ 3 files changed, 13 insertions(+)
+
+--- a/third_party/abseil-cpp/absl/base/internal/direct_mmap.h
++++ b/third_party/abseil-cpp/absl/base/internal/direct_mmap.h
+@@ -26,6 +26,10 @@
+ 
+ #ifdef __linux__
+ 
++#if !defined(__NR_mmap) && defined(__riscv) && __riscv_xlen == 32
++# define __NR_mmap __NR_mmap2
++#endif
++
+ #include <sys/types.h>
+ #ifdef __BIONIC__
+ #include <sys/syscall.h>
+@@ -72,6 +76,7 @@ inline void* DirectMmap(void* start, siz
+ #if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__ARM_EABI__) || \
+     (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) ||                   \
+     (defined(__PPC__) && !defined(__PPC64__)) ||                             \
++    (defined(__riscv) && __riscv_xlen == 32)  ||                             \
+     (defined(__s390__) && !defined(__s390x__))
+   // On these architectures, implement mmap with mmap2.
+   static int pagesize = 0;
+--- a/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc
++++ b/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc
+@@ -14,6 +14,10 @@
+ //
+ // This file is a Linux-specific part of spinlock_wait.cc
+ 
++#if !defined(__NR_futex) && defined(__riscv) && __riscv_xlen == 32
++# define __NR_futex __NR_futex_time64
++#endif
++
+ #include <linux/futex.h>
+ #include <sys/syscall.h>
+ #include <unistd.h>
+--- a/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc
++++ b/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc
+@@ -24,6 +24,10 @@
+ #include <unistd.h>
+ #endif
+ 
++#if !defined(__NR_futex) && defined(__riscv) && __riscv_xlen == 32
++# define __NR_futex __NR_futex_time64
++#endif
++
+ #ifdef __linux__
+ #include <linux/futex.h>
+ #include <sys/syscall.h>
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch
new file mode 100644
index 0000000..bff50a0
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch
@@ -0,0 +1,74 @@
+From 2ef8a85933f3ac36b289979ff9edd49dd12d0d16 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 4 Aug 2017 09:04:07 -0700
+Subject: [PATCH] setup.py: Do not mix C and C++ compiler options
+
+EXTRA_ENV_COMPILE_ARGS is used both with CC and CXX
+so using -std=c++11 or -std=gnu99 together will cause
+build time errors espcially with clang
+
+error: invalid argument '-std=gnu99' not allowed with 'C++'
+
+gcc7 ( defaults are -std=gnu11 and -std=gnu++14 )
+ as well clang default to these standards mode or newer
+anyway
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+1. Keep '-std=c++11' and '-std=gnu99' to fix native build error
+with old gcc (such as gcc 5.4.0 on ubuntu 16.04), for clang
+we will remove them through GRPC_PYTHON_CFLAGS at do_compile
+in bb recipe.
+
+2. While export CC="gcc ", cc_args is None, it will
+cause subprocess.Popen always return 1. On centos 8, if you don't
+install package libatomic, there will be a native build error
+`cannot find /usr/lib64/libatomic.so.1.2.0'.
+
+Add no harm '-g' to cc_args if cc_args is empty.
+
+Upstream-Status: Inappropriate [oe specific]
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ setup.py                      | 6 +++++-
+ src/python/grpcio/commands.py | 5 ++++-
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index e950057..1b68221 100644
+--- a/setup.py
++++ b/setup.py
+@@ -144,9 +144,13 @@ ENABLE_DOCUMENTATION_BUILD = os.environ.get(
+ 
+ def check_linker_need_libatomic():
+   """Test if linker on system needs libatomic."""
++  compiler, cc_args = os.environ.get('CC').split(' ', 1) or 'gcc'
++  if not cc_args:
++      cc_args = "-g"
++
+   code_test = (b'#include <atomic>\n' +
+                b'int main() { return std::atomic<int64_t>{}; }')
+-  cc_test = subprocess.Popen(['cc', '-x', 'c++', '-std=c++11', '-'],
++  cc_test = subprocess.Popen([compiler, cc_args, '-x', 'c++', '-std=c++11', '-'],
+                              stdin=PIPE,
+                              stdout=PIPE,
+                              stderr=PIPE)
+diff --git a/src/python/grpcio/commands.py b/src/python/grpcio/commands.py
+index 064dda9..a75d8b9 100644
+--- a/src/python/grpcio/commands.py
++++ b/src/python/grpcio/commands.py
+@@ -216,7 +216,10 @@ class BuildExt(build_ext.build_ext):
+             when invoked in C mode. GCC is okay with this, while clang is not.
+             """
+             # TODO(lidiz) Remove the generated a.out for success tests.
+-            cc_test = subprocess.Popen(['cc', '-x', 'c', '-std=c++11', '-'],
++            compiler, cc_args = os.environ.get('CC').split(' ', 1) or 'gcc'
++            if not cc_args:
++                cc_args = "-g"
++            cc_test = subprocess.Popen([compiler, cc_args, '-x', 'c', '-std=c++11', '-'],
+                                        stdin=subprocess.PIPE,
+                                        stdout=subprocess.PIPE,
+                                        stderr=subprocess.PIPE)
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/ppc-boringssl-support.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/ppc-boringssl-support.patch
new file mode 100644
index 0000000..8ac2aef
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/ppc-boringssl-support.patch
@@ -0,0 +1,17 @@
+Let boringSSL compile on ppc32 bit
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+--- a/third_party/boringssl/include/openssl/base.h
++++ b/third_party/boringssl/include/openssl/base.h
+@@ -99,6 +99,9 @@ extern "C" {
+ #elif (defined(__PPC64__) || defined(__powerpc64__)) && defined(_LITTLE_ENDIAN)
+ #define OPENSSL_64_BIT
+ #define OPENSSL_PPC64LE
++#elif (defined(__PPC__) || defined(__powerpc__))
++#define OPENSSL_32_BIT
++#define OPENSSL_PPC
+ #elif defined(__mips__) && !defined(__LP64__)
+ #define OPENSSL_32_BIT
+ #define OPENSSL_MIPS
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/riscv64_support.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/riscv64_support.patch
new file mode 100644
index 0000000..8c9ffa2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio/riscv64_support.patch
@@ -0,0 +1,21 @@
+Add RISC-V 64bit support
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/third_party/boringssl/include/openssl/base.h
++++ b/third_party/boringssl/include/openssl/base.h
+@@ -108,6 +108,14 @@ extern "C" {
+ #elif defined(__mips__) && defined(__LP64__)
+ #define OPENSSL_64_BIT
+ #define OPENSSL_MIPS64
++#elif defined(__riscv)
++# if (__riscv_xlen == 64)
++#  define OPENSSL_64_BIT
++#  define OPENSSL_RISCV64
++# elif(__riscv_xlen == 32)
++#  define OPENSSL_32_BIT
++#  define OPENSSL_RISCV32
++# endif
+ #elif defined(__pnacl__)
+ #define OPENSSL_32_BIT
+ #define OPENSSL_PNACL
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.27.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.27.1.bb
new file mode 100644
index 0000000..129bb35
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.27.1.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "Google gRPC"
+HOMEPAGE = "http://www.grpc.io/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS += "${PYTHON_PN}-protobuf"
+
+SRC_URI += "file://0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch"
+SRC_URI_append_class-target = " file://ppc-boringssl-support.patch \
+                                file://riscv64_support.patch \
+                                file://0001-Fix-build-on-riscv32.patch \
+"
+SRC_URI[md5sum] = "ccaf4e7eb4f031d926fb80035d193b98"
+SRC_URI[sha256sum] = "a899725d34769a498ecd3be154021c4368dd22bdc69473f6ec46779696f626c4"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-protobuf \
+                  ${PYTHON_PN}-setuptools \
+                  ${PYTHON_PN}-six \
+"
+
+inherit setuptools3
+inherit pypi
+
+export GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY = "1"
+
+do_compile_prepend_toolchain-clang() {
+    export GRPC_PYTHON_CFLAGS='-fvisibility=hidden -fno-wrapv -fno-exceptions'
+}
+
+CLEANBROKEN = "1"
+
+BBCLASSEXTEND = "native nativesdk"
+
+CCACHE_DISABLE = "1"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gunicorn_20.0.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gunicorn_20.0.4.bb
new file mode 100644
index 0000000..5bd8d51
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-gunicorn_20.0.4.bb
@@ -0,0 +1,11 @@
+SUMMARY = "WSGI HTTP Server for UNIX"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f75f3fb94cdeab1d607e2adaa6077752"
+
+SRC_URI[md5sum] = "543669fcbb5739ee2af77184c5e571a1"
+SRC_URI[sha256sum] = "1904bb2b8a43658807108d59c3f3d56c2b6121a701161de0ddf9ad140073c626"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-setuptools ${PYTHON_PN}-fcntl"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py/0001-cross-compiling-support.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py/0001-cross-compiling-support.patch
new file mode 100644
index 0000000..ff50c85
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py/0001-cross-compiling-support.patch
@@ -0,0 +1,46 @@
+From 7e3b1745c1fef34683a0610381dd3308ad4d1ba9 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 29 Jan 2019 17:08:32 +0800
+Subject: [PATCH] cross compiling support
+
+Remove useless dirs
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ setup_build.py     | 4 ----
+ setup_configure.py | 2 +-
+ 2 files changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/setup_build.py b/setup_build.py
+index 85b321a..2c78e92 100644
+--- a/setup_build.py
++++ b/setup_build.py
+@@ -53,10 +53,6 @@ if sys.platform.startswith('win'):
+         ('_HDF5USEDLL_', None),
+         ('H5_BUILT_AS_DYNAMIC_LIB', None)
+     ])
+-else:
+-    FALLBACK_PATHS['include_dirs'].extend(['/opt/local/include', '/usr/local/include'])
+-    FALLBACK_PATHS['library_dirs'].extend(['/opt/local/lib', '/usr/local/lib'])
+-
+ 
+ class h5py_build_ext(build_ext):
+ 
+diff --git a/setup_configure.py b/setup_configure.py
+index a2de76a..197f2da 100644
+--- a/setup_configure.py
++++ b/setup_configure.py
+@@ -208,7 +208,7 @@ def autodetect_version(hdf5_dir=None):
+     else:
+         regexp = re.compile(r'^libhdf5.so')
+ 
+-    libdirs = ['/usr/local/lib', '/opt/local/lib']
++    libdirs = []
+     try:
+         if pkgconfig.exists("hdf5"):
+             libdirs.extend(pkgconfig.parse("hdf5")['library_dirs'])
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_2.9.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_2.9.0.bb
new file mode 100644
index 0000000..7822e46
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_2.9.0.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Provides both a high- and low-level interface to the HDF5 library from Python. "
+HOMEPAGE = "https://www.h5py.org/"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://setup.py;beginline=107;endline=107;md5=795ecad0d261c998cc526c84a822dff6"
+
+SRC_URI = "git://github.com/h5py/h5py.git \
+           file://0001-cross-compiling-support.patch \
+          "
+SRCREV ?= "8d96a14c3508de1bde77aec5db302e478dc5dbc4"
+
+inherit setuptools3
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native"
+
+DEPENDS = "python3-pkgconfig-native \
+           python3-cython-native \
+           python3-numpy-native \
+           python3-six-native \
+           python3 \
+           hdf5 \
+          "
+
+RDEPENDS_${PN} = "python3-numpy \
+                  python3-six \
+                 "
+
+export HDF5_VERSION="1.8.19"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.2.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.2.0.bb
new file mode 100644
index 0000000..fc2cc7d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.2.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Calculate the distance between 2 points on Earth"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI[md5sum] = "6b1badeb63aac6214c978d07a4ecd171"
+SRC_URI[sha256sum] = "b710aaf32c442a6d04aa89678be55e3f6c11f9752fc01c216e89b13120b36269"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-numpy"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-html2text_2019.8.11.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-html2text_2019.8.11.bb
new file mode 100644
index 0000000..9cb5b01
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-html2text_2019.8.11.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-html2text.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-html5lib_1.0.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-html5lib_1.0.1.bb
new file mode 100644
index 0000000..6bd8b49
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-html5lib_1.0.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-html5lib.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-httplib2_0.17.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-httplib2_0.17.3.bb
new file mode 100644
index 0000000..57047c9
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-httplib2_0.17.3.bb
@@ -0,0 +1,10 @@
+SUMMARY = "A comprehensive HTTP client library, httplib2 supports many features left out of other HTTP libraries."
+HOMEPAGE = "https://github.com/httplib2/httplib2"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=4edb3f072a9d815734530f608039a167"
+
+SRC_URI[md5sum] = "5730490cfe83350477b54b0a8a190c8a"
+SRC_URI[sha256sum] = "39dd15a333f67bfb70798faa9de8a6e99c819da6ad82b77f9a259a5c7b1225a2"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-humanfriendly_4.18.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-humanfriendly_4.18.bb
new file mode 100644
index 0000000..2ca5fe3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-humanfriendly_4.18.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-humanfriendly.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_0.5.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_0.5.1.bb
new file mode 100644
index 0000000..04464ac
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-humanize.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_19.0.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_19.0.0.bb
new file mode 100644
index 0000000..70813bf
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_19.0.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-hyperlink.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-idna-ssl_1.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-idna-ssl_1.1.0.bb
new file mode 100644
index 0000000..3643fcf
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-idna-ssl_1.1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-idna-ssl.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.8.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.8.bb
new file mode 100644
index 0000000..a08ca71
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.8.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-idna.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-imageio_2.6.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-imageio_2.6.0.bb
new file mode 100644
index 0000000..8fe4b98
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-imageio_2.6.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Python library that provides an easy interface to read and \
+write a wide range of image data, including animated images, video, \
+volumetric data, and scientific formats."
+SECTION = "devel/python"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d8b7fdd0dff0fd18f35c05365d3d7bf7"
+
+SRC_URI = "git://github.com/imageio/imageio.git;protocol=https"
+SRCREV = "0b161649b3ee108f80bd99466aeab2e65cf82cd8"
+S = "${WORKDIR}/git"
+
+inherit setuptools3
+
+RDEPENDS_${PN} = "python3-numpy python3-pillow"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-importlib-metadata_1.5.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-importlib-metadata_1.5.2.bb
new file mode 100644
index 0000000..8a971da
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-importlib-metadata_1.5.2.bb
@@ -0,0 +1,5 @@
+inherit pypi setuptools3
+require python-importlib-metadata.inc
+
+RDEPENDS_${PN}_append_class-target = " python3-misc"
+RDEPENDS_${PN}_append_class-nativesdk = " python3-misc"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-incremental_17.5.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-incremental_17.5.0.bb
new file mode 100644
index 0000000..0f04df4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-incremental_17.5.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-incremental.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.3.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.3.1.bb
new file mode 100644
index 0000000..cc36a02
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-inflection.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-intervals_1.10.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-intervals_1.10.0.bb
new file mode 100644
index 0000000..8cbe109
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-intervals_1.10.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-intervals.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ipaddress_1.0.23.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ipaddress_1.0.23.bb
new file mode 100644
index 0000000..796213f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ipaddress_1.0.23.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Python 3.3+'s ipaddress for Python 2.6, 2.7, 3.2."
+HOMEPAGE = "https://github.com/phihag/ipaddress"
+LICENSE = "Python-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7f538584cc3407bf76042def7168548a"
+
+SRC_URI[md5sum] = "aaee67a8026782af1831148beb0d9060"
+SRC_URI[sha256sum] = "b7f8e0369580bb4a24d5ba1d7cc29660a4a6987763faf1d8a8046830e020e7e2"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ipy_1.00.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ipy_1.00.bb
new file mode 100644
index 0000000..ea6a105
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ipy_1.00.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-ipy.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-iso3166_1.0.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-iso3166_1.0.1.bb
new file mode 100644
index 0000000..23fc4eb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-iso3166_1.0.1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Self-contained ISO 3166-1 country definitions"
+HOMEPAGE = "https://pypi.org/project/iso3166/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=5e2f4edc7e7408a82e4a1d05f229b695"
+
+SRC_URI[md5sum] = "53c313c7ae8721e40ddd5e7a01bbcb7e"
+SRC_URI[sha256sum] = "b1e58dbcf50fbb2c9c418ec7a6057f0cdb30b8f822ac852f72e71ba769dae8c5"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-numbers"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb
new file mode 100644
index 0000000..4a332b5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-iso8601.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-isodate_0.6.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-isodate_0.6.0.bb
new file mode 100644
index 0000000..0e79ae9
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-isodate_0.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-isodate.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.21.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.21.bb
new file mode 100644
index 0000000..755b3e2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.21.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-isort.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_1.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_1.1.0.bb
new file mode 100644
index 0000000..a71c20f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_1.1.0.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools3
+require python-itsdangerous.inc
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-compression \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.4.0.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.4.0.1.bb
new file mode 100644
index 0000000..0ec23ba
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.4.0.1.bb
@@ -0,0 +1,2 @@
+require python-javaobj-py3.inc
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jdcal/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jdcal/run-ptest
new file mode 100644
index 0000000..5cec711
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jdcal/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jdcal_1.4.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jdcal_1.4.1.bb
new file mode 100644
index 0000000..46deeae
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jdcal_1.4.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "This module contains functions for converting between Julian dates and calendar dates"
+DESCRIPTION = "A function for converting Gregorian calendar dates to Julian dates, \
+and another function for converting Julian calendar dates to Julian dates are defined. \
+Two functions for the reverse calculations are also defined."
+
+HOMEPAGE = "https://github.com/phn/jdcal"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=bd236e1f590973467a427bb354be0f46"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI[md5sum] = "e05bdb60fa80f25bc60e73e0c6b7c5dc"
+SRC_URI[sha256sum] = "472872e096eb8df219c23f2689fc336668bdb43d194094b5cc1707e1640acfc8"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-io ${PYTHON_PN}-pprint ${PYTHON_PN}-shell"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	cp -f ${S}/test_jdcal.py ${D}${PTEST_PATH}/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2/run-ptest
new file mode 100644
index 0000000..5cec711
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.11.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.11.2.bb
new file mode 100644
index 0000000..681acf8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.11.2.bb
@@ -0,0 +1,43 @@
+DESCRIPTION = "Python Jinja2: A small but fast and easy to use stand-alone template engine written in pure python."
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=5dc88300786f1c214c1e9827a5229462"
+
+SRC_URI[sha256sum] = "89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"
+
+PYPI_PACKAGE = "Jinja2"
+
+CLEANBROKEN = "1"
+
+inherit pypi setuptools3 ptest
+
+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 += " \
+	${PYTHON_PN}-pytest \
+	${PYTHON_PN}-unixadmin \
+"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-asyncio \
+    ${PYTHON_PN}-crypt \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-markupsafe \
+    ${PYTHON_PN}-math \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers\
+    ${PYTHON_PN}-pickle \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsmin/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsmin/run-ptest
new file mode 100644
index 0000000..cbcfffd
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsmin/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+python3 test.py
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsmin_2.2.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsmin_2.2.2.bb
new file mode 100644
index 0000000..9b7a824
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsmin_2.2.2.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "JavaScript minifier."
+HOMEPAGE = "https://github.com/tikitu/jsmin/"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3a3301ce2ad647e172f4a1016c67324d"
+
+inherit setuptools3 pypi ptest
+SRC_URI[md5sum] = "00e7a3179a4591aab2ee707b3214e2fd"
+SRC_URI[sha256sum] = "b6df99b2cd1c75d9d342e4335b535789b8da9107ec748212706ef7bbe5c2553b"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	cp -f ${S}/jsmin/test.py ${D}${PTEST_PATH}/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.25.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.25.bb
new file mode 100644
index 0000000..73efcee
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.25.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-jsonpatch.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer/run-ptest
new file mode 100644
index 0000000..51e609f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+python3 tests.py
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer_2.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer_2.0.bb
new file mode 100644
index 0000000..8d0a09b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer_2.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-jsonpointer.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonrpcserver_4.1.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonrpcserver_4.1.2.bb
new file mode 100644
index 0000000..e23720c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonrpcserver_4.1.2.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Library to process JSON-RPC requests"
+HOMEPAGE = "https://github.com/bcb/jsonrpcserver"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c89120516900f96f4c60d35fdc4c3f15"
+
+SRC_URI[md5sum] = "fd4091bc19eb18579c15b97af70714eb"
+SRC_URI[sha256sum] = "73db55d1cf245ebdfb96ca05c4cce01c51b61be845a2a981f539ea1e6a4e0c4a"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    python3-apply-defaults \
+    python3-asyncio \
+    python3-core \
+    python3-json \
+    python3-jsonschema \
+    python3-logging \
+    python3-netclient \
+    python3-pkgutil \
+    python3-typing \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_3.2.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_3.2.0.bb
new file mode 100644
index 0000000..9269907
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_3.2.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-jsonschema.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-kconfiglib_14.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-kconfiglib_14.1.0.bb
new file mode 100644
index 0000000..ab0944f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-kconfiglib_14.1.0.bb
@@ -0,0 +1,2 @@
+require python-kconfiglib.inc
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-keras-applications_1.0.8.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-keras-applications_1.0.8.bb
new file mode 100644
index 0000000..4293a63
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-keras-applications_1.0.8.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Reference implementations of popular deep learning models"
+HOMEPAGE = "https://github.com/keras-team/keras-applications"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=366e2fd3c9714f162d3663b6f97cfe41"
+
+SRC_URI = "git://github.com/keras-team/keras-applications.git"
+SRCREV ?= "3b180cb10eda683dda7913ecee2e6487288d292d"
+
+
+inherit setuptools3
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native"
+
+RDEPENDS_${PN} = "python3-numpy \
+                  python3-h5py \
+                 "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-keras-preprocessing_1.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-keras-preprocessing_1.1.0.bb
new file mode 100644
index 0000000..eacb340
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-keras-preprocessing_1.1.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Easy data preprocessing and data augmentation for deep learning models"
+HOMEPAGE = "https://github.com/keras-team/keras-preprocessing"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1744b320500cc2e3112964d00cce7aa4"
+
+SRC_URI = "git://github.com/keras-team/keras-preprocessing.git"
+SRCREV ?= "ff90696c0416b74344b91df097b228e694339b88"
+
+inherit setuptools3
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-kiwisolver_1.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-kiwisolver_1.1.0.bb
new file mode 100644
index 0000000..a108302
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-kiwisolver_1.1.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "A fast implementation of the Cassowary constraint solver"
+HOMEPAGE = "https://github.com/nucleic/kiwi"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://setup.py;endline=7;md5=1c177d169db050341d3b890c69fb80e3"
+
+SRC_URI[md5sum] = "fc8a614367f7ba0d34a02fd08c535afc"
+SRC_URI[sha256sum] = "53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    python3-core \
+    python3-setuptools \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb
new file mode 100644
index 0000000..eb42fe9
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "langtable is used to guess reasonable defaults for locale,\
+keyboard, territory"
+HOMEPAGE = "https://github.com/mike-fabian/langtable/"
+LICENSE = "GPLv3+"
+SECTION = "devel/python"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+SRCREV = "35687ca957b746f153a6872139462b1443f8cad1"
+PV = "0.0.38+git${SRCPV}"
+SRC_URI = "git://github.com/mike-fabian/langtable.git;branch=master \
+"
+
+inherit setuptools3 python3native
+
+DISTUTILS_INSTALL_ARGS += " \
+    --install-data=${datadir}/langtable"
+
+FILES_${PN} += "${datadir}/*"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-compression \
+    ${PYTHON_PN}-doctest \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-xml \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.4.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.4.3.bb
new file mode 100644
index 0000000..150e12f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.4.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-lazy-object-proxy.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression/run-ptest
new file mode 100644
index 0000000..5cec711
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_1.0.bb
new file mode 100644
index 0000000..10a702c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-license-expression_1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-license-expression.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lockfile_0.12.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lockfile_0.12.2.bb
new file mode 100644
index 0000000..30b1297
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lockfile_0.12.2.bb
@@ -0,0 +1,17 @@
+# This recipe is originally from meta-openstack:
+# https://git.yoctoproject.org/cgit/cgit.cgi/meta-cloud-services/tree/meta-openstack/recipes-devtools/python/python-lockfile_0.12.2.bb
+
+SUMMARY = "Platform-independent file locking module"
+HOMEPAGE = "https://pypi.org/project/lockfile/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2340dffbbfea534b58f1349984eeef72"
+
+SRC_URI[md5sum] = "a6a1a82957a23afdf44cfdd039b65ff9"
+SRC_URI[sha256sum] = "6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"
+
+inherit pypi setuptools3
+
+DEPENDS += "python3-distutils-extra-native python3-pbr-native"
+RDEPENDS_${PN} += "python3-sqlite3"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lrparsing_1.0.16.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lrparsing_1.0.16.bb
new file mode 100644
index 0000000..21a80cd
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lrparsing_1.0.16.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-lrparsing.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-luma-core_1.12.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-luma-core_1.12.0.bb
new file mode 100644
index 0000000..cdb1ac8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-luma-core_1.12.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "A component library to support SBC display drivers"
+DESCRIPTION = "A component library to support SBC display drivers"
+HOMEPAGE = "https://github.com/rm-hull/luma.core"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=eda804060ba2312e41fe96b6fa334fd7"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "4378edb99cd12540b4e4a588969567ee"
+SRC_URI[sha256sum] = "864a427de78bcc16758f4f4402a9e61f31cc8857bfae9aba8041159aaec3a491"
+
+CLEANBROKEN = "1"
+
+PYPI_PACKAGE = "luma.core"
+
+RDEPENDS_${PN} += " \
+	${PYTHON_PN}-pillow \
+	${PYTHON_PN}-threading \
+	${PYTHON_PN}-smbus2 \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-luma-oled_3.4.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-luma-oled_3.4.0.bb
new file mode 100644
index 0000000..ee3b00e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-luma-oled_3.4.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "A small library to drive an OLED device"
+DESCRIPTION = "\
+A small library to drive an OLED device with either SSD1306 , SSD1309, SSD1322, \
+SSD1325, SSD1327, SSD1331, SSD1351 or SH1106 chipset"
+HOMEPAGE = "https://github.com/rm-hull/luma.oled"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=c328c862c3335ad464e1c9a3ba574249"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "2944155b2242b9d2ddeb6e139c6083b8"
+SRC_URI[sha256sum] = "2ea2b535e7e2f056a51a8c54ad78aa1f00d5699fc439c01bc7c2902823889552"
+
+CLEANBROKEN = "1"
+
+PYPI_PACKAGE = "luma.oled"
+
+RDEPENDS_${PN} += " \
+	${PYTHON_PN}-luma-core \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.5.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.5.0.bb
new file mode 100644
index 0000000..b95d7ba
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.5.0.bb
@@ -0,0 +1,3 @@
+inherit setuptools3
+require python-lxml.inc
+CLEANBROKEN = "1"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.30.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.30.1.bb
new file mode 100644
index 0000000..4d63d4b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.30.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-m2crypto.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-markdown_3.0.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-markdown_3.0.1.bb
new file mode 100644
index 0000000..cdfe549
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-markdown_3.0.1.bb
@@ -0,0 +1,14 @@
+SUMMARY = "A Python implementation of John Gruber's Markdown."
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=745aaad0c69c60039e638bff9ffc59ed"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "Markdown"
+PYPI_SRC_URI = "https://files.pythonhosted.org/packages/3c/52/7bae9e99a7a4be6af4a713fe9b692777e6468d28991c54c273dfb6ec9fb2/Markdown-${PV}.tar.gz"
+SRC_URI[md5sum] = "72219f46ca440b657bf227500731bdf1"
+SRC_URI[sha256sum] = "d02e0f9b04c500cde6637c11ad7c72671f359b87b9fe924b2383649d8841db7c"
+
+BBCLASSEXTEND = "native"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-logging ${PYTHON_PN}-setuptools"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe/run-ptest
new file mode 100644
index 0000000..5cec711
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.1.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.1.1.bb
new file mode 100644
index 0000000..765e3c9
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.1.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-markupsafe.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-matplotlib_3.2.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-matplotlib_3.2.1.bb
new file mode 100644
index 0000000..f6d8c53
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-matplotlib_3.2.1.bb
@@ -0,0 +1,37 @@
+SUMMARY = "matplotlib: plotting with Python"
+DESCRIPTION = "\
+Matplotlib is a Python 2D plotting library which produces \
+publication-quality figures in a variety of hardcopy formats \
+and interactive environments across platforms."
+HOMEPAGE = "https://github.com/matplotlib/matplotlib"
+SECTION = "devel/python"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "\
+    file://setup.py;beginline=250;endline=250;md5=2a114620e4e6843aa7568d5902501753 \
+    file://LICENSE/LICENSE;md5=afec61498aa5f0c45936687da9a53d74 \
+"
+DEPENDS = "\
+    freetype \
+    libpng \
+    python3-numpy-native \
+    python3-dateutil-native \
+    python3-pytz-native \
+"
+
+SRC_URI[md5sum] = "6c018a644a88120886cc7211f7c826f0"
+SRC_URI[sha256sum] = "ffe2f9cdcea1086fc414e82f42271ecf1976700b8edd16ca9d376189c6d93aee"
+
+inherit pypi setuptools3 pkgconfig
+
+RDEPENDS_${PN} = "\
+    freetype \
+    libpng \
+    python3-numpy \
+    python3-pyparsing \
+    python3-cycler \
+    python3-dateutil \
+    python3-kiwisolver \
+    python3-pytz \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-meld3_1.0.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-meld3_1.0.2.bb
new file mode 100644
index 0000000..f695916
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-meld3_1.0.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-meld3.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-monotonic_1.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-monotonic_1.5.bb
new file mode 100644
index 0000000..94b9052
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-monotonic_1.5.bb
@@ -0,0 +1,9 @@
+SUMMARY = "This module provides a monotonic() function which returns the value (in fractional seconds) of a clock which never goes backwards."
+HOMEPAGE = "https://github.com/atdt/monotonic"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
+
+SRC_URI[md5sum] = "9f81cb0e5966479754453dea2b6822f4"
+SRC_URI[sha256sum] = "23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools/run-ptest
new file mode 100644
index 0000000..3385d68
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools/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/SKIPED/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools_8.2.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools_8.2.0.bb
new file mode 100644
index 0000000..c3b34d3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools_8.2.0.bb
@@ -0,0 +1,5 @@
+inherit pypi setuptools3
+require python-more-itertools.inc
+
+SRC_URI[md5sum] = "55e7e0a5eabc5a57bc8353c65c6f9965"
+SRC_URI[sha256sum] = "b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-mpmath_1.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-mpmath_1.1.0.bb
new file mode 100644
index 0000000..7879a85
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-mpmath_1.1.0.bb
@@ -0,0 +1,16 @@
+# This recipe is adapted from one in meta-jupyter:
+# https://github.com/Xilinx/meta-jupyter/blob/master/recipes-python/python3-mpmath_0.19.bb
+
+SUMMARY = "Python library for arbitrary-precision floating-point arithmetic"
+HOMEPAGE = "https://pypi.org/project/mpmath/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=efe9feb00df0b763941f2b1bbac7c402"
+
+SRC_URI[md5sum] = "acb1cdddf38e16084628065b174ddbfe"
+SRC_URI[sha256sum] = "fc17abe05fbab3382b61a123c398508183406fa132e0223874578e20946499f6"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-image"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack/run-ptest
new file mode 100644
index 0000000..5cec711
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.6.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.6.2.bb
new file mode 100644
index 0000000..6d7e7a0
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.6.2.bb
@@ -0,0 +1,28 @@
+SUMMARY = "MessagePack (de)serializer"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=cd9523181d9d4fbf7ffca52eaa2a5751"
+
+PYPI_PACKAGE = "msgpack"
+inherit pypi setuptools3 ptest
+
+SRC_URI[md5sum] = "ba46fdee995565f40e332bd7eea882f1"
+SRC_URI[sha256sum] = "ea3c2f859346fcd55fc46e96885301d9c2f7a36d453f5d8f2967840efa1e1830"
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-io \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/test
+	cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msk_0.3.13.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msk_0.3.13.bb
new file mode 100644
index 0000000..3f2aaf4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msk_0.3.13.bb
@@ -0,0 +1,11 @@
+SUMMARY = "A tool to help with creating, uploading, and upgrading Mycroft skills on the skills repo."
+HOMEPAGE = "https://github.com/MycroftAI/mycroft-skills-kit"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.md;md5=2f90e43663eddf1c33087419fbb35e28"
+
+SRC_URI[md5sum] = "11d9fc865ef627efe68f25fc113974e8"
+SRC_URI[sha256sum] = "55be86ff2cd0087016759f2b15b40861cda2a8d8a8d0c669fdacdf32a77a10da"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-git"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msm_0.8.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msm_0.8.3.bb
new file mode 100644
index 0000000..24e1ccb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-msm_0.8.3.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Mycroft Skill Manager, in python!"
+HOMEPAGE = "https://github.com/MycroftAI/mycroft-skills-manager"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e23fadd6ceef8c618fc1c65191d846fa"
+
+SRC_URI[md5sum] = "d5f580c58389b337f5577cb92f36e788"
+SRC_URI[sha256sum] = "c201785997f3b766ec376a89bbb3367889ac542183ca26733ffe002bb94917b4"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    python3-pako \
+    python3-monotonic \
+    python3-appdirs \
+"
+
+do_install_append() {
+    # Stop this from being installed
+    rm -rf ${D}/usr/share
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict/run-ptest
new file mode 100644
index 0000000..5cec711
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_4.7.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_4.7.4.bb
new file mode 100644
index 0000000..0636972
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_4.7.4.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Multidicts are useful for working with HTTP headers, URL query args etc."
+HOMEPAGE = "https://github.com/aio-libs/multidict/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e74c98abe0de8f798ca609137f9cef4a"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI[md5sum] = "22b46f759cf2cc3ca1d2c9f82cc9bb79"
+SRC_URI[sha256sum] = "d7d428488c67b09b26928950a395e41cc72bb9c3d5abfe9f0521940ee4f796d4"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb
new file mode 100644
index 0000000..65a8c81
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools3 update-alternatives
+require python-ndg-httpsclient.inc
+
+ALTERNATIVE_${PN} = "ndg_httpclient"
+ALTERNATIVE_LINK_NAME[ndg_httpclient] = "${bindir}/ndg_httpclient"
+ALTERNATIVE_PRIORITY = "30"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb
new file mode 100644
index 0000000..30416a4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb
@@ -0,0 +1,2 @@
+require python-netaddr.inc
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-netifaces_0.10.9.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-netifaces_0.10.9.bb
new file mode 100644
index 0000000..69d5c67
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-netifaces_0.10.9.bb
@@ -0,0 +1,2 @@
+require python-netifaces.inc
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.4.bb
new file mode 100644
index 0000000..efa82e2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.4.bb
@@ -0,0 +1,8 @@
+require python-networkx.inc
+
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b68290ee1026b204170a23bbdb27a4fd"
+
+SRC_URI[md5sum] = "63e3fdc9d3a46bcabc776acc5ea5fe48"
+SRC_URI[sha256sum] = "f8f4ff0b6f96e4f9b16af6b84622597b5334bf9cae8cf9b2e42e7985d5c95c64"
+
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-nmap_1.4.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-nmap_1.4.1.bb
new file mode 100644
index 0000000..8038484
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-nmap_1.4.1.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "python-nmap is a python library which helps in using nmap port scanner"
+HOMEPAGE = "https://www.nmmapper.com/"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+DEPENDS += "${PYTHON_PN}-wheel-native"
+
+PYPI_PACKAGE = "python3-nmap"
+
+SRC_URI[md5sum] = "64a382c870e14b53f2f52b7455996321"
+SRC_URI[sha256sum] = "9b64c5956789f4cac9e8ea2e0de6763dea1cecde1a20ae50a4b4dc5ab0ab6e42"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "nmap ${PYTHON_PN}-requests"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb
new file mode 100644
index 0000000..ce2618b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "This module offers a simple interface to query NTP servers from Python."
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://ntplib.py;beginline=1;endline=23;md5=afa07338a9595257e94c205c3e72224d"
+
+SRCNAME = "ntplib"
+SRC_URI[md5sum] = "c7cc8e9b09f40c84819859d70b7784ca"
+SRC_URI[sha256sum] = "c4621b64d50be9461d9bd9a71ba0b4af06fbbf818bbd483752d95c1a4e273ede"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools3 python3native pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-datetime ${PYTHON_PN}-io"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_2.0.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_2.0.6.bb
new file mode 100644
index 0000000..da13b55
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_2.0.6.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-oauthlib.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-obd_0.7.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-obd_0.7.1.bb
new file mode 100644
index 0000000..8f17068
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-obd_0.7.1.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "A python module for handling realtime sensor data from OBD-II vehicle ports"HOMEPAGE = "https://github.com/brendan-w/python-OBD"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://README.md;md5=58ba896fa086c96ad23317cebfeab277"
+
+SRC_URI[md5sum] = "305efcb6c650db7b9583532355ebeb7c"
+SRC_URI[sha256sum] = "8b81ea5896157b6e861af12e173c10b001cb6cca6ebb04db2c01d326812ad77b"
+
+inherit setuptools3 pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-pyserial ${PYTHON_PN}-pint ${PYTHON_PN}-setuptools ${PYTHON_PN}-packaging"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-openpyxl_3.0.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-openpyxl_3.0.3.bb
new file mode 100644
index 0000000..018c4ab
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-openpyxl_3.0.3.bb
@@ -0,0 +1,15 @@
+SUMMARY = "openpyxl is a Python library to read/write Excel 2010 xlsx/xlsm/xltx/xltm files"
+DESCRIPTION = "It was born from lack of existing library to read/write natively \
+from Python the Office Open XML format. All kudos to the PHPExcel team as openpyxl \
+was initially based on PHPExcel."
+
+HOMEPAGE = "http://www.python-excel.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=a6e506457afab4a25ecbaeb4bc3ed623"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "9583cea56b9d4441d96eb63a8a5c92a4"
+SRC_URI[sha256sum] = "547a9fc6aafcf44abe358b89ed4438d077e9d92e4f182c87e2dc294186dc4b64"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-io ${PYTHON_PN}-pprint ${PYTHON_PN}-shell ${PYTHON_PN}-jdcal ${PYTHON_PN}-et-xmlfile"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set/run-ptest
new file mode 100644
index 0000000..f7b9d09
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest test.py
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_3.1.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_3.1.1.bb
new file mode 100644
index 0000000..bf362da
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_3.1.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "A MutableSet that remembers its order, so that every entry has an index."
+HOMEPAGE = "http://github.com/LuminosoInsight/ordered-set"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://MIT-LICENSE;md5=2b36be0d99854aa2ae292a800a7c1d4e"
+
+SRC_URI[md5sum] = "6e12312c8dc4c90fe840e86e8a352644"
+SRC_URI[sha256sum] = "a7bfa858748c73b096e43db14eb23e2bc714a503f990c89fac8fab9b0ee79724"
+
+inherit pypi setuptools3 ptest
+
+DEPENDS += "python3-pytest-runner-native"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	cp -f ${S}/test.py ${D}${PTEST_PATH}/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-packaging_20.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-packaging_20.3.bb
new file mode 100644
index 0000000..aa20fb2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-packaging_20.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-packaging.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-padaos_0.1.10.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-padaos_0.1.10.bb
new file mode 100644
index 0000000..f506a78
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-padaos_0.1.10.bb
@@ -0,0 +1,9 @@
+SUMMARY = "A rigid, lightweight, dead-simple intent parser"
+HOMEPAGE = "https://github.com/MycroftAI/padaos"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README.md;md5=b51c3e8e53a7cd95c13c5aab6cbc8e67"
+
+SRC_URI[md5sum] = "dbf852015ef87a6694549779fb475b52"
+SRC_URI[sha256sum] = "2ac05fcbc826873c574568aa5ce09945d6ea987bee10399e766eb8f7c6356d72"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-padatious_0.4.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-padatious_0.4.7.bb
new file mode 100644
index 0000000..4abe7c7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-padatious_0.4.7.bb
@@ -0,0 +1,9 @@
+SUMMARY = "An efficient and agile neural network intent parser. Padatious is a core component of Mycroft AI."
+HOMEPAGE = "https://github.com/MycroftAI/padatious"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.md;md5=77baec496a458dd0e0fc4ca64cd305bc"
+
+SRC_URI[md5sum] = "1f53967a1633baa8fd48f11139808a33"
+SRC_URI[sha256sum] = "3c235942ff4151a3c36536fd776bd8a6d4d57c97046723d2fa80a89b34faac1f"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.5.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.5.0.bb
new file mode 100644
index 0000000..cc6f4dc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.5.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "MQTT version 3.1/3.1.1 client library"
+LICENSE = "EPL-1.0 | EDL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=eb48c6ee2cb9f5b8b9fe75e6f817bdfc \
+                    file://epl-v10;md5=8d383c379e91d20ba18a52c3e7d3a979 \
+                    file://edl-v10;md5=c09f121939f063aeb5235972be8c722c \
+"
+SRCNAME = "paho-mqtt"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "45e80d9b8066a8d0ba1ecfffe271bd3d"
+SRC_URI[sha256sum] = "e3d286198baaea195c8b3bc221941d25a3ab0e1507fc1779bdb7473806394be4"
+
+DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-math \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-threading \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pako_0.2.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pako_0.2.3.bb
new file mode 100644
index 0000000..21c48fc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pako_0.2.3.bb
@@ -0,0 +1,13 @@
+SUMMARY = "The universal package manager library"
+HOMEPAGE = "https://github.com/MycroftAI/pako"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e23fadd6ceef8c618fc1c65191d846fa"
+
+SRC_URI[md5sum] = "8eb7077075091c50e4b8a9f939607277"
+SRC_URI[sha256sum] = "6be55fd8c5a2a6f02974f37438c1c47a3d9e764ce81c9d0a1a8c9a1815a59778"
+
+inherit pypi setuptools3
+
+do_install_append() {
+    rm -rf ${D}/usr/share
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.0.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.0.5.bb
new file mode 100644
index 0000000..d8db4ce
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.0.5.bb
@@ -0,0 +1,23 @@
+SUMMARY  = "pandas library for high-performance data analysis tools"
+DESCRIPTION = "pandas is an open source, BSD-licensed library providing \
+high-performance, easy-to-use data structures and data analysis tools for \
+the Python programming language."
+HOMEPAGE = "http://pandas.pydata.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ee0470f2de336c370a71c2f8d5e81c11"
+
+SRC_URI[md5sum] = "5183db713194e6fbc96c45f30a0d1311"
+SRC_URI[sha256sum] = "69c5d920a0b2a9838e677f78f4dde506b95ea8e4d30da25859db6469ded84fa8"
+
+inherit pypi setuptools3
+
+DEPENDS += " \
+    ${PYTHON_PN}-numpy-native ${PYTHON_PN}-cython-native \
+"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-numpy \
+    ${PYTHON_PN}-dateutil \
+    ${PYTHON_PN}-pytz \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parallax_1.0.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parallax_1.0.6.bb
new file mode 100644
index 0000000..40876d3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parallax_1.0.6.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Execute commands and copy files over SSH to multiple machines at once."
+HOMEPAGE = "https://github.com/krig/parallax/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=52c67ffa6102f288a0347f8c5802fd18"
+
+SRC_URI[md5sum] = "e312397b083426af84db7076dc2a28d7"
+SRC_URI[sha256sum] = "c16703202ff67aed4740c0727df304abe9f3e7851e653533b24de21b338d9081"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-fcntl ${PYTHON_PN}-threading ${PYTHON_PN}-unixadmin"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.4.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.4.2.bb
new file mode 100644
index 0000000..91d9ce2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.4.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-parse-type.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse/run-ptest
new file mode 100644
index 0000000..40c2847
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse/run-ptest
@@ -0,0 +1,2 @@
+#!/bin/sh
+pytest
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.15.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.15.0.bb
new file mode 100644
index 0000000..b124254
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.15.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-parse.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.2.bb
new file mode 100644
index 0000000..18180a0
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-passlib.inc
\ No newline at end of file
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pathlib2_2.3.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pathlib2_2.3.5.bb
new file mode 100644
index 0000000..66f71e5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pathlib2_2.3.5.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pathlib2.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-periphery_2.0.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-periphery_2.0.1.bb
new file mode 100644
index 0000000..e994427
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-periphery_2.0.1.bb
@@ -0,0 +1,5 @@
+inherit pypi setuptools3
+require python-periphery.inc
+
+SRC_URI[md5sum] = "1d958f02575d4a19734ee2dd92336157"
+SRC_URI[sha256sum] = "5da4d5f40ff8974cf6c724587baa674d7e0593f07b6f6ee896104f11c1be18ec"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-petact_0.1.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-petact_0.1.2.bb
new file mode 100644
index 0000000..58cd05e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-petact_0.1.2.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Petact is a library used for installing and updating compressed tar files"
+HOMEPAGE = "https://github.com/matthewscholefield/petact"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README.md;md5=c8533d4ba77519398cdae0173db799a1"
+
+SRC_URI[md5sum] = "47e9a6abc91b4022953e4007ddae9e68"
+SRC_URI[sha256sum] = "5dcb0d44f86a601e41a2def9770993cd0ea45c76d37eb3f35e3dd61aa50350e6"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect/0001-FSM.py-change-shebang-from-python-to-python3.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect/0001-FSM.py-change-shebang-from-python-to-python3.patch
new file mode 100644
index 0000000..bee772d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect/0001-FSM.py-change-shebang-from-python-to-python3.patch
@@ -0,0 +1,25 @@
+From 35462d7b778eea32fd0cc0bbc79d6e6f53d942b4 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Thu, 23 Apr 2020 08:01:42 +0000
+Subject: [PATCH] FSM.py: change shebang from python to python3
+
+Upstream-Status: Pending
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ pexpect/FSM.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pexpect/FSM.py b/pexpect/FSM.py
+index 46b392e..4e77654 100644
+--- a/pexpect/FSM.py
++++ b/pexpect/FSM.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ 
+ '''This module implements a Finite State Machine (FSM). In addition to state
+ this FSM also maintains a user defined "memory". So this FSM can be used as a
+-- 
+2.24.1
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.8.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.8.0.bb
new file mode 100644
index 0000000..cf39233
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.8.0.bb
@@ -0,0 +1,2 @@
+require python-pexpect.inc
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.5.bb
new file mode 100644
index 0000000..ef19478
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.5.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Pidfile featuring stale detection and file-locking, can also \
+be used as context-manager or decorator"
+HOMEPAGE = "https://github.com/trbs/pid/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=83d53cbd3105063f20305bc313464e29"
+
+SRC_URI[md5sum] = "ad352ee1dc28b9746a15451c0c53e9d7"
+SRC_URI[sha256sum] = "96eb7dba326b88f5164bc1afdc986c7793e0d32d7f62366256a3903c7b0614ef"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-fcntl ${PYTHON_PN}-logging ${PYTHON_PN}-io"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pika_1.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pika_1.1.0.bb
new file mode 100644
index 0000000..a151588
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pika_1.1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pika.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow/0001-explicitly-set-compile-options.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow/0001-explicitly-set-compile-options.patch
new file mode 100644
index 0000000..35aee42
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow/0001-explicitly-set-compile-options.patch
@@ -0,0 +1,37 @@
+From 862a981ce462cd83a99e3db9faeeda1f8c64983f Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 18 Mar 2019 23:23:55 -0400
+Subject: [PATCH] explicitly set compile options
+
+OE does not support to install egg package, so
+explicitly set build_ext options for oe-core's
+`setup.py install'
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+---
+ setup.cfg | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/setup.cfg b/setup.cfg
+index 1c6ebc84..1ccc3d69 100644
+--- a/setup.cfg
++++ b/setup.cfg
+@@ -13,3 +13,15 @@ multi_line_output = 3
+ 
+ [tool:pytest]
+ addopts = -rs
++
++[build_ext]
++disable-platform-guessing = 1
++enable-zlib = 1
++enable-jpeg = 1
++enable-tiff = 1
++enable-freetype = 1
++enable-lcms = 1
++enable-jpeg2000 = 1
++disable-webp = 1
++disable-webpmux = 1
++disable-imagequant = 1
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow/0001-support-cross-compiling.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow/0001-support-cross-compiling.patch
new file mode 100644
index 0000000..6de19ad
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow/0001-support-cross-compiling.patch
@@ -0,0 +1,61 @@
+From ae7c8d0336381dd4c10e809e9c8926f9deeafeb8 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 14 Mar 2019 03:48:10 -0400
+Subject: [PATCH] support cross compiling
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ setup.py | 13 +++----------
+ 1 file changed, 3 insertions(+), 10 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 5ceae344..07863340 100755
+--- a/setup.py
++++ b/setup.py
+@@ -105,7 +105,7 @@ _LIB_IMAGING = (
+     "codec_fd",
+ )
+ 
+-DEBUG = False
++DEBUG = True
+ 
+ 
+ class DependencyException(Exception):
+@@ -396,21 +396,16 @@ class pil_build_ext(build_ext):
+                     _add_directory(library_dirs, match.group(1))
+ 
+         # include, rpath, if set as environment variables:
+-        for k in ("C_INCLUDE_PATH", "CPATH", "INCLUDE"):
++        for k in ('C_INCLUDE_PATH', 'CPATH', 'INCLUDE', 'STAGING_INCDIR'):
+             if k in os.environ:
+                 for d in os.environ[k].split(os.path.pathsep):
+                     _add_directory(include_dirs, d)
+ 
+-        for k in ("LD_RUN_PATH", "LIBRARY_PATH", "LIB"):
++        for k in ('LD_RUN_PATH', 'LIBRARY_PATH', 'LIB', 'STAGING_LIBDIR'):
+             if k in os.environ:
+                 for d in os.environ[k].split(os.path.pathsep):
+                     _add_directory(library_dirs, d)
+ 
+-        prefix = sysconfig.get_config_var("prefix")
+-        if prefix:
+-            _add_directory(library_dirs, os.path.join(prefix, "lib"))
+-            _add_directory(include_dirs, os.path.join(prefix, "include"))
+-
+         #
+         # add platform directories
+ 
+@@ -469,8 +464,6 @@ class pil_build_ext(build_ext):
+             or sys.platform.startswith("gnu")
+             or sys.platform.startswith("freebsd")
+         ):
+-            for dirname in _find_library_dirs_ldconfig():
+-                _add_directory(library_dirs, dirname)
+             if sys.platform.startswith("linux") and os.environ.get(
+                 "ANDROID_ROOT", None
+             ):
+-- 
+2.20.1
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_6.2.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_6.2.1.bb
new file mode 100644
index 0000000..a383a3f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_6.2.1.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Python Imaging Library (Fork). Pillow is the friendly PIL fork by Alex \
+Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lundh and \
+Contributors."
+HOMEPAGE = "https://pillow.readthedocs.io"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=55c0f320370091249c1755c0d2b48e89"
+
+SRC_URI = "git://github.com/python-pillow/Pillow.git;branch=6.2.x \
+           file://0001-support-cross-compiling.patch \
+           file://0001-explicitly-set-compile-options.patch \
+"
+SRCREV ?= "6e0f07bbe38def22d36ee176b2efd9ea74b453a6"
+
+
+inherit setuptools3
+
+DEPENDS += " \
+    zlib \
+    jpeg \
+    tiff \
+    freetype \
+    lcms \
+    openjpeg \
+"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-misc \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-numbers \
+"
+
+CVE_PRODUCT = "pillow"
+
+S = "${WORKDIR}/git"
+
+RPROVIDES_${PN} += "python3-imaging"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pint/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pint/run-ptest
new file mode 100644
index 0000000..5cec711
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pint/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.11.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.11.bb
new file mode 100644
index 0000000..f793ac4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.11.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pint.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pkgconfig_1.4.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pkgconfig_1.4.0.bb
new file mode 100644
index 0000000..fc7a47a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pkgconfig_1.4.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Python module to interface with the pkg-config command line too"
+HOMEPAGE = "http://github.com/matze/pkgconfig"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=faa7f82be8f220bff6156be4790344fc"
+
+SRC_URI = "git://github.com/matze/pkgconfig.git"
+SRCREV ?= "8af0102346847e8873af8e76ab3f34ba9da806e2"
+
+RDEPENDS_${PN} = "pkgconfig \
+                 ${PYTHON_PN}-shell \
+                 "
+
+inherit setuptools3
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.13.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.13.1.bb
new file mode 100644
index 0000000..941e8e3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.13.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pluggy.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ply_3.11.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ply_3.11.bb
new file mode 100644
index 0000000..72410ba
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ply_3.11.bb
@@ -0,0 +1,2 @@
+require python-ply.inc
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pocketsphinx_0.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pocketsphinx_0.1.0.bb
new file mode 100644
index 0000000..2275d1b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pocketsphinx_0.1.0.bb
@@ -0,0 +1,2 @@
+require python-pocketsphinx.inc
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_1.4.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_1.4.0.bb
new file mode 100644
index 0000000..d81ee54
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_1.4.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A Python implementation of Google's Encoded Polyline Algorithm Format"
+HOMEPAGE = "https://pypi.org/project/polyline/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0fbd13500cabd06dd751ba6b2be304c6"
+
+SRC_URI[md5sum] = "b97c57378605c4a856c437569f95a0cb"
+SRC_URI[sha256sum] = "7c7f89d09a09c7b6161bdbfb4fd304b186fc7a2060fa4f31cb3f61c646a5c074"
+
+inherit pypi setuptools3 ptest
+
+RDEPENDS_${PN} += "python3-six"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/test
+	cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl/0001-support-cross-complication.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl/0001-support-cross-complication.patch
new file mode 100644
index 0000000..775ae1b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl/0001-support-cross-complication.patch
@@ -0,0 +1,61 @@
+From 9a16800738547d117284354bbcad7dd77d9d0344 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 21 Apr 2016 03:05:57 -0400
+Subject: [PATCH] support cross-complication
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ setup.py | 35 -----------------------------------
+ 1 file changed, 35 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 658d1a5..e8be7eb 100755
+--- a/setup.py
++++ b/setup.py
+@@ -13,41 +13,6 @@ import sys
+ # - Need gcc
+ # - Need C headers
+ # - Need libcap headers
+-if not sys.platform.startswith('linux'):
+-    sys.stderr.write("This module only works on linux\n")
+-    sys.exit(1)
+-
+-kvers = os.uname()[2]
+-if kvers < '2.6.18' and not os.environ.get("PRCTL_SKIP_KERNEL_CHECK",False):
+-    sys.stderr.write("This module requires linux 2.6.18 or newer\n")
+-    sys.exit(1)
+-
+-if sys.version_info[:2] < (2,4):
+-    sys.stderr.write("This module requires python 2.4 or newer\n")
+-    sys.exit(1)
+-
+-exit = False
+-try:
+-    subprocess.call(['gcc','-v'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+-except:
+-    sys.stderr.write("You need to install gcc to build this module\n")
+-    sys.exit(1)
+-
+-sp = subprocess.Popen(['cpp'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+-sp.communicate('#include <sys/prctl.h>\n'.encode())
+-if sp.returncode:
+-    sys.stderr.write("You need to install libc development headers to build this module\n")
+-    exit = True
+-
+-sp = subprocess.Popen(['cpp'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+-sp.communicate('#include <sys/capability.h>\n'.encode())
+-if sp.returncode:
+-    sys.stderr.write("You need to install libcap development headers to build this module\n")
+-    exit = True
+-
+-if exit:
+-    sys.exit(1)
+-
+ _prctl = Extension("_prctl",
+                    sources = ['_prctlmodule.c'],
+                    depends = ['securebits.h'],
+-- 
+2.8.1
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl_1.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl_1.7.bb
new file mode 100644
index 0000000..54620a0
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl_1.7.bb
@@ -0,0 +1,22 @@
+SUMMARY  = "Control process attributes through prctl"
+DESCRIPTION = "The linux prctl function allows you to control specific characteristics of a \
+process' behaviour. Usage of the function is fairly messy though, due to \
+limitations in C and linux. This module provides a nice non-messy python(ic) \
+interface."
+SECTION = "devel/python"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=23ff9f50449d4bd0e513df16e4d9755f"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+SRCREV = "57cd0a7cad76e8f8792eea22ee5b5d17bae0a90f"
+PV = "1.7+git${SRCPV}"
+
+SRC_URI = "git://github.com/seveas/python-prctl;branch=master \
+           file://0001-support-cross-complication.patch \
+"
+inherit setuptools3 python3native
+
+DEPENDS += "libcap"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-precise-runner/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-precise-runner/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-precise-runner/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-precise-runner_0.3.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-precise-runner_0.3.1.bb
new file mode 100644
index 0000000..6155b79
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-precise-runner_0.3.1.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A lightweight, simple-to-use, RNN wake word listener."
+HOMEPAGE = "https://github.com/MycroftAI/mycroft-precise"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.md;md5=2ad29e930f3107d52d2a55728bf62116"
+
+SRC_URI[md5sum] = "a2434be110444192e804f4dada0ccecf"
+SRC_URI[sha256sum] = "1a464209fb4bf0a3f5d5a428310cb2a70487a01a6bc3a960d1dda90af896b80d"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/test
+	cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pretend_1.0.9.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pretend_1.0.9.bb
new file mode 100644
index 0000000..9c5d8a8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pretend_1.0.9.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pretend.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable_0.7.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable_0.7.2.bb
new file mode 100644
index 0000000..5445f10
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prettytable_0.7.2.bb
@@ -0,0 +1,3 @@
+inherit setuptools3
+require python-prettytable.inc
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.5.bb
new file mode 100644
index 0000000..45e2642
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.5.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-progress.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_2.0.10.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_2.0.10.bb
new file mode 100644
index 0000000..0e99917
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_2.0.10.bb
@@ -0,0 +1,7 @@
+inherit pypi setuptools3
+require python-prompt-toolkit.inc
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-shell \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.11.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.11.3.bb
new file mode 100644
index 0000000..30ea34e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.11.3.bb
@@ -0,0 +1,10 @@
+inherit setuptools3
+require python-protobuf.inc
+
+DEPENDS += "protobuf"
+DISTUTILS_BUILD_ARGS += "--cpp_implementation"
+DISTUTILS_INSTALL_ARGS += "--cpp_implementation"
+
+do_compile_prepend_class-native () {
+    export KOKORO_BUILD_NUMBER="1"
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.7.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.7.0.bb
new file mode 100644
index 0000000..c1969ea
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.7.0.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools3
+require python-psutil.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-netclient"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess/run-ptest
new file mode 100644
index 0000000..15c3f62
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess_0.6.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess_0.6.0.bb
new file mode 100644
index 0000000..bdcd0e2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess_0.6.0.bb
@@ -0,0 +1,2 @@
+require python-ptyprocess.inc
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pulsectl_20.2.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pulsectl_20.2.4.bb
new file mode 100644
index 0000000..f0db968
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pulsectl_20.2.4.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Python (3.x and 2.x) high-level interface and ctypes-based bindings for PulseAudio (libpulse), mostly focused on mixer-like controls and introspection-related operations (as opposed to e.g. submitting sound samples to play, player-like client)."
+HOMEPAGE = "https://github.com/mk-fg/python-pulse-control"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f1d10048469ff90123263eb5e214061d"
+
+SRC_URI[md5sum] = "07d7a5fddc49f5da22634464aa008003"
+SRC_URI[sha256sum] = "fca9ed501bef2efd551b35773fd24bba36bbd21bc448f402cf8ee13c12423c19"
+
+RDEPENDS_${PN} += "pulseaudio"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.8.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.8.1.bb
new file mode 100644
index 0000000..ff66aea
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.8.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Library with cross-python path, ini-parsing, io, code, log facilities"
+HOMEPAGE = "http://py.readthedocs.io/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6bb0320b04a0a503f12f69fea479de9"
+
+SRC_URI[md5sum] = "42c67de84b07ac9cc867b8b70843a45b"
+SRC_URI[sha256sum] = "5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-netclient"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyalsaaudio_0.8.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyalsaaudio_0.8.4.bb
new file mode 100644
index 0000000..b7da1a4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyalsaaudio_0.8.4.bb
@@ -0,0 +1,2 @@
+require python-pyalsaaudio.inc
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.7.bb
new file mode 100644
index 0000000..3b1186f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.7.bb
@@ -0,0 +1,2 @@
+require python-pyasn1-modules.inc
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.8.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.8.bb
new file mode 100644
index 0000000..a5e2a71
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.8.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pyasn1.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyatspi_2.34.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyatspi_2.34.0.bb
new file mode 100644
index 0000000..3bdb86b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyatspi_2.34.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Python bindings for DBus AT-SPI2 accessibility"
+DESCRIPTION = "AT-SPI2 is a protocol over DBus, toolkit widgets use to provide content to screen readers such as Orca"
+SECTION = "devel/python"
+HOMEPAGE = "https://www.freedesktop.org/wiki/Accessibility/AT-SPI2/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=db29218e6ba3794c56df7d4987dc7e4d \
+                    file://COPYING.GPL;md5=751419260aa954499f7abaabaa882bbe"
+DEPENDS = "python3-dbus-native glib-2.0 dbus-glib libxml2 atk gtk+ python3-pygobject"
+
+SRC_URI = "git://github.com/GNOME/pyatspi2.git;protocol=https;branch=mainline"
+SRCREV = "cc99d68db66174f4499b9b325bc788393b972edd"
+S = "${WORKDIR}/git" 
+
+# Same restriction as gtk+
+inherit features_check
+ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}"
+
+inherit pkgconfig autotools python3native
+
+FILES_${PN} += "${PYTHON_SITEPACKAGES_DIR}/pyatspi/*"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyaudio_0.2.11.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyaudio_0.2.11.bb
new file mode 100644
index 0000000..abb01bf
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyaudio_0.2.11.bb
@@ -0,0 +1,2 @@
+require python-pyaudio.inc
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.4.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.4.3.bb
new file mode 100644
index 0000000..355e284
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.4.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pybind11.inc
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb
new file mode 100644
index 0000000..26902e1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Bluetooth Python extension module"
+HOMEPAGE = "http://karulis.github.io/pybluez/"
+SECTION = "devel/python"
+
+DEPENDS = "bluez5"
+
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8a71d0475d08eee76d8b6d0c6dbec543"
+
+SRC_URI[md5sum] = "49dab9d5a8f0b798c8125c7f649be3cd"
+SRC_URI[sha256sum] = "4ce006716a54d9d18e8186a3f1c8b12a8e6befecffe8fd5828a291fb694ce49d"
+
+PYPI_PACKAGE = "PyBluez"
+PYPI_PACKAGE_EXT = "zip"
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    bluez5 \
+    ${PYTHON_PN}-fcntl \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_4.2.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_4.2.3.bb
new file mode 100644
index 0000000..f561753
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_4.2.3.bb
@@ -0,0 +1,11 @@
+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[md5sum] = "56632e0d94f2648a29d89affddddaaec"
+SRC_URI[sha256sum] = "d7b7b35254203ab4617389061bee25b0fa67c6628c48bd6a75ccfefef74f1edb"
+
+PYPI_PACKAGE = "PyChromecast"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.5.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.5.0.bb
new file mode 100644
index 0000000..7f00ab6
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.5.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Python style guide checker (formly called pep8)"
+HOMEPAGE = "https://pypi.org/project/pycodestyle"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=01831ddbaf398471da3cc87f5037e822"
+
+SRC_URI[md5sum] = "40e7a76f364a18f531aaba11a4476e21"
+SRC_URI[sha256sum] = "e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.20.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.20.bb
new file mode 100644
index 0000000..2a5f414
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.20.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Parser of the C language, written in pure Python"
+HOMEPAGE = "https://github.com/eliben/pycparser"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86f1cedb4e6410a88ce8e30b91079169"
+
+SRC_URI[md5sum] = "b8f88de737db8c346ee8d31c07c7a25a"
+SRC_URI[sha256sum] = "2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-ply \
+    ${PYTHON_PN}-pprint \
+    cpp \
+    cpp-symlinks \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto/0001-Replace-time.clock-with-time.process_time.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto/0001-Replace-time.clock-with-time.process_time.patch
new file mode 100644
index 0000000..282fdd3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto/0001-Replace-time.clock-with-time.process_time.patch
@@ -0,0 +1,34 @@
+From 1d90727ff2368012d6e2f91b1a3198f626495b7f Mon Sep 17 00:00:00 2001
+From: Ming Liu <liu.ming50@gmail.com>
+Date: Sat, 25 Jan 2020 14:36:16 +0100
+Subject: [PATCH] Replace time.clock() with time.process_time()
+
+The use of time.clock() is deprecated in python 3.8, change to use
+time.process_time().
+
+Reference:
+https://docs.python.org/3.3/library/time.html#time.clock
+
+Upstream-Status: Pending
+
+Signed-off-by: Ming Liu <liu.ming50@gmail.com>
+---
+ lib/Crypto/Random/_UserFriendlyRNG.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/Crypto/Random/_UserFriendlyRNG.py b/lib/Crypto/Random/_UserFriendlyRNG.py
+index 957e006..d2a0259 100644
+--- a/lib/Crypto/Random/_UserFriendlyRNG.py
++++ b/lib/Crypto/Random/_UserFriendlyRNG.py
+@@ -74,7 +74,7 @@ class _EntropyCollector(object):
+         self._time_es.feed(struct.pack("@I", int(2**30 * (t - floor(t)))))
+ 
+         # Add the fractional part of time.clock()
+-        t = time.clock()
++        t = time.process_time()
+         self._clock_es.feed(struct.pack("@I", int(2**30 * (t - floor(t)))))
+ 
+ 
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb
new file mode 100644
index 0000000..a20eafe
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb
@@ -0,0 +1,11 @@
+inherit distutils3
+require python-pycrypto.inc
+
+SRC_URI += "file://0001-Replace-time.clock-with-time.process_time.patch"
+
+# We explicitly call distutils_do_install, since we want it to run, but
+# *don't* want the autotools install to run, since this package doesn't
+# provide a "make install" target.
+do_install() {
+       distutils3_do_install
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycurl_7.43.0.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycurl_7.43.0.5.bb
new file mode 100644
index 0000000..5a1c179
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pycurl_7.43.0.5.bb
@@ -0,0 +1,23 @@
+SUMMARY = "A Python Interface To The cURL library"
+DESCRIPTION = "\
+PycURL is a Python interface to libcurl, the multiprotocol file \
+transfer library. Similarly to the urllib Python module, PycURL can \
+be used to fetch objects identified by a URL from a Python program \
+"
+SECTION = "devel/python"
+HOMEPAGE = "http://pycurl.io/"
+
+LICENSE = "LGPLv2 | MIT"
+LIC_FILES_CHKSUM = "file://COPYING-LGPL;md5=4fbd65380cdd255951079008b364516c \
+                    file://COPYING-MIT;md5=60872a112595004233b769b6cbfd65b6 \
+                    "
+
+SRC_URI[md5sum] = "0b387d4609ed20c88baede8579a4d425"
+SRC_URI[sha256sum] = "ec7dd291545842295b7b56c12c90ffad2976cc7070c98d7b1517b7b6cd5994b3"
+
+inherit pypi setuptools3
+
+DEPENDS = "\
+    curl \
+    ${PYTHON_PN}\
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0001-Support-asynchronous-calls-58.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0001-Support-asynchronous-calls-58.patch
new file mode 100644
index 0000000..c5cb9a8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0001-Support-asynchronous-calls-58.patch
@@ -0,0 +1,93 @@
+From 39a7d79ee6c548902fbac8b95c934af7e4c69260 Mon Sep 17 00:00:00 2001
+From: Vendula Poncova <vponcova@redhat.com>
+Date: Thu, 2 Aug 2018 15:30:45 +0800
+Subject: [PATCH 1/2] Support asynchronous calls (#58)
+
+Added support for asynchronous calls of methods. A method is called
+synchronously unless its callback parameter is specified. A callback
+is a function f(*args, returned=None, error=None), where args is
+callback_args specified in the method call, returned is a return
+value of the method and error is an exception raised by the method.
+
+Example of an asynchronous call:
+
+def func(x, y, returned=None, error=None):
+  pass
+
+proxy.Method(a, b, callback=func, callback_args=(x, y))
+
+Upstream-Status: Cherry-pick [https://src.fedoraproject.org/cgit/rpms/python-pydbus.git/]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ pydbus/proxy_method.py | 44 ++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 38 insertions(+), 6 deletions(-)
+
+diff --git a/pydbus/proxy_method.py b/pydbus/proxy_method.py
+index 8798edd..4ea4304 100644
+--- a/pydbus/proxy_method.py
++++ b/pydbus/proxy_method.py
+@@ -65,15 +65,34 @@ class ProxyMethod(object):
+ 
+ 		# Python 2 sux
+ 		for kwarg in kwargs:
+-			if kwarg not in ("timeout",):
++			if kwarg not in ("timeout", "callback", "callback_args"):
+ 				raise TypeError(self.__qualname__ + " got an unexpected keyword argument '{}'".format(kwarg))
+ 		timeout = kwargs.get("timeout", None)
++		callback = kwargs.get("callback", None)
++		callback_args = kwargs.get("callback_args", tuple())
++
++		call_args = (
++			instance._bus_name,
++			instance._path,
++			self._iface_name,
++			self.__name__,
++			GLib.Variant(self._sinargs, args),
++			GLib.VariantType.new(self._soutargs),
++			0,
++			timeout_to_glib(timeout),
++			None
++		)
++
++		if callback:
++			call_args += (self._finish_async_call, (callback, callback_args))
++			instance._bus.con.call(*call_args)
++			return None
++		else:
++			ret = instance._bus.con.call_sync(*call_args)
++			return self._unpack_return(ret)
+ 
+-		ret = instance._bus.con.call_sync(
+-			instance._bus_name, instance._path,
+-			self._iface_name, self.__name__, GLib.Variant(self._sinargs, args), GLib.VariantType.new(self._soutargs),
+-			0, timeout_to_glib(timeout), None).unpack()
+-
++	def _unpack_return(self, values):
++		ret = values.unpack()
+ 		if len(self._outargs) == 0:
+ 			return None
+ 		elif len(self._outargs) == 1:
+@@ -81,6 +100,19 @@ class ProxyMethod(object):
+ 		else:
+ 			return ret
+ 
++	def _finish_async_call(self, source, result, user_data):
++		error = None
++		return_args = None
++
++		try:
++			ret = source.call_finish(result)
++			return_args = self._unpack_return(ret)
++		except Exception as err:
++			error = err
++
++		callback, callback_args = user_data
++		callback(*callback_args, returned=return_args, error=error)
++
+ 	def __get__(self, instance, owner):
+ 		if instance is None:
+ 			return self
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0002-Support-transformation-between-D-Bus-errors-and-exce.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0002-Support-transformation-between-D-Bus-errors-and-exce.patch
new file mode 100644
index 0000000..f5c0390
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0002-Support-transformation-between-D-Bus-errors-and-exce.patch
@@ -0,0 +1,203 @@
+From 69968dec867053e38de0b91d76ac41d5a5735e36 Mon Sep 17 00:00:00 2001
+From: Vendula Poncova <vponcova@redhat.com>
+Date: Thu, 2 Aug 2018 15:31:56 +0800
+Subject: [PATCH 2/2] Support transformation between D-Bus errors and
+ exceptions.
+
+Exceptions can be registered with decorators, raised in a remote
+method and recreated after return from the remote call.
+
+Upstream-Status: Cherry-pick [https://src.fedoraproject.org/cgit/rpms/python-pydbus.git/]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ pydbus/error.py        | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ pydbus/proxy_method.py | 18 ++++++++--
+ pydbus/registration.py | 16 ++++++---
+ 3 files changed, 123 insertions(+), 8 deletions(-)
+ create mode 100644 pydbus/error.py
+
+diff --git a/pydbus/error.py b/pydbus/error.py
+new file mode 100644
+index 0000000..aaa3510
+--- /dev/null
++++ b/pydbus/error.py
+@@ -0,0 +1,97 @@
++from gi.repository import GLib, Gio
++
++
++def register_error(name, domain, code):
++	"""Register and map decorated exception class to a DBus error."""
++	def decorated(cls):
++		error_registration.register_error(cls, name, domain, code)
++		return cls
++
++	return decorated
++
++
++def map_error(error_name):
++	"""Map decorated exception class to a DBus error."""
++	def decorated(cls):
++		error_registration.map_error(cls, error_name)
++		return cls
++
++	return decorated
++
++
++def map_by_default(cls):
++	"""Map decorated exception class to all unknown DBus errors."""
++	error_registration.map_by_default(cls)
++	return cls
++
++
++class ErrorRegistration(object):
++	"""Class for mapping exceptions to DBus errors."""
++
++	_default = None
++	_map = dict()
++	_reversed_map = dict()
++
++	def map_by_default(self, exception_cls):
++		"""Set the exception class as a default."""
++		self._default = exception_cls
++
++	def map_error(self, exception_cls, name):
++		"""Map the exception class to a DBus name."""
++		self._map[name] = exception_cls
++		self._reversed_map[exception_cls] = name
++
++	def register_error(self, exception_cls, name, domain, code):
++		"""Map and register the exception class to a DBus name."""
++		self.map_error(exception_cls, name)
++		return Gio.DBusError.register_error(domain, code, name)
++
++	def is_registered_exception(self, obj):
++		"""Is the exception registered?"""
++		return obj.__class__ in self._reversed_map
++
++	def get_dbus_name(self, obj):
++		"""Get the DBus name of the exception."""
++		return self._reversed_map.get(obj.__class__)
++
++	def get_exception_class(self, name):
++		"""Get the exception class mapped to the DBus name."""
++		return self._map.get(name, self._default)
++
++	def transform_message(self, name, message):
++		"""Transform the message of the exception."""
++		prefix = "{}:{}: ".format("GDBus.Error", name)
++
++		if message.startswith(prefix):
++			return message[len(prefix):]
++
++		return message
++
++	def transform_exception(self, e):
++		"""Transform the remote error to the exception."""
++		if not isinstance(e, GLib.Error):
++			return e
++
++		if not Gio.DBusError.is_remote_error(e):
++			return e
++
++		# Get DBus name of the error.
++		name = Gio.DBusError.get_remote_error(e)
++		# Get the exception class.
++		exception_cls = self.get_exception_class(name)
++
++		# Return the original exception.
++		if not exception_cls:
++			return e
++
++		# Return new exception.
++		message = self.transform_message(name, e.message)
++		exception = exception_cls(message)
++		exception.dbus_name = name
++		exception.dbus_domain = e.domain
++		exception.dbus_code = e.code
++		return exception
++
++
++# Default error registration.
++error_registration = ErrorRegistration()
+diff --git a/pydbus/proxy_method.py b/pydbus/proxy_method.py
+index 4ea4304..e9496f5 100644
+--- a/pydbus/proxy_method.py
++++ b/pydbus/proxy_method.py
+@@ -2,6 +2,7 @@ from gi.repository import GLib
+ from .generic import bound_method
+ from .identifier import filter_identifier
+ from .timeout import timeout_to_glib
++from .error import error_registration
+ 
+ try:
+ 	from inspect import Signature, Parameter
+@@ -87,9 +88,20 @@ class ProxyMethod(object):
+ 			call_args += (self._finish_async_call, (callback, callback_args))
+ 			instance._bus.con.call(*call_args)
+ 			return None
++
+ 		else:
+-			ret = instance._bus.con.call_sync(*call_args)
+-			return self._unpack_return(ret)
++			result = None
++			error = None
++
++			try:
++				result = instance._bus.con.call_sync(*call_args)
++			except Exception as e:
++				error = error_registration.transform_exception(e)
++
++			if error:
++				raise error
++
++			return self._unpack_return(result)
+ 
+ 	def _unpack_return(self, values):
+ 		ret = values.unpack()
+@@ -108,7 +120,7 @@ class ProxyMethod(object):
+ 			ret = source.call_finish(result)
+ 			return_args = self._unpack_return(ret)
+ 		except Exception as err:
+-			error = err
++			error = error_registration.transform_exception(err)
+ 
+ 		callback, callback_args = user_data
+ 		callback(*callback_args, returned=return_args, error=error)
+diff --git a/pydbus/registration.py b/pydbus/registration.py
+index f531539..1d2cbcb 100644
+--- a/pydbus/registration.py
++++ b/pydbus/registration.py
+@@ -5,6 +5,7 @@ from . import generic
+ from .exitable import ExitableWithAliases
+ from functools import partial
+ from .method_call_context import MethodCallContext
++from .error import error_registration
+ import logging
+ 
+ try:
+@@ -91,11 +92,16 @@ class ObjectWrapper(ExitableWithAliases("unwrap")):
+ 			logger = logging.getLogger(__name__)
+ 			logger.exception("Exception while handling %s.%s()", interface_name, method_name)
+ 
+-			#TODO Think of a better way to translate Python exception types to DBus error types.
+-			e_type = type(e).__name__
+-			if not "." in e_type:
+-				e_type = "unknown." + e_type
+-			invocation.return_dbus_error(e_type, str(e))
++			if error_registration.is_registered_exception(e):
++				name = error_registration.get_dbus_name(e)
++				invocation.return_dbus_error(name, str(e))
++			else:
++				logger.info("name is not registered")
++				e_type = type(e).__name__
++				if not "." in e_type:
++					e_type = "unknown." + e_type
++
++				invocation.return_dbus_error(e_type, str(e))
+ 
+ 	def Get(self, interface_name, property_name):
+ 		type = self.readable_properties[interface_name + "." + property_name]
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb
new file mode 100644
index 0000000..807e7b2
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Pythonic DBus library"
+HOMEPAGE = "https://pypi.python.org/pypi/pydbus/"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a916467b91076e631dd8edb7424769c7"
+
+SRC_URI += "file://0001-Support-asynchronous-calls-58.patch \
+            file://0002-Support-transformation-between-D-Bus-errors-and-exce.patch \
+"
+
+SRC_URI[md5sum] = "c6abd44862322679bd4e907bebc3e0d0"
+SRC_URI[sha256sum] = "4207162eff54223822c185da06c1ba8a34137a9602f3da5a528eedf3f78d0f2c"
+
+inherit pypi setuptools3
+
+S = "${WORKDIR}/pydbus-${PV}"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pygobject \
+                  ${PYTHON_PN}-io \
+                  ${PYTHON_PN}-logging"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.19.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.19.bb
new file mode 100644
index 0000000..ea3c018
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.19.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Python expectaton library"
+DESCRIPTION = "Minimal but very flexible implementation of the expect pattern"
+SECTION = "devel/python"
+HOMEPAGE = " https://bitbucket.org/dwt/pyexpect"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://README.md;md5=500b884e9dcd5f677a53cbbee8ace939"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "dc744289858001925c75d21e26f1260f"
+SRC_URI[sha256sum] = "bff4654b113dac6c2231e486e11dcb23281ddc0742a5404467303fe7638829ef"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.1.0.bb
new file mode 100644
index 0000000..c6e95eb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.1.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A Python interface for the Firmata protocol"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=84ddcef430b7c44caa22b2ff4b37a3df"
+PYPI_PACKAGE = "pyFirmata"
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-pyserial \
+"
+
+SRC_URI[md5sum] = "159673cfb56c72ceafc30fe91eedd847"
+SRC_URI[sha256sum] = "cc180d1b30c85a2bbca62c15fef1b871db048cdcfa80959968356d97bd3ff08e"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyflakes_2.1.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyflakes_2.1.1.bb
new file mode 100644
index 0000000..c138822
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyflakes_2.1.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "passive checker of Python programs"
+HOMEPAGE = "https://github.com/dreamhost/cliff"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.rst;md5=5127315117a8561a1504343d59620647"
+
+SRC_URI[md5sum] = "a0f71a15724e553c46e03ba5ed56703c"
+SRC_URI[sha256sum] = "d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-prettytable \
+    ${PYTHON_PN}-cmd2 \
+    ${PYTHON_PN}-pyparsing"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_1.9.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_1.9.0.bb
new file mode 100644
index 0000000..ee96a07
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_1.9.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Hamcrest framework for matcher objects"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=f6df1318c6071dd1707f5e3b6c11f24f"
+
+PYPI_PACKAGE = "PyHamcrest"
+
+SRC_URI[md5sum] = "8b833a3fa30197455df79424f30c8c3f"
+SRC_URI[sha256sum] = "8ffaa0a53da57e89de14ced7185ac746227a8894dbd5a3c718bf05ddbd1d56cd"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-six"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.11.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.11.bb
new file mode 100644
index 0000000..3022d08
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.11.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Pyiface is a package that exposes the network interfaces of the operating system in a easy to use and transparent way"
+SECTION = "devel/python"
+HOMEPAGE = "https://pypi.python.org/pypi/pyiface/"
+LICENSE = "GPLv3+"
+
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4fe869ee987a340198fb0d54c55c47f1"
+
+SRC_URI[md5sum] = "b066aa984656742738127c9c75436ab4"
+SRC_URI[sha256sum] = "e231e5735d329c5b2d4fc8854f069fdaa5436d3ef91ed64ee49e41e3f5e8a3f5"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb
new file mode 100644
index 0000000..049c3c3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Python pyinotify: Linux filesystem events monitoring"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ab173cade7965b411528464589a08382"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-misc \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-smtpd \
+    ${PYTHON_PN}-threading \
+"
+
+SRC_URI[md5sum] = "8e580fa1ff3971f94a6f81672b76c406"
+SRC_URI[sha256sum] = "9c998a5d7606ca835065cdabc013ae6c66eb9ea76a00a1e3bc6e0cfe2b4f71f4"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_19.0.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_19.0.0.bb
new file mode 100644
index 0000000..ee2f307
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_19.0.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Pure-Python Java Keystore (JKS) library"
+DESCRIPTION = "PyJKS enables Python projects to load and manipulate\
+ Java KeyStore (JKS) data without a JVM dependency. PyJKS supports JKS,\
+ JCEKS, BKS and UBER (BouncyCastle) keystores."
+HOMEPAGE = "http://github.com/kurtbrose/pyjks"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9694d6cc724caf7f7386be88a4a81958"
+
+SRC_URI[md5sum] = "b6e8f3b91be355d15e3ba99de2cccf9b"
+SRC_URI[sha256sum] = "9ce5b40289bcdffcd6a8e7118b333ba8ba2ec4c9ebc5e324885cc8a69767011a"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-javaobj-py3 \
+    ${PYTHON_PN}-pyasn1 \
+    ${PYTHON_PN}-pyasn1-modules \
+    ${PYTHON_PN}-pycryptodome \
+    ${PYTHON_PN}-twofish\
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.7.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.7.1.bb
new file mode 100644
index 0000000..d2f7be4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.7.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "JSON Web Token implementation in Python"
+DESCRIPTION = "A Python implementation of JSON Web Token draft 32.\
+ Original implementation was written by https://github.com/progrium"
+HOMEPAGE = "http://github.com/jpadilla/pyjwt"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=68626705a7b513ca8d5f44a3e200ed0c"
+
+SRC_URI[md5sum] = "a4712f980c008696e13e09504120b2a0"
+SRC_URI[sha256sum] = "8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"
+
+PYPI_PACKAGE = "PyJWT"
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "${PYTHON_PN}-cryptography"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pykwalify/0001-rule.py-fix-missing-comma.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pykwalify/0001-rule.py-fix-missing-comma.patch
new file mode 100644
index 0000000..689355e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pykwalify/0001-rule.py-fix-missing-comma.patch
@@ -0,0 +1,34 @@
+From f96b76efb810d7d559254d0ec58de628e09f525a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Mart=C3=AD=20Bol=C3=ADvar?= <marti.f.bolivar@gmail.com>
+Date: Mon, 13 Jan 2020 08:42:05 -0800
+Subject: [PATCH] rule.py: fix missing comma
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+A line in the defined_keywords list is missing a comma. Add it.
+
+Signed-off-by: Martí Bolívar <marti.f.bolivar@gmail.com>
+
+Upstream-Status: Backport [https://github.com/Grokzen/pykwalify.git]
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ pykwalify/rule.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pykwalify/rule.py b/pykwalify/rule.py
+index 7ac2c9e..f044b69 100644
+--- a/pykwalify/rule.py
++++ b/pykwalify/rule.py
+@@ -340,7 +340,7 @@ class Rule(object):
+             ('matching', 'matching'),
+             ('matching_rule', 'matching_rule'),
+             ('name', 'name'),
+-            ('nullable', 'nullable')
++            ('nullable', 'nullable'),
+             ('parent', 'parent'),
+             ('pattern', 'pattern'),
+             ('pattern_regexp', 'pattern_regexp'),
+-- 
+2.18.2
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pykwalify_1.7.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pykwalify_1.7.0.bb
new file mode 100644
index 0000000..9251ecc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pykwalify_1.7.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "YAML/JSON validation library"
+DESCRIPTION = "pykwalify is a schema validator for YAML and JSON"
+HOMEPAGE = "https://pypi.org/project/pykwalify/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a72ea5159364a2cd7f45c6dcbee37872"
+
+SRC_URI[md5sum] = "58357f1d0f77de976e73dbd3660af75b"
+SRC_URI[sha256sum] = "7e8b39c5a3a10bc176682b3bd9a7422c39ca247482df198b402e8015defcceb2"
+
+SRC_URI += "file://0001-rule.py-fix-missing-comma.patch"
+
+PYPI_PACKAGE = "pykwalify"
+
+inherit setuptools3 pypi
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-dateutil \
+    ${PYTHON_PN}-pyyaml \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb
new file mode 100644
index 0000000..7a873a1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb
@@ -0,0 +1,38 @@
+SUMMARY="Pylint is a Python source code analyzer"
+HOMEPAGE= "http://www.pylint.org/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4325afd396febcb659c36b49533135d4"
+
+SRC_URI[md5sum] = "2eb5f3cb8fe567eaf5420dd415012202"
+SRC_URI[sha256sum] = "c77311859e0c2d7932095f30d2b1bfdc4b6fe111f534450ba727a52eae330ef2"
+
+inherit pypi setuptools3 python3-dir
+
+DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+do_install_append(){
+    rm ${D}${bindir}/pylint
+    cat >> ${D}${bindir}/pylint <<EOF
+#!/usr/bin/env ${PYTHON_PN}
+from pylint import run_pylint
+run_pylint()
+EOF
+    chmod 755 ${D}${bindir}/pylint
+    sed -i -e 's:^#!/usr/bin/python:#!/usr/bin/env\ ${PYTHON_PN}:g' ${D}/${PYTHON_SITEPACKAGES_DIR}/pylint/test/data/ascript
+}
+
+PACKAGES =+ "${PN}-tests"
+FILES_${PN}-tests+= " \
+    ${PYTHON_SITEPACKAGES_DIR}/pylint/test/ \
+    ${PYTHON_SITEPACKAGES_DIR}/pylint/testutils.py \
+"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-astroid \
+                   ${PYTHON_PN}-isort \
+                   ${PYTHON_PN}-numbers \
+                   ${PYTHON_PN}-shell \
+                   ${PYTHON_PN}-json \
+                   ${PYTHON_PN}-pkgutil \
+                   ${PYTHON_PN}-difflib \
+                   ${PYTHON_PN}-netserver \
+                  "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pylyrics_1.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pylyrics_1.1.0.bb
new file mode 100644
index 0000000..207751c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pylyrics_1.1.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Pythonic Implementation of lyrics.wikia.com"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://setup.py;beginline=14;endline=14;md5=95d480cd6f8471abaeae21bd0ed277ba"
+
+SRC_URI[md5sum] = "1f3c997edeba149a8fb2b861cbad89c3"
+SRC_URI[sha256sum] = "c5f36e8ef0ed3b487a9242ce34c19f9684e418a5bbffd5d367dc1d1604b4cd0b"
+
+PYPI_PACKAGE = "PyLyrics"
+PYPI_PACKAGE_EXT = "zip"
+
+inherit pypi setuptools3
\ No newline at end of file
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.122.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.122.bb
new file mode 100644
index 0000000..bf2da00
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.122.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Python API for MISP"
+HOMEPAGE = "https://github.com/MISP/PyMISP"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a3639cf5780f71b125d3e9d1dc127c20"
+
+SRC_URI[md5sum] = "ef41185d4c2753dc2c1a9ab937e3614a"
+SRC_URI[sha256sum] = "ecdc362b4bb5dd500a5f0b9e795b35ed75037de64f8dcf39c24d029e7657ad7f"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-dateutil \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-jsonschema \
+    ${PYTHON_PN}-requests \
+    ${PYTHON_PN}-six \
+"
+
+# Fixes: python3-pymisp requires /bin/bash, but no
+# providers found in RDEPENDS_python3-pymisp? [file-rdep
+RDEPENDS_${PN} += "bash"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.10.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.10.1.bb
new file mode 100644
index 0000000..f69ca53
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.10.1.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Python driver for MongoDB <http://www.mongodb.org>"
+DESCRIPTION = "\
+The PyMongo distribution contains tools for interacting with MongoDB \
+database from Python. The bson package is an implementation of the BSON \
+format for Python. The pymongo package is a native Python driver for \
+MongoDB. The gridfs package is a gridfs implementation on top of pymongo."
+HOMEPAGE = "http://github.com/mongodb/mongo-python-driver"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI[md5sum] = "e31b9c0190c9eaf1f792d0277b2a8ebe"
+SRC_URI[sha256sum] = "993257f6ca3cde55332af1f62af3e04ca89ce63c08b56a387cdd46136c72f2fa"
+
+inherit pypi setuptools3
+
+PACKAGES =+ "${PYTHON_PN}-bson"
+
+FILES_${PYTHON_PN}-bson = "${PYTHON_SITEPACKAGES_DIR}/bson/*"
+
+RDEPENDS_${PYTHON_PN}-bson += " \
+     ${PYTHON_PN}-datetime \
+     ${PYTHON_PN}-json \
+     ${PYTHON_PN}-netclient \
+     ${PYTHON_PN}-numbers \
+     ${PYTHON_PN}-threading \
+"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-bson \
+    ${PYTHON_PN}-pprint \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_0.9.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_0.9.3.bb
new file mode 100644
index 0000000..6a64ccb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_0.9.3.bb
@@ -0,0 +1,17 @@
+SUMMARY = "A pure-Python MySQL client library"
+DESCRIPTION = " \
+  This package contains a pure-Python MySQL client library, based on PEP 249 \
+  Most public APIs are compatible with mysqlclient and MySQLdb. \
+  "
+SECTION = "devel/python"
+HOMEPAGE = "https://pymysql.readthedocs.io"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=528175c84163bb800d23ad835c7fa0fc"
+
+SRC_URI[md5sum] = "e5d9183cc0a775ac29f9e0365cca6556"
+SRC_URI[sha256sum] = "d8c059dcd81dedb85a9f034d5e22dcb4442c0b201908bede99e306d65ea7c8e7"
+
+PYPI_PACKAGE = "PyMySQL"
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-cryptography"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb
new file mode 100644
index 0000000..c80a166
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Linux network configuration library for Python"
+DESCRIPTION = "This library contains Python bindings to ioctl calls"
+SECTION = "devel/python"
+HOMEPAGE = "http://github.com/rlisagor/pynetlinux"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=74e1861736ee959824fe7542323c12e9"
+
+SRC_URI[md5sum] = "3336e5d4a478acca4e35bf3125b4f883"
+SRC_URI[sha256sum] = "4ad08298c9f5ba15a11cddc639ba8778cabdfc402b51066d9e0a325e5a5b391c"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_19.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_19.1.0.bb
new file mode 100644
index 0000000..da783ea
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_19.1.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Simple Python wrapper around the OpenSSL library"
+HOMEPAGE = "https://pyopenssl.org/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS += "openssl ${PYTHON_PN}-cryptography"
+
+SRC_URI[md5sum] = "d9804fedbd1eb0c7d9243397b1fbf972"
+SRC_URI[sha256sum] = "9a24494b2602aaf402be5c9e30a0b82d4a5c67528fe8fb475e3f3bc00dd69507"
+
+PYPI_PACKAGE = "pyOpenSSL"
+inherit pypi setuptools3
+
+PACKAGES =+ "${PN}-tests"
+FILES_${PN}-tests = "${libdir}/${PYTHON_DIR}/site-packages/OpenSSL/test"
+
+RDEPENDS_${PN}_class-target = " \
+    ${PYTHON_PN}-cryptography \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-threading \
+"
+RDEPENDS_${PN}-tests = "${PN}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.4.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.4.6.bb
new file mode 100644
index 0000000..a6ec1cb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.4.6.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Python parsing module"
+HOMEPAGE = "http://pyparsing.wikispaces.com/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=657a566233888513e1f07ba13e2f47f1"
+
+SRC_URI[md5sum] = "29733ea8cbee0291aad121c69c6e51a1"
+SRC_URI[sha256sum] = "4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-debugger \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-stringold \
+    ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.7.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.7.0.bb
new file mode 100644
index 0000000..52d109a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.7.0.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "A cross-platform clipboard module for Python. (only handles plain text for now)"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=a428356ada7737b416ec4b63dc65d581"
+
+SRC_URI[md5sum] = "6bbb8598579cc3ee50554b4c59d0cfae"
+SRC_URI[sha256sum] = "979325468ccf682104d5dcaf753f869868100631301d3e72f47babdea5700d1c"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-ctypes \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperf_1.7.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperf_1.7.1.bb
new file mode 100644
index 0000000..081e904
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperf_1.7.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "A toolkit to write, run and analyze benchmarks"
+DESCRIPTION = " \
+The Python pyperf module is a toolkit to write, run and analyze benchmarks. \
+Features: \
+    * Simple API to run reliable benchmarks \
+    * Automatically calibrate a benchmark for a time budget. \
+    * Spawn multiple worker processes. \
+    * Compute the mean and standard deviation. \
+    * Detect if a benchmark result seems unstable. \
+    * JSON format to store benchmark results. \
+    * Support multiple units: seconds, bytes and integer. \
+"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=78bc2e6e87c8c61272937b879e6dc2f8"
+
+SRC_URI[md5sum] = "d9e894dc843bb7f0abff109931a29895"
+SRC_URI[sha256sum] = "c37690e810116a83a244dfeec47885e2f0475b4c450313904be3bc2cdaf6d50a"
+
+DEPENDS += "${PYTHON_PN}-six-native"
+
+PYPI_PACKAGE = "pyperf"
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-misc"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2/run-ptest
new file mode 100644
index 0000000..ea429ba
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2/run-ptest
@@ -0,0 +1,4 @@
+#!/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.12.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.12.bb
new file mode 100644
index 0000000..440f899
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.12.bb
@@ -0,0 +1,37 @@
+SUMMARY = "A pure Python netlink and Linux network configuration library"
+LICENSE = "GPLv2 & Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.GPL.v2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://LICENSE.Apache.v2;md5=34281e312165f843a2b7d1f114fe65ce"
+
+SRC_URI[md5sum] = "4370e9a5875486a1223705ea9b001eff"
+SRC_URI[sha256sum] = "0157801c5496177856c3296b590065e691b041a3adde6fb8ffad2a8d05013ed3"
+
+inherit setuptools3 pypi ptest
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-distutils \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-multiprocessing \
+    ${PYTHON_PN}-pickle \
+    ${PYTHON_PN}-pkgutil \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-unixadmin \
+"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+	${PYTHON_PN}-fcntl \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.15.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.15.7.bb
new file mode 100644
index 0000000..53251aa
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.15.7.bb
@@ -0,0 +1,16 @@
+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] = "da9486d00ef5b213f40d5cf3c5bca82d"
+SRC_URI[sha256sum] = "cdc7b5e3ed77bed61270a47d35434a30617b9becdf2478af76ad2c6ade307280"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyscaffold_3.2.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyscaffold_3.2.3.bb
new file mode 100644
index 0000000..dbd222f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyscaffold_3.2.3.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Python project template generator with batteries included"
+DESCRIPTION = "PyScaffold package helps to setup a new Python project. \
+After installation, it provides a new command [putup], which could be \
+used to create template Projects."
+
+HOMEPAGE = "https://github.com/pyscaffold/pyscaffold"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "PyScaffold"
+
+SRC_URI[md5sum] = "6769d2a26a9d1f3038944b8fbfe728ff"
+SRC_URI[sha256sum] = "96c3e7f5529df0b5b351e879a141e1e5c9f26211f30d493c23d8c09d9d610a6f"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial/run-ptest
new file mode 100644
index 0000000..e301963
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial/run-ptest
@@ -0,0 +1,4 @@
+#!/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb
new file mode 100644
index 0000000..d65c9a8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb
@@ -0,0 +1,62 @@
+SUMMARY = "Serial Port Support for Python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=d476d94926db6e0008a5b3860d1f5c0d"
+
+SRC_URI[md5sum] = "ed6183b15519a0ae96675e9c3330c69b"
+SRC_URI[sha256sum] = "6e2d401fdee0eab996cf734e67773a0143b932772ca8b42451440cfed942c627"
+
+inherit pypi setuptools3 ptest
+
+do_install_append() {
+    rm -f ${D}${bindir}/miniterm.py
+    rmdir ${D}${bindir}
+}
+
+PACKAGES =+ "${PN}-java ${PN}-osx ${PN}-win32 ${PN}-tools"
+
+FILES_${PN}-java = " \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/*java* \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/__pycache__/*java* \
+"
+
+FILES_${PN}-osx = " \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/tools/*osx* \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/tools/__pycache__/*osx* \
+"
+
+FILES_${PN}-win32 = " \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/*serialcli* \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/__pycache__/*serialcli* \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/*win32* \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/__pycache__/*win32* \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/tools/miniterm* \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/tools/__pycache__/miniterm* \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/tools/*windows* \
+    ${PYTHON_SITEPACKAGES_DIR}/serial/tools/__pycache__/*windows* \
+"
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-fcntl \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-stringold \
+    ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/test
+	cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.7.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.7.1.bb
new file mode 100644
index 0000000..d0db8a0
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.7.1.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "A Python SOCKS client module"
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1d457bcffb9661b45f799d4efee72f16"
+
+SRC_URI[md5sum] = "89b1a6865c61bae67a32417517612ee6"
+SRC_URI[sha256sum] = "3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"
+
+PYPI_PACKAGE = "PySocks"
+inherit pypi setuptools3
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-email \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pystache_0.5.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pystache_0.5.4.bb
new file mode 100644
index 0000000..feb4986
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pystache_0.5.4.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python implementation of Mustache"
+HOMEPAGE = "https://github.com/defunkt/pystache"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=eb4417802c56384aac71b34505528a60"
+
+SRC_URI[md5sum] = "485885e67a0f6411d5252e69b20a35ca"
+SRC_URI[sha256sum] = "f7bbc265fb957b4d6c7c042b336563179444ab313fb93a719759111eabd3b85a"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-netserver \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pystemd_0.7.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pystemd_0.7.0.bb
new file mode 100644
index 0000000..66f026c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pystemd_0.7.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Python bindings for interacting with systemd over DBus"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI[md5sum] = "f493c3e54457e49fe3c160274b863bac"
+SRC_URI[sha256sum] = "f5dc49d02995ab96335d9e94f9fe036673d89b8cc9907e7a0ac83c06665f2430"
+
+DEPENDS = "systemd"
+REQUIRED_DISTRO_FEATURES = "systemd"
+
+inherit pypi setuptools3 features_check
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.10.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.10.0.bb
new file mode 100644
index 0000000..a7e963b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.10.0.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "pytest-asyncio is an Apache2 licensed library, written in Python, for testing asyncio code with pytest"
+HOMEPAGE = "https://github.com/pytest-dev/pytest-asyncio"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.rst;md5=ae62268d207c73b615fbefddaf91a881"
+
+SRC_URI[md5sum] = "247a7ec32f24a185341327c42a0f85bf"
+SRC_URI[sha256sum] = "9fac5100fd716cbecf6ef89233e8590a4ad61d729d1732e0a96b84182df1daaf"
+
+inherit pypi setuptools3
+
+DEPENDS += "${PYTHON_PN}-pytest-native"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2019.1.8.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2019.1.8.bb
new file mode 100644
index 0000000..b3aced4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2019.1.8.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "This plugin does not provide any helpers to pytest, it does, however, provide a helpers namespace in pytest which enables you to register helper functions in your conftest.py to be used within your tests without having to import them."
+HOMEPAGE = "https://github.com/saltstack/pytest-helpers-namespace"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=cc99508c43d9d14fd51c7fac622ffd23"
+
+SRC_URI[md5sum] = "04ec1d8750f9b154e782a47cf8b30736"
+SRC_URI[sha256sum] = "4eff23a19f92410c0166f6dffbfa8901d3e14a80e97d70cd08428b6d597771ce"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-pytest \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-html_1.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-html_1.6.bb
new file mode 100644
index 0000000..8ace29e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-html_1.6.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "pytest plugin for generating html reports from test results"
+HOMEPAGE = "https://github.com/pytest-dev/pytest-html"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://../pytest-html.LICENSE;md5=5d425c8f3157dbf212db2ec53d9e5132"
+
+# Per README.rst the license statement is fetched from
+# https://raw.githubusercontent.com/davehunt/pytest-html/master/LICENSE
+SRC_URI += "https://raw.githubusercontent.com/davehunt/pytest-html/master/LICENSE;name=license;downloadfilename=pytest-html.LICENSE"
+
+PYPI_PACKAGE = "pytest-html"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "ac956864a9b3392203dacd287ae450f0"
+SRC_URI[sha256sum] = "a359de04273239587bd1a15b29b2266daeaf56b7a13f8224bc4fb3ae0ba72c3f"
+SRC_URI[license.md5sum] = "5d425c8f3157dbf212db2ec53d9e5132"
+SRC_URI[license.sha256sum] = "2bfdca60adf803108d4c7f009000bea76ad00e621e163197881b0eaae91b530e"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pytest"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-metadata_1.8.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-metadata_1.8.0.bb
new file mode 100644
index 0000000..807b0ce
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-metadata_1.8.0.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "pytest-metadata is a plugin that allowed for accessing pytest metadata"
+HOMEPAGE = "https://github.com/pytest-dev/pytest-metadata"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5d425c8f3157dbf212db2ec53d9e5132"
+
+PYPI_PACKAGE = "pytest-metadata"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "95674c2390b58e0138cabac5101d1908"
+SRC_URI[sha256sum] = "2071a59285de40d7541fde1eb9f1ddea1c9db165882df82781367471238b66ba"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pytest"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_5.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_5.2.bb
new file mode 100644
index 0000000..d00cd48
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_5.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Invoke py.test as distutils command with dependency resolution"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a33f38bbf47d48c70fe0d40e5f77498e"
+
+SRC_URI[md5sum] = "e5f66b8e8e87f62c59631c35c919d321"
+SRC_URI[sha256sum] = "96c7e73ead7b93e388c5d614770d2bae6526efd997757d3543fe17b557a0942b"
+
+inherit pypi setuptools3
+
+DEPENDS += " \
+    ${PYTHON_PN}-setuptools-scm-native"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-py ${PYTHON_PN}-setuptools ${PYTHON_PN}-debugger ${PYTHON_PN}-json \
+                  ${PYTHON_PN}-io"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-tempdir_2019.10.12.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-tempdir_2019.10.12.bb
new file mode 100644
index 0000000..7a48fd5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-tempdir_2019.10.12.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Adds support for a predictable and repeatable temporary directory."
+HOMEPAGE = "https://github.com/saltstack/pytest-tempdir"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=9872c3a37cc9baf79a464cd168282be5"
+
+SRC_URI[md5sum] = "79b997d418fb85c2529ab50cd4333689"
+SRC_URI[sha256sum] = "e7d91813a9aa991db87dacdef8cfd3f1657632d731d56d06238c5ffb63ab36d8"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-pytest \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-timeout_1.3.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-timeout_1.3.4.bb
new file mode 100644
index 0000000..a359969
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-timeout_1.3.4.bb
@@ -0,0 +1,13 @@
+SUMMARY = "py.test plugin to abort hanging tests"
+HOMEPAGE = "https://github.com/pytest-dev/pytest-timeout/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d8048cd156eda3df2e7f111b0ae9ceff"
+
+PYPI_PACKAGE = "pytest-timeout"
+
+SRC_URI[md5sum] = "1594762ae77ed7c6c2727aa8b4aa8bfb"
+SRC_URI[sha256sum] = "80faa19cd245a42b87a51699d640c00d937c02b749052bfca6bae8bdbe12c48e"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pytest"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch
new file mode 100644
index 0000000..c29fb12
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch
@@ -0,0 +1,36 @@
+From ff784f4803ab33f5e3389e40d038d52d1e211843 Mon Sep 17 00:00:00 2001
+From: Yuan Chao <yuanc.fnst@cn.fujitsu.com>
+Date: Wed, 28 Aug 2019 16:12:27 +0900
+Subject: [PATCH] [PATCH] setup.py: remove the setup_requires for
+ setuptools-scm
+
+The setup_requires argument forces the download of the egg file for setuptools-scm
+during the do_compile phase.  This download is incompatible with the typical fetch
+and mirror structure.  The only usage of scm is the generation of the _version.py
+file and in the release tarball it is already correctly created
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Derek Straka <derek@asterius.io>
+
+Signed-off-by: Yuan Chao <yuanc.fnst@cn.fujitsu.com>
+---
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index adbafb5..75fdd09 100644
+--- a/setup.py
++++ b/setup.py
+@@ -19,7 +19,7 @@ INSTALL_REQUIRES = [
+ def main():
+     setup(
+         use_scm_version={"write_to": "src/_pytest/_version.py"},
+-        setup_requires=["setuptools-scm", "setuptools>=40.0"],
++        setup_requires=["setuptools>=40.0"],
+         package_dir={"": "src"},
+         extras_require={
+             "testing": [
+-- 
+2.17.1
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_5.3.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_5.3.5.bb
new file mode 100644
index 0000000..8dad13a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_5.3.5.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Simple powerful testing with python"
+HOMEPAGE = "http://pytest.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=81eb9f71d006c6b268cf4388e3c98f7b"
+
+SRC_URI[md5sum] = "d5ef453f723be46d93e0795f3be86c88"
+SRC_URI[sha256sum] = "0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d"
+
+SRC_URI_append = " file://0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch "
+
+inherit update-alternatives pypi setuptools3
+
+RDEPENDS_${PN}_class-target += " \
+    ${PYTHON_PN}-attrs \
+    ${PYTHON_PN}-debugger \
+    ${PYTHON_PN}-doctest \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-pluggy \
+    ${PYTHON_PN}-py \
+    ${PYTHON_PN}-setuptools \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-atomicwrites \
+    ${PYTHON_PN}-importlib-metadata \
+    ${PYTHON_PN}-pathlib2 \
+    ${PYTHON_PN}-wcwidth \
+    ${PYTHON_PN}-more-itertools \
+    ${PYTHON_PN}-packaging \
+"
+
+ALTERNATIVE_${PN} += "py.test pytest"
+
+NATIVE_LINK_NAME[pytest] = "${bindir}/pytest"
+ALTERNATIVE_TARGET[pytest] = "${bindir}/pytest"
+
+ALTERNATIVE_LINK_NAME[py.test] = "${bindir}/py.test"
+ALTERNATIVE_TARGET[py.test] = "${bindir}/py.test"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-python-vlc_3.0.7110.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-python-vlc_3.0.7110.bb
new file mode 100644
index 0000000..be63fed
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-python-vlc_3.0.7110.bb
@@ -0,0 +1,9 @@
+SUMMARY = "This module provides ctypes-based bindings for the native libvlc API of the VLC video player."
+HOMEPAGE = "wiki.videolan.org/PythonBinding"
+LICENSE = "LGPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI[md5sum] = "e128abf7115d6513582bd460c0e74485"
+SRC_URI[sha256sum] = "821bca0dbe08fbff97a65e56ff2318ad7d499330876579c39f01f3fb38c7b679"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytoml/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytoml/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytoml/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytoml_0.1.21.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytoml_0.1.21.bb
new file mode 100644
index 0000000..1533a89
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytoml_0.1.21.bb
@@ -0,0 +1,30 @@
+SUMMARY = "A TOML-0.4.0 parser/writer for Python"
+HOMEPAGE = "https://pypi.python.org/pypi/pytoml/"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cfff423699bdaef24331933ac4f56078"
+
+SRC_URI[md5sum] = "e59dd36a559dd2a876e4c149c69e947b"
+SRC_URI[sha256sum] = "8eecf7c8d0adcff3b375b09fe403407aa9b645c499e5ab8cac670ac4a35f61e7"
+
+inherit pypi setuptools3 ptest
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-stringold \
+    "
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/test
+	cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2019.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2019.3.bb
new file mode 100644
index 0000000..c28a014
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2019.3.bb
@@ -0,0 +1,36 @@
+SUMMARY = "World timezone definitions, modern and historical"
+HOMEPAGE = "http://pythonhosted.org/pytz"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4878a915709225bceab739bdc2a18e8d"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI[md5sum] = "c3d84a465fc56a4edd52cca8873ac0df"
+SRC_URI[sha256sum] = "b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-doctest \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-pickle \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/pytz
+	install -d ${D}${PTEST_PATH}/pytz/tests
+	cp -rf ${S}/pytz/tests/* ${D}${PTEST_PATH}/pytz/tests/
+	cp -f ${S}/README.txt ${D}${PTEST_PATH}/
+
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb
new file mode 100644
index 0000000..49a3628
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A libudev binding"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343"
+
+SRC_URI[md5sum] = "cf4d9db7d772622144ca1be6b5d9353b"
+SRC_URI[sha256sum] = "094b7a100150114748aaa3b70663485dd360457a709bfaaafe5a977371033f2b"
+
+inherit pypi setuptools3
+
+do_configure_prepend() {
+    sed -i "/import pyudev/d" ${S}/setup.py
+    sed -i "s/str(pyudev.__version__)/'${PV}'/g" ${S}/setup.py
+}
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-ctypes \
+    ${PYTHON_PN}-misc \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-fcntl \
+    libudev \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb
new file mode 100644
index 0000000..44c24f4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb
@@ -0,0 +1,12 @@
+SUMMARY = "PyUSB provides USB access on the Python language"
+HOMEPAGE = "http://pyusb.sourceforge.net/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51691ed11cc2c7ae93e383f60ed49b0f"
+DEPENDS += "libusb1"
+
+SRC_URI[md5sum] = "862b56452c64948c787ad8ef9498590b"
+SRC_URI[sha256sum] = "4e9b72cc4a4205ca64fbf1f3fff39a335512166c151ad103e55c8223ac147362"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_5.3.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_5.3.1.bb
new file mode 100644
index 0000000..8cf9093
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_5.3.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Python support for YAML"
+DEPENDS += "libyaml ${PYTHON_PN}-cython-native"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7bbd28caa69f81f5cd5f48647236663d"
+
+PYPI_PACKAGE = "PyYAML"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-netclient \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_17.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_17.1.0.bb
new file mode 100644
index 0000000..2369f06
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_17.1.0.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Pyzmq provides Zero message queue access for the Python language"
+HOMEPAGE = "http://zeromq.org/bindings:python"
+LICENSE = "BSD & LGPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING.BSD;md5=11c65680f637c3df7f58bbc8d133e96e \
+                    file://COPYING.LESSER;md5=12c592fa0bcfff3fb0977b066e9cb69e"
+DEPENDS = "zeromq"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-pyzmq:"
+
+SRC_URI += "file://club-rpath-out.patch"
+SRC_URI[md5sum] = "aecdfc328193fbd81f6dc23228319943"
+SRC_URI[sha256sum] = "2199f753a230e26aec5238b0518b036780708a4c887d4944519681a920b9dee4"
+
+inherit pypi pkgconfig setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-multiprocessing"
+
+FILES_${PN}-dbg =+ "${PYTHON_SITEPACKAGES_DIR}/zmq/backend/cython/.debug"
+
+do_compile_prepend() {
+    echo [global] > ${S}/setup.cfg
+    echo zmq_prefix = ${STAGING_DIR_HOST} >> ${S}/setup.cfg
+    echo have_sys_un_h = True >> ${S}/setup.cfg
+    echo skip_check_zmq = True >> ${S}/setup.cfg
+    echo libzmq_extension = False >> ${S}/setup.cfg
+    echo no_libzmq_extension = True >> ${S}/setup.cfg
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-raven_6.10.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-raven_6.10.0.bb
new file mode 100644
index 0000000..b0d19c3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-raven_6.10.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Raven is the legacy Python client for Sentry (getsentry.com)"
+DESCRIPTION = "\
+Raven is the official legacy Python client for Sentry, officially \
+supports Python 2.6–2.7 & 3.3–3.7, and runs on PyPy and Google App Engine."
+HOMEPAGE = "https://github.com/getsentry/raven-python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b9a4414e08f0571d55184531cefc131b"
+
+SRC_URI[md5sum] = "3676f31dadfa61526444dd0245c78a38"
+SRC_URI[sha256sum] = "3fa6de6efa2493a7c827472e984ce9b020797d0da16f1db67197bcc23c8fae54"
+
+PYPI_PACKAGE = "raven"
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rdflib_4.2.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rdflib_4.2.2.bb
new file mode 100644
index 0000000..f7e7f63
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rdflib_4.2.2.bb
@@ -0,0 +1,15 @@
+SUMMARY = "RDFLib is a pure Python package for working with RDF"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=68c1a3bb687bd63b8e5552f3ea249840"
+
+SRC_URI[md5sum] = "534fe35b13c5857d53fa1ac5a41eca67"
+SRC_URI[sha256sum] = "da1df14552555c5c7715d8ce71c08f404c988c58a1ecd38552d0da4fc261280d"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-isodate \
+    ${PYTHON_PN}-pyparsing \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb
new file mode 100644
index 0000000..7a9cc3f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python client for Redis key-value store"
+DESCRIPTION = "The Python interface to the Redis key-value store."
+HOMEPAGE = "http://github.com/andymccurdy/redis-py"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51d9ad56299ab60ba7be65a621004f27"
+
+SRC_URI[md5sum] = "048348d8cfe0b5d0bba2f4d835005c3b"
+SRC_URI[sha256sum] = "a22ca993cea2962dbb588f9f30d0015ac4afcc45bee27d3978c0dbe9e97c6c0f"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-cryptography \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2020.1.8.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2020.1.8.bb
new file mode 100644
index 0000000..6bdc039
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2020.1.8.bb
@@ -0,0 +1,12 @@
+SUMMARY = ""
+HOMEPAGE = "http://pythonhosted.org/regex"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=3d9edb84b293ab5a9ed5bcaf1b769ab6"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "73abc3d7e902e94b4281fd2652f5a94f"
+SRC_URI[sha256sum] = "d0f424328f9822b0323b3b6f2e4b9c90960b24743d220763c7f07071e0778351"
+
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-file_1.4.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-file_1.4.3.bb
new file mode 100644
index 0000000..0407779
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-file_1.4.3.bb
@@ -0,0 +1,14 @@
+SUMMARY = "File transport adapter for Requests"
+HOMEPAGE = "http://github.com/dashea/requests-file"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9cc728d6087e43796227b0a31422de6b"
+
+SRC_URI[md5sum] = "470711c9b7e0de1057f7b72a58b7ab51"
+SRC_URI[sha256sum] = "8f04aa6201bacda0567e7ac7f677f1499b0fc76b22140c54bc06edf1ba92e2fa"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    python3-requests \
+"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb
new file mode 100644
index 0000000..3f99ed6
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb
@@ -0,0 +1,14 @@
+SUMMARY = "FTP Transport Adapter for Requests"
+HOMEPAGE = "http://github.com/Lukasa/requests-ftp"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6683a23c9968b97709441dc884d46df6"
+
+SRC_URI[md5sum] = "1a52ad1219e696b5abd5449d1ccc0294"
+SRC_URI[sha256sum] = "7504ceb5cba8a5c0135ed738596820a78c5f2be92d79b29f96ba99b183d8057a"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    python3-requests \
+"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-futures_0.9.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-futures_0.9.5.bb
new file mode 100644
index 0000000..b94929d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-futures_0.9.5.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Small add-on for the python requests http library. Makes use of python 3.2’s concurrent.futures or the backport for prior versions of python."
+HOMEPAGE = "https://github.com/ross/requests-futures"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e1e50798d0afe0e1f87594c6619a2fa5"
+
+SRC_URI[md5sum] = "e20dc6f063c70888a7f8225e349b6682"
+SRC_URI[sha256sum] = "33aa8a3b7892850701707d7e094b1e1ce7c4f7a36ff2a1dcc2da4e01a1a00f7e"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    python3-requests \
+"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-oauthlib_1.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-oauthlib_1.3.0.bb
new file mode 100644
index 0000000..fd48cd3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-oauthlib_1.3.0.bb
@@ -0,0 +1,9 @@
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=22d117a849df10d047ed9b792838e863"
+
+SRC_URI[md5sum] = "1ebcd55f1b1b9281940b4bc33010e2ba"
+SRC_URI[sha256sum] = "b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-requests"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.23.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.23.0.bb
new file mode 100644
index 0000000..9f3fb7d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.23.0.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "Python HTTP for Humans."
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=19b6be66ed463d93fa88c29f7860bcd7"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-requests:"
+
+SRC_URI[md5sum] = "abfdc28db1065bbd0bc32592ac9d27a6"
+SRC_URI[sha256sum] = "b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-email \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-ndg-httpsclient \
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-pyasn1 \
+    ${PYTHON_PN}-pyopenssl \
+    ${PYTHON_PN}-pysocks \
+    ${PYTHON_PN}-urllib3 \
+    ${PYTHON_PN}-chardet \
+    ${PYTHON_PN}-idna \
+"
+
+CVE_PRODUCT = "requests"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3339-validator_0.1.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3339-validator_0.1.1.bb
new file mode 100644
index 0000000..1f5d91d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3339-validator_0.1.1.bb
@@ -0,0 +1,25 @@
+SUMMARY = "A pure python RFC3339 validator"
+HOMEPAGE = "https://github.com/naimetti/rfc3339-validator"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a21b13b5a996f08f7e0b088aa38ce9c6"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-rfc3339-validator:"
+
+SRC_URI[md5sum] = "9d8899041d83f98180bddd8b62ee7e99"
+SRC_URI[sha256sum] = "20a600d01fbb1f793cbb6f4ec4ebb2104f4c9e80d74d5f78350b63ecc6cccd08"
+
+PYPI_PACKAGE = "rfc3339_validator"
+
+inherit pypi setuptools3
+
+SRC_URI_append = " \
+    file://0001-setup.py-move-pytest-runner-to-test_requirements.patch \
+"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-six \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb
new file mode 100644
index 0000000..ed668fb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3986-validator_0.1.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Pure python rfc3986 validator"
+HOMEPAGE = "https://github.com/naimetti/rfc3986-validator"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a21b13b5a996f08f7e0b088aa38ce9c6"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-rfc3986-validator:"
+
+SRC_URI[md5sum] = "47f7657b790aaf6011a1ab3d86c6be95"
+SRC_URI[sha256sum] = "3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"
+
+PYPI_PACKAGE = "rfc3986_validator"
+
+inherit pypi setuptools3
+
+SRC_URI_append = " \
+    file://0001-setup.py-move-pytest-runner-to-test_requirements.patch \
+"
+
+RDEPENDS_${PN} += "\
+    python3-core \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.8.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.8.bb
new file mode 100644
index 0000000..80e2aa5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.8.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)"
+LICENSE = "GPLv3+"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=9;md5=2b723edf67b2f3088bc5e339b1ceda2d"
+
+SRC_URI[md5sum] = "b6c4028acdc788a9ba697e1c1d6b896c"
+SRC_URI[sha256sum] = "d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary/e31d5fdf2ea00ac6349e64580a20816783064dd4.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary/e31d5fdf2ea00ac6349e64580a20816783064dd4.patch
new file mode 100644
index 0000000..21e97fd
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary/e31d5fdf2ea00ac6349e64580a20816783064dd4.patch
@@ -0,0 +1,45 @@
+From e31d5fdf2ea00ac6349e64580a20816783064dd4 Mon Sep 17 00:00:00 2001
+From: Hideki Takeoka <hideki.takeoka@smartfrog.com>
+Date: Sun, 25 Aug 2019 19:25:00 +0200
+Subject: [PATCH] Update setup.py for python3.7+ support
+
+---
+ setup.py                     | 9 +++++----
+ src/SerialLibrary/version.py | 3 +++
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 4c34705..70bb1af 100644
+--- a/setup.py
++++ b/setup.py
+@@ -1,6 +1,5 @@
+ #!/usr/bin/env python
+ 
+-from imp import load_source
+ from os.path import abspath, dirname, join
+ from sys import platform
+ 
+@@ -18,9 +17,11 @@
+ 
+ 
+ CURDIR = dirname(abspath(__file__))
+-VERSION = load_source(
+-    'version', 'version',
+-    open(join(CURDIR, 'src', 'SerialLibrary', 'version.py'))).VERSION
++
++with open(join(CURDIR, 'src', 'SerialLibrary', 'version.py')) as f:
++    exec(f.read())
++    VERSION = get_version()
++
+ README = open(join(CURDIR, 'README.rst')).read()
+ CLASSIFIERS = '\n'.join(
+     map(' :: '.join, [
+diff --git a/src/SerialLibrary/version.py b/src/SerialLibrary/version.py
+index 6ce65c4..19831bc 100644
+--- a/src/SerialLibrary/version.py
++++ b/src/SerialLibrary/version.py
+@@ -1 +1,4 @@
+ VERSION = (0, 3, 1)
++
++def get_version():
++    return VERSION;
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.3.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.3.1.bb
new file mode 100644
index 0000000..b6de42f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.3.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Robot Framework test library for serial connection"
+HOMEPAGE = "https://github.com/whosaysni/robotframework-seriallibrary"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=7145f7cdd263359b62d342a02f005515"
+
+SRC_URI[md5sum] = "b7c9565d54c30df7cd3f3c0e29adffa3"
+SRC_URI[sha256sum] = "256ad60fc0b7df4be44d82c302f5ed8fad4935cda99e4b45942e3c88179d1e19"
+
+PYPI_PACKAGE = "robotframework-seriallibrary"
+
+inherit pypi setuptools3
+
+SRC_URI += "file://e31d5fdf2ea00ac6349e64580a20816783064dd4.patch"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-pyserial \
+    ${PYTHON_PN}-robotframework \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.4.bb
new file mode 100644
index 0000000..0628f92
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.4.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A Python generic test automation framework"
+DESCRIPTION = "Generic open source test atomation framework for acceptance\
+testing and acceptance test-driven development (ATDD). It has easy-to-use\
+tabular test data syntax and it utilizes the keyword-driven testing approach.\
+Its testing capabilities can be extended by test libraries implemented either\
+with Python or Java, and users can create new higher-level keywords from\
+existing ones using the same syntax that is used for creating test cases."
+HOMEPAGE = "http://robotframework.org"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "ee753415645ff4831ff0d366a0467fe7"
+SRC_URI[sha256sum] = "ab94257cbd848dfca7148e092d233a12853cc7e840ce8231af9cbb5e7f51aa47"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-xml \
+    ${PYTHON_PN}-difflib \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-html \
+    ${PYTHON_PN}-docutils \
+    ${PYTHON_PN}-ctypes \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.16.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.16.5.bb
new file mode 100644
index 0000000..ba09564
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.16.5.bb
@@ -0,0 +1,16 @@
+SUMMARY = "YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order."
+AUTHOR = "Anthon van der Neut"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=caf8bd842440b537c044e131785a4666"
+
+PYPI_PACKAGE = "ruamel.yaml"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "7d5a5b0a7621a1247b081cc8e4978354"
+SRC_URI[sha256sum] = "412a6f5cfdc0525dee6a27c08f5415c7fd832a7afcb7a0ed7319628aed23d408"
+
+do_install_prepend() {
+    export RUAMEL_NO_PIP_INSTALL_CHECK=1
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scapy_0.25.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scapy_0.25.bb
new file mode 100644
index 0000000..f785a2f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scapy_0.25.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Packet crafting/sending/sniffing, PCAP processing tool,\
+based on scapy with python3 compatibility"
+SECTION = "devel/python"
+HOMEPAGE = "https://github.com/phaethon/scapy"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=a4282d4d80227fa599a99e77fdd95e71"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "scapy-python3"
+
+SRC_URI[md5sum] = "c9003d39def73c028cb8c71bcbb42629"
+SRC_URI[sha256sum] = "2ae1b3bd9759844e830a6cc3ba11c3f25b08433a8ee3e7eddc08224905e5ef2b"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch
new file mode 100644
index 0000000..d535e43
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch
@@ -0,0 +1,26 @@
+From d8db473ce9346cd6254c90e13ac45b3bbde494c4 Mon Sep 17 00:00:00 2001
+From: Derek Straka <derek@asterius.io>
+Date: Sun, 11 Mar 2018 19:55:38 -0400
+Subject: [PATCH] py-scrypt: remove the hard coded include paths
+
+Upstream-Status: Pending
+
+Signed-off-by: Derek Straka <derek@asterius.io>
+---
+ setup.py | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index e36adc4..2ebfbf1 100644
+--- a/setup.py
++++ b/setup.py
+@@ -24,7 +24,6 @@ if sys.platform.startswith('linux'):
+                      ('HAVE_SYS_SYSINFO_H', '1'),
+                      ('_FILE_OFFSET_BITS', '64')]
+     libraries = ['crypto', 'rt']
+-    includes = ['/usr/local/include', '/usr/include']
+     CFLAGS.append('-O2')
+ elif sys.platform.startswith('win32'):
+     define_macros = [('inline', '__inline')]
+-- 
+2.7.4
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb
new file mode 100644
index 0000000..7588fc5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Bindings for the scrypt key derivation function library"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=168ff75417f75a83e63c8875292d44dc"
+HOMEPAGE="https://bitbucket.org/mhallin/py-scrypt/overview"
+
+SRC_URI += "file://0001-py-scrypt-remove-the-hard-coded-include-paths.patch"
+
+SRC_URI[md5sum] = "ae8e3263aa31b040c1f9c7f1e1843a56"
+SRC_URI[sha256sum] = "f8239b2d47fa1d40bc27efd231dc7083695d10c1c2ac51a99380360741e0362d"
+
+inherit pypi ptest setuptools3
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb
new file mode 100644
index 0000000..221a8c8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb
@@ -0,0 +1,18 @@
+HOMEPAGE = "https://github.com/bb4242/sdnotify"
+SUMMARY = "A pure Python implementation of systemd's service notification protocol (sd_notify)"
+
+DESCRIPTION = "\
+  sdnotify is a pure Python implementation of the systemd sd_notify protocol. \
+  This protocol can be used to inform systemd about service start-up completion, \
+  watchdog events, and other service status changes. \
+  Thus, this package can be used to write system services in Python that play nicely with systemd. \
+  "
+
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=cc572ccc4b18a4b7d13be5d01bc8213e"
+
+SRC_URI[md5sum] = "749ddca1c70be1697fecc443fb1fdb16"
+SRC_URI[sha256sum] = "73977fc746b36cc41184dd43c3fe81323e7b8b06c2bb0826c4f59a20c56bb9f1"
+
+inherit setuptools3 pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_2.8.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_2.8.1.bb
new file mode 100644
index 0000000..a469b23
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_2.8.1.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Python module for Semantic Versioning"
+HOMEPAGE = "https://github.com/k-bx/python-semver"
+BUGTRACKER = "https://github.com/k-bx/python-semver/issues"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
+
+SRC_URI[md5sum] = "dc579ba9d0bb2137bad5324d4bdb7e40"
+SRC_URI[sha256sum] = "5b09010a66d9a3837211bb7ae5a20d10ba88f8cb49e92cb139a69ef90d5060d8"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_0.14.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_0.14.0.bb
new file mode 100644
index 0000000..894e1f9
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_0.14.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "The new Python SDK for Sentry.io"
+DESCRIPTION = "This is the next line of the Python SDK \
+for Sentry, intended to replace the raven package on PyPI."
+HOMEPAGE = "https://github.com/getsentry/sentry-python"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0c79f8d3c91fc847350efd28bfe0a341"
+
+SRC_URI[md5sum] = "2d5cc43c8a178134b739c77439d1f26b"
+SRC_URI[sha256sum] = "8e2d38dc58dc992280487e553ec3d97a424e4d179f4fad802ef3b08f64ccf4d8"
+
+PYPI_PACKAGE = "sentry-sdk"
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent/run-ptest
new file mode 100644
index 0000000..b63c4de
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.28.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.28.bb
new file mode 100644
index 0000000..af2d4aa
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.28.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Serialization based on ast.literal_eval"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=5cd70632b6cdb96df9ddaf6a4ce619e6"
+
+SRC_URI[md5sum] = "15ef8b67c76a6d19bac9c16731a1e62a"
+SRC_URI[sha256sum] = "f306336ca09aa38e526f3b03cab58eb7e45af09981267233167bcf3bfd6436ab"
+
+inherit pypi ptest setuptools3
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+    ${PYTHON_PN}-pytz \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+"    
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_3.3.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_3.3.3.bb
new file mode 100644
index 0000000..a1fc383
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_3.3.3.bb
@@ -0,0 +1,21 @@
+SUMMARY = "the blessed package to manage your versions by scm tags"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[md5sum] = "50b2199082fe808d032ec1710c9d7415"
+SRC_URI[sha256sum] = "bd25e1fb5e4d603dcf490f1fde40fb4c595b357795674c3e5cb7f6217ab39ea5"
+
+PYPI_PACKAGE = "setuptools_scm"
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-debugger \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-py \
+    ${PYTHON_PN}-setuptools \
+"
+RDEPENDS_${PN}_class-native = "\
+    ${PYTHON_PN}-setuptools-native \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.12.14.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.12.14.bb
new file mode 100644
index 0000000..b785873
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.12.14.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Python subprocess replacement"
+HOMEPAGE = "https://github.com/amoffat/sh"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=5317094292296f03405f59ae5f6544b6"
+
+SRC_URI[md5sum] = "a8351aef25d25f707c17e0a7a6280251"
+SRC_URI[sha256sum] = "b52bf5833ed01c7b5c5fb73a7f71b3d98d48e9b9b8764236237bdc7ecae850fc"
+
+PYPI_PACKAGE = "sh"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-codecs \
+    ${PYTHON_PN}-core \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-resource \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-terminal \
+    ${PYTHON_PN}-tests \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-unixadmin \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sijax_0.3.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sijax_0.3.2.bb
new file mode 100644
index 0000000..9a28fc5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sijax_0.3.2.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "An easy to use AJAX library for Python based on jQuery.ajax"
+HOMEPAGE = "https://github.com/spantaleev/sijax-python"
+LICENSE = "BSD-3-Clause"
+
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=16e213d75641a392478df50cf0841903"
+
+SRC_URI[sha256sum] = "11b062f4a8b2aad95c87e7c09e5daf5a6b0d0f08abf9efe5f91a0075c6be7c0d"
+
+PYPI_PACKAGE = "Sijax"
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-simpleeval/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-simpleeval/run-ptest
new file mode 100644
index 0000000..3385d68
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-simpleeval/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/SKIPED/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-simpleeval_0.9.10.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-simpleeval_0.9.10.bb
new file mode 100644
index 0000000..1cacf9a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-simpleeval_0.9.10.bb
@@ -0,0 +1,23 @@
+SUMMARY = "A simple, safe single expression evaluator library"
+HOMEPAGE = "https://pypi.org/project/simpleeval/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=dc9277482effe59b734b004cbcc1fee7"
+
+SRC_URI[md5sum] = "f175fc12d408487ca26fa3905e0a6691"
+SRC_URI[sha256sum] = "692055488c2864637f6c2edb5fa48175978a2a07318009e7cf03c9790ca17bea"
+
+inherit pypi setuptools3 ptest
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	cp -f ${S}/test_simpleeval.py ${D}${PTEST_PATH}/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.17.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.17.0.bb
new file mode 100644
index 0000000..b76ae52
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.17.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Simple, fast, extensible JSON encoder/decoder for Python"
+HOMEPAGE = "http://cheeseshop.python.org/pypi/simplejson"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c6338d7abd321c0b50a2a547e441c52e"
+
+SRC_URI[md5sum] = "8a5ed75c367b90fedc3d685742e2a1c7"
+SRC_URI[sha256sum] = "2b4b2b738b3b99819a17feaf118265d0753d5536049ea570b3c43b51c4701e81"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-numbers \
+"
+
+PACKAGES =+ "${PN}-tests"
+RDEPENDS_${PN}-tests = "${PN} ${PYTHON_PN}-unittest"
+FILES_${PN}-tests+= " \
+    ${PYTHON_SITEPACKAGES_DIR}/simplejson/tests \
+    ${PYTHON_SITEPACKAGES_DIR}/simplejson/tool.py* \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-slip-dbus_0.6.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-slip-dbus_0.6.5.bb
new file mode 100644
index 0000000..23099f3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-slip-dbus_0.6.5.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Convenience functions for dbus services in Python 2.x"
+HOMEPAGE = "https://github.com/nphilipp/python-slip"
+DESCRIPTION = "\
+The Simple Library for Python 2.x packages contain miscellaneous code for \
+convenience, extension and workaround purposes. \
+\
+This package provides slip.dbus.service.Object, which is a dbus.service.Object \
+derivative that ends itself after a certain time without being used and/or if \
+there are no clients anymore on the message bus, as well as convenience \
+functions and decorators for integrating a dbus service with PolicyKit."
+
+SECTION = "devel/python"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5574c6965ae5f583e55880e397fbb018"
+SRCNAME = "python-slip"
+
+SRC_URI = "https://github.com/nphilipp/${SRCNAME}/releases/download/${SRCNAME}-${PV}/${SRCNAME}-${PV}.tar.bz2"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+SRC_URI[md5sum] = "28ae5f93853466c44ec96706ba2a1eb4"
+SRC_URI[sha256sum] = "c726c086f0dd93a0ac7a0176f383a12af91b6657b78a301e3f5b25d9f8d4d10b"
+
+do_compile_prepend() {
+    sed -e 's/@VERSION@/${PV}/g' ${S}/setup.py.in > ${S}/setup.py
+}
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-six \
+"
+# http://errors.yoctoproject.org/Errors/Details/184713/
+# python-native/python: can't open file 'setup.py': [Errno 2] No such file or directory
+CLEANBROKEN = "1"
+
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus2_0.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus2_0.3.0.bb
new file mode 100644
index 0000000..7a61927
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus2_0.3.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Drop-in replacement for smbus-cffi/smbus-python in pure Python"
+DESCRIPTION = "smbus2 is a drop-in replacement for smbus-cffi/smbus-python in pure Python"
+HOMEPAGE = "https://github.com/kplindegaard/smbus2"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "d5ed5acc889b4770a84cc932853ed20a"
+SRC_URI[sha256sum] = "210e66eebe4d0b1fe836b3ec2751841942e1c4918c0b429b20a0e20a222228b4"
+
+CLEANBROKEN = "1"
+
+PYPI_PACKAGE = "smbus2"
+
+RDEPENDS_${PN} += "\
+        ${PYTHON_PN}-ctypes \
+        ${PYTHON_PN}-fcntl \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.1.bb
new file mode 100644
index 0000000..1be7739
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Set of i2c tools for linux - Python module"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://smbusmodule.c;beginline=1;endline=18;md5=46e424fb045901ab25e0f92c28c80055"
+PR = "r1"
+
+SRC_URI = "${KERNELORG_MIRROR}/software/utils/i2c-tools/i2c-tools-${PV}.tar.gz "
+SRC_URI[md5sum] = "3536237a6b51fb10caacdc3b8a496237"
+SRC_URI[sha256sum] = "ef8f77afc70e7dbfd1171bfeae87a8a7f10074829370ce8d9ccd585a014e0073"
+
+DEPENDS += "i2c-tools"
+
+S = "${WORKDIR}/i2c-tools-${PV}/py-smbus/"
+inherit distutils3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-socketio_4.5.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-socketio_4.5.1.bb
new file mode 100644
index 0000000..54ecbba
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-socketio_4.5.1.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Socket.IO server"
+HOMEPAGE = "https://github.com/miguelgrinberg/python-socketio/"
+SECTION = "devel/python"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=42d0a9e728978f0eeb759c3be91536b8"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "python-socketio"
+
+SRC_URI[md5sum] = "3dbd0a2ebcf34632f67327b665cbb951"
+SRC_URI[sha256sum] = "149b98c33f8c3d09273fb4ebeb83781e4dc9411b56b27d9f058bec1bd1ed74b7"
+
+PACKAGECONFIG ?= "asyncio_client client"
+PACKAGECONFIG[asyncio_client] = ",,,${PYTHON_PN}-aiohttp ${PYTHON_PN}-websockets"
+PACKAGECONFIG[client] = ",,,${PYTHON_PN}-requests ${PYTHON_PN}-websocket-client"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-engineio \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-math \
+    ${PYTHON_PN}-pickle \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-attrs \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-soupsieve_1.9.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-soupsieve_1.9.4.bb
new file mode 100644
index 0000000..df69e00
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-soupsieve_1.9.4.bb
@@ -0,0 +1,12 @@
+SUMMARY = "CSS selector library for python-beautifulsoup4"
+HOMEPAGE = "https://github.com/facelessuser/soupsieve"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=5a6fd3b0c24fc5a041a3d1bbb22c81b5"
+
+SRC_URI[md5sum] = "43d8ea20c58494446aa65ba5cc6320fe"
+SRC_URI[sha256sum] = "605f89ad5fdbfefe30cdc293303665eff2d188865d4dbe4eb510bba1edfbfce3"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb
new file mode 100644
index 0000000..5948dc8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "Media asset management for Python, with glue code for various frameworks"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b810770075a29bf44b96607440e7c801"
+
+SRC_URI[md5sum] = "e8d5dbe36e53d5a35cff227e795e8bbf"
+SRC_URI[sha256sum] = "59fea336d0eed38c1f0bf3181ee1222d0ef45f3a9dd34ebe65e6bfffdd6a65a9"
+
+PYPI_PACKAGE = "speaklater"
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-speedtest-cli_2.1.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-speedtest-cli_2.1.2.bb
new file mode 100644
index 0000000..a901bba
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-speedtest-cli_2.1.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Command line interface for testing internet bandwidth using speedtest.net"
+HOMEPAGE = "https://github.com/sivel/speedtest-cli"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[md5sum] = "543d38f8939e1716641cc7c00169ca03"
+SRC_URI[sha256sum] = "cf1d386222f94c324e3125ba9a0d187e46d4a13dca08c023bdb9a23096be2e54"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "${PYTHON_PN}-misc"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb
new file mode 100644
index 0000000..6567959
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Python bindings for Linux SPI access through spidev"
+DESCRIPTION = "This project contains a python module for interfacing with SPI\
+devices from user space via the spidev linux kernel driver.\
+This is a modified version of the code originally found\
+[here](http://elk.informatik.fh-augsburg.de/da/da-49/trees/pyap7k/lang/py-spi)\
+All code is GPLv2 licensed unless explicitly stated otherwise."
+HOMEPAGE = "http://github.com/doceme/py-spidev"
+SECTION = "devel/python"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=54bdb9022ebb75ab68399cdaab97da60"
+SRCNAME = "spidev"
+
+SRC_URI[md5sum] = "f601676f1bb48b9aa3b3897f95216365"
+SRC_URI[sha256sum] = "09d2b5122f0dd79910713a11f9a0020f71537224bf829916def4fffc0ea59456"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.4.bb
new file mode 100644
index 0000000..334d658
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.4.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Python bindings for Linux SPI access through spidev"
+DESCRIPTION = "This project contains a python module for interfacing with SPI\
+devices from user space via the spidev linux kernel driver.\
+This is a modified version of the code originally found\
+[here](http://elk.informatik.fh-augsburg.de/da/da-49/trees/pyap7k/lang/py-spi)\
+All code is GPLv2 licensed unless explicitly stated otherwise."
+HOMEPAGE = "http://github.com/doceme/py-spidev"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+SRCNAME = "spidev"
+
+SRC_URI[md5sum] = "bbab6352449f1d572cc9eefeafc58bd1"
+SRC_URI[sha256sum] = "4314e52f573d95233c907f307558893313a8a606e197e77bb711526b0e179e80"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.3.17.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.3.17.bb
new file mode 100644
index 0000000..b9c58e5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.3.17.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Python SQL toolkit and Object Relational Mapper that gives \
+application developers the full power and flexibility of SQL"
+HOMEPAGE = "http://www.sqlalchemy.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c19467890539ff718c00a019c9c7a7b2"
+
+SRC_URI[md5sum] = "478214152b9293bf5652815d7312c890"
+SRC_URI[sha256sum] = "156a27548ba4e1fed944ff9fcdc150633e61d350d673ae7baaf6c25c04ac1f71"
+
+PYPI_PACKAGE = "SQLAlchemy"
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-pickle \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-threading \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlparse/0001-sqlparse-change-shebang-to-python3.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlparse/0001-sqlparse-change-shebang-to-python3.patch
new file mode 100644
index 0000000..ad6c50f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlparse/0001-sqlparse-change-shebang-to-python3.patch
@@ -0,0 +1,51 @@
+From 10c9d3341d64d697f678a64ae707f6bda21565bb Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Mon, 9 Mar 2020 13:10:37 +0800
+Subject: [PATCH] sqlparse: change shebang to python3
+
+Upstream-Status: Pending
+
+Don't send upstream since upstream still support python2,
+we can only make this change after python2 is offcially
+dropped.
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ setup.py             | 2 +-
+ sqlparse/__main__.py | 2 +-
+ sqlparse/cli.py      | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 345d0ce..ce3abc3 100644
+--- a/setup.py
++++ b/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # -*- coding: utf-8 -*-
+ #
+ # Copyright (C) 2009-2018 the sqlparse authors and contributors
+diff --git a/sqlparse/__main__.py b/sqlparse/__main__.py
+index 867d75d..dd0c074 100644
+--- a/sqlparse/__main__.py
++++ b/sqlparse/__main__.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # -*- coding: utf-8 -*-
+ #
+ # Copyright (C) 2009-2018 the sqlparse authors and contributors
+diff --git a/sqlparse/cli.py b/sqlparse/cli.py
+index 25555a5..8bf050a 100755
+--- a/sqlparse/cli.py
++++ b/sqlparse/cli.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # -*- coding: utf-8 -*-
+ #
+ # Copyright (C) 2009-2018 the sqlparse authors and contributors
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlparse/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlparse/run-ptest
new file mode 100644
index 0000000..3385d68
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlparse/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/SKIPED/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlparse_0.3.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlparse_0.3.1.bb
new file mode 100644
index 0000000..1aef28b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlparse_0.3.1.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "Non-validating SQL parser module"
+HOMEPAGE = "http://pypi.python.org/pypi/sqlparse"
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2b136f573f5386001ea3b7b9016222fc"
+
+SRC_URI += "file://0001-sqlparse-change-shebang-to-python3.patch \
+            file://run-ptest \
+	    "
+
+SRC_URI[md5sum] = "423047887a3590b04dd18f8caf843a2f"
+SRC_URI[sha256sum] = "e162203737712307dfe78860cc56c8da8a852ab2ee33750e33aeadf38d12c548"
+
+export BUILD_SYS
+export HOST_SYS
+
+inherit pypi ptest setuptools3
+
+RDEPENDS_${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+    ${PYTHON_PN}-unixadmin \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_1.31.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_1.31.0.bb
new file mode 100644
index 0000000..b985ca5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_1.31.0.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Manage dynamic plugins for Python applications"
+HOMEPAGE = "https://github.com/dreamhost/stevedore"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[md5sum] = "42fa2bf0251c96b543765c5ce13f37c9"
+SRC_URI[sha256sum] = "e0739f9739a681c7a1fda76a102b65295e96a144ccdb552f2ae03c5f0abe8a14"
+
+DEPENDS += "${PYTHON_PN}-pbr-native"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-pbr ${PYTHON_PN}-six"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb
new file mode 100644
index 0000000..52ae9eb
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Strict, simple, lightweight RFC3339 function.s"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8f0e2cd40e05189ec81232da84bd6e1a"
+
+SRC_URI[md5sum] = "4d9b635b4df885bc37bc1189d66c9abc"
+SRC_URI[sha256sum] = "5cad17bedfc3af57b399db0fed32771f18fc54bbd917e85546088607ac5e1277"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-supervisor/supervisor.service b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-supervisor/supervisor.service
new file mode 100644
index 0000000..e9d3f70
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-supervisor/supervisor.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Supervisor process control system for UNIX
+Documentation=http://supervisord.org
+After=network.target
+
+[Service]
+ExecStart=/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
+ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
+ExecReload=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf $OPTIONS reload
+KillMode=process
+Restart=on-failure
+RestartSec=50s
+
+[Install]
+WantedBy=multi-user.target
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-supervisor/supervisord.conf b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-supervisor/supervisord.conf
new file mode 100644
index 0000000..3fb9b49
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-supervisor/supervisord.conf
@@ -0,0 +1,31 @@
+; supervisor config file
+
+[unix_http_server]
+file=/var/run/supervisor.sock   ; (the path to the socket file)
+chmod=0700                       ; sockef file mode (default 0700)
+
+[supervisord]
+logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log)
+pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
+childlogdir=/var/log/            ; ('AUTO' child log dir, default $TEMP)
+
+; the below section must remain in the config file for RPC
+; (supervisorctl/web interface) to work, additional interfaces may be
+; added by defining them in separate rpcinterface: sections
+[rpcinterface:supervisor]
+supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
+
+[supervisorctl]
+serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket
+
+; The [include] section can just contain the "files" setting.  This
+; setting can list multiple files (separated by whitespace or
+; newlines).  It can also contain wildcards.  The filenames are
+; interpreted as relative to this file.  Included files *cannot*
+; include files themselves.
+
+[include]
+files = /etc/supervisor/conf.d/*.conf
+
+;[inet_http_server]
+;port=127.0.0.1:9001
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-supervisor_4.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-supervisor_4.1.0.bb
new file mode 100644
index 0000000..56ab27e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-supervisor_4.1.0.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Supervisor: A Process Control System"
+DESCRIPTION = "\
+Supervisor is a client/server system that allows its users \
+to monitorand control a number of processes on UNIX-like \
+operating systems."
+HOMEPAGE = "https://github.com/Supervisor/supervisor"
+LICENSE = "BSD-4-Clause"
+LIC_FILES_CHKSUM = "file://LICENSES.txt;md5=5b4e3a2172bba4c47cded5885e7e507e"
+
+SRC_URI[md5sum] = "ecea94eedc70ba5127fdeb0665bcca0d"
+SRC_URI[sha256sum] = "2dc86fe0476e945e61483d614ceb2cf4f93b95282eb243bdf792621994360383"
+
+PYPI_PACKAGE = "supervisor"
+inherit pypi systemd setuptools3
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-meld3 \
+"
+
+SRC_URI += "file://supervisord.conf \
+	    file://supervisor.service \
+	"
+SYSTEMD_SERVICE_${PN} = "supervisor.service"
+
+do_install_append() {
+	install -d ${D}${sysconfdir}/supervisor
+	install -d ${D}${systemd_system_unitdir}
+
+	install -m 0644 ${WORKDIR}/supervisord.conf ${D}${sysconfdir}/supervisor
+	install -m 0644 ${WORKDIR}/supervisor.service ${D}${systemd_system_unitdir}
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sympy_1.5.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sympy_1.5.1.bb
new file mode 100644
index 0000000..c0c382a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-sympy_1.5.1.bb
@@ -0,0 +1,16 @@
+# This recipe is adapted from one in meta-jupyter:
+# https://github.com/Xilinx/meta-jupyter/blob/master/recipes-python/python3-sympy_1.1.bb
+
+SUMMARY = "Computer algebra system (CAS) in Python"
+HOMEPAGE = "https://pypi.org/project/sympy/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=611b41534dbf5aa01d7c827bf667ef66"
+
+SRC_URI[md5sum] = "b11b310c3e1642bf66e51038cb3c0021"
+SRC_URI[sha256sum] = "d77901d748287d15281f5ffe5b0fef62dd38f357c2b827c44ff07f35695f4e7e"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "python3-mpmath"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb
new file mode 100644
index 0000000..78ec431
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb
@@ -0,0 +1,3 @@
+require python-systemd.inc
+RDEPENDS_${PN} += "python3-syslog"
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-term_2.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-term_2.3.bb
new file mode 100644
index 0000000..723f1db
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-term_2.3.bb
@@ -0,0 +1,11 @@
+SUMMARY = "An enhanced version of the tty module"
+SECTION = "devel/python"
+LICENSE = "Python-2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d90e2d280a4836c607520383d1639be1"
+
+SRC_URI[md5sum] = "ab0c1bce381b1109fe4390c56aa06237"
+SRC_URI[sha256sum] = "3dcc8c212e04700784e5c1c5b601916ba0549ae6025b35b64fd62144899e7180"
+
+PYPI_PACKAGE_EXT = "zip"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-termcolor_1.1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-termcolor_1.1.0.bb
new file mode 100644
index 0000000..17df7f98
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-termcolor_1.1.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "ANSII Color formatting for output in terminal"
+HOMEPAGE = "https://pypi.python.org/pypi/termcolor"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=809e8749b63567978acfbd81d9f6a27d"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "043e89644f8909d462fbbfa511c768df"
+SRC_URI[sha256sum] = "1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-test-generator_0.1.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-test-generator_0.1.2.bb
new file mode 100644
index 0000000..14943a4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-test-generator_0.1.2.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Generator is a helper for generating test methods for nose while still using unittest."
+DESCRIPTION = "Python package with modified subclasses of all stdlib XML \
+parsers that prevent any potentially malicious operation."
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=041a2bff595d40ccb4b36356f89dab00"
+
+SRC_URI[md5sum] = "6c69e73ba5b4b3ed62f7bcda071c64f1"
+SRC_URI[sha256sum] = "ad5925c814bfe79497b43df096e3bb52c166d1577f7aff160137301676232f4a"
+
+inherit pypi setuptools3
+
+DEPENDS += "python3-nose-native"
+
+RDEPENDS_${PN} += "python3-six"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tinyrecord_0.1.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tinyrecord_0.1.5.bb
new file mode 100644
index 0000000..65df2e1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tinyrecord_0.1.5.bb
@@ -0,0 +1,15 @@
+SUMMARY = "transaction support for TinyDB"
+DESCRIPTION = "\
+Tinyrecord is a library which implements atomic transaction \
+support for the TinyDB NoSQL database. It uses a record-first \
+then execute architecture which allows us to minimize the time \
+that we are within a thread lock."
+HOMEPAGE = "https://github.com/eugene-eeo/tinyrecord"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README;md5=31c1dc11b4ae83546538de4c16bceabc"
+
+SRC_URI[md5sum] = "e47dcfe299686cd3fa7ffaa7cb2ee8b1"
+SRC_URI[sha256sum] = "bc7e6a8e78600df234d7a85c2f5d584130f2c6ffd7cd310f9d3a1d976d3373c8"
+
+PYPI_PACKAGE = "tinyrecord"
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-toml_0.10.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-toml_0.10.0.bb
new file mode 100644
index 0000000..5a7b04c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-toml_0.10.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Python Library for Tom's Obvious, Minimal Language"
+HOMEPAGE = "https://github.com/uiri/toml"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6d6012eea477117abf51c31262a152f8"
+
+SRC_URI[md5sum] = "63fffbe2d632865ec29cd69bfdf36682"
+SRC_URI[sha256sum] = "229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-misc \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_6.0.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_6.0.3.bb
new file mode 100644
index 0000000..77c9fb5
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_6.0.3.bb
@@ -0,0 +1,7 @@
+inherit pypi setuptools3
+require python-tornado.inc
+
+# Requires _compression which is currently located in misc
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-misc \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.43.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.43.0.bb
new file mode 100644
index 0000000..642246c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.43.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Fast, Extensible Progress Meter"
+HOMEPAGE = "http://tqdm.github.io/"
+SECTION = "devel/python"
+
+LICENSE = "MIT & MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=7ea57584e3f8bbde2ae3e1537551de25"
+
+SRC_URI[md5sum] = "81454c26572e4e47911596ea065eb1b7"
+SRC_URI[sha256sum] = "f35fb121bafa030bd94e74fcfd44f3c2830039a2ddef7fc87ef1c2d205237b24"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twine_1.13.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twine_1.13.0.bb
new file mode 100644
index 0000000..f5cc70f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twine_1.13.0.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Six is a Python 2 and 3 compatibility library"
+HOMEPAGE = "https://github.com/benjaminp/six"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README.rst;md5=3963bdcee7562bedae1effa09e7542b2"
+
+SRC_URI[md5sum] = "6fb4da0c7d81ddfd48f619b8caa1493c"
+SRC_URI[sha256sum] = "d6c29c933ecfc74e9b1d9fa13aa1f87c5d5770e119f5a4ce032092f0ff5b14dc"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_19.10.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_19.10.0.bb
new file mode 100644
index 0000000..c12d1cc
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_19.10.0.bb
@@ -0,0 +1,65 @@
+inherit pypi setuptools3
+require python-twisted.inc
+
+FILES_${PN}-core_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/__pycache__ \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/__pycache__/*pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/__init__*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/notestplugin*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/testplugin*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_ftp*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_inet*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_manhole*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_portforward*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_socks*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_telnet*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_trial*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_core*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_qtstub*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_reactors*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/cred*.pyc \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/dropin*.cache \
+"
+
+FILES_${PN}-names_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_names*.pyc \
+"
+
+FILES_${PN}-news_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_news*.pyc \
+"
+
+FILES_${PN}-protocols_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/__pycache__/*pyc \
+"
+
+FILES_${PN}-conch_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_conch*.pyc \
+"
+
+FILES_${PN}-lore_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_lore*.pyc \
+"
+FILES_${PN}-mail_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_mail*.pyc \
+"
+
+FILES_${PN}-web_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_web*.pyc \
+"
+
+FILES_${PN}-words_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_words*.pyc \
+"
+
+FILES_${PN}-flow_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_flow*.pyc \
+"
+
+FILES_${PN}-pair_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_pair*.pyc \
+"
+
+FILES_${PN}-runner_append = " \
+  ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_runner*.pyc \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twitter_3.8.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twitter_3.8.0.bb
new file mode 100644
index 0000000..78f66a4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twitter_3.8.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Twitter for Python"
+DESCRIPTION = "Python module to support twitter API"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=8f702b489acb6863cec8b261a55931d8"
+
+SRC_URI[md5sum] = "8aeff278b7cefcd384c65929bc921e2c"
+SRC_URI[sha256sum] = "8abd828ba51a85a2b5bb7373715d6d3bb32d18ac624e3a4db02e4ef8ab48316b"
+
+PYPI_PACKAGE = "tweepy"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-pip \
+    ${PYTHON_PN}-pysocks \
+    ${PYTHON_PN}-requests \
+    ${PYTHON_PN}-six \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish/0001-Fix-missing-return-statements-in-module-stubs.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish/0001-Fix-missing-return-statements-in-module-stubs.patch
new file mode 100644
index 0000000..c25b245
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish/0001-Fix-missing-return-statements-in-module-stubs.patch
@@ -0,0 +1,38 @@
+From 5704610f4b3aed5210e9c5b7c05ff8b5b2364c9c Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Mon, 12 Aug 2019 08:18:21 +0000
+Subject: [PATCH] Fix missing return statements in module stubs
+
+* fixes build with -Werror=return-type
+  twofish.c: In function 'init_twofish':
+  twofish.c:45:1: error: control reaches end of non-void function [-Werror=return-type]
+     45 | PyMODINIT_FUNC init_twofish(void) { }
+        | ^~~~~~~~~~~~~~
+  twofish.c: In function 'PyInit__twofish':
+  twofish.c:46:1: error: control reaches end of non-void function [-Werror=return-type]
+     46 | PyMODINIT_FUNC PyInit__twofish(void) { }
+        | ^~~~~~~~~~~~~~
+  cc1: some warnings being treated as errors
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+Upstream-Status: Submitted [https://github.com/keybase/python-twofish/pull/6]
+---
+ twofish.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/twofish.c b/twofish.c
+index e324c34..d4487d8 100644
+--- a/twofish.c
++++ b/twofish.c
+@@ -42,5 +42,5 @@ DL_EXPORT(void) exp_Twofish_decrypt(Twofish_key * xkey, uint8_t c[16], uint8_t p
+ We need a stub init_twofish function so the module will link as a proper module.
+ Do not import _twofish from python; it will not work since _twofish is not a *real* module
+ */
+-PyMODINIT_FUNC init_twofish(void) { }
+-PyMODINIT_FUNC PyInit__twofish(void) { }
++PyMODINIT_FUNC init_twofish(void) { return NULL; }
++PyMODINIT_FUNC PyInit__twofish(void) { return NULL; }
+-- 
+2.17.1
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb
new file mode 100644
index 0000000..94fb710
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Bindings for the Twofish implementation by Niels Ferguson"
+DESCRIPTION = "Bindings for the Twofish implementation by Niels Ferguson\
+ libtwofish-dev."
+HOMEPAGE = "http://github.com/keybase/python-twofish"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=33a63abf6d7567b1689d8ce69f00e43b"
+
+SRC_URI += "file://0001-Fix-missing-return-statements-in-module-stubs.patch"
+
+SRC_URI[md5sum] = "d7d22f16dc4ffa0e3ae2200654033abe"
+SRC_URI[sha256sum] = "b09d8bb50d33b23ff34cafb1f9209f858f752935c6a5c901efb92a41acb830fa"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_2.7.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_2.7.1.bb
new file mode 100644
index 0000000..b62b605
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-typeguard_2.7.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Run-time type checker for Python"
+HOMEPAGE = "https://pypi.org/project/typeguard/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f0e423eea5c91e7aa21bdb70184b3e53"
+
+SRC_URI[md5sum] = "ef743359de59f8fe17e7c5e3af70e2c5"
+SRC_URI[sha256sum] = "2d545c71e9439c21bcd7c28f5f55b3606e6106f7031ab58375656a1aed483ef2"
+
+inherit pypi setuptools3
+
+DEPENDS += "\
+    python3-distutils-extra-native \
+    python3-setuptools-scm-native \
+"
+
+RDEPENDS_${PN} += "python3-typing"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.2.bb
new file mode 100644
index 0000000..51e9eda
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.2.bb
@@ -0,0 +1,13 @@
+HOMEPAGE = "https://github.com/python/typing"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=64fc2b30b67d0a8423c250e0386ed72f"
+
+# The name on PyPi is slightly different.
+PYPI_PACKAGE = "typing_extensions"
+
+SRC_URI[md5sum] = "f2674282966dc088d10170c2347431cc"
+SRC_URI[sha256sum] = "79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_2.0.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_2.0.0.bb
new file mode 100644
index 0000000..3573b29
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_2.0.0.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Library to return tzinfo with the local timezone information"
+HOMEPAGE = "https://pypi.org/project/tzlocal/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=57e0bd61643d81d05683cdce65b11d10"
+
+SRC_URI[md5sum] = "b14262cecca16ec9220ca8dff2ca7c5d"
+SRC_URI[sha256sum] = "949b9dd5ba4be17190a80c0268167d7e6c92c62b30026cf9764caf3e308e5590"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson/run-ptest
new file mode 100644
index 0000000..1b39146
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+python3 tests/tests.py
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb
new file mode 100644
index 0000000..36abb7e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb
@@ -0,0 +1,30 @@
+SUMMARY  = "Ultra fast JSON encoder and decoder for Python"
+DESCRIPTION = "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with bindings for Python 2.5+ and 3."
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=88df8e78b9edfd744953862179f2d14e"
+
+SRC_URI[md5sum] = "42f77b0cce686dfa4da2e68480b1dd24"
+SRC_URI[sha256sum] = "f66073e5506e91d204ab0c614a148d5aa938bdbf104751be66f8ad7a222f5f86"
+
+inherit pypi ptest setuptools3
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-numbers \
+"
+
+RDEPENDS_${PN}-ptest += " \
+    ${PYTHON_PN}-pytz \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb
new file mode 100644
index 0000000..ded66f0
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Unified diff parsing/metadata extraction library"
+HOMEPAGE = "http://github.com/matiasb/python-unidiff"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4c434b08ef42fea235bb019b5e5a97b3"
+
+SRC_URI[md5sum] = "47f669d7273541fec45e4cc0fba8d8e9"
+SRC_URI[sha256sum] = "9c9ab5fb96b6988b4cd5def6b275492442c04a570900d33aa6373105780025bc"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-codecs \
+    ${PYTHON_PN}-io \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-uritemplate_3.0.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-uritemplate_3.0.1.bb
new file mode 100644
index 0000000..952e954
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-uritemplate_3.0.1.bb
@@ -0,0 +1,14 @@
+# This recipe is originally from meta-openstack:
+# https://git.yoctoproject.org/cgit/cgit.cgi/meta-cloud-services/tree/meta-openstack/recipes-devtools/python/python3-uritemplate_3.0.0.bb?h=master
+
+SUMMARY = "Simple python library to deal with URI Templates."
+AUTHOR = "Ian Cordasco"
+LICENSE = "Apache-2.0 | BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0f6d769bdcfacac3c1a1ffa568937fe0"
+
+SRC_URI[md5sum] = "869fb44fbd56713490db7272eb36c8ae"
+SRC_URI[sha256sum] = "5af8ad10cec94f215e3f48112de2022e1d5a37ed427fbd88652fa908f2ab7cae"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3/CVE-2020-7212.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3/CVE-2020-7212.patch
new file mode 100644
index 0000000..df234e4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3/CVE-2020-7212.patch
@@ -0,0 +1,55 @@
+From aff951b7a41eb5b958b32c49eaa00da02adc9c2d Mon Sep 17 00:00:00 2001
+From: Quentin Pradet <quentin.pradet@gmail.com>
+Date: Tue, 21 Jan 2020 22:32:56 +0400
+Subject: [PATCH] Optimize _encode_invalid_chars (#1787)
+
+Co-authored-by: Seth Michael Larson <sethmichaellarson@gmail.com>
+
+Upstream-Status: Backport
+[from git://github.com/urllib3/urllib3.git commit:a2697e7c6b]
+CVE: CVE-2020-7212
+Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
+---
+ src/urllib3/util/url.py | 15 ++++++---------
+ 1 file changed, 6 insertions(+), 9 deletions(-)
+
+diff --git a/src/urllib3/util/url.py b/src/urllib3/util/url.py
+index 9675f74..e353937 100644
+--- a/src/urllib3/util/url.py
++++ b/src/urllib3/util/url.py
+@@ -216,18 +216,15 @@ def _encode_invalid_chars(component, allowed_chars, encoding="utf-8"):
+
+     component = six.ensure_text(component)
+
++    # Normalize existing percent-encoded bytes.
+     # Try to see if the component we're encoding is already percent-encoded
+     # so we can skip all '%' characters but still encode all others.
+-    percent_encodings = PERCENT_RE.findall(component)
+-
+-    # Normalize existing percent-encoded bytes.
+-    for enc in percent_encodings:
+-        if not enc.isupper():
+-            component = component.replace(enc, enc.upper())
++    component, percent_encodings = PERCENT_RE.subn(
++        lambda match: match.group(0).upper(), component
++    )
+
+     uri_bytes = component.encode("utf-8", "surrogatepass")
+-    is_percent_encoded = len(percent_encodings) == uri_bytes.count(b"%")
+-
++    is_percent_encoded = percent_encodings == uri_bytes.count(b"%")
+     encoded_component = bytearray()
+
+     for i in range(0, len(uri_bytes)):
+@@ -237,7 +234,7 @@ def _encode_invalid_chars(component, allowed_chars, encoding="utf-8"):
+         if (is_percent_encoded and byte == b"%") or (
+             byte_ord < 128 and byte.decode() in allowed_chars
+         ):
+-            encoded_component.extend(byte)
++            encoded_component += byte
+             continue
+         encoded_component.extend(b"%" + (hex(byte_ord)[2:].encode().zfill(2).upper()))
+
+--
+2.23.0
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.25.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.25.7.bb
new file mode 100644
index 0000000..8d987a1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.25.7.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Python HTTP library with thread-safe connection pooling, file post support, sanity friendly, and more"
+HOMEPAGE = "https://github.com/shazow/urllib3"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=65715c2eb961313d71b297dd5a04f85e"
+
+SRC_URI[md5sum] = "85e1e3925f8c1095172bff343f3312ed"
+SRC_URI[sha256sum] = "f3c5fd51747d450d4dcf6f923c81f78f811aab8205fda64b0aba34a4e48b0745"
+
+inherit pypi setuptools3
+
+SRC_URI += "file://CVE-2020-7212.patch"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-certifi \
+    ${PYTHON_PN}-cryptography \
+    ${PYTHON_PN}-email \
+    ${PYTHON_PN}-idna \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-pyopenssl \
+    ${PYTHON_PN}-threading \
+"
+
+CVE_PRODUCT = "urllib3"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb
new file mode 100644
index 0000000..149078c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Python vcversioner, automagically update the project's version"
+HOMEPAGE = "https://github.com/habnabit/vcversioner"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=827a7a91a8d20d3c666b665cd96db8e3"
+
+SRC_URI[md5sum] = "aab6ef5e0cf8614a1b1140ed5b7f107d"
+SRC_URI[sha256sum] = "dae60c17a479781f44a4010701833f1829140b1eeccd258762a74974aa06e19b"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-versiontools_1.9.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-versiontools_1.9.1.bb
new file mode 100644
index 0000000..cf0fa30
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-versiontools_1.9.1.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Smart replacement for plain tuple used in __version__"
+SECTION = "devel/python"
+HOMEPAGE = "https://launchpad.net/versiontools"
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://setup.py;beginline=3;endline=20;md5=02193721a38fd8a05a4ddeb7df8e294d"
+
+SRC_URI[md5sum] = "602b7db8eea30dd29a1d451997adf251"
+SRC_URI[sha256sum] = "a969332887a18a9c98b0df0ea4d4ca75972f24ca94f06fb87d591377e83414f6"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb
new file mode 100644
index 0000000..ac3a90e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb
@@ -0,0 +1,8 @@
+SUMMARY = "A tiny pythonic visitor implementation."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[md5sum] = "94a024ed0ec1b02b4497c15267d319ca"
+SRC_URI[sha256sum] = "2c737903b2b6864ebc6167eef7cf3b997126f1aa94bdf590f90f1436d23e480a"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-waitress_1.4.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-waitress_1.4.3.bb
new file mode 100644
index 0000000..8ac3e92
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-waitress_1.4.3.bb
@@ -0,0 +1,12 @@
+SUMMARY = "A WSGI server for Python"
+DESCRIPTION = "Waitress is meant to be a production-quality pure-Python WSGI \
+    server with very acceptable performance."
+HOMEPAGE = "https://github.com/Pylons/waitress"
+SECTION = "devel/python"
+LICENSE = "ZPL-2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=78ccb3640dc841e1baecb3e27a6966b2"
+
+SRC_URI[md5sum] = "4bffad7009d3824ae61ea6c0696e45f6"
+SRC_URI[sha256sum] = "045b3efc3d97c93362173ab1dfc159b52cfa22b46c3334ffc805dbdbf0e4309e"
+
+inherit setuptools3 pypi
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.8.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.8.bb
new file mode 100644
index 0000000..f9f6474
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.8.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Library for building powerful interactive command lines in Python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=11fba47286258744a6bc6e43530c32a1"
+
+SRC_URI[md5sum] = "dc6677d099e6f49c0f6fbc310de261e9"
+SRC_URI[sha256sum] = "f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors/run-ptest
new file mode 100644
index 0000000..3385d68
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors/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/SKIPED/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb
new file mode 100644
index 0000000..65eed9e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Simple Python module for working with HTML/CSS color definitions."
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=197add016087e6884a012b0f185d44ad"
+
+SRC_URI[md5sum] = "40890db38b2a856e526a568864025fe6"
+SRC_URI[sha256sum] = "030562f624467a9901f0b455fef05486a88cfb5daa1e356bd4aacea043850b59"
+
+inherit pypi setuptools3 ptest
+
+RDEPENDS_${PN}_class-target = "\
+    ${PYTHON_PN}-stringold \
+"
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb
new file mode 100644
index 0000000..aa5b8c7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Character encoding aliases for legacy web content"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
+
+SRC_URI[md5sum] = "32f6e261d52e57bf7e1c4d41546d15b8"
+SRC_URI[sha256sum] = "b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-codecs \
+    ${PYTHON_PN}-json \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_0.56.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_0.56.0.bb
new file mode 100644
index 0000000..a3e1bcf
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_0.56.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "websocket client for python"
+DESCRIPTION = "\
+websocket-client module is WebSocket client for python. \
+This provide the low level APIs for WebSocket. All APIs \
+are the synchronous functions."
+HOMEPAGE = "https://github.com/websocket-client/websocket-client"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c4c4a98fbc4836b81c8c64d6ecb01fc1"
+
+SRC_URI[md5sum] = "89484bd5dac71123ae6a09b2f90fe62c"
+SRC_URI[sha256sum] = "1fd5520878b68b84b5748bb30e592b10d0a91529d5383f74f4964e72b297fd3a"
+
+PYPI_PACKAGE = "websocket_client"
+inherit pypi setuptools3
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-six \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_8.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_8.1.bb
new file mode 100644
index 0000000..b09e978
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_8.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "An implementation of the WebSocket Protocol (RFC 6455)"
+HOMEPAGE = "https://github.com/aaugustin/websockets"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ad5c6d36b3d0098b2f33a5ab69a9e750"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "f12d7f31fe8d0b3e65c12f845bcd0ad8"
+SRC_URI[sha256sum] = "5c65d2da8c6bce0fca2528f69f44b2f977e06954c8512a952222cea50dad430f"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-asyncio \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_1.0.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_1.0.0.bb
new file mode 100644
index 0000000..3e4374e
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_1.0.0.bb
@@ -0,0 +1,50 @@
+SUMMARY = "The Swiss Army knife of Python web development"
+DESCRIPTION = "\
+Werkzeug started as simple collection of various utilities for WSGI \
+applications and has become one of the most advanced WSGI utility modules. \
+It includes a powerful debugger, full featured request and response objects, \
+HTTP utilities to handle entity tags, cache control headers, HTTP dates, \
+cookie handling, file uploads, a powerful URL routing system and a bunch \
+of community contributed addon modules."
+HOMEPAGE = "http://werkzeug.pocoo.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=5dc88300786f1c214c1e9827a5229462"
+
+SRC_URI[md5sum] = "305f75c4a88c96dcdc5654bf2d01bc05"
+SRC_URI[sha256sum] = "169ba8a33788476292d04186ab33b01d6add475033dfc07215e6d219cc077096"
+
+PYPI_PACKAGE = "Werkzeug"
+
+inherit pypi setuptools3
+
+CLEANBROKEN = "1"
+
+PACKAGES =+ "${PN}-tests"
+FILES_${PN}-tests+= " \
+    ${PYTHON_SITEPACKAGES_DIR}/werkzeug/test* \
+    ${PYTHON_SITEPACKAGES_DIR}/werkzeug/__pycache__/test* \
+    ${PYTHON_SITEPACKAGES_DIR}/werkzeug/contrib/test* \
+    ${PYTHON_SITEPACKAGES_DIR}/werkzeug/contrib/__pycache__/test* \
+"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-difflib \
+    ${PYTHON_PN}-email \
+    ${PYTHON_PN}-html \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-misc \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-pkgutil \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-unixadmin \
+"
+
+RDEPENDS_${PN}-tests = " \
+    ${PN} \
+    ${PYTHON_PN}-unittest \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_1.0.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_1.0.1.bb
new file mode 100644
index 0000000..58735c1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_1.0.1.bb
@@ -0,0 +1,39 @@
+SUMMARY = "The Swiss Army knife of Python web development"
+DESCRIPTION = "\
+Werkzeug started as simple collection of various utilities for WSGI \
+applications and has become one of the most advanced WSGI utility modules. \
+It includes a powerful debugger, full featured request and response objects, \
+HTTP utilities to handle entity tags, cache control headers, HTTP dates, \
+cookie handling, file uploads, a powerful URL routing system and a bunch \
+of community contributed addon modules."
+HOMEPAGE = "http://werkzeug.pocoo.org/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=5dc88300786f1c214c1e9827a5229462"
+
+PYPI_PACKAGE = "Werkzeug"
+
+SRC_URI[md5sum] = "5d499cfdd30de5d9c946994783772efd"
+SRC_URI[sha256sum] = "6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"
+
+inherit pypi setuptools3
+
+CLEANBROKEN = "1"
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-difflib \
+    ${PYTHON_PN}-email \
+    ${PYTHON_PN}-html \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-json \
+    ${PYTHON_PN}-logging \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-pkgutil \
+    ${PYTHON_PN}-pprint \
+    ${PYTHON_PN}-simplejson \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-unixadmin \
+    ${PYTHON_PN}-misc \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wheel_0.33.6.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wheel_0.33.6.bb
new file mode 100644
index 0000000..025b2ee
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wheel_0.33.6.bb
@@ -0,0 +1,16 @@
+SUMMARY = "The official binary distribution format for Python "
+HOMEPAGE = "https://github.com/pypa/wheel"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=9d66b41bc2a080e7174acc5dffecd752"
+
+SRC_URI = "git://github.com/pypa/wheel.git"
+SRCREV ?= "b227ddd5beaba49294017d061d501f6d433393b0"
+
+
+inherit setuptools3
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh/run-ptest
new file mode 100644
index 0000000..3385d68
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh/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/SKIPED/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb
new file mode 100644
index 0000000..3ae4f91
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Fast, pure-Python full text indexing, search, and spell checking library."
+DESCRIPTION = "\
+Whoosh is a fast, featureful full-text indexing and searching library \
+implemented in pure Python. Programmers can use it to easily add search \
+functionality to their applications and websites. Every part of how \
+Whoosh works can be extended or replaced to meet your needs exactly."
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=05303186defc6141143629961c7c8a60"
+
+SRC_URI[md5sum] = "893433e9c0525ac043df33e6e04caab2"
+SRC_URI[sha256sum] = "e0857375f63e9041e03fedd5b7541f97cf78917ac1b6b06c1fcc9b45375dda69"
+
+PYPI_PACKAGE = "Whoosh"
+PYPI_PACKAGE_EXT = "zip"
+
+inherit ptest pypi setuptools3
+
+RDEPENDS_${PN} += " \
+    ${PYTHON_PN}-email \
+    ${PYTHON_PN}-multiprocessing \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-numbers \
+    ${PYTHON_PN}-pickle \
+    ${PYTHON_PN}-shell \
+    ${PYTHON_PN}-stringold \
+"
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+    ${PYTHON_PN}-fcntl \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.12.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.12.1.bb
new file mode 100644
index 0000000..49fde10
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.12.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A Python module for decorators, wrappers and monkey patching."
+HOMEPAGE = "http://wrapt.readthedocs.org/"
+LICENSE = "BSD-2-Clause"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fdfc019b57affbe1d7a32e3d34e83db4"
+
+SRC_URI[md5sum] = "6d56ed0de4336462a73350341462f45e"
+SRC_URI[sha256sum] = "b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"
+
+inherit pypi setuptools3 
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-stringold \
+    ${PYTHON_PN}-threading \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.2.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.2.1.bb
new file mode 100644
index 0000000..2b7af62
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.2.1.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "A flexible forms validation and rendering library for python web development."
+HOMEPAGE = "https://pypi.python.org/pypi/WTForms"
+SECTION = "devel/python"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=c4660c132770d5d0a5757541f6b79493"
+
+SRC_URI[md5sum] = "41c0008dbe7bd98892c58f7457a46a4a"
+SRC_URI[sha256sum] = "0cdbac3e7f6878086c334aa25dc5a33869a3954e9d1e015130d65a69309b3b61"
+
+PYPI_PACKAGE = "WTForms"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-netserver \
+    ${PYTHON_PN}-numbers \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd/run-ptest
new file mode 100644
index 0000000..3385d68
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd/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/SKIPED/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.2.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.2.0.bb
new file mode 100644
index 0000000..571dba6
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.2.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Library for developers to extract data from Microsoft Excel (tm) spreadsheet files"
+DESCRIPTION = "Extract data from Excel spreadsheets (.xls and .xlsx,\
+ versions 2.0 onwards) on any platform. Pure Python (2.6, 2.7, 3.2+). \
+Strong support for Excel dates. Unicode-aware."
+HOMEPAGE = "http://www.python-excel.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=5f4244d51fcc1e7cc2d43e96891b2f80"
+
+SRC_URI[md5sum] = "e5d5b96924d791b22898b622eb3e918e"
+SRC_URI[sha256sum] = "546eb36cee8db40c3eaa46c351e67ffee6eeb5fa2650b71bc4c758a29a1b29b2"
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+inherit ptest pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-io ${PYTHON_PN}-pprint ${PYTHON_PN}-shell"
+
+RDEPENDS_${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+    install -d ${D}${PTEST_PATH}/examples
+    cp -rf ${S}/examples/* ${D}${PTEST_PATH}/examples/
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xmlrunner_1.7.7.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xmlrunner_1.7.7.bb
new file mode 100644
index 0000000..7e7b523
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xmlrunner_1.7.7.bb
@@ -0,0 +1,9 @@
+SUMMARY = "unittest-based test runner with Ant/JUnit like XML reporting"
+HOMEPAGE = "https://github.com/pycontribs/xmlrunner"
+LICENSE = "LGPL-3.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=fa964f202b6ae067ed5828fe43c77c1a"
+
+SRC_URI[md5sum] = "7b0b152ed2d278516aedbc0cac22dfb3"
+SRC_URI[sha256sum] = "5a6113d049eca7646111ee657266966e5bbfb0b5ceb2e83ee0772e16d7110f39"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict/run-ptest
new file mode 100644
index 0000000..3385d68
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict/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/SKIPED/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict_0.12.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict_0.12.0.bb
new file mode 100644
index 0000000..d078883
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xmltodict_0.12.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Makes working with XML feel like you are working with JSON"
+AUTHOR = "Martin Blech"
+HOMEPAGE = "https://github.com/martinblech/xmltodict"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=01441d50dc74476db58a41ac10cb9fa2"
+
+SRC_URI[md5sum] = "ddb2bd078cef4f7e3021a578034ad941"
+SRC_URI[sha256sum] = "50d8c638ed7ecb88d90561beedbf720c9b4e851a9fa6c47ebd64e99d166d8a21"
+
+PYPI_PACKAGE = "xmltodict"
+
+inherit pypi setuptools3 ptest
+
+SRC_URI += " \
+	file://run-ptest \
+"
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb
new file mode 100644
index 0000000..b45e96d
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Font Awesome icons packaged for setuptools (easy_install) / pip."
+HOMEPAGE = "https://pypi.python.org/pypi/XStatic-Font-Awesome"
+SECTION = "devel/python"
+LICENSE = "Apache-2"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=313d021898694cd2b0ea6508bdfe51a2"
+
+PYPI_PACKAGE = "XStatic-Font-Awesome"
+
+SRC_URI[md5sum] = "141a0e9a7e21e82f922573a00ae0c166"
+SRC_URI[sha256sum] = "e01fb480caaa7c7963dcb3328a4700e631bef6070db0e8b685816d220e685f6c"
+
+DEPENDS += " \
+    ${PYTHON_PN}-xstatic \
+    ${PYTHON_PN}-pip \
+"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.2.bb
new file mode 100644
index 0000000..8de3959
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.2.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "XStatic base package with minimal support code"
+HOMEPAGE = "https://pypi.python.org/pypi/XStatic"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README.txt;md5=1418684272f85f400cebf1b1a255c5cd"
+
+PYPI_PACKAGE = "XStatic"
+
+SRC_URI[md5sum] = "dea172b7b14b0dbcd5ed63075221af4b"
+SRC_URI[sha256sum] = "80b78dfe37bce6dee4343d64c65375a80bcf399b46dd47c0c7d56161568a23a8"
+
+DEPENDS += " \
+    ${PYTHON_PN}-pip \
+"
+
+inherit pypi setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash/run-ptest
new file mode 100644
index 0000000..e398fa8
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest tests/test.py -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/SKIPED/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_1.4.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_1.4.3.bb
new file mode 100644
index 0000000..c114a6c
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_1.4.3.bb
@@ -0,0 +1,22 @@
+SUMMARY = "xxhash is a Python binding for the xxHash library by Yann Collet."
+SECTION = "devel/python"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5a8d76283514a1b7e6a414aba38629b5"
+
+SRC_URI[md5sum] = "ce9cbbcc89620fd47a2468badd08dcf0"
+SRC_URI[sha256sum] = "8b6b1afe7731d7d9cbb0398b4a811ebb5e6be5c174f72c68abf81f919a435de9"
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+inherit pypi setuptools3 ptest
+
+RDEPENDS_${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi/run-ptest
new file mode 100644
index 0000000..3385d68
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi/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/SKIPED/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_1.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_1.0.bb
new file mode 100644
index 0000000..75de4df
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_1.0.bb
@@ -0,0 +1,32 @@
+SUMMARY  = "Yet Another Python Profiler"
+HOMEPAGE = "http://yappi.googlecode.com/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=9a193c13f346884e597acdcac7fe9ac8"
+
+SRC_URI[md5sum] = "a545101aa8a435b0780f06f4723f58c8"
+SRC_URI[sha256sum] = "7f814131515d51db62b1a3468bcb84de30499124752806a5a6e11caf0b4344bf"
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+inherit pypi setuptools3 ptest
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-pickle \
+    ${PYTHON_PN}-threading \
+"
+
+RDEPENDS_${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+    ${PYTHON_PN}-multiprocessing \
+    ${PYTHON_PN}-profile \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+    cp -f ${S}/yappi.py ${D}/${PTEST_PATH}/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yarl/run-ptest b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yarl/run-ptest
new file mode 100644
index 0000000..3385d68
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yarl/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/SKIPED/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/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yarl_1.4.2.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yarl_1.4.2.bb
new file mode 100644
index 0000000..15d9206
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-yarl_1.4.2.bb
@@ -0,0 +1,29 @@
+SUMMARY = "The module provides handy URL class for url parsing and changing"
+HOMEPAGE = "https://github.com/aio-libs/yarl/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b334fc90d45983db318f54fd5bf6c90b"
+
+SRC_URI[md5sum] = "08ba0d6e18f460b44d9e5459f3d217ba"
+SRC_URI[sha256sum] = "58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b"
+
+SRC_URI += " \
+    file://run-ptest \
+"
+
+PYPI_PACKAGE = "yarl"
+
+inherit pypi ptest setuptools3
+
+RDEPENDS_${PN} = "\
+    ${PYTHON_PN}-multidict \
+    ${PYTHON_PN}-idna \
+"
+
+RDEPENDS_${PN}-ptest += " \
+    ${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-zipp_0.6.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-zipp_0.6.0.bb
new file mode 100644
index 0000000..40db3c0
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-zipp_0.6.0.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Backport of pathlib-compatible object wrapper for zip files"
+HOMEPAGE = "https://github.com/jaraco/zipp"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a33f38bbf47d48c70fe0d40e5f77498e"
+
+SRC_URI[md5sum] = "d4451a749d8a7c3c392a9edd1864a937"
+SRC_URI[sha256sum] = "3718b1cbcd963c7d4c5511a8240812904164b7f381b647143a89d3b98f9bcd8e"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "${PYTHON_PN}-compression \
+                   ${PYTHON_PN}-math \
+                   ${PYTHON_PN}-more-itertools"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.7.1.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.7.1.bb
new file mode 100644
index 0000000..6b65924
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.7.1.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Interface definitions for Zope products"
+LICENSE = "ZPL-2.1"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e54fd776274c1b7423ec128974bd9d46"
+
+SRC_URI[md5sum] = "1bc66758275c5eb66d169acba3c8e50e"
+SRC_URI[sha256sum] = "4bb937e998be9d5e345f486693e477ba79e4344674484001a0b646be1d530487"
+
+PYPI_PACKAGE = "zope.interface"
+
+inherit pypi setuptools3
+
+PACKAGES =. "${PN}-test "
+
+RPROVIDES_${PN} += "zope-interfaces"
+
+RDEPENDS_${PN}_class-target += "${PYTHON_PN}-datetime"
+RDEPENDS_${PN}-test += "python3-unittest python3-doctest"
+
+FILES_${PN}-dbg += "${PYTHON_SITEPACKAGES_DIR}/*.egg/*/*/.debug"
+FILES_${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/zope/interface/*.c"
+FILES_${PN}-doc += "${PYTHON_SITEPACKAGES_DIR}/zope/interface/*.txt"
+FILES_${PN}-test += " \
+        ${PYTHON_SITEPACKAGES_DIR}/zope/interface/tests \
+        ${PYTHON_SITEPACKAGES_DIR}/zope/interface/common/tests \
+"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0001-comment-out-selinux.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0001-comment-out-selinux.patch
new file mode 100644
index 0000000..90fa387
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0001-comment-out-selinux.patch
@@ -0,0 +1,70 @@
+From fc8e93530ba017ecfe111e53d3cbdc3a5b3ac286 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 23 Nov 2018 16:58:38 +0800
+Subject: [PATCH 01/11] comment out selinux
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/flags.py | 5 +++--
+ blivet/util.py  | 6 +++++-
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/blivet/flags.py b/blivet/flags.py
+index 4e26d82..94324ff 100644
+--- a/blivet/flags.py
++++ b/blivet/flags.py
+@@ -20,7 +20,7 @@
+ #
+ 
+ import shlex
+-import selinux
++#import selinux
+ 
+ 
+ class Flags(object):
+@@ -47,7 +47,8 @@ class Flags(object):
+         #
+         # enable/disable functionality
+         #
+-        self.selinux = selinux.is_selinux_enabled()
++        #self.selinux = selinux.is_selinux_enabled()
++        self.selinux = False
+         self.multipath = True
+         self.dmraid = True
+         self.ibft = True
+diff --git a/blivet/util.py b/blivet/util.py
+index 9daf151..4eac8b9 100644
+--- a/blivet/util.py
++++ b/blivet/util.py
+@@ -3,7 +3,7 @@ import functools
+ import glob
+ import itertools
+ import os
+-import selinux
++#import selinux
+ import subprocess
+ import re
+ import sys
+@@ -444,6 +444,8 @@ def get_cow_sysfs_path(dev_path, dev_sysfsPath):
+ def match_path_context(path):
+     """ Return the default SELinux context for the given path. """
+     context = None
++    return context
++
+     try:
+         context = selinux.matchpathcon(os.path.normpath(path), 0)[1]
+     except OSError as e:
+@@ -468,6 +470,8 @@ def set_file_context(path, context, root=None):
+ 
+             True if successful, False if not.
+     """
++    return False
++
+     if root is None:
+         root = '/'
+ 
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0002-run_program-support-timeout.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0002-run_program-support-timeout.patch
new file mode 100644
index 0000000..5b38859
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0002-run_program-support-timeout.patch
@@ -0,0 +1,103 @@
+From 713cf821ebe17f9e1771502a85e0905ea04dafae Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 23 Nov 2018 17:03:58 +0800
+Subject: [PATCH 02/11] run_program support timeout
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/util.py | 70 ++++++++++++++++++++++++++++++++++------------------------
+ 1 file changed, 41 insertions(+), 29 deletions(-)
+
+diff --git a/blivet/util.py b/blivet/util.py
+index 4eac8b9..4f05076 100644
+--- a/blivet/util.py
++++ b/blivet/util.py
+@@ -158,6 +158,30 @@ class Path(str):
+     def __hash__(self):
+         return self._path.__hash__()
+ 
++def timeout_command(argv, timeout, *args, **kwargs):
++    """call shell-command and either return its output or kill it
++    if it doesn't normally exit within timeout seconds and return None"""
++    import subprocess, datetime, os, time, signal
++    start = datetime.datetime.now()
++
++    try:
++        proc = subprocess.Popen(argv, *args, **kwargs)
++        while proc.poll() is None:
++            time.sleep(0.1)
++            now = datetime.datetime.now()
++            if (now - start).seconds> timeout:
++                os.kill(proc.pid, signal.SIGKILL)
++                os.waitpid(-1, os.WNOHANG)
++                program_log.debug("%d seconds timeout" % timeout)
++                return (-1, None)
++
++
++    except OSError as e:
++        program_log.error("Error running %s: %s", argv[0], e.strerror)
++        raise
++
++    program_log.debug("Return code: %d", proc.returncode)
++    return (proc.returncode, proc.stdout.read())
+ 
+ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=False, binary_output=False):
+     if env_prune is None:
+@@ -180,35 +204,23 @@ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=Fa
+             stderr_dir = subprocess.STDOUT
+         else:
+             stderr_dir = subprocess.PIPE
+-        try:
+-            proc = subprocess.Popen(argv,  # pylint: disable=subprocess-popen-preexec-fn
+-                                    stdin=stdin,
+-                                    stdout=subprocess.PIPE,
+-                                    stderr=stderr_dir,
+-                                    close_fds=True,
+-                                    preexec_fn=chroot, cwd=root, env=env)
+-
+-            out, err = proc.communicate()
+-            if not binary_output and six.PY3:
+-                out = out.decode("utf-8")
+-            if out:
+-                if not stderr_to_stdout:
+-                    program_log.info("stdout:")
+-                for line in out.splitlines():
+-                    program_log.info("%s", line)
+-
+-            if not stderr_to_stdout and err:
+-                program_log.info("stderr:")
+-                for line in err.splitlines():
+-                    program_log.info("%s", line)
+-
+-        except OSError as e:
+-            program_log.error("Error running %s: %s", argv[0], e.strerror)
+-            raise
+-
+-        program_log.debug("Return code: %d", proc.returncode)
+-
+-    return (proc.returncode, out)
++
++        res, out = timeout_command(argv, 10,
++                                   stdin=stdin,
++                                   stdout=subprocess.PIPE,
++                                   stderr=stderr_dir,
++                                   close_fds=True,
++                                   preexec_fn=chroot, cwd=root, env=env)
++        if not binary_output and six.PY3:
++            out = out.decode("utf-8")
++        if out:
++            if not stderr_to_stdout:
++                program_log.info("stdout:")
++            for line in out.splitlines():
++                program_log.info("%s", line)
++
++    return (res, out)
++
+ 
+ 
+ def run_program(*args, **kwargs):
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0003-support-infinit-timeout.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0003-support-infinit-timeout.patch
new file mode 100644
index 0000000..861b2cd
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0003-support-infinit-timeout.patch
@@ -0,0 +1,66 @@
+From 5d5436dfa3bdde7b4e87ce5a40cbc724199847d6 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 16:18:02 +0800
+Subject: [PATCH 03/11] support infinit timeout
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/util.py | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/blivet/util.py b/blivet/util.py
+index 4f05076..7e89949 100644
+--- a/blivet/util.py
++++ b/blivet/util.py
+@@ -158,6 +158,7 @@ class Path(str):
+     def __hash__(self):
+         return self._path.__hash__()
+ 
++# timeout = -1 means infinite timeout, always wait.
+ def timeout_command(argv, timeout, *args, **kwargs):
+     """call shell-command and either return its output or kill it
+     if it doesn't normally exit within timeout seconds and return None"""
+@@ -169,7 +170,7 @@ def timeout_command(argv, timeout, *args, **kwargs):
+         while proc.poll() is None:
+             time.sleep(0.1)
+             now = datetime.datetime.now()
+-            if (now - start).seconds> timeout:
++            if timeout != -1 and (now - start).seconds> timeout:
+                 os.kill(proc.pid, signal.SIGKILL)
+                 os.waitpid(-1, os.WNOHANG)
+                 program_log.debug("%d seconds timeout" % timeout)
+@@ -183,7 +184,7 @@ def timeout_command(argv, timeout, *args, **kwargs):
+     program_log.debug("Return code: %d", proc.returncode)
+     return (proc.returncode, proc.stdout.read())
+ 
+-def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=False, binary_output=False):
++def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=False, binary_output=False, timeout=10):
+     if env_prune is None:
+         env_prune = []
+ 
+@@ -192,7 +193,10 @@ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=Fa
+             os.chroot(root)
+ 
+     with program_log_lock:  # pylint: disable=not-context-manager
+-        program_log.info("Running... %s", " ".join(argv))
++        if timeout != -1:
++            program_log.info("Running... %s", " ".join(argv))
++        else:
++            program_log.info("Running... %s ...infinite timeout", " ".join(argv))
+ 
+         env = os.environ.copy()
+         env.update({"LC_ALL": "C",
+@@ -205,7 +209,7 @@ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=Fa
+         else:
+             stderr_dir = subprocess.PIPE
+ 
+-        res, out = timeout_command(argv, 10,
++        res, out = timeout_command(argv, timeout,
+                                    stdin=stdin,
+                                    stdout=subprocess.PIPE,
+                                    stderr=stderr_dir,
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-fix-new.roots-object-is-not-iterable.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-fix-new.roots-object-is-not-iterable.patch
new file mode 100644
index 0000000..526a3b1
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-fix-new.roots-object-is-not-iterable.patch
@@ -0,0 +1,28 @@
+From 3bb8d08bdec2f79bb13c0a44b81718d26e5bdabc Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 16:30:20 +0800
+Subject: [PATCH 04/11] fix new.roots object is not iterable
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/blivet.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/blivet.py b/blivet/blivet.py
+index ea08837..91c92b2 100644
+--- a/blivet/blivet.py
++++ b/blivet/blivet.py
+@@ -1206,7 +1206,7 @@ class Blivet(object):
+             p = partition.disk.format.parted_disk.getPartitionByPath(partition.path)
+             partition.parted_partition = p
+ 
+-        for root in new.roots:
++        for root in new.roots or []:
+             root.swaps = [new.devicetree.get_device_by_id(d.id, hidden=True) for d in root.swaps]
+             root.swaps = [s for s in root.swaps if s]
+ 
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0005-fix-incorrect-timeout-while-system-time-changed.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0005-fix-incorrect-timeout-while-system-time-changed.patch
new file mode 100644
index 0000000..9c5d53b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0005-fix-incorrect-timeout-while-system-time-changed.patch
@@ -0,0 +1,48 @@
+From f783b9b00da5df176fcd7927b752f574ca6db319 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 26 Aug 2016 02:02:49 -0400
+Subject: [PATCH 05/11] fix incorrect timeout while system time changed
+
+While system time changed by NTP, invoking timeout_command
+breaks with incorrect timeout.
+--------
+|05:40:55,872 INFO program: Running... mount -t ext2 -o
+  defaults,ro /dev/sda2 /mnt/sysimage
+|01:40:55,086 DEBUG program: 10 seconds timeout
+--------
+
+Use numbert count to replace current time count could workaround
+the issue.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/util.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/blivet/util.py b/blivet/util.py
+index 7e89949..5571e73 100644
+--- a/blivet/util.py
++++ b/blivet/util.py
+@@ -163,14 +163,14 @@ def timeout_command(argv, timeout, *args, **kwargs):
+     """call shell-command and either return its output or kill it
+     if it doesn't normally exit within timeout seconds and return None"""
+     import subprocess, datetime, os, time, signal
+-    start = datetime.datetime.now()
++    count = 0
+ 
+     try:
+         proc = subprocess.Popen(argv, *args, **kwargs)
+         while proc.poll() is None:
+             time.sleep(0.1)
+-            now = datetime.datetime.now()
+-            if timeout != -1 and (now - start).seconds> timeout:
++            count += 1
++            if timeout != -1 and count > timeout*10:
+                 os.kill(proc.pid, signal.SIGKILL)
+                 os.waitpid(-1, os.WNOHANG)
+                 program_log.debug("%d seconds timeout" % timeout)
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0006-tweak-btrfs-packages.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0006-tweak-btrfs-packages.patch
new file mode 100644
index 0000000..2e53a64
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0006-tweak-btrfs-packages.patch
@@ -0,0 +1,45 @@
+From 8932ae933f2b6acf5e98c9956beff69ae430eed2 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 16:33:15 +0800
+Subject: [PATCH 06/11] tweak btrfs packages
+
+In oe-cre/yocto, we name btrfs package with btrfs-tools,
+rather than btrfs-progs.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/devices/btrfs.py | 2 +-
+ blivet/formats/fs.py    | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/blivet/devices/btrfs.py b/blivet/devices/btrfs.py
+index cada940..7e4d4b8 100644
+--- a/blivet/devices/btrfs.py
++++ b/blivet/devices/btrfs.py
+@@ -55,7 +55,7 @@ class BTRFSDevice(StorageDevice):
+ 
+     """ Base class for BTRFS volume and sub-volume devices. """
+     _type = "btrfs"
+-    _packages = ["btrfs-progs"]
++    _packages = ["btrfs-tools"]
+     _external_dependencies = [availability.BLOCKDEV_BTRFS_PLUGIN]
+ 
+     def __init__(self, *args, **kwargs):
+diff --git a/blivet/formats/fs.py b/blivet/formats/fs.py
+index 81e367f..55e5d57 100644
+--- a/blivet/formats/fs.py
++++ b/blivet/formats/fs.py
+@@ -926,7 +926,7 @@ class BTRFS(FS):
+     _formattable = True
+     _linux_native = True
+     _supported = True
+-    _packages = ["btrfs-progs"]
++    _packages = ["btrfs-tools"]
+     _min_size = Size("256 MiB")
+     _max_size = Size("16 EiB")
+     _mkfs_class = fsmkfs.BTRFSMkfs
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0007-invoking-mount-with-infinite-timeout.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0007-invoking-mount-with-infinite-timeout.patch
new file mode 100644
index 0000000..b2606d7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0007-invoking-mount-with-infinite-timeout.patch
@@ -0,0 +1,31 @@
+From f53481dc4a56b8a996628733553e080bb0aafdd7 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 23 Nov 2018 17:07:22 +0800
+Subject: [PATCH 07/11] invoking mount with infinite timeout
+
+This large timeout is needed when running on machines with
+lots of disks, or with slow disks.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/util.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/util.py b/blivet/util.py
+index 5571e73..02c8033 100644
+--- a/blivet/util.py
++++ b/blivet/util.py
+@@ -258,7 +258,7 @@ def mount(device, mountpoint, fstype, options=None):
+         makedirs(mountpoint)
+ 
+     argv = ["mount", "-t", fstype, "-o", options, device, mountpoint]
+-    return run_program(argv)
++    return run_program(argv, timeout=-1)
+ 
+ 
+ def umount(mountpoint):
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0008-use-oe-variable-to-replace-hardcoded-dir.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0008-use-oe-variable-to-replace-hardcoded-dir.patch
new file mode 100644
index 0000000..ade1862
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0008-use-oe-variable-to-replace-hardcoded-dir.patch
@@ -0,0 +1,34 @@
+From 12e2579333258d1a690f8718e91b0f217078e886 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 03:54:12 -0400
+Subject: [PATCH 08/11] use oe variable to replace hardcoded dir
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ setup.py | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index b745a79..b5b4258 100644
+--- a/setup.py
++++ b/setup.py
+@@ -61,10 +61,10 @@ class blivet_sdist(sdist):
+ 
+ 
+ data_files = [
+-    ('/etc/dbus-1/system.d', ['dbus/blivet.conf']),
+-    ('/usr/share/dbus-1/system-services', ['dbus/com.redhat.Blivet1.service']),
+-    ('/usr/libexec', ['dbus/blivetd']),
+-    ('/usr/lib/systemd/system', ['dbus/blivet.service'])
++    (os.environ.get('sysconfdir')+'/dbus-1/system.d', ['dbus/blivet.conf']),
++    (os.environ.get('datadir')+'/dbus-1/system-services', ['dbus/com.redhat.Blivet1.service']),
++    (os.environ.get('libexecdir'), ['dbus/blivetd']),
++    (os.environ.get('systemd_system_unitdir'), ['dbus/blivet.service'])
+ ]
+ 
+ 
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0009-invoking-fsck-with-infinite-timeout.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0009-invoking-fsck-with-infinite-timeout.patch
new file mode 100644
index 0000000..f477877
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0009-invoking-fsck-with-infinite-timeout.patch
@@ -0,0 +1,31 @@
+From 9624b6d0dda40aaecbaf9530be819943575a2ec6 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 1 Jun 2017 16:05:27 +0800
+Subject: [PATCH 09/11] invoking fsck with infinite timeout
+
+This large timeout is needed when running on machines with
+lots of disks, or with slow disks.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/tasks/fsck.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/tasks/fsck.py b/blivet/tasks/fsck.py
+index 5274f13..6e074c4 100644
+--- a/blivet/tasks/fsck.py
++++ b/blivet/tasks/fsck.py
+@@ -77,7 +77,7 @@ class FSCK(task.BasicApplication, fstask.FSTask):
+             raise FSError("\n".join(error_msgs))
+ 
+         try:
+-            rc = util.run_program(self._fsck_command)
++            rc = util.run_program(self._fsck_command, timeout=-1)
+         except OSError as e:
+             raise FSError("filesystem check failed: %s" % e)
+ 
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0010-invoking-mkfs-with-infinite-timeout.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0010-invoking-mkfs-with-infinite-timeout.patch
new file mode 100644
index 0000000..f128490
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0010-invoking-mkfs-with-infinite-timeout.patch
@@ -0,0 +1,31 @@
+From 33844f6773a676bd57240954e402ae9a843663a4 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 16 Jun 2017 15:43:00 +0800
+Subject: [PATCH 10/11] invoking mkfs with infinite timeout
+
+This large timeout is needed when running on machines with
+lots of disks, or with slow disks.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/tasks/fsmkfs.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/tasks/fsmkfs.py b/blivet/tasks/fsmkfs.py
+index ad166aa..7bf5075 100644
+--- a/blivet/tasks/fsmkfs.py
++++ b/blivet/tasks/fsmkfs.py
+@@ -170,7 +170,7 @@ class FSMkfs(task.BasicApplication, FSMkfsTask):
+         options = options or []
+         cmd = self._mkfs_command(options, label, set_uuid)
+         try:
+-            ret = util.run_program(cmd)
++            ret = util.run_program(cmd, timeout=-1)
+         except OSError as e:
+             raise FSError(e)
+ 
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0011-invoking-dd-with-infinite-timeout.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0011-invoking-dd-with-infinite-timeout.patch
new file mode 100644
index 0000000..13c2933
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0011-invoking-dd-with-infinite-timeout.patch
@@ -0,0 +1,31 @@
+From 21ca2b859a49e96a230d55a7866dfc7ed5d1366c Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 6 Mar 2018 17:28:56 +0800
+Subject: [PATCH 11/11] invoking dd with infinite timeout
+
+This large timeout is needed when running on machines with
+lots of disks, or with slow disks.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/devices/partition.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/devices/partition.py b/blivet/devices/partition.py
+index 623e1c9..141d8ad 100644
+--- a/blivet/devices/partition.py
++++ b/blivet/devices/partition.py
+@@ -618,7 +618,7 @@ class PartitionDevice(StorageDevice):
+         cmd = ["dd", "if=/dev/zero", "of=%s" % device, "bs=%d" % bs,
+                "seek=%d" % start, "count=%d" % count]
+         try:
+-            util.run_program(cmd)
++            util.run_program(cmd, timeout=-1)
+         except OSError as e:
+             log.error(str(e))
+         finally:
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_3.1.4.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_3.1.4.bb
new file mode 100644
index 0000000..2b5b253
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_3.1.4.bb
@@ -0,0 +1,46 @@
+DESCRIPTION = "A python module for system storage configuration"
+HOMEPAGE = "http://fedoraproject.org/wiki/blivet"
+LICENSE = "LGPLv2+"
+SECTION = "devel/python"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+SRCREV = "9b5ad2d5b5df159963e1c6c24523e1dfe1f71435"
+SRC_URI = "git://github.com/rhinstaller/blivet;branch=3.1-release \
+           file://0001-comment-out-selinux.patch \
+           file://0002-run_program-support-timeout.patch \
+           file://0003-support-infinit-timeout.patch \
+           file://0004-fix-new.roots-object-is-not-iterable.patch \
+           file://0005-fix-incorrect-timeout-while-system-time-changed.patch \
+           file://0006-tweak-btrfs-packages.patch \
+           file://0007-invoking-mount-with-infinite-timeout.patch \
+           file://0008-use-oe-variable-to-replace-hardcoded-dir.patch \
+           file://0009-invoking-fsck-with-infinite-timeout.patch \
+           file://0010-invoking-mkfs-with-infinite-timeout.patch \
+           file://0011-invoking-dd-with-infinite-timeout.patch \
+"
+
+UPSTREAM_CHECK_GITTAGREGEX = "blivet-(?P<pver>\d+(\.\d+)+)$"
+
+inherit features_check
+REQUIRED_DISTRO_FEATURES = "systemd"
+
+inherit setuptools3 python3native
+
+RDEPENDS_${PN} += "python3-pykickstart python3-pyudev \
+                  parted python3-pyparted multipath-tools \
+                  lsof cryptsetup libblockdev \
+                  libbytesize \
+"
+
+FILES_${PN} += " \
+    ${datadir}/dbus-1/system-services \
+"
+
+inherit systemd
+
+SYSTEMD_AUTO_ENABLE = "disable"
+SYSTEMD_SERVICE_${PN} = "blivet.service"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0001-Fix-return-type-of-BlivetUtils.get_disks-1658893.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0001-Fix-return-type-of-BlivetUtils.get_disks-1658893.patch
new file mode 100644
index 0000000..cf80566
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0001-Fix-return-type-of-BlivetUtils.get_disks-1658893.patch
@@ -0,0 +1,32 @@
+From 4d0f9f961704bc1dd83fdf6808fb6ab91dc6a768 Mon Sep 17 00:00:00 2001
+From: Vojtech Trefny <vtrefny@redhat.com>
+Date: Thu, 13 Dec 2018 13:39:03 +0100
+Subject: [PATCH] Fix return type of BlivetUtils.get_disks (#1658893)
+
+This must be a list, not a generator, because we are iterating
+over it multiple times in some cases.
+
+Upstream-Status: Backport[git://github.com/rhinstaller/blivet-gui]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+---
+ blivetgui/blivet_utils.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivetgui/blivet_utils.py b/blivetgui/blivet_utils.py
+index e2bd802..ddb04fc 100644
+--- a/blivetgui/blivet_utils.py
++++ b/blivetgui/blivet_utils.py
+@@ -204,7 +204,7 @@ class BlivetUtils(object):
+ 
+         """
+ 
+-        return (device for device in self.storage.disks if device.type != "mdarray")
++        return [device for device in self.storage.disks if device.type != "mdarray"]
+ 
+     def get_group_devices(self):
+         """ Return list of LVM2 Volume Group devices
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.1.10.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.1.10.bb
new file mode 100644
index 0000000..92402be
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.1.10.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "GUI tool for storage configuration using blivet library"
+HOMEPAGE = "https://github.com/rhinstaller/blivet-gui"
+LICENSE = "GPLv2+"
+SECTION = "devel/python"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+SRCREV = "67ec0b7a0e065ba24ab87963409bfb21b2aac6dd"
+SRC_URI = "git://github.com/rhinstaller/blivet-gui;branch=master \
+           file://0001-Fix-return-type-of-BlivetUtils.get_disks-1658893.patch \
+"
+
+inherit features_check
+REQUIRED_DISTRO_FEATURES = "x11 systemd"
+
+inherit setuptools3 python3native
+
+RDEPENDS_${PN} = "python3-pygobject python3 \
+                  python3-blivet gtk+3  \
+                  python3-pid libreport \
+"
+
+FILES_${PN} += " \
+    ${datadir}/* \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-cson/python3-cson_git.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-cson/python3-cson_git.bb
new file mode 100644
index 0000000..5c74c7a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-cson/python3-cson_git.bb
@@ -0,0 +1,21 @@
+# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Python library for CSON (schema-compressed JSON)"
+HOMEPAGE = "https://github.com/gt3389b/python-cson/"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7709d2635e63ab96973055a23c2a4cac"
+
+SRCREV = "f3f2898c44bb16b951d3e9f2fbf6d1c4158edda2"
+SRC_URI = "git://github.com/gt3389b/python-cson.git"
+
+S = "${WORKDIR}/git"
+
+RDEPENDS_${PN}_class-native = ""
+DEPENDS_append_class-native = " python-native "
+
+inherit setuptools3
+
+BBCLASSEXTEND = "native"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.48.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.48.bb
new file mode 100644
index 0000000..9ca7a56
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.48.bb
@@ -0,0 +1,17 @@
+SUMMARY = "A python library for handling exceptions"
+DESCRIPTION = "The python-meh package is a python library for handling, saving, and reporting \
+exceptions."
+HOMEPAGE = "http://git.fedorahosted.org/git/?p=python-meh.git"
+LICENSE = "GPLv2+"
+
+inherit setuptools3
+
+S = "${WORKDIR}/git"
+
+SRC_URI = "git://github.com/rhinstaller/python-meh.git;protocol=https;branch=master \
+"
+SRCREV = "760f78a634ecf0e2380abcbd751bc233d29300ef"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+FILES_${PN} += "${datadir}/*"
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pyephem/python3-pyephem_3.7.7.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pyephem/python3-pyephem_3.7.7.0.bb
new file mode 100644
index 0000000..38b3c0a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pyephem/python3-pyephem_3.7.7.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "PyEphem astronomical calculations"
+HOMEPAGE = "http://rhodesmill.org/pyephem/"
+
+LICENSE = "LGPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f288303760f6e5ceaafe3aaa32186ab1"
+
+SRC_URI[md5sum] = "46c035b4a903ff26e0d8ad0f1fe6cc35"
+SRC_URI[sha256sum] = "607148429f85412915e32265779c0cf6d09f73aa97cf1ff0d101ac22c69c4436"
+
+PYPI_PACKAGE = "ephem"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-math \
+    "
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0001-support-authentication-for-kickstart.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0001-support-authentication-for-kickstart.patch
new file mode 100644
index 0000000..e7533f4
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0001-support-authentication-for-kickstart.patch
@@ -0,0 +1,148 @@
+From f05f5fc363e2510f6943532f3e14a6423f6a2cf1 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 31 Jul 2018 17:24:47 +0800
+Subject: [PATCH 1/4] support authentication for kickstart
+
+While download kickstart file from web server,
+we support basic/digest authentication.
+
+Add KickstartAuthError to report authentication failure,
+which the invoker could parse this specific error.
+
+Upstream-Status: inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ pykickstart/errors.py | 17 +++++++++++++++++
+ pykickstart/load.py   | 34 ++++++++++++++++++++++++++++------
+ pykickstart/parser.py |  4 ++--
+ 3 files changed, 47 insertions(+), 8 deletions(-)
+
+diff --git a/pykickstart/errors.py b/pykickstart/errors.py
+index bf08ac5..aada7aa 100644
+--- a/pykickstart/errors.py
++++ b/pykickstart/errors.py
+@@ -32,6 +32,9 @@ This module exports several exception classes:
+     KickstartVersionError - An exception for errors relating to unsupported
+                             syntax versions.
+ 
++    KickstartAuthError - An exception for errors relating to authentication
++                         failed while downloading kickstart from web server
++
+ And some warning classes:
+ 
+     KickstartWarning - A generic warning class.
+@@ -131,3 +134,17 @@ class KickstartDeprecationWarning(KickstartParseWarning, DeprecationWarning):
+        commands and options.
+     """
+     pass
++
++class KickstartAuthError(KickstartError):
++    """An exception for errors relating to authentication failed while
++       downloading kickstart from web server
++    """
++    def __init__(self, msg):
++        """Create a new KickstartAuthError exception instance with the
++           descriptive message val.  val should be the return value of
++           formatErrorMsg.
++        """
++        KickstartError.__init__(self, msg)
++
++    def __str__(self):
++        return self.value
+diff --git a/pykickstart/load.py b/pykickstart/load.py
+index fb935f2..41a2e9e 100644
+--- a/pykickstart/load.py
++++ b/pykickstart/load.py
+@@ -18,10 +18,13 @@
+ # with the express permission of Red Hat, Inc.
+ #
+ import requests
++from requests.auth import HTTPDigestAuth
++from requests.auth import HTTPBasicAuth
++
+ import shutil
+ import six
+ 
+-from pykickstart.errors import KickstartError
++from pykickstart.errors import KickstartError, KickstartAuthError
+ from pykickstart.i18n import _
+ from requests.exceptions import SSLError, RequestException
+ 
+@@ -29,7 +32,7 @@ _is_url = lambda location: '://' in location  # RFC 3986
+ 
+ SSL_VERIFY = True
+ 
+-def load_to_str(location):
++def load_to_str(location, user=None, passwd=None):
+     '''Load a destination URL or file into a string.
+     Type of input is inferred automatically.
+ 
+@@ -40,7 +43,7 @@ def load_to_str(location):
+     Raises: KickstartError on error reading'''
+ 
+     if _is_url(location):
+-        return _load_url(location)
++        return _load_url(location, user=user, passwd=passwd)
+     else:
+         return _load_file(location)
+ 
+@@ -70,11 +73,30 @@ def load_to_file(location, destination):
+         _copy_file(location, destination)
+         return destination
+ 
+-def _load_url(location):
+-    '''Load a location (URL or filename) and return contents as string'''
++def _get_auth(location, user=None, passwd=None):
++
++    auth = None
++    request = requests.get(location, verify=SSL_VERIFY)
++    if request.status_code == requests.codes.unauthorized:
++        if user is None or passwd is None:
++            log.info("Require Authentication")
++            raise KickstartAuthError("Require Authentication.\nAppend 'ksuser=<username> kspasswd=<password>' to boot command")
+ 
++        reasons = request.headers.get("WWW-Authenticate", "").split()
++        if reasons:
++            auth_type = reasons[0]
++        if auth_type == "Basic":
++            auth = HTTPBasicAuth(user, passwd)
++        elif auth_type == "Digest":
++            auth=HTTPDigestAuth(user, passwd)
++
++    return auth
++
++def _load_url(location, user=None, passwd=None):
++    '''Load a location (URL or filename) and return contents as string'''
++    auth = _get_auth(location, user=user, passwd=passwd)
+     try:
+-        request = requests.get(location, verify=SSL_VERIFY)
++        request = requests.get(location, verify=SSL_VERIFY, auth=auth)
+     except SSLError as e:
+         raise KickstartError(_('Error securely accessing URL "%s"') % location + ': {e}'.format(e=str(e)))
+     except RequestException as e:
+diff --git a/pykickstart/parser.py b/pykickstart/parser.py
+index d8880eb..22d14cb 100644
+--- a/pykickstart/parser.py
++++ b/pykickstart/parser.py
+@@ -787,7 +787,7 @@ class KickstartParser(object):
+         i = PutBackIterator(s.splitlines(True) + [""])
+         self._stateMachine(i)
+ 
+-    def readKickstart(self, f, reset=True):
++    def readKickstart(self, f, reset=True, username=None, password=None):
+         """Process a kickstart file, given by the filename f."""
+         if reset:
+             self._reset()
+@@ -808,7 +808,7 @@ class KickstartParser(object):
+         self.currentdir[self._includeDepth] = cd
+ 
+         try:
+-            s = load_to_str(f)
++            s = load_to_str(f, user=username, passwd=password)
+         except KickstartError as e:
+             raise KickstartError(_("Unable to open input kickstart file: %s") % str(e), lineno=0)
+ 
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch
new file mode 100644
index 0000000..4a001f3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch
@@ -0,0 +1,68 @@
+From 62fdead139edb0f29b2f222efcb8f39be15b057e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 30 Jul 2018 15:47:13 +0800
+Subject: [PATCH 2/4] pykickstart/parser.py: add lock for readKickstart and 
+ support https without certification
+
+- Add lock for readKickstart to fix race issue
+
+- Support to download kickstart file through https without certification
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ pykickstart/load.py   |  2 +-
+ pykickstart/parser.py | 18 ++++++++++++++++++
+ 2 files changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/pykickstart/load.py b/pykickstart/load.py
+index c6f013f..7adb751 100644
+--- a/pykickstart/load.py
++++ b/pykickstart/load.py
+@@ -30,7 +30,7 @@ from requests.exceptions import SSLError, RequestException
+ 
+ _is_url = lambda location: '://' in location  # RFC 3986
+ 
+-SSL_VERIFY = True
++SSL_VERIFY = False
+ 
+ def load_to_str(location, user=None, passwd=None):
+     '''Load a destination URL or file into a string.
+diff --git a/pykickstart/parser.py b/pykickstart/parser.py
+index e44099b..e68174d 100644
+--- a/pykickstart/parser.py
++++ b/pykickstart/parser.py
+@@ -55,6 +55,20 @@ from pykickstart.i18n import _
+ STATE_END = "end"
+ STATE_COMMANDS = "commands"
+ 
++import threading
++_private_ks_lock = threading.RLock()
++
++class KsLock(object):
++    def __enter__(self):
++        _private_ks_lock.acquire()
++        return _private_ks_lock
++
++    def __exit__(self, exc_type, exc_val, exc_tb):
++        _private_ks_lock.release()
++
++
++_ks_lock = KsLock()
++
+ def _preprocessStateMachine(lineIter):
+     l = None
+     lineno = 0
+@@ -788,6 +802,10 @@ class KickstartParser(object):
+         self._stateMachine(i)
+ 
+     def readKickstart(self, f, reset=True, username=None, password=None):
++        with _ks_lock:
++            self._readKickstart(f, reset=reset, username=username, password=password)
++
++    def _readKickstart(self, f, reset=True, username=None, password=None):
+         """Process a kickstart file, given by the filename f."""
+         if reset:
+             self._reset()
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0003-comment-out-sections-shutdown-and-environment-in-gen.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0003-comment-out-sections-shutdown-and-environment-in-gen.patch
new file mode 100644
index 0000000..7ab7346
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0003-comment-out-sections-shutdown-and-environment-in-gen.patch
@@ -0,0 +1,48 @@
+From 44226393812399c61de9ca9281efa002ad4f4c01 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 1 Jun 2017 15:15:15 +0800
+Subject: [PATCH 3/4] comment out sections shutdown and environment in
+ generated kickstart file
+
+Both of them is disabled by default.
+
+Upstream-Status: Inappropriate[oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+fixup! add comments of shutdown for user
+---
+ pykickstart/commands/reboot.py | 3 +++
+ pykickstart/parser.py          | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/pykickstart/commands/reboot.py b/pykickstart/commands/reboot.py
+index 75a6d916..edfe83ff 100644
+--- a/pykickstart/commands/reboot.py
++++ b/pykickstart/commands/reboot.py
+@@ -43,6 +43,9 @@ class FC3_Reboot(KickstartCommand):
+         elif self.action == KS_SHUTDOWN:
+             retval += "# Shutdown after installation\nshutdown"
+             retval += self._getArgsAsStr() + "\n"
++        else:
++            retval += "# Shutdown after installation\n#shutdown"
++            retval += self._getArgsAsStr() + "\n"
+ 
+         return retval
+ 
+diff --git a/pykickstart/parser.py b/pykickstart/parser.py
+index bc59131b..b2d09d45 100644
+--- a/pykickstart/parser.py
++++ b/pykickstart/parser.py
+@@ -428,7 +428,7 @@ class Packages(KickstartObject):
+ 
+         if not self.default:
+             if self.environment:
+-                pkgs += "@^%s\n" % self.environment
++                pkgs += "#@^%s\n" % self.environment
+ 
+         grps = self.groupList
+         grps.sort()
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0004-load.py-retry-to-invoke-request-with-timeout.patch b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0004-load.py-retry-to-invoke-request-with-timeout.patch
new file mode 100644
index 0000000..6ed15ab
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0004-load.py-retry-to-invoke-request-with-timeout.patch
@@ -0,0 +1,83 @@
+From ffe06c6dd812b604d6482e4353d5564fad78bc90 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 30 Jul 2018 15:52:21 +0800
+Subject: [PATCH 4/4] load.py: retry to invoke request with timeout
+
+While networkless, use request to fetch kickstart file from
+network, it failed and wait 300s to break, we should retry
+to invoke request with timeout explicitly. So if it the
+network is up, the fetch works.
+
+Upstream-Status: inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ pykickstart/load.py | 31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
+
+diff --git a/pykickstart/load.py b/pykickstart/load.py
+index ad3bad1..a5cbbc5 100644
+--- a/pykickstart/load.py
++++ b/pykickstart/load.py
+@@ -21,6 +21,7 @@ import requests
+ from requests.auth import HTTPDigestAuth
+ from requests.auth import HTTPBasicAuth
+ 
++import time
+ import shutil
+ import six
+ 
+@@ -28,6 +29,9 @@ from pykickstart.errors import KickstartError, KickstartAuthError
+ from pykickstart.i18n import _
+ from requests.exceptions import SSLError, RequestException
+ 
++import logging
++log = logging.getLogger("anaconda.main")
++
+ _is_url = lambda location: '://' in location  # RFC 3986
+ 
+ SSL_VERIFY = False
+@@ -73,6 +77,29 @@ def load_to_file(location, destination):
+         _copy_file(location, destination)
+         return destination
+ 
++def _access_url(location):
++    status = False
++
++    # Retry 45 times, wait 45s~135s
++    i = 0
++    while i < 45:
++
++        try:
++            request = requests.get(location, verify=SSL_VERIFY, timeout=2)
++        except RequestException as e:
++            log.info("Try '%s' %d times, %s" % (location, i, str(e)))
++            status = False
++            i += 1
++            time.sleep(1)
++            continue
++
++        else:
++            status = True
++            return status
++
++    return status
++
++
+ def _get_auth(location, user=None, passwd=None):
+ 
+     auth = None
+@@ -94,6 +121,10 @@ def _get_auth(location, user=None, passwd=None):
+ 
+ def _load_url(location, user=None, passwd=None):
+     '''Load a location (URL or filename) and return contents as string'''
++
++    if not _access_url(location):
++        raise KickstartError(_("Connection %s failed" % location))
++
+     auth = _get_auth(location, user=user, passwd=passwd)
+     try:
+         request = requests.get(location, verify=SSL_VERIFY, auth=auth)
+-- 
+2.7.4
+
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_3.22.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_3.22.bb
new file mode 100644
index 0000000..041abd3
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_3.22.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "A python library for manipulating kickstart files"
+HOMEPAGE = "http://fedoraproject.org/wiki/pykickstart"
+LICENSE = "GPLv2+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+
+DEPENDS = "python3"
+RDEPENDS_${PN} = "python3 \
+                  python3-requests \
+                  python3-six \
+"
+
+S = "${WORKDIR}/git"
+SRC_URI = "git://github.com/rhinstaller/pykickstart.git;protocol=https;branch=master \
+           file://0001-support-authentication-for-kickstart.patch \
+           file://0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch \
+           file://0003-comment-out-sections-shutdown-and-environment-in-gen.patch \
+           file://0004-load.py-retry-to-invoke-request-with-timeout.patch \
+           "
+SRCREV = "674c17b1e231f56a0d8a5ced4a204cdbc4c1edf3"
+
+UPSTREAM_CHECK_GITTAGREGEX = "r(?P<pver>\d+(\.\d+)+(-\d+)*)"
+
+inherit setuptools3
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted.inc
new file mode 100644
index 0000000..9705448
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted.inc
@@ -0,0 +1,22 @@
+DESCRIPTION = "pyparted is a set of Python modules that provide Python programmers \
+an interface to libparted, the GNU parted library for disk partitioning and \
+filesystem manipulation."
+SUMMARY = "Python bindings for libparted"
+HOMEPAGE = "https://github.com/rhinstaller/pyparted"
+LICENSE = "GPL-2.0+"
+LIC_FILES_CHKSUM = "\
+    file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b \
+    file://src/_pedmodule.c;beginline=10;endline=22;md5=9e53304db812b80d0939e11bb69dcab2 \
+"
+DEPENDS += "parted"
+
+# upstream only publishes releases in github archives which are discouraged
+SRCREV = "481510c10866851844b19f3d2ffcdaa37efc0cf8"
+SRC_URI = "git://github.com/rhinstaller/pyparted.git;protocol=https"
+
+S = "${WORKDIR}/git"
+
+RDEPENDS_${PN}_class-target += " \
+    parted (>= 2.3) \
+"
+RDEPENDS_${PN}_class-native = ""
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pyparted/python3-pyparted_3.11.3.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pyparted/python3-pyparted_3.11.3.bb
new file mode 100644
index 0000000..d83901f
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/python-pyparted/python3-pyparted_3.11.3.bb
@@ -0,0 +1,8 @@
+require python-pyparted.inc
+
+inherit distutils3
+
+RDEPENDS_${PN} += "python3-stringold python3-codecs python3-math"
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/pywbem/python-pywbem.inc b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/pywbem/python-pywbem.inc
new file mode 100644
index 0000000..98508b0
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/pywbem/python-pywbem.inc
@@ -0,0 +1,51 @@
+SUMMARY = "Python WBEM Client and Provider Interface"
+DESCRIPTION = "\
+A Python library for making CIM (Common Information Model) operations over \
+HTTP using the WBEM CIM-XML protocol. It is based on the idea that a good \
+WBEM client should be easy to use and not necessarily require a large amount \
+of programming knowledge. It is suitable for a large range of tasks from \
+simply poking around to writing web and GUI applications. \
+\
+WBEM, or Web Based Enterprise Management is a manageability protocol, like \
+SNMP, standardised by the Distributed Management Task Force (DMTF) available \
+at http://www.dmtf.org/standards/wbem. \
+\
+It also provides a Python provider interface, and is the fastest and easiest \
+way to write providers on the planet."
+HOMEPAGE = "http://pywbem.github.io"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=fbc093901857fcd118f065f900982c24"
+
+inherit pypi 
+
+SRCREV = "b3386b3bee8876d15f0745147c0b08937d8ab18e"
+PYPI_SRC_URI = "git://github.com/pywbem/pywbem;protocol=https;branch=stable_0.15"
+
+S = "${WORKDIR}/git"
+
+DEPENDS += " \
+    ${PYTHON_PN}-ply-native \
+    ${PYTHON_PN}-pyyaml-native \
+    ${PYTHON_PN}-six-native \
+"
+
+do_install_append() {
+    mv ${D}${bindir}/wbemcli.py ${D}${bindir}/pywbemcli
+
+    rm -f ${D}${bindir}/*.bat
+}
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-datetime \
+    ${PYTHON_PN}-io \
+    ${PYTHON_PN}-netclient \
+    ${PYTHON_PN}-ply \
+    ${PYTHON_PN}-pyyaml \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-stringold \
+    ${PYTHON_PN}-threading \
+    ${PYTHON_PN}-unixadmin \
+    ${PYTHON_PN}-xml \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_0.15.0.bb b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_0.15.0.bb
new file mode 100644
index 0000000..abfb8d9
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_0.15.0.bb
@@ -0,0 +1,9 @@
+require python-pywbem.inc
+inherit setuptools3 update-alternatives
+
+ALTERNATIVE_${PN} = "mof_compiler pywbemcli wbemcli"
+ALTERNATIVE_TARGET[mof_compiler] = "${bindir}/mof_compiler"
+ALTERNATIVE_TARGET[pywbemcli] = "${bindir}/pywbemcli"
+ALTERNATIVE_TARGET[wbemcli] = "${bindir}/wbemcli"
+
+ALTERNATIVE_PRIORITY = "60"