module-qc-database-tools 2.9.0__tar.gz → 2.10.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/.pre-commit-config.yaml +1 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/.zenodo.json +3 -3
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/CITATION.cff +2 -2
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/PKG-INFO +4 -4
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/README.md +1 -1
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/history.md +12 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/install.md +2 -2
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/pyproject.toml +8 -4
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/_version.py +2 -2
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/globals.py +3 -3
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/localdbtool_upload.py +4 -8
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/run_full_qc.py +159 -155
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/db/ls.py +43 -13
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/db/show_qc_pipeline.py +4 -1
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/iv/__init__.py +15 -2
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/utils.py +4 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/register.py +2 -1
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/tbump.toml +3 -3
- module_qc_database_tools-2.10.0/tests/test_iv.py +75 -0
- module_qc_database_tools-2.9.0/tests/test_iv.py +0 -34
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/.env.template +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/.gitattributes +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/.gitignore +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/.gitlab-ci.yml +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/.linkcheckerrc +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/LICENSE +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/ci/pre-commit-update.sh +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/.gitkeep +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/.overrides/main.html +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/.snippets/abbrs.txt +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/.snippets/links.txt +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/assets/css/custom.css +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/config.md +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/development.md +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/dynamic_docstring.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/index.md +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/iref_trim.md +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/meta/authors.md +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/reference/cli.md +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/reference/gen_ref_nav.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc-CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc0CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc1CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc2CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc3CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc5CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TjASc6CsQ.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic-CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic0CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic1CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic2CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic3CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic5CsTKlA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOjCnqEu92Fr1Mu51TzBic6CsQ.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xIIzI.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fBBc4.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfBBc4.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu4WxKOzY.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu4mxK.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu5mxKOzY.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu72xKOzY.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7WxKOzY.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/KFOmCnqEu92Fr1Mu7mxKOzY.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSV0mf0h.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSZ0mf0h.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSd0mf0h.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSh0mQ.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSt0mf0h.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xTDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vrtSM1J-gEPT5Ese6hmHSx0mf0h.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtElOUlYIw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEleUlYIw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEluUlYIw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEm-Ul.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEmOUlYIw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts/L0xdDF4xlVMF-BfR8bXMIjhOsXG-q2oeuFoqFrlnAIe2Imhk1T8rbociImtEn-UlYIw.woff2 +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/fonts.css +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/stylesheets/readme.txt +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/docs/yarr.md +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/mkdocs.yml +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/__init__.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/chip_config_api.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/__init__.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/__main__.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/assign_tag.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/download_component.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/fetch_reference_ivs.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/generate_yarr_config.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/get_bom_info.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/get_vfd_info.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/influxdbtool_retrieve.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/localdbtool_retrieve.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/main.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/pull_component.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/recycle_analysis.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/recycle_esummary.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/register_component.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/review_component.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/sync_component_stages.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/upload_measurement.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/cli/utils.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/core.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/data/YARR/chip_template.json +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/data/componentConfigs.json +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/db/__init__.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/db/local.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/db/prod.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/db/show_qc_status.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/db/show_test.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/db/upload_test.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/exceptions.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/iv/localdb.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/iv/proddb.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/models.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/recycle.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/review/__init__.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/review/checks.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/review/helpers.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/sync_component_stages/__init__.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/typing_compat.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/README.md +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/__init__.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/common.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/configs/influxdb_connectivity.json +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/db_logging.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/direct.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/indirect.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/localdb.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/login_mongodb.sh +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/setting/default/database.json +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/setting/default/dcs.dat +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/setting/default/dcs_info.json +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/setting/default/register_component_fei4b.json +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/setting/default/register_component_rd53a.json +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/setting/default/site.json +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/setting/default/user.json +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/setting/requirements-pip.txt +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/setting/requirements-yum.txt +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/src/module_qc_database_tools/yarr/setup_db.sh +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/tests/test_cli.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/tests/test_config_api.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/tests/test_package.py +0 -0
- {module_qc_database_tools-2.9.0 → module_qc_database_tools-2.10.0}/tests/test_utils.py +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"description": " general python tool for interfacing with databases during module QC tests for the ATLAS ITk project",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"title": "atlas-itk-pixel-modules/mqdbt: v2.
|
|
5
|
-
"version": "v2.
|
|
4
|
+
"title": "atlas-itk-pixel-modules/mqdbt: v2.10.0",
|
|
5
|
+
"version": "v2.10.0",
|
|
6
6
|
"upload_type": "software",
|
|
7
7
|
"creators": [
|
|
8
8
|
{
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"related_identifiers": [
|
|
81
81
|
{
|
|
82
82
|
"scheme": "url",
|
|
83
|
-
"identifier": "https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-database-tools/-/tree/v2.
|
|
83
|
+
"identifier": "https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-database-tools/-/tree/v2.10.0",
|
|
84
84
|
"relation": "isSupplementTo"
|
|
85
85
|
}
|
|
86
86
|
]
|
|
@@ -54,6 +54,6 @@ keywords:
|
|
|
54
54
|
license:
|
|
55
55
|
- mit
|
|
56
56
|
message: If you use this software, please cite it using the metadata from this file.
|
|
57
|
-
title: 'atlas-itk-pixel-modules/mqdbt: v2.
|
|
57
|
+
title: 'atlas-itk-pixel-modules/mqdbt: v2.10.0'
|
|
58
58
|
type: software
|
|
59
|
-
version: v2.
|
|
59
|
+
version: v2.10.0
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: module-qc-database-tools
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.10.0
|
|
4
4
|
Summary: Python wrapper to interface with LocalDB and Production DB for common tasks for pixel modules.
|
|
5
5
|
Project-URL: Homepage, https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-database-tools
|
|
6
6
|
Project-URL: Bug Tracker, https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-database-tools/issues
|
|
7
7
|
Project-URL: Source, https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-database-tools
|
|
8
|
-
Project-URL: Documentation, https://atlas-itk-pixel-mqdbt.docs.cern.ch/
|
|
8
|
+
Project-URL: Documentation, https://atlas-itk-pixel-mqdbt.docs.cern.ch/v2.10/
|
|
9
9
|
Author-email: Jay Chan <jay.chan@cern.ch>
|
|
10
10
|
Maintainer-email: Giordon Stark <kratsg@gmail.com>, Elisabetta Pianori <elisabetta.pianori@cern.ch>, Lingxin Meng <lingxin.meng@cern.ch>
|
|
11
11
|
License: Copyright (c) 2022 ATLAS ITk Pixel Modules
|
|
@@ -50,7 +50,7 @@ Requires-Dist: itkdb>=0.6.17
|
|
|
50
50
|
Requires-Dist: itksn>=0.4.2
|
|
51
51
|
Requires-Dist: jsbeautifier
|
|
52
52
|
Requires-Dist: jsondiff
|
|
53
|
-
Requires-Dist: module-qc-data-tools>=1.
|
|
53
|
+
Requires-Dist: module-qc-data-tools>=1.5.0
|
|
54
54
|
Requires-Dist: packaging
|
|
55
55
|
Requires-Dist: pandas
|
|
56
56
|
Requires-Dist: pyarrow
|
|
@@ -61,7 +61,7 @@ Requires-Dist: typing-extensions>=4.0; python_version < '3.10'
|
|
|
61
61
|
Requires-Dist: urllib3<2,>=1.26.20; 'el7.x86_64' in platform_release
|
|
62
62
|
Description-Content-Type: text/markdown
|
|
63
63
|
|
|
64
|
-
# Module QC Database Tools v2.
|
|
64
|
+
# Module QC Database Tools v2.10.0
|
|
65
65
|
|
|
66
66
|
The package to regisiter ITkPixV1.1 modules, and generate YARR configs from ITk
|
|
67
67
|
production database using `itkdb` API.
|
|
@@ -12,8 +12,20 @@ and this project adheres to
|
|
|
12
12
|
|
|
13
13
|
**_Changed:_**
|
|
14
14
|
|
|
15
|
+
- increase mqdt version to v1.5.0 and use centralised cold/warm stage lists
|
|
16
|
+
(!148)
|
|
17
|
+
- update `run-full-qc` (!146)
|
|
18
|
+
- use typer everywhere for better self-documentation, remove argparse
|
|
19
|
+
- only use controller config provided by hw config, remove the `-r` option
|
|
20
|
+
- get LDB config from hw config
|
|
21
|
+
- consistent long options using double-dash
|
|
22
|
+
|
|
15
23
|
**_Added:_**
|
|
16
24
|
|
|
25
|
+
- extend `fetch-reference-iv` to HV groups (!151)
|
|
26
|
+
- add an option `-c` in `ls` so that it can list the current location of
|
|
27
|
+
components (!149)
|
|
28
|
+
|
|
17
29
|
**_Fixed:_**
|
|
18
30
|
|
|
19
31
|
## [2.9.0](https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-database-tools/-/tags/v2.9.0) - 2025-10-29 ## {: #mqdbt-v2.9.0 }
|
|
@@ -90,7 +90,7 @@ package.
|
|
|
90
90
|
$ python -m venv venv
|
|
91
91
|
$ source venv/bin/activate
|
|
92
92
|
$ python -m pip install -U pip
|
|
93
|
-
$ python -m pip install -U pip module-qc-database-tools==2.
|
|
93
|
+
$ python -m pip install -U pip module-qc-database-tools==2.10.0
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
### via uv
|
|
@@ -99,7 +99,7 @@ $ python -m pip install -U pip module-qc-database-tools==2.9.0
|
|
|
99
99
|
$ python -m venv venv
|
|
100
100
|
$ source venv/bin/activate
|
|
101
101
|
$ python -m pip install uv
|
|
102
|
-
$ uv pip install module-qc-database-tools==2.
|
|
102
|
+
$ uv pip install module-qc-database-tools==2.10.0
|
|
103
103
|
```
|
|
104
104
|
|
|
105
105
|
# Usage
|
|
@@ -35,7 +35,7 @@ dependencies = [
|
|
|
35
35
|
"arrow",
|
|
36
36
|
"packaging",
|
|
37
37
|
"typing_extensions >=4.0; python_version<'3.10'",
|
|
38
|
-
"module_qc_data_tools>=1.
|
|
38
|
+
"module_qc_data_tools>=1.5.0",
|
|
39
39
|
]
|
|
40
40
|
classifiers = [
|
|
41
41
|
"License :: OSI Approved :: MIT License",
|
|
@@ -60,7 +60,7 @@ classifiers = [
|
|
|
60
60
|
Homepage = "https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-database-tools"
|
|
61
61
|
"Bug Tracker" = "https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-database-tools/issues"
|
|
62
62
|
Source = "https://gitlab.cern.ch/atlas-itk/pixel/module/module-qc-database-tools"
|
|
63
|
-
"Documentation" = "https://atlas-itk-pixel-mqdbt.docs.cern.ch/
|
|
63
|
+
"Documentation" = "https://atlas-itk-pixel-mqdbt.docs.cern.ch/v2.10/"
|
|
64
64
|
|
|
65
65
|
[project.scripts]
|
|
66
66
|
module-qc-database-tools = "module_qc_database_tools.cli:app"
|
|
@@ -70,7 +70,11 @@ registerComponent = "module_qc_database_tools.cli.register_component:app"
|
|
|
70
70
|
influxdbtool-retrieve = "module_qc_database_tools.cli.influxdbtool_retrieve:main"
|
|
71
71
|
localdbtool-retrieve = "module_qc_database_tools.cli.localdbtool_retrieve:main"
|
|
72
72
|
localdbtool-upload = "module_qc_database_tools.cli.localdbtool_upload:main"
|
|
73
|
-
run-full-qc = "module_qc_database_tools.cli.run_full_qc:
|
|
73
|
+
run-full-qc = "module_qc_database_tools.cli.run_full_qc:app"
|
|
74
|
+
|
|
75
|
+
[dependency-groups]
|
|
76
|
+
dev = [ { include-group = "test" } ]
|
|
77
|
+
test = [ "pytest" ]
|
|
74
78
|
|
|
75
79
|
[tool.hatch.version]
|
|
76
80
|
source = "vcs"
|
|
@@ -247,9 +251,9 @@ filterwarnings = [
|
|
|
247
251
|
"error",
|
|
248
252
|
'ignore:unclosed file:ResourceWarning', # itkdb
|
|
249
253
|
]
|
|
250
|
-
|
|
251
254
|
testpaths = ["tests"]
|
|
252
255
|
log_cli_level = "INFO"
|
|
256
|
+
log_level = "INFO"
|
|
253
257
|
|
|
254
258
|
[tool.repo-review]
|
|
255
259
|
ignore = [
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '2.
|
|
32
|
-
__version_tuple__ = version_tuple = (2,
|
|
31
|
+
__version__ = version = '2.10.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (2, 10, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -206,14 +206,14 @@ OPTIONS["serial_number"]: str = typer.Option(
|
|
|
206
206
|
...,
|
|
207
207
|
"--sn",
|
|
208
208
|
"--serial-number",
|
|
209
|
-
help="
|
|
209
|
+
help="Component serial number",
|
|
210
210
|
callback=sn_callback,
|
|
211
211
|
)
|
|
212
212
|
OPTIONS["serial_numbers"]: list[str] = typer.Option(
|
|
213
213
|
...,
|
|
214
214
|
"--sns",
|
|
215
215
|
"--serial-numbers",
|
|
216
|
-
help="
|
|
216
|
+
help="Component serial numbers. Example for list of SNs: --sns SN1 --sns SN2 --sns SN3....",
|
|
217
217
|
callback=sns_callback,
|
|
218
218
|
)
|
|
219
219
|
OPTIONS["stage"]: str = typer.Option(..., "-stage", "--stage", help="Stage to use")
|
|
@@ -305,7 +305,7 @@ OPTIONS_serial_number = Annotated[
|
|
|
305
305
|
typer.Option(
|
|
306
306
|
"--sn",
|
|
307
307
|
"--serial-number",
|
|
308
|
-
help="
|
|
308
|
+
help="Component serial number",
|
|
309
309
|
callback=sn_callback,
|
|
310
310
|
),
|
|
311
311
|
]
|
|
@@ -19,7 +19,9 @@ from datetime import datetime, timezone
|
|
|
19
19
|
from pathlib import Path
|
|
20
20
|
|
|
21
21
|
from module_qc_data_tools.utils import (
|
|
22
|
+
cold_stages,
|
|
22
23
|
get_chip_type_from_config,
|
|
24
|
+
warm_stages,
|
|
23
25
|
)
|
|
24
26
|
|
|
25
27
|
from module_qc_database_tools import exceptions, yarr
|
|
@@ -513,14 +515,8 @@ def writeScan(self, i_dir):
|
|
|
513
515
|
stage = conn_json.get("stage")
|
|
514
516
|
|
|
515
517
|
branch = "default"
|
|
516
|
-
warm_list =
|
|
517
|
-
|
|
518
|
-
"PARYLENE_UNMASKING",
|
|
519
|
-
"WIREBOND_PROTECTION",
|
|
520
|
-
"THERMAL_CYCLES",
|
|
521
|
-
"LONG_TERM_STABILITY_TEST",
|
|
522
|
-
]
|
|
523
|
-
cold_list = ["COLD"]
|
|
518
|
+
warm_list = warm_stages
|
|
519
|
+
cold_list = cold_stages
|
|
524
520
|
|
|
525
521
|
if any(phrase in stage for phrase in warm_list):
|
|
526
522
|
branch = "warm"
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import argparse
|
|
4
3
|
import json
|
|
5
4
|
import logging
|
|
6
5
|
import os
|
|
@@ -9,6 +8,7 @@ import subprocess
|
|
|
9
8
|
import sys
|
|
10
9
|
from datetime import datetime
|
|
11
10
|
from pathlib import Path
|
|
11
|
+
from typing import Optional
|
|
12
12
|
|
|
13
13
|
# from typing import Optional
|
|
14
14
|
import itksn
|
|
@@ -19,7 +19,10 @@ from module_qc_data_tools.utils import (
|
|
|
19
19
|
get_layer_from_sn,
|
|
20
20
|
)
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
from module_qc_database_tools.cli.globals import CONTEXT_SETTINGS, OPTIONS, Protocol
|
|
23
|
+
from module_qc_database_tools.cli.utils import load_localdb_config_from_hw
|
|
24
|
+
|
|
25
|
+
app = typer.Typer(context_settings=CONTEXT_SETTINGS)
|
|
23
26
|
|
|
24
27
|
# Logging
|
|
25
28
|
logger = logging.getLogger(__name__)
|
|
@@ -38,20 +41,23 @@ class FullQCConf:
|
|
|
38
41
|
## commandline
|
|
39
42
|
self.BASEDIR = Path.home()
|
|
40
43
|
self.MODULESN = ""
|
|
41
|
-
|
|
42
|
-
self.LDBPORT = "5000"
|
|
43
|
-
self.PROTOCOL = "http"
|
|
44
|
+
## required
|
|
44
45
|
self.CONNECTIVITY = (
|
|
45
46
|
self.BASEDIR / self.MODULESN / f"{self.MODULESN}_{self.TYPE}.json"
|
|
46
47
|
)
|
|
47
|
-
self.CONTROLLER = "configs/controller/specCfg-rd53b-16x1.json"
|
|
48
48
|
self.CONFIG = self.BASEDIR / "configs" / "new_hw_config.json"
|
|
49
|
+
## optional
|
|
49
50
|
self.MEASCONFIG = ""
|
|
50
51
|
self.OUTPUT = self.BASEDIR / self.MODULESN
|
|
52
|
+
self.LDBHOST = "localhost"
|
|
53
|
+
self.LDBPORT = 5000
|
|
54
|
+
self.PROTOCOL = "http"
|
|
55
|
+
self.TAGS = []
|
|
51
56
|
|
|
52
57
|
## fixed
|
|
53
58
|
## will be overwritten from HW config
|
|
54
59
|
self.YARR = self.BASEDIR / "Yarr"
|
|
60
|
+
self.CONTROLLER = Path("configs/controller/specCfg-rd53b-16x1.json")
|
|
55
61
|
## will be overwritten from module connectivity file path
|
|
56
62
|
self.MODULEDIR = self.BASEDIR / self.MODULESN
|
|
57
63
|
## will be overwritten depending on module SN
|
|
@@ -86,7 +92,7 @@ class FullQCConf:
|
|
|
86
92
|
str(self.OUTPUT),
|
|
87
93
|
]
|
|
88
94
|
if self.MEASCONFIG:
|
|
89
|
-
cmd.extend(["
|
|
95
|
+
cmd.extend(["--cm", self.MEASCONFIG])
|
|
90
96
|
|
|
91
97
|
subprocess.run(cmd, check=True)
|
|
92
98
|
|
|
@@ -113,21 +119,24 @@ class FullQCConf:
|
|
|
113
119
|
|
|
114
120
|
# Upload measurements and generate analysis results
|
|
115
121
|
ana_results = ana_dir / f"{self.MODULESN}.json"
|
|
122
|
+
cmd = [
|
|
123
|
+
"mqdbt",
|
|
124
|
+
"upload-measurement",
|
|
125
|
+
"--path",
|
|
126
|
+
str(last_meas_path),
|
|
127
|
+
"--host",
|
|
128
|
+
self.LDBHOST,
|
|
129
|
+
"--port",
|
|
130
|
+
str(self.LDBPORT),
|
|
131
|
+
"--protocol",
|
|
132
|
+
self.PROTOCOL,
|
|
133
|
+
"--out",
|
|
134
|
+
str(ana_results),
|
|
135
|
+
]
|
|
136
|
+
tags = [f"--tag {item}" for item in self.TAGS]
|
|
137
|
+
cmd.extend(tags)
|
|
116
138
|
subprocess.run(
|
|
117
|
-
|
|
118
|
-
"mqdbt",
|
|
119
|
-
"upload-measurement",
|
|
120
|
-
"--path",
|
|
121
|
-
str(last_meas_path),
|
|
122
|
-
"--host",
|
|
123
|
-
self.LDBHOST,
|
|
124
|
-
"--port",
|
|
125
|
-
self.LDBPORT,
|
|
126
|
-
"--protocol",
|
|
127
|
-
self.PROTOCOL,
|
|
128
|
-
"--out",
|
|
129
|
-
str(ana_results),
|
|
130
|
-
],
|
|
139
|
+
cmd,
|
|
131
140
|
check=True,
|
|
132
141
|
)
|
|
133
142
|
|
|
@@ -164,74 +173,6 @@ class FullQCConf:
|
|
|
164
173
|
|
|
165
174
|
return 0
|
|
166
175
|
|
|
167
|
-
def get_args(self):
|
|
168
|
-
"""
|
|
169
|
-
Function using argparse to parse commandline arguments.
|
|
170
|
-
"""
|
|
171
|
-
parser = argparse.ArgumentParser()
|
|
172
|
-
parser.add_argument(
|
|
173
|
-
"-b", "--basedir", type=Path, default=self.BASEDIR, help="Base directory."
|
|
174
|
-
)
|
|
175
|
-
parser.add_argument("-sn", "--modulesn", type=str, help="Module serial number.")
|
|
176
|
-
parser.add_argument(
|
|
177
|
-
"-m",
|
|
178
|
-
"--module-connectivity",
|
|
179
|
-
default=self.CONNECTIVITY,
|
|
180
|
-
type=Path,
|
|
181
|
-
help="Path to module connectivity file.",
|
|
182
|
-
)
|
|
183
|
-
parser.add_argument(
|
|
184
|
-
"-r",
|
|
185
|
-
"--controller",
|
|
186
|
-
type=Path,
|
|
187
|
-
default=self.CONTROLLER,
|
|
188
|
-
help="Path to module connectivity file.",
|
|
189
|
-
)
|
|
190
|
-
parser.add_argument(
|
|
191
|
-
"-c",
|
|
192
|
-
"--config",
|
|
193
|
-
type=Path,
|
|
194
|
-
required=True,
|
|
195
|
-
help="Path to hardware config file",
|
|
196
|
-
)
|
|
197
|
-
parser.add_argument(
|
|
198
|
-
"-cm", "--measconfig", type=Path, help="Path to measurement config file"
|
|
199
|
-
)
|
|
200
|
-
parser.add_argument(
|
|
201
|
-
"-o",
|
|
202
|
-
"--output",
|
|
203
|
-
type=Path,
|
|
204
|
-
default=self.OUTPUT,
|
|
205
|
-
help="Path to output directory",
|
|
206
|
-
)
|
|
207
|
-
parser.add_argument("--port", type=str, default=self.LDBPORT, help="LDB port")
|
|
208
|
-
parser.add_argument("--host", type=str, default=self.LDBHOST, help="LDB host")
|
|
209
|
-
parser.add_argument(
|
|
210
|
-
"--protocol",
|
|
211
|
-
type=str,
|
|
212
|
-
default=self.PROTOCOL,
|
|
213
|
-
help="Protocol - http or https.",
|
|
214
|
-
)
|
|
215
|
-
|
|
216
|
-
tests = parser.add_argument_group("tests")
|
|
217
|
-
tests.add_argument(
|
|
218
|
-
"-iv",
|
|
219
|
-
action="store_true",
|
|
220
|
-
help="Run sensor leakage current vs bias voltage.",
|
|
221
|
-
)
|
|
222
|
-
tests.add_argument(
|
|
223
|
-
"-cal", action="store_true", help="Run CALibration measurements."
|
|
224
|
-
)
|
|
225
|
-
tests.add_argument("-mht", action="store_true", help="Run Minimum Health Test.")
|
|
226
|
-
tests.add_argument("-tun", action="store_true", help="Run TUNing.")
|
|
227
|
-
tests.add_argument(
|
|
228
|
-
"-pfa", action="store_true", help="Run Pixel Failure Analysis."
|
|
229
|
-
)
|
|
230
|
-
args = parser.parse_args()
|
|
231
|
-
|
|
232
|
-
logger.info(args)
|
|
233
|
-
return parser, args
|
|
234
|
-
|
|
235
176
|
def run_scan(self, scan_name, scan_output, tag):
|
|
236
177
|
"""
|
|
237
178
|
Function to concatenate commands and run YARR scan
|
|
@@ -411,27 +352,90 @@ class FullQCConf:
|
|
|
411
352
|
return 0
|
|
412
353
|
|
|
413
354
|
|
|
355
|
+
@app.command()
|
|
414
356
|
def main(
|
|
415
357
|
# MODULESN: Optional[str] = OPTIONS["serial_number"],
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
358
|
+
CONNECTIVITY: Path = typer.Option(
|
|
359
|
+
...,
|
|
360
|
+
"-m",
|
|
361
|
+
"--module-connectivity",
|
|
362
|
+
help="path to the module connectivity. Used also to identify the module SN, and to set the default output directory",
|
|
363
|
+
exists=True,
|
|
364
|
+
file_okay=True,
|
|
365
|
+
readable=True,
|
|
366
|
+
writable=True,
|
|
367
|
+
resolve_path=True,
|
|
368
|
+
),
|
|
369
|
+
CONFIG: Path = typer.Option(
|
|
370
|
+
...,
|
|
371
|
+
"-c",
|
|
372
|
+
"--config",
|
|
373
|
+
help="Hardware Config file path",
|
|
374
|
+
exists=True,
|
|
375
|
+
file_okay=True,
|
|
376
|
+
readable=True,
|
|
377
|
+
resolve_path=True,
|
|
378
|
+
is_eager=True, # must be eagerly evaluated first so we can check it in config_callback()
|
|
379
|
+
),
|
|
380
|
+
MODULESN: Optional[str] = typer.Option( # noqa: UP045
|
|
381
|
+
None,
|
|
382
|
+
"--sn",
|
|
383
|
+
"--serial-number",
|
|
384
|
+
help="Module serial number",
|
|
385
|
+
),
|
|
386
|
+
BASEDIR: Optional[Path] = OPTIONS["base_dir"], # noqa: UP045
|
|
387
|
+
OUTPUT: Optional[Path] = typer.Option( # noqa: UP045
|
|
388
|
+
None,
|
|
389
|
+
"-o",
|
|
390
|
+
"--output",
|
|
391
|
+
help="Path to output directory.",
|
|
392
|
+
exists=False,
|
|
393
|
+
writable=True,
|
|
394
|
+
),
|
|
395
|
+
MEASCONFIG: Optional[Path] = typer.Option( # noqa: UP045
|
|
396
|
+
None,
|
|
397
|
+
"--cm",
|
|
398
|
+
"--measconfig",
|
|
399
|
+
help="Path to measurement config file.",
|
|
400
|
+
exists=True,
|
|
401
|
+
file_okay=True,
|
|
402
|
+
readable=True,
|
|
403
|
+
),
|
|
404
|
+
LDBHOST: str = OPTIONS["host"],
|
|
405
|
+
LDBPORT: int = OPTIONS["port"],
|
|
406
|
+
PROTOCOL: Protocol = OPTIONS["protocol"],
|
|
407
|
+
TAGS: list[str] = OPTIONS["tags"],
|
|
408
|
+
iv: bool = typer.Option(
|
|
409
|
+
False,
|
|
410
|
+
"--iv",
|
|
411
|
+
help="Measure sensor leakage current vs bias voltage.",
|
|
412
|
+
),
|
|
413
|
+
cal: bool = typer.Option(
|
|
414
|
+
False,
|
|
415
|
+
"--cal",
|
|
416
|
+
help="Run calibration measurements, e.g. ADC calibration, analog readback, SLDO, Vcal calibration and injection capacitance.",
|
|
417
|
+
),
|
|
418
|
+
mht: bool = typer.Option(
|
|
419
|
+
False,
|
|
420
|
+
"--mht",
|
|
421
|
+
help="Run scans required for Minimum Health Test.",
|
|
422
|
+
),
|
|
423
|
+
tun: bool = typer.Option(
|
|
424
|
+
False,
|
|
425
|
+
"--tun",
|
|
426
|
+
help="Run scans required for Tuning.",
|
|
427
|
+
),
|
|
428
|
+
pfa: bool = typer.Option(
|
|
429
|
+
False,
|
|
430
|
+
"--pfa",
|
|
431
|
+
help="Run scans required for Pixel Failure Analysis.",
|
|
432
|
+
),
|
|
427
433
|
# dry_run: bool = OPTIONS["dry_run"],
|
|
428
|
-
# CONTROLLER: Optional[Path] = OPTIONS["controller_config"],
|
|
429
|
-
# CONNECTIVITY: Path = OPTIONS["module_connectivity"],
|
|
430
|
-
# CONFIG: Path = OPTIONS["config_hw"],
|
|
431
434
|
# _verbosity: LogLevel = OPTIONS["verbosity"]
|
|
432
435
|
):
|
|
433
436
|
"""
|
|
434
|
-
|
|
437
|
+
Execute all QC scans if no test is specified.
|
|
438
|
+
If any tests are specified, only those are run.
|
|
435
439
|
|
|
436
440
|
For instructions in case of core column issues, see https://codimd.web.cern.ch/s/iTKWoRkuP .
|
|
437
441
|
|
|
@@ -447,69 +451,64 @@ def main(
|
|
|
447
451
|
|
|
448
452
|
qc = FullQCConf()
|
|
449
453
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
qc.CONTROLLER = args.controller
|
|
475
|
-
|
|
476
|
-
if args.output:
|
|
477
|
-
qc.OUTPUT = args.output
|
|
478
|
-
|
|
479
|
-
if args.port:
|
|
480
|
-
qc.LDBPORT = args.port
|
|
481
|
-
|
|
482
|
-
if args.host:
|
|
483
|
-
qc.LDBHOST = args.host
|
|
484
|
-
|
|
485
|
-
if args.protocol:
|
|
486
|
-
qc.PROTOCOL = args.protocol
|
|
454
|
+
qc.CONNECTIVITY = CONNECTIVITY or qc.CONNECTIVITY
|
|
455
|
+
qc.CONFIG = CONFIG or qc.CONFIG
|
|
456
|
+
with Path.open(qc.CONFIG, encoding="utf-8") as _hwconf:
|
|
457
|
+
config_hw = json.load(_hwconf)
|
|
458
|
+
qc.YARR = Path(config_hw["yarr"]["run_dir"])
|
|
459
|
+
qc.CONTROLLER = Path(config_hw["yarr"]["controller"])
|
|
460
|
+
|
|
461
|
+
qc.MODULESN = MODULESN
|
|
462
|
+
qc.BASEDIR = BASEDIR or qc.BASEDIR
|
|
463
|
+
qc.MEASCONFIG = MEASCONFIG
|
|
464
|
+
qc.OUTPUT = OUTPUT or qc.OUTPUT
|
|
465
|
+
|
|
466
|
+
# Load hardware config and override parameters if provided
|
|
467
|
+
hw_config_data = load_localdb_config_from_hw(qc.CONFIG)
|
|
468
|
+
host = hw_config_data.get("host", LDBHOST)
|
|
469
|
+
port = hw_config_data.get("port", LDBPORT)
|
|
470
|
+
protocol = Protocol(hw_config_data.get("protocol", PROTOCOL.value))
|
|
471
|
+
# Merge tags from config with CLI tags
|
|
472
|
+
config_tags = hw_config_data.get("tags", [])
|
|
473
|
+
|
|
474
|
+
qc.LDBPORT = port or LDBPORT
|
|
475
|
+
qc.LDBHOST = host or LDBHOST
|
|
476
|
+
qc.PROTOCOL = protocol or PROTOCOL.value
|
|
477
|
+
qc.TAGS = list(set(TAGS + config_tags))
|
|
487
478
|
|
|
488
479
|
if not qc.MODULESN:
|
|
489
480
|
qc.MODULESN = (
|
|
490
481
|
str(qc.CONNECTIVITY).rsplit("/", maxsplit=1)[-1].split("_", maxsplit=1)[0]
|
|
491
482
|
)
|
|
492
|
-
|
|
493
483
|
qc.CHIPTYPE = get_chip_type_from_serial_number(qc.MODULESN).lower()
|
|
494
484
|
qc.TYPE = get_config_type_from_connectivity_path(qc.CONNECTIVITY)
|
|
495
485
|
qc.LPTYPE = "_".join([qc.TYPE.split("_", maxsplit=1)[0], "LP"])
|
|
496
486
|
qc.MODULEDIR = qc.CONNECTIVITY.parent
|
|
497
487
|
|
|
498
|
-
_tests = [
|
|
499
|
-
|
|
500
|
-
|
|
488
|
+
_tests = []
|
|
489
|
+
if iv:
|
|
490
|
+
_tests.append("iv")
|
|
491
|
+
if cal:
|
|
492
|
+
_tests.append("cal")
|
|
493
|
+
if mht:
|
|
494
|
+
_tests.append("mht")
|
|
495
|
+
if tun:
|
|
496
|
+
_tests.append("tun")
|
|
497
|
+
if pfa:
|
|
498
|
+
_tests.append("pfa")
|
|
501
499
|
|
|
502
500
|
logger.info("Hardware config: %s", qc.CONFIG)
|
|
503
501
|
logger.info("Module connectivity: %s", qc.CONNECTIVITY)
|
|
504
502
|
logger.info("Output directory: %s", qc.OUTPUT)
|
|
505
|
-
|
|
503
|
+
logger.debug(locals())
|
|
506
504
|
try:
|
|
507
505
|
_cmd = ["analysis-check-kshunt-in-chip-config", "-c", qc.MODULEDIR]
|
|
508
506
|
subprocess.run(_cmd, check=True)
|
|
509
507
|
except Exception as e: # pylint: disable=broad-exception-caught
|
|
510
508
|
logger.warning("!!! Not able to update k-factors in the chip config %s !!!", e)
|
|
511
509
|
|
|
512
|
-
if
|
|
510
|
+
## if no test specified, then run full QC
|
|
511
|
+
if not any([iv, cal, mht, tun, pfa]):
|
|
513
512
|
logger.info("No single tests specified, running full QC.")
|
|
514
513
|
## if not digital, run measure(IV)
|
|
515
514
|
info = itksn.parse(qc.MODULESN.encode("utf-8"))
|
|
@@ -533,12 +532,9 @@ def main(
|
|
|
533
532
|
qc.pfa()
|
|
534
533
|
logger.info("Script completed successfully.")
|
|
535
534
|
else:
|
|
536
|
-
for item in _tests
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
logger.debug(type(item))
|
|
540
|
-
|
|
541
|
-
if getattr(args, item.dest):
|
|
535
|
+
for _index, item in enumerate(_tests):
|
|
536
|
+
# Run eye diagram only if the test is not IV
|
|
537
|
+
if item != "iv":
|
|
542
538
|
# Run eye diagram
|
|
543
539
|
subprocess.run(
|
|
544
540
|
[
|
|
@@ -551,8 +547,16 @@ def main(
|
|
|
551
547
|
cwd=qc.YARR,
|
|
552
548
|
check=True,
|
|
553
549
|
)
|
|
554
|
-
|
|
550
|
+
else:
|
|
551
|
+
# Skip IV if digital module
|
|
552
|
+
info = itksn.parse(qc.MODULESN.encode("utf-8"))
|
|
553
|
+
if "digital" in info.component_code.title().lower():
|
|
554
|
+
logger.warning(
|
|
555
|
+
"%s is a digital module, will not run IV.", qc.MODULESN
|
|
556
|
+
)
|
|
557
|
+
continue
|
|
558
|
+
exec(f"qc.{item}()") # pylint: disable=exec-used
|
|
555
559
|
|
|
556
560
|
|
|
557
561
|
if __name__ == "__main__":
|
|
558
|
-
main
|
|
562
|
+
typer.run(main)
|