From 910c886d860ea9c87ff5d249f2d4c18952d48226 Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Thu, 21 Mar 2024 14:42:04 -0400 Subject: [PATCH] chore: new project abr-testing (#14707) Add a new project for ABR test files so they do not have to adhere to the requirements that hardware-testing does, and vice versa. --- .github/workflows/abr-testing-lint-test.yaml | 59 +++ abr-testing/.flake8 | 24 ++ abr-testing/Makefile | 80 ++++ abr-testing/Pipfile | 24 ++ abr-testing/Pipfile.lock | 389 +++++++++++++++++++ abr-testing/README.md | 5 + abr-testing/abr_testing/__init__.py | 1 + abr-testing/mypy.ini | 6 + abr-testing/setup.py | 33 ++ abr-testing/tests/conftest.py | 1 + 10 files changed, 622 insertions(+) create mode 100644 .github/workflows/abr-testing-lint-test.yaml create mode 100644 abr-testing/.flake8 create mode 100644 abr-testing/Makefile create mode 100644 abr-testing/Pipfile create mode 100644 abr-testing/Pipfile.lock create mode 100644 abr-testing/README.md create mode 100644 abr-testing/abr_testing/__init__.py create mode 100644 abr-testing/mypy.ini create mode 100644 abr-testing/setup.py create mode 100644 abr-testing/tests/conftest.py diff --git a/.github/workflows/abr-testing-lint-test.yaml b/.github/workflows/abr-testing-lint-test.yaml new file mode 100644 index 00000000000..e103c61efdd --- /dev/null +++ b/.github/workflows/abr-testing-lint-test.yaml @@ -0,0 +1,59 @@ +# This workflow runs test and lint on branch pushes that touch the abr-testing +# project or its dependencies. + +name: 'abr-testing lint/test' +on: + push: + paths: + - 'Makefile' + - 'abr-testing/**' + - 'scripts/**/*.mk' + - 'scripts/**/*.py' + - '.github/workflows/abr-testing-lint-test.yaml' + - '.github/actions/python/**' + branches: + - 'edge' + tags-ignore: + - '*' + pull_request: + paths: + - 'abr-testing/**' + - 'scripts/**/*.mk' + - 'scripts/**/*.py' + - '.github/workflows/abr-testing-lint-test.yaml' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}-${{ github.ref_name != 'edge' || github.run_id}}-${{ github.ref_type != 'tag' || github.run_id }} + cancel-in-progress: true + +defaults: + run: + shell: bash + +jobs: + lint-test: + runs-on: 'windows-latest' + steps: + - name: Checkout opentrons repo + uses: 'actions/checkout@v3' + with: + fetch-depth: 0 + - name: Setup Node + uses: 'actions/setup-node@v3' + with: + node-version: '12' + - name: Setup Python + uses: 'actions/setup-python@v4' + with: + python-version: '3.10' + - name: Set up abr-testing project + uses: './.github/actions/python/setup' + with: + project: 'abr-testing' + - name: lint + run: + make -C abr-testing lint + - name: test + run: + make -C abr-testing test diff --git a/abr-testing/.flake8 b/abr-testing/.flake8 new file mode 100644 index 00000000000..cc618b04ba2 --- /dev/null +++ b/abr-testing/.flake8 @@ -0,0 +1,24 @@ +[flake8] + +# set line-length for future black support +# https://github.com/psf/black/blob/master/docs/compatible_configs.md +max-line-length = 100 + +# max cyclomatic complexity +# NOTE: (andy s) increasing this from 9 to 15 b/c test scripts often handle all logic in main +max-complexity = 15 + +extend-ignore = + # ignore E203 because black might reformat it + E203, + # do not require type annotations for self nor cls + ANN101, + ANN102 + +# configure flake8-docstrings +# https://pypi.org/project/flake8-docstrings/ +docstring-convention = google + +noqa-require-code = true + +# per-file-ignores = diff --git a/abr-testing/Makefile b/abr-testing/Makefile new file mode 100644 index 00000000000..d9ec6bdbb31 --- /dev/null +++ b/abr-testing/Makefile @@ -0,0 +1,80 @@ +include ../scripts/push.mk +include ../scripts/python.mk + +SHX := npx shx + +ot_project := $(OPENTRONS_PROJECT) +project_rs_default = $(if $(ot_project),$(ot_project),robot-stack) +project_ir_default = $(if $(ot_project),$(ot_project),ot3) + +package_name = abr_testing +package_version = $(call python_package_version,abr-testing,$(project_rs_default)) +wheel_file = dist/$(call python_get_wheelname,abr-testing,$(project_rs_default),$(package_name),$(BUILD_NUMBER)) +sdist_file = dist/$(call python_get_sdistname,abr-testing,$(project_rs_default),$(package_name)) + +tests ?= tests +test_opts ?= + +# Host key location for robot +ssh_key ?= $(default_ssh_key) +# Other SSH args for robot +ssh_opts ?= $(default_ssh_opts) +# Helper to safely bundle ssh options +ssh_helper = $(if $(ssh_key),-i $(ssh_key)) $(ssh_opts) +ssh_helper_ot3 = $(ssh_helper) -o HostkeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa + +# Source discovery +# For the python sources +ot_py_sources := $(filter %.py,$(shell $(SHX) find abr_testing/)) +ot_sources := $(ot_py_sources) + +# Defined separately than the clean target so the wheel file doesn’t have to +# depend on a PHONY target +clean_cmd = $(SHX) rm -rf build dist .coverage coverage.xml '*.egg-info' '**/__pycache__' '**/*.pyc' '**/.mypy_cache' + + +.PHONY: all +all: clean sdist wheel + +.PHONY: setup +setup: + $(pipenv) sync $(pipenv_opts) + $(pipenv) run pip freeze + +.PHONY: teardown +teardown: + $(pipenv) --rm + +.PHONY: clean +clean: + $(clean_cmd) + +.PHONY: wheel +wheel: export OPENTRONS_PROJECT=$(project_rs_default) +wheel: + rm -rf dist/*.whl + $(python) setup.py $(wheel_opts) bdist_wheel + $(SHX) rm -rf build + $(SHX) ls dist + +.PHONY: sdist +sdist: export OPENTRONS_PROJECT=$(project_rs_default) +sdist: + $(clean_cmd) + $(python) setup.py sdist + $(SHX) rm -rf build + $(SHX) ls dist + +.PHONY: lint +lint: + $(python) -m mypy abr_testing tests + $(python) -m black --check abr_testing tests setup.py + $(python) -m flake8 abr_testing tests setup.py + +.PHONY: format +format: + $(python) -m black abr_testing tests setup.py + +.PHONY: test +test: + @echo "No tests yet" diff --git a/abr-testing/Pipfile b/abr-testing/Pipfile new file mode 100644 index 00000000000..bd6f5cb845f --- /dev/null +++ b/abr-testing/Pipfile @@ -0,0 +1,24 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +abr-testing = { editable = true, path = "." } + +[dev-packages] +atomicwrites = "==1.4.1" +colorama = "==0.4.4" +pytest = "==7.1.1" +pytest-cov = "==2.10.1" +mypy = "==0.981" +black = "==22.3.0" +flake8 = "~=3.9.0" +flake8-annotations = "~=2.6.2" +flake8-docstrings = "~=1.6.0" +flake8-noqa = "~=1.2.1" +requests = "==2.27.1" +types-requests = "==2.25.6" + +[requires] +python_version = "3.10" diff --git a/abr-testing/Pipfile.lock b/abr-testing/Pipfile.lock new file mode 100644 index 00000000000..2d544d188a9 --- /dev/null +++ b/abr-testing/Pipfile.lock @@ -0,0 +1,389 @@ +{ + "_meta": { + "hash": { + "sha256": "7cdb7e0294b0312c8a099843c8fa3c6e5d574eaeed41cf837db9dbf77c029fb1" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.10" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "abr-testing": { + "editable": true, + "path": "." + } + }, + "develop": { + "atomicwrites": { + "hashes": [ + "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11" + ], + "index": "pypi", + "version": "==1.4.1" + }, + "attrs": { + "hashes": [ + "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30", + "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1" + ], + "markers": "python_version >= '3.7'", + "version": "==23.2.0" + }, + "black": { + "hashes": [ + "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b", + "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176", + "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09", + "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a", + "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015", + "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79", + "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb", + "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20", + "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464", + "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968", + "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82", + "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21", + "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0", + "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265", + "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b", + "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a", + "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72", + "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce", + "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0", + "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a", + "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163", + "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad", + "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d" + ], + "index": "pypi", + "markers": "python_full_version >= '3.6.2'", + "version": "==22.3.0" + }, + "certifi": { + "hashes": [ + "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", + "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" + ], + "markers": "python_version >= '3.6'", + "version": "==2024.2.2" + }, + "charset-normalizer": { + "hashes": [ + "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", + "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" + ], + "markers": "python_version >= '3'", + "version": "==2.0.12" + }, + "click": { + "hashes": [ + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.7" + }, + "colorama": { + "hashes": [ + "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b", + "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.4.4" + }, + "coverage": { + "hashes": [ + "sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c", + "sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63", + "sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7", + "sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f", + "sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8", + "sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf", + "sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0", + "sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384", + "sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76", + "sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7", + "sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d", + "sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70", + "sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f", + "sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818", + "sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b", + "sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d", + "sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec", + "sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083", + "sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2", + "sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9", + "sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd", + "sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade", + "sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e", + "sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a", + "sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227", + "sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87", + "sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c", + "sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e", + "sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c", + "sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e", + "sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd", + "sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec", + "sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562", + "sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8", + "sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677", + "sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357", + "sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c", + "sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd", + "sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49", + "sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286", + "sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1", + "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf", + "sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51", + "sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409", + "sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384", + "sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e", + "sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978", + "sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57", + "sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e", + "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2", + "sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48", + "sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4" + ], + "markers": "python_version >= '3.8'", + "version": "==7.4.4" + }, + "flake8": { + "hashes": [ + "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b", + "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==3.9.2" + }, + "flake8-annotations": { + "hashes": [ + "sha256:0d6cd2e770b5095f09689c9d84cc054c51b929c41a68969ea1beb4b825cac515", + "sha256:d10c4638231f8a50c0a597c4efce42bd7b7d85df4f620a0ddaca526138936a4f" + ], + "index": "pypi", + "markers": "python_full_version >= '3.6.1' and python_full_version < '4.0.0'", + "version": "==2.6.2" + }, + "flake8-docstrings": { + "hashes": [ + "sha256:99cac583d6c7e32dd28bbfbef120a7c0d1b6dde4adb5a9fd441c4227a6534bde", + "sha256:9fe7c6a306064af8e62a055c2f61e9eb1da55f84bb39caef2b84ce53708ac34b" + ], + "index": "pypi", + "version": "==1.6.0" + }, + "flake8-noqa": { + "hashes": [ + "sha256:26d92ca6b72dec732d294e587a2bdeb66dab01acc609ed6a064693d6baa4e789", + "sha256:445618162e0bbae1b9d983326d4e39066c5c6de71ba0c444ca2d4d1fa5b2cdb7" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==1.2.9" + }, + "idna": { + "hashes": [ + "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", + "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + ], + "markers": "python_version >= '3'", + "version": "==3.6" + }, + "iniconfig": { + "hashes": [ + "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", + "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.0" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "mypy": { + "hashes": [ + "sha256:06e1eac8d99bd404ed8dd34ca29673c4346e76dd8e612ea507763dccd7e13c7a", + "sha256:2ee3dbc53d4df7e6e3b1c68ac6a971d3a4fb2852bf10a05fda228721dd44fae1", + "sha256:4bc460e43b7785f78862dab78674e62ec3cd523485baecfdf81a555ed29ecfa0", + "sha256:64e1f6af81c003f85f0dfed52db632817dabb51b65c0318ffbf5ff51995bbb08", + "sha256:6e35d764784b42c3e256848fb8ed1d4292c9fc0098413adb28d84974c095b279", + "sha256:6ee196b1d10b8b215e835f438e06965d7a480f6fe016eddbc285f13955cca659", + "sha256:756fad8b263b3ba39e4e204ee53042671b660c36c9017412b43af210ddee7b08", + "sha256:77f8fcf7b4b3cc0c74fb33ae54a4cd00bb854d65645c48beccf65fa10b17882c", + "sha256:794f385653e2b749387a42afb1e14c2135e18daeb027e0d97162e4b7031210f8", + "sha256:8ad21d4c9d3673726cf986ea1d0c9fb66905258709550ddf7944c8f885f208be", + "sha256:8e8e49aa9cc23aa4c926dc200ce32959d3501c4905147a66ce032f05cb5ecb92", + "sha256:9f362470a3480165c4c6151786b5379351b790d56952005be18bdbdd4c7ce0ae", + "sha256:a16a0145d6d7d00fbede2da3a3096dcc9ecea091adfa8da48fa6a7b75d35562d", + "sha256:ad77c13037d3402fbeffda07d51e3f228ba078d1c7096a73759c9419ea031bf4", + "sha256:b6ede64e52257931315826fdbfc6ea878d89a965580d1a65638ef77cb551f56d", + "sha256:c9e0efb95ed6ca1654951bd5ec2f3fa91b295d78bf6527e026529d4aaa1e0c30", + "sha256:ce65f70b14a21fdac84c294cde75e6dbdabbcff22975335e20827b3b94bdbf49", + "sha256:d1debb09043e1f5ee845fa1e96d180e89115b30e47c5d3ce53bc967bab53f62d", + "sha256:e178eaffc3c5cd211a87965c8c0df6da91ed7d258b5fc72b8e047c3771317ddb", + "sha256:e1acf62a8c4f7c092462c738aa2c2489e275ed386320c10b2e9bff31f6f7e8d6", + "sha256:e53773073c864d5f5cec7f3fc72fbbcef65410cde8cc18d4f7242dea60dac52e", + "sha256:eb3978b191b9fa0488524bb4ffedf2c573340e8c2b4206fc191d44c7093abfb7", + "sha256:f64d2ce043a209a297df322eb4054dfbaa9de9e8738291706eaafda81ab2b362", + "sha256:fa38f82f53e1e7beb45557ff167c177802ba7b387ad017eab1663d567017c8ee" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==0.981" + }, + "mypy-extensions": { + "hashes": [ + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" + ], + "markers": "python_version >= '3.5'", + "version": "==1.0.0" + }, + "packaging": { + "hashes": [ + "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", + "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" + ], + "markers": "python_version >= '3.7'", + "version": "==24.0" + }, + "pathspec": { + "hashes": [ + "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", + "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712" + ], + "markers": "python_version >= '3.8'", + "version": "==0.12.1" + }, + "platformdirs": { + "hashes": [ + "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068", + "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768" + ], + "markers": "python_version >= '3.8'", + "version": "==4.2.0" + }, + "pluggy": { + "hashes": [ + "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981", + "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be" + ], + "markers": "python_version >= '3.8'", + "version": "==1.4.0" + }, + "py": { + "hashes": [ + "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", + "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.11.0" + }, + "pycodestyle": { + "hashes": [ + "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068", + "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.7.0" + }, + "pydocstyle": { + "hashes": [ + "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019", + "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1" + ], + "markers": "python_version >= '3.6'", + "version": "==6.3.0" + }, + "pyflakes": { + "hashes": [ + "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3", + "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.3.1" + }, + "pytest": { + "hashes": [ + "sha256:841132caef6b1ad17a9afde46dc4f6cfa59a05f9555aae5151f73bdf2820ca63", + "sha256:92f723789a8fdd7180b6b06483874feca4c48a5c76968e03bb3e7f806a1869ea" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==7.1.1" + }, + "pytest-cov": { + "hashes": [ + "sha256:45ec2d5182f89a81fc3eb29e3d1ed3113b9e9a873bcddb2a71faaab066110191", + "sha256:47bd0ce14056fdd79f93e1713f88fad7bdcc583dcd7783da86ef2f085a0bb88e" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==2.10.1" + }, + "requests": { + "hashes": [ + "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61", + "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==2.27.1" + }, + "snowballstemmer": { + "hashes": [ + "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", + "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" + ], + "version": "==2.2.0" + }, + "tomli": { + "hashes": [ + "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + ], + "markers": "python_version < '3.11'", + "version": "==2.0.1" + }, + "types-requests": { + "hashes": [ + "sha256:a5a305b43ea57bf64d6731f89816946a405b591eff6de28d4c0fd58422cee779", + "sha256:e21541c0f55c066c491a639309159556dd8c5833e49fcde929c4c47bdb0002ee" + ], + "index": "pypi", + "version": "==2.25.6" + }, + "typing-extensions": { + "hashes": [ + "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475", + "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb" + ], + "markers": "python_version >= '3.8'", + "version": "==4.10.0" + }, + "urllib3": { + "hashes": [ + "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07", + "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.26.18" + } + } +} diff --git a/abr-testing/README.md b/abr-testing/README.md new file mode 100644 index 00000000000..3e6733f727b --- /dev/null +++ b/abr-testing/README.md @@ -0,0 +1,5 @@ +# ABR Testing Library + +A python package containing tools that work with sets of Flex robots to do cohort application based reliability testing and data tracking. + +Most of the code here is intended to run on a computer that is running the testing, and must be kept compatible with Windows. diff --git a/abr-testing/abr_testing/__init__.py b/abr-testing/abr_testing/__init__.py new file mode 100644 index 00000000000..6fe572495c8 --- /dev/null +++ b/abr-testing/abr_testing/__init__.py @@ -0,0 +1 @@ +"""The package holding code for ABR testing.""" diff --git a/abr-testing/mypy.ini b/abr-testing/mypy.ini new file mode 100644 index 00000000000..eeb271520a5 --- /dev/null +++ b/abr-testing/mypy.ini @@ -0,0 +1,6 @@ +[mypy] +show_error_codes = True +strict = False + +[mypy-can.*] +ignore_missing_imports = True diff --git a/abr-testing/setup.py b/abr-testing/setup.py new file mode 100644 index 00000000000..5c5edb49993 --- /dev/null +++ b/abr-testing/setup.py @@ -0,0 +1,33 @@ +"""Setup script.""" + +import os +import sys + +from setuptools import setup, find_packages + +HERE = os.path.abspath(os.path.dirname(__file__)) +sys.path.append(os.path.join(HERE, "..", "scripts")) +from python_build_utils import normalize_version # noqa: E402 + + +def _get_version() -> None: + buildno = os.getenv("BUILD_NUMBER") + project = os.getenv("OPENTRONS_PROJECT", "ot3") + git_dir = os.getenv("OPENTRONS_GIT_DIR", None) + if buildno: + normalize_opts = {"extra_tag": buildno} + else: + normalize_opts = {} + return normalize_version("abr-testing", project, git_dir=git_dir, **normalize_opts) + + +setup( + name="abr_testing", + version=_get_version(), + packages=find_packages(where=".", exclude=["tests.*", "tests"]), + url="", + license="", + author="opentrons", + author_email="engineering@opentrons.com", + description="tools for running application-based reliability tests.", +) diff --git a/abr-testing/tests/conftest.py b/abr-testing/tests/conftest.py new file mode 100644 index 00000000000..dc52d11c3a7 --- /dev/null +++ b/abr-testing/tests/conftest.py @@ -0,0 +1 @@ +"""Pytest integrations."""