summaryrefslogtreecommitdiffstats
path: root/external/meta-openembedded/meta-python/recipes-devtools
diff options
context:
space:
mode:
authorToshikazuOhiwa <toshikazu_ohiwa@mail.toyota.co.jp>2020-03-30 09:24:26 +0900
committerToshikazuOhiwa <toshikazu_ohiwa@mail.toyota.co.jp>2020-03-30 09:24:26 +0900
commit5b80bfd7bffd4c20d80b7c70a7130529e9a755dd (patch)
treeb4bb18dcd1487dbf1ea8127e5671b7bb2eded033 /external/meta-openembedded/meta-python/recipes-devtools
parent706ad73eb02caf8532deaf5d38995bd258725cb8 (diff)
agl-basesystem
Diffstat (limited to 'external/meta-openembedded/meta-python/recipes-devtools')
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/pamela_0.3.0.bb15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/pyrtm_0.4.2.bb36
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-alembic.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-alembic_1.0.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson_0.3.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs.inc8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs_1.4.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto.inc23
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto_0.24.0.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-astroid.inc31
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-astroid_1.6.5.bb10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-attr.inc9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-attr_0.3.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-attrs.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-attrs_18.1.0.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-automat.inc24
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-automat/0001-setup.py-remove-the-dependency-on-m2r.patch50
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-automat_0.7.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python.inc41
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python_1.4.0.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-babel.inc25
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-babel_2.6.0.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-abc_0.4.bb18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-functools-lru-cache_1.5.bb19
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-ssl_3.5.0.1.bb18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt.inc17
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt_3.1.4.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4.inc17
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4_4.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-behave.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-behave_1.2.6.bb8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray.inc11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray_0.8.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-blinker.inc7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-blinker_1.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-can.inc18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-can_2.2.1.bb8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cassandra-driver.inc33
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-certifi.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-certifi_2018.8.13.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cffi.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cffi_1.11.5.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-chardet.inc23
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-chardet_3.0.4.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cheetah_2.4.4.bb16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-click.inc23
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-click_6.7.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cmd2_0.9.2.bb23
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-configparser.inc11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-configparser_3.5.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-constantly.inc11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-constantly_15.1.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-crcmod.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-crcmod_1.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors.inc18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors_2.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography.inc58
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography/run-ptest2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography_2.3.bb22
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cython.inc40
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-cython_0.28.5.bb10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-daemon/0001-Workaround-for-issue-2-1.patch31
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-daemon_2.1.2.bb27
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-daemonize_2.4.7.bb16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc23
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil_2.7.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-dbus_1.2.8.bb32
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0001-Add-functionality-to-add-own-objects-to-internal-obj.patch52
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0002-Add-possibility-to-import-templates-from-packages.patch27
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock_0.16.7.bb25
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-decorator.inc19
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-decorator_4.3.0.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-django-south.inc17
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-django-south_1.0.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-django.inc34
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-django_1.11.14.bb8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-djangorestframework.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-djangorestframework_3.9.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython.inc20
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython_1.15.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-docutils_0.14rc2.bb18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-dominate.inc11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-dominate_2.3.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-editor.inc9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-editor_1.0.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-enum34_1.1.6.bb11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-epydoc_3.0.1.bb19
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc21
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-evdev_0.7.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter_0.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-feedparser_5.2.1.bb17
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel_0.11.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bcrypt_0.7.1.bb12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap_3.3.7.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login_0.4.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail_0.9.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate_2.2.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav_0.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-navigation_0.2.0.bb15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo_0.5.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful_0.3.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script_2.0.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sijax.inc8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sijax_0.4.1.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy_2.3.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads_0.2.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc17
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user_0.6.19.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf_0.14.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic/remove-pip-requires.patch7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic_0.0.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-flask_1.0.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-funcsigs_1.0.2.bb18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-functools32_3.2.3-2.bb10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-future.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-future_0.16.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-gdata_2.0.18.bb21
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc33
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/libev-conf.patch26
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent_1.2.2.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet.inc9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet_0.4.14.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools_1.14.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio.inc25
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch42
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio_1.14.1.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib_1.0.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-humanize.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-humanize_0.5.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink.inc17
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink_18.0.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-idna.inc18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-idna_2.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch55
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/allow.to.disable.some.features.patch65
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/fix-freetype-includes.patch30
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/python-imaging-CVE-2016-2533.patch38
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/remove-host-libdir.patch25
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging_1.1.7.bb48
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-incremental.inc20
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-incremental_17.5.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-inflection.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-inflection_0.3.1.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-intervals.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-intervals_1.5.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-ipaddress_1.0.22.bb13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601_0.1.12.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-isort.inc17
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-isort_4.3.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous_0.24.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3_0.2.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2_2.10.bb8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch_1.23.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer_2.0.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc24
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema_2.6.0.bb12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy_1.3.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-linecache2_1.0.0.bb13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-lockfile_0.12.2.bb19
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc43
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-lxml_4.2.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto.inc54
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch35
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch33
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch35
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto_0.30.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-mako.inc21
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-mako_1.0.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe_1.0.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib/fix_setupext.patch110
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib_2.0.2.bb18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe/0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch33
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe_0.4.0.bb20
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-mock_2.0.0.bb22
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-monotonic_1.5.bb10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack_0.5.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient.inc25
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient_0.5.1.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr_0.7.19.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-networkx_2.1.bb12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-numeric/0001-it-tries-to-define-this-function-differently-than-it.patch30
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-numeric_24.2.bb16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib.inc25
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib_2.0.6.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt.inc21
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt_1.3.1.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pam_1.8.2.bb15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pandas.inc23
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pandas_0.23.4.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type_0.4.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-parse.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-parse_1.8.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-passlib.inc19
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-passlib_1.7.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-paste_2.0.3.bb14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pbr_4.2.0.bb3
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pep8_1.7.1.bb16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-periphery.inc7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-periphery_1.1.1.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc21
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect_4.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pint.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pint_0.8.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pip_18.0.bb14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy_0.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-ply.inc18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-ply_3.11.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pretend.inc9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pretend_1.0.9.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-prettytable_0.7.2.bb27
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-progress.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-progress_1.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit.inc18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit_2.0.4.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc31
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf_3.6.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc20
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-psutil_5.4.6.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc20
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess_0.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-py.inc10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-py_1.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio.inc11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio_0.8.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules_0.2.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1_0.4.4.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11.inc7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11_2.2.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez.inc21
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez_0.22.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pycodestyle.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pycodestyle_2.4.0.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser_2.18.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto.inc21
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/CVE-2013-7459.patch98
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/cross-compiling.patch23
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto_2.6.1.bb9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome.inc29
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome_3.4.11.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus.inc11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus_0.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect.inc11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect_1.0.17.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata_1.0.3.bb3
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflakes_1.6.0.bb16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame-1.6.6/0001-ptrace-Abstract-over-user_regs_struct-name-which-dif.patch69
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame-1.6.6/0001-symbol-Account-for-prelinked-shared-objects.patch134
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame_1.6.6.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0001-reflect-2.1-reporting-for-key-imports.patch90
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0002-passphrase_cb-is-deprecated.patch52
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0003-handle-generic-error-when-no-passphrase-callback-pre.patch30
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/run-ptest3
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme_0.3.bb26
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyhamcrest_1.9.0.bb10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface.inc11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface_0.0.11.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify_0.9.6.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks.inc22
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks_17.1.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt.inc17
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt_1.6.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pylint.inc38
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pylint_1.8.3.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp_2.4.93.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo.inc29
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo_3.7.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux.inc11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux_1.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl.inc23
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl_18.0.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing.inc21
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing_2.2.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip_1.6.2.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex-native_0.9.9.bb5
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex/pyrex-fix-optimized-mode.patch15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex_0.9.9.bb22
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2.inc25
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2_0.5.2.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial.inc42
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial_3.4.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pysmi_0.2.2.bb16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pysnmp_4.3.5.bb25
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks.inc18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks_1.6.8.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite.inc18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite_2.8.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pystache.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pystache_0.5.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-helpers-namespace.inc10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-helpers-namespace_2016.7.10.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner_4.2.bb5
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-tempdir.inc10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-tempdir_2016.8.20.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest.inc35
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch32
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/pytest_version_fix.patch51
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest_3.4.2.bb9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pytz.inc20
-rwxr-xr-xexternal/meta-openembedded/meta-python/recipes-devtools/python/python-pytz_2018.5.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev.inc19
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev_0.21.0.bb9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb.inc10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb_1.0.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml.inc18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml_3.13.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq.inc27
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq/club-rpath-out.patch13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq_17.1.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-redis.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-redis_2.10.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-requests.inc30
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-requests/0001-Strip-Authorization-header-whenever-root-URL-changes.patch62
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-requests/0002-Rework-authorization-stripping-logic-as-discussed.patch118
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-requests_2.19.1.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987.inc8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987_1.3.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework-seriallibrary.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework-seriallibrary_0.3.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework.inc26
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework_3.0.4.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch26
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt_0.8.6.bb3
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify_0.3.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-selectors34_1.2.bb12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-semver.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-semver_2.8.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-serpent.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-serpent_1.25.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm_2.1.0.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-sh.inc32
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-sh_1.12.14.bb8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-sijax.inc8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-sijax_0.3.2.bb11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson.inc23
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson_3.16.0.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-singledispatch_3.4.0.3.bb12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-six.inc19
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-six_1.11.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-slip-dbus_0.6.1.bb31
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-smbus.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-smbus_4.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-snakefood_1.4.bb51
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-snimpy_0.8.12.bb20
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-sparts_0.7.3.bb22
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater.inc9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater_1.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-spidev.inc17
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy.inc20
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy_1.1.17.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-stevedore.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-stevedore_1.29.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339.inc8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339_0.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-subprocess32_3.2.7.bb15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/0001-Provide-implementation-of-strndupa-for-musl.patch42
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd_234.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado-redis_2.4.18.bb18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado.inc25
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado_5.1.bb8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-traceback2_1.4.0.bb15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc250
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-twisted_18.4.0.bb8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-twofish.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-twofish_0.3.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-typing.inc9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-typing_3.6.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-ujson.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-ujson_1.35.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff_0.5.5.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3.inc19
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3_1.23.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-vcversioner_2.16.0.0.bb25
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-visitor.inc6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-visitor_0.1.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-vobject_0.9.6.1.bb15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth.inc8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth_0.1.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors_1.8.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-webdav_0.1.2.bb19
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings.inc13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings_0.5.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug.inc47
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug_0.14.1.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh.inc24
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh_2.7.4.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt_1.10.11.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms.inc15
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms_2.2.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd.inc12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd_1.1.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome.inc17
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome_4.7.0.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic.inc14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic_1.0.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-yappi.inc16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-yappi_0.98.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface.inc22
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface_4.5.0.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.0.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_0.24.0.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_1.6.5.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_18.1.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.7.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.4.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.4.0.bb12
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-behave_1.2.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_0.8.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-can_2.2.1.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.14.0.bb8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2018.8.13.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.11.5.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-click_6.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_3.5.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_4.4.2.bb10
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-crcmod_1.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.3.bb8
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.28.5.bb18
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.7.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.3.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-django-south_1.0.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-django_1.11.14.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-djangorestframework_3.9.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.15.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.3.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_0.7.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-feedformatter_0.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.11.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-bootstrap_3.3.7.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.4.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.2.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_0.5.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-script_2.0.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sijax_0.4.1.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.3.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-uploads_0.2.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-xstatic_0.0.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.0.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-future_0.16.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.2.2.bb3
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.14.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.14.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.14.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-html5lib_1.0.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_0.5.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_18.0.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-incremental_17.5.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.3.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-intervals_1.5.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_0.24.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.2.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.10.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.23.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer_2.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_2.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb29
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.3.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.2.4.bb3
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.30.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.5.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_3.3.2.bb13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_2.0.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_3.0.1.bb11
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.3.1.bb3
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_0.23.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.4.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.8.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-periphery_1.1.1.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pid/0001-remove-requirement-of-nose.patch29
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.0.bb14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.8.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-ply_3.11.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl/0001-support-cross-complication.patch61
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl_1.7.bb22
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pretend_1.0.9.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_2.0.4.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.6.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.4.6.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess_0.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.6.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyalsaaudio_0.8.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.2.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.4.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.18.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb9
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycryptodome_3.4.11.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0001-Support-asynchronous-calls-58.patch93
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0002-Support-transformation-between-D-Bus-errors-and-exce.patch203
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.17.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.0.3.bb3
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.11.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_17.1.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.6.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.93.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.7.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_18.0.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.2.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.6.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.6.8.bb6
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2016.7.10.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_4.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-tempdir_2016.8.20.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_3.4.2.bb4
-rwxr-xr-xexternal/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2018.5.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_3.13.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_17.1.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-file_1.4.3.bb14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb14
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.19.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.3.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-scapy_0.25.bb13
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb3
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_2.8.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.25.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_2.1.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.12.14.bb5
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-sijax_0.3.2.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.16.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.1.17.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_1.29.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_5.1.bb7
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_18.4.0.bb67
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.23.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb20
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.7.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_4.0.1.bb16
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_0.14.1.bb4
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.10.11.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.2.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.1.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.1.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_0.98.bb2
-rw-r--r--external/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.5.0.bb4
634 files changed, 7743 insertions, 0 deletions
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/pamela_0.3.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/pamela_0.3.0.bb
new file mode 100644
index 00000000..8071fcb0
--- /dev/null
+++ b/external/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 setuptools
+
+RDEPENDS_${PN} = "libpam"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "pam"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/pyrtm_0.4.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/pyrtm_0.4.2.bb
new file mode 100644
index 00000000..9d851abe
--- /dev/null
+++ b/external/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 setuptools
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-alembic.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-alembic.inc
new file mode 100644
index 00000000..477e89c5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-alembic.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "A database migration tool for SQLAlchemy"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c5f1361296835ff94bda73db7dd312a6"
+
+SRC_URI[md5sum] = "762ab9ba56d1c0b1bfbc7c9f7f849c92"
+SRC_URI[sha256sum] = "52d73b1d750f1414fa90c25a08da47b87de1e4ad883935718a8f36396e19e78e"
+
+PYPI_PACKAGE = "alembic"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-dateutil \
+ ${PYTHON_PN}-editor \
+ ${PYTHON_PN}-mako \
+ ${PYTHON_PN}-sqlalchemy \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-alembic_1.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-alembic_1.0.0.bb
new file mode 100644
index 00000000..efcb2b1d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-alembic_1.0.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-alembic.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson.inc
new file mode 100644
index 00000000..a0d20ff4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson.inc
@@ -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
+
+SRC_URI[md5sum] = "2ea28d6ec311aeeebaf993cb3008b27c"
+SRC_URI[sha256sum] = "37812d863c9ad3e35c0734c42e0bf0320ce8c3bed82cd20ad54cb34d158157ba"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-simplejson"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson_0.3.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson_0.3.3.bb
new file mode 100644
index 00000000..31b8749f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson_0.3.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-anyjson.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs.inc
new file mode 100644
index 00000000..c4826723
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs.inc
@@ -0,0 +1,8 @@
+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[md5sum] = "44c679904082a2133f5566c8a0d3ab42"
+SRC_URI[sha256sum] = "9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92"
+
+inherit pypi
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs_1.4.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs_1.4.3.bb
new file mode 100644
index 00000000..e9ff9b3f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs_1.4.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-appdirs.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto.inc
new file mode 100644
index 00000000..f1f0a3c5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto.inc
@@ -0,0 +1,23 @@
+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=52010cd3c7d7bd965b55721ef4d93ec2"
+
+PYPI_PACKAGE = "asn1crypto"
+
+SRC_URI[md5sum] = "de3520426e81a6581352d4366f310eb1"
+SRC_URI[sha256sum] = "9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-crypt \
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-netclient \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto_0.24.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto_0.24.0.bb
new file mode 100644
index 00000000..46aace28
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto_0.24.0.bb
@@ -0,0 +1,7 @@
+inherit setuptools
+require python-asn1crypto.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-textutils \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-astroid.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-astroid.inc
new file mode 100644
index 00000000..fae0f13c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-astroid.inc
@@ -0,0 +1,31 @@
+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] = "2dd01ef0d5b5f0fc754c1ba40137b61c"
+SRC_URI[sha256sum] = "fc9b582dba0366e63540982c3944a9230cbc6f303641c51483fa547dcc22393a"
+
+inherit pypi
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-astroid_1.6.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-astroid_1.6.5.bb
new file mode 100644
index 00000000..687394da
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-astroid_1.6.5.bb
@@ -0,0 +1,10 @@
+inherit setuptools
+require python-astroid.inc
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-enum34 \
+ ${PYTHON_PN}-backports-functools-lru-cache \
+ ${PYTHON_PN}-re \
+ ${PYTHON_PN}-singledispatch \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-attr.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-attr.inc
new file mode 100644
index 00000000..1d93dd71
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-attr.inc
@@ -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
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-attr_0.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-attr_0.3.1.bb
new file mode 100644
index 00000000..979d6cb6
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-attr_0.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-attr.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-attrs.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-attrs.inc
new file mode 100644
index 00000000..fa73ea54
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-attrs.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "Classes Without Boilerplate"
+HOMEPAGE = "http://www.attrs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d4ab25949a73fe7d4fdee93bcbdbf8ff"
+
+SRC_URI[sha256sum] = "e0d0eb91441a3b53dab4d9b743eafc1ac44476296a2053b6ca3af0b139faf87b"
+SRC_URI[md5sum] = "3f3f3e0750dab74cfa1dc8b0fd7a5f86"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-cryptography \
+ ${PYTHON_PN}-ctypes \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-attrs_18.1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-attrs_18.1.0.bb
new file mode 100644
index 00000000..e3bec0fd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-attrs_18.1.0.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-attrs.inc
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-automat.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-automat.inc
new file mode 100644
index 00000000..f6cbb35c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-automat.inc
@@ -0,0 +1,24 @@
+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"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-automat:"
+
+SRC_URI[md5sum] = "b72d5b7a83c2b1bd6e9ec3614a69f9ea"
+SRC_URI[sha256sum] = "cbd78b83fa2d81fe2a4d23d258e1661dd7493c9a50ee2f1a5b2cac61c1793b0e"
+
+PYPI_PACKAGE = "Automat"
+
+inherit pypi
+
+SRC_URI_append = " \
+ file://0001-setup.py-remove-the-dependency-on-m2r.patch \
+"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-attrs \
+ ${PYTHON_PN}-six \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-automat/0001-setup.py-remove-the-dependency-on-m2r.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-automat/0001-setup.py-remove-the-dependency-on-m2r.patch
new file mode 100644
index 00000000..c29b659b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-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/external/meta-openembedded/meta-python/recipes-devtools/python/python-automat_0.7.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-automat_0.7.0.bb
new file mode 100644
index 00000000..8ac8c9c0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-automat_0.7.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-automat.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python.inc
new file mode 100644
index 00000000..7423fa76
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python.inc
@@ -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] = "50a5c46410c2b44b5c09f1ea5eb15a3b"
+SRC_URI[sha256sum] = "b3c8af3ce24eab861447a194f3c382509dd70e90452c86a5426f1e7272460177"
+
+inherit pypi
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python_1.4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python_1.4.0.bb
new file mode 100644
index 00000000..490e9739
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python_1.4.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-aws-iot-device-sdk-python.inc
+
+RDEPENDS_${PN}-examples += "${PYTHON_PN}-argparse"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-babel.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-babel.inc
new file mode 100644
index 00000000..14b5a9f5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-babel.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "A collection of tools for internationalizing Python applications"
+HOMEPAGE = "http://babel.edgewall.org/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=eebdc057dc12abcc2d6c4453628bfcd4"
+
+SRC_URI[md5sum] = "c384ac03026e8fe6f9b90f55201f1bff"
+SRC_URI[sha256sum] = "8cba50f48c529ca3fa18cf81fa9403be176d374ac4d60738b839122dfaaa3d23"
+
+PYPI_PACKAGE = "Babel"
+
+inherit pypi
+
+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 \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-babel_2.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-babel_2.6.0.bb
new file mode 100644
index 00000000..f7c166eb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-babel_2.6.0.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-babel.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-abc_0.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-abc_0.4.bb
new file mode 100644
index 00000000..6a4d267b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-abc_0.4.bb
@@ -0,0 +1,18 @@
+SUMMARY = "collections.abc from Python 3.4"
+DESCRIPTION = "A backport of recent additions to the 'collections.abc' module"
+
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=dd98d01d471fac8d8dbdd975229dba03"
+
+# pypi package doesn't have valid entry for license
+SRC_URI += "https://raw.githubusercontent.com/cython/backports_abc/master/LICENSE;name=license"
+
+SRC_URI[md5sum] = "0b65a216ce9dc9c1a7e20a729dd7c05b"
+SRC_URI[sha256sum] = "8b3e4092ba3d541c7a2f9b7d0d9c0275b21c6a01c53a61c731eba6686939d0a5"
+SRC_URI[license.md5sum] = "dd98d01d471fac8d8dbdd975229dba03"
+SRC_URI[license.sha256sum] = "0a4f3b38055f50f047a42521568fa6ddb9a5976c2884f6ae138796d0f71150ca"
+
+
+
+PYPI_PACKAGE = "backports_abc"
+inherit pypi setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-functools-lru-cache_1.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-functools-lru-cache_1.5.bb
new file mode 100644
index 00000000..825444ff
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-functools-lru-cache_1.5.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://setup.py;beginline=57;endline=57;md5=98fc3658e5970d26f6b2109808c766be"
+
+PYPI_PACKAGE = "backports.functools_lru_cache"
+
+SRC_URI[md5sum] = "20f53f54cd3f04b3346ce75a54959754"
+SRC_URI[sha256sum] = "9d98697f088eb1b0fa451391f91afb5e3ebde16bbdb272819fd091151fda4f1a"
+
+DEPENDS += "python-setuptools-scm-native"
+
+inherit setuptools pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-threading \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-ssl_3.5.0.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-ssl_3.5.0.1.bb
new file mode 100644
index 00000000..45492daa
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-backports-ssl_3.5.0.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "The ssl.match_hostname() function from Python 3.4"
+DESCRIPTION = "The Secure Sockets layer is only actually secure if you check the hostname in the \
+certificate returned by the server to which you are connecting, and verify that it matches to hostname \
+that you are trying to reach. But the matching logic, defined in RFC2818, can be a bit tricky to implement \
+on your own. So the ssl package in the Standard Library of Python 3.2 and greater now includes a \
+match_hostname() function for performing this check instead of requiring every application to \
+implement the check separately. This backport brings match_hostname() to users of earlier versions of Python"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=95a5ee8fd779fbeca8b4cbca64433c87"
+
+SRC_URI[md5sum] = "c03fc5e2c7b3da46b81acf5cbacfe1e6"
+SRC_URI[sha256sum] = "502ad98707319f4a51fa2ca1c677bd659008d27ded9f6380c79e8932e38dcdf2"
+
+PYPI_PACKAGE = "backports.ssl_match_hostname"
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "${PYTHON_PN}-pkgutil"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt.inc
new file mode 100644
index 00000000..44909697
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt.inc
@@ -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] = "8408abc974446e64862a9742104e97b6"
+SRC_URI[sha256sum] = "67ed1a374c9155ec0840214ce804616de49c3df9c5bc66740687c1c9b1cd9e8d"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-cffi \
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-six \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt_3.1.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt_3.1.4.bb
new file mode 100644
index 00000000..b136aa48
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt_3.1.4.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-bcrypt.inc
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4.inc
new file mode 100644
index 00000000..d60d987c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4.inc
@@ -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] = "c17714d0f91a23b708a592cb3c697728"
+SRC_URI[sha256sum] = "808b6ac932dccb0a4126558f7dfdcf41710dd44a4ef497a0bb59a77f9f078e89"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target = "\
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-html5lib \
+ ${PYTHON_PN}-lxml \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4_4.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4_4.6.0.bb
new file mode 100644
index 00000000..907285ac
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4_4.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-beautifulsoup4.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-behave.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-behave.inc
new file mode 100644
index 00000000..ded75801
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-behave.inc
@@ -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
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-parse-type \
+ ${PYTHON_PN}-setuptools \
+ ${PYTHON_PN}-six \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-behave_1.2.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-behave_1.2.6.bb
new file mode 100644
index 00000000..66221682
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-behave_1.2.6.bb
@@ -0,0 +1,8 @@
+inherit setuptools
+require python-behave.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-argparse \
+ ${PYTHON_PN}-enum34 \
+ ${PYTHON_PN}-traceback2 \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray.inc
new file mode 100644
index 00000000..480f048b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray.inc
@@ -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=f4ce1ae80a385140f0ddb2bcef410b06"
+
+SRC_URI[md5sum] = "f3131ac2a277f3b70dbb6132ca8f8889"
+SRC_URI[sha256sum] = "050cd30b810ddb3aa941e7ddfbe0d8065e793012d0a88cb5739ec23624b9895e"
+
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray_0.8.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray_0.8.3.bb
new file mode 100644
index 00000000..f78c7abd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray_0.8.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-bitarray.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-blinker.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-blinker.inc
new file mode 100644
index 00000000..eaf39083
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-blinker.inc
@@ -0,0 +1,7 @@
+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"
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-blinker_1.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-blinker_1.4.bb
new file mode 100644
index 00000000..bc4164e9
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-blinker_1.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-blinker.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-can.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-can.inc
new file mode 100644
index 00000000..46f08593
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-can.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Controller Area Network (CAN) interface module for Python"
+SECTION = "devel/python"
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=38138baa100d7259934590850bc0406e"
+
+SRC_URI[md5sum] = "dcdd3f6b924e3f20acb1ccf4598236cf"
+SRC_URI[sha256sum] = "b5e93b2ee32bdd597d9d908afe5171c402a04c9678ba47b60f33506738b1375b"
+
+PYPI_PACKAGE="python-can"
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-misc \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-sqlite3 \
+ ${PYTHON_PN}-wrapt \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-can_2.2.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-can_2.2.1.bb
new file mode 100644
index 00000000..f0edb640
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-can_2.2.1.bb
@@ -0,0 +1,8 @@
+require python-can.inc
+inherit pypi setuptools
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-argparse \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-zlib \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-cassandra-driver.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cassandra-driver.inc
new file mode 100644
index 00000000..1cc1f4c4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cassandra-driver.inc
@@ -0,0 +1,33 @@
+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
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-cython \
+ ${PYTHON_PN}-multiprocessing \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-json \
+ libevent \
+"
+
+DEPENDS_${PN} += "\
+ ${PYTHON_PN}-cython \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-certifi.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-certifi.inc
new file mode 100644
index 00000000..c7955c57
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-certifi.inc
@@ -0,0 +1,13 @@
+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] = "a84571995a209dcd00a1702a74302b88"
+SRC_URI[sha256sum] = "4c1d68a1408dd090d2f3a869aa94c3947cc1d967821d1ed303208c9f41f0f2f4"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-certifi_2018.8.13.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-certifi_2018.8.13.bb
new file mode 100644
index 00000000..adfe6238
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-certifi_2018.8.13.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-certifi.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-cffi.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cffi.inc
new file mode 100644
index 00000000..e6071eec
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cffi.inc
@@ -0,0 +1,16 @@
+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] = "ac8492f4ad952360737413e82d661908"
+SRC_URI[sha256sum] = "e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4"
+
+RDEPENDS_${PN}_class-target = " \
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-cffi_1.11.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cffi_1.11.5.bb
new file mode 100644
index 00000000..bc667b80
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cffi_1.11.5.bb
@@ -0,0 +1,6 @@
+require python-cffi.inc
+inherit pypi setuptools
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-chardet.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-chardet.inc
new file mode 100644
index 00000000..63052997
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-chardet.inc
@@ -0,0 +1,23 @@
+SUMMARY = "Universal encoding detector for Python 2 and 3"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6f89e2100d9b6cdffcea4f398e37343"
+
+inherit pypi
+
+# setup.py of chardet needs this.
+DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+SRC_URI[md5sum] = "7dd1ba7f9c77e32351b0a0cfacf4055c"
+SRC_URI[sha256sum] = "84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"
+
+BBCLASSEXTEND = "native nativesdk"
+
+PACKAGES =+ "${PN}-cli"
+RDEPENDS_${PN}-cli = "${PN} "
+FILES_${PN}-cli += " \
+ ${PYTHON_SITEPACKAGES_DIR}/chardet/cli \
+"
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-logging \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-chardet_3.0.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-chardet_3.0.4.bb
new file mode 100644
index 00000000..3b6feeef
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-chardet_3.0.4.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-chardet.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-argparse"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-cheetah_2.4.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cheetah_2.4.4.bb
new file mode 100644
index 00000000..20fc2fdc
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cheetah_2.4.4.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Python template engine and code generation tool"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aff1107514aa6aae948f9fe71fdc393b"
+
+PR = "r3"
+
+PYPI_PACKAGE = "Cheetah"
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "python-pickle python-pprint"
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[md5sum] = "853917116e731afbc8c8a43c37e6ddba"
+SRC_URI[sha256sum] = "be308229f0c1e5e5af4f27d7ee06d90bb19e6af3059794e5fd536a6f29a9b550"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-click.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-click.inc
new file mode 100644
index 00000000..c81545b1
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-click.inc
@@ -0,0 +1,23 @@
+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"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=09e8b7869f94ba9e9a7b260d53c65dab"
+
+SRC_URI[md5sum] = "fc4cc00c4863833230d3af92af48abd4"
+SRC_URI[sha256sum] = "f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b"
+
+UPSTREAM_CHECK_REGEX = "click/(?P<pver>\d+(\.\d+)+)/"
+
+CLEANBROKEN = "1"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-threading \
+ "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-click_6.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-click_6.7.bb
new file mode 100644
index 00000000..f63e27c8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-click_6.7.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools
+require python-click.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-contextlib"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-cmd2_0.9.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cmd2_0.9.2.bb
new file mode 100644
index 00000000..1b75e347
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cmd2_0.9.2.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Extra features for standard library's cmd module"
+HOMEPAGE = "http://packages.python.org/cmd2/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=60bc6842001870a418935bd84570b676"
+
+SRC_URI[md5sum] = "bfe0900a2288283a40f0ee7533486a2f"
+SRC_URI[sha256sum] = "e7b6b4b76272a051c943c3c709cd760142af16fbc9218e0ed3c22b28ea38d0a8"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-doctest \
+ ${PYTHON_PN}-pyparsing \
+ ${PYTHON_PN}-pyperclip \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-textutils \
+ "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-configparser.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-configparser.inc
new file mode 100644
index 00000000..133dbba7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-configparser.inc
@@ -0,0 +1,11 @@
+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=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[md5sum] = "cfdd915a5b7a6c09917a64a573140538"
+SRC_URI[sha256sum] = "5308b47021bc2340965c371f0f058cc6971a04502638d4244225c49d80db273a"
+
+inherit pypi
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-configparser_3.5.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-configparser_3.5.0.bb
new file mode 100644
index 00000000..69f045db
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-configparser_3.5.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-configparser.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-constantly.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-constantly.inc
new file mode 100644
index 00000000..81535049
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-constantly.inc
@@ -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
+
+RDEPENDS_${PN} += "${PYTHON_PN}-json"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-constantly_15.1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-constantly_15.1.0.bb
new file mode 100644
index 00000000..29b15eb6
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-constantly_15.1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-constantly.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-crcmod.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-crcmod.inc
new file mode 100644
index 00000000..85da7cb3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-crcmod.inc
@@ -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
+
+RDEPENDS_${PN} += "${PYTHON_PN}-unittest"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-crcmod_1.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-crcmod_1.7.bb
new file mode 100644
index 00000000..45b9a2ce
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-crcmod_1.7.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-crcmod.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors.inc
new file mode 100644
index 00000000..d1e254b4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors.inc
@@ -0,0 +1,18 @@
+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"
+
+DEPENDS += " \
+ ${PYTHON_PN}-cryptography \
+"
+
+SRC_URI[md5sum] = "294d44f32885a6b97d5f9cdd7ffc73a3"
+SRC_URI[sha256sum] = "356a2ded84ae379e556515eec9b68dd74957651a38465d10605bb9fbae280f15"
+
+PYPI_PACKAGE = "cryptography_vectors"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = ""
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors_2.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors_2.3.bb
new file mode 100644
index 00000000..4975278a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors_2.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-cryptography-vectors.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography.inc
new file mode 100644
index 00000000..dbbfe2cb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography.inc
@@ -0,0 +1,58 @@
+SUMMARY = "Provides cryptographic recipes and primitives to python developers"
+HOMEPAGE = "https://cryptography.io/"
+LICENSE = "Apache-2.0 | BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=097f805837700cfac572ac274cd38124"
+
+DEPENDS += " \
+ ${PYTHON_PN}-cffi \
+ ${PYTHON_PN}-cffi-native \
+ ${PYTHON_PN}-asn1crypto \
+ ${PYTHON_PN}-six \
+"
+
+SRC_URI[md5sum] = "a0f3f563ab1c5c3bc02fae8d4aa3ad16"
+SRC_URI[sha256sum] = "c132bab45d4bd0fff1d3fe294d92b0a6eb8404e93337b3127bdec9f21de117e6"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-cffi \
+ ${PYTHON_PN}-idna \
+ ${PYTHON_PN}-asn1crypto \
+ ${PYTHON_PN}-pycparser \
+ ${PYTHON_PN}-setuptools \
+ ${PYTHON_PN}-six \
+"
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-cffi \
+ ${PYTHON_PN}-idna \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-asn1crypto \
+ ${PYTHON_PN}-pycparser \
+ ${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/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography/run-ptest b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography/run-ptest
new file mode 100644
index 00000000..0ba239c2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography/run-ptest
@@ -0,0 +1,2 @@
+#!/bin/sh
+py.test
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography_2.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography_2.3.bb
new file mode 100644
index 00000000..9c2f8841
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography_2.3.bb
@@ -0,0 +1,22 @@
+inherit pypi setuptools
+require python-cryptography.inc
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+DEPENDS += " \
+ ${PYTHON_PN}-enum34 \
+"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-enum34 \
+ ${PYTHON_PN}-ipaddress \
+"
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-enum34 \
+ ${PYTHON_PN}-ipaddress \
+ ${PYTHON_PN}-contextlib \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-cython.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cython.inc
new file mode 100644
index 00000000..0939cad2
--- /dev/null
+++ b/external/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] = "0cb620e1259818e4ecc1a056e8c3a8be"
+SRC_URI[sha256sum] = "b64575241f64f6ec005a4d4137339fb0ba5e156e826db2fdb5f458060d9979e0"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-cython_0.28.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cython_0.28.5.bb
new file mode 100644
index 00000000..d803a6ed
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-cython_0.28.5.bb
@@ -0,0 +1,10 @@
+inherit setuptools
+require python-cython.inc
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/Cython/"
+UPSTREAM_CHECK_REGEX = "/Cython/(?P<pver>(\d+[\.\-_]*)+)"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-distribute \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-daemon/0001-Workaround-for-issue-2-1.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-daemon/0001-Workaround-for-issue-2-1.patch
new file mode 100644
index 00000000..dbb84071
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-daemon_2.1.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-daemon_2.1.2.bb
new file mode 100644
index 00000000..ffb5beb5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-daemon_2.1.2.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "Library to implement a well-behaved Unix daemon process"
+HOMEPAGE = "https://pagure.io/python-daemon/"
+SECTION = "devel/python"
+
+DEPENDS += "python-docutils-native"
+RDEPENDS_${PN} = "python-docutils \
+ python-lockfile (>= 0.10) \
+ python-resource \
+"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+inherit pypi setuptools
+
+SRC_URI[md5sum] = "9c57343d81f2a96c51cffeab982b04d2"
+SRC_URI[sha256sum] = "261c859be5c12ae7d4286dc6951e87e9e1a70a882a8b41fd926efc1ec4214f73"
+
+# Fix for build error in Yocto:
+# i = p.rfind('/') + 1
+# AttributeError: 'NoneType' object has no attribute 'rfind'
+#S = "${WORKDIR}/python-daemon"
+SRC_URI_append = " \
+ file://0001-Workaround-for-issue-2-1.patch \
+"
+
+PYPI_PACKAGE = "python-daemon"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-daemonize_2.4.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-daemonize_2.4.7.bb
new file mode 100644
index 00000000..98f23aba
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-daemonize_2.4.7.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Library to enable your code run as a daemon process on Unix-like systems"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=13e982bf1b7b164b9d6d1665dac83873"
+SRCNAME = "daemonize"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "\
+ python-fcntl \
+ python-unixadmin \
+ python-logging \
+ python-resource \
+"
+
+SRC_URI[md5sum] = "6759005b12dfeea0d4305f8536b4b0c2"
+SRC_URI[sha256sum] = "c0194e861826be456c7c69985825ac7b79632d8ac7ad4cde8e12fee7971468c8"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc
new file mode 100644
index 00000000..9c5a89dd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc
@@ -0,0 +1,23 @@
+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] = "175b7c1a3cc0cb01151eced07c61c0b8"
+SRC_URI[sha256sum] = "e27001de32f627c22380a688bcc43ce83504a7bc5da472209b4c70f02829f0b8"
+
+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}_class-target = "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-stringold \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil_2.7.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil_2.7.3.bb
new file mode 100644
index 00000000..12ae4c31
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil_2.7.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-dateutil.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-dbus_1.2.8.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dbus_1.2.8.bb
new file mode 100644
index 00000000..b3f72405
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dbus_1.2.8.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Python bindings for the DBus inter-process communication system"
+SECTION = "devel/python"
+HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+LICENSE = "MIT & AFL-2.1 | GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b03240518994df6d8c974675675e5ca4 \
+ file://dbus-gmain/COPYING;md5=05c3eacd50f69bb1d58afec460baad57 "
+DEPENDS = "expat dbus dbus-glib virtual/libintl python-pyrex-native"
+
+SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz \
+"
+
+SRC_URI[md5sum] = "7379db774c10904f27e7e2743d90fb43"
+SRC_URI[sha256sum] = "abf12bbb765e300bf8e2a1b2f32f85949eab06998dbda127952c31cb63957b6f"
+S = "${WORKDIR}/dbus-python-${PV}"
+
+inherit distutils-base autotools pkgconfig
+
+# documentation needs python-sphinx, which is not in oe-core or meta-python for now
+# change to use PACKAGECONFIG when python-sphinx is added to oe-core or meta-python
+EXTRA_OECONF += "--disable-documentation"
+
+export STAGING_LIBDIR
+export STAGING_INCDIR
+
+RDEPENDS_${PN} = "python-io python-logging python-stringold python-threading python-xml"
+
+FILES_${PN}-dev += "${libdir}/pkgconfig"
+
+do_install_append() {
+ # Remove files that clash with python3-dbus; their content is same
+ rm ${D}${includedir}/dbus-1.0/dbus/dbus-python.h ${D}${libdir}/pkgconfig/dbus-python.pc
+}
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0001-Add-functionality-to-add-own-objects-to-internal-obj.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0001-Add-functionality-to-add-own-objects-to-internal-obj.patch
new file mode 100644
index 00000000..c4d81784
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-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/external/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0002-Add-possibility-to-import-templates-from-packages.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0002-Add-possibility-to-import-templates-from-packages.patch
new file mode 100644
index 00000000..06ab1f05
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-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/external/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock_0.16.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock_0.16.7.bb
new file mode 100644
index 00000000..ec8c54aa
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-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 setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-dbus \
+ ${PYTHON_PN}-pygobject \
+ ${PYTHON_PN}-xml \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-decorator.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-decorator.inc
new file mode 100644
index 00000000..44edb8ad
--- /dev/null
+++ b/external/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"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=893f896413826096ce5270c700a498fd"
+
+SRC_URI[md5sum] = "249e7299b9b4bced0c382343f84eb1c0"
+SRC_URI[sha256sum] = "c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-stringold \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-decorator_4.3.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-decorator_4.3.0.bb
new file mode 100644
index 00000000..2a2b455f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-decorator_4.3.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-decorator.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-contextlib"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-django-south.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-django-south.inc
new file mode 100644
index 00000000..e4f03b93
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-django-south_1.0.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-django-south_1.0.2.bb
new file mode 100644
index 00000000..357b766a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-django-south_1.0.2.bb
@@ -0,0 +1,2 @@
+require python-django-south.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-django.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-django.inc
new file mode 100644
index 00000000..ee3aee63
--- /dev/null
+++ b/external/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"
+
+SRC_URI[md5sum] = "38e82b59a1c27bbf98ccf0564ead7426"
+SRC_URI[sha256sum] = "eb9271f0874f53106a2719c0c35ce67631f6cc27cf81a60c6f8c9817b35a3f6e"
+
+PYPI_PACKAGE = "Django"
+inherit pypi
+
+UPSTREAM_CHECK_REGEX = "(?P<pver>1(\.\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 \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-django_1.11.14.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-django_1.11.14.bb
new file mode 100644
index 00000000..d2347cc9
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-django_1.11.14.bb
@@ -0,0 +1,8 @@
+require python-django.inc
+inherit setuptools
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-argparse \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-zlib \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-djangorestframework.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-djangorestframework.inc
new file mode 100644
index 00000000..8551a834
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-djangorestframework_3.9.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-djangorestframework_3.9.0.bb
new file mode 100644
index 00000000..540d12dc
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-djangorestframework_3.9.0.bb
@@ -0,0 +1,2 @@
+require python-djangorestframework.inc
+inherit setuptools \ No newline at end of file
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython.inc
new file mode 100644
index 00000000..6a04429b
--- /dev/null
+++ b/external/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 = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b9d855ee0d7bea17c8b0994d37985e1e"
+
+SRC_URI[md5sum] = "05d33ffb5d8f35ae0474bb952778a344"
+SRC_URI[sha256sum] = "40f563e1f7a7b80dc5a4e76ad75c23da53d62f1e15e6e517293b04e1f84ead7c"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython_1.15.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython_1.15.0.bb
new file mode 100644
index 00000000..9dbcd0ff
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython_1.15.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-dnspython.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-docutils_0.14rc2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-docutils_0.14rc2.bb
new file mode 100644
index 00000000..68436a1a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-docutils_0.14rc2.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Text processing system for documentation"
+HOMEPAGE = "http://docutils.sourceforge.net"
+SECTION = "devel/python"
+LICENSE = "PSF & BSD-2-Clause & GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=35a23d42b615470583563132872c97d6"
+
+DEPENDS = "python"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/docutils/docutils-${PV}.tar.gz"
+SRC_URI[md5sum] = "2f4bee6451958252f7bec71f18b05be3"
+SRC_URI[sha256sum] = "3caee0bcb2a49fdf24fcfa70849a60abb7a181aa68b030f7cb7494096181830c"
+
+S = "${WORKDIR}/docutils-${PV}"
+
+inherit distutils
+
+BBCLASSEXTEND = "native"
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-dominate.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dominate.inc
new file mode 100644
index 00000000..ecf74a0b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dominate.inc
@@ -0,0 +1,11 @@
+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] = "45bd97e6f7888aac24ae86013c57638e"
+SRC_URI[sha256sum] = "4b8ce6f33633c9dd9175b228d21c00c801b6bd0327747cd5e17fc2da934c3a69"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-threading \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-dominate_2.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dominate_2.3.1.bb
new file mode 100644
index 00000000..c19445e7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-dominate_2.3.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-dominate.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-editor.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-editor.inc
new file mode 100644
index 00000000..30650bda
--- /dev/null
+++ b/external/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] = "0aca5f2ef176ce68e98a5b7e31372835"
+SRC_URI[sha256sum] = "a3c066acee22a1c94f63938341d4fb374e3fdd69366ed6603d7b24bed1efc565"
+
+PYPI_PACKAGE = "python-editor"
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-editor_1.0.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-editor_1.0.3.bb
new file mode 100644
index 00000000..f7a9a8c0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-editor_1.0.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-editor.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-enum34_1.1.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-enum34_1.1.6.bb
new file mode 100644
index 00000000..d50b5c7c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-enum34_1.1.6.bb
@@ -0,0 +1,11 @@
+SUMMARY = "backport of Python 3.4's enum package"
+HOMEPAGE = "https://bitbucket.org/stoneleaf/enum34"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://enum/LICENSE;md5=0a97a53a514564c20efd7b2e8976c87e"
+
+SRC_URI[md5sum] = "5f13a0841a61f7fc295c514490d120d0"
+SRC_URI[sha256sum] = "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1"
+
+inherit pypi setuptools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-epydoc_3.0.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-epydoc_3.0.1.bb
new file mode 100644
index 00000000..dd9799fa
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-epydoc_3.0.1.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Epydoc is a tool for generating API documentation for Python modules, based on their docstrings"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=011c0d78eb6054d731c879132d7313f0"
+HOMEPAGE = "http://epydoc.sourceforge.net/"
+
+SRC_URI[md5sum] = "cdd6f6c76dd8bab5e653a343a0544294"
+SRC_URI[sha256sum] = "d4e5c8d90937d01b05170f592c1fa9b29e9ed0498dfe7f0eb2a3af61725b6ad1"
+
+inherit pypi distutils
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-re \
+ ${PYTHON_PN}-xml \
+ "
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc
new file mode 100644
index 00000000..5a3884a6
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc
@@ -0,0 +1,21 @@
+SUMMARY = "Python evdev lib"
+HOMEPAGE = "https://github.com/gvalkov/python-evdev"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=18debddbb3f52c661a129724a883a8e2"
+
+SRC_URI[md5sum] = "c7e855ae9f97f869a59e75b29f05ce74"
+SRC_URI[sha256sum] = "57edafc469a414f58b51af1bfb9ee2babb9f626dd2df530d71c1176871850aa1"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-evdev_0.7.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-evdev_0.7.0.bb
new file mode 100644
index 00000000..63541363
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-evdev_0.7.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-evdev.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter.inc
new file mode 100644
index 00000000..a333ef4e
--- /dev/null
+++ b/external/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"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter_0.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter_0.4.bb
new file mode 100644
index 00000000..175f9447
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter_0.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-feedformatter.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-feedparser_5.2.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-feedparser_5.2.1.bb
new file mode 100644
index 00000000..b8ee700f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-feedparser_5.2.1.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Python Atom and RSS feed parser"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c21a7713ef6dc1b99644061c397e7c2a"
+
+SRC_URI[md5sum] = "d552f7a2a55e8e33b2a3fe1082505b42"
+SRC_URI[sha256sum] = "bd030652c2d08532c034c27fcd7c85868e7fa3cb2b17f230a44a6bbc92519bf9"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-html \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-stringold \
+ "
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel.inc
new file mode 100644
index 00000000..b60ee17d
--- /dev/null
+++ b/external/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"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51917f3e8e858f5ae295a7d0e2eb3cc9"
+
+SRC_URI[md5sum] = "07803453743f139309021572a799c6b3"
+SRC_URI[sha256sum] = "c0d75710bd4b0fe866f9f2347de6e19208712f9cec006436b4c1c15d4cb0c939"
+
+PYPI_PACKAGE = "Flask-Babel"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-speaklater \
+ ${PYTHON_PN}-babel \
+ ${PYTHON_PN}-flask \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel_0.11.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel_0.11.2.bb
new file mode 100644
index 00000000..38e78c73
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel_0.11.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-babel.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bcrypt_0.7.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bcrypt_0.7.1.bb
new file mode 100644
index 00000000..f035862d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bcrypt_0.7.1.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Bcrypt hashing for Flask."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0ee2ee5bee7fe96597770e92db5719a8"
+
+SRC_URI[md5sum] = "d345c36ac6637d3ca9fa942e238d00ca"
+SRC_URI[sha256sum] = "d71c8585b2ee1c62024392ebdbc447438564e2c8c02b4e57b56a4cafd8d13c5f"
+
+PYPI_PACKAGE = "Flask-Bcrypt"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "${PYTHON_PN}-bcrypt ${PYTHON_PN}-flask"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap.inc
new file mode 100644
index 00000000..0723b973
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap_3.3.7.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap_3.3.7.1.bb
new file mode 100644
index 00000000..eeaade9a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap_3.3.7.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-bootstrap.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login.inc
new file mode 100644
index 00000000..59eb64f7
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login_0.4.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login_0.4.1.bb
new file mode 100644
index 00000000..510cedf2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login_0.4.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-login.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc
new file mode 100644
index 00000000..bb087034
--- /dev/null
+++ b/external/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"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail_0.9.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail_0.9.1.bb
new file mode 100644
index 00000000..8324da86
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail_0.9.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-mail.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc
new file mode 100644
index 00000000..dfb20e9e
--- /dev/null
+++ b/external/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] = "aaeee55431d0287063657122ff41a0e6"
+SRC_URI[sha256sum] = "cd1b4e6cb829eeb41c02ad9202d83bef5f4b7a036dd9fad72ce96ad1e22efb07"
+
+PYPI_PACKAGE = "Flask-Migrate"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-flask-sqlalchemy \
+ ${PYTHON_PN}-alembic \
+ ${PYTHON_PN}-flask \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate_2.2.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate_2.2.1.bb
new file mode 100644
index 00000000..ece516f5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate_2.2.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-migrate.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc
new file mode 100644
index 00000000..932ccdf4
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav_0.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav_0.6.bb
new file mode 100644
index 00000000..30b5b3b3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav_0.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-nav.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-navigation_0.2.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-navigation_0.2.0.bb
new file mode 100644
index 00000000..b2dc96e3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-navigation_0.2.0.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "The navigation of Flask application."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=af2ec695dc1f3eb7bd74f79a68a0d789"
+
+SRC_URI[md5sum] = "d1075ee02a3f69da37e5cadad3395f31"
+SRC_URI[sha256sum] = "c42d30efa989ca877444a410e8a1cd2563546f9effe3d9fe388eedf7a6c69285"
+
+PYPI_PACKAGE = "Flask-Navigation"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-blinker \
+ ${PYTHON_PN}-flask \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc
new file mode 100644
index 00000000..fb2d6ed8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc
@@ -0,0 +1,13 @@
+SUMMARY = "PyMongo support for Flask applications"
+DESCRIPTION = "PyMongo support for Flask applications."
+HOMEPAGE = "https://github.com/mitsuhiko/flask/"
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://flask_pymongo/wrappers.py;beginline=1;endline=24;md5=424c4e1047d28e01b4e4634a069c019d"
+
+SRC_URI[md5sum] = "d7a1b717f27154e1f3a355f8ec2467d6"
+SRC_URI[sha256sum] = "2baaa2ba5107d72b3a8bd4b5c0c8881316e35340ad1ae979cc13f1f3c8843b3d"
+
+PYPI_PACKAGE = "Flask-PyMongo"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pymongo ${PYTHON_PN}-flask"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo_0.5.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo_0.5.1.bb
new file mode 100644
index 00000000..d41d0234
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-pymongo.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc
new file mode 100644
index 00000000..0485f85a
--- /dev/null
+++ b/external/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] = "8243ca101185b130d8fa529cbdbdbddd"
+SRC_URI[sha256sum] = "5795519501347e108c436b693ff9a4d7b373a3ac9069627d64e4001c05dd3407"
+
+inherit pypi
+
+PYPI_PACKAGE = "Flask-RESTful"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-flask"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful_0.3.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful_0.3.6.bb
new file mode 100644
index 00000000..1968d1d9
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful_0.3.6.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-flask-restful.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc
new file mode 100644
index 00000000..fca777bc
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "Scripting support for flask"
+LICENSE = "BSD"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script_2.0.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script_2.0.6.bb
new file mode 100644
index 00000000..b7d55af1
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script_2.0.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-script.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sijax.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sijax.inc
new file mode 100644
index 00000000..ff4e70a5
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sijax_0.4.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sijax_0.4.1.bb
new file mode 100644
index 00000000..74738fc2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sijax_0.4.1.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools
+require python-flask-sijax.inc
+
+SRC_URI[sha256sum] = "fb2bf2d4f75408185102195055d75549fee8d9c9e954dca2427186925cdc429f" \ No newline at end of file
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc
new file mode 100644
index 00000000..e0efbc63
--- /dev/null
+++ b/external/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"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5ed1b8cc741515a835a7f6bf2f62ef4a"
+
+SRC_URI[md5sum] = "373ce61dfd03b593ad2eaba68c9fee35"
+SRC_URI[sha256sum] = "5971b9852b5888655f11db634e87725a9031e170f37c0ce7851cf83497f56e53"
+
+PYPI_PACKAGE = "Flask-SQLAlchemy"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-sqlalchemy ${PYTHON_PN}-flask"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy_2.3.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy_2.3.2.bb
new file mode 100644
index 00000000..3dc355c5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy_2.3.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-sqlalchemy.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads.inc
new file mode 100644
index 00000000..cd7ac1ae
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads_0.2.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads_0.2.1.bb
new file mode 100644
index 00000000..d39b07f6
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads_0.2.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-uploads.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc
new file mode 100644
index 00000000..c2b71829
--- /dev/null
+++ b/external/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"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user_0.6.19.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user_0.6.19.bb
new file mode 100644
index 00000000..654d3775
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user_0.6.19.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-user.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc
new file mode 100644
index 00000000..3c90656a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "Simple integration of Flask and WTForms."
+LICENSE = "BSD"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf_0.14.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf_0.14.2.bb
new file mode 100644
index 00000000..dbf091bc
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf_0.14.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-wtf.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc
new file mode 100644
index 00000000..a1fe14ed
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "XStatic support for flask"
+LICENSE = "BSD"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic/remove-pip-requires.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic/remove-pip-requires.patch
new file mode 100644
index 00000000..a2d620ad
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic_0.0.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic_0.0.1.bb
new file mode 100644
index 00000000..dff14a8c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic_0.0.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-xstatic.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc
new file mode 100644
index 00000000..66ad1a6e
--- /dev/null
+++ b/external/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"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c011883ac26229b8ba3084f55c7664c6"
+
+SRC_URI[md5sum] = "824f0f20aae1f44c9c7dc4054adb7969"
+SRC_URI[sha256sum] = "2271c0070dbcb5275fad4a82e29f23ab92682dc45f9dfbc22c02ba9b9322ce48"
+
+CLEANBROKEN = "1"
+
+PYPI_PACKAGE = "Flask"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-werkzeug ${PYTHON_PN}-werkzeug-tests ${PYTHON_PN}-jinja2 ${PYTHON_PN}-itsdangerous ${PYTHON_PN}-click"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask_1.0.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask_1.0.2.bb
new file mode 100644
index 00000000..a0a28ab8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-flask_1.0.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-funcsigs_1.0.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-funcsigs_1.0.2.bb
new file mode 100644
index 00000000..dad15ee0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-funcsigs_1.0.2.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2+"
+DESCRPTION = " \
+funcsigs is a backport of the `PEP 362`_ function signature features from \
+Python 3.3's `inspect`_ module. The backport is compatible with Python 2.6, \
+2.7 as well as 3.3 and up. 3.2 was supported by version 0.4, but with \
+setuptools and pip no longer supporting 3.2, we cannot make any statement \
+about 3.2 compatibility. \
+"
+
+HOMEPAGE = "http://funcsigs.readthedocs.org"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d6bc91dc8e5793892189fe7481a2d354"
+
+SRC_URI[md5sum] = "7e583285b1fb8a76305d6d68f4ccc14e"
+SRC_URI[sha256sum] = "a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"
+
+inherit pypi setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-functools32_3.2.3-2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-functools32_3.2.3-2.bb
new file mode 100644
index 00000000..cb4bba49
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-functools32_3.2.3-2.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Backport of the functools module from Python 3.2.3 for use on 2.7 and PyPy."
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=27cf2345969ed18e6730e90fb0063a10"
+
+SRC_URI[md5sum] = "09f24ffd9af9f6cd0f63cb9f4e23d4b2"
+SRC_URI[sha256sum] = "f6253dfbe0538ad2e387bd8fdfd9293c925d63553f5813c4e587745416501e6d"
+
+inherit pypi setuptools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-future.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-future.inc
new file mode 100644
index 00000000..22475618
--- /dev/null
+++ b/external/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=3f457538b297bd0ef86564b8ac216ad7"
+
+SRC_URI[md5sum] = "3e8e88a2bda48d54b1da7634d04760d7"
+SRC_URI[sha256sum] = "e39ced1ab767b5936646cedba8bcce582398233d6a627067d4c6a454c90cfedb"
+
+PYPI_PACKAGE_HASH = "99abde815842bc6e97d5a7806ad51236630da14ca2f3b1fce94c0bb94d3d"
+
+inherit pypi
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-future_0.16.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-future_0.16.0.bb
new file mode 100644
index 00000000..d95e1ba7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-future_0.16.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-future.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-gdata_2.0.18.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-gdata_2.0.18.bb
new file mode 100644
index 00000000..897581f1
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-gdata_2.0.18.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Google Data APIs Python Client Library"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.txt;md5=4c8f0e6846e52a7fe4943acf462d808d"
+HOMEPAGE = "http://code.google.com/p/gdata-python-client/"
+
+SRC_URI[md5sum] = "13b6e6dd8f9e3e9a8e005e05a8329408"
+SRC_URI[sha256sum] = "56e7d22de819c22b13ceb0fe1869729b4287f89ebbd4bb55380d7bcf61a1fdb6"
+
+S = "${WORKDIR}/gdata.py-${PV}"
+
+inherit pypi distutils
+
+FILES_${PN} += "${datadir}"
+
+RDEPENDS_${PN} = " \
+ ${PYTHON_PN}-distutils \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-xml \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc
new file mode 100644
index 00000000..13513f21
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc
@@ -0,0 +1,33 @@
+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=5966cd2c6582656d28ab3c33da3860f8 \
+ 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 \
+"
+
+SRC_URI[md5sum] = "7f0baf355384fe5ff2ecf66853422554"
+SRC_URI[sha256sum] = "4791c8ae9c57d6f153354736e1ccab1e2baf6c8d9ae5a77a9ac90f41e2966b2d"
+
+# 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/external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/libev-conf.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/libev-conf.patch
new file mode 100644
index 00000000..79c1867b
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent_1.2.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent_1.2.2.bb
new file mode 100644
index 00000000..f13bfd7b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-gevent_1.2.2.bb
@@ -0,0 +1,4 @@
+require python-gevent.inc
+inherit setuptools
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet.inc
new file mode 100644
index 00000000..fcd81f6c
--- /dev/null
+++ b/external/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] = "a87b6028c3b742b210bf5973939db595"
+SRC_URI[sha256sum] = "f1cc268a15ade58d9a0c04569fe6613e19b8b0345b64453064e2c3c6d79051af"
+
+inherit pypi
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet_0.4.14.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet_0.4.14.bb
new file mode 100644
index 00000000..c14976ed
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet_0.4.14.bb
@@ -0,0 +1,2 @@
+inherit distutils
+require python-greenlet.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools.inc
new file mode 100644
index 00000000..91cc62f4
--- /dev/null
+++ b/external/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 = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9"
+
+inherit pypi
+
+SRC_URI[md5sum] = "b2fabfb54c7824c1e49a02de2aa6628e"
+SRC_URI[sha256sum] = "4ce5aa660d7884f23aac1eafa93b97a4c3e2b512edff871e91fdb6ee86ebd5ea"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools_1.14.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools_1.14.1.bb
new file mode 100644
index 00000000..5b19bebf
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools_1.14.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-grpcio-tools.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio.inc
new file mode 100644
index 00000000..23d25f7a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "Google gRPC"
+HOMEPAGE = "http://www.grpc.io/"
+SECTION = "devel/python"
+
+DEPENDS_append = "${PYTHON_PN}-protobuf"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-grpcio:"
+SRC_URI_append_class-target = " file://0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch "
+
+RDEPENDS_${PN} = "${PYTHON_PN}-protobuf \
+ ${PYTHON_PN}-setuptools \
+ ${PYTHON_PN}-six \
+"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9"
+
+inherit pypi
+
+SRC_URI[md5sum] = "0987ae2e47b5103de3cacc437874a3c5"
+SRC_URI[sha256sum] = "4bf23666e763ca7ff6010465864e9f088f4ac7ecc1e11abd6f85b250e66b2c05"
+
+CLEANBROKEN = "1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch
new file mode 100644
index 00000000..996597b1
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch
@@ -0,0 +1,42 @@
+From b02be74a2eff8abc612ef84f30e0fbce6a7f65f5 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>
+---
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: grpcio-1.14.1/setup.py
+===================================================================
+--- grpcio-1.14.1.orig/setup.py
++++ grpcio-1.14.1/setup.py
+@@ -123,7 +123,7 @@ ENABLE_DOCUMENTATION_BUILD = os.environ.
+ EXTRA_ENV_COMPILE_ARGS = os.environ.get('GRPC_PYTHON_CFLAGS', None)
+ EXTRA_ENV_LINK_ARGS = os.environ.get('GRPC_PYTHON_LDFLAGS', None)
+ if EXTRA_ENV_COMPILE_ARGS is None:
+- EXTRA_ENV_COMPILE_ARGS = ' -std=c++11'
++ EXTRA_ENV_COMPILE_ARGS = ""
+ if 'win32' in sys.platform and sys.version_info < (3, 5):
+ EXTRA_ENV_COMPILE_ARGS += ' -D_hypot=hypot'
+ # We use define flags here and don't directly add to DEFINE_MACROS below to
+@@ -135,7 +135,7 @@ if EXTRA_ENV_COMPILE_ARGS is None:
+ else:
+ EXTRA_ENV_COMPILE_ARGS += ' -D_ftime=_ftime64 -D_timeb=__timeb64'
+ elif "linux" in sys.platform:
+- EXTRA_ENV_COMPILE_ARGS += ' -std=gnu99 -fvisibility=hidden -fno-wrapv -fno-exceptions'
++ EXTRA_ENV_COMPILE_ARGS += ' -fvisibility=hidden -fno-wrapv -fno-exceptions'
+ elif "darwin" in sys.platform:
+ EXTRA_ENV_COMPILE_ARGS += ' -fvisibility=hidden -fno-wrapv -fno-exceptions'
+ EXTRA_ENV_COMPILE_ARGS += ' -DPB_FIELD_16BIT'
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio_1.14.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio_1.14.1.bb
new file mode 100644
index 00000000..820bea44
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio_1.14.1.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-grpcio.inc
+
+RDEPENDS_${PN} += " python-enum34 \
+ python-futures \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc
new file mode 100644
index 00000000..0eb8bf32
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc
@@ -0,0 +1,15 @@
+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 \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib_1.0.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib_1.0.1.bb
new file mode 100644
index 00000000..f5941a2a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib_1.0.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-html5lib.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-humanize.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-humanize.inc
new file mode 100644
index 00000000..17a3449e
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-humanize_0.5.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-humanize_0.5.1.bb
new file mode 100644
index 00000000..57693093
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-humanize_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-humanize.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink.inc
new file mode 100644
index 00000000..78e3ee83
--- /dev/null
+++ b/external/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] = "f01b4ff744f14bc5d0a22a6b9f1525ab7d6312cb0ff967f59414bbac52f0a306"
+SRC_URI[md5sum] = "f41a96779b324d824864696a94b24823"
+
+inherit pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-stringold ${PYTHON_PN}-netclient"
+
+PACKAGES =. "${PN}-test "
+
+FILES_${PN}-test += " \
+ ${PYTHON_SITEPACKAGES_DIR}/hyperlinkt/test \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink_18.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink_18.0.0.bb
new file mode 100644
index 00000000..59a9a5c8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink_18.0.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-hyperlink.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-idna.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-idna.inc
new file mode 100644
index 00000000..519812dd
--- /dev/null
+++ b/external/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] = "0e5bb69018ddef1b9d95f681182be82c"
+SRC_URI[sha256sum] = "684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-idna_2.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-idna_2.7.bb
new file mode 100644
index 00000000..2dcf72a2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-idna_2.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-idna.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch b/external/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 00000000..2575306b
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/allow.to.disable.some.features.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/allow.to.disable.some.features.patch
new file mode 100644
index 00000000..4960ed46
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/fix-freetype-includes.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/fix-freetype-includes.patch
new file mode 100644
index 00000000..9ecc63a0
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/python-imaging-CVE-2016-2533.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/python-imaging-CVE-2016-2533.patch
new file mode 100644
index 00000000..b01136f9
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/remove-host-libdir.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/remove-host-libdir.patch
new file mode 100644
index 00000000..028a51ad
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging_1.1.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging_1.1.7.bb
new file mode 100644
index 00000000..60dd7d0a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-imaging_1.1.7.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Python Imaging Library (PIL)"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README;beginline=92;endline=120;md5=c4371af4579f1e489cf881c1443dd4ec"
+DEPENDS = "freetype jpeg tiff"
+SRCNAME = "Imaging"
+PR = "r5"
+
+SRC_URI = "http://effbot.org/downloads/Imaging-${PV}.tar.gz \
+ file://0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch \
+ file://allow.to.disable.some.features.patch \
+ file://fix-freetype-includes.patch \
+ file://remove-host-libdir.patch \
+ file://python-imaging-CVE-2016-2533.patch \
+"
+
+SRC_URI[md5sum] = "fc14a54e1ce02a0225be8854bfba478e"
+SRC_URI[sha256sum] = "895bc7c2498c8e1f9b99938f1a40dc86b3f149741f105cf7c7bd2e0725405211"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+# There isn't enable/disable option, and lcms is in meta-oe, at least make it explicit when enabled
+# setup.py already has FIXME: add mechanism to explicitly *disable* the use of a library
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[lcms] = ",,lcms"
+
+inherit distutils
+
+do_compile() {
+ export STAGING_LIBDIR=${STAGING_LIBDIR}
+ export STAGING_INCDIR=${STAGING_INCDIR}
+ export LCMS_ENABLED=${@bb.utils.contains('PACKAGECONFIG', 'lcms', 'True', 'False', d)}
+ distutils_do_compile
+}
+
+do_install() {
+ export STAGING_LIBDIR=${STAGING_LIBDIR}
+ export STAGING_INCDIR=${STAGING_INCDIR}
+ export LCMS_ENABLED=${@bb.utils.contains('PACKAGECONFIG', 'lcms', 'True', 'False', d)}
+ distutils_do_install
+ install -d ${D}${datadir}/doc/${BPN}/html/
+ install -m 0644 ${S}/README ${D}${datadir}/doc/${BPN}/
+ install -m 0644 ${S}/Docs/* ${D}${datadir}/doc/${BPN}/html/
+
+ # get rid of #!/usr/local/bin/python
+ sed -i -e 's:/usr/local/bin/:${bindir}/env :g' ${D}${bindir}/*
+}
+
+RDEPENDS_${PN} += "python-lang python-stringold"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-incremental.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-incremental.inc
new file mode 100644
index 00000000..b63fac97
--- /dev/null
+++ b/external/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 nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-incremental_17.5.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-incremental_17.5.0.bb
new file mode 100644
index 00000000..139ac0c5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-incremental_17.5.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-incremental.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-inflection.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-inflection.inc
new file mode 100644
index 00000000..556b2682
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-inflection_0.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-inflection_0.3.1.bb
new file mode 100644
index 00000000..4a9d4979
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-inflection_0.3.1.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-inflection.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-codecs"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-intervals.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-intervals.inc
new file mode 100644
index 00000000..1ecca352
--- /dev/null
+++ b/external/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 = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9"
+
+PYPI_PACKAGE := "python-intervals"
+
+inherit pypi
+
+SRC_URI[md5sum] = "a35dd44269fdb134bf19cfd80cb2c120"
+SRC_URI[sha256sum] = "a8a15b7c2fadb8465310f44aa96e384828b35a29de38ac74738cd665924cb8ac"
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-intervals_1.5.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-intervals_1.5.4.bb
new file mode 100644
index 00000000..3c2a33bb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-intervals_1.5.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-intervals.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-ipaddress_1.0.22.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ipaddress_1.0.22.bb
new file mode 100644
index 00000000..66de8b63
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ipaddress_1.0.22.bb
@@ -0,0 +1,13 @@
+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"
+
+DEPENDS += "python-pip"
+
+SRC_URI[md5sum] = "74c1ce3109f30eaa1ab3dd342e7b76d4"
+SRC_URI[sha256sum] = "b146c751ea45cad6188dd6cf2d9b757f6f4f8d6ffb96a023e6f2e26eea02a72c"
+
+inherit pypi setuptools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc
new file mode 100644
index 00000000..61e9abba
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc
@@ -0,0 +1,13 @@
+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 \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601_0.1.12.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601_0.1.12.bb
new file mode 100644
index 00000000..c543cf9f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601_0.1.12.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-iso8601.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-isort.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-isort.inc
new file mode 100644
index 00000000..359b1801
--- /dev/null
+++ b/external/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] = "fb554e9c8f9aa76e333a03d470a5cf52"
+SRC_URI[sha256sum] = "b9c40e9750f3d77e6e4d441d8b0266cf555e7cdabdcff33c4fd06366ca761ef8"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-isort_4.3.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-isort_4.3.4.bb
new file mode 100644
index 00000000..fa46d89b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-isort_4.3.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-isort.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous.inc
new file mode 100644
index 00000000..84f9e774
--- /dev/null
+++ b/external/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;md5=b61841e2bf5f07884148e2a6f1bcab0c"
+
+SRC_URI[md5sum] = "a3d55aa79369aef5345c036a8a26307f"
+SRC_URI[sha256sum] = "cbb3fcf8d3e33df861709ecaf89d9e6629cff0a217bc2848f1b41cd30d360519"
+
+CLEANBROKEN = "1"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-simplejson \
+ ${PYTHON_PN}-netclient \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous_0.24.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous_0.24.bb
new file mode 100644
index 00000000..8c99cb4c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous_0.24.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-itsdangerous.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-zlib \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3.inc
new file mode 100644
index 00000000..a0e802ca
--- /dev/null
+++ b/external/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://javaobj.py;beginline=21;endline=33;md5=8b504419ce78f8133b21b4d4a89ef7e9"
+
+SRC_URI[md5sum] = "f669bb8099380e3dd84db3d542aa5b68"
+SRC_URI[sha256sum] = "b8b0d310fd97e1c7914d7911ee9d3f4b3d84d2a674aa95a4b0da3d8f155fc1bb"
+
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3_0.2.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3_0.2.4.bb
new file mode 100644
index 00000000..ed34740e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3_0.2.4.bb
@@ -0,0 +1,2 @@
+require python-javaobj-py3.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2.inc
new file mode 100644
index 00000000..0c0bf0de
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2.inc
@@ -0,0 +1,15 @@
+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;md5=20c831f91dd3bd486020f672ba2be386"
+
+PYPI_PACKAGE = "Jinja2"
+
+SRC_URI[md5sum] = "61ef1117f945486472850819b8d1eb3d"
+SRC_URI[sha256sum] = "f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-io ${PYTHON_PN}-pickle ${PYTHON_PN}-crypt \
+ ${PYTHON_PN}-math ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-pprint ${PYTHON_PN}-shell ${PYTHON_PN}-markupsafe \
+ ${PYTHON_PN}-json ${PYTHON_PN}-threading ${PYTHON_PN}-numbers"
+
+CLEANBROKEN = "1"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2_2.10.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2_2.10.bb
new file mode 100644
index 00000000..5233cf40
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2_2.10.bb
@@ -0,0 +1,8 @@
+inherit pypi setuptools
+require python-jinja2.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-lang \
+ ${PYTHON_PN}-re \
+ ${PYTHON_PN}-textutils \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch.inc
new file mode 100644
index 00000000..409c09ad
--- /dev/null
+++ b/external/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"
+LIC_FILES_CHKSUM = "file://COPYING;md5=32b15c843b7a329130f4e266a281ebb3"
+
+inherit pypi
+
+SRC_URI[md5sum] = "83c4c9faccb4a2ff8c1db80cbddc590d"
+SRC_URI[sha256sum] = "49f29cab70e9068db3b1dc6b656cbe2ee4edf7dfe9bf5a0055f17a4b6804a4b9"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-json ${PYTHON_PN}-jsonpointer ${PYTHON_PN}-netclient ${PYTHON_PN}-stringold"
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch_1.23.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch_1.23.bb
new file mode 100644
index 00000000..90cd3180
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch_1.23.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-jsonpatch.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc
new file mode 100644
index 00000000..4ed01ed6
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Resolve JSON Pointers in Python"
+HOMEPAGE = "https://github.com/stefankoegl/python-json-pointer"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=32b15c843b7a329130f4e266a281ebb3"
+
+inherit pypi
+
+SRC_URI[md5sum] = "741b98d0e693b08b5e44e0a9da5a7bb7"
+SRC_URI[sha256sum] = "c192ba86648e05fdae4f08a17ec25180a9aef5008d973407b581798a83975362"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-json \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer_2.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer_2.0.bb
new file mode 100644
index 00000000..e13a776a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer_2.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-jsonpointer.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc
new file mode 100644
index 00000000..6fdc0249
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc
@@ -0,0 +1,24 @@
+SUMMARY = "An implementation of JSON Schema validation for Python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8"
+
+SRC_URI[md5sum] = "50c6b69a373a8b55ff1e0ec6e78f13f4"
+SRC_URI[sha256sum] = "6ff5f3180870836cae40f06fa10419f557208175f13ad7bc26caa77beb1f6e02"
+
+DEPENDS += "${PYTHON_PN}-vcversioner-native"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-pkgutil \
+ ${PYTHON_PN}-pprint \
+ ${PYTHON_PN}-rfc3987 \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-strict-rfc3339 \
+ ${PYTHON_PN}-unittest \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema_2.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema_2.6.0.bb
new file mode 100644
index 00000000..b677c646
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema_2.6.0.bb
@@ -0,0 +1,12 @@
+inherit pypi setuptools
+require python-jsonschema.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-argparse \
+ ${PYTHON_PN}-contextlib \
+ ${PYTHON_PN}-functools32 \
+ ${PYTHON_PN}-lang \
+ ${PYTHON_PN}-re \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-textutils \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc
new file mode 100644
index 00000000..83d2ea3c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc
@@ -0,0 +1,10 @@
+SUMMARY = "A fast and thorough lazy object proxy"
+HOMEPAGE = "https://python-lazy-object-proxy.readthedocs.io/"
+LICENSE = "BSD"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ec680df42d8ad56427a83308817658cc"
+
+SRC_URI[md5sum] = "e128152b76eb5b9ba759504936139fd0"
+SRC_URI[sha256sum] = "eb91be369f945f10d3a49f5f9be8b3d0b93a4c2be8f8a5b83b0571b8123e0a7a"
+
+inherit pypi
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy_1.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy_1.3.1.bb
new file mode 100644
index 00000000..df4d60bf
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy_1.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-lazy-object-proxy.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-linecache2_1.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-linecache2_1.0.0.bb
new file mode 100644
index 00000000..386da2da
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-linecache2_1.0.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A backport of linecache to older supported Pythons"
+HOMEPAGE = "https://github.com/testing-cabal/linecache2"
+LICENSE = "Python-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=19;endline=19;md5=368ddc8588431c180ae7c33f4fb57519"
+
+DEPENDS = "${PYTHON_PN}-pbr-native"
+
+SRC_URI[md5sum] = "7b25d0289ec36bff1f9e63c4329ce65c"
+SRC_URI[sha256sum] = "4b26ff4e7110db76eeb6f5a7b64a82623839d595c2038eeda662f2a2db78e97c"
+
+inherit pypi setuptools
+
+CLEAN_BROKEN = "1"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-lockfile_0.12.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-lockfile_0.12.2.bb
new file mode 100644
index 00000000..9ad865d4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-lockfile_0.12.2.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Platform-independent file locking module"
+HOMEPAGE = "http://launchpad.net/pylockfile"
+SECTION = "devel/python"
+
+RDEPENDS_${PN} = "python-threading"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit pypi setuptools
+
+SRC_URI[md5sum] = "a6a1a82957a23afdf44cfdd039b65ff9"
+SRC_URI[sha256sum] = "6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"
+
+# Satisfy setup.py 'setup_requires'
+DEPENDS += " \
+ python-pbr-native \
+ "
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc
new file mode 100644
index 00000000..7f355a7b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc
@@ -0,0 +1,43 @@
+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=939e7430ce85e1242ff50c4ee9430752 \
+ 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] = "31239400ca4e130b69993bb3c14204b3"
+SRC_URI[sha256sum] = "e2afbe403090f5893e254958d02875e0732975e73c4c0cdd33c1f009a61963ca"
+
+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
+
+do_configure_prepend() {
+ sed -i -e 's/--version/--modversion/' ${B}/setupinfo.py
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} += "libxml2 libxslt ${PYTHON_PN}-compression"
+RDEPENDS_${PN}_class-native = "libxml2-native libxslt-native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-lxml_4.2.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-lxml_4.2.4.bb
new file mode 100644
index 00000000..81ccb12d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-lxml_4.2.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-lxml.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto.inc
new file mode 100644
index 00000000..a36ab8a7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto.inc
@@ -0,0 +1,54 @@
+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-typing"
+
+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/' > 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}\./" "$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}\./" "$i"
+ done
+ fi
+}
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch b/external/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 00000000..b339d93f
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch
new file mode 100644
index 00000000..4b64f461
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch
new file mode 100644
index 00000000..7f6dd29f
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto_0.30.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto_0.30.1.bb
new file mode 100644
index 00000000..c612fcdc
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto_0.30.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-m2crypto.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-mako.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-mako.inc
new file mode 100644
index 00000000..a9fa5563
--- /dev/null
+++ b/external/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=1bb21fa2d2f7a534c884b990430a6863"
+
+PYPI_PACKAGE = "Mako"
+
+inherit pypi
+
+SRC_URI[md5sum] = "5836cc997b1b773ef389bf6629c30e65"
+SRC_URI[sha256sum] = "4e02fde57bd4abb5ec400181e4c314f56ac3e49ba4fb8b0d50bba18cb27d25ae"
+
+RDEPENDS_${PN} = " \
+ ${PYTHON_PN}-html \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-mako_1.0.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-mako_1.0.7.bb
new file mode 100644
index 00000000..3372eeb2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-mako_1.0.7.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-mako.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc
new file mode 100644
index 00000000..927f8445
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc
@@ -0,0 +1,12 @@
+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;md5=c6d1adcf45d69359f256c1cea3254127"
+
+SRC_URI[md5sum] = "2fcedc9284d50e577b5192e8e3578355"
+SRC_URI[sha256sum] = "a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665"
+
+PYPI_PACKAGE = "MarkupSafe"
+inherit pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-stringold"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe_1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe_1.0.bb
new file mode 100644
index 00000000..05bbe8a3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe_1.0.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-markupsafe.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re"
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib/fix_setupext.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib/fix_setupext.patch
new file mode 100644
index 00000000..21b9094a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib/fix_setupext.patch
@@ -0,0 +1,110 @@
+This fixes the numpy import problem in setupext.py using a hard-coded path.
+
+Index: matplotlib-2.0.2/setupext.py
+===================================================================
+--- matplotlib-2.0.2.orig/setupext.py
++++ matplotlib-2.0.2/setupext.py
+@@ -148,6 +148,7 @@ def has_include_file(include_dirs, filen
+ Returns `True` if `filename` can be found in one of the
+ directories in `include_dirs`.
+ """
++ return True
+ if sys.platform == 'win32':
+ include_dirs += os.environ.get('INCLUDE', '.').split(';')
+ for dir in include_dirs:
+@@ -172,7 +173,7 @@ def get_base_dirs():
+ Returns a list of standard base directories on this platform.
+ """
+ if options['basedirlist']:
+- return options['basedirlist']
++ return [os.environ['STAGING_LIBDIR']]
+
+ basedir_map = {
+ 'win32': ['win32_static', ],
+@@ -260,14 +261,6 @@ def make_extension(name, files, *args, *
+ `distutils.core.Extension` constructor.
+ """
+ ext = DelayedExtension(name, files, *args, **kwargs)
+- for dir in get_base_dirs():
+- include_dir = os.path.join(dir, 'include')
+- if os.path.exists(include_dir):
+- ext.include_dirs.append(include_dir)
+- for lib in ('lib', 'lib64'):
+- lib_dir = os.path.join(dir, lib)
+- if os.path.exists(lib_dir):
+- ext.library_dirs.append(lib_dir)
+ ext.include_dirs.append('.')
+
+ return ext
+@@ -314,6 +307,7 @@ class PkgConfig(object):
+ " matplotlib may not be able to find some of its dependencies")
+
+ def set_pkgconfig_path(self):
++ return
+ pkgconfig_path = sysconfig.get_config_var('LIBDIR')
+ if pkgconfig_path is None:
+ return
+@@ -875,14 +869,14 @@ class Numpy(SetupPackage):
+ reload(numpy)
+
+ ext = Extension('test', [])
+- ext.include_dirs.append(numpy.get_include())
++ ext.include_dirs.append(os.path.join(os.environ['STAGING_LIBDIR'], 'python2.7/site-packages/numpy/core/include/'))
+ if not has_include_file(
+ ext.include_dirs, os.path.join("numpy", "arrayobject.h")):
+ warnings.warn(
+ "The C headers for numpy could not be found. "
+ "You may need to install the development package")
+
+- return [numpy.get_include()]
++ return [os.path.join(os.environ['STAGING_LIBDIR'], 'python2.7/site-packages/numpy/core/include/')]
+
+ def check(self):
+ min_version = extract_versions()['__version__numpy__']
+Index: matplotlib-2.0.2/setup.py
+===================================================================
+--- matplotlib-2.0.2.orig/setup.py
++++ matplotlib-2.0.2/setup.py
+@@ -66,28 +66,6 @@ mpl_packages = [
+ setupext.Python(),
+ setupext.Platform(),
+ 'Required dependencies and extensions',
+- setupext.Numpy(),
+- setupext.Six(),
+- setupext.Dateutil(),
+- setupext.FuncTools32(),
+- setupext.Subprocess32(),
+- setupext.Pytz(),
+- setupext.Cycler(),
+- setupext.Tornado(),
+- setupext.Pyparsing(),
+- setupext.LibAgg(),
+- setupext.FreeType(),
+- setupext.FT2Font(),
+- setupext.Png(),
+- setupext.Qhull(),
+- setupext.Image(),
+- setupext.TTConv(),
+- setupext.Path(),
+- setupext.ContourLegacy(),
+- setupext.Contour(),
+- setupext.Delaunay(),
+- setupext.QhullWrap(),
+- setupext.Tri(),
+ 'Optional subpackages',
+ setupext.SampleData(),
+ setupext.Toolkits(),
+@@ -100,13 +78,8 @@ mpl_packages = [
+ setupext.BackendMacOSX(),
+ setupext.BackendQt5(),
+ setupext.BackendQt4(),
+- setupext.BackendGtk3Agg(),
+ setupext.BackendGtk3Cairo(),
+- setupext.BackendGtkAgg(),
+- setupext.BackendTkAgg(),
+- setupext.BackendWxAgg(),
+ setupext.BackendGtk(),
+- setupext.BackendAgg(),
+ setupext.BackendCairo(),
+ setupext.Windowing(),
+ 'Optional LaTeX dependencies',
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib_2.0.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib_2.0.2.bb
new file mode 100644
index 00000000..5b1c3f05
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib_2.0.2.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "matplotlib is a python 2D plotting library which produces publication quality figures in a variety of hardcopy formats"
+SECTION = "devel/python"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE/LICENSE;md5=afec61498aa5f0c45936687da9a53d74"
+
+DEPENDS += "python-numpy freetype libpng python-dateutil python-pytz"
+RDEPENDS_${PN} = "python-core python-distutils python-numpy freetype libpng python-dateutil python-pytz"
+
+SRC_URI = "https://github.com/matplotlib/matplotlib/archive/v${PV}.tar.gz \
+ file://fix_setupext.patch \
+"
+SRC_URI[md5sum] = "89717c1ef3c6fdcd6fb1f3b597a4858c"
+SRC_URI[sha256sum] = "aebed23921562792b68b8ca355de5abc176af4424f1987e2fa95f65e5c5e7e89"
+S = "${WORKDIR}/matplotlib-${PV}"
+EXTRA_OECONF = "--disable-docs"
+
+inherit setuptools pkgconfig
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe/0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe/0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch
new file mode 100644
index 00000000..941bed3d
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe_0.4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe_0.4.0.bb
new file mode 100644
index 00000000..6b63cd78
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe_0.4.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "McCabe checker, plugin for flake8"
+HOMEPAGE = "https://github.com/dreamhost/cliff"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.rst;md5=f8b50fba1711ecac6bcdb6324f85a66d"
+
+SRC_URI += " \
+ file://0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch \
+"
+
+SRC_URI[md5sum] = "8c425db05f310adcd4bb174b991f26f5"
+SRC_URI[sha256sum] = "9a2b12ebd876e77c72e41ebf401cc2e7c5b566649d50105ca49822688642207b"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += " \
+ python-prettytable \
+ python-cmd2 \
+ python-pyparsing"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-mock_2.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-mock_2.0.0.bb
new file mode 100644
index 00000000..210502ff
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-mock_2.0.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A Python Mocking and Patching Library for Testing"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=de9dfbf780446b18aab11f00baaf5b7e"
+
+SRC_URI[md5sum] = "0febfafd14330c9dcaa40de2d82d40ad"
+SRC_URI[sha256sum] = "b158b6df76edd239b8208d481dc46b6afd45a846b7812ff0ce58971cf5bc8bba"
+
+inherit pypi setuptools
+
+DEPENDS += " \
+ python-pbr-native"
+
+RDEPENDS_${PN} += " \
+ python-prettytable \
+ python-cmd2 \
+ python-pyparsing \
+ python-mccabe \
+ python-pep8 \
+ python-pyflakes \
+ python-pbr \
+ python-funcsigs \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-monotonic_1.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-monotonic_1.5.bb
new file mode 100644
index 00000000..01e7b1ca
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-monotonic_1.5.bb
@@ -0,0 +1,10 @@
+SUMMARY = "An implementation of time.monotonic() for Python 2.0 through 3.2"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
+
+SRC_URI[md5sum] = "9f81cb0e5966479754453dea2b6822f4"
+SRC_URI[sha256sum] = "23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "${PYTHON_PN}-ctypes ${PYTHON_PN}-io ${PYTHON_PN}-re ${PYTHON_PN}-threading"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack.inc
new file mode 100644
index 00000000..fdc89261
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack.inc
@@ -0,0 +1,13 @@
+SUMMARY = "MessagePack (de)serializer"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=cd9523181d9d4fbf7ffca52eaa2a5751"
+
+SRC_URI[md5sum] = "6d644c06a87a5a111bbbf5b34b4be440"
+SRC_URI[sha256sum] = "378cc8a6d3545b532dfd149da715abae4fda2a3adb6d74e525d0d5e51f46909b"
+
+PYPI_PACKAGE = "msgpack-python"
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-io \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack_0.5.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack_0.5.6.bb
new file mode 100644
index 00000000..2c2c8f2a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack_0.5.6.bb
@@ -0,0 +1,2 @@
+require python-msgpack.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient.inc
new file mode 100644
index 00000000..91235b96
--- /dev/null
+++ b/external/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"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient_0.5.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient_0.5.1.bb
new file mode 100644
index 00000000..9cd881a3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient_0.5.1.bb
@@ -0,0 +1,6 @@
+require python-ndg-httpsclient.inc
+inherit pypi setuptools update-alternatives
+
+ALTERNATIVE_${PN} = "ndg_httpclient"
+ALTERNATIVE_LINK_NAME[ndg_httpclient] = "${bindir}/ndg_httpclient"
+ALTERNATIVE_PRIORITY = "20"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc
new file mode 100644
index 00000000..5b6d4dff
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc
@@ -0,0 +1,13 @@
+SUMMARY = "A network address manipulation library for Python."
+LICENSE = "BSD"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr_0.7.19.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr_0.7.19.bb
new file mode 100644
index 00000000..ca5a79a7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr_0.7.19.bb
@@ -0,0 +1,6 @@
+require python-netaddr.inc
+inherit setuptools
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-textutils \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-networkx_2.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-networkx_2.1.bb
new file mode 100644
index 00000000..bc0c6863
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-networkx_2.1.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Python package for creating and manipulating graphs and networks"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3376ff7c9c58048c62d91431f7f08cde"
+
+SRC_URI[md5sum] = "4a2c2a62dfc46ba7d594daca7c834995"
+SRC_URI[sha256sum] = "64272ca418972b70a196cb15d9c85a5a6041f09a2f32e0d30c0255f25d458bb1"
+
+PYPI_PACKAGE_EXT = "zip"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "python-2to3"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-numeric/0001-it-tries-to-define-this-function-differently-than-it.patch b/external/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 00000000..81ed744c
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-numeric_24.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-numeric_24.2.bb
new file mode 100644
index 00000000..c91d77c8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-numeric_24.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "A sophisticated Numeric Processing Package for Python"
+SECTION = "devel/python"
+LICENSE = "PSF & LLNL"
+LIC_FILES_CHKSUM = "file://Legal.htm;md5=e3ce75dedd4043918d15979ae43e312e"
+
+PR = "ml3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/numpy/Numeric-${PV}.tar.gz \
+ file://0001-it-tries-to-define-this-function-differently-than-it.patch \
+"
+S = "${WORKDIR}/Numeric-${PV}"
+
+inherit distutils
+
+SRC_URI[md5sum] = "2ae672656e06716a149acb048cca3093"
+SRC_URI[sha256sum] = "5f72e729eb6ff57442f2a38bfc9931738b59e5077928e2e70d22b4610ff15258"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib.inc
new file mode 100644
index 00000000..c5de8a09
--- /dev/null
+++ b/external/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"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib_2.0.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib_2.0.6.bb
new file mode 100644
index 00000000..4329d21a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib_2.0.6.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-oauthlib.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re ${PYTHON_PN}-lang"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt.inc
new file mode 100644
index 00000000..f834e6fd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt.inc
@@ -0,0 +1,21 @@
+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
+SRC_URI[md5sum] = "2cc27d8b369700b1fc99325add0dadd2"
+SRC_URI[sha256sum] = "31911f6031de306c27ed79dc77b690d7c55b0dcb0f0434ca34ec6361d0371122"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt_1.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt_1.3.1.bb
new file mode 100644
index 00000000..a1031176
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt_1.3.1.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-paho-mqtt.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pam_1.8.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pam_1.8.2.bb
new file mode 100644
index 00000000..60a3b43d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pam_1.8.2.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Python PAM module using ctypes, py3/py2."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=64326d42471b493c5c088305364ad5da"
+
+SRC_URI[md5sum] = "db71b6b999246fb05d78ecfbe166629d"
+SRC_URI[sha256sum] = "26efe4e79b869b10f97cd8c4a6bbb04a4e54d41186364e975b4108c9c071812c"
+
+PYPI_PACKAGE = "python-pam"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "libpam"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "pam"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pandas.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pandas.inc
new file mode 100644
index 00000000..d6ca2431
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pandas.inc
@@ -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] = "7b597c7f989652e0c9af5f09a157e3ae"
+SRC_URI[sha256sum] = "5b24ca47acf69222e82530e89111dd9d14f9b970ab2cd3a1c2c78f0c4fbba4f4"
+
+inherit pypi
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pandas_0.23.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pandas_0.23.4.bb
new file mode 100644
index 00000000..b3bfab96
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pandas_0.23.4.bb
@@ -0,0 +1,7 @@
+inherit setuptools
+require python-pandas.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-future \
+ ${PYTHON_PN}-json \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type.inc
new file mode 100644
index 00000000..4549ec98
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type.inc
@@ -0,0 +1,12 @@
+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
+
+RDEPENDS_${PN} += "${PYTHON_PN}-parse"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type_0.4.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type_0.4.2.bb
new file mode 100644
index 00000000..8e10e801
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type_0.4.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-parse-type.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse.inc
new file mode 100644
index 00000000..fa55a93c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse.inc
@@ -0,0 +1,14 @@
+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=1273;endline=1291;md5=5147afdd9b3615290ad8733f0137a1a1"
+
+SRC_URI[md5sum] = "fa69ab2fe846f9b183411391f7c6897b"
+SRC_URI[sha256sum] = "c3cdf6206f22aeebfa00e5b954fcfea13d1b2dc271c75806b6025b94fb490939"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-logging \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse_1.8.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse_1.8.4.bb
new file mode 100644
index 00000000..d31ccc72
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-parse_1.8.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-parse.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-passlib.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-passlib.inc
new file mode 100644
index 00000000..9e477ecf
--- /dev/null
+++ b/external/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"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=73eed1a5470b969951dac411086c7036"
+
+SRC_URI[md5sum] = "254869dae3fd9f09f0746a3cb29a0b15"
+SRC_URI[sha256sum] = "3d948f64138c25633613f303bcc471126eae67c04d5e3f6b7b8ce6242f8653e0"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-crypt \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-netclient \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-passlib_1.7.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-passlib_1.7.1.bb
new file mode 100644
index 00000000..11c598a0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-passlib_1.7.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-passlib.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-paste_2.0.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-paste_2.0.3.bb
new file mode 100644
index 00000000..6b4019f8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-paste_2.0.3.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Tools for using a Web Server Gateway Interface stack"
+HOMEPAGE = "http://pythonpaste.org/"
+LICENSE = "MIT"
+RDEPENDS_${PN} = "python-six"
+
+LIC_FILES_CHKSUM = "file://docs/license.txt;md5=1798f29d55080c60365e6283cb49779c"
+
+SRC_URI[md5sum] = "1231e14eae62fa7ed76e9130b04bc61e"
+SRC_URI[sha256sum] = "2346a347824c32641bf020c17967b49ae74d3310ec1bc9b958d4b84e2d985218"
+
+PYPI_PACKAGE = "Paste"
+inherit pypi setuptools
+
+FILES_${PN} += "/usr/lib/*"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pbr_4.2.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pbr_4.2.0.bb
new file mode 100644
index 00000000..a4b56cdb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pbr_4.2.0.bb
@@ -0,0 +1,3 @@
+inherit setuptools
+# The inc file is in oe-core
+require recipes-devtools/python/python-pbr.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pep8_1.7.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pep8_1.7.1.bb
new file mode 100644
index 00000000..54ce9781
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pep8_1.7.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Python style guide checker"
+HOMEPAGE = "https://github.com/dreamhost/cliff"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.rst;md5=d8ebbbe831259ce010179d2f310b0f3e"
+
+SRC_URI[md5sum] = "603821d06db945c71d811b5a8d78423c"
+SRC_URI[sha256sum] = "fe249b52e20498e59e0b5c5256aa52ee99fc295b26ec9eaa85776ffdb9fe6374"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += " \
+ python-prettytable \
+ python-cmd2 \
+ python-pyparsing"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-periphery.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-periphery.inc
new file mode 100644
index 00000000..539c3579
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-periphery.inc
@@ -0,0 +1,7 @@
+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=063846af82b555d48822cf43dc6db6af"
+
+PYPI_PACKAGE = "python-periphery" \ No newline at end of file
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-periphery_1.1.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-periphery_1.1.1.bb
new file mode 100644
index 00000000..6ae7fed8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-periphery_1.1.1.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools
+require python-periphery.inc
+
+SRC_URI[sha256sum] = "fe8f351934edce72cd919b4eb070878ebff551db5e21aea61e0f446101f0a79f" \ No newline at end of file
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc
new file mode 100644
index 00000000..efeab831
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc
@@ -0,0 +1,21 @@
+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[md5sum] = "d4f3372965a996238d57d19b95d2e03a"
+SRC_URI[sha256sum] = "2a8e88259839571d1251d278476f3eec5db26deb73a70be5ed5dc5435e418aba"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect_4.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect_4.6.0.bb
new file mode 100644
index 00000000..1c46b47a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect_4.6.0.bb
@@ -0,0 +1,2 @@
+require python-pexpect.inc
+inherit pypi setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pint.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pint.inc
new file mode 100644
index 00000000..53f77839
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pint.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "Interval arithmetic for Python"
+HOMEPAGE = "https://github.com/AlexandreDecan/python-intervals"
+SECTION = "devel/python"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9"
+
+PYPI_PACKAGE := "Pint"
+
+inherit pypi
+
+SRC_URI[md5sum] = "e1f80f3f8fc4e61f68ad3912db26b3a8"
+SRC_URI[sha256sum] = "afcf31443a478c32bbac4b00337ee9026a13d0e2ac83d30c79151462513bb0d4"
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pint_0.8.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pint_0.8.1.bb
new file mode 100644
index 00000000..480f0887
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pint_0.8.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pint.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pip_18.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pip_18.0.bb
new file mode 100644
index 00000000..6b943b00
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pip_18.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "PIP is a tool for installing and managing Python packages"
+HOMEPAGE = "https://pip.pypa.io/"
+LICENSE = "MIT & LGPL-2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=593c6cd9d639307226978cbcae61ad4b"
+
+SRC_URI[md5sum] = "52f75ceb21e96c258f289859a2996b60"
+SRC_URI[sha256sum] = "a0e11645ee37c90b40c46d607070c4fd583e2cd46231b1c06e389c5e814eed76"
+
+inherit pypi setuptools
+
+# Since PIP is like CPAN for PERL we need to drag in all python modules to ensure everything works
+RDEPENDS_${PN}_class-target = "python-modules python-distribute python-misc"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc
new file mode 100644
index 00000000..320359aa
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc
@@ -0,0 +1,9 @@
+SUMMARY = "Plugin and hook calling mechanisms for python"
+HOMEPAGE = "https://github.com/pytest-dev/pluggy"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=338dad807ed9337bfaeb9979c3bfe20f"
+
+SRC_URI[md5sum] = "ffdde7c3a5ba9a440404570366ffb6d5"
+SRC_URI[sha256sum] = "7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff"
+
+inherit pypi
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy_0.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy_0.6.0.bb
new file mode 100644
index 00000000..edcd4f51
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy_0.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pluggy.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-ply.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ply.inc
new file mode 100644
index 00000000..a744950b
--- /dev/null
+++ b/external/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"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-ply_3.11.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ply_3.11.bb
new file mode 100644
index 00000000..2b6165c5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ply_3.11.bb
@@ -0,0 +1,2 @@
+require python-ply.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pretend.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pretend.inc
new file mode 100644
index 00000000..b342aef5
--- /dev/null
+++ b/external/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"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=411780c0b7fa756753e94affeee5bc99"
+
+SRC_URI[md5sum] = "ad53883ede48aeac7ae584f0de0240e8"
+SRC_URI[sha256sum] = "c90eb810cde8ebb06dafcb8796f9a95228ce796531bc806e794c2f4649aa1b10"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pretend_1.0.9.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pretend_1.0.9.bb
new file mode 100644
index 00000000..73b8ed4d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pretend_1.0.9.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pretend.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-prettytable_0.7.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-prettytable_0.7.2.bb
new file mode 100644
index 00000000..406555ac
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-prettytable_0.7.2.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Python library for displaying tabular data in a ASCII table format"
+HOMEPAGE = "http://code.google.com/p/prettytable"
+LICENSE = "BSD"
+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}"
+
+inherit setuptools
+
+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"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-progress.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-progress.inc
new file mode 100644
index 00000000..9f00615c
--- /dev/null
+++ b/external/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] = "057981e2f09029288f5255b1ea3ab64d"
+SRC_URI[sha256sum] = "5e2f9da88ed8236a76fffbee3ceefd259589cf42dfbc2cec2877102189fae58a"
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-math \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-progress_1.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-progress_1.4.bb
new file mode 100644
index 00000000..80608627
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-progress_1.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-progress.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit.inc
new file mode 100644
index 00000000..1a4bd35c
--- /dev/null
+++ b/external/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"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b2cde7da89f0c1f3e49bf968d00d554f"
+
+SRC_URI[md5sum] = "8db8b8e40e91bc6dce133d8d5727a717"
+SRC_URI[sha256sum] = "ff58ce8bb82c11c43416dd3eec7701dcbe8c576e2d7649f1d2b9d21a2fd93808"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit_2.0.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit_2.0.4.bb
new file mode 100644
index 00000000..527c905a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit_2.0.4.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-prompt-toolkit.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc
new file mode 100644
index 00000000..b617904d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc
@@ -0,0 +1,31 @@
+DESCRIPTION = "Protocol Buffers"
+HOMEPAGE = "https://developers.google.com/protocol-buffers/"
+SECTION = "devel/python"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9"
+
+inherit pypi
+
+SRC_URI[md5sum] = "e2daef80e70249aa1f05363670c6b3f8"
+SRC_URI[sha256sum] = "1489b376b0f364bcc6f89519718c057eb191d7ad6f1b395ffd93d1aa45587811"
+
+# 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"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf_3.6.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf_3.6.1.bb
new file mode 100644
index 00000000..f04fc489
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf_3.6.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-protobuf.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc
new file mode 100644
index 00000000..67ae118b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc
@@ -0,0 +1,20 @@
+SUMMARY = "A cross-platform process and system utilities module for Python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0f02e99f7f3c9a7fe8ecfc5d44c2be62"
+
+SRC_URI[md5sum] = "200e073cdd56cc7a9ba9a06088569200"
+SRC_URI[sha256sum] = "686e5a35fe4c0acc25f3466c32e716f2d498aaae7b7edc03e2305b682226bcf6"
+
+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 \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-psutil_5.4.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-psutil_5.4.6.bb
new file mode 100644
index 00000000..9aabfb20
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-psutil_5.4.6.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-psutil.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc
new file mode 100644
index 00000000..49cc5a43
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc
@@ -0,0 +1,20 @@
+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 \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess_0.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess_0.6.0.bb
new file mode 100644
index 00000000..7ca45877
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess_0.6.0.bb
@@ -0,0 +1,2 @@
+require python-ptyprocess.inc
+inherit pypi setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-py.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-py.inc
new file mode 100644
index 00000000..8144523c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-py.inc
@@ -0,0 +1,10 @@
+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] = "5ccd0cd5373c55171cf9fd61b9f19a1b"
+SRC_URI[sha256sum] = "06a30435d058473046be836d3fc4f27167fd84c45b99704f2fb5509ef61f9af1"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-py_1.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-py_1.6.0.bb
new file mode 100644
index 00000000..5ad2c197
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-py_1.6.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-py.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio.inc
new file mode 100644
index 00000000..d150409a
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio_0.8.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio_0.8.4.bb
new file mode 100644
index 00000000..e5153421
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio_0.8.4.bb
@@ -0,0 +1,2 @@
+require python-pyalsaaudio.inc
+inherit pypi setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc
new file mode 100644
index 00000000..87dbd1d3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc
@@ -0,0 +1,16 @@
+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=815ac3f9ca693006349094b358ab3155"
+
+SRC_URI[md5sum] = "65ce1ea1021679bffe96065baab232de"
+SRC_URI[sha256sum] = "a0cf3e1842e7c60fde97cb22d275eb6f9524f5c5250489e292529de841417547"
+
+inherit pypi
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pyasn1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules_0.2.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules_0.2.2.bb
new file mode 100644
index 00000000..eb788840
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules_0.2.2.bb
@@ -0,0 +1,2 @@
+require python-pyasn1-modules.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc
new file mode 100644
index 00000000..ab34d250
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Python library implementing ASN.1 types."
+HOMEPAGE = "http://pyasn1.sourceforge.net/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=815ac3f9ca693006349094b358ab3155"
+
+SRC_URI[md5sum] = "0d182b71e1f72fe147d7957bc90be7f2"
+SRC_URI[sha256sum] = "f58f2a3d12fd754aa123e9fa74fb7345333000a035f3921dbdaa08597aa53137"
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-math \
+ ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1_0.4.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1_0.4.4.bb
new file mode 100644
index 00000000..a13c74dd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1_0.4.4.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-pyasn1.inc
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-lang \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11.inc
new file mode 100644
index 00000000..1722875a
--- /dev/null
+++ b/external/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] = "5b9611041e4ea66b2b919239e3bacd65"
+SRC_URI[sha256sum] = "87ff3ae777d9326349af5272974581270b2a0909b2392dc0cc57eb28ce23bcc3"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11_2.2.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11_2.2.3.bb
new file mode 100644
index 00000000..e5674300
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11_2.2.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pybind11.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez.inc
new file mode 100644
index 00000000..399fe579
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez.inc
@@ -0,0 +1,21 @@
+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"
+
+inherit pypi
+
+SRC_URI = "https://pypi.python.org/packages/c1/98/3149481d508bee174335be6725880f00d297afebe75c15e917af8f6fe169/PyBluez-0.22.zip"
+SRC_URI[md5sum] = "49dab9d5a8f0b798c8125c7f649be3cd"
+SRC_URI[sha256sum] = "4ce006716a54d9d18e8186a3f1c8b12a8e6befecffe8fd5828a291fb694ce49d"
+
+S = "${WORKDIR}/PyBluez-${PV}"
+
+RDEPENDS_${PN} += "\
+ bluez5 \
+ ${PYTHON_PN}-fcntl \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez_0.22.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez_0.22.bb
new file mode 100644
index 00000000..3158f4b6
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez_0.22.bb
@@ -0,0 +1,2 @@
+require python-pybluez.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycodestyle.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycodestyle.inc
new file mode 100644
index 00000000..c0e46b7e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycodestyle.inc
@@ -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] = "85bbebd2c90d2f833c1db467d4d0e9a3"
+SRC_URI[sha256sum] = "cbfca99bd594a10f674d0cd97a3d802a1fdef635d4361e1a2658de47ed261e3a"
+
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycodestyle_2.4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycodestyle_2.4.0.bb
new file mode 100644
index 00000000..7c736e76
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycodestyle_2.4.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-pycodestyle.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-lang"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser.inc
new file mode 100644
index 00000000..d112d9f7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser.inc
@@ -0,0 +1,16 @@
+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] = "72370da54358202a60130e223d488136"
+SRC_URI[sha256sum] = "99a8ca03e29851d96616ad0404b4aad7d9ee16f25c9f9708a11faf2810f7b226"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-ply \
+ ${PYTHON_PN}-pprint \
+ cpp \
+ cpp-symlinks \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser_2.18.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser_2.18.bb
new file mode 100644
index 00000000..98742737
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser_2.18.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-pycparser.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto.inc
new file mode 100644
index 00000000..232cdb71
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/CVE-2013-7459.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/CVE-2013-7459.patch
new file mode 100644
index 00000000..9006c5c3
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/cross-compiling.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/cross-compiling.patch
new file mode 100644
index 00000000..712f3e8d
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto_2.6.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto_2.6.1.bb
new file mode 100644
index 00000000..e13db01b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto_2.6.1.bb
@@ -0,0 +1,9 @@
+inherit distutils
+require python-pycrypto.inc
+
+# 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() {
+ distutils_do_install
+}
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome.inc
new file mode 100644
index 00000000..c4969f96
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome.inc
@@ -0,0 +1,29 @@
+SUMMARY = "Cryptographic library for Python"
+DESCRIPTION = "PyCryptodome is a self-contained Python package of low-level\
+ cryptographic primitives."
+HOMEPAGE = "http://www.pycryptodome.org"
+LICENSE = "PD & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=775fe77831c03bf82f35abc0e230d4c1"
+
+SRC_URI[md5sum] = "a2587b6381b0ef4eb960cea1e7507d04"
+SRC_URI[sha256sum] = "c5dd29e9f1b733e74311bf95d0e544e91bd1d14bc0366e8f443562d8d9920b7d"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-math \
+"
+
+RDEPENDS_${PN}-tests += " \
+ ${PYTHON_PN}-unittest \
+"
+
+PACKAGES =+ "${PN}-tests"
+
+FILES_${PN}-tests += " \
+ ${PYTHON_SITEPACKAGES_DIR}/Crypto/SelfTest/ \
+ ${PYTHON_SITEPACKAGES_DIR}/Crypto/SelfTest/__pycache__/ \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome_3.4.11.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome_3.4.11.bb
new file mode 100644
index 00000000..c7701eb9
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome_3.4.11.bb
@@ -0,0 +1,2 @@
+require python-pycryptodome.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus.inc
new file mode 100644
index 00000000..0773b7ff
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus.inc
@@ -0,0 +1,11 @@
+DESCRIPTION = "Pythonic DBus library"
+HOMEPAGE = "https://pypi.python.org/pypi/pydbus/"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a916467b91076e631dd8edb7424769c7"
+
+SRC_URI[md5sum] = "c6abd44862322679bd4e907bebc3e0d0"
+SRC_URI[sha256sum] = "4207162eff54223822c185da06c1ba8a34137a9602f3da5a528eedf3f78d0f2c"
+
+S = "${WORKDIR}/pydbus-${PV}"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pygobject"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus_0.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus_0.6.0.bb
new file mode 100644
index 00000000..1722a80c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus_0.6.0.bb
@@ -0,0 +1,2 @@
+require python-pydbus.inc
+inherit pypi setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect.inc
new file mode 100644
index 00000000..d2d41d51
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect.inc
@@ -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
+
+SRC_URI[md5sum] = "c71307d6c7096fdbde0813018dfa0092"
+SRC_URI[sha256sum] = "d656ef7e07a8aa539ce0a4883a683341037b6fc1c329bf55b63bffbf2cce9582"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect_1.0.17.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect_1.0.17.bb
new file mode 100644
index 00000000..d26beb79
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect_1.0.17.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pyexpect.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata.inc
new file mode 100644
index 00000000..2365379a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata.inc
@@ -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] = "ee4c23ca5c35d3091d550a63540811a3"
+SRC_URI[sha256sum] = "b54d49d66a9d93c1ef9c72ca01264414cb2de177baac116c12d5cce0c380160c"
+
+inherit pypi
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata_1.0.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata_1.0.3.bb
new file mode 100644
index 00000000..d77e0f38
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata_1.0.3.bb
@@ -0,0 +1,3 @@
+inherit setuptools
+require python-pyfirmata.inc
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflakes_1.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflakes_1.6.0.bb
new file mode 100644
index 00000000..a16a880d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflakes_1.6.0.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=029ce1beb023f2c4ca9f417e4984a865"
+
+SRC_URI[md5sum] = "b385b0e4cd40a522553e97cd2d83573e"
+SRC_URI[sha256sum] = "8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-prettytable \
+ ${PYTHON_PN}-cmd2 \
+ ${PYTHON_PN}-pyparsing"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame-1.6.6/0001-ptrace-Abstract-over-user_regs_struct-name-which-dif.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame-1.6.6/0001-ptrace-Abstract-over-user_regs_struct-name-which-dif.patch
new file mode 100644
index 00000000..09c4394c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame-1.6.6/0001-ptrace-Abstract-over-user_regs_struct-name-which-dif.patch
@@ -0,0 +1,69 @@
+From 2ef124e235a47dd4742813cf80e11a89cf4f02f8 Mon Sep 17 00:00:00 2001
+From: Andrew Jeffery <andrew@aj.id.au>
+Date: Thu, 3 May 2018 12:35:31 +0930
+Subject: [PATCH] ptrace: Abstract over user_regs_struct name, which differs on
+ ARM32
+
+Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
+---
+ src/ptrace.cc | 6 +++---
+ src/ptrace.h | 10 ++++++++--
+ 2 files changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/src/ptrace.cc b/src/ptrace.cc
+index 485f58e4d82e..610fabb3b8e8 100644
+--- a/src/ptrace.cc
++++ b/src/ptrace.cc
+@@ -122,8 +122,8 @@ void PtraceInterrupt(pid_t pid) {
+ DoWait(pid);
+ }
+
+-struct user_regs_struct PtraceGetRegs(pid_t pid) {
+- struct user_regs_struct regs;
++user_regs_struct PtraceGetRegs(pid_t pid) {
++ user_regs_struct regs;
+ if (ptrace(PTRACE_GETREGS, pid, 0, &regs)) {
+ std::ostringstream ss;
+ ss << "Failed to PTRACE_GETREGS: " << strerror(errno);
+@@ -132,7 +132,7 @@ struct user_regs_struct PtraceGetRegs(pid_t pid) {
+ return regs;
+ }
+
+-void PtraceSetRegs(pid_t pid, struct user_regs_struct regs) {
++void PtraceSetRegs(pid_t pid, user_regs_struct regs) {
+ if (ptrace(PTRACE_SETREGS, pid, 0, &regs)) {
+ std::ostringstream ss;
+ ss << "Failed to PTRACE_SETREGS: " << strerror(errno);
+diff --git a/src/ptrace.h b/src/ptrace.h
+index 7083be1c4dfd..d6af8bf9f83a 100644
+--- a/src/ptrace.h
++++ b/src/ptrace.h
+@@ -23,6 +23,12 @@
+
+ #include "./config.h"
+
++#if defined(__arm__)
++typedef struct user_regs user_regs_struct;
++#else
++typedef struct user_regs_struct user_regs_struct;
++#endif
++
+ namespace pyflame {
+
+ int DoWait(pid_t pid, int options = 0);
+@@ -39,10 +45,10 @@ void PtraceSeize(pid_t pid);
+ void PtraceInterrupt(pid_t pid);
+
+ // get regs from a process
+-struct user_regs_struct PtraceGetRegs(pid_t pid);
++user_regs_struct PtraceGetRegs(pid_t pid);
+
+ // set regs in a process
+-void PtraceSetRegs(pid_t pid, struct user_regs_struct regs);
++void PtraceSetRegs(pid_t pid, user_regs_struct regs);
+
+ // poke a long word into an address
+ void PtracePoke(pid_t pid, unsigned long addr, long data);
+--
+2.14.1
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame-1.6.6/0001-symbol-Account-for-prelinked-shared-objects.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame-1.6.6/0001-symbol-Account-for-prelinked-shared-objects.patch
new file mode 100644
index 00000000..3eefc9cb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame-1.6.6/0001-symbol-Account-for-prelinked-shared-objects.patch
@@ -0,0 +1,134 @@
+From 007965d341349679607699d005c4af811b2c419a Mon Sep 17 00:00:00 2001
+From: Andrew Jeffery <andrew@aj.id.au>
+Date: Fri, 4 May 2018 11:23:53 +0930
+Subject: [PATCH] symbol: Account for prelinked shared objects
+
+Some projects, such as those derived from Yocto, tend to prelink their
+binaries and libraries to reduce runtime overhead. Currently this trips
+up pyflame in its symbol address calculations, and leads to ptrace
+failures due to spurious addresses:
+
+ $ pyflame -t python -c "print 'foo'"
+ Unexpected ptrace(2) exception: Failed to PTRACE_PEEKDATA (pid 1482, addr 0x9f9b1d70): Input/output error
+ Unexpected ptrace(2) exception: Failed to PTRACE_PEEKDATA (pid 1482, addr 0x9f9b1d70): Input/output error
+ Unexpected ptrace(2) exception: Failed to PTRACE_PEEKDATA (pid 1482, addr 0x9f9b1d70): Input/output error
+ Unexpected ptrace(2) exception: Failed to PTRACE_PEEKDATA (pid 1482, addr 0x9f9b1d70): Input/output error
+ Unexpected ptrace(2) exception: Failed to PTRACE_PEEKDATA (pid 1482, addr 0x9f9b1d70): Input/output error
+ ...
+
+Add support for reading a prelinked base p_vaddr out of the ELF and
+adjust the PyAddresses values accordingly.
+
+Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
+---
+ src/symbol.cc | 15 +++++++++++++++
+ src/symbol.h | 29 ++++++++++++++++++++++++++++-
+ 2 files changed, 43 insertions(+), 1 deletion(-)
+
+diff --git a/src/symbol.cc b/src/symbol.cc
+index 125174efeeb5..39c3e8132dd1 100644
+--- a/src/symbol.cc
++++ b/src/symbol.cc
+@@ -166,6 +166,17 @@ PyABI ELF::WalkTable(int sym, int str, PyAddresses *addrs) {
+ return abi;
+ }
+
++addr_t ELF::GetBaseAddress() {
++ int32_t phnum = hdr()->e_phnum;
++ int32_t i;
++ for (i = 0; i < phnum && phdr(i)->p_type != PT_LOAD; i++) {
++ }
++ if (i == phnum) {
++ throw FatalException("Failed to find PT_LOAD entry in program headers");
++ }
++ return phdr(i)->p_vaddr;
++}
++
+ PyAddresses ELF::GetAddresses(PyABI *abi) {
+ PyAddresses addrs;
+ PyABI detected_abi = WalkTable(dynsym_, dynstr_, &addrs);
+@@ -176,6 +187,10 @@ PyAddresses ELF::GetAddresses(PyABI *abi) {
+ if (abi != nullptr) {
+ *abi = detected_abi;
+ }
++ // Handle prelinked shared objects
++ if (hdr()->e_type == ET_DYN) {
++ return addrs - GetBaseAddress();
++ }
+ return addrs;
+ }
+ } // namespace pyflame
+diff --git a/src/symbol.h b/src/symbol.h
+index 124853bcc1c1..bb92b9a2604b 100644
+--- a/src/symbol.h
++++ b/src/symbol.h
+@@ -28,15 +28,19 @@
+
+ #if USE_ELF64
+ #define ehdr_t Elf64_Ehdr
++#define phdr_t Elf64_Phdr
+ #define shdr_t Elf64_Shdr
+ #define dyn_t Elf64_Dyn
+ #define sym_t Elf64_Sym
++#define addr_t Elf64_Addr
+ #define ARCH_ELFCLASS ELFCLASS64
+ #else
+ #define ehdr_t Elf32_Ehdr
++#define phdr_t Elf32_Phdr
+ #define shdr_t Elf32_Shdr
+ #define dyn_t Elf32_Dyn
+ #define sym_t Elf32_Sym
++#define addr_t Elf32_Addr
+ #define ARCH_ELFCLASS ELFCLASS32
+ #endif
+
+@@ -67,8 +71,18 @@ struct PyAddresses {
+ interp_head_hint(0),
+ pie(false) {}
+
++ PyAddresses operator-(const unsigned long base) const {
++ PyAddresses res(*this);
++ res.tstate_addr = this->tstate_addr == 0 ? 0 : this->tstate_addr - base;
++ res.interp_head_addr =
++ this->interp_head_addr == 0 ? 0 : this->interp_head_addr - base;
++ res.interp_head_fn_addr =
++ this->interp_head_fn_addr == 0 ? 0 : this->interp_head_fn_addr - base;
++ return res;
++ }
++
+ PyAddresses operator+(const unsigned long base) const {
+- PyAddresses res;
++ PyAddresses res(*this);
+ res.tstate_addr = this->tstate_addr == 0 ? 0 : this->tstate_addr + base;
+ res.interp_head_addr =
+ this->interp_head_addr == 0 ? 0 : this->interp_head_addr + base;
+@@ -113,6 +127,9 @@ class ELF {
+ // ABI.
+ PyAddresses GetAddresses(PyABI *abi);
+
++ // Extract the base load address from the Program Header table
++ addr_t GetBaseAddress();
++
+ private:
+ void *addr_;
+ size_t length_;
+@@ -122,6 +139,16 @@ class ELF {
+ return reinterpret_cast<const ehdr_t *>(addr_);
+ }
+
++ inline const phdr_t *phdr(int idx) const {
++ if (idx < 0) {
++ std::ostringstream ss;
++ ss << "Illegal phdr index: " << idx;
++ throw FatalException(ss.str());
++ }
++ return reinterpret_cast<const phdr_t *>(p() + hdr()->e_phoff +
++ idx * hdr()->e_phentsize);
++ }
++
+ inline const shdr_t *shdr(int idx) const {
+ if (idx < 0) {
+ std::ostringstream ss;
+--
+2.14.1
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame.inc
new file mode 100644
index 00000000..340aab74
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame.inc
@@ -0,0 +1,15 @@
+SUMMARY = "Pyflame: A Ptracing Profiler For Python"
+HOMEPAGE = "https://github.com/uber/pyflame"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=2ee41112a44fe7014dce33e26468ba93"
+DEPENDS = "python"
+
+SRC_URI = "git://github.com/uber/pyflame.git;protocol=https"
+S = "${WORKDIR}/git"
+
+inherit pkgconfig autotools
+
+COMPATIBLE_HOST_libc-musl_class-target = "null"
+COMPATIBLE_HOST_mipsarch_class-target = "null"
+COMPATIBLE_HOST_aarch64_class-target = "null"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame_1.6.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame_1.6.6.bb
new file mode 100644
index 00000000..8dedb892
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyflame_1.6.6.bb
@@ -0,0 +1,6 @@
+require python-pyflame.inc
+
+# v1.6.6
+SRCREV = "8a9d8c2acc3b3bb027475b738134f1e6fff14e6c"
+SRC_URI += "file://0001-ptrace-Abstract-over-user_regs_struct-name-which-dif.patch"
+SRC_URI += "file://0001-symbol-Account-for-prelinked-shared-objects.patch"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0001-reflect-2.1-reporting-for-key-imports.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0001-reflect-2.1-reporting-for-key-imports.patch
new file mode 100644
index 00000000..1f31cb80
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0002-passphrase_cb-is-deprecated.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0002-passphrase_cb-is-deprecated.patch
new file mode 100644
index 00000000..c18cf3fe
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0003-handle-generic-error-when-no-passphrase-callback-pre.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0003-handle-generic-error-when-no-passphrase-callback-pre.patch
new file mode 100644
index 00000000..6acb68bf
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/run-ptest b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/run-ptest
new file mode 100644
index 00000000..ce2abb66
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme_0.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme_0.3.bb
new file mode 100644
index 00000000..14e967db
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme_0.3.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A Python module for working with OpenPGP messages"
+DESCRIPTION = "PyGPGME is a Python module that lets you sign, verify, \
+ encrypt and decrypt messages using the OpenPGP format."
+HOMEPAGE = "https://launchpad.net/pygpgme"
+
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=6517bdc8f2416f27ab725d4702f7aac3"
+
+SRC_URI = "file://run-ptest \
+ file://0001-reflect-2.1-reporting-for-key-imports.patch \
+ file://0002-passphrase_cb-is-deprecated.patch \
+ file://0003-handle-generic-error-when-no-passphrase-callback-pre.patch \
+"
+
+SRC_URI[md5sum] = "d38355af73f0352cde3d410b25f34fd0"
+SRC_URI[sha256sum] = "5fd887c407015296a8fd3f4b867fe0fcca3179de97ccde90449853a3dfb802e1"
+
+DEPENDS += "gpgme"
+RDEPENDS_${PN} += "gnupg"
+
+inherit pypi setuptools ptest
+
+do_install_ptest(){
+ install ${S}/test_all.py ${D}${PTEST_PATH}
+ cp -r ${S}/tests ${D}${PTEST_PATH}
+}
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyhamcrest_1.9.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyhamcrest_1.9.0.bb
new file mode 100644
index 00000000..02d4f54e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyhamcrest_1.9.0.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Hamcrest framework for matcher objects"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=f6df1318c6071dd1707f5e3b6c11f24f"
+
+PYPI_PACKAGE = "PyHamcrest"
+
+SRC_URI[md5sum] = "8b833a3fa30197455df79424f30c8c3f"
+SRC_URI[sha256sum] = "8ffaa0a53da57e89de14ced7185ac746227a8894dbd5a3c718bf05ddbd1d56cd"
+
+inherit pypi setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface.inc
new file mode 100644
index 00000000..2e398fce
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface.inc
@@ -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
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface_0.0.11.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface_0.0.11.bb
new file mode 100644
index 00000000..854cb30e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface_0.0.11.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pyiface.inc \ No newline at end of file
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify.inc
new file mode 100644
index 00000000..975f11c1
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "Python pyinotify: Linux filesystem events monitoring"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ab173cade7965b411528464589a08382"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-misc \
+ ${PYTHON_PN}-shell \
+"
+
+SRC_URI[md5sum] = "8e580fa1ff3971f94a6f81672b76c406"
+SRC_URI[sha256sum] = "9c998a5d7606ca835065cdabc013ae6c66eb9ea76a00a1e3bc6e0cfe2b4f71f4"
+
+inherit pypi
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify_0.9.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify_0.9.6.bb
new file mode 100644
index 00000000..0c9a2c72
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify_0.9.6.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-pyinotify.inc
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks.inc
new file mode 100644
index 00000000..d866c565
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks.inc
@@ -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] = "d53501e7c80d465969742bc6bee91d49"
+SRC_URI[sha256sum] = "709c44a303dd6b2464078ebeb677417e717818d4b3dc3844a462bef9d215dcc8"
+
+inherit pypi
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks_17.1.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks_17.1.1.bb
new file mode 100644
index 00000000..ce99f283
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks_17.1.1.bb
@@ -0,0 +1,2 @@
+require python-pyjks.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt.inc
new file mode 100644
index 00000000..00c38e31
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt.inc
@@ -0,0 +1,17 @@
+SUMMARY = "JSON Web Token implementation in Python"
+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] = "2731c6b66b67b95d1944f072f5fa35a9"
+SRC_URI[sha256sum] = "4ee413b357d53fd3fb44704577afac88e72e878716116270d722723d65b42176"
+
+PYPI_PACKAGE = "PyJWT"
+inherit pypi
+
+RDEPENDS_${PN} = "${PYTHON_PN}-cryptography"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt_1.6.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt_1.6.4.bb
new file mode 100644
index 00000000..f0a77b67
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt_1.6.4.bb
@@ -0,0 +1,2 @@
+require python-pyjwt.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pylint.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pylint.inc
new file mode 100644
index 00000000..ba85b988
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pylint.inc
@@ -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
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pylint_1.8.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pylint_1.8.3.bb
new file mode 100644
index 00000000..7b51d3fb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pylint_1.8.3.bb
@@ -0,0 +1,4 @@
+inherit setuptools python-dir
+require python-pylint.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-backports-functools-lru-cache"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp.inc
new file mode 100644
index 00000000..468a8012
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp.inc
@@ -0,0 +1,15 @@
+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] = "6d549b36cbfa8c1a3323c5d6e299789e"
+SRC_URI[sha256sum] = "f4ed2000cbe1a314f1f88fd8a8eba4ad05974b351b96f1235c6e532158a39fe0"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-dateutil \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-jsonschema \
+ ${PYTHON_PN}-requests \
+ ${PYTHON_PN}-six \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp_2.4.93.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp_2.4.93.bb
new file mode 100644
index 00000000..1b1fbe95
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp_2.4.93.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pymisp.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo.inc
new file mode 100644
index 00000000..b5277f1c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo.inc
@@ -0,0 +1,29 @@
+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] = "7449c81a6c32c3c8cb9bebebc848fded"
+SRC_URI[sha256sum] = "f14fb6c4058772a0d74d82874d3b89d7264d89b4ed7fa0413ea0ef8112b268b9"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo_3.7.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo_3.7.1.bb
new file mode 100644
index 00000000..b1778b2f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo_3.7.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pymongo.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux.inc
new file mode 100644
index 00000000..6a398962
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux.inc
@@ -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"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=74e1861736ee959824fe7542323c12e9"
+
+inherit pypi
+
+SRC_URI[md5sum] = "3336e5d4a478acca4e35bf3125b4f883"
+SRC_URI[sha256sum] = "4ad08298c9f5ba15a11cddc639ba8778cabdfc402b51066d9e0a325e5a5b391c"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux_1.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux_1.1.bb
new file mode 100644
index 00000000..c45ad6ad
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux_1.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pynetlinux.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl.inc
new file mode 100644
index 00000000..516e7958
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl.inc
@@ -0,0 +1,23 @@
+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] = "c92e9c85b520b7e153fef0f7f3c5dda7"
+SRC_URI[sha256sum] = "6488f1423b00f73b7ad5167885312bb0ce410d3312eb212393795b53c8caa580"
+
+PYPI_PACKAGE = "pyOpenSSL"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl_18.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl_18.0.0.bb
new file mode 100644
index 00000000..b7d51461
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl_18.0.0.bb
@@ -0,0 +1,2 @@
+require python-pyopenssl.inc
+inherit pypi setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing.inc
new file mode 100644
index 00000000..e30839f8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing.inc
@@ -0,0 +1,21 @@
+SUMMARY = "Python parsing module"
+HOMEPAGE = "http://pyparsing.wikispaces.com/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fb46329938e6bc829b256e37d5c1e31a"
+
+SRC_URI[md5sum] = "0214e42d63af850256962b6744c948d9"
+SRC_URI[sha256sum] = "0832bcf47acd283788593e7a0f542407bd9550a55a8a8435214a1960e04bcb04"
+
+inherit pypi
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing_2.2.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing_2.2.0.bb
new file mode 100644
index 00000000..90217f3c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing_2.2.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pyparsing.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip.inc
new file mode 100644
index 00000000..4ee47eef
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip.inc
@@ -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=4a3129a2c1b8bdc0e2895a1ec0e2dae2"
+
+SRC_URI[md5sum] = "3680607974f99d6e4411b102358b1884"
+SRC_URI[sha256sum] = "43496f0a1f363a5ecfc4cda5eba6a2a3d5056fe6c7ffb9a99fbb1c5a3c7dea05"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-ctypes \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip_1.6.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip_1.6.2.bb
new file mode 100644
index 00000000..6c9fcbd8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip_1.6.2.bb
@@ -0,0 +1,7 @@
+inherit setuptools
+require python-pyperclip.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-contextlib \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex-native_0.9.9.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex-native_0.9.9.bb
new file mode 100644
index 00000000..e8ef1aa1
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex-native_0.9.9.bb
@@ -0,0 +1,5 @@
+require python-pyrex_${PV}.bb
+inherit native pythonnative
+DEPENDS = "python-native"
+RDEPENDS_${PN} = ""
+PR = "r3"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex/pyrex-fix-optimized-mode.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex/pyrex-fix-optimized-mode.patch
new file mode 100644
index 00000000..c58c3280
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex_0.9.9.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex_0.9.9.bb
new file mode 100644
index 00000000..c4dd2e69
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex_0.9.9.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Language for writing Python extension modules"
+DESCRIPTION = "Pyrex 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=771d472f53f933033f57eeee7808e5bd"
+SRCNAME = "Pyrex"
+PR = "r4"
+
+SRC_URI = "\
+ http://www.cosc.canterbury.ac.nz/greg.ewing/python/${SRCNAME}/${SRCNAME}-${PV}.tar.gz \
+ file://pyrex-fix-optimized-mode.patch \
+"
+
+SRC_URI[md5sum] = "515dee67d15d4393841e2d60e8341947"
+SRC_URI[sha256sum] = "5f87df06831d0b3412eb4bc9d3fc2ee7bfae1b913d7da8c23ab2bf5699fb6b50"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit distutils
+
+FILES_${PN} += "${datadir}${base_libdir}/${PYTHON_DIR}/site-packages/Pyrex/Compiler/Lexicon.pickle"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2.inc
new file mode 100644
index 00000000..ed1981e4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2.inc
@@ -0,0 +1,25 @@
+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] = "2f6f951e94356ae9d224f417dc6ebed2"
+SRC_URI[sha256sum] = "42bf74495d95a0196a74dd171357f660175aba2bfc23f9b5f63e3830ccbef9ac"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-pyroute2:"
+
+inherit pypi
+
+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 \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2_0.5.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2_0.5.2.bb
new file mode 100644
index 00000000..f25f1b4a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2_0.5.2.bb
@@ -0,0 +1,6 @@
+require python-pyroute2.inc
+inherit setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial.inc
new file mode 100644
index 00000000..52a7e05c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial.inc
@@ -0,0 +1,42 @@
+SUMMARY = "Serial Port Support for Python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=d476d94926db6e0008a5b3860d1f5c0d"
+
+SRC_URI[md5sum] = "ed6183b15519a0ae96675e9c3330c69b"
+SRC_URI[sha256sum] = "6e2d401fdee0eab996cf734e67773a0143b932772ca8b42451440cfed942c627"
+
+inherit pypi
+
+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 \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial_3.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial_3.4.bb
new file mode 100644
index 00000000..fd852a2b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial_3.4.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-pyserial.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-argparse"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysmi_0.2.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysmi_0.2.2.bb
new file mode 100644
index 00000000..24759b5d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysmi_0.2.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "SNMP SMI/MIB Parser"
+DESCRIPTION = "A pure-Python implementation of SNMP/SMI MIB \
+ parsing and conversion library. Can produce PySNMP MIB modules. \
+"
+HOMEPAGE = "https://pypi.python.org/pypi/pysmi"
+SECTION = "devel/python"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=d8b1bbadd635f187dee74d999a8c67b8"
+
+SRC_URI[md5sum] = "3b0f71e4e9f730d211f09d8ef5371140"
+SRC_URI[sha256sum] = "2a315cc3e556b3428372b69da663a24d2f0df9e9ab075b022cb133855f25aef7"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "python-ply"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysnmp_4.3.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysnmp_4.3.5.bb
new file mode 100644
index 00000000..0b38d58e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysnmp_4.3.5.bb
@@ -0,0 +1,25 @@
+SUMMARY = "A pure-Python SNMPv1/v2c/v3 library"
+DESCRIPTION = "SNMP v1/v2c/v3 engine and apps written in pure-Python. \
+ Supports Manager/Agent/Proxy roles, scriptable MIBs, asynchronous \
+ operation (asyncio, twisted, asyncore) and multiple transports.\
+"
+HOMEPAGE = "https://pypi.python.org/pypi/pysnmp"
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=280606d9c18f200e03e0c247ac61475a"
+
+SRCNAME = "pysnmp"
+
+SRC_URI = "https://files.pythonhosted.org/packages/source/p/${SRCNAME}/${SRCNAME}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "387aaa23c168ccc0b59775cfdf519fc0"
+SRC_URI[sha256sum] = "38253fe95cea33f352fb36e85f3c2874043401724300c4888df74835161169d2"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+RDEPENDS_${PN} += "python-pycrypto \
+ python-pyasn1 \
+ python-pysmi \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks.inc
new file mode 100644
index 00000000..53ec1b7d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "A Python SOCKS client module"
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1d457bcffb9661b45f799d4efee72f16"
+
+SRC_URI[md5sum] = "441c4e3bf5b042f7e70613cd871df26c"
+SRC_URI[sha256sum] = "3fe52c55890a248676fd69dc9e3c4e811718b777834bcaab7a8125cf9deac672"
+
+PYPI_PACKAGE = "PySocks"
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks_1.6.8.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks_1.6.8.bb
new file mode 100644
index 00000000..8a24e4c4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks_1.6.8.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pysocks.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite.inc
new file mode 100644
index 00000000..88455657
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "DB-API 2.0 interface for SQLite 3.x"
+HOMEPAGE = "http://github.com/ghaering/pysqlite"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=28ad4f115e06c88bd737372a453369d8"
+
+SRC_URI[md5sum] = "033f17b8644577715aee55e8832ac9fc"
+SRC_URI[sha256sum] = "17d3335863e8cf8392eea71add33dab3f96d060666fe68ab7382469d307f4490"
+
+inherit pypi
+
+DEPENDS += "${PYTHON_PN}-pip"
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-datetime \
+ sqlite3 \
+"
+
+FILES_${PN}-doc += "${datadir}"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite_2.8.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite_2.8.3.bb
new file mode 100644
index 00000000..95938f2b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite_2.8.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pysqlite.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pystache.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pystache.inc
new file mode 100644
index 00000000..6dbc99f5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pystache.inc
@@ -0,0 +1,13 @@
+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"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-netserver \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pystache_0.5.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pystache_0.5.4.bb
new file mode 100644
index 00000000..a4550124
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pystache_0.5.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pystache.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-helpers-namespace.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-helpers-namespace.inc
new file mode 100644
index 00000000..a69867d9
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-helpers-namespace.inc
@@ -0,0 +1,10 @@
+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=71fac4dfeee99c39c51f617e9486237c"
+
+SRC_URI[md5sum] = "80fe3e515f640b1459709b539f6b857e"
+SRC_URI[sha256sum] = "d8bdb017c0f7271699c08850b6b12e1ce9e52913cbd4461b5febd21082a29113"
+
+inherit pypi
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-helpers-namespace_2016.7.10.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-helpers-namespace_2016.7.10.bb
new file mode 100644
index 00000000..2b6ee855
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-helpers-namespace_2016.7.10.bb
@@ -0,0 +1,7 @@
+require python-pytest-helpers-namespace.inc
+
+inherit setuptools
+
+RDEPENDS_${PN} += " \
+ python-pytest \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner.inc
new file mode 100644
index 00000000..3b057b0c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner.inc
@@ -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] = "4b696b0f35767f0694f183d0a1855300"
+SRC_URI[sha256sum] = "d23f117be39919f00dd91bffeb4f15e031ec797501b717a245e377aee0f577be"
+
+inherit pypi
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner_4.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner_4.2.bb
new file mode 100644
index 00000000..1765a732
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner_4.2.bb
@@ -0,0 +1,5 @@
+inherit setuptools
+require python-pytest-runner.inc
+
+# Dependency only exists for python2
+RDEPENDS_${PN} += "python-argparse python-compiler"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-tempdir.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-tempdir.inc
new file mode 100644
index 00000000..196f6d64
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-tempdir.inc
@@ -0,0 +1,10 @@
+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=8751a9cf4a70be4f02697a9b89e686ce"
+
+SRC_URI[md5sum] = "f87f2583f5f8aaca7203d57ada3948b5"
+SRC_URI[sha256sum] = "65ff815966ea6dfc07ca1b43747c9888a6d883971170e67b16290f9f50d434ea"
+
+inherit pypi
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-tempdir_2016.8.20.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-tempdir_2016.8.20.bb
new file mode 100644
index 00000000..8a9b83e3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-tempdir_2016.8.20.bb
@@ -0,0 +1,7 @@
+require python-pytest-tempdir.inc
+
+inherit setuptools
+
+RDEPENDS_${PN} += " \
+ python-pytest \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest.inc
new file mode 100644
index 00000000..4c32dfb0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest.inc
@@ -0,0 +1,35 @@
+SUMMARY = "Simple powerful teting with python"
+HOMEPAGE = "http://pytest.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c39b24965f4aef64222cb35de9d47cc4"
+
+SRC_URI[md5sum] = "1b83a25d45fad893f430fc5031653c56"
+SRC_URI[sha256sum] = "117bad36c1a787e1a8a659df35de53ba05f9f3398fb9e4ac17e80ad5903eb8c5"
+
+SRC_URI_append = " file://0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch \
+ file://pytest_version_fix.patch "
+
+inherit update-alternatives
+
+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 \
+"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-pytest:"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch
new file mode 100644
index 00000000..06dfcdfc
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch
@@ -0,0 +1,32 @@
+From 24a901fd17926e8e05be4ed2e01b0113a2e3a852 Mon Sep 17 00:00:00 2001
+From: Derek Straka <derek@asterius.io>
+Date: Tue, 19 Dec 2017 11:36:39 -0500
+Subject: [PATCH] [PATCH 1/1] 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>
+---
+ setup.py | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index 3eb38ef..1163202 100644
+--- a/setup.py
++++ b/setup.py
+@@ -82,7 +82,6 @@ def main():
+ keywords="test unittest",
+ cmdclass={'test': PyTest},
+ # the following should be enabled for release
+- setup_requires=['setuptools-scm'],
+ python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
+ install_requires=install_requires,
+ extras_require=extras_require,
+--
+2.7.4
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/pytest_version_fix.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/pytest_version_fix.patch
new file mode 100644
index 00000000..b373d93e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/pytest_version_fix.patch
@@ -0,0 +1,51 @@
+Upstream-Status: Inappropriate (OE specific)
+
+python-pytest: remove fetch during do_compile phase
+commit: c974fbf9ebf185552ab65301e07af44f36517abf
+
+introduced an issue by making the version 0.0.0
+this fixes that
+
+Signed-off-by: Armin Kuster <akuster@mvista.com>
+
+Index: pytest-3.2.2/setup.py
+===================================================================
+--- pytest-3.2.2.orig/setup.py
++++ pytest-3.2.2/setup.py
+@@ -1,5 +1,6 @@
+ import os
+ import sys
++import re
+ import setuptools
+ import pkg_resources
+ from setuptools import setup, Command
+@@ -22,6 +23,18 @@ classifiers = [
+ with open('README.rst') as fd:
+ long_description = fd.read()
+
++def read(*names, **kwargs):
++ with open(os.path.join( *names), 'r') as fp:
++ return fp.read()
++
++def find_version(*file_paths):
++ version_file = read(*file_paths)
++ version_match = re.search(r"^version = ['\']([^'\"]*)['\']",
++ version_file, re.M)
++
++ if version_match:
++ return version_match.group(1)
++ raise RuntimeError("Unable to find version string.")
+
+ def get_environment_marker_support_level():
+ """
+@@ -59,9 +72,7 @@ def main():
+ name='pytest',
+ description='pytest: simple powerful testing with Python',
+ long_description=long_description,
+- use_scm_version={
+- 'write_to': '_pytest/_version.py',
+- },
++ version=find_version("_pytest", "_version.py"),
+ url='http://pytest.org',
+ license='MIT license',
+ platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest_3.4.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest_3.4.2.bb
new file mode 100644
index 00000000..39e50aca
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytest_3.4.2.bb
@@ -0,0 +1,9 @@
+inherit pypi setuptools
+require python-pytest.inc
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-argparse \
+ ${PYTHON_PN}-compiler \
+ ${PYTHON_PN}-funcsigs \
+"
+ALTERNATIVE_PRIORITY = "10"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytz.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytz.inc
new file mode 100644
index 00000000..aedffe15
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytz.inc
@@ -0,0 +1,20 @@
+SUMMARY = "World timezone definitions, modern and historical"
+HOMEPAGE = "http://pythonhosted.org/pytz"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4878a915709225bceab739bdc2a18e8d"
+
+inherit pypi
+
+SRC_URI[md5sum] = "45409cbfa3927bdd2f3ee914dd5b1060"
+SRC_URI[sha256sum] = "ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277"
+
+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"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytz_2018.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytz_2018.5.bb
new file mode 100755
index 00000000..f2ffc596
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pytz_2018.5.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pytz.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev.inc
new file mode 100644
index 00000000..683a75cd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev.inc
@@ -0,0 +1,19 @@
+SUMMARY = "A libudev binding"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343"
+
+SRC_URI[md5sum] = "cf4d9db7d772622144ca1be6b5d9353b"
+SRC_URI[sha256sum] = "094b7a100150114748aaa3b70663485dd360457a709bfaaafe5a977371033f2b"
+
+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 \
+ libudev \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev_0.21.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev_0.21.0.bb
new file mode 100644
index 00000000..a3e15014
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev_0.21.0.bb
@@ -0,0 +1,9 @@
+require python-pyudev.inc
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-contextlib \
+ ${PYTHON_PN}-subprocess \
+"
+
+inherit pypi setuptools
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb.inc
new file mode 100644
index 00000000..30bbe85a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb.inc
@@ -0,0 +1,10 @@
+SUMMARY = "PyUSB provides USB access on the Python language"
+HOMEPAGE = "http://pyusb.sourceforge.net/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51691ed11cc2c7ae93e383f60ed49b0f"
+DEPENDS += "libusb1"
+
+SRC_URI[md5sum] = "862b56452c64948c787ad8ef9498590b"
+SRC_URI[sha256sum] = "4e9b72cc4a4205ca64fbf1f3fff39a335512166c151ad103e55c8223ac147362"
+
+inherit pypi
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb_1.0.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb_1.0.2.bb
new file mode 100644
index 00000000..99a795b2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb_1.0.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pyusb.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml.inc
new file mode 100644
index 00000000..afce543f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Python support for YAML"
+HOMEPAGE = "http://www.pyyaml.org"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5591701d32590f9fa94f3bfee820b634"
+DEPENDS = "libyaml ${PYTHON_PN}-cython-native ${PYTHON_PN}"
+
+PYPI_PACKAGE = "PyYAML"
+inherit pypi
+
+SRC_URI[md5sum] = "b78b96636d68ac581c0e2f38158c224f"
+SRC_URI[sha256sum] = "3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml_3.13.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml_3.13.bb
new file mode 100644
index 00000000..5a4c92d8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml_3.13.bb
@@ -0,0 +1,2 @@
+require python-pyyaml.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq.inc
new file mode 100644
index 00000000..2447c2f3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq.inc
@@ -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
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq/club-rpath-out.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq/club-rpath-out.patch
new file mode 100644
index 00000000..936f1658
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq_17.1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq_17.1.0.bb
new file mode 100644
index 00000000..b690106b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq_17.1.0.bb
@@ -0,0 +1,2 @@
+require python-pyzmq.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-redis.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-redis.inc
new file mode 100644
index 00000000..1a65d731
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-redis.inc
@@ -0,0 +1,12 @@
+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"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-redis_2.10.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-redis_2.10.6.bb
new file mode 100644
index 00000000..6c3ca851
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-redis_2.10.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-redis.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests.inc
new file mode 100644
index 00000000..301c2f82
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests.inc
@@ -0,0 +1,30 @@
+DESCRIPTION = "Python HTTP for Humans."
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=bfbeafb85a2cee261510d65d5ec19156"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-requests:"
+
+SRC_URI += "file://0001-Strip-Authorization-header-whenever-root-URL-changes.patch \
+ file://0002-Rework-authorization-stripping-logic-as-discussed.patch \
+ "
+
+SRC_URI[md5sum] = "6c1a31afec9d614e2e71a91ee6ca2878"
+SRC_URI[sha256sum] = "ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a"
+
+inherit pypi
+
+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 \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests/0001-Strip-Authorization-header-whenever-root-URL-changes.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests/0001-Strip-Authorization-header-whenever-root-URL-changes.patch
new file mode 100644
index 00000000..80ef5ffb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests/0001-Strip-Authorization-header-whenever-root-URL-changes.patch
@@ -0,0 +1,62 @@
+From fb0d391138df48e93c44a2087ea796cca5e229c0 Mon Sep 17 00:00:00 2001
+From: Bruce Merry <bmerry@ska.ac.za>
+Date: Thu, 28 Jun 2018 16:38:42 +0200
+Subject: [PATCH 1/2] Strip Authorization header whenever root URL changes
+
+Previously the header was stripped only if the hostname changed, but in
+an https -> http redirect that can leak the credentials on the wire
+(#4716). Based on with RFC 7235 section 2.2, the header is now stripped
+if the "canonical root URL" (scheme+authority) has changed, by checking
+scheme, hostname and port.
+
+Upstream-Status: Backport
+
+Fix CVE-2018-18074
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ requests/sessions.py | 4 +++-
+ tests/test_requests.py | 12 +++++++++++-
+ 2 files changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/requests/sessions.py b/requests/sessions.py
+index ba13526..2969d83 100644
+--- a/requests/sessions.py
++++ b/requests/sessions.py
+@@ -242,7 +242,9 @@ class SessionRedirectMixin(object):
+ original_parsed = urlparse(response.request.url)
+ redirect_parsed = urlparse(url)
+
+- if (original_parsed.hostname != redirect_parsed.hostname):
++ if (original_parsed.hostname != redirect_parsed.hostname
++ or original_parsed.port != redirect_parsed.port
++ or original_parsed.scheme != redirect_parsed.scheme):
+ del headers['Authorization']
+
+ # .netrc might have more auth for us on our new host.
+diff --git a/tests/test_requests.py b/tests/test_requests.py
+index fcddb1d..e0e801a 100644
+--- a/tests/test_requests.py
++++ b/tests/test_requests.py
+@@ -1575,7 +1575,17 @@ class TestRequests:
+ auth=('user', 'pass'),
+ )
+ assert r.history[0].request.headers['Authorization']
+- assert not r.request.headers.get('Authorization', '')
++ assert 'Authorization' not in r.request.headers
++
++ def test_auth_is_stripped_on_scheme_redirect(self, httpbin, httpbin_secure, httpbin_ca_bundle):
++ r = requests.get(
++ httpbin_secure('redirect-to'),
++ params={'url': httpbin('get')},
++ auth=('user', 'pass'),
++ verify=httpbin_ca_bundle
++ )
++ assert r.history[0].request.headers['Authorization']
++ assert 'Authorization' not in r.request.headers
+
+ def test_auth_is_retained_for_redirect_on_host(self, httpbin):
+ r = requests.get(httpbin('redirect/1'), auth=('user', 'pass'))
+--
+2.7.4
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests/0002-Rework-authorization-stripping-logic-as-discussed.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests/0002-Rework-authorization-stripping-logic-as-discussed.patch
new file mode 100644
index 00000000..ef069fb9
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests/0002-Rework-authorization-stripping-logic-as-discussed.patch
@@ -0,0 +1,118 @@
+From 698c2fa850bfc8b3bdb768e1c1cd6d57e643811d Mon Sep 17 00:00:00 2001
+From: Bruce Merry <bmerry@ska.ac.za>
+Date: Tue, 14 Aug 2018 13:30:43 +0200
+Subject: [PATCH 2/2] Rework authorization stripping logic as discussed
+
+The exception for http->https upgrade now requires the standard HTTP(S)
+ports to be used, either implicitly (no port specified) or explicitly.
+
+Upstream-Status: Backport
+
+Follow-up fix for CVE-2018-18074
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ requests/sessions.py | 26 ++++++++++++++++++--------
+ tests/test_requests.py | 33 ++++++++++++++++++++++-----------
+ 2 files changed, 40 insertions(+), 19 deletions(-)
+
+diff --git a/requests/sessions.py b/requests/sessions.py
+index 2969d83..c11a3a2 100644
+--- a/requests/sessions.py
++++ b/requests/sessions.py
+@@ -115,6 +115,22 @@ class SessionRedirectMixin(object):
+ return to_native_string(location, 'utf8')
+ return None
+
++ def should_strip_auth(self, old_url, new_url):
++ """Decide whether Authorization header should be removed when redirecting"""
++ old_parsed = urlparse(old_url)
++ new_parsed = urlparse(new_url)
++ if old_parsed.hostname != new_parsed.hostname:
++ return True
++ # Special case: allow http -> https redirect when using the standard
++ # ports. This isn't specified by RFC 7235, but is kept to avoid
++ # breaking backwards compatibility with older versions of requests
++ # that allowed any redirects on the same host.
++ if (old_parsed.scheme == 'http' and old_parsed.port in (80, None)
++ and new_parsed.scheme == 'https' and new_parsed.port in (443, None)):
++ return False
++ # Standard case: root URI must match
++ return old_parsed.port != new_parsed.port or old_parsed.scheme != new_parsed.scheme
++
+ def resolve_redirects(self, resp, req, stream=False, timeout=None,
+ verify=True, cert=None, proxies=None, yield_requests=False, **adapter_kwargs):
+ """Receives a Response. Returns a generator of Responses or Requests."""
+@@ -236,16 +252,10 @@ class SessionRedirectMixin(object):
+ headers = prepared_request.headers
+ url = prepared_request.url
+
+- if 'Authorization' in headers:
++ if 'Authorization' in headers and self.should_strip_auth(response.request.url, url):
+ # If we get redirected to a new host, we should strip out any
+ # authentication headers.
+- original_parsed = urlparse(response.request.url)
+- redirect_parsed = urlparse(url)
+-
+- if (original_parsed.hostname != redirect_parsed.hostname
+- or original_parsed.port != redirect_parsed.port
+- or original_parsed.scheme != redirect_parsed.scheme):
+- del headers['Authorization']
++ del headers['Authorization']
+
+ # .netrc might have more auth for us on our new host.
+ new_auth = get_netrc_auth(url) if self.trust_env else None
+diff --git a/tests/test_requests.py b/tests/test_requests.py
+index e0e801a..148067b 100644
+--- a/tests/test_requests.py
++++ b/tests/test_requests.py
+@@ -1567,17 +1567,7 @@ class TestRequests:
+ preq = req.prepare()
+ assert test_url == preq.url
+
+- @pytest.mark.xfail(raises=ConnectionError)
+- def test_auth_is_stripped_on_redirect_off_host(self, httpbin):
+- r = requests.get(
+- httpbin('redirect-to'),
+- params={'url': 'http://www.google.co.uk'},
+- auth=('user', 'pass'),
+- )
+- assert r.history[0].request.headers['Authorization']
+- assert 'Authorization' not in r.request.headers
+-
+- def test_auth_is_stripped_on_scheme_redirect(self, httpbin, httpbin_secure, httpbin_ca_bundle):
++ def test_auth_is_stripped_on_http_downgrade(self, httpbin, httpbin_secure, httpbin_ca_bundle):
+ r = requests.get(
+ httpbin_secure('redirect-to'),
+ params={'url': httpbin('get')},
+@@ -1594,6 +1584,27 @@ class TestRequests:
+
+ assert h1 == h2
+
++ def test_should_strip_auth_host_change(self):
++ s = requests.Session()
++ assert s.should_strip_auth('http://example.com/foo', 'http://another.example.com/')
++
++ def test_should_strip_auth_http_downgrade(self):
++ s = requests.Session()
++ assert s.should_strip_auth('https://example.com/foo', 'http://example.com/bar')
++
++ def test_should_strip_auth_https_upgrade(self):
++ s = requests.Session()
++ assert not s.should_strip_auth('http://example.com/foo', 'https://example.com/bar')
++ assert not s.should_strip_auth('http://example.com:80/foo', 'https://example.com/bar')
++ assert not s.should_strip_auth('http://example.com/foo', 'https://example.com:443/bar')
++ # Non-standard ports should trigger stripping
++ assert s.should_strip_auth('http://example.com:8080/foo', 'https://example.com/bar')
++ assert s.should_strip_auth('http://example.com/foo', 'https://example.com:8443/bar')
++
++ def test_should_strip_auth_port_change(self):
++ s = requests.Session()
++ assert s.should_strip_auth('http://example.com:1234/foo', 'https://example.com:4321/bar')
++
+ def test_manual_redirect_with_partial_body_read(self, httpbin):
+ s = requests.Session()
+ r1 = s.get(httpbin('redirect/2'), allow_redirects=False, stream=True)
+--
+2.7.4
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests_2.19.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests_2.19.1.bb
new file mode 100644
index 00000000..0d7a29f7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-requests_2.19.1.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-requests.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-zlib"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987.inc
new file mode 100644
index 00000000..46159041
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987.inc
@@ -0,0 +1,8 @@
+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] = "aa108c7590902fe609c036864ecb7f84"
+SRC_URI[sha256sum] = "91a7826b0a26c246a5a91bef09c2c0809c713a689be689b9571e78a13f6557a4"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987_1.3.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987_1.3.7.bb
new file mode 100644
index 00000000..dcda5aa4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987_1.3.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-rfc3987.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework-seriallibrary.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework-seriallibrary.inc
new file mode 100644
index 00000000..9f07b657
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework-seriallibrary.inc
@@ -0,0 +1,15 @@
+SUMMARY = "Robot Framework test library for serial connection"
+HOMEPAGE = "https://github.com/whosaysni/robotframework-seriallibrary"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+SRC_URI[md5sum] = "b7c9565d54c30df7cd3f3c0e29adffa3"
+SRC_URI[sha256sum] = "256ad60fc0b7df4be44d82c302f5ed8fad4935cda99e4b45942e3c88179d1e19"
+
+SRC_URI = "https://files.pythonhosted.org/packages/ce/e1/1e337dc84a20b9d92d7b243d16bb9f6fc0084967eca7454228bb546efec7/robotframework-seriallibrary-0.3.1.tar.gz"
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-pyserial \
+ ${PYTHON_PN}-robotframework \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework-seriallibrary_0.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework-seriallibrary_0.3.1.bb
new file mode 100644
index 00000000..440f69cb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework-seriallibrary_0.3.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-robotframework-seriallibrary.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework.inc
new file mode 100644
index 00000000..e920c51d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework.inc
@@ -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
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework_3.0.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework_3.0.4.bb
new file mode 100644
index 00000000..ff7dedb5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework_3.0.4.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-robotframework.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-zlib \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt.inc
new file mode 100644
index 00000000..783d05b7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "Bindings for the scrypt key derivation function library"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-2-Clause;md5=8bef8e6712b1be5aa76af1ebde9d6378"
+HOMEPAGE="https://bitbucket.org/mhallin/py-scrypt/overview"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-scrypt:"
+
+SRC_URI += "file://0001-py-scrypt-remove-the-hard-coded-include-paths.patch"
+
+SRC_URI[md5sum] = "ae8e3263aa31b040c1f9c7f1e1843a56"
+SRC_URI[sha256sum] = "f8239b2d47fa1d40bc27efd231dc7083695d10c1c2ac51a99380360741e0362d"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch
new file mode 100644
index 00000000..d535e432
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-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/external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt_0.8.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt_0.8.6.bb
new file mode 100644
index 00000000..9fbd00e0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt_0.8.6.bb
@@ -0,0 +1,3 @@
+inherit setuptools python-dir
+require python-scrypt.inc
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify.inc
new file mode 100644
index 00000000..ea0e575c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify.inc
@@ -0,0 +1,16 @@
+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"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify_0.3.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify_0.3.2.bb
new file mode 100644
index 00000000..39ae3fb0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify_0.3.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools pypi
+require python-sdnotify.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-selectors34_1.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-selectors34_1.2.bb
new file mode 100644
index 00000000..69545ebb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-selectors34_1.2.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Backport of the selectors module from Python 3.4"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=2fae0222c31d6c10488d4ab93a863af7"
+
+SRC_URI[md5sum] = "bc855a1c8839a811476c019dc07d92dd"
+SRC_URI[sha256sum] = "09f5066337f8a76fb5233f267873f89a27a17c10bf79575954894bb71686451c"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-six \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-semver.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-semver.inc
new file mode 100644
index 00000000..3c95c06e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-semver.inc
@@ -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
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-semver_2.8.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-semver_2.8.1.bb
new file mode 100644
index 00000000..0572feb3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-semver_2.8.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-semver.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-serpent.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-serpent.inc
new file mode 100644
index 00000000..2ba65706
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-serpent.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Serialization based on ast.literal_eval"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=5a8193ba89f1083617f32d522f6485e9"
+
+SRC_URI[md5sum] = "0f9684622125a527fa4fbe2587738973"
+SRC_URI[sha256sum] = "264a028e059c1b557701ae7c567cdab330dbd228ff924489343efcb39bd828a0"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-serpent_1.25.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-serpent_1.25.bb
new file mode 100644
index 00000000..0db3cf98
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-serpent_1.25.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-serpent.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm.inc
new file mode 100644
index 00000000..98883ec3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm.inc
@@ -0,0 +1,14 @@
+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] = "cfec5d2dbbd0a85c40066f79035b5878"
+SRC_URI[sha256sum] = "a767141fecdab1c0b3c8e4c788ac912d7c94a0d6c452d40777ba84f918316379"
+
+PYPI_PACKAGE = "setuptools_scm"
+inherit pypi
+
+RDEPENDS_${PN}_class-target = "${PYTHON_PN}-py ${PYTHON_PN}-setuptools ${PYTHON_PN}-debugger ${PYTHON_PN}-json"
+RDEPENDS_${PN}_class-native = "${PYTHON_PN}-setuptools-native"
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm_2.1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm_2.1.0.bb
new file mode 100644
index 00000000..64b36e3a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm_2.1.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-setuptools-scm.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-argparse"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-sh.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sh.inc
new file mode 100644
index 00000000..f2fd562b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sh.inc
@@ -0,0 +1,32 @@
+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
+
+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 \
+"
+
+# WARNING: We were unable to map the following python package/module
+# dependencies to the bitbake packages which include them:
+# coverage - only used in test and there is a check to see if it is
+# available before importing.
+# queue - part of threading
+# signal - part of core in python3. not sure how it is imported in python2.
+# No complants in compiling.
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-sh_1.12.14.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sh_1.12.14.bb
new file mode 100644
index 00000000..7cb5140d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sh_1.12.14.bb
@@ -0,0 +1,8 @@
+require python-sh.inc
+inherit setuptools
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-contextlib \
+ ${PYTHON_PN}-lang \
+ ${PYTHON_PN}-textutils \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-sijax.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sijax.inc
new file mode 100644
index 00000000..9e46893d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sijax.inc
@@ -0,0 +1,8 @@
+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"
+
+PYPI_PACKAGE = "Sijax"
+inherit pypi \ No newline at end of file
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-sijax_0.3.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sijax_0.3.2.bb
new file mode 100644
index 00000000..4226c423
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sijax_0.3.2.bb
@@ -0,0 +1,11 @@
+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"
+
+PYPI_PACKAGE = "Sijax"
+inherit setuptools
+require python-sijax.inc
+
+SRC_URI[sha256sum] = "11b062f4a8b2aad95c87e7c09e5daf5a6b0d0f08abf9efe5f91a0075c6be7c0d" \ No newline at end of file
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson.inc
new file mode 100644
index 00000000..3d36f960
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson.inc
@@ -0,0 +1,23 @@
+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] = "744fa99aed207478f8fbf9dd9f04fad3"
+SRC_URI[sha256sum] = "b1f329139ba647a9548aa05fb95d046b4a677643070dc2afc05fa2e975d09ca5"
+
+inherit pypi
+
+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* \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson_3.16.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson_3.16.0.bb
new file mode 100644
index 00000000..24ad9a96
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson_3.16.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-simplejson.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-singledispatch_3.4.0.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-singledispatch_3.4.0.3.bb
new file mode 100644
index 00000000..44c9505b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-singledispatch_3.4.0.3.bb
@@ -0,0 +1,12 @@
+SUMMARY = "functools.singledispatch from Python 3.4"
+DESCRIPTION = "PEP 443 proposed to expose a mechanism in the functools standard library module \
+in Python 3.4 that provides a simple form of generic programming known as single-dispatch \
+generic functions. This library is a backport of this functionality to Python 2.6 - 3.3"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.rst;md5=ee3cd67264adc7eb07981f3644dc17dc"
+
+SRC_URI[md5sum] = "af2fc6a3d6cc5a02d0bf54d909785fcb"
+SRC_URI[sha256sum] = "5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c"
+
+inherit pypi setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-six.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-six.inc
new file mode 100644
index 00000000..a5915c11
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-six.inc
@@ -0,0 +1,19 @@
+SUMMARY = "Python 2 and 3 compatibility library"
+HOMEPAGE = "http://pypi.python.org/pypi/six/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=35cec5bf04dd0820d0a18533ea7c774a"
+
+SRC_URI[md5sum] = "d12789f9baf7e9fb2524c0c64f1773f8"
+SRC_URI[sha256sum] = "70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9"
+
+do_compile_append() {
+ ${PYTHON} setup.py -q bdist_egg --dist-dir ./
+}
+do_install_append() {
+ install -m 0644 ${S}/*.egg ${D}/${PYTHON_SITEPACKAGES_DIR}/
+}
+
+RDEPENDS_${PN} += "${PYTHON_PN}-io"
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-six_1.11.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-six_1.11.0.bb
new file mode 100644
index 00000000..9075745d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-six_1.11.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-six.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-slip-dbus_0.6.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-slip-dbus_0.6.1.bb
new file mode 100644
index 00000000..dc587e76
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-slip-dbus_0.6.1.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Convenience functions for dbus services in Python 2.x"
+HOMEPAGE = "http://nphilipp.fedorapeople.org/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}"
+
+inherit setuptools
+
+SRC_URI[md5sum] = "a6d8ee96245fc21785d4c1c062c85f2f"
+SRC_URI[sha256sum] = "bc897f1ab6f5b4989f85548799aaeb84fde67bbba18e40341bfe1d7885c2fd9a"
+
+do_compile_prepend() {
+ sed -e 's/@VERSION@/${PV}/g' setup.py.in > setup.py
+}
+
+# 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"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-smbus.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-smbus.inc
new file mode 100644
index 00000000..f472a57f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-smbus.inc
@@ -0,0 +1,12 @@
+SUMMARY = "Set of i2c tools for linux - Python module"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://smbusmodule.c;beginline=1;endline=17;md5=fa24df321a520ff8e10f203425ab9fa8"
+PR = "r1"
+
+SRC_URI = "${KERNELORG_MIRROR}/software/utils/i2c-tools/i2c-tools-${PV}.tar.gz "
+SRC_URI[md5sum] = "d92a288d70f306d3895e3a7e9c14c9aa"
+SRC_URI[sha256sum] = "5b60daf6f011de0acb61de57dba62f2054bb39f19961d67e0c91610f071ca403"
+
+DEPENDS += "i2c-tools"
+
+S = "${WORKDIR}/i2c-tools-${PV}/py-smbus/"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-smbus_4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-smbus_4.0.bb
new file mode 100644
index 00000000..1b957788
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-smbus_4.0.bb
@@ -0,0 +1,2 @@
+inherit distutils
+require python-smbus.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-snakefood_1.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-snakefood_1.4.bb
new file mode 100644
index 00000000..e4a6d767
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-snakefood_1.4.bb
@@ -0,0 +1,51 @@
+SUMMARY = "Dependency graphing for Python"
+DESCRIPTION = " Generate dependency graphs from Python code. This \
+dependency tracker package has a few distinguishing characteristics \
+\
+ * It uses the AST to parse the Python files. This is very reliable, \
+ it always runs.\
+ * No module is loaded. Loading modules to figure out dependencies is \
+ almost always problem, because a lot of codebases run initialization \
+ code in the global namespace, which often requires additional setup. \
+ Snakefood is guaranteed not to have this problem (it just runs, no \
+ matter what).\
+ * It works on a set of files, i.e. you do not have to specify a single \
+ script, you can select a directory (package or else) or a set of files.\
+ It finds all the Python files recursively automatically.\
+ * Automatic/no configuration: your PYTHONPATH is automatically adjusted \
+ to include the required package roots. It figures out the paths that \
+ are required from the files/directories given as input. You should not \
+ have to setup ANYTHING.\
+ * It does not have to automatically 'follow' dependencies between modules,\
+ i.e. by default it only considers the files and directories you specify \
+ on the command-line and their immediate dependencies. It also has an \
+ option to automatically include only the dependencies within the \
+ packages of the files you specify.\
+ * It follows the UNIX philosophy of small programs that do one thing well:\
+ it consists of a few simple programs whose outputs you combine via \
+ pipes. Graphing dependencies always requires the user to filter and \
+ cluster the filenames, so this is appropriate. You can combine it with \
+ your favourite tools, grep, sed, etc.\
+\
+A problem with dependency trackers that run code is that they are unreliable, \
+due to the dynamic nature of Python (the presence of imports within function \
+calls and __import__ hooks makes it almost impossible to always do the right \
+thing). This script aims at being right 99% of the time, and we think that \
+given the trade-offs, 99% is good enough for 99% of the uses.\
+"
+AUTHOR = "Martin Blais <blais@furius.ca>"
+HOMEPAGE = "http://furius.ca/snakefood"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI[md5sum] = "56c88667a33d8909b0aabf2ab6903bdf"
+SRC_URI[sha256sum] = "295784668032254e7391ca99ba7060edd3ae4eca1a330ac11627b18ab5923b77"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = " python-logging python-compiler python-shell"
+# the above modules do not have a -native counterpart
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native"
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-snimpy_0.8.12.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-snimpy_0.8.12.bb
new file mode 100644
index 00000000..c5af48dd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-snimpy_0.8.12.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Interactive SNMP tool"
+DESCRIPTION = "Snimpy is a Python-based tool providing a simple interface to build SNMP query"
+HOMEPAGE = "https://pypi.python.org/pypi/snimpy"
+SECTION = "devel/python"
+
+DEPENDS += "libsmi python-cffi-native python-vcversioner-native"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://docs/license.rst;md5=7c53ab2d1240828625c3e093d049d4f4"
+
+SRC_URI[md5sum] = "6d016b6356db432e6a87ad708eb8fcb6"
+SRC_URI[sha256sum] = "04efcfba867ffb0e10cc8d7f93a553ceb6bdf2ee34e49762749028a2c76096c1"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "python-cffi \
+ python-pycparser \
+ python-pysnmp \
+ python-setuptools \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-sparts_0.7.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sparts_0.7.3.bb
new file mode 100644
index 00000000..a1253112
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sparts_0.7.3.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Library for rapid service prototyping with minimal boilerplate"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0c1554636a564da3baf037ac652fc831"
+
+SRC_URI[md5sum] = "6aa8815652c6f5e5e8e5b2ac1813dd87"
+SRC_URI[sha256sum] = "b25707c349079a7c888155e7fdfd8394df2da9aca9c8eee4e205528cb16b7662"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "\
+ python-subprocess \
+ python-six \
+ python-argparse \
+ python-re \
+ python-shell \
+ python-threading \
+ python-logging \
+ python-unixadmin \
+ python-distutils \
+ python-daemonize \
+ python-futures \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater.inc
new file mode 100644
index 00000000..94fa8a6c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater.inc
@@ -0,0 +1,9 @@
+DESCRIPTION = "Media asset management for Python, with glue code for various frameworks"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b810770075a29bf44b96607440e7c801"
+
+SRC_URI[md5sum] = "e8d5dbe36e53d5a35cff227e795e8bbf"
+SRC_URI[sha256sum] = "59fea336d0eed38c1f0bf3181ee1222d0ef45f3a9dd34ebe65e6bfffdd6a65a9"
+
+PYPI_PACKAGE = "speaklater"
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater_1.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater_1.3.bb
new file mode 100644
index 00000000..56fd5557
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater_1.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-speaklater.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-spidev.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-spidev.inc
new file mode 100644
index 00000000..1b93763d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-spidev.inc
@@ -0,0 +1,17 @@
+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
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy.inc
new file mode 100644
index 00000000..0c191ae7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy.inc
@@ -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=b1c412c9d8d1ce018f7a9374407c22bb"
+
+PYPI_PACKAGE = "SQLAlchemy"
+inherit pypi
+
+SRC_URI[md5sum] = "03db1c8f8ae911977c0bf3950a4c9c21"
+SRC_URI[sha256sum] = "6b55ec379c11ad696f9371ce8e0de93c7f21134323f56a56a1b0d8fbef17013c"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-threading \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy_1.1.17.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy_1.1.17.bb
new file mode 100644
index 00000000..53c8fecf
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy_1.1.17.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-sqlalchemy.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-stevedore.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-stevedore.inc
new file mode 100644
index 00000000..14ebc0ef
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-stevedore.inc
@@ -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] = "525186cba577852e0408c92c3f8fac65"
+SRC_URI[sha256sum] = "1e153545aca7a6a49d8337acca4f41c212fbfa60bf864ecd056df0cafb9627e8"
+
+inherit pypi
+
+DEPENDS += "${PYTHON_PN}-pbr-native"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-pbr ${PYTHON_PN}-six"
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-stevedore_1.29.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-stevedore_1.29.0.bb
new file mode 100644
index 00000000..70a00c13
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-stevedore_1.29.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-stevedore.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339.inc
new file mode 100644
index 00000000..dca9ea93
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339.inc
@@ -0,0 +1,8 @@
+SUMMARY = "Strict, simple, lightweight RFC3339 function.s"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8f0e2cd40e05189ec81232da84bd6e1a"
+
+SRC_URI[md5sum] = "4d9b635b4df885bc37bc1189d66c9abc"
+SRC_URI[sha256sum] = "5cad17bedfc3af57b399db0fed32771f18fc54bbd917e85546088607ac5e1277"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339_0.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339_0.7.bb
new file mode 100644
index 00000000..b01ea99a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339_0.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-strict-rfc3339.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-subprocess32_3.2.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-subprocess32_3.2.7.bb
new file mode 100644
index 00000000..f4370692
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-subprocess32_3.2.7.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A backport of the subprocess module from Python 3.2 for use on 2.x"
+DESCRIPTION = "This is a backport of the subprocess standard library module \
+from Python 3.2 - 3.5 for use on Python 2. It includes bugfixes and some new \
+features. On POSIX systems it is guaranteed to be reliable when used in \
+threaded applications. It includes timeout support from Python 3.3 and the \
+run() API from 3.5 but otherwise matches 3.2's API."
+LICENSE = "Python-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d3e62baa8fb96b11a59d3f2cd335d5c0"
+
+SRC_URI[md5sum] = "824c801e479d3e916879aae3e9c15e16"
+SRC_URI[sha256sum] = "1e450a4a4c53bf197ad6402c564b9f7a53539385918ef8f12bdf430a61036590"
+
+inherit pypi setuptools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc
new file mode 100644
index 00000000..5be5de09
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc
@@ -0,0 +1,18 @@
+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 distro_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_append_libc-musl = " file://0001-Provide-implementation-of-strndupa-for-musl.patch"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/0001-Provide-implementation-of-strndupa-for-musl.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/0001-Provide-implementation-of-strndupa-for-musl.patch
new file mode 100644
index 00000000..d7085a85
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd_234.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd_234.bb
new file mode 100644
index 00000000..80f29007
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-systemd_234.bb
@@ -0,0 +1,2 @@
+require python-systemd.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado-redis_2.4.18.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado-redis_2.4.18.bb
new file mode 100644
index 00000000..46a20a5e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado-redis_2.4.18.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Tornado-Redis is an asyncronous Redis client for the Tornado Web Server"
+DESCRIPTION = "Tornado-Redis is a Redis client that uses Tornado's native 'tornado-gen' interface. \
+It can be used alongside redis-py in Tornado applications: \
+tornado-redis to subscribe to Pub/Sub notifications and for blocking commands (such as BLPOP, BRPOP, BRPOPLPUSH); \
+redis-py for other commands."
+HOMEPAGE = "https://github.com/leporo/tornado-redis"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=ca307e8f37b5fa7f8dbbec033f7db7de"
+
+SRC_URI[md5sum] = "1c7ec0f645d15400871141c1149e6934"
+SRC_URI[sha256sum] = "8fd3b324158291ad5fb7f5f8dc2e8763b2895556bd2a44f2dd721b703c669046"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "python-tornado"
+
+RDEPENDS_${PN}-test += "${PN} python-tornado"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado.inc
new file mode 100644
index 00000000..16899f88
--- /dev/null
+++ b/external/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] = "bd264851c409f926d1dae1ad5055d28d"
+SRC_URI[sha256sum] = "4f66a2172cb947387193ca4c2c3e19131f1c70fa8be470ddbbd9317fd0801582"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado_5.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado_5.1.bb
new file mode 100644
index 00000000..193a4db7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-tornado_5.1.bb
@@ -0,0 +1,8 @@
+inherit pypi setuptools
+require python-tornado.inc
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-backports-abc \
+ ${PYTHON_PN}-backports-ssl \
+ ${PYTHON_PN}-singledispatch \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-traceback2_1.4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-traceback2_1.4.0.bb
new file mode 100644
index 00000000..696c875c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-traceback2_1.4.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A backport of traceback to older supported Pythons"
+HOMEPAGE = "https://github.com/testing-cabal/traceback2"
+LICENSE = "Python-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=31;endline=31;md5=368ddc8588431c180ae7c33f4fb57519"
+
+DEPENDS = "${PYTHON_PN}-pbr-native"
+
+SRC_URI[md5sum] = "9e9723f4d70bfc6308fa992dd193c400"
+SRC_URI[sha256sum] = "05acc67a09980c2ecfedd3423f7ae0104839eccb55fc645773e1caa0951c3030"
+
+inherit pypi setuptools
+
+CLEANBROKEN = "1"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-linecache2"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc
new file mode 100644
index 00000000..01616b16
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc
@@ -0,0 +1,250 @@
+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=04e7730aecedc79d805625a91bc06145"
+
+SRC_URI[sha256sum] = "a4cc164a781859c74de47f17f0e85f4bce8a3321a9d0892c015c8f80c4158ad9"
+SRC_URI[md5sum] = "da8142ad4e9971a75fe751ac96a33b95"
+
+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}-src \
+ ${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}-core ${PYTHON_PN}-zopeinterface ${PYTHON_PN}-incremental ${PYTHON_PN}-constantly ${PYTHON_PN}-hyperlink ${PYTHON_PN}-automat"
+RDEPENDS_${PN}-test = "${PN}"
+RDEPENDS_${PN}-conch = "${PN}-core ${PN}-protocols"
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-twisted_18.4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-twisted_18.4.0.bb
new file mode 100644
index 00000000..5903db3e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-twisted_18.4.0.bb
@@ -0,0 +1,8 @@
+inherit pypi setuptools
+require python-twisted.inc
+
+RDEPENDS_${PN}-core += "${PYTHON_PN}-contextlib"
+
+RDEPENDS_${PN} += " \
+ ${PN}-news \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-twofish.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-twofish.inc
new file mode 100644
index 00000000..79ab285e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-twofish.inc
@@ -0,0 +1,13 @@
+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[md5sum] = "d7d22f16dc4ffa0e3ae2200654033abe"
+SRC_URI[sha256sum] = "b09d8bb50d33b23ff34cafb1f9209f858f752935c6a5c901efb92a41acb830fa"
+
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-twofish_0.3.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-twofish_0.3.0.bb
new file mode 100644
index 00000000..85b02159
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-twofish_0.3.0.bb
@@ -0,0 +1,2 @@
+require python-twofish.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-typing.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-typing.inc
new file mode 100644
index 00000000..a0ee6b24
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-typing.inc
@@ -0,0 +1,9 @@
+SUMMARY = "Simple Python module defined by PEP 484."
+HOMEPAGE = "https://github.com/python/typing"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=64fc2b30b67d0a8423c250e0386ed72f"
+
+SRC_URI[md5sum] = "5b2ade08d83be488f17b5fe587c27c74"
+SRC_URI[sha256sum] = "d400a9344254803a2368533e4533a4200d21eb7b6b729c173bc38201a74db3f2"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-typing_3.6.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-typing_3.6.4.bb
new file mode 100644
index 00000000..04ce063c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-typing_3.6.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-typing.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-ujson.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ujson.inc
new file mode 100644
index 00000000..c3d0bfee
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ujson.inc
@@ -0,0 +1,15 @@
+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"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=88df8e78b9edfd744953862179f2d14e"
+
+SRC_URI[md5sum] = "42f77b0cce686dfa4da2e68480b1dd24"
+SRC_URI[sha256sum] = "f66073e5506e91d204ab0c614a148d5aa938bdbf104751be66f8ad7a222f5f86"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-numbers \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-ujson_1.35.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ujson_1.35.bb
new file mode 100644
index 00000000..b3c6ae66
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-ujson_1.35.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-ujson.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff.inc
new file mode 100644
index 00000000..fc120620
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff.inc
@@ -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
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-io \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff_0.5.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff_0.5.5.bb
new file mode 100644
index 00000000..bdb3d27f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff_0.5.5.bb
@@ -0,0 +1,2 @@
+require python-unidiff.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3.inc
new file mode 100644
index 00000000..288ed8b9
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3.inc
@@ -0,0 +1,19 @@
+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=ea114851ad9a8c311aac8728a681a067"
+
+SRC_URI[md5sum] = "1ad43e4b5ab7a0794c89dc057e1d7179"
+SRC_URI[sha256sum] = "a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-certifi \
+ ${PYTHON_PN}-cryptography \
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-idna \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-pyopenssl \
+ ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3_1.23.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3_1.23.bb
new file mode 100644
index 00000000..6c81f1db
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3_1.23.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-urllib3.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-vcversioner_2.16.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-vcversioner_2.16.0.0.bb
new file mode 100644
index 00000000..cd6fa8df
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-vcversioner_2.16.0.0.bb
@@ -0,0 +1,25 @@
+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 setuptools
+
+do_compile_append() {
+ ${PYTHON} setup.py -q bdist_egg --dist-dir ./
+}
+
+do_install_append() {
+ install -m 0644 ${S}/vcversioner*.egg ${D}/${PYTHON_SITEPACKAGES_DIR}/
+}
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-subprocess \
+ "
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-visitor.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-visitor.inc
new file mode 100644
index 00000000..8c2288cf
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-visitor.inc
@@ -0,0 +1,6 @@
+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"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-visitor_0.1.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-visitor_0.1.3.bb
new file mode 100644
index 00000000..eee25a54
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-visitor_0.1.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-visitor.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-vobject_0.9.6.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-vobject_0.9.6.1.bb
new file mode 100644
index 00000000..d31f2f5a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-vobject_0.9.6.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python package for parsing and generating vCard and vCalendar files"
+HOMEPAGE = "http://vobject.skyhouseconsulting.com/"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE-2.0.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[md5sum] = "06357e96a84d55de2a71b36d39f6853e"
+SRC_URI[sha256sum] = "96512aec74b90abb71f6b53898dd7fe47300cc940104c4f79148f0671f790101"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-dateutil \
+ ${PYTHON_PN}-numbers \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth.inc
new file mode 100644
index 00000000..1429450b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth.inc
@@ -0,0 +1,8 @@
+SUMMARY = "Library for building powerful interactive command lines in Python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=11fba47286258744a6bc6e43530c32a1"
+
+SRC_URI[md5sum] = "b3b6a0a08f0c8a34d1de8cf44150a4ad"
+SRC_URI[sha256sum] = "3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth_0.1.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth_0.1.7.bb
new file mode 100644
index 00000000..ef107c16
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth_0.1.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-wcwidth.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors.inc
new file mode 100644
index 00000000..a02bbbbe
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors.inc
@@ -0,0 +1,12 @@
+SUMMARY = "Simple Python module for working with HTML/CSS color definitions."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=197add016087e6884a012b0f185d44ad"
+
+SRC_URI[md5sum] = "40890db38b2a856e526a568864025fe6"
+SRC_URI[sha256sum] = "030562f624467a9901f0b455fef05486a88cfb5daa1e356bd4aacea043850b59"
+
+RDEPENDS_${PN}_class-target = "\
+ ${PYTHON_PN}-stringold \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors_1.8.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors_1.8.1.bb
new file mode 100644
index 00000000..a0b6708c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors_1.8.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-webcolors.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-webdav_0.1.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-webdav_0.1.2.bb
new file mode 100644
index 00000000..7a6437dc
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-webdav_0.1.2.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "This project aims to provide an object-oriented Python WebDAV client-side library\
+ based on Python`s standard httplib and Greg Stein`s davlib.\
+ The client shall fully support RFCs 4918 (basic specification),\
+ 3744 (access control), and 3253 (versioning)."
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://src/webdav/WebdavClient.py;endline=15;md5=a1520fad859feb7b0d7f05277bc6ce48"
+HOMEPAGE = "http://sourceforge.net/projects/pythonwebdavlib/"
+SRCNAME = "Python_WebDAV_Library"
+DEPENDS = "python"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pythonwebdavlib/Python%20WebDAV%20Library%20-%20${PV}/${SRCNAME}-${PV}.zip"
+SRC_URI[md5sum] = "8e49e0ecc5b4327c4f752a544ee10e1a"
+SRC_URI[sha256sum] = "72c029ad1e25de950f59c2f1812d009d2c1691b70e4b5b09f1af9006e8fd5f23"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit distutils
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings.inc
new file mode 100644
index 00000000..34ca7066
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings.inc
@@ -0,0 +1,13 @@
+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
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-json \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings_0.5.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings_0.5.1.bb
new file mode 100644
index 00000000..5de2ed1d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-webencodings.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug.inc
new file mode 100644
index 00000000..c04a4e0c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug.inc
@@ -0,0 +1,47 @@
+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;md5=ed9a0b7c0254616d72dadb98b293ef1b"
+
+SRC_URI[md5sum] = "6d20b5be2d245be4ac7706cc390d130c"
+SRC_URI[sha256sum] = "c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c"
+
+PYPI_PACKAGE = "Werkzeug"
+
+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}-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/external/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug_0.14.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug_0.14.1.bb
new file mode 100644
index 00000000..db41161b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug_0.14.1.bb
@@ -0,0 +1,7 @@
+inherit pypi setuptools
+require python-werkzeug.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-zlib \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh.inc
new file mode 100644
index 00000000..a4ca5dcd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh.inc
@@ -0,0 +1,24 @@
+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"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=05303186defc6141143629961c7c8a60"
+
+SRC_URI[md5sum] = "893433e9c0525ac043df33e6e04caab2"
+SRC_URI[sha256sum] = "e0857375f63e9041e03fedd5b7541f97cf78917ac1b6b06c1fcc9b45375dda69"
+
+PYPI_PACKAGE = "Whoosh"
+PYPI_PACKAGE_EXT = "zip"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-multiprocessing \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-stringold \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh_2.7.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh_2.7.4.bb
new file mode 100644
index 00000000..3b4291f4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh_2.7.4.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-whoosh.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt.inc
new file mode 100644
index 00000000..c85548fb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt.inc
@@ -0,0 +1,15 @@
+SUMMARY = "A Python module for decorators, wrappers and monkey patching."
+HOMEPAGE = "http://wrapt.readthedocs.org/"
+LICENSE = "BSD"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=61c27930012e86b3dc7e36f92e83c4d8"
+
+SRC_URI[md5sum] = "e1346f31782d50401f81c2345b037076"
+SRC_URI[sha256sum] = "d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-threading \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt_1.10.11.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt_1.10.11.bb
new file mode 100644
index 00000000..bb424765
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt_1.10.11.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-wrapt.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms.inc
new file mode 100644
index 00000000..868686bf
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "A flexible forms validation and rendering library for python web development."
+HOMEPAGE = "https://pypi.python.org/pypi/WTForms"
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=c4660c132770d5d0a5757541f6b79493"
+
+SRC_URI[md5sum] = "41c0008dbe7bd98892c58f7457a46a4a"
+SRC_URI[sha256sum] = "0cdbac3e7f6878086c334aa25dc5a33869a3954e9d1e015130d65a69309b3b61"
+
+PYPI_PACKAGE = "WTForms"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-numbers \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms_2.2.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms_2.2.1.bb
new file mode 100644
index 00000000..fdb015e8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms_2.2.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-wtforms.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd.inc
new file mode 100644
index 00000000..d1ab05d4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd.inc
@@ -0,0 +1,12 @@
+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"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=08bd814936237b6e1355e6370b24b2c1"
+
+SRC_URI[md5sum] = "b85c9916ac755cad489a9005f5a0d390"
+SRC_URI[sha256sum] = "8a21885513e6d915fe33a8ee5fdfa675433b61405ba13e2a69e62ee36828d7e2"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-io ${PYTHON_PN}-pprint ${PYTHON_PN}-shell"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd_1.1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd_1.1.0.bb
new file mode 100644
index 00000000..3a4d709e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd_1.1.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-xlrd.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome.inc
new file mode 100644
index 00000000..d13cb83f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome.inc
@@ -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"
+
+inherit pypi
+
+SRC_URI[md5sum] = "141a0e9a7e21e82f922573a00ae0c166"
+SRC_URI[sha256sum] = "e01fb480caaa7c7963dcb3328a4700e631bef6070db0e8b685816d220e685f6c"
+
+DEPENDS += " \
+ ${PYTHON_PN}-xstatic \
+ ${PYTHON_PN}-pip \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome_4.7.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome_4.7.0.0.bb
new file mode 100644
index 00000000..41e85f4a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome_4.7.0.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-xstatic-font-awesome.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic.inc
new file mode 100644
index 00000000..f7c7db99
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic.inc
@@ -0,0 +1,14 @@
+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=36a1e7eaa71e1bd07b8d2247839f228e"
+
+PYPI_PACKAGE = "XStatic"
+
+SRC_URI[md5sum] = "7064b5ea7fd1ee990e0ae0538301d9bc"
+SRC_URI[sha256sum] = "0ec93d7c66ebb9e0d31b664753437dc8634cb66e13310cb47c9eb1e0bc66d726"
+
+DEPENDS += " \
+ ${PYTHON_PN}-pip \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic_1.0.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic_1.0.1.bb
new file mode 100644
index 00000000..80730370
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic_1.0.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-xstatic.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-yappi.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-yappi.inc
new file mode 100644
index 00000000..651ce773
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-yappi.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Yet Another Python Profiler"
+HOMEPAGE = "http://yappi.googlecode.com/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=6b131c3041637f6a5175a43112dde05c"
+
+SRC_URI[md5sum] = "dc56240575c99938a924eaeb7c0d8beb"
+SRC_URI[sha256sum] = "5f657129e1b9b952379ffbc009357d0dcdb58c50f3bfe88ffbb992e4b27b263c"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-threading \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-yappi_0.98.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-yappi_0.98.bb
new file mode 100644
index 00000000..a3bdde5c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-yappi_0.98.bb
@@ -0,0 +1,2 @@
+require python-yappi.inc
+inherit setuptools
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface.inc b/external/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface.inc
new file mode 100644
index 00000000..12623c9b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface.inc
@@ -0,0 +1,22 @@
+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] = "7b669cd692d817772c61d2e3ad0f1e71"
+SRC_URI[sha256sum] = "57c38470d9f57e37afb460c399eb254e7193ac7fb8042bd09bdc001981a9c74c"
+
+PYPI_PACKAGE = "zope.interface"
+
+PACKAGES =. "${PN}-test "
+
+RPROVIDES_${PN} += "zope-interfaces"
+
+RDEPENDS_${PN}_class-target += "${PYTHON_PN}-datetime"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface_4.5.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface_4.5.0.bb
new file mode 100644
index 00000000..1bdfd4d3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface_4.5.0.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools
+require python-zopeinterface.inc
+
+RDEPENDS_${PN}-test += "python-unittest python-doctest"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.0.0.bb
new file mode 100644
index 00000000..e248fe7c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.0.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-alembic.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb
new file mode 100644
index 00000000..199e225b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-anyjson.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.3.bb
new file mode 100644
index 00000000..d24e1d8b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-appdirs.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_0.24.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_0.24.0.bb
new file mode 100644
index 00000000..cfbe5752
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_0.24.0.bb
@@ -0,0 +1,6 @@
+inherit setuptools3
+require python-asn1crypto.inc
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-shell \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_1.6.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_1.6.5.bb
new file mode 100644
index 00000000..6e32c288
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_1.6.5.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-astroid.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb
new file mode 100644
index 00000000..e80648c8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-attr.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_18.1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_18.1.0.bb
new file mode 100644
index 00000000..c34693f5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_18.1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-attrs.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.7.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.7.0.bb
new file mode 100644
index 00000000..2c747643
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.7.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-automat.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.4.0.bb
new file mode 100644
index 00000000..c43649db
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.4.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-aws-iot-device-sdk-python.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.6.0.bb
new file mode 100644
index 00000000..0715d59f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-babel.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.4.0.bb
new file mode 100644
index 00000000..84f47614
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.4.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Security oriented static analyser for python code."
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1dece7821bf3fd70fe1309eaa37d52a2"
+
+SRC_URI[md5sum] = "f74155cb9921be857693b32d2531e857"
+SRC_URI[sha256sum] = "cb977045497f83ec3a02616973ab845c829cdab8144ce2e757fe031104a9abd4"
+
+DEPENDS = "python3-pyyaml python3-six python3-stevedore python3-pbr-native"
+
+inherit setuptools3 pypi
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.4.bb
new file mode 100644
index 00000000..d2ec9e38
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-bcrypt.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.6.0.bb
new file mode 100644
index 00000000..d98df11e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-beautifulsoup4.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-behave_1.2.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-behave_1.2.6.bb
new file mode 100644
index 00000000..1c55871b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-behave_1.2.6.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-behave.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_0.8.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_0.8.3.bb
new file mode 100644
index 00000000..7ee444dc
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_0.8.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-bitarray.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb
new file mode 100644
index 00000000..924b3cf5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-blinker.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-can_2.2.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-can_2.2.1.bb
new file mode 100644
index 00000000..aaa9e811
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-can_2.2.1.bb
@@ -0,0 +1,7 @@
+require python-can.inc
+inherit pypi setuptools3
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-compression \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.14.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.14.0.bb
new file mode 100644
index 00000000..34f149d3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.14.0.bb
@@ -0,0 +1,8 @@
+inherit setuptools3
+require python-cassandra-driver.inc
+
+# Requires concurrent which is currently in -misc
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-misc \
+ ${PYTHON_PN}-numbers \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2018.8.13.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2018.8.13.bb
new file mode 100644
index 00000000..70f674b2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2018.8.13.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-certifi.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.11.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.11.5.bb
new file mode 100644
index 00000000..e8880843
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.11.5.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-cffi.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb
new file mode 100644
index 00000000..38d8122c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb
@@ -0,0 +1,7 @@
+inherit setuptools3
+require python-chardet.inc
+
+do_install_append () {
+ # rename scripts that would conflict with the Python 2 build of chardet
+ mv ${D}${bindir}/chardetect ${D}${bindir}/chardetect3
+}
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-click_6.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-click_6.7.bb
new file mode 100644
index 00000000..19206440
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-click_6.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-click.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_3.5.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_3.5.0.bb
new file mode 100644
index 00000000..770cba59
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_3.5.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-configparser.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb
new file mode 100644
index 00000000..3f667540
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-constantly.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_4.4.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_4.4.2.bb
new file mode 100644
index 00000000..c983e0b5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_4.4.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] = "29a9fe85377e0f7327cf5db1e335483f"
+SRC_URI[sha256sum] = "309d91bd7a35063ec7a0e4d75645488bfab3f0b66373e7722f23da7f5b0f34cc"
+
+inherit pypi setuptools3
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-crcmod_1.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-crcmod_1.7.bb
new file mode 100644
index 00000000..6996b13d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-crcmod_1.7.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-crcmod.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.3.bb
new file mode 100644
index 00000000..58994fff
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-cryptography-vectors.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest
new file mode 100644
index 00000000..0ba239c2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest
@@ -0,0 +1,2 @@
+#!/bin/sh
+py.test
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.3.bb
new file mode 100644
index 00000000..19592334
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.3.bb
@@ -0,0 +1,8 @@
+inherit pypi setuptools3
+require python-cryptography.inc
+
+LDSHARED += "-pthread"
+
+SRC_URI += " \
+ file://run-ptest \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.28.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.28.5.bb
new file mode 100644
index 00000000..2ce6bdbd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.28.5.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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.7.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.7.3.bb
new file mode 100644
index 00000000..1d2baf55
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.7.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-dateutil.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.3.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.3.0.bb
new file mode 100644
index 00000000..844cbdc9
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.3.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-decorator.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-django-south_1.0.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-django-south_1.0.2.bb
new file mode 100644
index 00000000..10519111
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-django_1.11.14.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-django_1.11.14.bb
new file mode 100644
index 00000000..e1e38c32
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-django_1.11.14.bb
@@ -0,0 +1,2 @@
+require python-django.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-djangorestframework_3.9.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-djangorestframework_3.9.0.bb
new file mode 100644
index 00000000..9ed6d172
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.15.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.15.0.bb
new file mode 100644
index 00000000..ce4dfdc7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.15.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-dnspython.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.3.1.bb
new file mode 100644
index 00000000..5304ccc1
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.3.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-dominate.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.3.bb
new file mode 100644
index 00000000..8ad2b869
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-editor.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_0.7.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_0.7.0.bb
new file mode 100644
index 00000000..3a92b6ec
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_0.7.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-evdev.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-feedformatter_0.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-feedformatter_0.4.bb
new file mode 100644
index 00000000..95a5405f
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.11.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.11.2.bb
new file mode 100644
index 00000000..104e7c28
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.11.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-babel.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-bootstrap_3.3.7.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-bootstrap_3.3.7.1.bb
new file mode 100644
index 00000000..877c7543
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.4.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.4.1.bb
new file mode 100644
index 00000000..2d23fe16
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb
new file mode 100644
index 00000000..0b963be5
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.2.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.2.1.bb
new file mode 100644
index 00000000..c98cbfdd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.2.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-migrate.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb
new file mode 100644
index 00000000..d2511525
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_0.5.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_0.5.1.bb
new file mode 100644
index 00000000..2102554b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-pymongo.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.6.bb
new file mode 100644
index 00000000..6bff59a5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.6.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-flask-restful.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-script_2.0.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-script_2.0.6.bb
new file mode 100644
index 00000000..9f885191
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sijax_0.4.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sijax_0.4.1.bb
new file mode 100644
index 00000000..e9a65c4a
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.3.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.3.2.bb
new file mode 100644
index 00000000..07f45bcf
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.3.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-sqlalchemy.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-uploads_0.2.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-uploads_0.2.1.bb
new file mode 100644
index 00000000..758c2acf
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb
new file mode 100644
index 00000000..251017f8
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb
new file mode 100644
index 00000000..52362a86
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-xstatic_0.0.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-xstatic_0.0.1.bb
new file mode 100644
index 00000000..5412befd
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.0.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.0.2.bb
new file mode 100644
index 00000000..cd439900
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.0.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-future_0.16.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-future_0.16.0.bb
new file mode 100644
index 00000000..f059186b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-future_0.16.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-future.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.2.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.2.2.bb
new file mode 100644
index 00000000..1f172e58
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.2.2.bb
@@ -0,0 +1,3 @@
+require python-gevent.inc
+inherit setuptools3
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.14.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.14.bb
new file mode 100644
index 00000000..1aedf7fa
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.14.bb
@@ -0,0 +1,2 @@
+inherit distutils3
+require python-greenlet.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.14.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio-tools_1.14.1.bb
new file mode 100644
index 00000000..2da1a4df
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.14.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.14.1.bb
new file mode 100644
index 00000000..d4720b4b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-grpcio_1.14.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-grpcio.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-html5lib_1.0.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-html5lib_1.0.1.bb
new file mode 100644
index 00000000..6bd8b49f
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_0.5.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_0.5.1.bb
new file mode 100644
index 00000000..04464ac5
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_18.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_18.0.0.bb
new file mode 100644
index 00000000..70813bf3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_18.0.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-hyperlink.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.7.bb
new file mode 100644
index 00000000..a08ca714
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-idna.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-incremental_17.5.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-incremental_17.5.0.bb
new file mode 100644
index 00000000..0f04df4a
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.3.1.bb
new file mode 100644
index 00000000..cc36a02a
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-intervals_1.5.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-intervals_1.5.4.bb
new file mode 100644
index 00000000..8cbe1090
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-intervals_1.5.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-intervals.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb
new file mode 100644
index 00000000..4a332b53
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.4.bb
new file mode 100644
index 00000000..755b3e2f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-isort.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_0.24.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_0.24.bb
new file mode 100644
index 00000000..a71c20f0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_0.24.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools3
+require python-itsdangerous.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-compression \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.2.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.2.4.bb
new file mode 100644
index 00000000..0ec23ba9
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.2.4.bb
@@ -0,0 +1,2 @@
+require python-javaobj-py3.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.10.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.10.bb
new file mode 100644
index 00000000..61156b63
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.10.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-jinja2.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.23.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.23.bb
new file mode 100644
index 00000000..73efceee
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.23.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-jsonpatch.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer_2.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer_2.0.bb
new file mode 100644
index 00000000..8d0a09b4
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_2.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_2.6.0.bb
new file mode 100644
index 00000000..92699074
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_2.6.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-jsonschema.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb
new file mode 100644
index 00000000..eb42fe97
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.3.1.bb
new file mode 100644
index 00000000..150e12fd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-lazy-object-proxy.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.2.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.2.4.bb
new file mode 100644
index 00000000..b95d7bae
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.2.4.bb
@@ -0,0 +1,3 @@
+inherit setuptools3
+require python-lxml.inc
+CLEANBROKEN = "1"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.30.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.30.1.bb
new file mode 100644
index 00000000..4d63d4bd
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.0.bb
new file mode 100644
index 00000000..765e3c90
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-markupsafe.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.5.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.5.6.bb
new file mode 100644
index 00000000..096d7ddc
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.5.6.bb
@@ -0,0 +1,2 @@
+require python-msgpack.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_3.3.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_3.3.2.bb
new file mode 100644
index 00000000..e65d7d4f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_3.3.2.bb
@@ -0,0 +1,13 @@
+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
+
+SRC_URI[md5sum] = "06ca91d993de2d04c7ee6df0cbb44ea2"
+SRC_URI[sha256sum] = "f82e61c7408ed0dce1862100db55595481911f159d6ddec0b375d35b6449509b"
+
+# Work-around for broken make clean. Note this is fixed in v4.0.0.
+# https://github.com/aio-libs/multidict/issues/194
+CLEANBROKEN = "1"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ndg-httpsclient_0.5.1.bb
new file mode 100644
index 00000000..65a8c816
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb
new file mode 100644
index 00000000..30416a4f
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb
new file mode 100644
index 00000000..93df83ad
--- /dev/null
+++ b/external/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"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_2.0.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_2.0.6.bb
new file mode 100644
index 00000000..da13b55d
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_3.0.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_3.0.1.bb
new file mode 100644
index 00000000..662d3eeb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_3.0.1.bb
@@ -0,0 +1,11 @@
+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] = "a8059c7b99cde0f8dda01ddee6b43c2c"
+SRC_URI[sha256sum] = "3d6fd7bffbb15f613a9e8a6281bf97c2d67f7bb8677deca8249df2fbdd9cce7b"
+
+inherit pypi setuptools3
+
+DEPENDS += "python3-pytest-runner-native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.3.1.bb
new file mode 100644
index 00000000..4981e61e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.3.1.bb
@@ -0,0 +1,3 @@
+inherit setuptools3
+require python-paho-mqtt.inc
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_0.23.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_0.23.4.bb
new file mode 100644
index 00000000..b5dd5e09
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_0.23.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pandas.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.4.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-parse-type_0.4.2.bb
new file mode 100644
index 00000000..91d9ce2d
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.8.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.8.4.bb
new file mode 100644
index 00000000..b1242545
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.8.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-parse.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.1.bb
new file mode 100644
index 00000000..18180a07
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-passlib.inc \ No newline at end of file
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-periphery_1.1.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-periphery_1.1.1.bb
new file mode 100644
index 00000000..ba9a95db
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-periphery_1.1.1.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools3
+require python-periphery.inc
+
+SRC_URI[sha256sum] = "fe8f351934edce72cd919b4eb070878ebff551db5e21aea61e0f446101f0a79f" \ No newline at end of file
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.6.0.bb
new file mode 100644
index 00000000..cf39233a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.6.0.bb
@@ -0,0 +1,2 @@
+require python-pexpect.inc
+inherit pypi setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pid/0001-remove-requirement-of-nose.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pid/0001-remove-requirement-of-nose.patch
new file mode 100644
index 00000000..3beef070
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pid/0001-remove-requirement-of-nose.patch
@@ -0,0 +1,29 @@
+From 04d04a8fa1ef3d8dbdaebbaac9ae936e1c8234c1 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 28 Jun 2017 21:17:43 -0400
+Subject: [PATCH] remove requirement of nose
+
+The nose extends unittest to make testing easier.
+Do not need the test suite, so remove requirement of nose.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ setup.py | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 3f7c7cb..c42a546 100644
+--- a/setup.py
++++ b/setup.py
+@@ -53,6 +53,4 @@ setup(
+ keywords='pid pidfile context manager decorator',
+ packages=["pid"],
+ install_requires=[],
+- test_suite='nose.collector',
+- setup_requires=['nose>=1.0'],
+ )
+--
+2.8.1
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.0.bb
new file mode 100644
index 00000000..e4383198
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.0.bb
@@ -0,0 +1,14 @@
+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] = "04d30308013d16aa882b3806feda8ab2"
+SRC_URI[sha256sum] = "d8bb2ceec21a4ae84be6e9d320db1f56934b30e676e31c6f098ca7218b3d67d4"
+
+inherit pypi setuptools3
+
+SRC_URI += " \
+ file://0001-remove-requirement-of-nose.patch \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.8.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.8.1.bb
new file mode 100644
index 00000000..f793ac4a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.8.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pint.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.6.0.bb
new file mode 100644
index 00000000..941e8e3d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pluggy.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ply_3.11.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ply_3.11.bb
new file mode 100644
index 00000000..72410bae
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl/0001-support-cross-complication.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl/0001-support-cross-complication.patch
new file mode 100644
index 00000000..775ae1b2
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl_1.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl_1.7.bb
new file mode 100644
index 00000000..54620a06
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pretend_1.0.9.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pretend_1.0.9.bb
new file mode 100644
index 00000000..9c5d8a84
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.4.bb
new file mode 100644
index 00000000..45e26421
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-progress.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_2.0.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_2.0.4.bb
new file mode 100644
index 00000000..0e99917c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_2.0.4.bb
@@ -0,0 +1,7 @@
+inherit pypi setuptools3
+require python-prompt-toolkit.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-shell \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.6.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.6.1.bb
new file mode 100644
index 00000000..781d1dc4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.6.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-protobuf.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.4.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.4.6.bb
new file mode 100644
index 00000000..c1969ea6
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.4.6.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools3
+require python-psutil.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-netclient"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess_0.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess_0.6.0.bb
new file mode 100644
index 00000000..bdcd0e25
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.6.0.bb
new file mode 100644
index 00000000..0ee373d2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.6.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-py.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyalsaaudio_0.8.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyalsaaudio_0.8.4.bb
new file mode 100644
index 00000000..b7da1a43
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.2.bb
new file mode 100644
index 00000000..3b1186f0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.2.bb
@@ -0,0 +1,2 @@
+require python-pyasn1-modules.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.4.bb
new file mode 100644
index 00000000..a5e2a713
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pyasn1.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.2.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.2.3.bb
new file mode 100644
index 00000000..355e2846
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.2.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pybind11.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb
new file mode 100644
index 00000000..9712a760
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb
@@ -0,0 +1,2 @@
+require python-pybluez.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.4.0.bb
new file mode 100644
index 00000000..cedcdb3b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.4.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pycodestyle.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.18.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.18.bb
new file mode 100644
index 00000000..7cc024ea
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.18.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools3
+require python-pycparser.inc
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-netclient \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb
new file mode 100644
index 00000000..02d634cb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb
@@ -0,0 +1,9 @@
+inherit distutils3
+require python-pycrypto.inc
+
+# 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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycryptodome_3.4.11.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycryptodome_3.4.11.bb
new file mode 100644
index 00000000..0c062ddd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pycryptodome_3.4.11.bb
@@ -0,0 +1,2 @@
+require python-pycryptodome.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0001-Support-asynchronous-calls-58.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0001-Support-asynchronous-calls-58.patch
new file mode 100644
index 00000000..c5cb9a87
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0002-Support-transformation-between-D-Bus-errors-and-exce.patch b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus/0002-Support-transformation-between-D-Bus-errors-and-exce.patch
new file mode 100644
index 00000000..f5c0390c
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb
new file mode 100644
index 00000000..adaa86d5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb
@@ -0,0 +1,6 @@
+require python-pydbus.inc
+inherit pypi setuptools3
+
+SRC_URI += "file://0001-Support-asynchronous-calls-58.patch \
+ file://0002-Support-transformation-between-D-Bus-errors-and-exce.patch \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.17.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.17.bb
new file mode 100644
index 00000000..bfd58404
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.17.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyexpect.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.0.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.0.3.bb
new file mode 100644
index 00000000..25af1b5c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.0.3.bb
@@ -0,0 +1,3 @@
+inherit setuptools3
+require python-pyfirmata.inc
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.11.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.11.bb
new file mode 100644
index 00000000..721e7b1c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.11.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyiface.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb
new file mode 100644
index 00000000..b3bab989
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyinotify.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_17.1.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_17.1.1.bb
new file mode 100644
index 00000000..8982fceb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_17.1.1.bb
@@ -0,0 +1,2 @@
+require python-pyjks.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.6.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.6.4.bb
new file mode 100644
index 00000000..dc16d228
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.6.4.bb
@@ -0,0 +1,2 @@
+require python-pyjwt.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb
new file mode 100644
index 00000000..563e8316
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3 python3-dir
+require python-pylint.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.93.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.93.bb
new file mode 100644
index 00000000..4523d9e3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.93.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pymisp.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.7.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.7.1.bb
new file mode 100644
index 00000000..5164b186
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.7.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pymongo.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb
new file mode 100644
index 00000000..f6d9e3c0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pynetlinux.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_18.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_18.0.0.bb
new file mode 100644
index 00000000..0f0f83e3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_18.0.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pyopenssl.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.2.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.2.0.bb
new file mode 100644
index 00000000..0805fee3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.2.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyparsing.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.6.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.6.2.bb
new file mode 100644
index 00000000..ee6f88bb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.6.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyperclip.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.2.bb
new file mode 100644
index 00000000..a23e72c4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.2.bb
@@ -0,0 +1,2 @@
+require python-pyroute2.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb
new file mode 100644
index 00000000..17ed3f8b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb
@@ -0,0 +1,7 @@
+inherit setuptools3
+require python-pyserial.inc
+
+do_install_append() {
+ rm -f ${D}${bindir}/miniterm.py
+ rmdir ${D}${bindir}
+}
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.6.8.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.6.8.bb
new file mode 100644
index 00000000..bbda05a5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.6.8.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools3
+require python-pysocks.inc
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-netclient \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2016.7.10.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2016.7.10.bb
new file mode 100644
index 00000000..f03f5d41
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-helpers-namespace_2016.7.10.bb
@@ -0,0 +1,7 @@
+require python-pytest-helpers-namespace.inc
+
+inherit setuptools3
+
+RDEPENDS_${PN} += " \
+ python3-pytest \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_4.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_4.2.bb
new file mode 100644
index 00000000..df56ba6d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_4.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pytest-runner.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-tempdir_2016.8.20.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-tempdir_2016.8.20.bb
new file mode 100644
index 00000000..02e82156
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-tempdir_2016.8.20.bb
@@ -0,0 +1,7 @@
+require python-pytest-tempdir.inc
+
+inherit setuptools3
+
+RDEPENDS_${PN} += " \
+ python3-pytest \
+ "
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_3.4.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_3.4.2.bb
new file mode 100644
index 00000000..eba6632a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_3.4.2.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools3
+require python-pytest.inc
+
+ALTERNATIVE_PRIORITY = "100"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2018.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2018.5.bb
new file mode 100755
index 00000000..19a89dc5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2018.5.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pytz.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb
new file mode 100644
index 00000000..a62d944b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb
@@ -0,0 +1,2 @@
+require python-pyudev.inc
+inherit pypi setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb
new file mode 100644
index 00000000..1ecede7c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyusb.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_3.13.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_3.13.bb
new file mode 100644
index 00000000..470aca60
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_3.13.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyyaml.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_17.1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_17.1.0.bb
new file mode 100644
index 00000000..050f53af
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_17.1.0.bb
@@ -0,0 +1,2 @@
+require python-pyzmq.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb
new file mode 100644
index 00000000..b192ed87
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-redis.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-file_1.4.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-file_1.4.3.bb
new file mode 100644
index 00000000..0407779d
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb
new file mode 100644
index 00000000..3f99ed67
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.19.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.19.1.bb
new file mode 100644
index 00000000..0a2410f8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.19.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-requests.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.7.bb
new file mode 100644
index 00000000..cd1536b3
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-rfc3987.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.3.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.3.1.bb
new file mode 100644
index 00000000..440f69cb
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.3.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-robotframework-seriallibrary.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.4.bb
new file mode 100644
index 00000000..8f613c38
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-robotframework.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-scapy_0.25.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-scapy_0.25.bb
new file mode 100644
index 00000000..f785a2fe
--- /dev/null
+++ b/external/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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb
new file mode 100644
index 00000000..f4966532
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb
@@ -0,0 +1,3 @@
+inherit setuptools3 python3-dir
+require python-scrypt.inc
+
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb
new file mode 100644
index 00000000..377af12e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3 pypi
+require python-sdnotify.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_2.8.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_2.8.1.bb
new file mode 100644
index 00000000..77925ae2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_2.8.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-semver.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.25.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.25.bb
new file mode 100644
index 00000000..1e04def7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.25.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-serpent.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_2.1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_2.1.0.bb
new file mode 100644
index 00000000..5bf59838
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_2.1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-setuptools-scm.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.12.14.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.12.14.bb
new file mode 100644
index 00000000..812bd4b1
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.12.14.bb
@@ -0,0 +1,5 @@
+require python-sh.inc
+inherit setuptools3
+
+RDEPENDS_${PN} += " \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sijax_0.3.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sijax_0.3.2.bb
new file mode 100644
index 00000000..24e68337
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sijax_0.3.2.bb
@@ -0,0 +1,4 @@
+inherit setuptools3
+require python-sijax.inc
+
+SRC_URI[sha256sum] = "11b062f4a8b2aad95c87e7c09e5daf5a6b0d0f08abf9efe5f91a0075c6be7c0d" \ No newline at end of file
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.16.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.16.0.bb
new file mode 100644
index 00000000..38f406c5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.16.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-simplejson.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.0.bb
new file mode 100644
index 00000000..b357bcd8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.0.bb
@@ -0,0 +1,2 @@
+inherit distutils3
+require python-smbus.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb
new file mode 100644
index 00000000..aa4f699b
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-speaklater.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb
new file mode 100644
index 00000000..610611e4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-spidev.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.1.17.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.1.17.bb
new file mode 100644
index 00000000..86cf9edd
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.1.17.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-sqlalchemy.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_1.29.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_1.29.0.bb
new file mode 100644
index 00000000..3f557f2c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_1.29.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-stevedore.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb
new file mode 100644
index 00000000..9e37052a
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-strict-rfc3339.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb
new file mode 100644
index 00000000..580d9935
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb
@@ -0,0 +1,2 @@
+require python-systemd.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_5.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_5.1.bb
new file mode 100644
index 00000000..77c9fb51
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_5.1.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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_18.4.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_18.4.0.bb
new file mode 100644
index 00000000..6bd8c52e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_18.4.0.bb
@@ -0,0 +1,67 @@
+inherit pypi setuptools3
+require python-twisted.inc
+
+PACKAGES_remove = "${PN}-src"
+
+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/external/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb
new file mode 100644
index 00000000..e593f6f2
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb
@@ -0,0 +1,2 @@
+require python-twofish.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb
new file mode 100644
index 00000000..ae4cc0a8
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-ujson.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb
new file mode 100644
index 00000000..0ddc7e2f
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb
@@ -0,0 +1,2 @@
+require python-unidiff.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.23.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.23.bb
new file mode 100644
index 00000000..19eb7025
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.23.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-urllib3.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb
new file mode 100644
index 00000000..f6372c8d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb
@@ -0,0 +1,20 @@
+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
+
+do_compile_append() {
+ ${PYTHON} setup.py -q bdist_egg --dist-dir ./
+}
+
+do_install_append() {
+ install -m 0644 ${S}/vcversioner*.egg ${D}/${PYTHON_SITEPACKAGES_DIR}/
+}
+
+BBCLASSEXTEND = "native"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb
new file mode 100644
index 00000000..b9bc51d4
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-visitor.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.7.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.7.bb
new file mode 100644
index 00000000..5f6259b0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-wcwidth.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb
new file mode 100644
index 00000000..fcd9f707
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-webcolors.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb
new file mode 100644
index 00000000..71fe741e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-webencodings.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_4.0.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_4.0.1.bb
new file mode 100644
index 00000000..414129c5
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_4.0.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=5070256738c06d2e59adbec1f4057dac"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "9e8c6b3c70def4146d75fbb0f52bdfc7"
+SRC_URI[sha256sum] = "da4d4fbe059b0453e726d6d993760065d69b823a27efc3040402a6fcfe6a1ed9"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-asyncio \
+"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_0.14.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_0.14.1.bb
new file mode 100644
index 00000000..145a1de0
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_0.14.1.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools3
+require python-werkzeug.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-misc"
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb
new file mode 100644
index 00000000..5d8af303
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-whoosh.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.10.11.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.10.11.bb
new file mode 100644
index 00000000..85f446ef
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.10.11.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-wrapt.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.2.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.2.1.bb
new file mode 100644
index 00000000..add59cf7
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.2.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-wtforms.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.1.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.1.0.bb
new file mode 100644
index 00000000..b7bd969c
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.1.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-xlrd.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb
new file mode 100644
index 00000000..639f80de
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-xstatic-font-awesome.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.1.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.1.bb
new file mode 100644
index 00000000..76cb7027
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-xstatic.inc
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_0.98.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_0.98.bb
new file mode 100644
index 00000000..07da5b6e
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_0.98.bb
@@ -0,0 +1,2 @@
+require python-yappi.inc
+inherit setuptools3
diff --git a/external/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.5.0.bb b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.5.0.bb
new file mode 100644
index 00000000..be11858d
--- /dev/null
+++ b/external/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.5.0.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools3
+require python-zopeinterface.inc
+
+RDEPENDS_${PN}-test += "python3-unittest python3-doctest"