diff --git a/python/origen/poetry.lock b/python/origen/poetry.lock index fd689026..3520007b 100644 --- a/python/origen/poetry.lock +++ b/python/origen/poetry.lock @@ -1,10 +1,16 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + [[package]] name = "alabaster" -version = "0.7.12" +version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] [[package]] name = "atomicwrites" @@ -13,31 +19,46 @@ description = "Atomic file writes." category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, +] [[package]] name = "attrs" -version = "21.4.0" +version = "23.1.0" description = "Classes Without Boilerplate" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] [[package]] name = "babel" -version = "2.10.3" +version = "2.12.1" description = "Internationalization utilities" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] [package.dependencies] -pytz = ">=2015.7" +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} [[package]] name = "beautifulsoup4" @@ -46,6 +67,11 @@ description = "Screen-scraping library" category = "main" optional = false python-versions = "*" +files = [ + {file = "beautifulsoup4-4.8.2-py2-none-any.whl", hash = "sha256:e1505eeed31b0f4ce2dbb3bc8eb256c04cc2b3b72af7d551a4ab6efd5cbe5dae"}, + {file = "beautifulsoup4-4.8.2-py3-none-any.whl", hash = "sha256:9fbb4d6e48ecd30bcacc5b63b94088192dcda178513b2ae3c394229f8911b887"}, + {file = "beautifulsoup4-4.8.2.tar.gz", hash = "sha256:05fd825eb01c290877657a56df4c6e4c311b3965bda790c613a3d6fb01a5462a"}, +] [package.dependencies] soupsieve = ">=1.2" @@ -61,17 +87,24 @@ description = "Dummy package for Beautiful Soup" category = "main" optional = false python-versions = "*" +files = [ + {file = "bs4-0.0.1.tar.gz", hash = "sha256:36ecea1fd7cc5c0c6e4a1ff075df26d50da647b75376626cc186e2212886dd3a"}, +] [package.dependencies] beautifulsoup4 = "*" [[package]] name = "cachecontrol" -version = "0.12.11" +version = "0.12.14" description = "httplib2 caching for requests" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "CacheControl-0.12.14-py2.py3-none-any.whl", hash = "sha256:1c2939be362a70c4e5f02c6249462b3b7a24441e4f1ced5e9ef028172edf356a"}, + {file = "CacheControl-0.12.14.tar.gz", hash = "sha256:d1087f45781c0e00616479bfd282c78504371ca71da017b49df9f5365a95feba"}, +] [package.dependencies] lockfile = {version = ">=0.9", optional = true, markers = "extra == \"filecache\""} @@ -89,19 +122,27 @@ description = "Cachy provides a simple yet effective caching library." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "cachy-0.3.0-py2.py3-none-any.whl", hash = "sha256:338ca09c8860e76b275aff52374330efedc4d5a5e45dc1c5b539c1ead0786fe7"}, + {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, +] [package.extras] -redis = ["redis (>=3.3.6,<4.0.0)"] memcached = ["python-memcached (>=1.59,<2.0)"] msgpack = ["msgpack-python (>=0.5,<0.6)"] +redis = ["redis (>=3.3.6,<4.0.0)"] [[package]] name = "certifi" -version = "2022.6.15" +version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, +] [[package]] name = "cffi" @@ -110,20 +151,160 @@ description = "Foreign Function Interface for Python calling C code." category = "main" optional = false python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] [package.dependencies] pycparser = "*" [[package]] name = "charset-normalizer" -version = "2.1.0" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.6.0" - -[package.extras] -unicode_backport = ["unicodedata2"] +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, +] [[package]] name = "cleo" @@ -132,6 +313,10 @@ description = "Cleo allows you to create beautiful and testable command-line int category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "cleo-0.8.1-py2.py3-none-any.whl", hash = "sha256:141cda6dc94a92343be626bb87a0b6c86ae291dfc732a57bf04310d4b4201753"}, + {file = "cleo-0.8.1.tar.gz", hash = "sha256:3d0e22d30117851b45970b6c14aca4ab0b18b1b53c8af57bed13208147e4069f"}, +] [package.dependencies] clikit = ">=0.6.0,<0.7.0" @@ -143,6 +328,10 @@ description = "CliKit is a group of utilities to build beautiful and testable co category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "clikit-0.6.2-py2.py3-none-any.whl", hash = "sha256:71268e074e68082306e23d7369a7b99f824a0ef926e55ba2665e911f7208489e"}, + {file = "clikit-0.6.2.tar.gz", hash = "sha256:442ee5db9a14120635c5990bcdbfe7c03ada5898291f0c802f77be71569ded59"}, +] [package.dependencies] crashtest = {version = ">=0.3.0,<0.4.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} @@ -151,11 +340,15 @@ pylev = ">=1.3,<2.0" [[package]] name = "colorama" -version = "0.4.5" +version = "0.4.6" description = "Cross-platform colored terminal text." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "commonmark" @@ -164,6 +357,10 @@ description = "Python parser for the CommonMark Markdown spec" category = "main" optional = false python-versions = "*" +files = [ + {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, + {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, +] [package.extras] test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] @@ -175,53 +372,96 @@ description = "Manage Python errors with ease" category = "main" optional = false python-versions = ">=3.6,<4.0" +files = [ + {file = "crashtest-0.3.1-py3-none-any.whl", hash = "sha256:300f4b0825f57688b47b6d70c6a31de33512eb2fa1ac614f780939aa0cf91680"}, + {file = "crashtest-0.3.1.tar.gz", hash = "sha256:42ca7b6ce88b6c7433e2ce47ea884e91ec93104a4b754998be498a8e6c3d37dd"}, +] [[package]] name = "cryptography" -version = "37.0.4" +version = "41.0.2" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711"}, + {file = "cryptography-41.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182"}, + {file = "cryptography-41.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83"}, + {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5"}, + {file = "cryptography-41.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58"}, + {file = "cryptography-41.0.2-cp37-abi3-win32.whl", hash = "sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76"}, + {file = "cryptography-41.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766"}, + {file = "cryptography-41.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa"}, + {file = "cryptography-41.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f"}, + {file = "cryptography-41.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0"}, + {file = "cryptography-41.0.2.tar.gz", hash = "sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c"}, +] [package.dependencies] cffi = ">=1.12" [package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] -docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools_rust (>=0.11.4)"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +nox = ["nox"] +pep8test = ["black", "check-sdist", "mypy", "ruff"] +sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] +test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] [[package]] name = "distlib" -version = "0.3.5" +version = "0.3.7" description = "Distribution utilities" category = "main" optional = false python-versions = "*" +files = [ + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, +] [[package]] name = "docutils" -version = "0.19" +version = "0.20.1" description = "Docutils -- Python Documentation Utilities" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, +] [[package]] name = "filelock" -version = "3.7.1" +version = "3.12.2" description = "A platform independent file lock." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, +] [package.extras] -docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] -testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] [[package]] name = "html5lib" @@ -230,24 +470,32 @@ description = "HTML parser based on the WHATWG HTML specification" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] [package.dependencies] six = ">=1.9" webencodings = "*" [package.extras] -all = ["genshi", "chardet (>=2.2)", "lxml"] +all = ["chardet (>=2.2)", "genshi", "lxml"] chardet = ["chardet (>=2.2)"] genshi = ["genshi"] lxml = ["lxml"] [[package]] name = "idna" -version = "3.3" +version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] [[package]] name = "imagesize" @@ -256,6 +504,10 @@ description = "Getting image size from png/jpeg/jpeg2000/gif file" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] [[package]] name = "importlib-metadata" @@ -264,21 +516,29 @@ description = "Read metadata from Python packages" category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "importlib_metadata-1.7.0-py2.py3-none-any.whl", hash = "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"}, + {file = "importlib_metadata-1.7.0.tar.gz", hash = "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83"}, +] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["sphinx", "rst.linker"] -testing = ["packaging", "pep517", "importlib-resources (>=1.3)"] +docs = ["rst.linker", "sphinx"] +testing = ["importlib-resources (>=1.3)", "packaging", "pep517"] [[package]] name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] [[package]] name = "jeepney" @@ -287,10 +547,14 @@ description = "Low-level, pure Python DBus protocol wrapper." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, + {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, +] [package.extras] -test = ["pytest", "pytest-trio", "pytest-asyncio (>=0.17)", "testpath", "trio", "async-timeout"] -trio = ["trio", "async-generator"] +test = ["async-timeout", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] +trio = ["async_generator", "trio"] [[package]] name = "jinja2" @@ -299,6 +563,10 @@ description = "A very fast and expressive template engine." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] [package.dependencies] MarkupSafe = ">=2.0" @@ -313,6 +581,10 @@ description = "Store and access your passwords safely." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "keyring-22.3.0-py3-none-any.whl", hash = "sha256:2bc8363ebdd63886126a012057a85c8cb6e143877afa02619ac7dbc9f38a207b"}, + {file = "keyring-22.3.0.tar.gz", hash = "sha256:16927a444b2c73f983520a48dec79ddab49fe76429ea05b8d528d778c8339522"}, +] [package.dependencies] importlib-metadata = {version = ">=1", markers = "python_version < \"3.8\""} @@ -321,8 +593,8 @@ pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_ SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "pytest-black (>=0.3.7)", "pytest-mypy"] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +testing = ["pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=1.2.3)", "pytest-cov", "pytest-enabler", "pytest-flake8", "pytest-mypy"] [[package]] name = "lockfile" @@ -331,6 +603,10 @@ description = "Platform-independent file locking module" category = "main" optional = false python-versions = "*" +files = [ + {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, + {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, +] [[package]] name = "mako" @@ -339,25 +615,145 @@ description = "A super-fast templating language that borrows the best ideas fro category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Mako-1.1.0.tar.gz", hash = "sha256:a36919599a9b7dc5d86a7a8988f23a9a3a3d083070023bab23d64f7f1d1e0a4b"}, +] [package.dependencies] MarkupSafe = ">=0.9.2" [[package]] name = "markupsafe" -version = "2.1.1" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] [[package]] name = "msgpack" -version = "1.0.4" +version = "1.0.5" description = "MessagePack serializer" category = "main" optional = false python-versions = "*" +files = [ + {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9"}, + {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198"}, + {file = "msgpack-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81"}, + {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7"}, + {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3"}, + {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b"}, + {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c"}, + {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd"}, + {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a"}, + {file = "msgpack-1.0.5-cp310-cp310-win32.whl", hash = "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea"}, + {file = "msgpack-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a"}, + {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0"}, + {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898"}, + {file = "msgpack-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a"}, + {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a"}, + {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705"}, + {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d"}, + {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9"}, + {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7"}, + {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed"}, + {file = "msgpack-1.0.5-cp311-cp311-win32.whl", hash = "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c"}, + {file = "msgpack-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2"}, + {file = "msgpack-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57"}, + {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080"}, + {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6"}, + {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f"}, + {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c"}, + {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b"}, + {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c"}, + {file = "msgpack-1.0.5-cp36-cp36m-win32.whl", hash = "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9"}, + {file = "msgpack-1.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a"}, + {file = "msgpack-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c"}, + {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b"}, + {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f"}, + {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f"}, + {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d"}, + {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086"}, + {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf"}, + {file = "msgpack-1.0.5-cp37-cp37m-win32.whl", hash = "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77"}, + {file = "msgpack-1.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82"}, + {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c"}, + {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d"}, + {file = "msgpack-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb"}, + {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba"}, + {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1"}, + {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87"}, + {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb"}, + {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48"}, + {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0"}, + {file = "msgpack-1.0.5-cp38-cp38-win32.whl", hash = "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e"}, + {file = "msgpack-1.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1"}, + {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025"}, + {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5"}, + {file = "msgpack-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd"}, + {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437"}, + {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f"}, + {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282"}, + {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d"}, + {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8"}, + {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11"}, + {file = "msgpack-1.0.5-cp39-cp39-win32.whl", hash = "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc"}, + {file = "msgpack-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164"}, + {file = "msgpack-1.0.5.tar.gz", hash = "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"}, +] [[package]] name = "origen-autoapi" @@ -366,6 +762,10 @@ description = "Automatic API reference documentation generation for Sphinx inspi category = "main" optional = false python-versions = "*" +files = [ + {file = "origen_autoapi-2.0.1-py3-none-any.whl", hash = "sha256:2807aaa7c861e54679a572bdf36d5c77ea4f26f61464b5dba293f44dd4db8dca"}, + {file = "origen_autoapi-2.0.1.tar.gz", hash = "sha256:df282703e9a430a4242299684d69d0631ea8c6e323c920e57580dc04d78c0c3d"}, +] [package.dependencies] sphinx = "*" @@ -376,7 +776,8 @@ version = "0.4.0" description = "Bare metal APIs for the Origen SDK" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7" +files = [] develop = true [package.dependencies] @@ -395,6 +796,10 @@ description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, + {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, +] [package.dependencies] pyparsing = ">=2.0.2" @@ -406,6 +811,10 @@ description = "Bring colors to your terminal." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"}, + {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, +] [[package]] name = "pexpect" @@ -414,40 +823,59 @@ description = "Pexpect allows easy control of interactive console applications." category = "main" optional = false python-versions = "*" +files = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] [package.dependencies] ptyprocess = ">=0.5" [[package]] name = "pkginfo" -version = "1.8.3" -description = "Query metadatdata from sdists / bdists / installed packages." +version = "1.9.6" +description = "Query metadata from sdists / bdists / installed packages." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.6" +files = [ + {file = "pkginfo-1.9.6-py3-none-any.whl", hash = "sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546"}, + {file = "pkginfo-1.9.6.tar.gz", hash = "sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046"}, +] [package.extras] -testing = ["nose", "coverage"] +testing = ["pytest", "pytest-cov"] [[package]] name = "platformdirs" -version = "2.5.2" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "2.6.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "platformdirs-2.6.2-py3-none-any.whl", hash = "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490"}, + {file = "platformdirs-2.6.2.tar.gz", hash = "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.4", markers = "python_version < \"3.8\""} [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] [package.dependencies] importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} @@ -458,11 +886,15 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "poetry" -version = "1.1.14" +version = "1.1.15" description = "Python dependency management and packaging made easy." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "poetry-1.1.15-py2.py3-none-any.whl", hash = "sha256:2f8f68bc02006386dd640d08e0ae483231501c6e727842a8a799c9ee376b98c2"}, + {file = "poetry-1.1.15.tar.gz", hash = "sha256:a373848fd205f31b2f6bee6b87a201ea1e09ca573a2f40d0991539f564cedffd"}, +] [package.dependencies] cachecontrol = {version = ">=0.12.9,<0.13.0", extras = ["filecache"], markers = "python_version >= \"3.6\" and python_version < \"4.0\""} @@ -490,6 +922,10 @@ description = "Poetry PEP 517 Build Backend" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "poetry-core-1.0.8.tar.gz", hash = "sha256:951fc7c1f8d710a94cb49019ee3742125039fc659675912ea614ac2aa405b118"}, + {file = "poetry_core-1.0.8-py2.py3-none-any.whl", hash = "sha256:54b0fab6f7b313886e547a52f8bf52b8cf43e65b2633c65117f8755289061924"}, +] [package.dependencies] importlib-metadata = {version = ">=1.7.0,<2.0.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\" or python_version >= \"3.5\" and python_version < \"3.8\""} @@ -501,6 +937,10 @@ description = "Run a subprocess in a pseudo terminal" category = "main" optional = false python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] [[package]] name = "py" @@ -509,6 +949,10 @@ description = "library with cross-python path, ini-parsing, io, code, log facili category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] [[package]] name = "pycparser" @@ -517,14 +961,25 @@ description = "C parser in Python" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] [[package]] name = "pygments" -version = "2.12.0" +version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +] + +[package.extras] +plugins = ["importlib-metadata"] [[package]] name = "pylev" @@ -533,17 +988,25 @@ description = "A pure Python Levenshtein implementation that's not freaking GPL' category = "main" optional = false python-versions = "*" +files = [ + {file = "pylev-1.4.0-py2.py3-none-any.whl", hash = "sha256:7b2e2aa7b00e05bb3f7650eb506fc89f474f70493271a35c242d9a92188ad3dd"}, + {file = "pylev-1.4.0.tar.gz", hash = "sha256:9e77e941042ad3a4cc305dcdf2b2dec1aec2fbe3dd9015d2698ad02b173006d1"}, +] [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.0" description = "pyparsing module - Classes and methods to define and execute parsing grammars" category = "main" optional = false python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.0-py3-none-any.whl", hash = "sha256:d554a96d1a7d3ddaf7183104485bc19fd80543ad6ac5bdb6426719d766fb06c1"}, + {file = "pyparsing-3.1.0.tar.gz", hash = "sha256:edb662d6fe322d6e990b1594b5feaeadf806803359e3d4d42f11e295e588f0ea"}, +] [package.extras] -diagrams = ["railroad-diagrams", "jinja2"] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyreadline3" @@ -552,6 +1015,10 @@ description = "A python implementation of GNU readline." category = "main" optional = false python-versions = "*" +files = [ + {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, + {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, +] [[package]] name = "pytest" @@ -560,6 +1027,10 @@ description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, +] [package.dependencies] atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} @@ -577,19 +1048,27 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xm [[package]] name = "pytz" -version = "2022.1" +version = "2023.3" description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" +files = [ + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, +] [[package]] name = "pywin32-ctypes" -version = "0.2.0" -description = "" +version = "0.2.2" +description = "A (partial) reimplementation of pywin32 using ctypes/cffi" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" +files = [ + {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"}, + {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, +] [[package]] name = "recommonmark" @@ -598,6 +1077,10 @@ description = "A docutils-compatibility bridge to CommonMark, enabling you to wr category = "main" optional = false python-versions = "*" +files = [ + {file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f"}, + {file = "recommonmark-0.7.1.tar.gz", hash = "sha256:bdb4db649f2222dcd8d2d844f0006b958d627f732415d399791ee436a3686d67"}, +] [package.dependencies] commonmark = ">=0.8.1" @@ -606,21 +1089,25 @@ sphinx = ">=1.3.1" [[package]] name = "requests" -version = "2.28.1" +version = "2.31.0" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" +charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requests-toolbelt" @@ -629,29 +1116,58 @@ description = "A utility belt for advanced users of python-requests" category = "main" optional = false python-versions = "*" +files = [ + {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, + {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, +] [package.dependencies] requests = ">=2.0.1,<3.0.0" [[package]] name = "secretstorage" -version = "3.3.2" +version = "3.3.3" description = "Python bindings to FreeDesktop.org Secret Service API" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, + {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, +] [package.dependencies] cryptography = ">=2.0" jeepney = ">=0.6" +[[package]] +name = "setuptools" +version = "68.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + [[package]] name = "shellingham" -version = "1.4.0" +version = "1.5.0.post1" description = "Tool to Detect Surrounding Shell" category = "main" optional = false -python-versions = "!=3.0,!=3.1,!=3.2,!=3.3,>=2.6" +python-versions = ">=3.7" +files = [ + {file = "shellingham-1.5.0.post1-py2.py3-none-any.whl", hash = "sha256:368bf8c00754fd4f55afb7bbb86e272df77e4dc76ac29dbcbb81a59e9fc15744"}, + {file = "shellingham-1.5.0.post1.tar.gz", hash = "sha256:823bc5fb5c34d60f285b624e7264f4dda254bc803a3774a147bf99c0e3004a28"}, +] [[package]] name = "six" @@ -660,6 +1176,10 @@ description = "Python 2 and 3 compatibility utilities" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "snowballstemmer" @@ -668,14 +1188,22 @@ description = "This package provides 29 stemmers for 28 languages generated from category = "main" optional = false python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] [[package]] name = "soupsieve" -version = "2.3.2.post1" +version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, + {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, +] [[package]] name = "sphinx" @@ -684,6 +1212,10 @@ description = "Python documentation generator" category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "Sphinx-3.0.2-py3-none-any.whl", hash = "sha256:3145d87d0962366d4c5264c39094eae3f5788d01d4b1a12294051bfe4271d91b"}, + {file = "Sphinx-3.0.2.tar.gz", hash = "sha256:d7c6e72c6aa229caf96af82f60a0d286a1521d42496c226fe37f5a75dcfe2941"}, +] [package.dependencies] alabaster = ">=0.7,<0.8" @@ -695,6 +1227,7 @@ Jinja2 = ">=2.3" packaging = "*" Pygments = ">=2.0" requests = ">=2.5.0" +setuptools = "*" snowballstemmer = ">=1.1" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" @@ -705,8 +1238,8 @@ sphinxcontrib-serializinghtml = "*" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.770)", "docutils-stubs"] -test = ["pytest", "pytest-cov", "html5lib", "typed-ast", "cython"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.770)"] +test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] [[package]] name = "sphinxbootstrap4theme" @@ -715,6 +1248,9 @@ description = "Sphinx Bootstrap4 Theme" category = "main" optional = false python-versions = "*" +files = [ + {file = "sphinxbootstrap4theme-0.6.0.tar.gz", hash = "sha256:d3b2e413785afc74aa178872aa553d7b4156206037fdb39b7ff1490c7926d138"}, +] [[package]] name = "sphinxcontrib-applehelp" @@ -723,9 +1259,13 @@ description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] @@ -735,9 +1275,13 @@ description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] @@ -747,10 +1291,14 @@ description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML h category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest", "html5lib"] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] [[package]] name = "sphinxcontrib-jsmath" @@ -759,9 +1307,13 @@ description = "A sphinx extension which renders display math in HTML via JavaScr category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] [package.extras] -test = ["pytest", "flake8", "mypy"] +test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" @@ -770,9 +1322,13 @@ description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp d category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] @@ -782,18 +1338,29 @@ description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "termcolor" -version = "1.1.0" -description = "ANSII Color formatting for output in terminal." +version = "2.3.0" +description = "ANSI color formatting for output in terminal" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7" +files = [ + {file = "termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"}, + {file = "termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] [[package]] name = "toml" @@ -802,46 +1369,74 @@ description = "Python Library for Tom's Obvious, Minimal Language" category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] [[package]] name = "tomlkit" -version = "0.11.1" +version = "0.11.8" description = "Style preserving TOML library" category = "main" optional = false -python-versions = ">=3.6,<4.0" +python-versions = ">=3.7" +files = [ + {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, + {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, +] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] [[package]] name = "urllib3" -version = "1.26.10" +version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, +] [package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.15.1" +version = "20.16.2" description = "Virtual Python Environment builder" category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" +files = [ + {file = "virtualenv-20.16.2-py2.py3-none-any.whl", hash = "sha256:635b272a8e2f77cb051946f46c60a54ace3cb5e25568228bd6b57fc70eca9ff3"}, + {file = "virtualenv-20.16.2.tar.gz", hash = "sha256:0ef5be6d07181946891f5abc8047fda8bc2f0b4b9bf222c64e6e8963baee76db"}, +] [package.dependencies] distlib = ">=0.3.1,<1" filelock = ">=3.2,<4" importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} platformdirs = ">=2,<3" -six = ">=1.9.0,<2" [package.extras] docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] -testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "packaging (>=20.0)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)"] [[package]] name = "webencodings" @@ -850,6 +1445,10 @@ description = "Character encoding aliases for legacy web content" category = "main" optional = false python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] [[package]] name = "yapf" @@ -858,489 +1457,28 @@ description = "A formatter for Python code." category = "main" optional = false python-versions = "*" +files = [ + {file = "yapf-0.30.0-py2.py3-none-any.whl", hash = "sha256:3abf61ba67cf603069710d30acbc88cfe565d907e16ad81429ae90ce9651e0c9"}, + {file = "yapf-0.30.0.tar.gz", hash = "sha256:3000abee4c28daebad55da6c85f3cd07b8062ce48e2e9943c8da1b9667d48427"}, +] [[package]] name = "zipp" -version = "3.8.1" +version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] -lock-version = "1.1" -python-versions = ">=3.7,<3.11" -content-hash = "18baf3ee359431dbc5bd8bf887beae66316f67873dcef60c0a187819f81d188b" - -[metadata.files] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -babel = [ - {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, - {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, -] -beautifulsoup4 = [ - {file = "beautifulsoup4-4.8.2-py2-none-any.whl", hash = "sha256:e1505eeed31b0f4ce2dbb3bc8eb256c04cc2b3b72af7d551a4ab6efd5cbe5dae"}, - {file = "beautifulsoup4-4.8.2-py3-none-any.whl", hash = "sha256:9fbb4d6e48ecd30bcacc5b63b94088192dcda178513b2ae3c394229f8911b887"}, - {file = "beautifulsoup4-4.8.2.tar.gz", hash = "sha256:05fd825eb01c290877657a56df4c6e4c311b3965bda790c613a3d6fb01a5462a"}, -] -bs4 = [ - {file = "bs4-0.0.1.tar.gz", hash = "sha256:36ecea1fd7cc5c0c6e4a1ff075df26d50da647b75376626cc186e2212886dd3a"}, -] -cachecontrol = [ - {file = "CacheControl-0.12.11-py2.py3-none-any.whl", hash = "sha256:2c75d6a8938cb1933c75c50184549ad42728a27e9f6b92fd677c3151aa72555b"}, - {file = "CacheControl-0.12.11.tar.gz", hash = "sha256:a5b9fcc986b184db101aa280b42ecdcdfc524892596f606858e0b7a8b4d9e144"}, -] -cachy = [ - {file = "cachy-0.3.0-py2.py3-none-any.whl", hash = "sha256:338ca09c8860e76b275aff52374330efedc4d5a5e45dc1c5b539c1ead0786fe7"}, - {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, -] -certifi = [ - {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, -] -cffi = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, - {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, -] -cleo = [ - {file = "cleo-0.8.1-py2.py3-none-any.whl", hash = "sha256:141cda6dc94a92343be626bb87a0b6c86ae291dfc732a57bf04310d4b4201753"}, - {file = "cleo-0.8.1.tar.gz", hash = "sha256:3d0e22d30117851b45970b6c14aca4ab0b18b1b53c8af57bed13208147e4069f"}, -] -clikit = [ - {file = "clikit-0.6.2-py2.py3-none-any.whl", hash = "sha256:71268e074e68082306e23d7369a7b99f824a0ef926e55ba2665e911f7208489e"}, - {file = "clikit-0.6.2.tar.gz", hash = "sha256:442ee5db9a14120635c5990bcdbfe7c03ada5898291f0c802f77be71569ded59"}, -] -colorama = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, -] -commonmark = [ - {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, - {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, -] -crashtest = [ - {file = "crashtest-0.3.1-py3-none-any.whl", hash = "sha256:300f4b0825f57688b47b6d70c6a31de33512eb2fa1ac614f780939aa0cf91680"}, - {file = "crashtest-0.3.1.tar.gz", hash = "sha256:42ca7b6ce88b6c7433e2ce47ea884e91ec93104a4b754998be498a8e6c3d37dd"}, -] -cryptography = [ - {file = "cryptography-37.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:549153378611c0cca1042f20fd9c5030d37a72f634c9326e225c9f666d472884"}, - {file = "cryptography-37.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a958c52505c8adf0d3822703078580d2c0456dd1d27fabfb6f76fe63d2971cd6"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f721d1885ecae9078c3f6bbe8a88bc0786b6e749bf32ccec1ef2b18929a05046"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3d41b965b3380f10e4611dbae366f6dc3cefc7c9ac4e8842a806b9672ae9add5"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80f49023dd13ba35f7c34072fa17f604d2f19bf0989f292cedf7ab5770b87a0b"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2dcb0b3b63afb6df7fd94ec6fbddac81b5492513f7b0436210d390c14d46ee8"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b7f8dd0d4c1f21759695c05a5ec8536c12f31611541f8904083f3dc582604280"}, - {file = "cryptography-37.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:30788e070800fec9bbcf9faa71ea6d8068f5136f60029759fd8c3efec3c9dcb3"}, - {file = "cryptography-37.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:190f82f3e87033821828f60787cfa42bff98404483577b591429ed99bed39d59"}, - {file = "cryptography-37.0.4-cp36-abi3-win32.whl", hash = "sha256:b62439d7cd1222f3da897e9a9fe53bbf5c104fff4d60893ad1355d4c14a24157"}, - {file = "cryptography-37.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:f7a6de3e98771e183645181b3627e2563dcde3ce94a9e42a3f427d2255190327"}, - {file = "cryptography-37.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc95ed67b6741b2607298f9ea4932ff157e570ef456ef7ff0ef4884a134cc4b"}, - {file = "cryptography-37.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f8c0a6e9e1dd3eb0414ba320f85da6b0dcbd543126e30fcc546e7372a7fbf3b9"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:e007f052ed10cc316df59bc90fbb7ff7950d7e2919c9757fd42a2b8ecf8a5f67"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bc997818309f56c0038a33b8da5c0bfbb3f1f067f315f9abd6fc07ad359398d"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d204833f3c8a33bbe11eda63a54b1aad7aa7456ed769a982f21ec599ba5fa282"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:75976c217f10d48a8b5a8de3d70c454c249e4b91851f6838a4e48b8f41eb71aa"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:7099a8d55cd49b737ffc99c17de504f2257e3787e02abe6d1a6d136574873441"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2be53f9f5505673eeda5f2736bea736c40f051a739bfae2f92d18aed1eb54596"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:91ce48d35f4e3d3f1d83e29ef4a9267246e6a3be51864a5b7d2247d5086fa99a"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4c590ec31550a724ef893c50f9a97a0c14e9c851c85621c5650d699a7b88f7ab"}, - {file = "cryptography-37.0.4.tar.gz", hash = "sha256:63f9c17c0e2474ccbebc9302ce2f07b55b3b3fcb211ded18a42d5764f5c10a82"}, -] -distlib = [ - {file = "distlib-0.3.5-py2.py3-none-any.whl", hash = "sha256:b710088c59f06338ca514800ad795a132da19fda270e3ce4affc74abf955a26c"}, - {file = "distlib-0.3.5.tar.gz", hash = "sha256:a7f75737c70be3b25e2bee06288cec4e4c221de18455b2dd037fe2a795cab2fe"}, -] -docutils = [ - {file = "docutils-0.19-py3-none-any.whl", hash = "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc"}, - {file = "docutils-0.19.tar.gz", hash = "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6"}, -] -filelock = [ - {file = "filelock-3.7.1-py3-none-any.whl", hash = "sha256:37def7b658813cda163b56fc564cdc75e86d338246458c4c28ae84cabefa2404"}, - {file = "filelock-3.7.1.tar.gz", hash = "sha256:3a0fd85166ad9dbab54c9aec96737b744106dc5f15c0b09a6744a445299fcf04"}, -] -html5lib = [ - {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, - {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, -] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] -imagesize = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] -importlib-metadata = [ - {file = "importlib_metadata-1.7.0-py2.py3-none-any.whl", hash = "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"}, - {file = "importlib_metadata-1.7.0.tar.gz", hash = "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -jeepney = [ - {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, - {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, -] -jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -keyring = [ - {file = "keyring-22.3.0-py3-none-any.whl", hash = "sha256:2bc8363ebdd63886126a012057a85c8cb6e143877afa02619ac7dbc9f38a207b"}, - {file = "keyring-22.3.0.tar.gz", hash = "sha256:16927a444b2c73f983520a48dec79ddab49fe76429ea05b8d528d778c8339522"}, -] -lockfile = [ - {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, - {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, -] -mako = [ - {file = "Mako-1.1.0.tar.gz", hash = "sha256:a36919599a9b7dc5d86a7a8988f23a9a3a3d083070023bab23d64f7f1d1e0a4b"}, -] -markupsafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, -] -msgpack = [ - {file = "msgpack-1.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250"}, - {file = "msgpack-1.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88"}, - {file = "msgpack-1.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:002b5c72b6cd9b4bafd790f364b8480e859b4712e91f43014fe01e4f957b8467"}, - {file = "msgpack-1.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35bc0faa494b0f1d851fd29129b2575b2e26d41d177caacd4206d81502d4c6a6"}, - {file = "msgpack-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4733359808c56d5d7756628736061c432ded018e7a1dff2d35a02439043321aa"}, - {file = "msgpack-1.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb514ad14edf07a1dbe63761fd30f89ae79b42625731e1ccf5e1f1092950eaa6"}, - {file = "msgpack-1.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c23080fdeec4716aede32b4e0ef7e213c7b1093eede9ee010949f2a418ced6ba"}, - {file = "msgpack-1.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:49565b0e3d7896d9ea71d9095df15b7f75a035c49be733051c34762ca95bbf7e"}, - {file = "msgpack-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:aca0f1644d6b5a73eb3e74d4d64d5d8c6c3d577e753a04c9e9c87d07692c58db"}, - {file = "msgpack-1.0.4-cp310-cp310-win32.whl", hash = "sha256:0dfe3947db5fb9ce52aaea6ca28112a170db9eae75adf9339a1aec434dc954ef"}, - {file = "msgpack-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dea20515f660aa6b7e964433b1808d098dcfcabbebeaaad240d11f909298075"}, - {file = "msgpack-1.0.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e83f80a7fec1a62cf4e6c9a660e39c7f878f603737a0cdac8c13131d11d97f52"}, - {file = "msgpack-1.0.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c11a48cf5e59026ad7cb0dc29e29a01b5a66a3e333dc11c04f7e991fc5510a9"}, - {file = "msgpack-1.0.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1276e8f34e139aeff1c77a3cefb295598b504ac5314d32c8c3d54d24fadb94c9"}, - {file = "msgpack-1.0.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c9566f2c39ccced0a38d37c26cc3570983b97833c365a6044edef3574a00c08"}, - {file = "msgpack-1.0.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fcb8a47f43acc113e24e910399376f7277cf8508b27e5b88499f053de6b115a8"}, - {file = "msgpack-1.0.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:76ee788122de3a68a02ed6f3a16bbcd97bc7c2e39bd4d94be2f1821e7c4a64e6"}, - {file = "msgpack-1.0.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0a68d3ac0104e2d3510de90a1091720157c319ceeb90d74f7b5295a6bee51bae"}, - {file = "msgpack-1.0.4-cp36-cp36m-win32.whl", hash = "sha256:85f279d88d8e833ec015650fd15ae5eddce0791e1e8a59165318f371158efec6"}, - {file = "msgpack-1.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:c1683841cd4fa45ac427c18854c3ec3cd9b681694caf5bff04edb9387602d661"}, - {file = "msgpack-1.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a75dfb03f8b06f4ab093dafe3ddcc2d633259e6c3f74bb1b01996f5d8aa5868c"}, - {file = "msgpack-1.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9667bdfdf523c40d2511f0e98a6c9d3603be6b371ae9a238b7ef2dc4e7a427b0"}, - {file = "msgpack-1.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11184bc7e56fd74c00ead4f9cc9a3091d62ecb96e97653add7a879a14b003227"}, - {file = "msgpack-1.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac5bd7901487c4a1dd51a8c58f2632b15d838d07ceedaa5e4c080f7190925bff"}, - {file = "msgpack-1.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1e91d641d2bfe91ba4c52039adc5bccf27c335356055825c7f88742c8bb900dd"}, - {file = "msgpack-1.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2a2df1b55a78eb5f5b7d2a4bb221cd8363913830145fad05374a80bf0877cb1e"}, - {file = "msgpack-1.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:545e3cf0cf74f3e48b470f68ed19551ae6f9722814ea969305794645da091236"}, - {file = "msgpack-1.0.4-cp37-cp37m-win32.whl", hash = "sha256:2cc5ca2712ac0003bcb625c96368fd08a0f86bbc1a5578802512d87bc592fe44"}, - {file = "msgpack-1.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:eba96145051ccec0ec86611fe9cf693ce55f2a3ce89c06ed307de0e085730ec1"}, - {file = "msgpack-1.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7760f85956c415578c17edb39eed99f9181a48375b0d4a94076d84148cf67b2d"}, - {file = "msgpack-1.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:449e57cc1ff18d3b444eb554e44613cffcccb32805d16726a5494038c3b93dab"}, - {file = "msgpack-1.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d603de2b8d2ea3f3bcb2efe286849aa7a81531abc52d8454da12f46235092bcb"}, - {file = "msgpack-1.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f5d88c99f64c456413d74a975bd605a9b0526293218a3b77220a2c15458ba9"}, - {file = "msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6916c78f33602ecf0509cc40379271ba0f9ab572b066bd4bdafd7434dee4bc6e"}, - {file = "msgpack-1.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81fc7ba725464651190b196f3cd848e8553d4d510114a954681fd0b9c479d7e1"}, - {file = "msgpack-1.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d5b5b962221fa2c5d3a7f8133f9abffc114fe218eb4365e40f17732ade576c8e"}, - {file = "msgpack-1.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:77ccd2af37f3db0ea59fb280fa2165bf1b096510ba9fe0cc2bf8fa92a22fdb43"}, - {file = "msgpack-1.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b17be2478b622939e39b816e0aa8242611cc8d3583d1cd8ec31b249f04623243"}, - {file = "msgpack-1.0.4-cp38-cp38-win32.whl", hash = "sha256:2bb8cdf50dd623392fa75525cce44a65a12a00c98e1e37bf0fb08ddce2ff60d2"}, - {file = "msgpack-1.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:26b8feaca40a90cbe031b03d82b2898bf560027160d3eae1423f4a67654ec5d6"}, - {file = "msgpack-1.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:462497af5fd4e0edbb1559c352ad84f6c577ffbbb708566a0abaaa84acd9f3ae"}, - {file = "msgpack-1.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2999623886c5c02deefe156e8f869c3b0aaeba14bfc50aa2486a0415178fce55"}, - {file = "msgpack-1.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f0029245c51fd9473dc1aede1160b0a29f4a912e6b1dd353fa6d317085b219da"}, - {file = "msgpack-1.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed6f7b854a823ea44cf94919ba3f727e230da29feb4a99711433f25800cf747f"}, - {file = "msgpack-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0df96d6eaf45ceca04b3f3b4b111b86b33785683d682c655063ef8057d61fd92"}, - {file = "msgpack-1.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a4192b1ab40f8dca3f2877b70e63799d95c62c068c84dc028b40a6cb03ccd0f"}, - {file = "msgpack-1.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e3590f9fb9f7fbc36df366267870e77269c03172d086fa76bb4eba8b2b46624"}, - {file = "msgpack-1.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1576bd97527a93c44fa856770197dec00d223b0b9f36ef03f65bac60197cedf8"}, - {file = "msgpack-1.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:63e29d6e8c9ca22b21846234913c3466b7e4ee6e422f205a2988083de3b08cae"}, - {file = "msgpack-1.0.4-cp39-cp39-win32.whl", hash = "sha256:fb62ea4b62bfcb0b380d5680f9a4b3f9a2d166d9394e9bbd9666c0ee09a3645c"}, - {file = "msgpack-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:4d5834a2a48965a349da1c5a79760d94a1a0172fbb5ab6b5b33cbf8447e109ce"}, - {file = "msgpack-1.0.4.tar.gz", hash = "sha256:f5d869c18f030202eb412f08b28d2afeea553d6613aee89e200d7aca7ef01f5f"}, -] -origen-autoapi = [ - {file = "origen_autoapi-2.0.1-py3-none-any.whl", hash = "sha256:2807aaa7c861e54679a572bdf36d5c77ea4f26f61464b5dba293f44dd4db8dca"}, - {file = "origen_autoapi-2.0.1.tar.gz", hash = "sha256:df282703e9a430a4242299684d69d0631ea8c6e323c920e57580dc04d78c0c3d"}, -] -origen-metal = [] -packaging = [ - {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, - {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, -] -pastel = [ - {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"}, - {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, -] -pexpect = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] -pkginfo = [ - {file = "pkginfo-1.8.3-py2.py3-none-any.whl", hash = "sha256:848865108ec99d4901b2f7e84058b6e7660aae8ae10164e015a6dcf5b242a594"}, - {file = "pkginfo-1.8.3.tar.gz", hash = "sha256:a84da4318dd86f870a9447a8c98340aa06216bfc6f2b7bdc4b8766984ae1867c"}, -] -platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -poetry = [ - {file = "poetry-1.1.14-py2.py3-none-any.whl", hash = "sha256:fbd0b2536b730cd1d7a1fabb3a292a2cc423c5da3d59c4db44335a449f5acd9a"}, - {file = "poetry-1.1.14.tar.gz", hash = "sha256:8b5a7676cda9b9e85c71743c672352cabcb6e2f647b6b88fa95e4f374bc8edce"}, -] -poetry-core = [ - {file = "poetry-core-1.0.8.tar.gz", hash = "sha256:951fc7c1f8d710a94cb49019ee3742125039fc659675912ea614ac2aa405b118"}, - {file = "poetry_core-1.0.8-py2.py3-none-any.whl", hash = "sha256:54b0fab6f7b313886e547a52f8bf52b8cf43e65b2633c65117f8755289061924"}, -] -ptyprocess = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pycparser = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] -pygments = [ - {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, - {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, -] -pylev = [ - {file = "pylev-1.4.0-py2.py3-none-any.whl", hash = "sha256:7b2e2aa7b00e05bb3f7650eb506fc89f474f70493271a35c242d9a92188ad3dd"}, - {file = "pylev-1.4.0.tar.gz", hash = "sha256:9e77e941042ad3a4cc305dcdf2b2dec1aec2fbe3dd9015d2698ad02b173006d1"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] -pyreadline3 = [ - {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, - {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, -] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, -] -pytz = [ - {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, - {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, -] -pywin32-ctypes = [ - {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, - {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, -] -recommonmark = [ - {file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f"}, - {file = "recommonmark-0.7.1.tar.gz", hash = "sha256:bdb4db649f2222dcd8d2d844f0006b958d627f732415d399791ee436a3686d67"}, -] -requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, -] -requests-toolbelt = [ - {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, - {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, -] -secretstorage = [ - {file = "SecretStorage-3.3.2-py3-none-any.whl", hash = "sha256:755dc845b6ad76dcbcbc07ea3da75ae54bb1ea529eb72d15f83d26499a5df319"}, - {file = "SecretStorage-3.3.2.tar.gz", hash = "sha256:0a8eb9645b320881c222e827c26f4cfcf55363e8b374a021981ef886657a912f"}, -] -shellingham = [ - {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, - {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] -soupsieve = [ - {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, - {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, -] -sphinx = [ - {file = "Sphinx-3.0.2-py3-none-any.whl", hash = "sha256:3145d87d0962366d4c5264c39094eae3f5788d01d4b1a12294051bfe4271d91b"}, - {file = "Sphinx-3.0.2.tar.gz", hash = "sha256:d7c6e72c6aa229caf96af82f60a0d286a1521d42496c226fe37f5a75dcfe2941"}, -] -sphinxbootstrap4theme = [ - {file = "sphinxbootstrap4theme-0.6.0.tar.gz", hash = "sha256:d3b2e413785afc74aa178872aa553d7b4156206037fdb39b7ff1490c7926d138"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -termcolor = [ - {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -tomlkit = [ - {file = "tomlkit-0.11.1-py3-none-any.whl", hash = "sha256:1c5bebdf19d5051e2e1de6cf70adfc5948d47221f097fcff7a3ffc91e953eaf5"}, - {file = "tomlkit-0.11.1.tar.gz", hash = "sha256:61901f81ff4017951119cd0d1ed9b7af31c821d6845c8c477587bbdcd5e5854e"}, -] -urllib3 = [ - {file = "urllib3-1.26.10-py2.py3-none-any.whl", hash = "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec"}, - {file = "urllib3-1.26.10.tar.gz", hash = "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6"}, -] -virtualenv = [ - {file = "virtualenv-20.15.1-py2.py3-none-any.whl", hash = "sha256:b30aefac647e86af6d82bfc944c556f8f1a9c90427b2fb4e3bfbf338cb82becf"}, - {file = "virtualenv-20.15.1.tar.gz", hash = "sha256:288171134a2ff3bfb1a2f54f119e77cd1b81c29fc1265a2356f3e8d14c7d58c4"}, -] -webencodings = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] -yapf = [ - {file = "yapf-0.30.0-py2.py3-none-any.whl", hash = "sha256:3abf61ba67cf603069710d30acbc88cfe565d907e16ad81429ae90ce9651e0c9"}, - {file = "yapf-0.30.0.tar.gz", hash = "sha256:3000abee4c28daebad55da6c85f3cd07b8062ce48e2e9943c8da1b9667d48427"}, -] -zipp = [ - {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, - {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, -] +lock-version = "2.0" +python-versions = ">=3.7" +content-hash = "9a11375abf60489c9f422629fad1da5484c67b97c61e44435234ff58c0e8cda5" diff --git a/python/origen/pyproject.toml b/python/origen/pyproject.toml index 40e392b0..9a35f584 100644 --- a/python/origen/pyproject.toml +++ b/python/origen/pyproject.toml @@ -21,7 +21,7 @@ generate-setup-file = false origen = 'origen.__bin__:run_origen' [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" origen_metal = "= 0.4.0" termcolor = ">= 1.1.0" colorama = "^0.4" diff --git a/python/origen_metal/poetry.lock b/python/origen_metal/poetry.lock index dd4a5796..2ca9d2df 100644 --- a/python/origen_metal/poetry.lock +++ b/python/origen_metal/poetry.lock @@ -1,3 +1,5 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + [[package]] name = "astunparse" version = "1.6.3" @@ -5,64 +7,92 @@ description = "An AST unparser for Python" category = "dev" optional = false python-versions = "*" +files = [ + {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"}, + {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"}, +] [package.dependencies] six = ">=1.6.1,<2.0" +wheel = ">=0.23.0,<1.0" [[package]] name = "atomicwrites" -version = "1.4.0" +version = "1.4.1" description = "Atomic file writes." category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, +] [[package]] name = "attrs" -version = "21.4.0" +version = "23.1.0" description = "Classes Without Boilerplate" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.6" description = "Cross-platform colored terminal text." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "importlib-metadata" -version = "4.11.4" +version = "6.7.0" description = "Read metadata from Python packages" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, + {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, +] [package.dependencies] typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] [[package]] name = "jinja2" @@ -71,6 +101,10 @@ description = "A very fast and expressive template engine." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] [package.dependencies] MarkupSafe = ">=2.0" @@ -80,22 +114,75 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "markupsafe" -version = "2.1.1" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] [[package]] name = "packaging" -version = "21.3" +version = "23.1" description = "Core utilities for Python packages" category = "dev" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] [[package]] name = "pdoc" @@ -104,6 +191,9 @@ description = "API Documentation for Python Projects" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pdoc-7.4.0-py3-none-any.whl", hash = "sha256:681a2f243e4ca51bedd0645c2d18275b8b83444e9b6e42b502882ec45369e679"}, +] [package.dependencies] astunparse = {version = "*", markers = "python_version < \"3.9\""} @@ -116,11 +206,15 @@ dev = ["flake8", "hypothesis", "mypy", "pytest", "pytest-cov", "pytest-timeout", [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] [package.dependencies] importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} @@ -136,25 +230,25 @@ description = "library with cross-python path, ini-parsing, io, code, log facili category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] [[package]] name = "pygments" -version = "2.12.0" +version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." category = "dev" optional = false -python-versions = ">=3.6" - -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" -optional = false -python-versions = ">=3.6.8" +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +] [package.extras] -diagrams = ["railroad-diagrams", "jinja2"] +plugins = ["importlib-metadata"] [[package]] name = "pyreadline3" @@ -163,6 +257,10 @@ description = "A python implementation of GNU readline." category = "main" optional = false python-versions = "*" +files = [ + {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, + {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, +] [[package]] name = "pytest" @@ -171,6 +269,10 @@ description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, +] [package.dependencies] atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} @@ -193,14 +295,25 @@ description = "Python 2 and 3 compatibility utilities" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "termcolor" -version = "1.1.0" -description = "ANSII Color formatting for output in terminal." +version = "2.3.0" +description = "ANSI color formatting for output in terminal" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7" +files = [ + {file = "termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"}, + {file = "termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] [[package]] name = "toml" @@ -209,149 +322,55 @@ description = "Python Library for Tom's Obvious, Minimal Language" category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] [[package]] name = "typing-extensions" -version = "4.2.0" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "wheel" +version = "0.41.0" +description = "A built-package format for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "wheel-0.41.0-py3-none-any.whl", hash = "sha256:7e9be3bbd0078f6147d82ed9ed957e323e7708f57e134743d2edef3a7b7972a9"}, + {file = "wheel-0.41.0.tar.gz", hash = "sha256:55a0f0a5a84869bce5ba775abfd9c462e3a6b1b7b7ec69d72c0b83d673a5114d"}, +] + +[package.extras] +test = ["pytest (>=6.0.0)", "setuptools (>=65)"] [[package]] name = "zipp" -version = "3.8.0" +version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] -lock-version = "1.1" -python-versions = ">=3.7,<3.11" -content-hash = "1360e7bccec2348e9d5b23ac7bd54505acc8555ad15cd81aeba3d1048d7fd5af" - -[metadata.files] -astunparse = [ - {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"}, - {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.11.4-py3-none-any.whl", hash = "sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec"}, - {file = "importlib_metadata-4.11.4.tar.gz", hash = "sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -markupsafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -pdoc = [ - {file = "pdoc-7.4.0-py3-none-any.whl", hash = "sha256:681a2f243e4ca51bedd0645c2d18275b8b83444e9b6e42b502882ec45369e679"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pygments = [ - {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, - {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] -pyreadline3 = [ - {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, - {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, -] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -termcolor = [ - {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -typing-extensions = [ - {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, - {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, -] -zipp = [ - {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, - {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, -] +lock-version = "2.0" +python-versions = ">=3.7.0,<=3.12" +content-hash = "68694abde59ff574b5a699ef94857ad3003f0a8afd56f577eb4cb272ac87bbd0" diff --git a/python/origen_metal/pyproject.toml b/python/origen_metal/pyproject.toml index 38d13a2a..60eb7bfe 100644 --- a/python/origen_metal/pyproject.toml +++ b/python/origen_metal/pyproject.toml @@ -5,7 +5,7 @@ description = "Bare metal APIs for the Origen SDK" authors = ["Origen-SDK"] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" pyreadline3 = { version="^3.3", platform="win32" } termcolor = ">= 1.1.0" colorama = ">= 0.4.4" # Note: colorama is usually installed on the system already, but it isn't actually required (e.g. WSL won't have this by default) diff --git a/rust/origen/Cargo.lock b/rust/origen/Cargo.lock index 54e49752..92896993 100644 --- a/rust/origen/Cargo.lock +++ b/rust/origen/Cargo.lock @@ -152,9 +152,9 @@ version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -371,11 +371,11 @@ dependencies = [ "atty", "onig", "prettyprint", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", "serde", "structopt", - "syn 1.0.74", + "syn 1.0.109", "syn-select", "syntect", "tempfile", @@ -704,7 +704,7 @@ dependencies = [ "crossbeam-utils 0.7.2", "lazy_static", "maybe-uninit", - "memoffset", + "memoffset 0.5.6", "scopeguard", ] @@ -800,9 +800,9 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -1017,9 +1017,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f16ef37b2a9b242295d61a154ee91ae884afff6b8b933b486b12481cc58310ca" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -1030,10 +1030,10 @@ checksum = "ed327f716d0d351d86c9fd3398d20ee39ad8f681873cc081da2ca1c10fed398a" dependencies = [ "enum-utils-from-str", "failure", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", "serde_derive_internals", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -1042,7 +1042,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49be08bad6e4ca87b2b8e74146987d4e5cb3b7512efa50ef505b51a22227ee1" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", ] @@ -1062,9 +1062,9 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -1104,9 +1104,9 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", "synstructure", ] @@ -1295,9 +1295,9 @@ checksum = "c54913bae956fb8df7f4dc6fc90362aa72e69148e3f39041fbe8742d21e0ac57" dependencies = [ "autocfg 1.0.1", "proc-macro-hack", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -2070,6 +2070,15 @@ dependencies = [ "autocfg 1.0.1", ] +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg 1.0.1", +] + [[package]] name = "mime" version = "0.3.16" @@ -2535,7 +2544,7 @@ name = "origen-core-support" version = "0.1.0-dev.1" dependencies = [ "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -2715,9 +2724,9 @@ checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -2761,9 +2770,9 @@ dependencies = [ "phf_generator", "phf_shared", "proc-macro-hack", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -2790,9 +2799,9 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -2904,9 +2913,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", "version_check", ] @@ -2916,7 +2925,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", "version_check", ] @@ -2944,11 +2953,11 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.28" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ - "unicode-xid 0.2.2", + "unicode-ident", ] [[package]] @@ -2963,13 +2972,14 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6302e85060011447471887705bb7838f14aba43fcb06957d823739a496b3dc" +checksum = "ffb88ae05f306b4bfcde40ac4a51dc0b05936a9207a4b75b798c7729c4258a59" dependencies = [ "cfg-if 1.0.0", "indoc", "libc", + "memoffset 0.9.0", "parking_lot 0.11.1", "pyo3-build-config", "pyo3-ffi", @@ -2979,9 +2989,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b65b546c35d8a3b1b2f0ddbac7c6a569d759f357f2b9df884f5d6b719152c8" +checksum = "554db24f0b3c180a9c0b1268f91287ab3f17c162e15b54caaae5a6b3773396b0" dependencies = [ "once_cell", "target-lexicon", @@ -2989,9 +2999,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c275a07127c1aca33031a563e384ffdd485aee34ef131116fcd58e3430d1742b" +checksum = "922ede8759e8600ad4da3195ae41259654b9c55da4f7eec84a0ccc7d067a70a4" dependencies = [ "libc", "pyo3-build-config", @@ -2999,25 +3009,25 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fc4485bfbcc9850a6d661d627783f18d19c2ab55880b021671c4ba83e90f7" +checksum = "8a5caec6a1dd355964a841fcbeeb1b89fe4146c87295573f94228911af3cc5a2" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "pyo3-macros-backend", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] name = "pyo3-macros-backend" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53bda0f58f73f5c5429693c96ed57f7abdb38fdfc28ae06da4101a257adb7faf" +checksum = "e0b78ccbb160db1556cdb6fd96c50334c5d4ec44dc5e0a968d0a1208fa0efa8b" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3041,7 +3051,7 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", ] [[package]] @@ -3609,9 +3619,9 @@ version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3620,9 +3630,9 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dbab34ca63057a1f15280bdf3c39f2b1eb1b54c17e98360e511637aef7418c6" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3651,9 +3661,9 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3788,9 +3798,9 @@ version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1508efa03c362e23817f96cde18abed596a25219a8b2c66e8db33c03543d315b" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3855,9 +3865,9 @@ checksum = "7813934aecf5f51a54775e00068c237de98489463968231a51746bbbc03f9c10" dependencies = [ "heck", "proc-macro-error", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3876,9 +3886,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149" dependencies = [ "heck", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3900,13 +3910,13 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.74" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "unicode-xid 0.2.2", + "unicode-ident", ] [[package]] @@ -3915,7 +3925,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3918c65ff56396f0fb70664637e183410d273d93721bca514221ae3566dca0e" dependencies = [ - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3924,9 +3934,9 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "474aaa926faa1603c40b7885a9eaea29b444d1cb2850cb7c0e37bb1a4182f4fa" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", "unicode-xid 0.2.2", ] @@ -4069,9 +4079,9 @@ version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -4196,9 +4206,9 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -4448,6 +4458,12 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" +[[package]] +name = "unicode-ident" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" + [[package]] name = "unicode-normalization" version = "0.1.19" @@ -4643,9 +4659,9 @@ dependencies = [ "bumpalo", "lazy_static", "log", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -4677,9 +4693,9 @@ version = "0.2.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c2657dd393f03aa2a659c25c6ae18a13a4048cebd220e147933ea837efc589f" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4856,9 +4872,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a482c56029e48681b89b92b5db3c446db0915e8dd1052c0328a574eda38d5f93" dependencies = [ "proc-macro-crate 0.1.5", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -4888,7 +4904,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4ca5e22593eb4212382d60d26350065bf2a02c34b85bc850474a74b589a3de9" dependencies = [ "proc-macro-crate 1.1.3", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] diff --git a/rust/origen/Cargo.toml b/rust/origen/Cargo.toml index b244039f..76040238 100644 --- a/rust/origen/Cargo.toml +++ b/rust/origen/Cargo.toml @@ -45,7 +45,7 @@ git2 = "0.13" num-bigint = {version = "0.4.0", features = ["serde"]} # Enabling this feature stops the CLI from depending on libpython. PYO3 is only included # in origen to enable conversion of an Origen error to a PyErr. -pyo3 = {version = "0.16.5", features = ["extension-module", "auto-initialize"]} +pyo3 = {version = "0.19.1", features = ["extension-module", "auto-initialize"]} chrono = "0.4.11" origen-core-support = { version = "0.1.0-dev.1", path = "./origen-core-support" } whoami = "0.8" # TODO diff --git a/rust/origen/cli/src/_generated/mod.rs b/rust/origen/cli/src/_generated/mod.rs new file mode 100644 index 00000000..91c47b7b --- /dev/null +++ b/rust/origen/cli/src/_generated/mod.rs @@ -0,0 +1 @@ +pub (crate) mod python; \ No newline at end of file diff --git a/rust/origen/cli/src/_generated/python.rs b/rust/origen/cli/src/_generated/python.rs new file mode 100644 index 00000000..d1edf698 --- /dev/null +++ b/rust/origen/cli/src/_generated/python.rs @@ -0,0 +1,12 @@ +// THIS IS AN AUTO GENERATED FILE FROM CMD update_supported_python +pub const MIN_PYTHON_VERSION: &str = "3.7.0"; +pub const PYTHONS: &[&str] = &[ + "python", + "python3", + "python3.7", + "python3.8", + "python3.9", + "python3.10", + "python3.11", + "python3.12", +]; diff --git a/rust/origen/cli/src/bin.rs b/rust/origen/cli/src/bin.rs index fa97994a..ae4ff1f5 100644 --- a/rust/origen/cli/src/bin.rs +++ b/rust/origen/cli/src/bin.rs @@ -8,6 +8,7 @@ extern crate origen_metal; mod framework; mod commands; mod python; +mod _generated; use clap::Command; use indexmap::map::IndexMap; diff --git a/rust/origen/cli/src/commands/develop_origen/mod.rs b/rust/origen/cli/src/commands/develop_origen/mod.rs index 74bf2862..8804853a 100644 --- a/rust/origen/cli/src/commands/develop_origen/mod.rs +++ b/rust/origen/cli/src/commands/develop_origen/mod.rs @@ -1,5 +1,6 @@ mod build; mod fmt; +mod update_supported_python; use origen::Result; use super::_prelude::*; @@ -12,7 +13,8 @@ gen_core_cmd_funcs__no_exts__no_app_opts!( cmd.arg_required_else_help(true).visible_alias("origen") }}, build::build_cmd(), - fmt::fmt_cmd() + fmt::fmt_cmd(), + update_supported_python::update_supported_python_cmd() ); pub(crate) fn run(invocation: &clap::ArgMatches) -> Result<()> { @@ -20,6 +22,7 @@ pub(crate) fn run(invocation: &clap::ArgMatches) -> Result<()> { match n { build::BASE_CMD => build::run(subcmd), fmt::BASE_CMD => fmt::run(), + update_supported_python::BASE_CMD => update_supported_python::run(subcmd), _ => unreachable_invalid_subc!(n) } } \ No newline at end of file diff --git a/rust/origen/cli/src/commands/develop_origen/update_supported_python.rs b/rust/origen/cli/src/commands/develop_origen/update_supported_python.rs new file mode 100644 index 00000000..36c6469e --- /dev/null +++ b/rust/origen/cli/src/commands/develop_origen/update_supported_python.rs @@ -0,0 +1,84 @@ +use std::path::Path; +use std::fs::File; +use std::io::Write; +use crate::STATUS; +use crate::commands::_prelude::*; +pub const BASE_CMD: &'static str = "update_supported_python"; + +pub (crate) fn update_supported_python_cmd<'a>() -> SubCmd<'a> { + core_subcmd__no_exts__no_app_opts!( + BASE_CMD, + "Update supported python versions in all pyproject files", + { |cmd| { + cmd.arg(Arg::new("min_version") + .takes_value(true) + .required(true) + ) + .arg(Arg::new("max_version") + .takes_value(true) + .required(true) + ) + } } + ) +} + +pub(crate) fn run(invocation: &clap::ArgMatches) -> Result<()> { + let min = invocation.get_one::("min_version").unwrap(); + let max = invocation.get_one::("max_version").unwrap(); + let version_str = format!("python = \">={min},<={max}\""); + let mv_min = min.split('.').collect::>()[1].parse::()?; + let mv_max = max.split('.').collect::>()[1].parse::()?; + + // Update pyprojects + // origen/metal pyproject + let p = &STATUS.origen_wksp_root.join("python"); + update_pyproject(&p.join("origen_metal"), &version_str)?; + update_pyproject(&p.join("origen"),&version_str)?; + + // Various app pyprojects, outside of no-workspace + let p = &STATUS.origen_wksp_root.join("test_apps"); + update_pyproject(&p.join("pl_ext_cmds"),&version_str)?; + update_pyproject(&p.join("python_app"),&version_str)?; + update_pyproject(&p.join("python_no_app"),&version_str)?; + update_pyproject(&p.join("python_plugin"),&version_str)?; + update_pyproject(&p.join("python_plugin_no_cmds"),&version_str)?; + update_pyproject(&p.join("python_plugin_the_second"),&version_str)?; + update_pyproject(&p.join("test_apps_shared_test_helpers"),&version_str)?; + + // No-workspace pyprojects + let p = &STATUS.origen_wksp_root.join("test_apps/no_workspace"); + update_pyproject(&p.join("user_install"),&version_str)?; + update_pyproject(&p.join("templates"),&version_str)?; + + // Write rust CLI python settings + let p = &STATUS.origen_wksp_root.join("rust/origen/cli/src/_generated/python.rs"); + println!("Creating python rs file {}", p.display()); + let mut f = File::create(p)?; + f.write_fmt(format_args!("// THIS IS AN AUTO GENERATED FILE FROM CMD {}\n", BASE_CMD))?; + f.write_fmt(format_args!("pub const MIN_PYTHON_VERSION: &str = \"{}\";\n", min))?; + f.write(b"pub const PYTHONS: &[&str] = &[\n")?; + f.write(b" \"python\",\n")?; + f.write(b" \"python3\",\n")?; + for v in mv_min..(mv_max+1) { + f.write_fmt(format_args!(" \"python3.{}\",\n", v))?; + } + f.write(b"];\n")?; + + Ok(()) +} + +fn update_pyproject(path: &Path, version_str: &str) -> Result<()> { + let n = path.join("pyproject.toml"); + println!("Updating pyproject: {}", n.display()); + + let content = std::fs::read_to_string(&n)?; + let mut lines: Vec<&str> = content.split("\n").collect(); + let i = lines.iter().position( |l| l.starts_with("python = ")).unwrap(); + lines[i] = version_str; + + // Write out file + let mut f = File::create(n)?; + f.write_all(lines.join("\n").as_bytes())?; + + Ok(()) +} \ No newline at end of file diff --git a/rust/origen/cli/src/commands/env.rs b/rust/origen/cli/src/commands/env.rs index 229d5697..df1cd557 100644 --- a/rust/origen/cli/src/commands/env.rs +++ b/rust/origen/cli/src/commands/env.rs @@ -14,7 +14,7 @@ use std::process::Command; pub const BASE_CMD: &'static str = "env"; -static MINIMUM_PIP_VERSION: &str = "22.0.4"; +static MINIMUM_PIP_VERSION: &str = "23.1.2"; static MINIMUM_POETRY_VERSION: &str = "1.3.2"; gen_core_cmd_funcs__no_exts__no_app_opts!( diff --git a/rust/origen/cli/src/python.rs b/rust/origen/cli/src/python.rs index 880c312d..bf2d27e8 100644 --- a/rust/origen/cli/src/python.rs +++ b/rust/origen/cli/src/python.rs @@ -7,16 +7,8 @@ use semver::Version; use std::env; use std::path::PathBuf; use std::process::{Command, ExitStatus, Stdio}; - -const PYTHONS: &[&str] = &[ - "python", - "python3", - "python3.10", - "python3.9", - "python3.8", - "python3.7", -]; -pub const MIN_PYTHON_VERSION: &str = "3.7.0"; +use crate::_generated::python::PYTHONS; +pub use crate::_generated::python::MIN_PYTHON_VERSION; #[macro_export] macro_rules! strs_to_cli_arr { diff --git a/rust/origen_metal/Cargo.lock b/rust/origen_metal/Cargo.lock index 87b2065f..06c593d8 100644 --- a/rust/origen_metal/Cargo.lock +++ b/rust/origen_metal/Cargo.lock @@ -1184,6 +1184,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.16" @@ -1693,13 +1702,14 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6302e85060011447471887705bb7838f14aba43fcb06957d823739a496b3dc" +checksum = "ffb88ae05f306b4bfcde40ac4a51dc0b05936a9207a4b75b798c7729c4258a59" dependencies = [ "cfg-if 1.0.0", "indoc", "libc", + "memoffset", "parking_lot", "pyo3-build-config", "pyo3-ffi", @@ -1709,9 +1719,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b65b546c35d8a3b1b2f0ddbac7c6a569d759f357f2b9df884f5d6b719152c8" +checksum = "554db24f0b3c180a9c0b1268f91287ab3f17c162e15b54caaae5a6b3773396b0" dependencies = [ "once_cell", "target-lexicon", @@ -1719,9 +1729,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c275a07127c1aca33031a563e384ffdd485aee34ef131116fcd58e3430d1742b" +checksum = "922ede8759e8600ad4da3195ae41259654b9c55da4f7eec84a0ccc7d067a70a4" dependencies = [ "libc", "pyo3-build-config", @@ -1729,9 +1739,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fc4485bfbcc9850a6d661d627783f18d19c2ab55880b021671c4ba83e90f7" +checksum = "8a5caec6a1dd355964a841fcbeeb1b89fe4146c87295573f94228911af3cc5a2" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -1741,9 +1751,9 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53bda0f58f73f5c5429693c96ed57f7abdb38fdfc28ae06da4101a257adb7faf" +checksum = "e0b78ccbb160db1556cdb6fd96c50334c5d4ec44dc5e0a968d0a1208fa0efa8b" dependencies = [ "proc-macro2", "quote", diff --git a/rust/origen_metal/Cargo.toml b/rust/origen_metal/Cargo.toml index 0cf933e1..f058444e 100644 --- a/rust/origen_metal/Cargo.toml +++ b/rust/origen_metal/Cargo.toml @@ -19,7 +19,7 @@ time = "0.1" termcolor = "1" regex = "1" tempfile = "3" -pyo3 = {version = "0.16.5", features = ["extension-module"]} +pyo3 = {version = "0.19.1", features = ["extension-module"]} serde = {version = "1.0", features = ["derive"]} toml = "0.5" git2 = "0.13" diff --git a/rust/origen_metal/src/error.rs b/rust/origen_metal/src/error.rs index eb31eb5d..66b47080 100644 --- a/rust/origen_metal/src/error.rs +++ b/rust/origen_metal/src/error.rs @@ -36,28 +36,28 @@ impl std::convert::From for pyo3::PyErr { impl std::convert::From for Error { fn from(err: pyo3::PyErr) -> Self { - let gil = pyo3::Python::acquire_gil(); - let py = gil.python(); - Error::new(&format!( - "Encountered Exception '{}' with message: {}{}", - err.get_type(py).name().unwrap(), - { - let r = err.value(py).call_method0("__str__").unwrap(); - r.extract::().unwrap() - }, - { - let tb = err.traceback(py); - let m = py.import("traceback").unwrap(); - let temp = pyo3::types::PyTuple::new(py, &[tb]); - let et = m.call_method1("extract_tb", temp).unwrap(); - - let temp = pyo3::types::PyTuple::new(py, &[et]); - let text_list = m.call_method1("format_list", temp).unwrap(); - let text = text_list.extract::>().unwrap(); - - format!("\nWith traceback:\n{}", text.join("")) - } - )) + pyo3::Python::with_gil(|py| { + Error::new(&format!( + "Encountered Exception '{}' with message: {}{}", + err.get_type(py).name().unwrap(), + { + let r = err.value(py).call_method0("__str__").unwrap(); + r.extract::().unwrap() + }, + { + let tb = err.traceback(py); + let m = py.import("traceback").unwrap(); + let temp = pyo3::types::PyTuple::new(py, &[tb]); + let et = m.call_method1("extract_tb", temp).unwrap(); + + let temp = pyo3::types::PyTuple::new(py, &[et]); + let text_list = m.call_method1("format_list", temp).unwrap(); + let text = text_list.extract::>().unwrap(); + + format!("\nWith traceback:\n{}", text.join("")) + } + )) + }) } } diff --git a/rust/pyapi/Cargo.lock b/rust/pyapi/Cargo.lock index eeb1778b..1c749a9d 100644 --- a/rust/pyapi/Cargo.lock +++ b/rust/pyapi/Cargo.lock @@ -152,9 +152,9 @@ version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -345,11 +345,11 @@ dependencies = [ "atty", "onig", "prettyprint", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", "serde", "structopt", - "syn 1.0.74", + "syn 1.0.109", "syn-select", "syntect", "tempfile", @@ -587,16 +587,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ctor" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d" -dependencies = [ - "quote 1.0.9", - "syn 1.0.74", -] - [[package]] name = "ctr" version = "0.6.0" @@ -662,9 +652,9 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -873,9 +863,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f16ef37b2a9b242295d61a154ee91ae884afff6b8b933b486b12481cc58310ca" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -886,10 +876,10 @@ checksum = "ed327f716d0d351d86c9fd3398d20ee39ad8f681873cc081da2ca1c10fed398a" dependencies = [ "enum-utils-from-str", "failure", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", "serde_derive_internals", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -898,7 +888,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49be08bad6e4ca87b2b8e74146987d4e5cb3b7512efa50ef505b51a22227ee1" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", ] @@ -918,9 +908,9 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -1088,9 +1078,9 @@ checksum = "c54913bae956fb8df7f4dc6fc90362aa72e69148e3f39041fbe8742d21e0ac57" dependencies = [ "autocfg", "proc-macro-hack", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -1177,17 +1167,6 @@ dependencies = [ "polyval", ] -[[package]] -name = "ghost" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76c813ffb63e8fd3df6f1ac3cc1ea392c7612ac2de4d0b44dcbfe03e5c4bf94a" -dependencies = [ - "proc-macro2 1.0.28", - "quote 1.0.9", - "syn 1.0.74", -] - [[package]] name = "gimli" version = "0.24.0" @@ -1488,13 +1467,9 @@ dependencies = [ [[package]] name = "inventory" -version = "0.2.3" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84344c6e0b90a9e2b6f3f9abe5cc74402684e348df7b32adca28747e0cef091a" -dependencies = [ - "ctor", - "ghost", -] +checksum = "c38a87a1e0e2752433cd4b26019a469112a25fb43b30f5ee9b3b898925c5a0f9" [[package]] name = "ipnet" @@ -1755,6 +1730,15 @@ version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.16" @@ -2206,7 +2190,7 @@ name = "origen-core-support" version = "0.1.0-dev.1" dependencies = [ "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -2375,9 +2359,9 @@ checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -2421,9 +2405,9 @@ dependencies = [ "phf_generator", "phf_shared", "proc-macro-hack", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -2450,9 +2434,9 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -2564,9 +2548,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", "version_check", ] @@ -2576,7 +2560,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", "version_check", ] @@ -2599,16 +2583,16 @@ version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" dependencies = [ - "unicode-xid 0.1.0", + "unicode-xid", ] [[package]] name = "proc-macro2" -version = "1.0.28" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ - "unicode-xid 0.2.2", + "unicode-ident", ] [[package]] @@ -2627,14 +2611,15 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6302e85060011447471887705bb7838f14aba43fcb06957d823739a496b3dc" +checksum = "ffb88ae05f306b4bfcde40ac4a51dc0b05936a9207a4b75b798c7729c4258a59" dependencies = [ "cfg-if 1.0.0", "indoc", "inventory", "libc", + "memoffset", "num-bigint 0.4.0", "parking_lot", "pyo3-build-config", @@ -2645,9 +2630,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b65b546c35d8a3b1b2f0ddbac7c6a569d759f357f2b9df884f5d6b719152c8" +checksum = "554db24f0b3c180a9c0b1268f91287ab3f17c162e15b54caaae5a6b3773396b0" dependencies = [ "once_cell", "target-lexicon", @@ -2655,9 +2640,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c275a07127c1aca33031a563e384ffdd485aee34ef131116fcd58e3430d1742b" +checksum = "922ede8759e8600ad4da3195ae41259654b9c55da4f7eec84a0ccc7d067a70a4" dependencies = [ "libc", "pyo3-build-config", @@ -2665,25 +2650,25 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fc4485bfbcc9850a6d661d627783f18d19c2ab55880b021671c4ba83e90f7" +checksum = "8a5caec6a1dd355964a841fcbeeb1b89fe4146c87295573f94228911af3cc5a2" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "pyo3-macros-backend", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] name = "pyo3-macros-backend" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53bda0f58f73f5c5429693c96ed57f7abdb38fdfc28ae06da4101a257adb7faf" +checksum = "e0b78ccbb160db1556cdb6fd96c50334c5d4ec44dc5e0a968d0a1208fa0efa8b" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -2707,7 +2692,7 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", ] [[package]] @@ -3117,9 +3102,9 @@ version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3128,9 +3113,9 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dbab34ca63057a1f15280bdf3c39f2b1eb1b54c17e98360e511637aef7418c6" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3159,9 +3144,9 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3269,9 +3254,9 @@ version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1508efa03c362e23817f96cde18abed596a25219a8b2c66e8db33c03543d315b" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3321,9 +3306,9 @@ checksum = "7813934aecf5f51a54775e00068c237de98489463968231a51746bbbc03f9c10" dependencies = [ "heck", "proc-macro-error", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3342,9 +3327,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149" dependencies = [ "heck", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3361,18 +3346,18 @@ checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" dependencies = [ "proc-macro2 0.4.30", "quote 0.6.13", - "unicode-xid 0.1.0", + "unicode-xid", ] [[package]] name = "syn" -version = "1.0.74" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "unicode-xid 0.2.2", + "unicode-ident", ] [[package]] @@ -3381,7 +3366,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3918c65ff56396f0fb70664637e183410d273d93721bca514221ae3566dca0e" dependencies = [ - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3506,9 +3491,9 @@ version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3572,9 +3557,9 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -3743,6 +3728,12 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" +[[package]] +name = "unicode-ident" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" + [[package]] name = "unicode-normalization" version = "0.1.19" @@ -3770,12 +3761,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" - [[package]] name = "unindent" version = "0.1.7" @@ -3907,9 +3892,9 @@ dependencies = [ "bumpalo", "lazy_static", "log", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -3941,9 +3926,9 @@ version = "0.2.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c2657dd393f03aa2a659c25c6ae18a13a4048cebd220e147933ea837efc589f" dependencies = [ - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4080,9 +4065,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a482c56029e48681b89b92b5db3c446db0915e8dd1052c0328a574eda38d5f93" dependencies = [ "proc-macro-crate 0.1.5", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] [[package]] @@ -4112,7 +4097,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4ca5e22593eb4212382d60d26350065bf2a02c34b85bc850474a74b589a3de9" dependencies = [ "proc-macro-crate 1.1.3", - "proc-macro2 1.0.28", + "proc-macro2 1.0.66", "quote 1.0.9", - "syn 1.0.74", + "syn 1.0.109", ] diff --git a/rust/pyapi/Cargo.toml b/rust/pyapi/Cargo.toml index 73cc3ba5..b612d304 100644 --- a/rust/pyapi/Cargo.toml +++ b/rust/pyapi/Cargo.toml @@ -32,7 +32,7 @@ curl-sys = { version = "0.4.34", features = ["static-curl"] } openssl = { version = "0.10", features = ["vendored"] } [dependencies.pyo3] -version = "0.16.5" +version = "0.19.1" features = ["extension-module", "num-bigint", "multiple-pymethods", "auto-initialize"] [build-dependencies] diff --git a/rust/pyapi/src/application/_frontend.rs b/rust/pyapi/src/application/_frontend.rs index 88084fdb..05040d58 100644 --- a/rust/pyapi/src/application/_frontend.rs +++ b/rust/pyapi/src/application/_frontend.rs @@ -31,11 +31,11 @@ impl App { impl origen::core::frontend::App for App { fn check_production_status(&self) -> origen::Result { - let gil = Python::acquire_gil(); - let py = gil.python(); - let pyapp = get_pyapp(py)?; - let app = pyapp.borrow(py); - Ok(app.check_production_status()?) + Python::with_gil(|py| { + let pyapp = get_pyapp(py)?; + let app = pyapp.borrow(py); + Ok(app.check_production_status()?) + }) } fn publish(&self) -> origen::Result<()> { diff --git a/rust/pyapi/src/application/mod.rs b/rust/pyapi/src/application/mod.rs index 08b1a11c..3c3592de 100644 --- a/rust/pyapi/src/application/mod.rs +++ b/rust/pyapi/src/application/mod.rs @@ -9,9 +9,10 @@ use pyo3::prelude::*; use pyo3::types::{PyDict, PyTuple}; use std::path::{Path, PathBuf}; -#[pymodule] -pub fn application(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "application")?; + subm.add_class::()?; + m.add_submodule(subm)?; Ok(()) } @@ -22,7 +23,8 @@ pub struct PyApplication {} #[pymethods] impl PyApplication { #[new] - fn new() -> Self { + #[pyo3(signature=(**_kwargs))] + fn new(_kwargs: Option<&PyDict>) -> Self { PyApplication {} } @@ -40,7 +42,7 @@ impl PyApplication { Ok(r.passed()) } - #[args(kwargs = "**")] + #[pyo3(signature=(**kwargs))] fn __publish__(&self, kwargs: Option<&PyDict>) -> PyResult { let mut dry_run = false; let mut rn: Option<&str> = None; @@ -82,6 +84,7 @@ impl PyApplication { Ok(Status::from_origen(origen::app().unwrap().rc_status()?)) } + #[pyo3(signature=(pathspecs, msg, dry_run))] fn __rc_checkin__( &self, pathspecs: Option>, @@ -106,14 +109,14 @@ impl PyApplication { )?)) } - #[args(_args = "*")] + #[pyo3(signature=(*_args))] fn __build_package__(&self, _args: &PyTuple) -> PyResult { Ok(BuildResult { build_result: Some(origen::app().unwrap().build_package()?), }) } - #[args(_args = "*")] + #[pyo3(signature=(*_args))] fn __run_publish_checks__(&self, _args: &PyTuple) -> PyResult { let r = origen::app().unwrap().run_publish_checks(false)?; Ok(r.passed()) @@ -234,18 +237,18 @@ pub fn get_pyapp<'py>(py: Python<'py>) -> PyResult> { /// Note: this could have several methods overridden. Just check that the aforementioned /// class is one of the object's ancestors pub fn is_base_app(query: &PyAny) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); - let locals = PyDict::new(py); - locals.set_item("origen", py.import("origen")?.to_object(py))?; - locals.set_item("builtins", py.import("builtins")?.to_object(py))?; - locals.set_item("query", query.to_object(py))?; - let result = py.eval( - "builtins.isinstance(query, origen.application.Base)", - Some(locals), - None, - )?; - Ok(result.extract::()?) + Python::with_gil(|py| { + let locals = PyDict::new(py); + locals.set_item("origen", py.import("origen")?.to_object(py))?; + locals.set_item("builtins", py.import("builtins")?.to_object(py))?; + locals.set_item("query", query.to_object(py))?; + let result = py.eval( + "builtins.isinstance(query, origen.application.Base)", + Some(locals), + None, + )?; + Ok(result.extract::()?) + }) } /// Return the name of the given app. Equivalent to `app.name` in Python diff --git a/rust/pyapi/src/dut.rs b/rust/pyapi/src/dut.rs index 4184344f..a00eb5ed 100644 --- a/rust/pyapi/src/dut.rs +++ b/rust/pyapi/src/dut.rs @@ -4,12 +4,8 @@ use origen::Error; use pyo3::prelude::*; #[allow(unused_imports)] use pyo3::types::{PyAny, PyBytes, PyDict, PyIterator, PyList, PySlice, PyTuple}; -use pyo3::wrap_pymodule; - -use crate::pins::__PYO3_PYMODULE_DEF_PINS; -use crate::registers::__PYO3_PYMODULE_DEF_REGISTERS; -use crate::timesets::__PYO3_PYMODULE_DEF_TIMESETS; +//TODO is this needed/used? #[allow(dead_code)] pub fn get_pydut(py: Python) -> PyResult<&PyAny> { let locals = PyDict::new(py); @@ -17,14 +13,13 @@ pub fn get_pydut(py: Python) -> PyResult<&PyAny> { Ok(py.eval("origen.dut", Some(locals), None)?) } -/// Implements the module _origen.dut in Python which exposes all -/// DUT-related APIs -#[pymodule] -pub fn dut(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; - m.add_wrapped(wrap_pymodule!(pins))?; - m.add_wrapped(wrap_pymodule!(registers))?; - m.add_wrapped(wrap_pymodule!(timesets))?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "dut")?; + subm.add_class::()?; + crate::pins::define(py, subm)?; + crate::registers::define(py, subm)?; + crate::timesets::define(py, subm)?; + m.add_submodule(subm)?; Ok(()) } @@ -46,6 +41,7 @@ impl PyDUT { } /// Creates a new model at the given path + #[pyo3(signature=(parent_id, name, offset=None))] fn create_model( &self, parent_id: Option, @@ -63,17 +59,12 @@ impl PyDUT { /// push_metadata(self, item) /// Pushes metadata object onto the current DUT - pub fn push_metadata(&mut self, item: &PyAny) -> usize { - let gil = Python::acquire_gil(); - let py = gil.python(); - + pub fn push_metadata(&mut self, py: Python, item: &PyAny) -> usize { self.metadata.push(item.to_object(py)); self.metadata.len() - 1 } - pub fn override_metadata_at(&mut self, idx: usize, item: &PyAny) -> PyResult<()> { - let gil = Python::acquire_gil(); - let py = gil.python(); + pub fn override_metadata_at(&mut self, py: Python, idx: usize, item: &PyAny) -> PyResult<()> { if self.metadata.len() > idx { self.metadata[idx] = item.to_object(py); Ok(()) @@ -100,11 +91,11 @@ impl PyDUT { impl PyDUT { pub fn ensure_pins(model_path: &str) -> PyResult<()> { - let gil = Python::acquire_gil(); - let py = gil.python(); - let locals = PyDict::new(py); - locals.set_item("origen", py.import("origen")?.to_object(py))?; - py.eval(&format!("origen.{}.pins", model_path), Some(locals), None)?; - Ok(()) + Python::with_gil(|py| { + let locals = PyDict::new(py); + locals.set_item("origen", py.import("origen")?.to_object(py))?; + py.eval(&format!("origen.{}.pins", model_path), Some(locals), None)?; + Ok(()) + }) } } diff --git a/rust/pyapi/src/file_handler.rs b/rust/pyapi/src/file_handler.rs index edb0447a..436b0541 100644 --- a/rust/pyapi/src/file_handler.rs +++ b/rust/pyapi/src/file_handler.rs @@ -2,7 +2,7 @@ use origen::core::file_handler::FileHandler as CoreFileHandler; use pyo3::prelude::*; use pyo3::wrap_pyfunction; -pub fn define(m: &PyModule) -> PyResult<()> { +pub fn define(_py: Python, m: &PyModule) -> PyResult<()> { m.add_wrapped(wrap_pyfunction!(file_handler))?; Ok(()) } diff --git a/rust/pyapi/src/lib.rs b/rust/pyapi/src/lib.rs index fccc92f3..9163a2a5 100644 --- a/rust/pyapi/src/lib.rs +++ b/rust/pyapi/src/lib.rs @@ -28,7 +28,7 @@ mod application; mod producer; mod prog_gen; mod standard_sub_blocks; -mod tester; +pub mod tester; mod tester_apis; #[macro_use] mod utility; @@ -43,7 +43,7 @@ use pyapi_metal::{runtime_error, pypath}; use pyo3::conversion::AsPyPointer; use pyo3::prelude::*; use pyo3::types::{PyAny, PyBytes, PyDict}; -use pyo3::{wrap_pyfunction, wrap_pymodule}; +use pyo3::wrap_pyfunction; use std::path::{Path, PathBuf}; use std::str::FromStr; use std::sync::MutexGuard; @@ -51,19 +51,6 @@ use utility::location::Location; use paste::paste; use origen::core::status::DependencySrc; -use crate::dut::__PYO3_PYMODULE_DEF_DUT; -use crate::tester::__PYO3_PYMODULE_DEF_TESTER; -use crate::tester_apis::__PYO3_PYMODULE_DEF_TESTER_APIS; -use crate::application::__PYO3_PYMODULE_DEF_APPLICATION; -use crate::prog_gen::interface::__PYO3_PYMODULE_DEF_INTERFACE; -use crate::producer::__PYO3_PYMODULE_DEF_PRODUCER; -use crate::services::__PYO3_PYMODULE_DEF_SERVICES; -use crate::utility::__PYO3_PYMODULE_DEF_UTILITY; -use crate::standard_sub_blocks::__PYO3_PYMODULE_DEF_STANDARD_SUB_BLOCKS; -use crate::prog_gen::__PYO3_PYMODULE_DEF_PROG_GEN; - -use pyapi_metal::__PYO3_PYMODULE_DEF__ORIGEN_METAL; - pub mod built_info { // The file has been placed there by the build script. include!(concat!(env!("OUT_DIR"), "/built.rs")); @@ -99,18 +86,17 @@ fn _origen(py: Python, m: &PyModule) -> PyResult<()> { m.add_wrapped(wrap_pyfunction!(set_operation))?; m.add_wrapped(wrap_pyfunction!(boot_users))?; - m.add_wrapped(wrap_pymodule!(dut))?; - m.add_wrapped(wrap_pymodule!(tester))?; - m.add_wrapped(wrap_pymodule!(application))?; - m.add_wrapped(wrap_pymodule!(interface))?; - m.add_wrapped(wrap_pymodule!(producer))?; - m.add_wrapped(wrap_pymodule!(services))?; - m.add_wrapped(wrap_pymodule!(utility))?; - m.add_wrapped(wrap_pymodule!(tester_apis))?; - m.add_wrapped(wrap_pymodule!(standard_sub_blocks))?; - m.add_wrapped(wrap_pymodule!(prog_gen))?; - - file_handler::define(m)?; + dut::define(py, m)?; + tester::define(py, m)?; + application::define(py, m)?; + prog_gen::interface::define(py, m)?; + producer::define(py, m)?; + services::define(py, m)?; + utility::define(py, m)?; + tester_apis::define(py, m)?; + standard_sub_blocks::define(py, m)?; + prog_gen::define(py, m)?; + file_handler::define(py, m)?; plugins::define(py, m)?; extensions::define(py, m)?; current_command::define(py, m)?; @@ -118,7 +104,7 @@ fn _origen(py: Python, m: &PyModule) -> PyResult<()> { // Compile the _origen_metal library along with this one // to allow re-use from that library - m.add_wrapped(wrap_pymodule!(_origen_metal))?; + pyapi_metal::define(py, m)?; m.setattr(current_command::ATTR_NAME, py.None())?; Ok(()) } @@ -357,23 +343,24 @@ fn exit_pass() -> PyResult<()> { } fn origen_mod_path() -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); - let locals = PyDict::new(py); - locals.set_item("importlib", py.import("importlib")?)?; - let p = PathBuf::from( - py.eval( - "importlib.util.find_spec('_origen').origin", - None, - Some(&locals), - )? - .extract::()?, - ); - Ok(p.parent().unwrap().to_path_buf()) + Python::with_gil(|py| { + let locals = PyDict::new(py); + locals.set_item("importlib", py.import("importlib")?)?; + let p = PathBuf::from( + py.eval( + "importlib.util.find_spec('_origen').origin", + None, + Some(&locals), + )? + .extract::()?, + ); + Ok(p.parent().unwrap().to_path_buf()) + }) } /// Called automatically when Origen is first loaded #[pyfunction] +#[pyo3(signature=(log_verbosity, verbosity_keywords, cli_location, cli_version, fe_pkg_loc, fe_exe_loc, invocation))] fn initialize( py: Python, log_verbosity: Option, @@ -687,11 +674,10 @@ pub fn with_pycallbacks(mut func: F) -> PyResult where F: FnMut(Python, &PyAny) -> PyResult, { - let gil = Python::acquire_gil(); - let py = gil.python(); - - let pycallbacks = py.import("origen.callbacks")?; - func(py, pycallbacks) + Python::with_gil(|py| { + let pycallbacks = py.import("origen.callbacks")?; + func(py, pycallbacks) + }) } pub fn get_full_class_name(obj: &PyAny) -> PyResult { @@ -802,7 +788,7 @@ pub fn boot_users(py: Python) -> PyResult // Set the data lookup hierarchy if let Some(hierarchy) = &crate::ORIGEN_CONFIG.user__data_lookup_hierarchy { - match users.set_data_lookup_hierarchy(hierarchy.to_owned()) { + match users.apply_data_lookup_hierarchy(hierarchy.to_owned()) { Ok(_) => {} Err(e) => { om::log_error!( @@ -811,7 +797,7 @@ pub fn boot_users(py: Python) -> PyResult ); om::log_error!("{}", e); om::log_error!("Forcing empty dataset lookup hierarchy..."); - users.set_data_lookup_hierarchy(vec![])?; + users.apply_data_lookup_hierarchy(vec![])?; } } } else { @@ -820,7 +806,7 @@ pub fn boot_users(py: Python) -> PyResult { // The config can only be read as an unordered hashmap. If multiple datasets are given, // clear the hierarchy if not explicitly given, otherwise will get non-deterministic behavior - users.set_data_lookup_hierarchy(vec![])?; + users.apply_data_lookup_hierarchy(vec![])?; } } diff --git a/rust/pyapi/src/meta/py_like_apis/dict_like_api.rs b/rust/pyapi/src/meta/py_like_apis/dict_like_api.rs index ecece431..81e06c5a 100644 --- a/rust/pyapi/src/meta/py_like_apis/dict_like_api.rs +++ b/rust/pyapi/src/meta/py_like_apis/dict_like_api.rs @@ -65,13 +65,13 @@ pub trait DictLikeAPI { items = self.lookup_table(&dut); } - let gil = Python::acquire_gil(); - let py = gil.python(); - let mut v: Vec = Vec::new(); - for (n, _item) in items { - v.push(self.new_pyitem(py, &n, self.model_id())?); - } - Ok(v) + Python::with_gil(|py| { + let mut v: Vec = Vec::new(); + for (n, _item) in items { + v.push(self.new_pyitem(py, &n, self.model_id())?); + } + Ok(v) + }) } fn items(&self) -> PyResult> { @@ -81,43 +81,43 @@ pub trait DictLikeAPI { items = self.lookup_table(&dut); } - let gil = Python::acquire_gil(); - let py = gil.python(); - let mut _items: Vec<(String, PyObject)> = Vec::new(); - for (n, _item) in items.iter() { - _items.push((n.clone(), self.new_pyitem(py, &n, self.model_id())?)); - } - Ok(_items) + Python::with_gil(|py| { + let mut _items: Vec<(String, PyObject)> = Vec::new(); + for (n, _item) in items.iter() { + _items.push((n.clone(), self.new_pyitem(py, &n, self.model_id())?)); + } + Ok(_items) + }) } fn get(&self, name: &str) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); - { - let dut = DUT.lock().unwrap(); - let items = self.lookup_table(&dut); - if items.get(name).is_none() { - return Ok(py.None()); + Python::with_gil(|py| { + { + let dut = DUT.lock().unwrap(); + let items = self.lookup_table(&dut); + if items.get(name).is_none() { + return Ok(py.None()); + } } - } - Ok(self.new_pyitem(py, name, self.model_id())?) + Ok(self.new_pyitem(py, name, self.model_id())?) + }) } // Functions for PyMappingProtocol fn __getitem__(&self, name: &str) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); - { - let dut = DUT.lock().unwrap(); - let items = self.lookup_table(&dut); - if items.get(name).is_none() { - return Err(pyo3::exceptions::PyKeyError::new_err(format!( - "No item found for {}", - name - ))); + Python::with_gil(|py| { + { + let dut = DUT.lock().unwrap(); + let items = self.lookup_table(&dut); + if items.get(name).is_none() { + return Err(pyo3::exceptions::PyKeyError::new_err(format!( + "No item found for {}", + name + ))); + } } - } - Ok(self.new_pyitem(py, name, self.model_id())?) + Ok(self.new_pyitem(py, name, self.model_id())?) + }) } fn __len__(&self) -> PyResult { diff --git a/rust/pyapi/src/meta/py_like_apis/list_like_api.rs b/rust/pyapi/src/meta/py_like_apis/list_like_api.rs index 75fc2b95..fcf3cb17 100644 --- a/rust/pyapi/src/meta/py_like_apis/list_like_api.rs +++ b/rust/pyapi/src/meta/py_like_apis/list_like_api.rs @@ -8,7 +8,7 @@ pub trait ListLikeAPI { fn __iter__(&self) -> PyResult; fn __getitem__(&self, idx: &PyAny) -> PyResult { - if let Ok(slice) = idx.cast_as::() { + if let Ok(slice) = idx.downcast::() { self.___getslice__(slice) } else { let i = idx.extract::()?; @@ -42,9 +42,9 @@ pub trait ListLikeAPI { _idx = ((item_ids.len() as isize) + idx) as usize; } - let gil = Python::acquire_gil(); - let py = gil.python(); - Ok(self.new_pyitem(py, _idx)?) + Python::with_gil(|py| { + Ok(self.new_pyitem(py, _idx)?) + }) } fn ___getslice__(&self, slice: &PySlice) -> PyResult { @@ -55,22 +55,22 @@ pub trait ListLikeAPI { indices = slice.indices((item_ids.len() as i32).into())?; } - let gil = Python::acquire_gil(); - let py = gil.python(); - let mut rtn: Vec = vec![]; - let mut i = indices.start; - if indices.step > 0 { - while i < indices.stop { - rtn.push(self.new_pyitem(py, i as usize)?); - i += indices.step; + Python::with_gil(|py| { + let mut rtn: Vec = vec![]; + let mut i = indices.start; + if indices.step > 0 { + while i < indices.stop { + rtn.push(self.new_pyitem(py, i as usize)?); + i += indices.step; + } + } else if indices.step < 0 { + while i > indices.stop { + rtn.push(self.new_pyitem(py, i as usize)?); + i += indices.step; + } } - } else if indices.step < 0 { - while i > indices.stop { - rtn.push(self.new_pyitem(py, i as usize)?); - i += indices.step; - } - } - Ok(rtn.to_object(py)) + Ok(rtn.to_object(py)) + }) } fn __len__(&self) -> PyResult { @@ -109,7 +109,7 @@ pub trait GeneralizedListLikeAPI { // fn __iter__(&self) -> PyResult; fn __getitem__(&self, idx: &PyAny) -> PyResult { - if let Ok(slice) = idx.cast_as::() { + if let Ok(slice) = idx.downcast::() { self.___getslice__(slice) } else { let i = idx.extract::()?; @@ -138,29 +138,29 @@ pub trait GeneralizedListLikeAPI { _idx = ((self.items().len() as isize) + idx) as usize; } - let gil = Python::acquire_gil(); - let py = gil.python(); - Ok(self.new_pyitem(py, &self.items()[_idx], _idx)?) + Python::with_gil(|py| { + Ok(self.new_pyitem(py, &self.items()[_idx], _idx)?) + }) } fn ___getslice__(&self, slice: &PySlice) -> PyResult { let indices = slice.indices((self.items().len() as i32).into())?; - let gil = Python::acquire_gil(); - let py = gil.python(); - let mut rtn: Vec = vec![]; - let mut i = indices.start; - if indices.step > 0 { - while i < indices.stop { - rtn.push(self.new_pyitem(py, &self.items()[i as usize], i as usize)?); - i += indices.step; + Python::with_gil(|py| { + let mut rtn: Vec = vec![]; + let mut i = indices.start; + if indices.step > 0 { + while i < indices.stop { + rtn.push(self.new_pyitem(py, &self.items()[i as usize], i as usize)?); + i += indices.step; + } + } else if indices.step < 0 { + while i > indices.stop { + rtn.push(self.new_pyitem(py, &self.items()[i as usize], i as usize)?); + i += indices.step; + } } - } else if indices.step < 0 { - while i > indices.stop { - rtn.push(self.new_pyitem(py, &self.items()[i as usize], i as usize)?); - i += indices.step; - } - } - Ok(rtn.to_object(py)) + Ok(rtn.to_object(py)) + }) } fn __len__(&self) -> PyResult { diff --git a/rust/pyapi/src/pins.rs b/rust/pyapi/src/pins.rs index 227a72ed..7d58c210 100644 --- a/rust/pyapi/src/pins.rs +++ b/rust/pyapi/src/pins.rs @@ -28,16 +28,19 @@ use pin_header::{PinHeader, PinHeaderContainer}; #[allow(unused_imports)] use pyo3::types::{PyAny, PyBytes, PyDict, PyIterator, PyList, PyTuple}; -#[pymodule] -/// Implements the module _origen.pins in Python -pub fn pins(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "pins")?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + + pyapi_metal::alias_method_apply_to_set!(subm, "PinGroup", "actions"); + pyapi_metal::alias_method_apply_to_set!(subm, "PinCollection", "actions"); + m.add_submodule(subm)?; Ok(()) } @@ -144,12 +147,12 @@ pub fn pins_to_backend_lookup_fields( } pub fn vec_to_ppin_ids(dut: &origen::Dut, pins: Vec<&PyAny>) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); - let t = PyTuple::new(py, pins); - let pin_lookups = pins_to_backend_lookup_fields(py, t)?; - let flat_pins = dut._resolve_to_flattened_pins(&pin_lookups)?; - Ok(flat_pins.iter().map(|p| p.id).collect::>()) + Python::with_gil(|py| { + let t = PyTuple::new(py, pins); + let pin_lookups = pins_to_backend_lookup_fields(py, t)?; + let flat_pins = dut._resolve_to_flattened_pins(&pin_lookups)?; + Ok(flat_pins.iter().map(|p| p.id).collect::>()) + }) } // /// Similar to pins_to_backend_lookup_fields (and actually uses that) but goes @@ -167,8 +170,8 @@ pub fn vec_to_ppin_ids(dut: &origen::Dut, pins: Vec<&PyAny>) -> PyResult) -> PyResult { + #[pyo3(signature=(model_id, name, **kwargs))] + fn add_pin(&self, py: Python, model_id: usize, name: &str, kwargs: Option<&PyDict>) -> PyResult { let mut dut = DUT.lock().unwrap(); let (mut reset_action, mut width, mut offset, mut endianness): ( Option>, @@ -199,8 +202,6 @@ impl PyDUT { } dut.add_pin(model_id, name, width, offset, reset_action, endianness)?; - let gil = Python::acquire_gil(); - let py = gil.python(); match dut.get_pin_group(model_id, name) { Some(_p) => Ok(Py::new( py, @@ -215,11 +216,8 @@ impl PyDUT { } } - fn pin(&self, model_id: usize, name: &str) -> PyResult { + fn pin(&self, py: Python, model_id: usize, name: &str) -> PyResult { let dut = DUT.lock().unwrap(); - - let gil = Python::acquire_gil(); - let py = gil.python(); match dut.get_pin_group(model_id, name) { Some(_p) => Ok(Py::new( py, @@ -234,7 +232,7 @@ impl PyDUT { } } - #[args(aliases = "*")] + #[pyo3(signature=(model_id, name, *aliases))] fn add_pin_alias(&self, model_id: usize, name: &str, aliases: &PyTuple) -> PyResult<()> { let mut dut = DUT.lock().unwrap(); for alias in aliases { @@ -244,15 +242,14 @@ impl PyDUT { Ok(()) } - fn pins(&self, model_id: usize) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn pins(&self, py: Python, model_id: usize) -> PyResult> { Ok(Py::new(py, PinContainer { model_id: model_id }).unwrap()) } - #[args(pins = "*", options = "**")] + #[pyo3(signature=(model_id, name, *pins, **options))] fn group_pins( &self, + py: Python, model_id: usize, name: &str, pins: &PyTuple, @@ -285,8 +282,6 @@ impl PyDUT { let mut dut = DUT.lock().unwrap(); dut.group_pins_by_name(model_id, name, name_strs, endianness)?; - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(Py::new( py, PinGroup { @@ -298,17 +293,12 @@ impl PyDUT { .to_object(py)) } - fn physical_pins(&self, model_id: usize) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn physical_pins(&self, py: Python, model_id: usize) -> PyResult> { Ok(Py::new(py, PhysicalPinContainer { model_id: model_id }).unwrap()) } - fn physical_pin(&self, model_id: usize, name: &str) -> PyResult { + fn physical_pin(&self, py: Python, model_id: usize, name: &str) -> PyResult { let dut = DUT.lock().unwrap(); - - let gil = Python::acquire_gil(); - let py = gil.python(); match dut.get_pin(model_id, name) { Some(_p) => Ok(Py::new( py, @@ -323,9 +313,10 @@ impl PyDUT { } } - #[args(pins = "*")] + #[pyo3(signature=(model_id, name, *pins))] fn add_pin_header( &self, + py: Python, model_id: usize, name: &str, pins: &PyTuple, @@ -333,8 +324,6 @@ impl PyDUT { let mut dut = DUT.lock().unwrap(); dut.create_pin_header(model_id, name, pins.extract::>()?)?; - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(Py::new( py, PinHeader { @@ -345,17 +334,12 @@ impl PyDUT { .unwrap()) } - fn pin_headers(&self, model_id: usize) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn pin_headers(&self, py: Python, model_id: usize) -> PyResult> { Ok(Py::new(py, PinHeaderContainer { model_id: model_id }).unwrap()) } - fn pin_header(&self, model_id: usize, name: &str) -> PyResult { + fn pin_header(&self, py: Python, model_id: usize, name: &str) -> PyResult { let dut = DUT.lock().unwrap(); - - let gil = Python::acquire_gil(); - let py = gil.python(); match dut.get_pin_header(model_id, name) { Some(_p) => Ok(Py::new( py, diff --git a/rust/pyapi/src/pins/pin.rs b/rust/pyapi/src/pins/pin.rs index 4ce2a4de..db0562a5 100644 --- a/rust/pyapi/src/pins/pin.rs +++ b/rust/pyapi/src/pins/pin.rs @@ -27,30 +27,26 @@ pub struct Pin { #[pymethods] impl Pin { - fn add_metadata(&self, id_str: &str, obj: &PyAny) -> PyResult<()> { + fn add_metadata(&self, py: Python, id_str: &str, obj: &PyAny) -> PyResult<()> { let mut dut = DUT.lock().unwrap(); let pin = dut._get_mut_pin(self.model_id, &self.name)?; - let gil = Python::acquire_gil(); - let py = gil.python(); let locals = [("origen", py.import("origen")?)].into_py_dict(py); let mut dut = py .eval("origen.dut.db", None, Some(&locals)) .unwrap() .extract::>()?; - let idx = dut.push_metadata(obj); + let idx = dut.push_metadata(py, obj); // Store the index of this object, returning an error if the pin.add_metadata_id(id_str, idx)?; Ok(()) } - fn set_metadata(&self, id_str: &str, obj: &PyAny) -> PyResult { + fn set_metadata(&self, py: Python, id_str: &str, obj: &PyAny) -> PyResult { let mut dut = DUT.lock().unwrap(); let pin = dut._get_mut_pin(self.model_id, &self.name)?; - let gil = Python::acquire_gil(); - let py = gil.python(); let locals = [("origen", py.import("origen")?)].into_py_dict(py); let mut dut = py .eval("origen.dut.db", None, Some(&locals)) @@ -58,22 +54,21 @@ impl Pin { .extract::>()?; match pin.get_metadata_id(id_str) { Some(idx) => { - dut.override_metadata_at(idx, obj)?; + dut.override_metadata_at(py, idx, obj)?; Ok(true) } None => { - let idx = dut.push_metadata(obj); + let idx = dut.push_metadata(py, obj); pin.add_metadata_id(id_str, idx)?; Ok(false) } } } - fn get_metadata(&self, id_str: &str) -> PyResult { + fn get_metadata(&self, py: Python, id_str: &str) -> PyResult { let dut = DUT.lock().unwrap(); let pin = dut._get_pin(self.model_id, &self.name)?; - let gil = Python::acquire_gil(); - let py = gil.python(); + match pin.metadata.get(id_str) { Some(idx) => { let locals = [("origen", py.import("origen")?)].into_py_dict(py); @@ -130,12 +125,9 @@ impl Pin { } #[getter] - fn get_reset_data(&self) -> PyResult { + fn get_reset_data(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); let pin = dut._get_pin(self.model_id, &self.name)?; - - let gil = Python::acquire_gil(); - let py = gil.python(); match &pin.reset_action { Some(d) => Ok(d.to_logic()?.to_object(py)), None => Ok(py.None()), @@ -143,12 +135,9 @@ impl Pin { } #[getter] - fn get_reset_action(&self) -> PyResult { + fn get_reset_action(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); let pin = dut._get_pin(self.model_id, &self.name)?; - - let gil = Python::acquire_gil(); - let py = gil.python(); match pin.reset_action.as_ref() { Some(a) => Ok(a.to_string().into_py(py)), None => Ok(py.None()), diff --git a/rust/pyapi/src/pins/pin_actions.rs b/rust/pyapi/src/pins/pin_actions.rs index 687d1d53..66e5a472 100644 --- a/rust/pyapi/src/pins/pin_actions.rs +++ b/rust/pyapi/src/pins/pin_actions.rs @@ -69,9 +69,7 @@ pub struct PinActions { impl PinActions { #[allow(non_snake_case)] #[classmethod] - fn DriveHigh(_cls: &PyType) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn DriveHigh(_cls: &PyType, py: Python) -> PyResult { Ok(PinActions { actions: vec![OrigenPinAction::drive_high()], } @@ -80,9 +78,7 @@ impl PinActions { #[allow(non_snake_case)] #[classmethod] - fn DriveLow(_cls: &PyType) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn DriveLow(_cls: &PyType, py: Python) -> PyResult { Ok(PinActions { actions: vec![OrigenPinAction::drive_low()], } @@ -91,9 +87,7 @@ impl PinActions { #[allow(non_snake_case)] #[classmethod] - fn VerifyHigh(_cls: &PyType) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn VerifyHigh(_cls: &PyType, py: Python) -> PyResult { Ok(PinActions { actions: vec![OrigenPinAction::verify_high()], } @@ -102,9 +96,7 @@ impl PinActions { #[allow(non_snake_case)] #[classmethod] - fn VerifyLow(_cls: &PyType) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn VerifyLow(_cls: &PyType, py: Python) -> PyResult { Ok(PinActions { actions: vec![OrigenPinAction::verify_low()], } @@ -113,9 +105,7 @@ impl PinActions { #[allow(non_snake_case)] #[classmethod] - fn Capture(_cls: &PyType) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn Capture(_cls: &PyType, py: Python) -> PyResult { Ok(PinActions { actions: vec![OrigenPinAction::capture()], } @@ -124,9 +114,7 @@ impl PinActions { #[allow(non_snake_case)] #[classmethod] - fn HighZ(_cls: &PyType) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn HighZ(_cls: &PyType, py: Python) -> PyResult { Ok(PinActions { actions: vec![OrigenPinAction::highz()], } @@ -135,9 +123,7 @@ impl PinActions { #[allow(non_snake_case)] #[classmethod] - fn Multichar(_cls: &PyType, symbol: String) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn Multichar(_cls: &PyType, py: Python, symbol: String) -> PyResult { Ok(PinActions { actions: vec![OrigenPinAction::new(&symbol)], } @@ -145,21 +131,19 @@ impl PinActions { } #[classmethod] - fn standard_actions(cls: &PyType) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn standard_actions(cls: &PyType, py: Python) -> PyResult { let retn = PyDict::new(py); - retn.set_item("DriveHigh", Self::DriveHigh(cls)?)?; - retn.set_item("DriveLow", Self::DriveLow(cls)?)?; - retn.set_item("VerifyHigh", Self::VerifyHigh(cls)?)?; - retn.set_item("VerifyLow", Self::VerifyLow(cls)?)?; - retn.set_item("Capture", Self::Capture(cls)?)?; - retn.set_item("HighZ", Self::HighZ(cls)?)?; + retn.set_item("DriveHigh", Self::DriveHigh(cls, py)?)?; + retn.set_item("DriveLow", Self::DriveLow(cls, py)?)?; + retn.set_item("VerifyHigh", Self::VerifyHigh(cls, py)?)?; + retn.set_item("VerifyLow", Self::VerifyLow(cls, py)?)?; + retn.set_item("Capture", Self::Capture(cls, py)?)?; + retn.set_item("HighZ", Self::HighZ(cls, py)?)?; Ok(retn.into()) } #[new] - #[args(actions = "*", _kwargs = "**")] + #[pyo3(signature=(*actions, **_kwargs))] fn new(actions: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { let mut temp: Vec = vec![]; // if let Some(actions_) = actions { @@ -198,10 +182,7 @@ impl PinActions { /// Comparisons are only valid for *equal* and *not equal*. Can't compare if one /// pin action is *greater than* or *less than* another. /// Example of richcmp: https://github.com/PyO3/pyo3/blob/a5e3d4e7c8d80f7020510cf630ab01001612c6a7/tests/test_arithmetics.rs#L358-L373 - fn __richcmp__(&self, other: &PyAny, op: CompareOp) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); - + fn __richcmp__(&self, py: Python, other: &PyAny, op: CompareOp) -> PyResult { // Support comparing either to a str or another Actions object let other_string; if let Ok(s) = other.extract::() { @@ -283,9 +264,9 @@ impl GeneralizedListLikeAPI for PinActions { _idx = ((self.items().len() as isize) + idx) as usize; } - let gil = Python::acquire_gil(); - let py = gil.python(); - Ok(self.new_pyitem(py, &self.items()[_idx], _idx)?) + Python::with_gil(|py| { + self.new_pyitem(py, &self.items()[_idx], _idx) + }) } fn ___getslice__(&self, slice: &PySlice) -> PyResult { @@ -305,9 +286,9 @@ impl GeneralizedListLikeAPI for PinActions { } } } - let gil = Python::acquire_gil(); - let py = gil.python(); - Ok(PinActions { actions: actions }.into_py(py)) + Ok(Python::with_gil(|py| { + PinActions { actions: actions }.into_py(py) + })) } } diff --git a/rust/pyapi/src/pins/pin_collection.rs b/rust/pyapi/src/pins/pin_collection.rs index 22940d7e..c8f3b7c0 100644 --- a/rust/pyapi/src/pins/pin_collection.rs +++ b/rust/pyapi/src/pins/pin_collection.rs @@ -46,12 +46,12 @@ impl PinCollection { impl PinCollection { #[setter] fn actions(slf: PyRefMut, actions: &PyAny) -> PyResult<()> { - Self::set_actions(slf, actions, None)?; + Self::apply_actions(slf, actions, None)?; Ok(()) } - #[args(kwargs = "**")] - fn set_actions( + #[pyo3(signature=(actions, **kwargs))] + fn apply_actions( slf: PyRefMut, actions: &PyAny, kwargs: Option<&PyDict>, @@ -65,11 +65,8 @@ impl PinCollection { } #[getter] - fn get_actions(&self) -> PyResult { + fn get_actions(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); - let gil = Python::acquire_gil(); - let py = gil.python(); - let pin_actions = self.pin_collection.get_actions(&dut)?; Ok(PinActions { actions: pin_actions, @@ -102,7 +99,7 @@ impl PinCollection { Ok(()) } - #[args(label = "None", symbol = "None", cycles = "None", mask = "None")] + #[pyo3(signature=(label=None, symbol=None, cycles=None, mask=None))] fn overlay( slf: PyRef, label: Option, @@ -117,7 +114,7 @@ impl PinCollection { Ok(slf.into()) } - #[args(symbol = "None", cycles = "None", mask = "None")] + #[pyo3(signature=(symbol=None, cycles=None, mask=None))] fn capture( slf: PyRef, symbol: Option, @@ -147,10 +144,8 @@ impl PinCollection { } #[getter] - fn get_reset_actions(&self) -> PyResult { + fn get_reset_actions(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); - let gil = Python::acquire_gil(); - let py = gil.python(); let pin_actions = self.pin_collection.get_reset_actions(&dut)?; Ok(PinActions { actions: pin_actions, @@ -168,11 +163,8 @@ impl PinCollection { Ok(self.pin_collection.is_little_endian()) } - #[args(kwargs = "**")] - fn cycle(slf: PyRef, kwargs: Option<&PyDict>) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); - + #[pyo3(signature=(**kwargs))] + fn cycle(slf: PyRef, py: Python, kwargs: Option<&PyDict>) -> PyResult> { let locals = PyDict::new(py); locals.set_item("origen", py.import("origen")?)?; locals.set_item("kwargs", kwargs.to_object(py))?; @@ -185,10 +177,7 @@ impl PinCollection { Ok(slf.into()) } - fn repeat(slf: PyRef, count: usize) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); - + fn repeat(slf: PyRef, py: Python, count: usize) -> PyResult> { let locals = PyDict::new(py); locals.set_item("origen", py.import("origen")?)?; py.eval( @@ -271,15 +260,15 @@ impl ListLikeAPI for PinCollection { } } } - let gil = Python::acquire_gil(); - let py = gil.python(); - Ok(Py::new( - py, - PinCollection { - pin_collection: OrigenPinCollection::new(ids, None), - }, - )? - .to_object(py)) + Python::with_gil(|py| { + Ok(Py::new( + py, + PinCollection { + pin_collection: OrigenPinCollection::new(ids, None), + }, + )? + .to_object(py)) + }) } } diff --git a/rust/pyapi/src/pins/pin_container.rs b/rust/pyapi/src/pins/pin_container.rs index 681c9165..ffe4a9f1 100644 --- a/rust/pyapi/src/pins/pin_container.rs +++ b/rust/pyapi/src/pins/pin_container.rs @@ -35,10 +35,8 @@ impl PinContainer { self.keys() } - #[args(names = "*", options = "**")] - fn collect(&self, names: &PyTuple, options: Option<&PyDict>) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); + #[pyo3(signature=(*names, **options))] + fn collect(&self, py: Python, names: &PyTuple, options: Option<&PyDict>) -> PyResult> { let mut endianness = Option::None; match options { Some(options) => { diff --git a/rust/pyapi/src/pins/pin_group.rs b/rust/pyapi/src/pins/pin_group.rs index a4b2d5c3..5e667ace 100644 --- a/rust/pyapi/src/pins/pin_group.rs +++ b/rust/pyapi/src/pins/pin_group.rs @@ -33,11 +33,8 @@ impl PinGroup { } #[getter] - fn get_actions(&self) -> PyResult { + fn get_actions(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); - let gil = Python::acquire_gil(); - let py = gil.python(); - let grp = dut._get_pin_group(self.model_id, &self.name)?; let pin_actions = grp.get_actions(&dut)?; Ok(PinActions { @@ -46,7 +43,7 @@ impl PinGroup { .into_py(py)) } - #[args(kwargs = "**")] + #[pyo3(signature=(data, **kwargs))] fn drive(slf: PyRef, data: BigUint, kwargs: Option<&PyDict>) -> PyResult> { let dut = DUT.lock().unwrap(); let grp = dut._get_pin_group(slf.model_id, &slf.name)?; @@ -56,7 +53,7 @@ impl PinGroup { Ok(slf.into()) } - #[args(kwargs = "**")] + #[pyo3(signature=(data, **kwargs))] fn verify(slf: PyRef, data: BigUint, kwargs: Option<&PyDict>) -> PyResult> { let dut = DUT.lock().unwrap(); let grp = dut._get_pin_group(slf.model_id, &slf.name)?; @@ -75,12 +72,12 @@ impl PinGroup { #[setter] fn actions(slf: PyRef, actions: &PyAny) -> PyResult<()> { - Self::set_actions(slf, actions, None)?; + Self::apply_actions(slf, actions, None)?; Ok(()) } - #[args(kwargs = "**")] - fn set_actions( + #[pyo3(signature=(actions, **kwargs))] + fn apply_actions( slf: PyRef, actions: &PyAny, kwargs: Option<&PyDict>, @@ -109,10 +106,8 @@ impl PinGroup { } #[getter] - fn get_reset_actions(&self) -> PyResult { + fn get_reset_actions(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); - let gil = Python::acquire_gil(); - let py = gil.python(); let grp = dut._get_pin_group(self.model_id, &self.name)?; let pin_actions = grp.get_reset_actions(&dut)?; Ok(PinActions { @@ -134,11 +129,8 @@ impl PinGroup { Ok(grp.is_little_endian()) } - #[args(kwargs = "**")] - fn cycle(slf: PyRef, kwargs: Option<&PyDict>) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); - + #[pyo3(signature=(**kwargs))] + fn cycle(slf: PyRef, py: Python, kwargs: Option<&PyDict>) -> PyResult> { let locals = PyDict::new(py); locals.set_item("origen", py.import("origen")?)?; locals.set_item("kwargs", kwargs.to_object(py))?; @@ -151,10 +143,7 @@ impl PinGroup { Ok(slf.into()) } - fn repeat(slf: PyRef, count: usize) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); - + fn repeat(slf: PyRef, py: Python, count: usize) -> PyResult> { let locals = PyDict::new(py); locals.set_item("origen", py.import("origen")?)?; py.eval( @@ -165,7 +154,7 @@ impl PinGroup { Ok(slf.into()) } - #[args(label = "None", symbol = "None", cycles = "None", mask = "None")] + #[pyo3(signature=(label=None, symbol=None, cycles=None, mask=None))] fn overlay( slf: PyRef, label: Option, @@ -181,7 +170,7 @@ impl PinGroup { Ok(slf.into()) } - #[args(symbol = "None", cycles = "None", mask = "None")] + #[pyo3(signature=(symbol=None, cycles=None, mask=None))] fn capture( slf: PyRef, symbol: Option, @@ -276,8 +265,8 @@ impl ListLikeAPI for PinGroup { } } } - let gil = Python::acquire_gil(); - let py = gil.python(); - Ok(Py::new(py, PinCollection::from_ids_unchecked(ids, None))?.to_object(py)) + Python::with_gil(|py| { + Ok(Py::new(py, PinCollection::from_ids_unchecked(ids, None))?.to_object(py)) + }) } } diff --git a/rust/pyapi/src/producer.rs b/rust/pyapi/src/producer.rs index 52feaca8..04c822b3 100644 --- a/rust/pyapi/src/producer.rs +++ b/rust/pyapi/src/producer.rs @@ -1,12 +1,12 @@ use pyo3::prelude::*; use std::path::{Path, PathBuf}; -#[pymodule] -pub fn producer(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "producer")?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + m.add_submodule(subm)?; Ok(()) } diff --git a/rust/pyapi/src/prog_gen/flow_options.rs b/rust/pyapi/src/prog_gen/flow_options.rs index 52e9c42f..490a91c3 100644 --- a/rust/pyapi/src/prog_gen/flow_options.rs +++ b/rust/pyapi/src/prog_gen/flow_options.rs @@ -228,7 +228,7 @@ pub fn on_fail(fid: &FlowID, kwargs: Option<&PyDict>) -> Result<()> { if cont { flow_api::continue_on_fail(None)?; } - if let Ok(on_fail) = on_fail.cast_as::() { + if let Ok(on_fail) = on_fail.downcast::() { for (k, v) in on_fail { if let Ok(k) = k.extract::() { match k.as_str() { @@ -273,7 +273,7 @@ pub fn on_pass(fid: &FlowID, kwargs: Option<&PyDict>) -> Result<()> { if let Some(kwargs) = kwargs { if let Some(on_pass) = kwargs.get_item("on_pass") { let ref_id = flow_api::start_on_failed(fid.to_owned(), None)?; - if let Ok(on_pass) = on_pass.cast_as::() { + if let Ok(on_pass) = on_pass.downcast::() { for (k, v) in on_pass { if let Ok(k) = k.extract::() { match k.as_str() { diff --git a/rust/pyapi/src/prog_gen/interface.rs b/rust/pyapi/src/prog_gen/interface.rs index 7f236367..53fdaf6c 100644 --- a/rust/pyapi/src/prog_gen/interface.rs +++ b/rust/pyapi/src/prog_gen/interface.rs @@ -12,9 +12,10 @@ use regex::Regex; use std::path::PathBuf; use std::str::FromStr; -#[pymodule] -pub fn interface(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "interface")?; + subm.add_class::()?; + m.add_submodule(subm)?; Ok(()) } @@ -76,7 +77,7 @@ impl PyInterface { } /// Add a test to the flow - #[args(kwargs = "**")] + #[pyo3(signature=(test_obj, **kwargs))] fn add_test(&self, test_obj: &PyAny, kwargs: Option<&PyDict>) -> PyResult<()> { let id = flow_options::get_flow_id(kwargs)?; let bin = flow_options::get_bin(kwargs)?; @@ -126,7 +127,7 @@ impl PyInterface { } /// Add a cz test to the flow - #[args(kwargs = "**")] + #[pyo3(signature=(test_obj, cz_setup, **kwargs))] fn add_cz_test( &self, test_obj: &PyAny, @@ -159,7 +160,7 @@ impl PyInterface { Ok(()) } - #[args(id = "None", kwargs = "**")] + #[pyo3(signature=(name, **kwargs))] fn group(&mut self, name: String, kwargs: Option<&PyDict>) -> PyResult { let id = flow_options::get_flow_id(kwargs)?; let (mut g, ref_ids) = flow_options::wrap_in_conditions(kwargs, true, || { @@ -175,7 +176,7 @@ impl PyInterface { Ok(r) } - #[args(jobs = "*", _kwargs = "**")] + #[pyo3(signature=(*jobs, **_kwargs))] fn if_job(&mut self, jobs: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(jobs) { Ok(v) => Ok(Condition::new(FlowCondition::IfJob(v))), @@ -183,7 +184,7 @@ impl PyInterface { } } - #[args(jobs = "*", _kwargs = "**")] + #[pyo3(signature=(*jobs, **_kwargs))] fn unless_job(&mut self, jobs: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(jobs) { Ok(v) => Ok(Condition::new(FlowCondition::UnlessJob(v))), @@ -191,7 +192,7 @@ impl PyInterface { } } - #[args(flags = "*", _kwargs = "**")] + #[pyo3(signature=(*flags, **_kwargs))] fn if_enable(&mut self, flags: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(flags) { Ok(v) => Ok(Condition::new(FlowCondition::IfEnable(v))), @@ -199,7 +200,7 @@ impl PyInterface { } } - #[args(flags = "*", _kwargs = "**")] + #[pyo3(signature=(*flags, **_kwargs))] fn unless_enable(&mut self, flags: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(flags) { Ok(v) => Ok(Condition::new(FlowCondition::UnlessEnable(v))), @@ -207,7 +208,7 @@ impl PyInterface { } } - #[args(flags = "*", _kwargs = "**")] + #[pyo3(signature=(*flags, **_kwargs))] fn if_enabled(&mut self, flags: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(flags) { Ok(v) => Ok(Condition::new(FlowCondition::IfEnable(v))), @@ -215,7 +216,7 @@ impl PyInterface { } } - #[args(flags = "*", _kwargs = "**")] + #[pyo3(signature=(*flags, **_kwargs))] fn unless_enabled(&mut self, flags: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(flags) { Ok(v) => Ok(Condition::new(FlowCondition::UnlessEnable(v))), @@ -223,7 +224,7 @@ impl PyInterface { } } - #[args(ids = "*", _kwargs = "**")] + #[pyo3(signature=(*ids, **_kwargs))] fn if_passed(&mut self, ids: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(ids) { Ok(v) => Ok(Condition::new(FlowCondition::IfPassed( @@ -233,7 +234,7 @@ impl PyInterface { } } - #[args(ids = "*", _kwargs = "**")] + #[pyo3(signature=(*ids, **_kwargs))] fn unless_passed(&mut self, ids: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(ids) { Ok(v) => Ok(Condition::new(FlowCondition::IfFailed( @@ -243,7 +244,7 @@ impl PyInterface { } } - #[args(ids = "*", _kwargs = "**")] + #[pyo3(signature=(*ids, **_kwargs))] fn if_failed(&mut self, ids: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(ids) { Ok(v) => Ok(Condition::new(FlowCondition::IfFailed( @@ -253,7 +254,7 @@ impl PyInterface { } } - #[args(ids = "*", _kwargs = "**")] + #[pyo3(signature=(*ids, **_kwargs))] fn unless_failed(&mut self, ids: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(ids) { Ok(v) => Ok(Condition::new(FlowCondition::IfPassed( @@ -263,7 +264,7 @@ impl PyInterface { } } - #[args(ids = "*", _kwargs = "**")] + #[pyo3(signature=(*ids, **_kwargs))] fn if_ran(&mut self, ids: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(ids) { Ok(v) => Ok(Condition::new(FlowCondition::IfRan( @@ -273,7 +274,7 @@ impl PyInterface { } } - #[args(ids = "*", _kwargs = "**")] + #[pyo3(signature=(*ids, **_kwargs))] fn unless_ran(&mut self, ids: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult { match extract_to_string_vec(ids) { Ok(v) => Ok(Condition::new(FlowCondition::UnlessRan( @@ -284,7 +285,7 @@ impl PyInterface { } /// Bin out - #[args(soft_bin = "None", softbin = "None", good = "false", kwargs = "**")] + #[pyo3(signature=(hard_bin, soft_bin=None, softbin=None, good=false, description=None, priority=None, **kwargs))] fn bin( &self, hard_bin: usize, @@ -326,7 +327,7 @@ impl PyInterface { .0) } - #[args(soft_bin = "None", softbin = "None", kwargs = "**")] + #[pyo3(signature=(hard_bin, soft_bin=None, softbin=None, description=None, priority=None, **kwargs))] fn good_die( &self, hard_bin: usize, @@ -347,7 +348,7 @@ impl PyInterface { ) } - #[args(soft_bin = "None", softbin = "None", kwargs = "**")] + #[pyo3(signature=(hard_bin, soft_bin=None, softbin=None, description=None, priority=None, **kwargs))] fn bad_die( &self, hard_bin: usize, diff --git a/rust/pyapi/src/prog_gen/mod.rs b/rust/pyapi/src/prog_gen/mod.rs index a125c1aa..76582093 100644 --- a/rust/pyapi/src/prog_gen/mod.rs +++ b/rust/pyapi/src/prog_gen/mod.rs @@ -25,12 +25,12 @@ use std::thread; pub use test::Test; pub use test_invocation::TestInvocation; -#[pymodule] -/// Implements the module _origen.prog_gen in Python -pub fn prog_gen(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_wrapped(wrap_pyfunction!(start_new_flow))?; - m.add_wrapped(wrap_pyfunction!(end_flow))?; - m.add_wrapped(wrap_pyfunction!(render))?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "prog_gen")?; + subm.add_wrapped(wrap_pyfunction!(start_new_flow))?; + subm.add_wrapped(wrap_pyfunction!(end_flow))?; + subm.add_wrapped(wrap_pyfunction!(render))?; + m.add_submodule(subm)?; Ok(()) } diff --git a/rust/pyapi/src/registers.rs b/rust/pyapi/src/registers.rs index 2e5264e8..30f85a2f 100644 --- a/rust/pyapi/src/registers.rs +++ b/rust/pyapi/src/registers.rs @@ -11,20 +11,32 @@ use register::{Field, FieldEnum, ResetVal}; use origen::core::model::registers::register::Register; pub use register_collection::RegisterCollection; -#[pymodule] -/// Implements the module _origen.registers in Python -pub fn registers(_py: Python, m: &PyModule) -> PyResult<()> { - // Used to pass register field info from Python to Rust when defining regs - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - - m.add_wrapped(wrap_pyfunction!(create))?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "registers")?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_wrapped(wrap_pyfunction!(create))?; + m.add_submodule(subm)?; Ok(()) } /// Create a new register, returning its ID #[pyfunction] +#[pyo3(signature=( + address_block_id, + register_file_id, + name, + offset, + size, + bit_order, + fields, + filename=None, + lineno=None, + description=None, + resets=None, + access=None, +))] fn create( address_block_id: usize, register_file_id: Option, diff --git a/rust/pyapi/src/registers/address_block.rs b/rust/pyapi/src/registers/address_block.rs index 9d3118e8..ffa6ff07 100644 --- a/rust/pyapi/src/registers/address_block.rs +++ b/rust/pyapi/src/registers/address_block.rs @@ -245,9 +245,7 @@ impl AddressBlock { } } - fn __getattr__(&self, query: &str) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn __getattr__(&self, py: Python, query: &str) -> PyResult { let dut = origen::dut(); if query == "regs" || query == "registers" { diff --git a/rust/pyapi/src/registers/bit_collection.rs b/rust/pyapi/src/registers/bit_collection.rs index b27d6d67..5ee68ccf 100644 --- a/rust/pyapi/src/registers/bit_collection.rs +++ b/rust/pyapi/src/registers/bit_collection.rs @@ -99,7 +99,7 @@ impl BitCollection { } /// Returns a bit collection containing the given bit indices - #[args(args = "*")] + #[pyo3(signature=(*args))] fn subset(&self, args: &PyTuple) -> PyResult { let mut bc = self.clone(); let mut bit_ids: Vec = Vec::new(); @@ -250,13 +250,13 @@ impl BitCollection { Ok(self.clone()) } - #[args(shift_in = "0")] + #[pyo3(signature=(shift_in=0))] fn shift_left(&self, shift_in: u8) -> PyResult { let dut = origen::dut(); Ok(self.materialize(&dut)?.shift_left(shift_in)?) } - #[args(shift_in = "0")] + #[pyo3(signature=(shift_in=0))] fn shift_right(&self, shift_in: u8) -> PyResult { let dut = origen::dut(); Ok(self.materialize(&dut)?.shift_right(shift_in)?) @@ -296,7 +296,7 @@ impl BitCollection { Ok(self.clone()) } - #[args(label = "None", symbol = "None", mask = "None")] + #[pyo3(signature=(label=None, symbol=None, mask=None))] fn set_overlay( &self, label: Option, @@ -315,7 +315,6 @@ impl BitCollection { Ok(self.clone()) } - // #[args(kwargs = "**")] fn set_capture(&self) -> PyResult { self.materialize(&origen::dut())?.capture(); Ok(self.clone()) @@ -359,7 +358,7 @@ impl BitCollection { } } - #[args(enable = "None", preset = "false")] + #[pyo3(signature=(enable=None, preset=false))] /// Trigger a verify transaction on the register pub fn _internal_verify( &self, @@ -381,7 +380,7 @@ impl BitCollection { Ok(()) } - #[args(enable = "None")] + #[pyo3(signature=(enable=None))] /// Equivalent to calling verify() but without invoking a register transaction at the end, /// i.e. it will set the verify flag on the bits and optionally apply an enable mask when /// deciding what bit flags to set. @@ -539,7 +538,7 @@ impl BitCollection { } } - #[args(args = "*")] + #[pyo3(signature=(*args))] fn try_fields(&self, args: &PyTuple) -> PyResult { let dut = origen::dut(); @@ -703,21 +702,20 @@ impl BitCollection { /// Locates the "closest" controller to this bitcollection. /// "Closest" being defined as the first subblock (or the DUT) which implements a "verify/write_register" /// that owns the memory map -> address block -> register -> bit collection <- self - fn controller_for(slf: &PyCell, operation: Option<&str>) -> PyResult { + fn controller_for(slf: &PyCell, py: Python, operation: Option<&str>) -> PyResult { let bc = slf.extract::>()?; - match bc._controller_for(operation)? { + match bc._controller_for(py, operation)? { Some(c) => Ok(c), None => { - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(py.None()) } } } - #[args(_kwargs = "**")] + #[pyo3(signature=(data=None, **_kwargs))] fn write( slf: &PyCell, + py: Python, data: Option, _kwargs: Option<&PyDict>, ) -> PyResult> { @@ -730,11 +728,9 @@ impl BitCollection { } // Attempt to find a controller which implements "write_register" - match bc._controller_for(Some("write_register"))? { + match bc._controller_for(py, Some("write_register"))? { Some(c) => { // If we've found a matching controller, write the register - let gil = Python::acquire_gil(); - let py = gil.python(); let args = PyTuple::new(py, &[slf.to_object(py)]); c.call_method(py, "write_register", args, None)?; }, @@ -746,9 +742,10 @@ impl BitCollection { Ok(slf.into()) } - #[args(_kwargs = "**")] + #[pyo3(signature=(data=None, **_kwargs))] fn verify( slf: &PyCell, + py: Python, data: Option, _kwargs: Option<&PyDict>, ) -> PyResult> { @@ -762,11 +759,9 @@ impl BitCollection { bc.set_verify_flag(None)?; // Attempt to find a controller which implements "verify_register" - match bc._controller_for(Some("verify_register"))? { + match bc._controller_for(py, Some("verify_register"))? { Some(c) => { // If we've found a matching controller, verify the register - let gil = Python::acquire_gil(); - let py = gil.python(); let args = PyTuple::new(py, &[slf.to_object(py)]); c.call_method(py, "verify_register", args, None)?; }, @@ -778,8 +773,8 @@ impl BitCollection { Ok(slf.into()) } - #[args(kwargs = "**")] - fn capture(slf: &PyCell, kwargs: Option<&PyDict>) -> PyResult> { + #[pyo3(signature=(**kwargs))] + fn capture(slf: &PyCell, py: Python, kwargs: Option<&PyDict>) -> PyResult> { // let bc = slf.extract::>()?; // bc.capture(); //slf.materialize(&origen::dut())?.capture(); @@ -790,11 +785,9 @@ impl BitCollection { let bc = slf.extract::>()?; // Attempt to find a controller which implements "capture_register" - match bc._controller_for(Some("capture_register"))? { + match bc._controller_for(py, Some("capture_register"))? { Some(c) => { // If we've found a matching controller, capture the register - let gil = Python::acquire_gil(); - let py = gil.python(); let args = PyTuple::new(py, &[slf.to_object(py)]); c.call_method(py, "capture_register", args, kwargs)?; } @@ -802,10 +795,8 @@ impl BitCollection { // No controller specifies a "capture_register" method, so fall back to // using verify with the capture bits set and no additional arguments which // may change its state. - match bc._controller_for(Some("verify_register"))? { + match bc._controller_for(py, Some("verify_register"))? { Some(c) => { - let gil = Python::acquire_gil(); - let py = gil.python(); let args = PyTuple::new(py, &[slf.to_object(py)]); c.call_method(py, "verify_register", args, None)?; } @@ -816,30 +807,6 @@ impl BitCollection { ))); } } - // match Self::verify(slf, None, None) { - // Ok(c) => {}, - // Err(e) => { - // let err = &e.pvalue; - // match err { - // pyo3::PyErrValue::Value(obj) =>{ - // let gil = Python::acquire_gil(); - // let py = gil.python(); - // let message = obj.extract::(py)?; - // if message.contains("No controller in the path") && message.contains("implements a 'verify_register'. Cannot verify this register.") { - // // Change the error message slightly as "capture_register" is also applicable - // return Err(PyErr::new::(format!( - // "No controller in the path {} implements a 'capture_register' or a 'verify_register'. Cannot capture this register.", - // bc.model_path()? - // ))); - // } else { - // // Some other error - // return Err(e); - // } - // }, - // _ => return Err(e) - // } - // } - // } } } @@ -939,9 +906,7 @@ impl BitCollection { } } - fn __getattr__(&self, query: &str) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn __getattr__(&self, py: Python, query: &str) -> PyResult { let dut = origen::dut(); // .bits returns a Python list containing individual bit objects wrapped in BCs if query == "bits" { @@ -1000,7 +965,7 @@ impl BitCollection { Some(x) => Some(x.to_string()), None => None, }; - if let Ok(slice) = idx.cast_as::() { + if let Ok(slice) = idx.downcast::() { // Indices requires (what I think is) a max size. Should be plenty. let indices = slice.indices(8192)?; // TODO: Should this support step size? @@ -1025,7 +990,7 @@ impl BitCollection { let mut bc = self.smart_clone(bit_ids); bc.field = field; Ok(bc) - } else if let Ok(_int) = idx.cast_as::() { + } else if let Ok(_int) = idx.downcast::() { let i = idx.extract::().unwrap(); if i < self.bit_ids.len() { let mut bit_ids: Vec = Vec::new(); @@ -1042,7 +1007,7 @@ impl BitCollection { "The given bit index is out of range", )) } - } else if let Ok(_name) = idx.cast_as::() { + } else if let Ok(_name) = idx.downcast::() { if self.whole_reg { let name = idx.extract::<&str>().unwrap(); self.field(name) @@ -1134,7 +1099,7 @@ impl BitCollection { } } - fn _controller_for(&self, operation: Option<&str>) -> PyResult> { + fn _controller_for(&self, py: Python, operation: Option<&str>) -> PyResult> { let mut ops: Vec = vec![]; if let Some(s) = operation { ops.push(s.to_string()); @@ -1143,8 +1108,6 @@ impl BitCollection { ops.push("read_register".to_string()); } let mut mp = self.model_path()?; - let gil = Python::acquire_gil(); - let py = gil.python(); let locals = PyDict::new(py); locals.set_item("origen", py.import("origen")?.to_object(py))?; locals.set_item("dut", py.eval("origen.dut", Some(locals.clone()), None)?)?; @@ -1155,7 +1118,7 @@ impl BitCollection { if mp == "dut" { dut_checked = true; } - if ops.iter().all(|op| m.hasattr(op).unwrap()) { + if ops.iter().all(|op| m.hasattr(op.as_str()).unwrap()) { // Found the controller. Return this. return Ok(Some(m.to_object(py))); } else { diff --git a/rust/pyapi/src/registers/memory_map.rs b/rust/pyapi/src/registers/memory_map.rs index 204f79bd..b215612a 100644 --- a/rust/pyapi/src/registers/memory_map.rs +++ b/rust/pyapi/src/registers/memory_map.rs @@ -220,9 +220,7 @@ pub struct MemoryMap { #[pymethods] impl MemoryMap { - fn __getattr__(&self, query: &str) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn __getattr__(&self, py: Python, query: &str) -> PyResult { let dut = origen::dut(); // Calling .regs on an individual memory map returns the regs in its default diff --git a/rust/pyapi/src/registers/register.rs b/rust/pyapi/src/registers/register.rs index d9a4b0cd..4335c880 100644 --- a/rust/pyapi/src/registers/register.rs +++ b/rust/pyapi/src/registers/register.rs @@ -21,6 +21,17 @@ pub struct Field { #[pymethods] impl Field { #[new] + #[pyo3(signature=( + name, + description, + offset, + width, + access, + resets, + enums, + filename=None, + lineno=None, + ))] fn new( name: String, description: Option, diff --git a/rust/pyapi/src/services.rs b/rust/pyapi/src/services.rs index 7265562f..56046443 100644 --- a/rust/pyapi/src/services.rs +++ b/rust/pyapi/src/services.rs @@ -5,13 +5,11 @@ pub mod swd; use pyo3::prelude::*; -#[pymodule] -/// Implements the module _origen.services in Python -pub fn services(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - // m.add_class::()?; - +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "services")?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + m.add_submodule(subm)?; Ok(()) } diff --git a/rust/pyapi/src/services/jtag.rs b/rust/pyapi/src/services/jtag.rs index 7cfa89a7..b6e2d13a 100644 --- a/rust/pyapi/src/services/jtag.rs +++ b/rust/pyapi/src/services/jtag.rs @@ -51,7 +51,7 @@ impl JTAG { Ok(()) } - #[args(width = "None", kwargs = "**")] + #[pyo3(signature=(bits_or_val, width=None, **kwargs))] fn write_dr( &self, bits_or_val: &PyAny, @@ -70,7 +70,7 @@ impl JTAG { Ok(self.clone()) } - #[args(width = "None", kwargs = "**")] + #[pyo3(signature=(bits_or_val, width=None, **kwargs))] fn verify_dr( &self, bits_or_val: &PyAny, @@ -89,7 +89,7 @@ impl JTAG { Ok(self.clone()) } - #[args(width = "None", kwargs = "**")] + #[pyo3(signature=(bits_or_val, width=None, **kwargs))] fn write_ir( &self, bits_or_val: &PyAny, @@ -108,7 +108,7 @@ impl JTAG { Ok(self.clone()) } - #[args(width = "None", kwargs = "**")] + #[pyo3(signature=(bits_or_val, width=None, **kwargs))] fn verify_ir( &self, bits_or_val: &PyAny, diff --git a/rust/pyapi/src/services/simple.rs b/rust/pyapi/src/services/simple.rs index da7d80f1..adad53c5 100644 --- a/rust/pyapi/src/services/simple.rs +++ b/rust/pyapi/src/services/simple.rs @@ -67,7 +67,7 @@ impl Simple { Ok(slf.into()) } - #[args(write_opts = "**")] + #[pyo3(signature=(bits_or_val, **write_opts))] fn write_register( slf: PyRef, bits_or_val: &PyAny, @@ -87,7 +87,7 @@ impl Simple { Ok(slf.into()) } - #[args(verify_opts = "**")] + #[pyo3(signature=(bits_or_val, **verify_opts))] fn verify_register( slf: PyRef, bits_or_val: &PyAny, diff --git a/rust/pyapi/src/services/swd.rs b/rust/pyapi/src/services/swd.rs index 862bc1c6..63a29584 100644 --- a/rust/pyapi/src/services/swd.rs +++ b/rust/pyapi/src/services/swd.rs @@ -32,7 +32,7 @@ impl SWD { Ok(self.clone()) } - #[args(kwargs = "**")] + #[pyo3(signature=(bits_or_val, **kwargs))] fn write_ap(&self, bits_or_val: &PyAny, kwargs: Option<&PyDict>) -> PyResult { let dut = origen::dut(); let mut services = origen::services(); @@ -52,7 +52,7 @@ impl SWD { Ok(self.clone()) } - #[args(kwargs = "**")] + #[pyo3(signature=(bits_or_val, **kwargs))] fn verify_ap(&self, bits_or_val: &PyAny, kwargs: Option<&PyDict>) -> PyResult { let dut = origen::dut(); let mut services = origen::services(); @@ -75,7 +75,7 @@ impl SWD { Ok(self.clone()) } - #[args(kwargs = "**")] + #[pyo3(signature=(bits_or_val, **kwargs))] fn write_dp(&self, bits_or_val: &PyAny, kwargs: Option<&PyDict>) -> PyResult { let dut = origen::dut(); let mut services = origen::services(); @@ -95,7 +95,7 @@ impl SWD { Ok(self.clone()) } - #[args(kwargs = "**")] + #[pyo3(signature=(bits_or_val, **kwargs))] fn verify_dp(&self, bits_or_val: &PyAny, kwargs: Option<&PyDict>) -> PyResult { let dut = origen::dut(); let mut services = origen::services(); diff --git a/rust/pyapi/src/standard_sub_blocks/arm_debug.rs b/rust/pyapi/src/standard_sub_blocks/arm_debug.rs index 23bb9313..c0b6150c 100644 --- a/rust/pyapi/src/standard_sub_blocks/arm_debug.rs +++ b/rust/pyapi/src/standard_sub_blocks/arm_debug.rs @@ -12,23 +12,19 @@ use pyo3::prelude::*; use pyo3::types::{PyAny, PyDict, PyTuple, PyType}; use pyo3::ToPyObject; -#[pymodule] -/// Implements the module _origen.standard_sub_blocks in Python and ties together -/// the PyAPI with the Rust backend. -/// Put another way, this is the Python-side controller for the backend-side model/controller. -pub fn arm_debug(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "arm_debug")?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + m.add_submodule(subm)?; Ok(()) } /// Checks for an SWD attribute on the DUT /// Note: this must be run after the DUT has loaded or else it'll cause a lockup -fn check_for_swd() -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); +fn check_for_swd(py: Python) -> PyResult> { let locals = PyDict::new(py); locals.set_item("origen", py.import("origen")?.to_object(py))?; locals.set_item("builtins", py.import("builtins")?.to_object(py))?; @@ -47,9 +43,7 @@ fn check_for_swd() -> PyResult> { } } -fn check_for_jtag() -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); +fn check_for_jtag(py: Python) -> PyResult> { let locals = PyDict::new(py); locals.set_item("origen", py.import("origen")?.to_object(py))?; locals.set_item("builtins", py.import("builtins")?.to_object(py))?; @@ -90,14 +84,12 @@ impl ArmDebug { } #[classmethod] - fn model_init(_cls: &PyType, instance: &PyAny, block_options: Option<&PyDict>) -> PyResult<()> { + fn model_init(_cls: &PyType, py: Python, instance: &PyAny, block_options: Option<&PyDict>) -> PyResult<()> { crate::dut::PyDUT::ensure_pins("dut")?; - let swd_id = check_for_swd()?; - let jtag_id = check_for_jtag()?; + let swd_id = check_for_swd(py)?; + let jtag_id = check_for_jtag(py)?; // Create the Arm Debug instance - let gil = Python::acquire_gil(); - let py = gil.python(); let arm_debug_id; { let model_id = instance.getattr("model_id")?.extract::()?; @@ -168,6 +160,7 @@ impl ArmDebug { let ap_opts_dict = ap_opts.downcast::()?; Self::add_mem_ap( instance.downcast::>()?, + py, &ap_name.extract::()?, { if let Some(ap_addr) = ap_opts_dict.get_item("ap") { @@ -192,13 +185,11 @@ impl ArmDebug { fn add_mem_ap( slf: &PyCell, + py: Python, name: &str, ap: Option, csw_reset: Option, ) -> PyResult<()> { - let gil = Python::acquire_gil(); - let py = gil.python(); - let args = PyTuple::new( py, &[name.to_object(py), "origen.arm_debug.mem_ap".to_object(py)], @@ -229,7 +220,6 @@ impl ArmDebug { } #[pyclass(subclass)] -#[pyo3(text_signature = "()")] #[allow(dead_code)] // Suppress the false dead-code warning for the "clone" derive #[derive(Clone)] struct DP { @@ -254,8 +244,8 @@ impl DP { } #[classmethod] - #[args(_block_options = "**")] - fn model_init(_cls: &PyType, instance: &PyAny, block_options: Option<&PyDict>) -> PyResult<()> { + #[pyo3(signature=(instance, block_options=None))] + fn model_init(_cls: &PyType, py: Python, instance: &PyAny, block_options: Option<&PyDict>) -> PyResult<()> { // Require an ArmDebug ID to tie this DP to an ArmDebug instance let arm_debug_id; if let Some(opts) = block_options { @@ -278,8 +268,6 @@ impl DP { )); } - let gil = Python::acquire_gil(); - let py = gil.python(); let obj = instance.to_object(py); let args = PyTuple::new(py, &["default".to_object(py), "default".to_object(py)]); let dp_id; @@ -295,7 +283,7 @@ impl DP { Ok(()) } - #[args(write_opts = "**")] + #[pyo3(signature=(bits, **_write_opts))] fn write_register(&self, bits: &PyAny, _write_opts: Option<&PyDict>) -> PyResult<()> { let bc = bits.extract::>()?; let dut = origen::dut(); @@ -305,7 +293,7 @@ impl DP { Ok(()) } - #[args(verify_opts = "**")] + #[pyo3(signature=(bits, **_verify_opts))] fn verify_register(&self, bits: &PyAny, _verify_opts: Option<&PyDict>) -> PyResult<()> { let bc = bits.extract::>()?; let dut = origen::dut(); @@ -333,7 +321,6 @@ impl DP { } #[pyclass(subclass)] -#[pyo3(text_signature = "()")] #[allow(dead_code)] // Suppress the false dead-code warning for the "clone" derive #[derive(Clone)] struct JtagDP { @@ -358,8 +345,8 @@ impl JtagDP { } #[classmethod] - #[args(_block_options = "**")] - fn model_init(_cls: &PyType, instance: &PyAny, block_options: Option<&PyDict>) -> PyResult<()> { + #[pyo3(signature=(instance, block_options=None))] + fn model_init(_cls: &PyType, py: Python, instance: &PyAny, block_options: Option<&PyDict>) -> PyResult<()> { // Require an ArmDebug ID to tie this DP to an ArmDebug instance let arm_debug_id; if let Some(opts) = block_options { @@ -368,22 +355,20 @@ impl JtagDP { arm_debug_id = id; } else { return Err(PyErr::new::( - "Subblock arm_debug.dp was given an arm_debug _id block option but could not extract it as an integer" + "Subblock jtagdp was given an arm_debug _id block option but could not extract it as an integer" )); } } else { return Err(PyErr::new::( - "Subblock arm_debug.dp was not given required block option 'arm_debug_id'", + "Subblock jtagdp was not given required block option 'arm_debug_id'", )); } } else { return Err(PyErr::new::( - "Subblock arm_debug.dp requires an arm_debug_id block option, but no block options were given." + "Subblock jtagdp requires an arm_debug_id block option, but no block options were given." )); } - let gil = Python::acquire_gil(); - let py = gil.python(); let obj = instance.to_object(py); let args = PyTuple::new(py, &["default".to_object(py), "default".to_object(py)]); let id; @@ -472,7 +457,7 @@ impl JtagDP { Ok(()) } - #[args(write_opts = "**")] + #[pyo3(signature=(bits, **write_opts))] fn write_register(&self, bits: &PyAny, write_opts: Option<&PyDict>) -> PyResult<()> { let dut = origen::dut(); let services = origen::services(); @@ -485,7 +470,7 @@ impl JtagDP { Ok(()) } - #[args(verify_opts = "**")] + #[pyo3(signature=(bits, **verify_opts))] fn verify_register(&self, bits: &PyAny, verify_opts: Option<&PyDict>) -> PyResult<()> { let dut = origen::dut(); let services = origen::services(); @@ -517,7 +502,7 @@ impl MemAP { } #[classmethod] - fn model_init(_cls: &PyType, instance: &PyAny, block_options: Option<&PyDict>) -> PyResult<()> { + fn model_init(_cls: &PyType, py: Python, instance: &PyAny, block_options: Option<&PyDict>) -> PyResult<()> { // Require an ArmDebug ID to tie this DP to an ArmDebug instance let arm_debug_id; if let Some(opts) = block_options { @@ -552,8 +537,6 @@ impl MemAP { addr = 0; } - let gil = Python::acquire_gil(); - let py = gil.python(); let obj = instance.to_object(py); let args = PyTuple::new(py, &["default".to_object(py), "default".to_object(py)]); let mem_ap_id; @@ -574,7 +557,7 @@ impl MemAP { /// a BitCollection). /// Assumes that all posturing has been completed - that is, the bits' data, overlay /// status, etc. is current. - #[args(write_opts = "**")] + #[pyo3(signature=(bits, **write_opts))] fn write_register(&self, bits: &PyAny, write_opts: Option<&PyDict>) -> PyResult<()> { let dut = origen::dut(); let services = origen::services(); @@ -589,7 +572,7 @@ impl MemAP { Ok(()) } - #[args(verify_opts = "**")] + #[pyo3(signature=(bits, **verify_opts))] fn verify_register(&self, bits: &PyAny, verify_opts: Option<&PyDict>) -> PyResult<()> { let dut = origen::dut(); let services = origen::services(); @@ -604,7 +587,7 @@ impl MemAP { Ok(()) } - #[args(capture_opts = "**")] + #[pyo3(signature=(bits, **capture_opts))] fn capture_register(&self, bits: &PyAny, capture_opts: Option<&PyDict>) -> PyResult<()> { let dut = origen::dut(); let services = origen::services(); diff --git a/rust/pyapi/src/standard_sub_blocks/mod.rs b/rust/pyapi/src/standard_sub_blocks/mod.rs index a34dacea..c153c487 100644 --- a/rust/pyapi/src/standard_sub_blocks/mod.rs +++ b/rust/pyapi/src/standard_sub_blocks/mod.rs @@ -1,14 +1,10 @@ mod arm_debug; use pyo3::prelude::*; -use pyo3::wrap_pymodule; - -use crate::standard_sub_blocks::arm_debug::__PYO3_PYMODULE_DEF_ARM_DEBUG; - -#[pymodule] -/// Implements the module _origen.standard_sub_blocks in Python -pub fn standard_sub_blocks(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_wrapped(wrap_pymodule!(arm_debug))?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "standard_sub_blocks")?; + arm_debug::define(py, subm)?; + m.add_submodule(subm)?; Ok(()) } diff --git a/rust/pyapi/src/tester.rs b/rust/pyapi/src/tester.rs index e7afbd3b..0ad6b680 100644 --- a/rust/pyapi/src/tester.rs +++ b/rust/pyapi/src/tester.rs @@ -9,9 +9,13 @@ use pyo3::prelude::*; use pyo3::types::{PyAny, PyDict, PyTuple}; use std::collections::HashMap; -#[pymodule] -pub fn tester(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "tester")?; + subm.add_class::()?; + pyapi_metal::alias_method_apply_to_set!(subm, "PyTester", "timeset"); + pyapi_metal::alias_method_apply_to_set!(subm, "PyTester", "pin_header"); + + m.add_submodule(subm)?; Ok(()) } @@ -138,11 +142,9 @@ impl PyTester { /// * :meth:`set_timeset` /// * :class:`_origen.dut.timesets.Timeset` /// * :ref:`Timing ` - fn get_timeset(&self) -> PyResult { + fn get_timeset(&self, py: Python) -> PyResult { let tester = origen::tester(); let dut = origen::dut(); - let gil = Python::acquire_gil(); - let py = gil.python(); if let Some(t) = tester.get_timeset(&dut) { Ok(Py::new( py, @@ -160,7 +162,7 @@ impl PyTester { #[setter] // Note - do not add doc strings here. Add to get_timeset above. - fn timeset(&self, timeset: &PyAny) -> PyResult<()> { + fn timeset(&self, py: Python, timeset: &PyAny) -> PyResult<()> { let (model_id, timeset_name); // If the timeset is a string, assume its a timeset name on the DUT. @@ -175,11 +177,9 @@ impl PyTester { let mut tester = origen::TESTER.lock().unwrap(); tester.clear_timeset()?; } - self.issue_callbacks("clear_timeset")?; + self.issue_callbacks(py, "clear_timeset")?; return Ok(()); } else if timeset.get_type().name()?.to_string() == "Timeset" { - let gil = Python::acquire_gil(); - let py = gil.python(); let obj = timeset.to_object(py); model_id = obj .getattr(py, "__origen__model_id__")? @@ -196,7 +196,7 @@ impl PyTester { let dut = origen::DUT.lock().unwrap(); tester.set_timeset(&dut, model_id, ×et_name)?; } - self.issue_callbacks("set_timeset")?; + self.issue_callbacks(py, "set_timeset")?; } Ok(()) } @@ -216,17 +216,15 @@ impl PyTester { /// * :meth:`timeset` /// * :class:`_origen.dut.timesets.Timeset` /// * :ref:`Timing ` - fn set_timeset(&self, timeset: &PyAny) -> PyResult { - self.timeset(timeset)?; - self.get_timeset() + fn apply_timeset(&self, py: Python, timeset: &PyAny) -> PyResult { + self.timeset(py, timeset)?; + self.get_timeset(py) } #[getter] - fn get_pin_header(&self) -> PyResult { + fn get_pin_header(&self, py: Python) -> PyResult { let tester = origen::tester(); let dut = origen::dut(); - let gil = Python::acquire_gil(); - let py = gil.python(); if let Some(header) = tester.get_pin_header(&dut) { Ok(Py::new( @@ -244,7 +242,7 @@ impl PyTester { } #[setter] - fn pin_header(&self, pin_header: &PyAny) -> PyResult<()> { + fn pin_header(&self, py: Python, pin_header: &PyAny) -> PyResult<()> { let (model_id, pin_header_name); if pin_header.get_type().name()?.to_string() == "NoneType" { @@ -252,11 +250,9 @@ impl PyTester { let mut tester = origen::TESTER.lock().unwrap(); tester.clear_pin_header()?; } - self.issue_callbacks("clear_pin_header")?; + self.issue_callbacks(py, "clear_pin_header")?; return Ok(()); } else if pin_header.get_type().name()?.to_string() == "PinHeader" { - let gil = Python::acquire_gil(); - let py = gil.python(); let obj = pin_header.to_object(py); model_id = obj .getattr(py, "__origen__model_id__")? @@ -272,14 +268,14 @@ impl PyTester { let dut = origen::DUT.lock().unwrap(); tester.set_pin_header(&dut, model_id, &pin_header_name)?; } - self.issue_callbacks("set_pin_header")?; + self.issue_callbacks(py, "set_pin_header")?; } Ok(()) } - fn set_pin_header(&self, pin_header: &PyAny) -> PyResult { - self.pin_header(pin_header)?; - self.get_pin_header() + fn apply_pin_header(&self, py: Python, pin_header: &PyAny) -> PyResult { + self.pin_header(py, pin_header)?; + self.get_pin_header(py) } /// cc(comment: str) -> self @@ -295,12 +291,12 @@ impl PyTester { /// -------- /// * {{ link_to('prog-gen:comments', 'Commenting pattern source') }} /// * {{ link_to('pat-gen:comments', 'Commenting program source') }} - fn cc(slf: PyRef, comment: &str) -> PyResult> { + fn cc(slf: PyRef, py: Python, comment: &str) -> PyResult> { { let mut tester = origen::tester(); tester.cc(&comment)?; } - slf.issue_callbacks("cc")?; + slf.issue_callbacks(py, "cc")?; Ok(slf.into()) } @@ -324,7 +320,7 @@ impl PyTester { Ok(tester.end_pattern()?) } - fn issue_callbacks(&self, func: &str) -> PyResult<()> { + fn issue_callbacks(&self, py: Python, func: &str) -> PyResult<()> { // Get the current targeted testers let targets; { @@ -341,8 +337,6 @@ impl PyTester { Some(inst) => { // The tester here is a PyObject - a handle on the class itself. // Instantiate it and call its render method with the AST. - let gil = Python::acquire_gil(); - let py = gil.python(); let last_node = TEST.get(0).unwrap().to_pickle(); let args = PyTuple::new(py, &[func.to_object(py), last_node.to_object(py)]); @@ -370,8 +364,8 @@ impl PyTester { } /// cycle(**kwargs) -> self - #[args(kwargs = "**")] - fn cycle(slf: PyRef, kwargs: Option<&PyDict>) -> PyResult> { + #[pyo3(signature=(**kwargs))] + fn cycle(slf: PyRef, py: Python, kwargs: Option<&PyDict>) -> PyResult> { { let mut tester = origen::tester(); let mut repeat = None; @@ -382,28 +376,27 @@ impl PyTester { } tester.cycle(repeat)?; } - slf.issue_callbacks("cycle")?; + slf.issue_callbacks(py, "cycle")?; Ok(slf.into()) } - fn repeat(slf: PyRef, count: usize) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn repeat(slf: PyRef, py: Python, count: usize) -> PyResult> { let kwargs = PyDict::new(py); kwargs.set_item("repeat", count)?; - Self::cycle(slf, Some(&kwargs)) + Self::cycle(slf, py, Some(&kwargs)) } - #[args( - label = "None", - symbol = "None", - cycles = "None", - mask = "None", - pins = "None" - )] + #[pyo3(signature=( + label = None, + symbol = None, + pins = None, + cycles = None, + mask = None, + ))] fn overlay( slf: PyRef, + py: Python, label: Option, symbol: Option, pins: Option>, @@ -424,13 +417,14 @@ impl PyTester { let tester = origen::tester(); tester.overlay(&origen::Overlay::new(label, symbol, cycles, mask, pin_ids)?)?; } - slf.issue_callbacks("overlay")?; + slf.issue_callbacks(py, "overlay")?; Ok(slf.into()) } - #[args(symbol = "None", cycles = "None", mask = "None", pins = "None")] + #[pyo3(signature=(symbol=None, cycles=None, mask=None, pins=None))] fn capture( slf: PyRef, + py: Python, symbol: Option, cycles: Option, mask: Option, @@ -450,14 +444,12 @@ impl PyTester { let tester = origen::tester(); tester.capture(&origen::Capture::new(symbol, cycles, mask, pin_ids)?)?; } - slf.issue_callbacks("capture")?; + slf.issue_callbacks(py, "capture")?; Ok(slf.into()) } - fn register_tester(&mut self, g: &PyAny) -> PyResult<()> { + fn register_tester(&mut self, py: Python, g: &PyAny) -> PyResult<()> { let mut tester = origen::tester(); - let gil = Python::acquire_gil(); - let py = gil.python(); let obj = g.to_object(py); let mut n = obj.getattr(py, "__module__")?.extract::(py)?; @@ -471,8 +463,8 @@ impl PyTester { Ok(()) } - #[args(testers = "*")] - fn target(&mut self, testers: &PyTuple) -> PyResult> { + #[pyo3(signature=(*testers))] + fn target(&mut self, py: Python, testers: &PyTuple) -> PyResult> { if testers.len() > 0 { let mut tester = origen::tester(); for g in testers.iter() { @@ -480,9 +472,6 @@ impl PyTester { if let Ok(name) = g.extract::() { tester.target(SupportedTester::new(&name)?)?; } else { - let gil = Python::acquire_gil(); - let py = gil.python(); - let obj = g.to_object(py); let mut n = obj.getattr(py, "__module__")?.extract::(py)?; n.push_str(&format!( @@ -517,8 +506,8 @@ impl PyTester { /// in case they are useful in future. /// Continue on fail means that any errors will be logged but Origen will continue, if false /// it will blow up and immediately return an error to Python. - #[args(continue_on_fail = false)] - fn render_pattern(&self, continue_on_fail: bool) -> PyResult> { + #[pyo3(signature=(continue_on_fail=false))] + fn render_pattern(&self, py: Python, continue_on_fail: bool) -> PyResult> { if origen::LOGGER.has_keyword("show_unprocessed_ast") { origen::LOGGER.info("Showing Unprocessed AST"); origen::LOGGER.info(&format!("{:?}", origen::TEST)); @@ -537,8 +526,6 @@ impl PyTester { Some(inst) => { // The tester here is a PyObject - a handle on the class itself. // Instantiate it and call its render method with the AST. - let gil = Python::acquire_gil(); - let py = gil.python(); let _pat = inst.call_method0(py, "render_pattern")?; // TODO - How do we convert this to a path to do the diffing? } diff --git a/rust/pyapi/src/tester_apis/igxl/prog_gen_api.rs b/rust/pyapi/src/tester_apis/igxl/prog_gen_api.rs index 87526eae..9294182e 100644 --- a/rust/pyapi/src/tester_apis/igxl/prog_gen_api.rs +++ b/rust/pyapi/src/tester_apis/igxl/prog_gen_api.rs @@ -17,7 +17,7 @@ pub struct Patset { #[pymethods] impl IGXL { - #[args(library = "None", kwargs = "**")] + #[pyo3(signature=(name, template, library=None, **kwargs))] fn new_test_instance( &mut self, name: String, @@ -43,13 +43,13 @@ impl IGXL { Ok(t) } - #[args(kwargs = "**")] + #[pyo3(signature=(**kwargs))] pub fn new_flow_line(&mut self, kwargs: Option<&PyDict>) -> PyResult { let t = TestInvocation::new("_".to_owned(), self.tester.to_owned(), kwargs)?; Ok(t) } - #[args(pattern = "None", patterns = "None")] + #[pyo3(signature=(name, pattern=None, patterns=None))] fn new_patset( &mut self, name: String, @@ -71,7 +71,7 @@ impl IGXL { } // Set the cpu wait flags for the given test instance - #[args(flags = "*")] + #[pyo3(signature=(test_instance, *flags))] fn set_wait_flags(&mut self, test_instance: &Test, flags: &PyTuple) -> PyResult<()> { let mut clean_flags: Vec = vec![]; for fl in flags { diff --git a/rust/pyapi/src/tester_apis/mod.rs b/rust/pyapi/src/tester_apis/mod.rs index 01bc4df3..fb8494bc 100644 --- a/rust/pyapi/src/tester_apis/mod.rs +++ b/rust/pyapi/src/tester_apis/mod.rs @@ -7,9 +7,10 @@ pub use v93k::V93K; use pyo3::prelude::*; -#[pymodule] -pub fn tester_apis(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; - m.add_class::()?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "tester_apis")?; + subm.add_class::()?; + subm.add_class::()?; + m.add_submodule(subm)?; Ok(()) } diff --git a/rust/pyapi/src/tester_apis/v93k/prog_gen_api.rs b/rust/pyapi/src/tester_apis/v93k/prog_gen_api.rs index dca09fda..bd1894d8 100644 --- a/rust/pyapi/src/tester_apis/v93k/prog_gen_api.rs +++ b/rust/pyapi/src/tester_apis/v93k/prog_gen_api.rs @@ -6,7 +6,7 @@ use pyo3::types::PyDict; #[pymethods] impl V93K { - #[args(kwargs = "**")] + #[pyo3(signature=(name, library, **kwargs))] fn new_test_method( &mut self, name: String, @@ -17,7 +17,7 @@ impl V93K { Ok(t) } - #[args(kwargs = "**")] + #[pyo3(signature=(name, **kwargs))] fn new_test_suite( &mut self, name: String, diff --git a/rust/pyapi/src/timesets.rs b/rust/pyapi/src/timesets.rs index 652b242c..340e61a4 100644 --- a/rust/pyapi/src/timesets.rs +++ b/rust/pyapi/src/timesets.rs @@ -24,27 +24,29 @@ use timeset_container::{ EventContainer, TimesetContainer, WaveContainer, WaveGroupContainer, WavetableContainer, }; -#[pymodule] -pub fn timesets(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "timesets")?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + m.add_submodule(subm)?; Ok(()) } #[pymethods] impl PyDUT { - #[args(kwargs = "**")] + #[pyo3(signature=(model_id, name, period, **kwargs))] fn add_timeset( &self, + py: Python, model_id: usize, name: &str, period: &PyAny, @@ -88,23 +90,17 @@ impl PyDUT { }, )?; - let gil = Python::acquire_gil(); - let py = gil.python(); let model = dut.get_mut_model(model_id)?; Ok(pytimeset!(py, model, model_id, name)?) } - fn timeset(&self, model_id: usize, name: &str) -> PyResult { + fn timeset(&self, py: Python, model_id: usize, name: &str) -> PyResult { let mut dut = DUT.lock().unwrap(); let model = dut.get_mut_model(model_id)?; - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(pytimeset_or_pynone!(py, model, model_id, name)) } - fn timesets(&self, model_id: usize) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn timesets(&self, py: Python, model_id: usize) -> PyResult> { Ok(pytimeset_container!(py, model_id)) } } diff --git a/rust/pyapi/src/timesets/timeset.rs b/rust/pyapi/src/timesets/timeset.rs index 7d9b6eba..1525467e 100644 --- a/rust/pyapi/src/timesets/timeset.rs +++ b/rust/pyapi/src/timesets/timeset.rs @@ -188,12 +188,10 @@ impl Timeset { } #[getter] - fn get_default_period(&self) -> PyResult { + fn get_default_period(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); let timeset = dut._get_timeset(self.model_id, &self.name)?; - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(match timeset.default_period { Some(p) => p.to_object(py), None => py.None(), @@ -210,11 +208,9 @@ impl Timeset { #[allow(non_snake_case)] #[getter] - fn get___period__(&self) -> PyResult { + fn get___period__(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); let timeset = dut._get_timeset(self.model_id, &self.name)?; - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(match ×et.period_as_string { Some(p) => p.clone().to_object(py), None => py.None(), @@ -222,18 +218,16 @@ impl Timeset { } #[getter] - fn wavetables(&self) -> PyResult> { + fn wavetables(&self, py: Python) -> PyResult> { let t_id; { t_id = self.get_origen_id()?; } - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(pywavetable_container!(py, self.model_id, t_id, &self.name)) } - #[args(_kwargs = "**")] - fn add_wavetable(&self, name: &str, _kwargs: Option<&PyDict>) -> PyResult { + #[pyo3(signature=(name, **_kwargs))] + fn add_wavetable(&self, py: Python, name: &str, _kwargs: Option<&PyDict>) -> PyResult { let mut dut = DUT.lock().unwrap(); let t_id; { @@ -241,14 +235,12 @@ impl Timeset { } dut.create_wavetable(t_id, name)?; - let gil = Python::acquire_gil(); - let py = gil.python(); let tset = dut._get_timeset(self.model_id, &self.name).unwrap(); Ok(pywavetable!(py, tset, t_id, name)?) } #[getter] - fn symbol_map(&self) -> PyResult { + fn symbol_map(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); let t_id; { @@ -256,8 +248,6 @@ impl Timeset { } let tester = origen::tester(); - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(Py::new( py, crate::timesets::timeset::SymbolMap { @@ -275,7 +265,7 @@ impl Timeset { } #[getter] - fn symbol_maps(&self) -> PyResult> { + fn symbol_maps(&self, py: Python) -> PyResult> { let dut = DUT.lock().unwrap(); let t = dut._get_timeset(self.model_id, &self.name).unwrap(); let t_id; @@ -283,8 +273,6 @@ impl Timeset { t_id = t.id; } - let gil = Python::acquire_gil(); - let py = gil.python(); let retn = t .pin_action_resolvers .keys() @@ -330,8 +318,8 @@ pub struct Wavetable { #[pymethods] impl Wavetable { - #[args(_kwargs = "**")] - fn add_waves(&self, name: &str, _kwargs: Option<&PyDict>) -> PyResult { + #[pyo3(signature=(name, **_kwargs))] + fn add_waves(&self, py: Python, name: &str, _kwargs: Option<&PyDict>) -> PyResult { let mut dut = DUT.lock().unwrap(); let w_id; { @@ -339,25 +327,21 @@ impl Wavetable { } dut.create_wave_group(w_id, name, Option::None)?; - let gil = Python::acquire_gil(); - let py = gil.python(); let wt = dut.get_wavetable(self.timeset_id, &self.name).unwrap(); Ok(pywave_group!(py, wt, name)?) } - #[args(_kwargs = "**")] - fn add_wave(&self, name: &str, _kwargs: Option<&PyDict>) -> PyResult { - self.add_waves(name, _kwargs) + #[pyo3(signature=(name, **_kwargs))] + fn add_wave(&self, py: Python, name: &str, _kwargs: Option<&PyDict>) -> PyResult { + self.add_waves(py, name, _kwargs) } #[getter] - fn get_waves(&self) -> PyResult> { + fn get_waves(&self, py: Python) -> PyResult> { let w_id; { w_id = self.get_origen_id()?; } - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(pywave_group_container!( py, self.model_id, @@ -391,24 +375,20 @@ impl Wavetable { /// } /// } /// - fn applied_waves(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn applied_waves(&self, py: Python) -> PyResult { let empty: [PyObject; 0] = []; let t = PyTuple::new(py, &empty); - self.applied_waves_for(t, None) + self.applied_waves_for(py, t, None) } /// Same as :meth:`applied_waves` but supports internal filtering of the return values. - #[args(pins = "*")] + #[pyo3(signature=(*pins, indicators))] fn applied_waves_for( &self, + py: Python, pins: &PyTuple, indicators: Option>, ) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); - let dut = DUT.lock().unwrap(); let wt = dut._get_wavetable(self.timeset_id, &self.name)?; let waves = wt.applied_waves( @@ -420,9 +400,7 @@ impl Wavetable { } #[getter] - fn get_symbol_map(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn get_symbol_map(&self, py: Python) -> PyResult { let tester = origen::tester(); match tester.focused_tester_name() { Some(name) => Ok(Py::new(py, SymbolMap::new(self.timeset_id, name)) @@ -442,13 +420,11 @@ impl Wavetable { // Evaluates and returns the period. // Returns None if no period was specified or an error if it could not be evaluated. #[getter] - pub fn get_period(&self) -> PyResult { + pub fn get_period(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); let wt = dut.get_wavetable(self.timeset_id, &self.name); let p = wt.unwrap().eval(Option::None)?; - let gil = Python::acquire_gil(); - let py = gil.python(); match p { Some(_p) => Ok(_p.to_object(py)), None => Ok(py.None()), @@ -476,13 +452,11 @@ impl Wavetable { // Returns the period as a string before evaluation. #[allow(non_snake_case)] #[getter] - pub fn get___period__(&self) -> PyResult { + pub fn get___period__(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); let wt = dut.get_wavetable(self.timeset_id, &self.name); let p = &wt.unwrap().period; - let gil = Python::acquire_gil(); - let py = gil.python(); match p { Some(_p) => Ok(_p.to_object(py)), None => Ok(py.None()), @@ -517,8 +491,8 @@ pub struct WaveGroup { #[pymethods] impl WaveGroup { - #[args(_kwargs = "**")] - fn add_wave(&self, name: &str, _kwargs: Option<&PyDict>) -> PyResult { + #[pyo3(signature=(name, **_kwargs))] + fn add_wave(&self, py: Python, name: &str, _kwargs: Option<&PyDict>) -> PyResult { let mut dut = DUT.lock().unwrap(); let wgrp_id; { @@ -541,20 +515,16 @@ impl WaveGroup { } dut.create_wave(wgrp_id, name, derived_from)?; - let gil = Python::acquire_gil(); - let py = gil.python(); let wgrp = dut.get_wave_group(self.wavetable_id, &self.name).unwrap(); Ok(pywave!(py, wgrp, name)?) } #[getter] - fn get_waves(&self) -> PyResult> { + fn get_waves(&self, py: Python) -> PyResult> { let wgrp_id; { wgrp_id = self.get_origen_id()?; } - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(pywave_container!( py, self.model_id, @@ -603,9 +573,7 @@ pub struct Wave { #[pymethods] impl Wave { #[getter] - fn get_events(&self) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn get_events(&self, py: Python) -> PyResult> { let wave_id; { wave_id = self.get_origen_id()?; @@ -621,8 +589,8 @@ impl Wave { )) } - #[args(event = "**")] - fn push_event(&self, event: Option<&PyDict>) -> PyResult { + #[pyo3(signature=(**event))] + fn push_event(&self, py: Python, event: Option<&PyDict>) -> PyResult { let mut dut = DUT.lock().unwrap(); let (w_id, e_index); { @@ -697,9 +665,6 @@ impl Wave { } // Return the newly created event - let gil = Python::acquire_gil(); - let py = gil.python(); - let w = dut.get_wave(self.wave_group_id, &self.name).unwrap(); Ok(pyevent!(py, w, e_index)?) } @@ -720,11 +685,9 @@ impl Wave { } #[getter] - fn get_applied_to(&self) -> PyResult> { + fn get_applied_to(&self, py: Python) -> PyResult> { let dut = DUT.lock().unwrap(); let w = dut.get_wave(self.wave_group_id, &self.name).unwrap(); - let gil = Python::acquire_gil(); - let py = gil.python(); let mut pins: Vec = vec![]; for p in w.applied_pin_ids.iter() { @@ -740,8 +703,8 @@ impl Wave { Ok(pins) } - #[args(pins = "*")] - fn apply_to(&self, pins: Vec) -> PyResult { + #[pyo3(signature=(*pins))] + fn apply_to(&self, py: Python, pins: Vec) -> PyResult { let mut dut = DUT.lock().unwrap(); let wid; { @@ -754,8 +717,6 @@ impl Wave { pins.iter().map(|pin| (0, pin.clone())).collect(); dut.apply_wave_id_to_pins(wid, &pins_with_model_id)?; - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(Py::new( py, crate::timesets::timeset::Wave { @@ -873,12 +834,10 @@ impl Event { } #[getter] - pub fn unit(&self) -> PyResult { + pub fn unit(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); let e = dut.get_event(self.wave_id, self.index).unwrap(); - let gil = Python::acquire_gil(); - let py = gil.python(); match &e.unit { Some(unit) => Ok(unit.clone().to_object(py)), None => Ok(py.None()), @@ -886,12 +845,9 @@ impl Event { } #[getter] - pub fn at(&self) -> PyResult { + pub fn at(&self, py: Python) -> PyResult { let dut = DUT.lock().unwrap(); let e = dut.get_event(self.wave_id, self.index).unwrap(); - - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(e.eval(&dut, Option::None)?.to_object(py)) } @@ -1004,9 +960,7 @@ impl SymbolMap { .collect::>()) } - fn get(&self, action: &PyAny) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn get(&self, py: Python, action: &PyAny) -> PyResult { match self.__getitem__(action) { Ok(a) => Ok(a.into_py(py)), Err(_) => Ok(py.None()), @@ -1037,7 +991,7 @@ impl SymbolMap { } } - fn for_target(&self, target: String) -> PyResult { + fn for_target(&self, py: Python, target: String) -> PyResult { let dut = DUT.lock().unwrap(); { let t = &dut.timesets[self.timeset_id]; @@ -1050,8 +1004,6 @@ impl SymbolMap { } } - let gil = Python::acquire_gil(); - let py = gil.python(); Ok(Py::new( py, crate::timesets::timeset::SymbolMap { diff --git a/rust/pyapi/src/utility/caller.rs b/rust/pyapi/src/utility/caller.rs index cde24b1d..85a04b94 100644 --- a/rust/pyapi/src/utility/caller.rs +++ b/rust/pyapi/src/utility/caller.rs @@ -1,3 +1,4 @@ +// TODO any of this used/needed? //! Provides helper functions to get the caller information from Python #![allow(dead_code)] @@ -114,33 +115,33 @@ pub fn stack() -> Option> { } fn _get_stack(max_depth: Option, filter: Filter) -> Result, PyErr> { - let gil = Python::acquire_gil(); - let py = gil.python(); - let inspect = PyModule::import(py, "inspect")?; - let stack: Vec> = inspect.getattr("stack")?.call0()?.extract()?; - let mut frames: Vec = vec![]; - for f in stack { - let filename: String = f[1].extract()?; - let include = match filter { - Filter::None => true, - Filter::StartsWith(s) => filename.starts_with(s), - Filter::Contains(s) => filename.contains(s), - }; - if include { - frames.push(FrameInfo { - filename: filename, - lineno: f[2].extract()?, - function: f[3].extract()?, - code_context: f[4].extract()?, - index: f[5].extract()?, - }); + Python::with_gil(|py| { + let inspect = PyModule::import(py, "inspect")?; + let stack: Vec> = inspect.getattr("stack")?.call0()?.extract()?; + let mut frames: Vec = vec![]; + for f in stack { + let filename: String = f[1].extract()?; + let include = match filter { + Filter::None => true, + Filter::StartsWith(s) => filename.starts_with(s), + Filter::Contains(s) => filename.contains(s), + }; + if include { + frames.push(FrameInfo { + filename: filename, + lineno: f[2].extract()?, + function: f[3].extract()?, + code_context: f[4].extract()?, + index: f[5].extract()?, + }); - if let Some(x) = max_depth { - if x == frames.len() { - break; + if let Some(x) = max_depth { + if x == frames.len() { + break; + } } } } - } - Ok(frames) + Ok(frames) + }) } diff --git a/rust/pyapi/src/utility/ldaps.rs b/rust/pyapi/src/utility/ldaps.rs index 403d4ad6..f9c9e42f 100644 --- a/rust/pyapi/src/utility/ldaps.rs +++ b/rust/pyapi/src/utility/ldaps.rs @@ -4,7 +4,7 @@ use pyapi_metal::utils::ldap::import_frontend_ldap; use pyo3::prelude::*; use pyo3::wrap_pyfunction; -pub fn define(m: &PyModule) -> PyResult<()> { +pub fn define(_py: Python, m: &PyModule) -> PyResult<()> { m.add_wrapped(wrap_pyfunction!(ldaps))?; m.add_wrapped(wrap_pyfunction!(boot_ldaps))?; Ok(()) diff --git a/rust/pyapi/src/utility/linter/mod.rs b/rust/pyapi/src/utility/linter/mod.rs index 18f75a8c..2924302f 100644 --- a/rust/pyapi/src/utility/linter/mod.rs +++ b/rust/pyapi/src/utility/linter/mod.rs @@ -2,7 +2,8 @@ pub mod _frontend; use pyo3::prelude::*; -#[pymodule] -pub fn linter(_py: Python, _m: &PyModule) -> PyResult<()> { +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "linter")?; + m.add_submodule(subm)?; Ok(()) } diff --git a/rust/pyapi/src/utility/location.rs b/rust/pyapi/src/utility/location.rs index 9f0ccdeb..16e804c7 100644 --- a/rust/pyapi/src/utility/location.rs +++ b/rust/pyapi/src/utility/location.rs @@ -26,9 +26,7 @@ impl Location { /// str: URL as a ``str``, if the Location points to a URL /// None: Otherwise #[getter] - fn url(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn url(&self, py: Python) -> PyResult { Ok(match self.location.url() { Some(url) => url.to_object(py), None => py.None(), @@ -45,9 +43,7 @@ impl Location { /// str: Repo URL as a ``str``, if the Location points to a Git repo /// None: Otherwise #[getter] - fn git(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn git(&self, py: Python) -> PyResult { Ok(match self.location.git() { Some(git) => git.to_object(py), None => py.None(), @@ -60,9 +56,7 @@ impl Location { /// str: Repo URL as a ``str``, if the Location points to a Git repo via HTTPS /// None: Otherwise #[getter] - fn git_https(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn git_https(&self, py: Python) -> PyResult { Ok(match self.location.git_https() { Some(git) => git.to_object(py), None => py.None(), @@ -75,9 +69,7 @@ impl Location { /// str: Repo URL as a ``str``, if the Location points to a Git repo via SSH /// None: Otherwise #[getter] - fn git_ssh(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn git_ssh(&self, py: Python) -> PyResult { Ok(match self.location.git_ssh() { Some(git) => git.to_object(py), None => py.None(), @@ -90,9 +82,7 @@ impl Location { /// pathlib.Path: Repo URL as a |pathlib.Path| object, if the Location points to a local path. /// None: Otherwise #[getter] - fn path(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn path(&self, py: Python) -> PyResult { Ok(match self.location.path() { Some(_path) => pypath!(py, self.location.location), None => py.None(), diff --git a/rust/pyapi/src/utility/mod.rs b/rust/pyapi/src/utility/mod.rs index e8668ba2..3c848f57 100644 --- a/rust/pyapi/src/utility/mod.rs +++ b/rust/pyapi/src/utility/mod.rs @@ -16,7 +16,7 @@ pub mod website; use location::Location; use pyo3::prelude::*; -use pyo3::{wrap_pyfunction, wrap_pymodule}; +use pyo3::wrap_pyfunction; use transaction::Transaction; use version::Version; @@ -28,33 +28,25 @@ use std::collections::HashMap; use std::path::PathBuf; use pyapi_metal::PyOutcome; -use crate::utility::revision_control::__PYO3_PYMODULE_DEF_REVISION_CONTROL; -use crate::utility::unit_testers::__PYO3_PYMODULE_DEF_UNIT_TESTERS; -use crate::utility::publisher::__PYO3_PYMODULE_DEF_PUBLISHER; -use crate::utility::linter::__PYO3_PYMODULE_DEF_LINTER; -use crate::utility::release_scribe::__PYO3_PYMODULE_DEF_RELEASE_SCRIBE; -use crate::utility::results::__PYO3_PYMODULE_DEF_RESULTS; -use crate::utility::website::__PYO3_PYMODULE_DEF_WEBSITE; -use crate::utility::sessions::__PYO3_PYMODULE_DEF_SESSIONS; - -#[pymodule] -pub fn utility(py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_wrapped(wrap_pyfunction!(reverse_bits))?; - m.add_wrapped(wrap_pymodule!(sessions))?; - m.add_wrapped(wrap_pymodule!(revision_control))?; - m.add_wrapped(wrap_pymodule!(unit_testers))?; - m.add_wrapped(wrap_pymodule!(publisher))?; - m.add_wrapped(wrap_pymodule!(linter))?; - m.add_wrapped(wrap_pymodule!(release_scribe))?; - m.add_wrapped(wrap_pymodule!(results))?; - m.add_wrapped(wrap_pymodule!(website))?; - m.add_wrapped(wrap_pyfunction!(exec))?; - m.add_wrapped(wrap_pyfunction!(dispatch_workflow))?; - ldaps::define(m)?; - mailer::define(py, m)?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "utility")?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_wrapped(wrap_pyfunction!(reverse_bits))?; + subm.add_wrapped(wrap_pyfunction!(exec))?; + subm.add_wrapped(wrap_pyfunction!(dispatch_workflow))?; + sessions::define(py, subm)?; + revision_control::define(py, subm)?; + unit_testers::define(py, subm)?; + publisher::define(py, subm)?; + linter::define(py, subm)?; + release_scribe::define(py, subm)?; + results::define(py, subm)?; + website::define(py, subm)?; + ldaps::define(py, subm)?; + mailer::define(py, subm)?; + m.add_submodule(subm)?; Ok(()) } @@ -63,14 +55,8 @@ pub fn reverse_bits(_py: Python, num: BigUint, width: Option) -> PyResult, @@ -114,7 +100,7 @@ fn new_obj(py: Python, class: &str, kwargs: &PyDict) -> PyResult { locals.set_item("kwargs", kwargs)?; let mut class_mod = ""; if let Some(m) = split.get(1) { - locals.set_item("mod", py.import(m)?.to_object(py))?; + locals.set_item("mod", py.import(*m)?.to_object(py))?; class_mod = "mod." } @@ -132,9 +118,6 @@ fn app_utility( default: Option<&str>, use_by_default: bool, ) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); - let system: &str; let conf_t: HashMap; let conf_; @@ -175,8 +158,10 @@ fn app_utility( let split = system.rsplitn(2, "."); if split.count() == 2 { // Have a class (hopefully) of the form 'a.b.Class' - let py_conf = pyapi_metal::_helpers::map_to_pydict(py, &mut conf_.iter())?; - Ok(Some(new_obj(py, system, py_conf.as_ref(py))?)) + Python::with_gil(|py| { + let py_conf = pyapi_metal::_helpers::map_to_pydict(py, &mut conf_.iter())?; + Ok(Some(new_obj(py, system, py_conf.as_ref(py))?)) + }) } else { // fall back to some enumerated systems if &system.to_lowercase() == "none" { @@ -188,7 +173,8 @@ fn app_utility( } } -#[pyfunction(inputs = "None")] +#[pyfunction] +#[pyo3(signature=(owner, repo, workflow, git_ref, inputs=None))] pub fn dispatch_workflow( owner: &str, repo: &str, diff --git a/rust/pyapi/src/utility/publisher/_frontend.rs b/rust/pyapi/src/utility/publisher/_frontend.rs index b43e439e..d86f040b 100644 --- a/rust/pyapi/src/utility/publisher/_frontend.rs +++ b/rust/pyapi/src/utility/publisher/_frontend.rs @@ -9,13 +9,13 @@ pub struct Publisher {} impl ofrontend::Publisher for Publisher { fn build_package(&self) -> Result { - let gil = Python::acquire_gil(); - let py = gil.python(); - let pyapp = get_pyapp(py)?; - let pb = PyApplication::_get_publisher(pyapp, py)?; - let py_pbr = pb.call_method0(py, "build_package")?; - let pbr = py_pbr.extract::>(py)?; - Ok(pbr.build_result()?.clone()) + Python::with_gil(|py| { + let pyapp = get_pyapp(py)?; + let pb = PyApplication::_get_publisher(pyapp, py)?; + let py_pbr = pb.call_method0(py, "build_package")?; + let pbr = py_pbr.extract::>(py)?; + Ok(pbr.build_result()?.clone()) + }) } fn upload( @@ -23,22 +23,22 @@ impl ofrontend::Publisher for Publisher { build_result: &Outcome, dry_run: bool, ) -> Result { - let gil = Python::acquire_gil(); - let py = gil.python(); - let pyapp = get_pyapp(py)?; - let pb = PyApplication::_get_publisher(pyapp, py)?; - let py_pbr = pb.call_method1( - py, - "upload", - PyTuple::new( + Python::with_gil(|py| { + let pyapp = get_pyapp(py)?; + let pb = PyApplication::_get_publisher(pyapp, py)?; + let py_pbr = pb.call_method1( py, - &[ - BuildResult::to_py(py, build_result)?.to_object(py), - dry_run.to_object(py), - ], - ), - )?; - let pur = py_pbr.extract::>(py)?; - Ok(pur.upload_result()?.clone()) + "upload", + PyTuple::new( + py, + &[ + BuildResult::to_py(py, build_result)?.to_object(py), + dry_run.to_object(py), + ], + ), + )?; + let pur = py_pbr.extract::>(py)?; + Ok(pur.upload_result()?.clone()) + }) } } diff --git a/rust/pyapi/src/utility/publisher/mod.rs b/rust/pyapi/src/utility/publisher/mod.rs index eba29772..d10af762 100644 --- a/rust/pyapi/src/utility/publisher/mod.rs +++ b/rust/pyapi/src/utility/publisher/mod.rs @@ -6,9 +6,10 @@ use origen::STATUS; use pyo3::prelude::*; use pyo3::wrap_pyfunction; -#[pymodule] -pub fn publisher(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_wrapped(wrap_pyfunction!(app_publisher))?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "publisher")?; + subm.add_wrapped(wrap_pyfunction!(app_publisher))?; + m.add_submodule(subm)?; Ok(()) } diff --git a/rust/pyapi/src/utility/release_scribe/_frontend.rs b/rust/pyapi/src/utility/release_scribe/_frontend.rs index 1689710d..b1fb7c6e 100644 --- a/rust/pyapi/src/utility/release_scribe/_frontend.rs +++ b/rust/pyapi/src/utility/release_scribe/_frontend.rs @@ -80,10 +80,10 @@ impl ReleaseScribe { where F: FnMut(Python, PyObject) -> PyResult, { - let gil = Python::acquire_gil(); - let py = gil.python(); - let pyapp = get_pyapp(py)?; - let rs = PyApplication::_get_release_scribe(pyapp, py)?; - func(py, rs) + Python::with_gil(|py| { + let pyapp = get_pyapp(py)?; + let rs = PyApplication::_get_release_scribe(pyapp, py)?; + func(py, rs) + }) } } diff --git a/rust/pyapi/src/utility/release_scribe/mod.rs b/rust/pyapi/src/utility/release_scribe/mod.rs index 81ff932d..aaf10ee2 100644 --- a/rust/pyapi/src/utility/release_scribe/mod.rs +++ b/rust/pyapi/src/utility/release_scribe/mod.rs @@ -10,6 +10,14 @@ use pyo3::types::PyDict; use pyo3::wrap_pyfunction; use std::collections::HashMap; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "release_scribe")?; + subm.add_class::()?; + subm.add_wrapped(wrap_pyfunction!(app_release_scribe))?; + m.add_submodule(subm)?; + Ok(()) +} + #[pymodule] pub fn release_scribe(_py: Python, m: &PyModule) -> PyResult<()> { m.add_class::()?; @@ -45,7 +53,7 @@ pub struct ReleaseScribe { #[pymethods] impl ReleaseScribe { #[new] - #[args(config = "**")] + #[pyo3(signature=(**config))] fn new(config: Option<&PyDict>) -> PyResult { let mut c: HashMap = HashMap::new(); if let Some(cfg) = config { @@ -59,9 +67,7 @@ impl ReleaseScribe { } #[getter] - fn release_note_file(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn release_note_file(&self, py: Python) -> PyResult { Ok(crate::pypath!( py, format!("{}", self.rs.release_file.display()) @@ -81,16 +87,14 @@ impl ReleaseScribe { } #[getter] - fn history_tracking_file(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn history_tracking_file(&self, py: Python) -> PyResult { Ok(crate::pypath!( py, format!("{}", self.rs.history_toml.display()) )) } - #[args(release = "None", title = "None", dry_run = "false")] + #[pyo3(signature=(body, title=None, release=None, dry_run=false))] fn append_history( &mut self, body: String, diff --git a/rust/pyapi/src/utility/results.rs b/rust/pyapi/src/utility/results.rs index 4cb31d2f..a6836199 100644 --- a/rust/pyapi/src/utility/results.rs +++ b/rust/pyapi/src/utility/results.rs @@ -14,11 +14,12 @@ macro_rules! incomplete_result_error { }}; } -#[pymodule] -pub fn results(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "results")?; + subm.add_class::()?; + subm.add_class::()?; + subm.add_class::()?; + m.add_submodule(subm)?; Ok(()) } @@ -32,7 +33,7 @@ pub struct BuildResult { #[pymethods] impl BuildResult { #[classmethod] - #[args(build_contents = "None", message = "None", metadata = "None")] + #[pyo3(signature=(instance, succeeded, build_contents=None, message=None, metadata=None))] fn __init__( _cls: &PyType, instance: &PyAny, @@ -114,7 +115,7 @@ pub struct UploadResult { #[pymethods] impl UploadResult { #[classmethod] - #[args(message = "None", metadata = "None")] + #[pyo3(signature=(instance, succeeded, message=None, metadata=None))] fn __init__( _cls: &PyType, instance: &PyAny, @@ -156,7 +157,7 @@ pub struct ExecResult { #[pymethods] impl ExecResult { #[classmethod] - #[args(stdout = "None", stderr = "None")] + #[pyo3(signature=(instance, exit_code, stdout=None, stderr=None))] fn __init__( _cls: &PyType, instance: &PyAny, diff --git a/rust/pyapi/src/utility/revision_control/mod.rs b/rust/pyapi/src/utility/revision_control/mod.rs index 93a5e74f..680603b3 100644 --- a/rust/pyapi/src/utility/revision_control/mod.rs +++ b/rust/pyapi/src/utility/revision_control/mod.rs @@ -9,15 +9,16 @@ use origen_metal::utils::revision_control::SupportedSystems; use crate::runtime_error; -#[pymodule] -pub fn revision_control(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_wrapped(wrap_pyfunction!(app_rc))?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "revision_control")?; + subm.add_wrapped(wrap_pyfunction!(app_rc))?; + m.add_submodule(subm)?; Ok(()) } /// Creates a RC driver from the application's ``config.toml`` #[pyfunction] -fn app_rc() -> PyResult> { +fn app_rc(py: Python) -> PyResult> { // Raise an error if we aren't in an application instance let app; match &STATUS.app { @@ -46,8 +47,6 @@ fn app_rc() -> PyResult> { } // fall back to Rust's lookup parameters - let gil = Python::acquire_gil(); - let py = gil.python(); let locals = PyDict::new(py); let py_rc_config = PyDict::new(py); for (k, v) in rc_config.iter() { diff --git a/rust/pyapi/src/utility/sessions.rs b/rust/pyapi/src/utility/sessions.rs index b20b32ee..63e9ea66 100644 --- a/rust/pyapi/src/utility/sessions.rs +++ b/rust/pyapi/src/utility/sessions.rs @@ -6,9 +6,10 @@ use origen::{om, with_app_session, with_app_session_group}; use pyapi_metal::framework::sessions::{SessionGroup, SessionStore, Sessions}; use pyo3::prelude::*; -#[pymodule] -pub fn sessions(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "sessions")?; + subm.add_class::()?; + m.add_submodule(subm)?; Ok(()) } @@ -22,7 +23,7 @@ impl OrigenSessions { Ok((OrigenSessions {}, Sessions {})) } - #[args(session = "None")] + #[pyo3(signature=(session=None))] fn user_session(&self, session: Option<&PyAny>) -> PyResult { // Can accept: // None -> Top app's session @@ -52,7 +53,7 @@ impl OrigenSessions { })?) } - #[args(session = "None")] + #[pyo3(signature=(session=None))] fn app_session(&self, session: Option<&PyAny>) -> PyResult { let t; if let Some(s) = session { diff --git a/rust/pyapi/src/utility/transaction.rs b/rust/pyapi/src/utility/transaction.rs index f45ce581..e0c5ca7f 100644 --- a/rust/pyapi/src/utility/transaction.rs +++ b/rust/pyapi/src/utility/transaction.rs @@ -13,7 +13,7 @@ pub struct Transaction { #[pymethods] impl Transaction { #[new] - #[args(kwargs = "**")] + #[pyo3(signature=(bc_or_val, **kwargs))] fn new(bc_or_val: &PyAny, kwargs: Option<&PyDict>) -> PyResult { let dut = origen::dut(); Ok(Self { @@ -22,7 +22,7 @@ impl Transaction { } #[classmethod] - #[args(kwargs = "**")] + #[pyo3(signature=(bc_or_val, **kwargs))] fn new_write(_cls: &PyType, bc_or_val: &PyAny, kwargs: Option<&PyDict>) -> PyResult { let dut = origen::dut(); Ok(Self { @@ -36,7 +36,7 @@ impl Transaction { } #[classmethod] - #[args(kwargs = "**")] + #[pyo3(signature=(bc_or_val, **kwargs))] fn new_verify(_cls: &PyType, bc_or_val: &PyAny, kwargs: Option<&PyDict>) -> PyResult { let dut = origen::dut(); Ok(Self { @@ -63,10 +63,7 @@ impl Transaction { } #[getter] - fn address(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); - + fn address(&self, py: Python) -> PyResult { if let Some(a) = &self.transaction.address { Ok(a.to_object(py)) } else { @@ -75,8 +72,8 @@ impl Transaction { } #[getter] - fn addr(&self) -> PyResult { - self.address() + fn addr(&self, py: Python) -> PyResult { + self.address(py) } #[getter] @@ -85,10 +82,7 @@ impl Transaction { } #[getter] - fn address_width(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); - + fn address_width(&self, py: Python) -> PyResult { if let Some(a) = self.transaction.address_width { Ok(a.to_object(py)) } else { @@ -97,16 +91,13 @@ impl Transaction { } #[getter] - fn addr_width(&self) -> PyResult { - self.address_width() + fn addr_width(&self, py: Python) -> PyResult { + self.address_width(py) } #[getter] - fn register(&self) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn register(&self, py: Python) -> PyResult { let dut = origen::dut(); - if let Some(id) = self.transaction.reg_id { Ok(crate::registers::bit_collection::BitCollection::from_reg_id(id, &dut).into_py(py)) } else { @@ -115,7 +106,7 @@ impl Transaction { } #[getter] - fn reg(&self) -> PyResult { - self.register() + fn reg(&self, py: Python) -> PyResult { + self.register(py) } } diff --git a/rust/pyapi/src/utility/unit_testers/_frontend.rs b/rust/pyapi/src/utility/unit_testers/_frontend.rs index bf42536a..cab16dff 100644 --- a/rust/pyapi/src/utility/unit_testers/_frontend.rs +++ b/rust/pyapi/src/utility/unit_testers/_frontend.rs @@ -8,15 +8,15 @@ pub struct UnitTester {} impl origen::core::frontend::UnitTester for UnitTester { fn run(&self) -> Result { - let gil = Python::acquire_gil(); - let py = gil.python(); - let pyapp = get_pyapp(py)?; - let ut = PyApplication::_get_ut(pyapp, py)?; - let pystat = ut.call_method0(py, "run")?; - let stat = pystat.extract::>(py)?; - match stat.orr.as_ref() { - Some(rr) => Ok(rr.clone()), - None => runtime_error!("Incomplete or Uninitialized RunResult encountered")?, - } + Python::with_gil(|py| { + let pyapp = get_pyapp(py)?; + let ut = PyApplication::_get_ut(pyapp, py)?; + let pystat = ut.call_method0(py, "run")?; + let stat = pystat.extract::>(py)?; + match stat.orr.as_ref() { + Some(rr) => Ok(rr.clone()), + None => runtime_error!("Incomplete or Uninitialized RunResult encountered")?, + } + }) } } diff --git a/rust/pyapi/src/utility/unit_testers/mod.rs b/rust/pyapi/src/utility/unit_testers/mod.rs index 3b63c380..9138768f 100644 --- a/rust/pyapi/src/utility/unit_testers/mod.rs +++ b/rust/pyapi/src/utility/unit_testers/mod.rs @@ -9,10 +9,11 @@ use pyo3::wrap_pyfunction; use std::collections::HashMap; use origen_metal::{Outcome, OutcomeSubtypes}; -#[pymodule] -pub fn unit_testers(_py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::()?; - m.add_wrapped(wrap_pyfunction!(app_unit_tester))?; +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "unit_testers")?; + subm.add_class::()?; + subm.add_wrapped(wrap_pyfunction!(app_unit_tester))?; + m.add_submodule(subm)?; Ok(()) } @@ -71,17 +72,17 @@ impl RunResult { // Returns a new pytest driver with the parameters from the app config pub fn new_pytest_driver(py_config: &PyDict) -> PyResult { - let gil = Python::acquire_gil(); - let py = gil.python(); - let locals = PyDict::new(py); - locals.set_item("py_config", py_config)?; - locals.set_item( - "origen_pytester", - py.import("origen.utility.unit_testers.pytest")? - .to_object(py), - )?; - let pytester = py.eval("origen_pytester.PyTest(py_config)", Some(locals), None)?; - Ok(pytester.to_object(py)) + Python::with_gil(|py| { + let locals = PyDict::new(py); + locals.set_item("py_config", py_config)?; + locals.set_item( + "origen_pytester", + py.import("origen.utility.unit_testers.pytest")? + .to_object(py), + )?; + let pytester = py.eval("origen_pytester.PyTest(py_config)", Some(locals), None)?; + Ok(pytester.to_object(py)) + }) } /// Creates a unit test driver from the application's ``config.toml`` @@ -99,35 +100,35 @@ fn app_unit_tester() -> PyResult> { } let config = app.config(); - let gil = Python::acquire_gil(); - let py = gil.python(); - if let Some(ut_config) = &config.unit_tester { - if let Some(c) = ut_config.get("system") { - // Get the module and try to import it - let split = c.rsplitn(1, "."); - if split.count() == 2 { - // Have a class (hopefully) of the form 'a.b.Class' - // let py_config = hashmap_to_pydict(py, ut_config)?; - // return runtime_error!("custom unit tester not supported yet!"); - todo!(); - } else { - // fall back to some enumerated systems - if &c.to_lowercase() == "pytest" { - let py_config = map_to_pydict(py, &mut ut_config.iter())?; - Ok(Some(new_pytest_driver(py_config.as_ref(py))?)) - } else if &c.to_lowercase() == "none" { - Ok(None) + Python::with_gil(|py| { + if let Some(ut_config) = &config.unit_tester { + if let Some(c) = ut_config.get("system") { + // Get the module and try to import it + let split = c.rsplitn(1, "."); + if split.count() == 2 { + // Have a class (hopefully) of the form 'a.b.Class' + // let py_config = hashmap_to_pydict(py, ut_config)?; + // return runtime_error!("custom unit tester not supported yet!"); + todo!(); } else { - return runtime_error!(format!("Unrecognized unit tester system '{}'", c)); + // fall back to some enumerated systems + if &c.to_lowercase() == "pytest" { + let py_config = map_to_pydict(py, &mut ut_config.iter())?; + Ok(Some(new_pytest_driver(py_config.as_ref(py))?)) + } else if &c.to_lowercase() == "none" { + Ok(None) + } else { + return runtime_error!(format!("Unrecognized unit tester system '{}'", c)); + } } + } else { + // Invalid config + return runtime_error!("Could not discern unit tester from app config"); } } else { - // Invalid config - return runtime_error!("Could not discern unit tester from app config"); + let temp = HashMap::::new(); + let py_config = map_to_pydict(py, &mut temp.iter())?; + Ok(Some(new_pytest_driver(py_config.as_ref(py))?)) } - } else { - let temp = HashMap::::new(); - let py_config = map_to_pydict(py, &mut temp.iter())?; - Ok(Some(new_pytest_driver(py_config.as_ref(py))?)) - } + }) } diff --git a/rust/pyapi/src/utility/website/_frontend.rs b/rust/pyapi/src/utility/website/_frontend.rs index 0d2bc890..84601686 100644 --- a/rust/pyapi/src/utility/website/_frontend.rs +++ b/rust/pyapi/src/utility/website/_frontend.rs @@ -8,12 +8,12 @@ pub struct Website {} impl ofrontend::Website for Website { fn build(&self) -> Result { - let gil = Python::acquire_gil(); - let py = gil.python(); - let pyapp = get_pyapp(py)?; - let web = PyApplication::_get_website(pyapp, py)?; - let py_pbr = web.call_method0(py, "build")?; - let pbr = py_pbr.extract::>(py)?; - Ok(pbr.build_result()?.clone()) + Python::with_gil(|py| { + let pyapp = get_pyapp(py)?; + let web = PyApplication::_get_website(pyapp, py)?; + let py_pbr = web.call_method0(py, "build")?; + let pbr = py_pbr.extract::>(py)?; + Ok(pbr.build_result()?.clone()) + }) } } diff --git a/rust/pyapi/src/utility/website/mod.rs b/rust/pyapi/src/utility/website/mod.rs index 2f9f444a..f551dc06 100644 --- a/rust/pyapi/src/utility/website/mod.rs +++ b/rust/pyapi/src/utility/website/mod.rs @@ -2,7 +2,8 @@ pub mod _frontend; use pyo3::prelude::*; -#[pymodule] -pub fn website(_py: Python, _m: &PyModule) -> PyResult<()> { +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "website")?; + m.add_submodule(subm)?; Ok(()) } diff --git a/rust/pyapi_metal/Cargo.lock b/rust/pyapi_metal/Cargo.lock index e3f07f2f..112ffde0 100644 --- a/rust/pyapi_metal/Cargo.lock +++ b/rust/pyapi_metal/Cargo.lock @@ -1199,6 +1199,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.16" @@ -1514,7 +1523,7 @@ dependencies = [ [[package]] name = "origen_metal" -version = "0.4.0" +version = "0.5.0" dependencies = [ "aes-gcm", "built", @@ -1732,13 +1741,14 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6302e85060011447471887705bb7838f14aba43fcb06957d823739a496b3dc" +checksum = "ffb88ae05f306b4bfcde40ac4a51dc0b05936a9207a4b75b798c7729c4258a59" dependencies = [ "cfg-if 1.0.0", "indoc", "libc", + "memoffset", "num-bigint 0.4.3", "parking_lot", "pyo3-build-config", @@ -1749,9 +1759,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b65b546c35d8a3b1b2f0ddbac7c6a569d759f357f2b9df884f5d6b719152c8" +checksum = "554db24f0b3c180a9c0b1268f91287ab3f17c162e15b54caaae5a6b3773396b0" dependencies = [ "once_cell", "target-lexicon", @@ -1759,9 +1769,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c275a07127c1aca33031a563e384ffdd485aee34ef131116fcd58e3430d1742b" +checksum = "922ede8759e8600ad4da3195ae41259654b9c55da4f7eec84a0ccc7d067a70a4" dependencies = [ "libc", "pyo3-build-config", @@ -1769,9 +1779,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284fc4485bfbcc9850a6d661d627783f18d19c2ab55880b021671c4ba83e90f7" +checksum = "8a5caec6a1dd355964a841fcbeeb1b89fe4146c87295573f94228911af3cc5a2" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -1781,9 +1791,9 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.16.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53bda0f58f73f5c5429693c96ed57f7abdb38fdfc28ae06da4101a257adb7faf" +checksum = "e0b78ccbb160db1556cdb6fd96c50334c5d4ec44dc5e0a968d0a1208fa0efa8b" dependencies = [ "proc-macro2", "quote", diff --git a/rust/pyapi_metal/Cargo.toml b/rust/pyapi_metal/Cargo.toml index d27e5208..ceb049fa 100644 --- a/rust/pyapi_metal/Cargo.toml +++ b/rust/pyapi_metal/Cargo.toml @@ -23,7 +23,7 @@ curl-sys = { version = "0.4.34", features = ["static-curl"] } openssl = { version = "0.10", features = ["vendored"] } [dependencies.pyo3] -version = "0.16.5" +version = "0.19.1" features = ["extension-module", "num-bigint"] [build-dependencies] diff --git a/rust/pyapi_metal/src/_helpers/macros.rs b/rust/pyapi_metal/src/_helpers/macros.rs new file mode 100644 index 00000000..ab1f888b --- /dev/null +++ b/rust/pyapi_metal/src/_helpers/macros.rs @@ -0,0 +1,8 @@ +#[macro_export] +macro_rules! alias_method_apply_to_set { + ($m: expr, $cls: tt, $basename: tt) => {{ + let cls = $m.getattr($cls)?; + let func = cls.getattr(concat!("apply_", $basename))?; + cls.setattr(concat!("set_", $basename), func)?; + }}; +} diff --git a/rust/pyapi_metal/src/_helpers/mod.rs b/rust/pyapi_metal/src/_helpers/mod.rs index 69489c0f..6ea47502 100644 --- a/rust/pyapi_metal/src/_helpers/mod.rs +++ b/rust/pyapi_metal/src/_helpers/mod.rs @@ -9,6 +9,9 @@ pub mod config; #[macro_use] pub mod errors; +#[macro_use] +pub mod macros; + use crate::{pypath, runtime_error}; use indexmap::IndexMap; use pyo3::conversion::ToPyObject; @@ -53,9 +56,7 @@ pub fn new_py_obj<'p>( ) } -pub fn to_py_paths(paths: &Vec) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); +pub fn to_py_paths(py: Python, paths: &Vec) -> PyResult> { let mut retn: Vec = vec![]; for p in paths { retn.push(pypath!(py, format!("{}", p))); @@ -142,7 +143,7 @@ pub fn get_qualified_attr(s: &str) -> PyResult> { for component in remaining { current_str.push_str("."); current_str.push_str(component); - match PyModule::import(py, ¤t_str) { + match PyModule::import(py, &*current_str) { Ok(py_mod) => { current = py_mod.to_object(py); }, diff --git a/rust/pyapi_metal/src/_helpers/typed_value.rs b/rust/pyapi_metal/src/_helpers/typed_value.rs index e0387fc1..a37f4b63 100644 --- a/rust/pyapi_metal/src/_helpers/typed_value.rs +++ b/rust/pyapi_metal/src/_helpers/typed_value.rs @@ -12,69 +12,66 @@ pub fn typed_value_to_pyobj( key: Option<&str>, ) -> PyResult> { if let Some(d) = data { - let gil = Python::acquire_gil(); - let py = gil.python(); - match d { - TypedValue::None => Ok(None), - TypedValue::String(s) => Ok(Some(s.to_object(py))), - TypedValue::Usize(u) => Ok(Some(u.to_object(py))), - TypedValue::BigInt(big) => Ok(Some(big.to_object(py))), - TypedValue::BigUint(big) => Ok(Some(big.to_object(py))), - TypedValue::Bool(b) => Ok(Some(b.to_object(py))), - TypedValue::Float(f) => Ok(Some(f.to_object(py))), - TypedValue::Serialized(bytes, serializer, _class) => { - if let Some(s) = serializer { - if s == "Python-Pickle" { - let gil = Python::acquire_gil(); - let py = gil.python(); - - let any = depickle(py, &bytes)?; - Ok(Some(any.into())) - } else if s == "Python-Frontend" { - let bytes = PyBytes::new(py, &bytes); - Ok(Some(bytes.into())) + Python::with_gil(|py| { + match d { + TypedValue::None => Ok(None), + TypedValue::String(s) => Ok(Some(s.to_object(py))), + TypedValue::Usize(u) => Ok(Some(u.to_object(py))), + TypedValue::BigInt(big) => Ok(Some(big.to_object(py))), + TypedValue::BigUint(big) => Ok(Some(big.to_object(py))), + TypedValue::Bool(b) => Ok(Some(b.to_object(py))), + TypedValue::Float(f) => Ok(Some(f.to_object(py))), + TypedValue::Serialized(bytes, serializer, _class) => { + if let Some(s) = serializer { + if s == "Python-Pickle" { + let any = depickle(py, &bytes)?; + Ok(Some(any.into())) + } else if s == "Python-Frontend" { + let bytes = PyBytes::new(py, &bytes); + Ok(Some(bytes.into())) + } else { + crate::runtime_error!(if let Some(k) = key { + format!( + "Unknown serializer {} for {}. \ + If this was manually serialized, use method 'get_serialized' \ + to get a byte-array and manually deserialize.", + k, s + ) + } else { + format!( + "Unknown serializer {}. \ + If this was manually serialized, use method 'get_serialized' \ + to get a byte-array and manually deserialize.", + s + ) + }) + } } else { crate::runtime_error!(if let Some(k) = key { format!( - "Unknown serializer {} for {}. \ + "No serializer provided for {}. \ If this was manually serialized, use method 'get_serialized' \ to get a byte-array and manually deserialize.", - k, s + k ) } else { - format!( - "Unknown serializer {}. \ - If this was manually serialized, use method 'get_serialized' \ - to get a byte-array and manually deserialize.", - s - ) + "No serializer provided. \ + If this was manually serialized, use method 'get_serialized' \ + to get a byte-array and manually deserialize." + .to_string() }) } - } else { - crate::runtime_error!(if let Some(k) = key { - format!( - "No serializer provided for {}. \ - If this was manually serialized, use method 'get_serialized' \ - to get a byte-array and manually deserialize.", - k - ) - } else { - "No serializer provided. \ - If this was manually serialized, use method 'get_serialized' \ - to get a byte-array and manually deserialize." - .to_string() - }) } - } - TypedValue::Vec(list) => { - let mut pylist: Vec = vec![]; - for l in list { - pylist.push(typed_value_to_pyobj(Some(l), None)?.unwrap()); + TypedValue::Vec(list) => { + let mut pylist: Vec = vec![]; + for l in list { + pylist.push(typed_value_to_pyobj(Some(l), None)?.unwrap()); + } + Ok(Some(pylist.to_object(py))) } - Ok(Some(pylist.to_object(py))) + TypedValue::Map(map) => Ok(Some(into_pydict(py, map)?.to_object(py))), } - TypedValue::Map(map) => Ok(Some(into_pydict(py, map)?.to_object(py))), - } + }) } else { Ok(None) } @@ -101,15 +98,14 @@ pub fn extract_as_typed_value(value: &PyAny) -> PyResult { } else if let Ok(f) = value.extract::() { data = TypedValue::Float(f); } else { - let gil = Python::acquire_gil(); - let py = gil.python(); - // Serialize the data data = TypedValue::Serialized( - pickle(py, value)?, + Python::with_gil(|py| { + pickle(py, value) + })?, Some("Python-Pickle".to_string()), Some(value.get_type().name()?.to_string()), - ); + ) } Ok(data) } diff --git a/rust/pyapi_metal/src/framework/logger.rs b/rust/pyapi_metal/src/framework/logger.rs index 321baec3..9a934f60 100644 --- a/rust/pyapi_metal/src/framework/logger.rs +++ b/rust/pyapi_metal/src/framework/logger.rs @@ -38,54 +38,63 @@ macro_rules! pytuple_to_vector_str { }; } -#[pyfunction(messages = "*", _kwargs = "**")] +#[pyfunction] +#[pyo3(signature=(*messages, **_kwargs))] fn debug(_py: Python, messages: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult<()> { LOGGER.debug_block(&pytuple_to_vector_str!(messages)); Ok(()) } -#[pyfunction(messages = "*", _kwargs = "**")] +#[pyfunction] +#[pyo3(signature=(*messages, **_kwargs))] fn deprecated(_py: Python, messages: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult<()> { LOGGER.deprecated_block(&pytuple_to_vector_str!(messages)); Ok(()) } -#[pyfunction(messages = "*", _kwargs = "**")] +#[pyfunction] +#[pyo3(signature=(*messages, **_kwargs))] fn error(_py: Python, messages: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult<()> { LOGGER.error_block(&pytuple_to_vector_str!(messages)); Ok(()) } -#[pyfunction(messages = "*", _kwargs = "**")] +#[pyfunction] +#[pyo3(signature=(*messages, **_kwargs))] fn info(_py: Python, messages: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult<()> { LOGGER.info_block(&pytuple_to_vector_str!(messages)); Ok(()) } -#[pyfunction(messages = "*", _kwargs = "**")] +#[pyfunction] +#[pyo3(signature=(*messages, **_kwargs))] fn success(_py: Python, messages: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult<()> { LOGGER.success_block(&pytuple_to_vector_str!(messages)); Ok(()) } -#[pyfunction(messages = "*", _kwargs = "**")] +#[pyfunction] +#[pyo3(signature=(*messages, **_kwargs))] fn warning(_py: Python, messages: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult<()> { LOGGER.warning_block(&pytuple_to_vector_str!(messages)); Ok(()) } -#[pyfunction(messages = "*", _kwargs = "**")] +#[pyfunction] +#[pyo3(signature=(*messages, **_kwargs))] fn display(_py: Python, messages: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult<()> { LOGGER.display_block(&pytuple_to_vector_str!(messages)); Ok(()) } -#[pyfunction(messages = "*", _kwargs = "**")] +#[pyfunction] +#[pyo3(signature=(*messages, **_kwargs))] fn log(_py: Python, messages: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult<()> { display(_py, messages, _kwargs) } -#[pyfunction(messages = "*", _kwargs = "**")] +#[pyfunction] +#[pyo3(signature=(*messages, **_kwargs))] fn trace(_py: Python, messages: &PyTuple, _kwargs: Option<&PyDict>) -> PyResult<()> { LOGGER.trace_block(&pytuple_to_vector_str!(messages)); Ok(()) @@ -130,47 +139,47 @@ impl Logger { Self {} } - #[args(messages = "*", kwargs = "**")] + #[pyo3(signature=(*messages, **kwargs))] fn debug(&self, py: Python, messages: &PyTuple, kwargs: Option<&PyDict>) -> PyResult<()> { debug(py, messages, kwargs) } - #[args(messages = "*", kwargs = "**")] + #[pyo3(signature=(*messages, **kwargs))] fn deprecated(&self, py: Python, messages: &PyTuple, kwargs: Option<&PyDict>) -> PyResult<()> { deprecated(py, messages, kwargs) } - #[args(messages = "*", kwargs = "**")] + #[pyo3(signature=(*messages, **kwargs))] fn error(&self, py: Python, messages: &PyTuple, kwargs: Option<&PyDict>) -> PyResult<()> { error(py, messages, kwargs) } - #[args(messages = "*", kwargs = "**")] + #[pyo3(signature=(*messages, **kwargs))] fn info(&self, py: Python, messages: &PyTuple, kwargs: Option<&PyDict>) -> PyResult<()> { info(py, messages, kwargs) } - #[args(messages = "*", kwargs = "**")] + #[pyo3(signature=(*messages, **kwargs))] fn success(&self, py: Python, messages: &PyTuple, kwargs: Option<&PyDict>) -> PyResult<()> { success(py, messages, kwargs) } - #[args(messages = "*", kwargs = "**")] + #[pyo3(signature=(*messages, **kwargs))] fn warning(&self, py: Python, messages: &PyTuple, kwargs: Option<&PyDict>) -> PyResult<()> { warning(py, messages, kwargs) } - #[args(messages = "*", kwargs = "**")] + #[pyo3(signature=(*messages, **kwargs))] fn display(&self, py: Python, messages: &PyTuple, kwargs: Option<&PyDict>) -> PyResult<()> { display(py, messages, kwargs) } - #[args(messages = "*", kwargs = "**")] + #[pyo3(signature=(*messages, **kwargs))] fn log(&self, py: Python, messages: &PyTuple, kwargs: Option<&PyDict>) -> PyResult<()> { log(py, messages, kwargs) } - #[args(messages = "*", kwargs = "**")] + #[pyo3(signature=(*messages, **kwargs))] fn trace(&self, py: Python, messages: &PyTuple, kwargs: Option<&PyDict>) -> PyResult<()> { trace(py, messages, kwargs) } diff --git a/rust/pyapi_metal/src/framework/outcomes.rs b/rust/pyapi_metal/src/framework/outcomes.rs index 339b321c..15cc6fc5 100644 --- a/rust/pyapi_metal/src/framework/outcomes.rs +++ b/rust/pyapi_metal/src/framework/outcomes.rs @@ -53,7 +53,7 @@ impl Outcome { /// Provide an __init__ for typical Python subclass initialization. /// Otherwise, ``new`` will initialize. #[classmethod] - #[args(message = "None", metadata = "None", use_pass_fail = "false")] + #[pyo3(signature=(instance, succeeded, message = None, positional_results = None, keyword_results = None, use_pass_fail = false, metadata = None))] fn __init__( _cls: &PyType, mut instance: PyRefMut, @@ -76,7 +76,7 @@ impl Outcome { } #[new] - #[args(message = "None", metadata = "None", use_pass_fail = "false")] + #[pyo3(signature=(succeeded, message = None, positional_results = None, keyword_results = None, use_pass_fail = false, metadata = None))] fn new( succeeded: &PyAny, message: Option, diff --git a/rust/pyapi_metal/src/framework/users.rs b/rust/pyapi_metal/src/framework/users.rs index 0764d05f..92ff6509 100644 --- a/rust/pyapi_metal/src/framework/users.rs +++ b/rust/pyapi_metal/src/framework/users.rs @@ -46,6 +46,7 @@ pub(crate) fn define(py: Python, m: &PyModule) -> PyResult<()> { let users_class = subm.getattr("Users")?; users_class.setattr("current_user_as", wrap_instance_method(py, "current_user_as", Some(vec!("new_current")), None)?)?; + crate::alias_method_apply_to_set!(subm, "Users", "data_lookup_hierarchy"); Ok(()) } @@ -200,6 +201,7 @@ impl Users { } #[allow(non_snake_case)] + #[pyo3(signature=(_yield_retn, _yield_context, old_user))] pub fn __exit__current_user_as(&self, _py: Python, _yield_retn: Option<&PyAny>, _yield_context: Option>, old_user: &PyAny) -> PyResult<()> { self.set_current_user(old_user)?; Ok(()) @@ -211,7 +213,7 @@ impl Users { Ok(DATA_FIELDS) } - #[args(update_current = "false")] + #[pyo3(signature=(update_current = false))] pub fn lookup_current_id(&self, update_current: bool) -> PyResult { if update_current { let r = om::try_lookup_and_set_current_user()?; @@ -308,14 +310,14 @@ impl Users { } } - #[args(config = "None")] + #[pyo3(signature=(name, config = None))] fn register_dataset(&self, name: &str, config: Option<&PyAny>) -> PyResult<()> { let mut users = om::users_mut(); users.register_default_dataset(name, UserDatasetConfig::into_om(config)?)?; Ok(()) } - #[args(config = "None", as_topmost = "true")] + #[pyo3(signature=(name, config = None, as_topmost = true))] pub fn add_dataset( &self, name: &str, @@ -327,7 +329,7 @@ impl Users { Ok(()) } - #[args(config = "None")] + #[pyo3(signature=(name, config = None))] pub fn override_default_dataset(&self, name: &str, config: Option<&PyAny>) -> PyResult<()> { let mut users = om::users_mut(); users.override_default_dataset(name, UserDatasetConfig::into_om(config)?)?; @@ -346,10 +348,10 @@ impl Users { #[setter] fn data_lookup_hierarchy(&self, new_hierarchy: Vec) -> PyResult<()> { - self.set_data_lookup_hierarchy(new_hierarchy) + self.apply_data_lookup_hierarchy(new_hierarchy) } - pub fn set_data_lookup_hierarchy(&self, new_hierarchy: Vec) -> PyResult<()> { + pub fn apply_data_lookup_hierarchy(&self, new_hierarchy: Vec) -> PyResult<()> { let mut users = om::users_mut(); Ok(users.set_default_data_lookup_hierarchy(new_hierarchy)?) } @@ -360,7 +362,7 @@ impl Users { Ok(map_to_pydict(py, &mut users.motive_mapping().iter())?) } - #[args(replace_existing = "false")] + #[pyo3(signature=(motive, dataset, replace_existing = false))] pub fn add_motive( &self, motive: &str, @@ -376,11 +378,11 @@ impl Users { Ok(users.dataset_for(motive)?.cloned()) } - #[args( - repopulate = "false", - continue_on_error = "false", - stop_on_failure = "false" - )] + #[pyo3(signature=( + repopulate = false, + continue_on_error = false, + stop_on_failure = false + ))] pub fn populate( &self, repopulate: bool, @@ -461,7 +463,7 @@ impl Users { Ok(retn) } - #[args(exclusive="false", required="false")] + #[pyo3(signature=(role, exclusive = false, required = false))] pub fn for_role(&self, role: &str, exclusive: bool, required: bool) -> PyResult> { let users = om::users(); let r = users.users_by_role(Some( &|_u, rn| rn == role ))?; @@ -488,7 +490,7 @@ impl Users { } } - #[args(required="false")] + #[pyo3(signature=(role, required = false))] pub fn for_exclusive_role(&self, role: &str, required: bool) -> PyResult> { Ok(self.for_role(role, true, required)?.pop()) } @@ -875,11 +877,11 @@ impl UserDataset { self.data_store() } - #[args( - repopulate = "false", - continue_on_error = "false", - stop_on_failure = "false" - )] + #[pyo3(signature=( + repopulate = false, + continue_on_error = false, + stop_on_failure = false + ))] pub fn populate( &self, repopulate: bool, @@ -1076,7 +1078,7 @@ impl UserDatasetConfig { // TODO rename to new? #[new] - #[args(category = "None", data_store = "None", auto_populate = "None")] + #[pyo3(signature=(category = None, data_store = None, auto_populate = None, should_validate_password = None))] fn py_new( category: Option, data_store: Option, @@ -1466,7 +1468,7 @@ impl User { // We can't get a optional None value (as least as far as I know...) // Passing in None on the Python side makes this look like the argument given, so can't // get a nested None. - #[args(kwargs = "**")] + #[pyo3(signature=(motive, **kwargs))] fn password_for(&self, motive: &str, kwargs: Option<&PyDict>) -> PyResult { let default: Option>; if let Some(opts) = kwargs { @@ -1499,7 +1501,7 @@ impl User { })?) } - #[args(replace_existing = "false")] + #[pyo3(signature=(motive, dataset, replace_existing = false))] fn add_motive( &self, motive: &str, @@ -1609,7 +1611,7 @@ impl User { })?) } - #[args(config = "None", replace_existing = "None", as_topmost = "true")] + #[pyo3(signature=(name, config = None, replace_existing = None, as_topmost = true))] pub fn add_dataset( &self, name: &str, @@ -1627,7 +1629,7 @@ impl User { Ok(UserDataset::new(&self.user_id, name)) } - #[args(config = "None", replace_existing = "None")] + #[pyo3(signature=(name, config = None, replace_existing = None))] pub fn register_dataset( &self, name: &str, @@ -1685,11 +1687,11 @@ impl User { self.data_store() } - #[args( - repopulate = "false", - continue_on_error = "false", - stop_on_failure = "false" - )] + #[pyo3(signature=( + repopulate = false, + continue_on_error = false, + stop_on_failure = false + ))] pub fn populate( &self, repopulate: bool, @@ -1808,7 +1810,7 @@ impl User { })?) } - #[args(roles="*")] + #[pyo3(signature=(*roles))] pub fn add_roles(&self, roles: &PyAny) -> PyResult> { let v: Vec; if let Ok(r) = roles.extract::() { @@ -1824,7 +1826,7 @@ impl User { })?) } - #[args(roles="*")] + #[pyo3(signature=(*roles))] pub fn remove_roles(&self, roles: &PyAny) -> PyResult> { let v: Vec; if let Ok(r) = roles.extract::() { diff --git a/rust/pyapi_metal/src/frontend/mod.rs b/rust/pyapi_metal/src/frontend/mod.rs index e804f2c8..0f475012 100644 --- a/rust/pyapi_metal/src/frontend/mod.rs +++ b/rust/pyapi_metal/src/frontend/mod.rs @@ -227,7 +227,8 @@ pub(crate) fn backend_get_category( } #[cfg(debug_assertions)] -#[pyfunction(opts = "**")] +#[pyfunction] +#[pyo3(signature=(category, data_store, **opts))] pub(crate) fn backend_get_class( _py: Python, category: &str, diff --git a/rust/pyapi_metal/src/frontend/py_data_stores.rs b/rust/pyapi_metal/src/frontend/py_data_stores.rs index e69bfa1d..84ead6c4 100644 --- a/rust/pyapi_metal/src/frontend/py_data_stores.rs +++ b/rust/pyapi_metal/src/frontend/py_data_stores.rs @@ -182,7 +182,7 @@ impl PyDataStoreCategory { } // Note: This will shallow-copy ``init_args`` and ``init_kwargs``, if given. - #[args(func_kwargs = "**")] + #[pyo3(signature=(name, cls, init_args=None, init_kwargs=None, **func_kwargs))] pub fn add( &mut self, py: Python, @@ -205,7 +205,7 @@ impl PyDataStoreCategory { let mut category_idx: Option = None; if let Some(fa) = func_kwargs { if let Some(pn) = fa.get_item("provide_name") { - if pn.is_instance_of::()? { + if pn.is_instance_of::() { provide_name = pn.extract::()?; } else { if let Ok(i) = pn.extract::() { @@ -219,7 +219,7 @@ impl PyDataStoreCategory { } } if let Some(pc) = fa.get_item("provide_category") { - if pc.is_instance_of::()? { + if pc.is_instance_of::() { provide_category = pc.extract::()?; } else { if let Ok(i) = pc.extract::() { diff --git a/rust/pyapi_metal/src/lib.rs b/rust/pyapi_metal/src/lib.rs index 5ab0f1b6..92bbc8e8 100644 --- a/rust/pyapi_metal/src/lib.rs +++ b/rust/pyapi_metal/src/lib.rs @@ -1,3 +1,4 @@ +#[macro_use] pub mod _helpers; pub mod framework; pub mod frontend; @@ -21,8 +22,14 @@ pub mod built_info { include!(concat!(env!("OUT_DIR"), "/built.rs")); } -#[pymodule] -pub fn _origen_metal(py: Python, m: &PyModule) -> PyResult<()> { +pub fn define(py: Python, m: &PyModule) -> PyResult<()> { + let subm = PyModule::new(py, "_origen_metal")?; + _define(py, subm)?; + m.add_submodule(subm)?; + Ok(()) +} + +pub fn _define(py: Python, m: &PyModule) -> PyResult<()> { framework::define(py, m)?; utils::define(py, m)?; frontend::define(py, m)?; @@ -43,10 +50,14 @@ pub fn _origen_metal(py: Python, m: &PyModule) -> PyResult<()> { _helpers::define_tests(py, test_sm)?; m.add_submodule(test_sm)?; } - Ok(()) } +#[pymodule] +pub fn _origen_metal(py: Python, m: &PyModule) -> PyResult<()> { + _define(py, m) +} + fn py_submodule(py: Python, parent: &PyModule, path: &str, func: F) -> PyResult<()> where F: FnOnce(&PyModule) -> PyResult<()>, diff --git a/rust/pyapi_metal/src/utils/differ.rs b/rust/pyapi_metal/src/utils/differ.rs index 025ead9e..9f928d56 100644 --- a/rust/pyapi_metal/src/utils/differ.rs +++ b/rust/pyapi_metal/src/utils/differ.rs @@ -3,11 +3,8 @@ use origen_metal::utils::differ::{ASCIIDiffer, Differ}; use pyo3::prelude::*; use std::path::Path; -#[pyfunction( - ignore_comments = "None", - ignore_blocks = "None", - ignore_blank_lines = "true" -)] +#[pyfunction] +#[pyo3(signature=(file_a, file_b, ignore_comments = None, ignore_blocks = None, ignore_blank_lines = true))] pub fn has_diffs( file_a: &str, file_b: &str, diff --git a/rust/pyapi_metal/src/utils/ldap.rs b/rust/pyapi_metal/src/utils/ldap.rs index 35933ea9..65d10070 100644 --- a/rust/pyapi_metal/src/utils/ldap.rs +++ b/rust/pyapi_metal/src/utils/ldap.rs @@ -37,12 +37,7 @@ impl LDAP {} #[pymethods] impl LDAP { #[new] - #[args( - username = "None", - password = "None", - populate_user_config = "None", - timeout = "None" - )] + #[pyo3(signature=(name, server, base, auth=None, continuous_bind=None, populate_user_config=None, timeout=None))] fn new( name: &str, server: &str, diff --git a/rust/pyapi_metal/src/utils/mailer/mailer.rs b/rust/pyapi_metal/src/utils/mailer/mailer.rs index 869ac194..95924dc0 100644 --- a/rust/pyapi_metal/src/utils/mailer/mailer.rs +++ b/rust/pyapi_metal/src/utils/mailer/mailer.rs @@ -18,7 +18,7 @@ pub struct Mailer { #[pymethods] impl Mailer { #[new] - #[args(timeout="60")] + #[pyo3(signature=(server, port=None, domain=None, auth_method=None, timeout=60, user=None))] pub fn new(server: String, port: Option, domain: Option, auth_method: Option<&str>, timeout: Option, user: Option) -> PyResult { Ok(Self { mailer: OMailer::new(server, port, domain, auth_method, timeout, user)? diff --git a/rust/pyapi_metal/src/utils/mailer/maillists.rs b/rust/pyapi_metal/src/utils/mailer/maillists.rs index ce4c1be0..a140041b 100644 --- a/rust/pyapi_metal/src/utils/mailer/maillists.rs +++ b/rust/pyapi_metal/src/utils/mailer/maillists.rs @@ -16,7 +16,7 @@ pub struct Maillists { #[pymethods] impl Maillists { #[new] - #[args(dirs="*", continue_on_error="false")] + #[pyo3(signature=(n, *dirs, continue_on_error=false))] fn new(n: String, dirs: &PyTuple, continue_on_error: bool) -> PyResult { Ok(Self { om_mls: OrigenMLS::new( diff --git a/rust/pyapi_metal/src/utils/revision_control/mod.rs b/rust/pyapi_metal/src/utils/revision_control/mod.rs index d895697e..32ef4c1a 100644 --- a/rust/pyapi_metal/src/utils/revision_control/mod.rs +++ b/rust/pyapi_metal/src/utils/revision_control/mod.rs @@ -23,7 +23,7 @@ pub struct Base {} #[pymethods] impl Base { #[new] - #[args(_args = "*", _config = "**")] + #[pyo3(signature=(*_args, **_config))] fn new(_args: &PyTuple, _config: Option<&PyDict>) -> PyResult { Ok(Self {}) } diff --git a/rust/pyapi_metal/src/utils/revision_control/status.rs b/rust/pyapi_metal/src/utils/revision_control/status.rs index f5baf76e..eca53630 100644 --- a/rust/pyapi_metal/src/utils/revision_control/status.rs +++ b/rust/pyapi_metal/src/utils/revision_control/status.rs @@ -11,9 +11,7 @@ pub struct Status { #[pymethods] impl Status { #[getter] - fn added(&self) -> PyResult> { - let gil = Python::acquire_gil(); - let py = gil.python(); + fn added(&self, py: Python) -> PyResult> { let mut retn: Vec = vec![]; for added in self.stat.added.iter() { retn.push(pypath!(py, added.display())); @@ -22,18 +20,18 @@ impl Status { } #[getter] - fn removed(&self) -> PyResult> { - to_py_paths(&self.stat.removed.iter().map(|p| p.display()).collect()) + fn removed(&self, py: Python) -> PyResult> { + to_py_paths(py, &self.stat.removed.iter().map(|p| p.display()).collect()) } #[getter] - fn conflicted(&self) -> PyResult> { - to_py_paths(&self.stat.conflicted.iter().map(|p| p.display()).collect()) + fn conflicted(&self, py: Python) -> PyResult> { + to_py_paths(py, &self.stat.conflicted.iter().map(|p| p.display()).collect()) } #[getter] - fn changed(&self) -> PyResult> { - to_py_paths(&self.stat.changed.iter().map(|p| p.display()).collect()) + fn changed(&self, py: Python) -> PyResult> { + to_py_paths(py, &self.stat.changed.iter().map(|p| p.display()).collect()) } #[getter] diff --git a/rust/pyapi_metal/src/utils/revision_control/supported/git.rs b/rust/pyapi_metal/src/utils/revision_control/supported/git.rs index b1747218..a344a4db 100644 --- a/rust/pyapi_metal/src/utils/revision_control/supported/git.rs +++ b/rust/pyapi_metal/src/utils/revision_control/supported/git.rs @@ -39,7 +39,7 @@ impl Git { } #[new] - #[args(args = "*", config = "**")] + #[pyo3(signature=(*args, **config))] fn new(args: &PyTuple, config: Option<&PyDict>) -> PyResult<(Self, Base)> { let mut c: HashMap = HashMap::new(); if let Some(cfg) = config { @@ -54,6 +54,7 @@ impl Git { Ok(self.rc()?.populate(version)?) } + #[pyo3(signature=(force, path, version))] fn checkout(&self, force: bool, path: Option<&str>, version: &str) -> PyResult { let rusty_path; if let Some(p) = path { @@ -81,7 +82,7 @@ impl Git { }) } - #[args(kwargs = "**")] + #[pyo3(signature=(tagname, **kwargs))] fn tag(&self, tagname: &str, kwargs: Option<&PyDict>) -> PyResult<()> { let msg: Option<&str>; Ok(self.rc()?.tag( @@ -116,7 +117,7 @@ impl Git { Ok(self.rc()?.is_initialized()?) } - #[args(paths = "*", kwargs = "**")] + #[pyo3(signature=(*paths, **kwargs))] fn checkin(&self, paths: &PyTuple, kwargs: Option<&PyDict>) -> PyResult { let msg; let dry_run; @@ -149,7 +150,7 @@ impl Git { )?)) } - #[args(dry_run = "false")] + #[pyo3(signature=(msg, dry_run=false))] fn checkin_all(&self, msg: &str, dry_run: bool) -> PyResult { Ok(PyOutcome::from_origen( self.rc()?.checkin(None, msg, dry_run)?, diff --git a/test_apps/no_workspace/templates/pyproject.toml b/test_apps/no_workspace/templates/pyproject.toml index e36101b3..28c749a4 100644 --- a/test_apps/no_workspace/templates/pyproject.toml +++ b/test_apps/no_workspace/templates/pyproject.toml @@ -5,7 +5,7 @@ description = "Origen Installation Test" authors = ["Origen-SDK"] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" {% if local_origen %} origen = { path = "{{ o2_root.joinpath("python/origen").as_posix() }}", develop = true } origen_metal = { path = "{{ o2_root.joinpath("python/origen_metal").as_posix() }}", develop = true } diff --git a/test_apps/no_workspace/user_install/pyproject.toml b/test_apps/no_workspace/user_install/pyproject.toml index 5eb8004b..5a87074b 100644 --- a/test_apps/no_workspace/user_install/pyproject.toml +++ b/test_apps/no_workspace/user_install/pyproject.toml @@ -5,7 +5,7 @@ description = "Origen Installation Test" authors = ["Origen-SDK"] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" origen = { path = "../../../python/origen", develop = true } origen_metal = { path = "../../../python/origen_metal", develop = true } diff --git a/test_apps/pl_ext_cmds/pyproject.toml b/test_apps/pl_ext_cmds/pyproject.toml index 889ce813..c157e96a 100644 --- a/test_apps/pl_ext_cmds/pyproject.toml +++ b/test_apps/pl_ext_cmds/pyproject.toml @@ -5,7 +5,7 @@ description = "Plugin Extending Cmds" authors = ["Origen-SDK"] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" origen = { path = "../../python/origen", develop = true } origen_metal = ">=0.0.0" diff --git a/test_apps/python_app/example/commands/examples.py b/test_apps/python_app/example/commands/examples.py index 25ad6b01..4dba3fad 100644 --- a/test_apps/python_app/example/commands/examples.py +++ b/test_apps/python_app/example/commands/examples.py @@ -9,13 +9,17 @@ def run(**kwargs): origen.boot.exit = False run_cmd("generate", - files=["example/patterns"], - reference_dir="approved", + args={ + "files": ["example/patterns"], + "reference_dir": "approved", + }, targets=["dut/eagle", "tester/v93k_smt7", "tester/j750"]) run_cmd("generate", - files=["example/flows/o1_testcases/prb1.py"], - reference_dir="approved", + args={ + "files": ["example/flows/o1_testcases/prb1.py"], + "reference_dir": "approved", + }, targets=["dut/o1_dut", "tester/v93k_smt7"]) stats = origen.tester.stats() diff --git a/test_apps/python_app/poetry.lock b/test_apps/python_app/poetry.lock index f22327ee..f9681264 100644 --- a/test_apps/python_app/poetry.lock +++ b/test_apps/python_app/poetry.lock @@ -12,17 +12,6 @@ files = [ {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, ] -[[package]] -name = "atomicwrites" -version = "1.4.1" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, -] - [[package]] name = "attrs" version = "22.2.0" @@ -516,6 +505,21 @@ https = ["urllib3 (>=1.24.1)"] paramiko = ["paramiko"] pgp = ["gpg"] +[[package]] +name = "exceptiongroup" +version = "1.1.2" +description = "Backport of PEP 654 (exception groups)" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, +] + +[package.extras] +test = ["pytest (>=6)"] + [[package]] name = "filelock" version = "3.9.0" @@ -622,7 +626,7 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -888,7 +892,7 @@ version = "2.0.0.dev5" description = "Semiconductor Developer's Kit" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true @@ -933,7 +937,7 @@ version = "0.4.0" description = "Bare metal APIs for the Origen SDK" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true @@ -1006,13 +1010,13 @@ version = "0.1.0" description = "Plugin Extending Cmds" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true [package.dependencies] origen = {path = "../../python/origen", develop = true} -origen_metal = {path = "../../python/origen_metal", develop = true} +origen_metal = ">=0.0.0" [package.source] type = "directory" @@ -1041,7 +1045,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest- name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" -category = "dev" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1142,18 +1146,6 @@ files = [ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] - [[package]] name = "pycparser" version = "2.21" @@ -1232,29 +1224,27 @@ files = [ [[package]] name = "pytest" -version = "6.2.5" +version = "7.4.0" description = "pytest: simple powerful testing with Python" -category = "dev" +category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "python-plugin" @@ -1262,7 +1252,7 @@ version = "0.1.0" description = "Example Origen Plugin" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true @@ -1279,7 +1269,7 @@ version = "0.1.0" description = "Example Origen Plugin Without Any Commands" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true @@ -1715,30 +1705,19 @@ version = "0.1.0" description = "Shared Regression Test Helpers for Test Apps" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true [package.dependencies] origen = {path = "../../python/origen", develop = true} pl_ext_cmds = {path = "../pl_ext_cmds", develop = true} +pytest = ">=7.2.1" [package.source] type = "directory" url = "../test_apps_shared_test_helpers" -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - [[package]] name = "tomli" version = "2.0.1" @@ -1974,5 +1953,5 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" -python-versions = ">=3.7,<3.11" -content-hash = "321b436680a0eeca2b6cd2f6818c80b05cf1120111e8e1545d882690ec9d6056" +python-versions = ">=3.7.0,<=3.12" +content-hash = "be00203c85f7dc3c6161189133d21ba3a91ce2fc13811a4bbdae08e32e94383a" diff --git a/test_apps/python_app/pyproject.toml b/test_apps/python_app/pyproject.toml index a66e0f68..a7b9d3a9 100644 --- a/test_apps/python_app/pyproject.toml +++ b/test_apps/python_app/pyproject.toml @@ -5,14 +5,14 @@ description = "" authors = ["Origen-SDK"] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" origen = "= 2.0.0.dev5" python_plugin = { path = "../python_plugin", develop = true } test_apps_shared_test_helpers = { path = "../test_apps_shared_test_helpers", develop = true } python_plugin_no_cmds = { path = "../python_plugin_no_cmds", develop = true } [tool.poetry.dev-dependencies] -pytest = "^6.0" +pytest = ">= 6.0" origen = { path = "../../python/origen", develop = true } origen_metal = { path = "../../python/origen_metal", develop = true } @@ -27,4 +27,4 @@ addopts = "--strict-markers" markers = [ "online: marks tests as requiring an internet connection", "ldap: marks tests requiring/using the external ldap", -] +] \ No newline at end of file diff --git a/test_apps/python_no_app/poetry.lock b/test_apps/python_no_app/poetry.lock index 52106d08..2804dd37 100644 --- a/test_apps/python_no_app/poetry.lock +++ b/test_apps/python_no_app/poetry.lock @@ -12,17 +12,6 @@ files = [ {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, ] -[[package]] -name = "atomicwrites" -version = "1.4.1" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, -] - [[package]] name = "attrs" version = "22.2.0" @@ -436,6 +425,21 @@ https = ["urllib3 (>=1.24.1)"] paramiko = ["paramiko"] pgp = ["gpg"] +[[package]] +name = "exceptiongroup" +version = "1.1.2" +description = "Backport of PEP 654 (exception groups)" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, +] + +[package.extras] +test = ["pytest (>=6)"] + [[package]] name = "filelock" version = "3.9.0" @@ -542,7 +546,7 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "1.1.1" description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" +category = "main" optional = false python-versions = "*" files = [ @@ -808,7 +812,7 @@ version = "2.0.0.dev5" description = "Semiconductor Developer's Kit" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true @@ -853,7 +857,7 @@ version = "0.4.0" description = "Bare metal APIs for the Origen SDK" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true @@ -926,13 +930,13 @@ version = "0.1.0" description = "Plugin Extending Cmds" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true [package.dependencies] origen = {path = "../../python/origen", develop = true} -origen_metal = {path = "../../python/origen_metal", develop = true} +origen_metal = ">=0.0.0" [package.source] type = "directory" @@ -961,7 +965,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest- name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" -category = "dev" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1062,18 +1066,6 @@ files = [ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] - [[package]] name = "pycparser" version = "2.21" @@ -1147,29 +1139,27 @@ files = [ [[package]] name = "pytest" -version = "6.2.5" +version = "7.4.0" description = "pytest: simple powerful testing with Python" -category = "dev" +category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "python-plugin" @@ -1177,7 +1167,7 @@ version = "0.1.0" description = "Example Origen Plugin" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true @@ -1194,7 +1184,7 @@ version = "0.1.0" description = "Example Origen Plugin Without Any Commands" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true @@ -1212,7 +1202,7 @@ version = "0.1.0" description = "Another Example Origen Plugin" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true @@ -1648,30 +1638,19 @@ version = "0.1.0" description = "Shared Regression Test Helpers for Test Apps" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.7.0,<=3.12" files = [] develop = true [package.dependencies] origen = {path = "../../python/origen", develop = true} pl_ext_cmds = {path = "../pl_ext_cmds", develop = true} +pytest = ">=7.2.1" [package.source] type = "directory" url = "../test_apps_shared_test_helpers" -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - [[package]] name = "tomli" version = "2.0.1" @@ -1907,5 +1886,5 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" -python-versions = ">=3.7,<3.11" -content-hash = "26480da255683b8b3fa427275d60c56838bea009549dbeec10ceac16960d7b9e" +python-versions = ">=3.7.0,<=3.12" +content-hash = "914252389b3db8f1eaa81c1453f6b803fe9a75692661356c129058a52d1aeae3" diff --git a/test_apps/python_no_app/pyproject.toml b/test_apps/python_no_app/pyproject.toml index b4a28a96..d96626ca 100644 --- a/test_apps/python_no_app/pyproject.toml +++ b/test_apps/python_no_app/pyproject.toml @@ -5,7 +5,7 @@ description = "O2 workspace without an application" authors = ["Origen-SDK"] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" origen = { path = "../../python/origen", develop = true } origen_metal = { path = "../../python/origen_metal", develop = true } python_plugin = { path = "../python_plugin", develop = true } @@ -14,7 +14,7 @@ python_plugin_no_cmds = { path = "../python_plugin_no_cmds", develop = true } test_apps_shared_test_helpers = { path = "../test_apps_shared_test_helpers", develop = true } [tool.poetry.dev-dependencies] -pytest = "^6.0" +pytest = ">=6.0" [tool.pytest.ini_options] -addopts = "--ignore=tests/cmd_building/cmd_testers" +addopts = "--ignore=tests/cmd_building/cmd_testers" \ No newline at end of file diff --git a/test_apps/python_no_app/tests/cli/tests__cmd__eval.py b/test_apps/python_no_app/tests/cli/tests__cmd__eval.py index bf1823cb..ec2f789d 100644 --- a/test_apps/python_no_app/tests/cli/tests__cmd__eval.py +++ b/test_apps/python_no_app/tests/cli/tests__cmd__eval.py @@ -1,4 +1,4 @@ -import origen, pytest, pathlib +import origen, pytest, pathlib, sys from .shared import CLICommon class T_Eval(CLICommon): @@ -84,7 +84,11 @@ def test_error_in_script(self, cmd): stderr = out["stderr"].split("\n") assert "Traceback" in stderr[0] assert "line 2" in stderr[1] - assert stderr[2] == "NameError: name 'hello' is not defined" + err = "NameError: name 'hello' is not defined" + if sys.version_info.minor >= 12: + assert stderr[2] == f"{err}. Did you mean: 'help'?" + else: + assert stderr[2] == err assert stdout[3] == '' assert len(stderr) == 4 diff --git a/test_apps/python_plugin/pyproject.toml b/test_apps/python_plugin/pyproject.toml index 25b5c749..a1ed5c9a 100644 --- a/test_apps/python_plugin/pyproject.toml +++ b/test_apps/python_plugin/pyproject.toml @@ -5,7 +5,7 @@ description = "Example Origen Plugin" authors = ["Origen-SDK"] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" origen = { path = "../../python/origen", develop = true } [tool.poetry.dev-dependencies] @@ -13,4 +13,4 @@ pytest = "^3" [build-system] requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" +build-backend = "poetry.core.masonry.api" \ No newline at end of file diff --git a/test_apps/python_plugin_no_cmds/pyproject.toml b/test_apps/python_plugin_no_cmds/pyproject.toml index 58ced09e..0c72fcf4 100644 --- a/test_apps/python_plugin_no_cmds/pyproject.toml +++ b/test_apps/python_plugin_no_cmds/pyproject.toml @@ -5,7 +5,7 @@ description = "Example Origen Plugin Without Any Commands" authors = ["Origen-SDK"] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" origen = { path = "../../python/origen", develop = true } origen_metal = { path = "../../python/origen_metal", develop = true } diff --git a/test_apps/python_plugin_the_second/pyproject.toml b/test_apps/python_plugin_the_second/pyproject.toml index c029c5ff..d46101d9 100644 --- a/test_apps/python_plugin_the_second/pyproject.toml +++ b/test_apps/python_plugin_the_second/pyproject.toml @@ -5,7 +5,7 @@ description = "Another Example Origen Plugin" authors = ["Origen-SDK"] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" origen = { path = "../../python/origen", develop = true } origen_metal = { path = "../../python/origen_metal", develop = true } diff --git a/test_apps/test_apps_shared_test_helpers/pyproject.toml b/test_apps/test_apps_shared_test_helpers/pyproject.toml index 8b7a9a00..a26874ea 100644 --- a/test_apps/test_apps_shared_test_helpers/pyproject.toml +++ b/test_apps/test_apps_shared_test_helpers/pyproject.toml @@ -5,7 +5,7 @@ description = "Shared Regression Test Helpers for Test Apps" authors = ["Origen-SDK"] [tool.poetry.dependencies] -python = ">=3.7,<3.11" +python = ">=3.7.0,<=3.12" pytest = ">=7.2.1" origen = { path = "../../python/origen", develop = true } pl_ext_cmds = { path = "../pl_ext_cmds", develop = true }