diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 5d4e81e..90dbf9e 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -12,12 +12,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Install poetry - run: pipx install poetry==1.3.2 + + - name: Install hatch + run: pipx install hatch + - uses: actions/setup-python@v4 with: - python-version: "3.10" - cache: "poetry" + python-version: "3.11" + - name: Install system deps run: | sudo apt-get update @@ -27,11 +29,11 @@ jobs: python3-gi \ gobject-introspection \ libgtk-3-dev - - name: Poetry install - run: poetry install - - name: Pytest - run: poetry run pytest --cov --cov-report=xml + + - name: Run pytest + run: hatch run test + - name: Coveralls - run: poetry run coveralls + run: hatch run coveralls env: COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_TOKEN }} diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 3c621a9..9ed01bd 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -11,12 +11,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Install poetry - run: pipx install poetry==1.3.2 + + - name: Install hatch + run: pipx install hatch + - uses: actions/setup-python@v4 with: - python-version: "3.10" - cache: "poetry" + python-version: "3.11" + - name: Install system deps run: | sudo apt-get update @@ -26,18 +28,9 @@ jobs: python3-gi \ gobject-introspection \ libgtk-4-dev - - name: Poetry install - run: poetry install - - name: Ruff - run: poetry run ruff check . - - name: Ruff format - run: poetry run ruff format --check --diff . - - name: Mypy - run: poetry run mypy - - name: Pytest - run: poetry run pytest - - name: Test AppImage build - run: poetry run make clean-build + + - name: Run project checks + run: hatch run check publish: name: Build & Publish @@ -46,12 +39,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Install poetry - run: pipx install poetry==1.3.2 + + - name: Install hatch + run: pipx install hatch + - uses: actions/setup-python@v4 with: - python-version: "3.10" - cache: "poetry" + python-version: "3.11" + - name: Install system deps run: | sudo apt-get update @@ -61,27 +56,18 @@ jobs: python3-gi \ gobject-introspection \ libgtk-4-dev - - name: Poetry install - run: poetry install - # Prepare Release - - name: Build AppImage - run: poetry run make clean-build - - name: Draft release - uses: softprops/action-gh-release@v1 + + - name: Build Python package + run: hatch build + + - name: Publish to PyPi + uses: pypa/gh-action-pypi-publish@release/v1 with: - files: | - *.AppImage - body: - See [CHANGELOG](https://github.com/dynobo/keyhint/blob/main/CHANGELOG.md) - for details. - draft: true - prerelease: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # Publish to PyPi - - name: Build and publish to PyPi - run: | - poetry publish \ - --build \ - --username __token__ \ - --password ${{ secrets.PYPI_KEYHINT_TOKEN }} + verbose: true + print-hash: true + + - name: Sign published artifacts + uses: sigstore/gh-action-sigstore-python@v2.1.0 + with: + inputs: ./dist/*.tar.gz ./dist/*.whl + release-signing-artifacts: true diff --git a/.gitignore b/.gitignore index 217576e..50d1280 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,10 @@ cheatsheet.jpeg -.venv +.virtualenvs .vscode run.sh *.*~ -*.AppImage -*.bin -keyhint.dist-info/ -app.build -app.onefile-build -app.dist +.envrc +.ruff_cache # Byte-compiled / optimized / DLL files diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2b3094b..c764d46 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,13 +1,16 @@ # See https://pre-commit.com/ for usage and config +fail_fast: true + repos: - repo: https://github.com/compilerla/conventional-pre-commit - rev: v2.1.1 + rev: v2.4.0 hooks: - id: conventional-pre-commit stages: [commit-msg] - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.0.1 + rev: v4.5.0 hooks: + - id: check-ast - id: check-yaml - id: check-toml - id: end-of-file-fixer @@ -17,53 +20,9 @@ repos: - id: mixed-line-ending - repo: local hooks: - - id: mdformat - name: mdformat - stages: [commit] - language: system - entry: poetry run mdformat --wrap 88 - types: [markdown] - - - id: ruff-format - name: ruff-format - stages: [commit] - language: system - entry: poetry run ruff format . - types: [python] - - - id: pip-audit - name: pip-audit - stages: [commit] - language: system - entry: - bash -c "poetry run pip-audit --strict -r <(poetry export -f requirements.txt - --with dev | sed 's/\[.*\]//g' | sed -z 's/\n\W//g' | sed -z 's/\\//g' | uniq - )" - # First `sed` removes potential "[]" after package names - # Second `sed` removes "\n" in front of "--hash" to get one line per package - # Final `uniq` is the used to de-duplicated those lines - pass_filenames: false - - - id: ruff - name: ruff - stages: [commit] - language: system - entry: poetry run ruff --fix . - types: [python] - pass_filenames: false - - - id: mypy - name: mypy - stages: [commit] - language: system - entry: poetry run mypy - types: [python] - pass_filenames: false - - - id: pytest - name: pytest + - id: check + name: run project checks stages: [commit] language: system - entry: poetry run pytest tests/ -vv --cov --cov-report html - types: [python] + entry: hatch run pre-commit pass_filenames: false diff --git a/Makefile b/Makefile deleted file mode 100644 index a24f3f0..0000000 --- a/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -SHELL := /bin/bash - -.ONESHELL: -clean: - rm -rf ./app.onefile-build - rm -rf ./app.build - rm -rf ./app.dist - -.ONESHELL: -build: - python -m nuitka \ - --onefile \ - --assume-yes-for-downloads \ - --enable-plugin=no-qt \ - --include-data-dir=keyhint/config=keyhint/config \ - --include-data-dir=keyhint/resources=keyhint/resources \ - --linux-icon=keyhint/resources/keyhint.svg \ - --file-version=0.2.4 \ - --product-name=KeyHint \ - -o KeyHint-0.3.0-x86_64.AppImage \ - keyhint/app.py - -clean-build: clean build diff --git a/coverage.lcov b/coverage.lcov new file mode 100644 index 0000000..d549e8d --- /dev/null +++ b/coverage.lcov @@ -0,0 +1,575 @@ +TN: +SF:keyhint/__init__.py +DA:1,1,JVYnb1/EJCyGQpWqpTFL5g +DA:3,1,Efb49MKd56QV+SLbhmZMdg +DA:4,1,JZX8GkrrpUBXU9gpF4mdvg +LF:3 +LH:3 +BRF:0 +BRH:0 +end_of_record +TN: +SF:keyhint/__main__.py +DA:2,0,liWcCQrN18yavIjzZVOP5Q +DA:4,0,xQVNdxAJxuGw1z9RcZmDQw +DA:5,0,JWmhcOQG0s6sa//TNG3XNw +LF:3 +LH:0 +BRDA:0,0,0,- +BRDA:5,0,1,- +BRF:2 +BRH:0 +end_of_record +TN: +SF:keyhint/app.py +DA:6,0,EZEzNmL93PY96zsSuI0PfQ +DA:7,0,mUDsnWRiqW9R9nTILGKIZg +DA:8,0,8PJGtTgysgKXMIGZ1AQPvw +DA:9,0,gGTQvjsCFZRTAK01JA8k5Q +DA:11,0,Ta0G4XDzz58BwghU5jkokg +DA:13,0,VgIzLGQDfA6a4biFkb621w +DA:15,0,iqY7sCdR+oBWlmppA8tnKQ +DA:17,0,/ZMxV8N/oIShEYWnVUumkg +DA:19,0,Hx7++Dtn6JigywceSgqFCw +DA:24,0,kqAv4CRNj8TUJtZxnHA1ww +DA:27,0,p3E2tYFMXS0qxEMRCxNpnA +DA:36,0,RDxJteQW6J0RPVycXepDOQ +DA:38,0,e7JGPQ/fHquKSxaFrFV7eQ +DA:44,0,VtBTGPACMp8SPDOS8Zclyw +DA:46,0,y3O6X5lr1DZiKMumm4IA1Q +DA:54,0,y3O6X5lr1DZiKMumm4IA1Q +DA:62,0,y3O6X5lr1DZiKMumm4IA1Q +DA:71,0,GPSQfzX4vN0TczlrENJzzg +DA:73,0,b6aEXcr9gbGag5NBZdcsHA +DA:74,0,I5peusBa/hKSZqK7v3mJMQ +DA:75,0,4kESaevitFmDqEyg8ht41A +DA:77,0,bBOykNc2j2lHks4/M98m7Q +DA:79,0,Xi4i/FoTQANpWRHigq5mwQ +DA:81,0,PbFg/mRmoLtLXSZ2otC3bw +DA:82,0,fOfeQxAxX+k6vZZ80DpRDQ +DA:83,0,au2ZRg/TXbo/IsuPYCE2NA +DA:85,0,5VvUCcJBuEewcJfyuiXX6A +DA:86,0,6rgBhtkd42TFIDwa61jENA +DA:89,0,anLwUjx/Sxmj/0lcG6qlxQ +DA:91,0,L1iqQg/saFZAOD+GYemH3Q +DA:92,0,1IvJ0RG0xK0BNhABnV36sg +DA:95,0,xQVNdxAJxuGw1z9RcZmDQw +DA:96,0,2loYFqKsWTLg8EsfxY4sxw +LF:33 +LH:0 +BRDA:82,0,0,- +BRDA:85,0,1,- +BRDA:0,1,0,- +BRDA:96,1,1,- +BRF:4 +BRH:0 +end_of_record +TN: +SF:keyhint/config/__init__.py +LF:0 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:keyhint/resources/__init__.py +LF:0 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:keyhint/utils.py +DA:1,1,70QomK9cLWBjKHede+6unQ +DA:3,1,OaTlemF3bXMi5MP7Db8vkQ +DA:4,1,EZEzNmL93PY96zsSuI0PfQ +DA:5,1,7Z9Lj4ed27Wf2hBX6jooEA +DA:6,1,p7hNY1S5rX9QtYADf+cK4g +DA:7,1,XRh5gz49gzin2tgbGaB31w +DA:8,1,8/DPjtWdo8z1/SINFFKe8w +DA:9,1,6vWAvNsegNqafFN4IKLrhg +DA:10,1,l3nhicvq6q+R3WkfKdsNMw +DA:12,1,TkdTY1aJYRsgoCX7IqBZHg +DA:14,1,kqAv4CRNj8TUJtZxnHA1ww +DA:16,1,pzXUaWw7uchOO90TmLWMCQ +DA:19,1,Gf149yYR2vBuhaRPLfbpMQ +DA:30,1,B/Fo9U4/nMeRNS1JjGZVyQ +DA:31,1,sbbPIXWQiwGS4Z4oxJ4NXg +DA:32,1,wcYzu8t++cy98ww1i5lauA +DA:36,1,BJBlZsSWstphiTlZImt1kA +DA:39,1,zF0PcdmTEK7VES3F470kOA +DA:45,1,8nchpeGurNI9IpXVtyTfng +DA:46,1,gfbbES5wYLzaj+2vtVSYvA +DA:47,1,g9ryl0RlYrnQQosZvjTHQA +DA:50,1,+PQe1BEVllkzxy21dI6aEA +DA:65,1,ufYQzup5LAMpxO2Ta2Sb2g +DA:86,1,a21d8g/olYas3n9zYBBOGg +DA:92,1,yIxJ1b5EF2s1RFt3/9siFA +DA:123,1,rHcrRMY41ZGRnLcHl8gN4g +DA:148,1,9ZhwIim7Qs4hG6iD3dZhqQ +DA:185,1,kvo3mhwh7pQaUXo6thME0g +DA:226,1,okp2rZcXj0spwI5npdpTHA +DA:235,1,33DDriREeI+5d6vQtFwKSA +DA:247,1,nV+7OEcaHDua04FnWJPNBw +DA:288,1,xQVNdxAJxuGw1z9RcZmDQw +DA:33,0,JMbpl9baqFZ8dKK8Y17gaw +DA:34,0,nDofytg43vWmRxQpx5mfAg +DA:35,0,63lUnYR6Br+/T141taLJ3A +DA:56,0,uL6zrXy+FAkXKwYNiRHj/A +DA:57,0,kxob3qUUpFGP1GiB2H1FWA +DA:58,0,/Bpc/beK4rDY3m2FJcYQDw +DA:59,0,ZFCJmxmnGXLolIMDIwBa2Q +DA:61,0,Kwna9QKtOQCnHtDAWS76MA +DA:62,0,eRzgExLCwFcsubWb3tPz5A +DA:66,0,dxb6eDZyNFmHREUsw/0aRg +DA:67,0,ClrTmmCgBgy4XRFsW9MYPA +DA:68,0,Mh4uuo2u1mRr6vQPVR7HiQ +DA:69,0,ur5JmTf1gFQqrsDFbaFfUg +DA:70,0,Ssfs3XdEq+1ptYrjAF4/dA +DA:71,0,irJ1SbmJEgXQaePniryFrw +DA:72,0,plofaD3t4M7cB0Wt/kkIcQ +DA:75,0,nweZ20Wo/I+RuN63VBfhbQ +DA:76,0,taHssK3JrtAY1B5ki8RIvA +DA:77,0,slThQZ49vFBkbPIEC++Thg +DA:81,0,7FTA/0h3SnoVzJ0wZF4DBA +DA:82,0,SAH7diTZdEeX31T8y5ZEkw +DA:83,0,Ensp56VICfBDofPPIwd//Q +DA:87,0,/fPshBGC3Kxly9QCrU0WaA +DA:88,0,WY3KxS+ChZ2JhQppk4f1YQ +DA:89,0,eRzgExLCwFcsubWb3tPz5A +DA:101,0,2aLL+OhsvvSFDzPj8N6A8A +DA:102,0,qqDUbF9/LF9OIsLLs41GYQ +DA:104,0,7YUMB0n/VNJ63k+4oMa5VA +DA:105,0,71BzOiqCzTmyhyGiGcNAWg +DA:106,0,c8P53rWlEP/YBIYWYPOOng +DA:108,0,NLXE6dkleAVQdaCD0yZoag +DA:109,0,qToJ3UnCdzWJAmEZvdE2tQ +DA:110,0,wROSO6zdK3ITCrDTJ9zrUA +DA:111,0,VuP0tgmf95n/RGCbmTIIlA +DA:112,0,8AbsCbOowQhU7rQuEJysRA +DA:113,0,pOJwuGdEbe7GLbMcySd1QA +DA:115,0,+7EQX0Gt7bdUys2h4P45zA +DA:116,0,EqCYg9JJ9kXMCc0WbKlilA +DA:118,0,PJORE2WJyRJ7t3Lh6u3/kA +DA:119,0,mGDpHNdmJlkNZvXBb5Aipw +DA:120,0,g9ryl0RlYrnQQosZvjTHQA +DA:132,0,RotRjk/1CvWGeytMKlnJoA +DA:133,0,7TCRos01WUL3nykl1WvmVw +DA:135,0,c8hw778UwwrOsV5KZXIVtg +DA:136,0,aG2WBNdcwa0Tkou69BlnTA +DA:137,0,FffVehtV4TJlwoeAuuNtEA +DA:138,0,kbzbMmWjyv+RXhbOdiU0tA +DA:139,0,OAhMAmvhpP/ombdQZ8lLVQ +DA:140,0,FmJfh0QwziF0Fw6k0Lophw +DA:141,0,oTwEGzRoQZlPSLv1BbG/yg +DA:142,0,zxhXXEu6G6lDAjccosN7eA +DA:143,0,c1T7vtnIBY47FTNBXKbdZg +DA:145,0,rxNxKhqfMkG5L+pcLq2Wmg +DA:157,0,tYet3XM6cqlPDaiHxk3+AQ +DA:158,0,j+w2ru7fEFjKu1+ieFsZ2Q +DA:159,0,+XCGJr58PRSPwUMHasOYHA +DA:160,0,6zPB9Igw6su41PRyX6/40A +DA:161,0,d8hm3Kk16Ww75CUZ20SI5w +DA:162,0,EZtRTDdJrrcdY2Ej3SXU/w +DA:164,0,c9GL01hrOF+4w0xwh3593A +DA:169,0,1Fn45jrafmetFh+FD0NLJg +DA:170,0,eMzC3TZsoiOZH5YQs1Q3Zw +DA:171,0,NIMGNQ8ZQ/apl88f/Kt1ow +DA:172,0,Qo9fOCY5SWY+jdBqtqlqiw +DA:174,0,jKtAvfZ9izOjKiRonx8v+Q +DA:180,0,z4CTRlOVm4O5iUFLAZWNgQ +DA:182,0,759UBync/TOSH4FV5s5zVw +DA:192,0,KxLHASq832kUri2u3T+7vg +DA:196,0,KpjdEFgHfS/utJNwazbgSQ +DA:199,0,pYhLl7ua58JcuDR0TR2X5g +DA:200,0,+/Ciw5Wv9uT6hH+6Lz5q/Q +DA:202,0,M+XVKIDsc2llwcSxLAisDg +DA:203,0,JpYzkawcl3SoWQBRv4B7UQ +DA:206,0,ulJIl+K366PKAgM3r4LZEQ +DA:210,0,KpjdEFgHfS/utJNwazbgSQ +DA:213,0,Sy4LKd/TEXZnzoaQAOhZ8Q +DA:215,0,bCWyzno3Gr0ptGcEMi7dbw +DA:216,0,S6xjJ+YZCFkmnfuSpKoCGQ +DA:217,0,PbxJuuC0E9sv7vhxf1kuPQ +DA:219,0,IrV5z82OzbBr7VfjOlF+Ng +DA:220,0,S6xjJ+YZCFkmnfuSpKoCGQ +DA:221,0,YjRb9flZEqV9fP2K778giw +DA:223,0,759UBync/TOSH4FV5s5zVw +DA:232,0,6+bEQE90N3TXvjTnt19YAg +DA:241,0,nE3qe0GIFfckZLl7C8/MxQ +DA:242,0,k9z97CLP+7mLcvGDlcEU9Q +DA:244,0,5Zr/Nbf+yp2qlJmB+GRUPA +DA:255,0,qq66WdCMoEkOBEOCvBmW5Q +DA:257,0,B/Fo9U4/nMeRNS1JjGZVyQ +DA:258,0,fBZQCeiY/CbXuPDfstYEoQ +DA:259,0,3jR+/Yj9dfAFLlKAt1s+uA +DA:261,0,LWJ6GWS7TQOefA1T2KQzFA +DA:262,0,V7uRmjj6chiNnyDqZpYJVA +DA:263,0,uyk9SK+lFhWqnd9oarsrBg +DA:264,0,XczIqw4ht2RDJrSXGQbuCg +DA:275,0,DZA/A76/6HE/l4H6niwlaw +DA:278,0,DCZ68FSYcfkORf2X6djkIQ +DA:279,0,Y/h/slRDFt59p1hYn1xXEQ +DA:285,0,YJALHyBl1R9K1YkAhLTFTw +DA:289,0,EvqgmJ8RudQoSkPm/iM6Yw +LF:131 +LH:32 +BRDA:32,0,0,1 +BRDA:36,0,1,1 +BRDA:0,1,0,1 +BRDA:45,1,1,1 +BRDA:46,1,2,1 +BRDA:0,2,0,1 +BRDA:47,2,1,1 +BRDA:57,3,0,- +BRDA:61,3,1,- +BRDA:0,4,0,- +BRDA:59,4,1,- +BRDA:0,5,0,- +BRDA:62,5,1,- +BRDA:68,6,0,- +BRDA:83,6,1,- +BRDA:69,7,0,- +BRDA:82,7,1,- +BRDA:70,8,0,- +BRDA:82,8,1,- +BRDA:0,9,0,- +BRDA:71,9,1,- +BRDA:72,10,0,- +BRDA:76,10,1,- +BRDA:0,11,0,- +BRDA:81,11,1,- +BRDA:88,12,0,- +BRDA:89,12,1,- +BRDA:0,13,0,- +BRDA:87,13,1,- +BRDA:105,14,0,- +BRDA:118,14,1,- +BRDA:108,15,0,- +BRDA:115,15,1,- +BRDA:106,16,0,- +BRDA:109,16,1,- +BRDA:104,17,0,- +BRDA:116,17,1,- +BRDA:133,18,0,- +BRDA:135,18,1,- +BRDA:161,19,0,- +BRDA:162,19,1,- +BRDA:0,20,0,- +BRDA:172,20,1,- +BRDA:202,21,0,- +BRDA:203,21,1,- +BRDA:217,22,0,- +BRDA:219,22,1,- +BRDA:221,23,0,- +BRDA:223,23,1,- +BRDA:242,24,0,- +BRDA:244,24,1,- +BRDA:259,25,0,- +BRDA:261,25,1,- +BRDA:279,26,0,- +BRDA:285,26,1,- +BRDA:289,27,0,- +BRDA:0,27,1,1 +BRF:56 +BRH:7 +end_of_record +TN: +SF:keyhint/window.py +DA:6,0,EZEzNmL93PY96zsSuI0PfQ +DA:7,0,p7hNY1S5rX9QtYADf+cK4g +DA:8,0,Q8KOQr8Tls1WVCKEmiN+5Q +DA:9,0,6vWAvNsegNqafFN4IKLrhg +DA:10,0,8d2CrmlOB2GQqBsCmpM3Nw +DA:12,0,4dS1/UGgf3P4QGEjGbO/0Q +DA:14,0,ipiTFAYv5T0vsna9bQ8mDg +DA:16,0,kqAv4CRNj8TUJtZxnHA1ww +DA:18,0,HEwhJadvkkJTGWTxwrBgZg +DA:21,0,i8A0C38+EcD8Urh5vLPV5Q +DA:22,0,j7oI2/i3TyntGPLM9JFAJg +DA:25,0,aCrBTDT1GUACzTsw3tF3ZQ +DA:26,0,eWNvChw/I6RzLB8GX0rITw +DA:27,0,9hDTcj5YJvzzdGqtX7xpAQ +DA:28,0,5EYOkCpt8DtTYt8EQ7FhaQ +DA:29,0,jTVei2rKUujJhGbq1BozRQ +DA:30,0,lPw0/a1MktXwCWCDJR3fsw +DA:31,0,+xuUfZWr7Fnrko2aBmSFww +DA:32,0,yDjyC/OWlQ2KvYFfCBVWeA +DA:33,0,o1h0EKvIHe50nxmxNk+yXA +DA:34,0,VTlCM2GnOz89KG9/QzvaPQ +DA:35,0,MrvRif5XU2G7soLbcMheuQ +DA:36,0,wuVjAl3Mg77zmJhFKBBHaQ +DA:37,0,sVfvWc1d3KEbvIcJU8+CgA +DA:39,0,/NmA5igvKiaIM7CHcz6R7A +DA:41,0,WOwJxA6R7uUewE816b2YBA +DA:42,0,TQGjBH7hmgEd62i77qTr1Q +DA:44,0,hrtwbMM82Sr8YhUtUXUU5A +DA:45,0,vOLZAZyHZ3D50ySvWTNUVw +DA:46,0,1r/auWqJJ59g1+uowCjKCg +DA:47,0,ourb1M81afZg5YvFN7Kl7g +DA:49,0,WPBezsxjqCCkmHsNhG8nBw +DA:50,0,0q7Mi8J3xEa8rp5jLmnMPg +DA:51,0,ez+raULtgfzSj7hSSdLZLg +DA:52,0,daS9E1nJwIvGpmR9rlqVYw +DA:54,0,8UoIsP7C3hgsh6AMMdWFPQ +DA:55,0,I1cv9ZiKR6DIaQhdWnXvXg +DA:56,0,YnpVZmALQz8690p+SqOruw +DA:57,0,FPdHQYDlFynw22fOtOWWFA +DA:58,0,JzCX5YJs1Jx2SipBS6LCFg +DA:60,0,NOPnIfjdG6bpA+0BYswIAA +DA:61,0,UclKGfsnyVK4LA3UgWLGqQ +DA:62,0,h78tRgbpFM3ruzJdsKv+vA +DA:64,0,LXb3++i2kM/yTJNfuOthKw +DA:65,0,sFPz1MVpFkTx68qKDvsilQ +DA:67,0,+hj6eIQL0j2BAsDcC+6lgQ +DA:68,0,blO7Ttz7dKYi54lDURNTpA +DA:70,0,0kF4kHkCfunSQQ6jkNAAmw +DA:71,0,FfBZEH61dHli6Fjh9Zmzkg +DA:73,0,xXB72aopWjgtW2WVHsBRxw +DA:80,0,OX418QPYLPuCMeZDMAx01g +DA:82,0,w5ii52TfaHkXFFqmM9LuIw +DA:86,0,w5ii52TfaHkXFFqmM9LuIw +DA:89,0,IMNy6tVL2pQjzvjZF8b7Tw +DA:91,0,tUBU5ZX4mpqyzfYfiyZTHg +DA:93,0,nOSXKQGXaSG7c+TNwR2bPA +DA:95,0,g6iIJKkyO1OD5j2BgtKTYw +DA:96,0,98eyAKkzhjnNpEV9nPsblg +DA:99,0,ztkzkIwmqzv5Nn2eDtvb2A +DA:100,0,GU2QYTWt7bjtvCH5ZN0iJQ +DA:101,0,LoLl0ZBzB/rBD+odhs0YYQ +DA:104,0,6lssmSuMDSKt7UKevezLuQ +DA:105,0,pl5lIC9j8C5r6uUH+Es5Gw +DA:106,0,fmof4luuzefIpDU2WkTAGQ +DA:109,0,h+iZkAQoL1MyfB+whO34kw +DA:110,0,bAMaerF9jJ/4nla0L+OkSg +DA:111,0,0C3UdRtG4H4JwE9MPMYl0Q +DA:114,0,6lssmSuMDSKt7UKevezLuQ +DA:115,0,hHPVg3Y8Q8DoLzlOvZs+ww +DA:116,0,hcKe7Jm9CMGftBQqTJDl7Q +DA:117,0,1EkKQaJf8AoY3BMXnfuovg +DA:119,0,nOSXKQGXaSG7c+TNwR2bPA +DA:121,0,sF0GhKX13FCKIesRf+L3Pg +DA:122,0,2/ngvR0VVBtBFLEsOnusYQ +DA:123,0,+0CiuBbDPiBRd30O1D+OHg +DA:125,0,E1K3o3S6jqNUb5lcuPni7Q +DA:126,0,aBVY/yZBIdptWBq9Rd/KrA +DA:128,0,Ol8mQLAtBSoZgL0jgEzgZg +DA:129,0,QTyeE3eFyb7Sj/Vz8R8psQ +DA:130,0,/8//ZHYnywCeYy7Gi13bVg +DA:131,0,YiCt7xCfKDANi/KDB+UIFw +DA:132,0,Y2LpneVjbe7ln7PACzMmvw +DA:133,0,0yfZpHhAMkFh5ibaHHQFsA +DA:135,0,t3wx9EA7o1mBW1+JngQf4A +DA:137,0,hqaDy5+qPXZ0yFLDODvMeA +DA:138,0,2aeKlyXYzvZw843dYAA8pw +DA:140,0,XLoCeYdA4imsjGqAi1aKrg +DA:141,0,bV5wVZmRKSpThdKNSoiR1g +DA:143,0,+ZjRT7niivFQ1KmrGqegHQ +DA:144,0,7btZ1VHivVhg0+ZVpgF5Hg +DA:146,0,bg6dyw9DYGaykJFPDFQ6jQ +DA:148,0,PRY4DfwvJVD/CMRMUpFv2w +DA:149,0,CLQ8xE+xbkW3wgASXx0S9A +DA:150,0,tjTwbeAKVwxHXBNBSmV8gA +DA:152,0,zBcQd9AKTvI5NTK55e7BQA +DA:153,0,GXVf3Hb2O4xFqq7VHpZ/QA +DA:154,0,0EmkVhsae099PolZ3hNxNg +DA:155,0,N1HHteSkuuvFLBlJaVLUkg +DA:156,0,UH9c1rTLXouD0gnIgDdQsw +DA:158,0,67OhEoim0M+kFZxPRmxguw +DA:159,0,FDDEjSOn3e//VvfHvgZ0ww +DA:160,0,0K/Po1k+U5xm8/TIvf9z8w +DA:162,0,OVQndiUPGTolKH0n4ANzRg +DA:163,0,5Pfm4FbCeFyIO1KUUkZ58A +DA:165,0,6j61YvwsCs5VOfAUtcaFxg +DA:168,0,fmMerlB7DNvTRs2EzjeHVg +DA:169,0,wD8cSwka0T62xv/bcT8Atw +DA:170,0,t8nJeM2WlUQDSNJSLRyAAA +DA:171,0,9//PaSUk12STjLEGzg7JAg +DA:172,0,XMo02y22xptanEfd/98D4A +DA:176,0,KxgaGtJPkScc4OG7mJ59vg +DA:177,0,EQTHBsE8YXl+5igh7xhIRg +DA:178,0,5uBkKbkJ9pmmUsP56ic7Dg +DA:181,0,n3Yjp9WSesoR2YX8D4Lu3Q +DA:182,0,wGlGfxpc2VcdS3G/beOfww +DA:183,0,iA+Bs1DEdgqy7fxnLTO3kQ +DA:184,0,PQLuKEeuldBUnjsd1TmvOg +DA:185,0,RwJqH+22LcND9gWi9vcvGg +DA:186,0,rd2ebcyi7whijFegqv/npA +DA:188,0,4Qmjc3fDTsWsy62RsxTE1g +DA:189,0,OvmdgI0vuroviTgHQFBq7A +DA:190,0,hDuPj9pG+gypuq8ZurLJyw +DA:191,0,J1DiimN8HekSv3dPHCh3gg +DA:192,0,8k4h1t2qv68wme+LI5NfhA +DA:193,0,UBSWvVRUPpsXmVPiZwXz/Q +DA:195,0,ZMi8QH4M9yCntp+6XHr84Q +DA:196,0,NOcVwUqMebsa48uLw27ULA +DA:197,0,nZWTtcBcpUJHX2EKhOfEEg +DA:198,0,zo2luNu+wVCrDRL+AKDhYQ +DA:200,0,+m416DbkQomy4jO+7bbllg +DA:201,0,s3ETZ8nnAt2tMiiirz8pHQ +DA:202,0,U3aAvTCqbuo19KFBnZRNtQ +DA:203,0,Yndl4r8yjREu2PI+wrBorQ +DA:205,0,8m/hQXKNGO/Vo31bZWGYew +DA:206,0,z4IzLHRxOOl06pmwsAaYqg +DA:207,0,GgHW2+QzDabPcAJE15FvwA +DA:209,0,frURWWNA4tiYY1IRuUegPg +DA:210,0,/nDguuwuJknjWul5tueEKQ +DA:211,0,7WbL2/ixLnNBZUK7vfFJMw +DA:212,0,85gT4ogJYq+P1nrA0Fqcgg +DA:214,0,uNu9Km2KxAHxSuAcdyk5wQ +DA:215,0,OniCYdEkakk4TiqT4LhcnA +DA:216,0,8bbmtQixD8xbcgAnRcfVKg +DA:217,0,iz9rWzoqIryQKin011P/LQ +DA:218,0,DuM+yjKvKN8PJDqBqe4tUA +DA:219,0,ZHjEknCrA9p4caR7qPAQcg +DA:220,0,ituGPBx0LecA1Txh40MCLQ +DA:221,0,FO4eH3ZkzKwE+KJEDyJ+dA +DA:222,0,7JQoQ5QtPGZ8QVbU6jZafg +DA:223,0,npmeaVtsvStGTrHtsentWg +DA:224,0,QmRz2Zw4o9Qgy8IRLVg0OA +DA:225,0,0DzulE3oxyGFITDowByVCQ +DA:226,0,VLKDnykjOcTH5uEu8oOu+Q +DA:227,0,ORrC8jU27hXSfj7NM5U3bQ +DA:228,0,9KZutf9cfEptyfXb82WXEQ +DA:229,0,gS3zGQQD8cQMTaCQkpVRaA +DA:231,0,vreztefulVdOIsfjG/Yv5A +DA:232,0,qfXo8f4XF5Lau3F94zgkHg +DA:233,0,b8/41j44B/JsWOWZ97Squw +DA:234,0,RmqpslAIuE59S3enyr7KDg +DA:235,0,YS0HqTRGxDfBHUDJfwh2RA +DA:236,0,OPXk3+/+RLQoABLOyi9PRw +DA:240,0,2wPr8WtHMoqweVjMjl8lfQ +DA:248,0,ru6fxrYl41DBdohqSCJ3LQ +DA:249,0,JF0M1WLYDBBOnV8Zb/vJIg +DA:250,0,P9/pLaK84Pi3SRZjQ64mdA +DA:252,0,BNZdFxKbxaTlOEpb8zV0aw +DA:253,0,rntYgTYn9NXXVDlReHVEsw +DA:254,0,InG1x8eHgjwya2sp6EVe3Q +DA:255,0,wtYfCdxSXUjpEM+5rxPUfA +DA:256,0,Z6gqmmhcEz7e4Ef8JmpFpw +DA:257,0,Au/uVxiLGYEGT2t9yxXk3Q +DA:258,0,InG1x8eHgjwya2sp6EVe3Q +DA:259,0,4uwCogiApIT6kymh7p1Jyg +DA:260,0,B2WrWsIw/lkn3if13nrMug +DA:261,0,aYXUF155XgYD3hMjUBZFyw +DA:262,0,GJypSiXZj0ngIodnsRYBew +DA:263,0,OUNKTLCsAuS4fpYiejDZSw +DA:264,0,lcIlik0saHizyzKZOdEhdA +DA:265,0,GJypSiXZj0ngIodnsRYBew +DA:266,0,CIUwTYlX+7aEOinmnl+pIw +DA:268,0,/pXaMEba5siMCJveie8pVQ +DA:269,0,NSZoWuygf3kPLTgPg9g4mA +DA:270,0,MnzpXe1veqpfA7nIMRo0OA +DA:271,0,+ylD+v7+sSHd8EV5ld4z8A +DA:272,0,jhQYsIsST/CI834ntN9OrQ +DA:274,0,x1psAk8/8XJJLzW2QQR6/A +DA:275,0,mRYVLbSdfpSPX7OfFhLKYA +DA:279,0,NAJfsR/HRDnT5EnyHqWBkQ +DA:280,0,ZMo85owTBA669BAHjNvpRA +DA:285,0,qHrSBwyLAuLX2ckB6OSOxg +DA:286,0,smfg1ZmMNQjQag05LQ9GWA +DA:287,0,jt3b1RYtr9I/eaJ4IByroA +DA:288,0,fHAQOMF6Fxf7t+zcirZZnQ +DA:290,0,whMDfCiEd+uAWBMgOZ+yWA +DA:292,0,3jlyIaaApxur1I/TGXaqXA +DA:294,0,iajzxurA0owXs5JaTTOVvA +DA:296,0,n03gNMwTXlkoJ2AyQeoCYA +DA:297,0,vO9dJFuPgmyn5x22CPH40A +DA:298,0,eZsOrlB2GUJx5BPJe84FzQ +DA:299,0,mW/+r03tyT8CoC8PC4YLAg +DA:300,0,tKNcwgxN0Ds9YFHhbpCheQ +DA:302,0,DwwKVi9SvKcWaskfVc/GdA +DA:303,0,/zC5b4Z9Wp3YovaYctAJVg +DA:305,0,rDjZ1jZSBPURiQgM73SruQ +DA:306,0,rwiX7Z0Ll1uy5rnMmjuxFw +DA:307,0,Aio4Pp2AaiiUX2N3FGJ65w +DA:320,0,Q752Z3sWpVH9FXlCxnvcYg +DA:321,0,EnOojfxbGda2A97SEv/vDA +DA:322,0,HO0nog1TUVZumtfbean2+w +DA:323,0,hgAwdLj6BrwwL9LaaGIKAQ +DA:324,0,hYfxTI/22SEvYMmoZfes4A +DA:325,0,vtxh0XD4PxhoFZv4H3EgXA +DA:326,0,P7k79EWeHmfx7oLuc3bxYg +DA:327,0,kiP0u7q9W5+6ZFVvu1SnPw +DA:328,0,cUHmCBadS/vA3oGjBoVdAA +DA:329,0,6Jssjt1DNynVwS1G9tYuug +DA:330,0,XhRei0PHc4AZNYUlgvbmbA +DA:332,0,DdmDKear2kQjn/YSGNhfSA +DA:333,0,Jk+IPKjoNbDx+9tk0zg4rg +LF:220 +LH:0 +BRDA:22,0,0,- +BRDA:23,0,1,- +BRDA:0,1,0,- +BRDA:0,1,1,- +BRDA:0,2,0,- +BRDA:0,2,1,- +BRDA:0,3,0,- +BRDA:80,3,1,- +BRDA:82,4,0,- +BRDA:91,4,1,- +BRDA:0,5,0,- +BRDA:86,5,1,- +BRDA:0,6,0,- +BRDA:89,6,1,- +BRDA:100,7,0,- +BRDA:104,7,1,- +BRDA:105,8,0,- +BRDA:109,8,1,- +BRDA:110,9,0,- +BRDA:114,9,1,- +BRDA:115,10,0,- +BRDA:119,10,1,- +BRDA:123,11,0,- +BRDA:125,11,1,- +BRDA:153,12,0,- +BRDA:162,12,1,- +BRDA:155,13,0,- +BRDA:158,13,1,- +BRDA:163,14,0,- +BRDA:165,14,1,- +BRDA:176,15,0,- +BRDA:195,15,1,- +BRDA:183,16,0,- +BRDA:193,16,1,- +BRDA:186,17,0,- +BRDA:188,17,1,- +BRDA:0,18,0,- +BRDA:203,18,1,- +BRDA:0,19,0,- +BRDA:207,19,1,- +BRDA:0,20,0,- +BRDA:215,20,1,- +BRDA:220,21,0,- +BRDA:229,21,1,- +BRDA:219,22,0,- +BRDA:224,22,1,- +BRDA:249,23,0,- +BRDA:253,23,1,- +BRDA:250,24,0,- +BRDA:252,24,1,- +BRDA:254,25,0,- +BRDA:257,25,1,- +BRDA:0,26,0,- +BRDA:256,26,1,- +BRDA:258,27,0,- +BRDA:261,27,1,- +BRDA:0,28,0,- +BRDA:260,28,1,- +BRDA:262,29,0,- +BRDA:264,29,1,- +BRDA:0,30,0,- +BRDA:265,30,1,- +BRDA:270,31,0,- +BRDA:271,31,1,- +BRDA:274,32,0,- +BRDA:290,32,1,- +BRDA:0,33,0,- +BRDA:298,33,1,- +BRDA:302,34,0,- +BRDA:320,34,1,- +BRDA:328,35,0,- +BRDA:332,35,1,- +BRF:72 +BRH:0 +end_of_record diff --git a/keyhint/app.py b/keyhint/app.py index 38e77ac..97903ff 100644 --- a/keyhint/app.py +++ b/keyhint/app.py @@ -1,11 +1,12 @@ -""" -Cheatsheat for keyboard shortcuts & commands. +"""Cheatsheet for keyboard shortcuts & commands. Main entry point that get's executed on start. """ import logging import sys +from collections.abc import Mapping +from typing import Any import gi @@ -32,9 +33,7 @@ class Application(Gtk.Application): Gtk (Gtk.Application): Application Class """ - options: dict = {} - - def __init__(self, *args, **kwargs): + def __init__(self, *args, **kwargs) -> None: # noqa: ANN002, ANN003 """Initialize application with command line options.""" super().__init__( *args, @@ -42,6 +41,8 @@ def __init__(self, *args, **kwargs): flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE, **kwargs, ) + self.options: dict = {} + self.add_main_option( "hint", ord("h"), @@ -67,25 +68,25 @@ def __init__(self, *args, **kwargs): None, ) - def do_activate(self, *args, **kwargs): + def do_activate(self, *_, **__) -> None: # noqa: ANN002, ANN003 """Create and activate a window.""" window = KeyhintWindow(self.options) window.set_application(self) window.present() - def do_command_line(self, *args, **kwargs): + def do_command_line(self, cli: Gtk, **__: Mapping[Any, Any]) -> int: """Store command line options in class attribute for later usage.""" - self.options = args[0].get_options_dict().end().unpack() + self.options = cli.get_options_dict().end().unpack() if "verbose" in self.options: logging.getLogger().setLevel("DEBUG") - logger.debug(f"CLI Options: {self.options}") + logger.debug("CLI Options: %s", self.options) self.activate() return 0 -def main(): +def main() -> None: """Start application on script call.""" app = Application() app.run(sys.argv) diff --git a/keyhint/utils.py b/keyhint/utils.py index 3f88694..d487ff2 100644 --- a/keyhint/utils.py +++ b/keyhint/utils.py @@ -7,7 +7,7 @@ import subprocess import traceback from pathlib import Path -from typing import List, Tuple, Union +from typing import Union import yaml @@ -16,42 +16,42 @@ CONFIG_PATH = __file__.rstrip("utils.py") + "config" -def _load_yaml(file: Union[str, os.PathLike]) -> dict: +def _load_yaml(file_path: Union[str, os.PathLike]) -> dict: """Safely load a yaml file from resource path or other path. Args: - file (Union[Path, str]): Filename in resources, or complete path to file. - from_resources (bool, optional): Set to true to load from resource. Defaults + file_path: Filename in resources, or complete path to file. + from_resources: Set to true to load from resource. Defaults to False. Returns: - dict: [description] + [description] """ try: - with open(file, "r", encoding="utf-8") as stream: + with Path(file_path).open(encoding="utf-8") as stream: result = yaml.safe_load(stream) except yaml.YAMLError as exc: - print(exc) + print(exc) # noqa: T201 result = {} return result -def load_default_hints() -> List[dict]: +def load_default_hints() -> list[dict]: """Load default keyhints from yaml files shipped with the package. Returns: - List[dict]: List of application keyhints and metainfos. + List[dict]: List of application keyhints and meta info. """ hints = [_load_yaml(f) for f in Path(CONFIG_PATH).glob("*.yaml")] hints = sorted(hints, key=lambda k: k["title"]) - return hints + return hints # noqa: RET504 -def load_user_hints() -> List[dict]: +def load_user_hints() -> list[dict]: """Load keyhints from yaml files in the users .config/keyhint/ directory. Returns: - List[dict]: List of application keyhints and metainfos. + List[dict]: List of application keyhints and meta info. """ if config_path := get_users_config_path(): files = (config_path / "keyhint").glob("*.yaml") @@ -62,16 +62,17 @@ def load_user_hints() -> List[dict]: return hints -def _expand_includes(hints: List[dict]) -> List[dict]: +def _expand_includes(hints: list[dict]) -> list[dict]: new_hints = [] for h in hints: if includes := h.get("include", []): for include in includes: included_hints = [h for h in hints if h["id"] == include] if not included_hints: - raise ValueError( + message = ( f"Hint ID '{included_hints}' included by '{h['id']}' not found!" ) + raise ValueError(message) included_hint = included_hints[0] included_hint["hints"] = { f"{included_hint['title']} - {k}": v @@ -82,20 +83,20 @@ def _expand_includes(hints: List[dict]) -> List[dict]: return new_hints -def _remove_empty_sections(hints: List[dict]) -> List[dict]: +def _remove_empty_sections(hints: list[dict]) -> list[dict]: for hint in hints: hint["hints"] = {k: v for k, v in hint["hints"].items() if v} return hints -def load_hints() -> List[dict]: +def load_hints() -> list[dict]: """Load unified default keyhints and keyhints from user config. First the default keyhints are loaded, then they are update (added/overwritten) by the keyhints loaded from user config. Returns: - List[dict]: List of application keyhints and metainfos. + List[dict]: List of application keyhints and meta info. """ hints = load_default_hints() user_hints = load_user_hints() @@ -116,7 +117,7 @@ def load_hints() -> List[dict]: hints = _expand_includes(hints) hints = _remove_empty_sections(hints) - return hints + return hints # noqa: RET504 def replace_keys(text: str) -> str: @@ -126,7 +127,7 @@ def replace_keys(text: str) -> str: text (str): Text with key names. Returns: - str: Text where some key names have been replaced by unicode symbole. + str: Text where some key names have been replaced by unicode symbol. """ if text in {"PageUp", "PageDown"}: text = text.replace("Page", "Page ") @@ -137,13 +138,14 @@ def replace_keys(text: str) -> str: text = text.replace("Right", "→") text = text.replace("Direction", "←↓↑→") text = text.replace("PlusMinus", "±") - text = text.replace("Plus", "+") - text = text.replace("Minus", "−") + text = text.replace("Plus", "+") # noqa: RUF001 + text = text.replace("Minus", "−") # noqa: RUF001 text = text.replace("Slash", "/") - return text + + return text # noqa: RET504 -def get_active_window_info_wayland() -> Tuple[str, str]: +def get_active_window_info_wayland() -> tuple[str, str]: """Retrieve active window class and active window title on Wayland. Inspired by https://gist.github.com/rbreaves/257c3edfa301786e66e964d7ac036269 @@ -153,7 +155,7 @@ def get_active_window_info_wayland() -> Tuple[str, str]: """ def _get_cmd_result(cmd: str) -> str: - stdout_bytes: bytes = subprocess.check_output(cmd, shell=True) + stdout_bytes: bytes = subprocess.check_output(cmd, shell=True) # noqa: S602 stdout = stdout_bytes.decode("utf-8") if match := re.search(r"'(.+)'", stdout): return match.groups()[0].strip('"') @@ -161,26 +163,26 @@ def _get_cmd_result(cmd: str) -> str: cmd_windows_list = ( "gdbus call --session --dest org.gnome.Shell " - + "--object-path /org/gnome/Shell/Extensions/Windows " - + "--method org.gnome.Shell.Extensions.Windows.List" + "--object-path /org/gnome/Shell/Extensions/Windows " + "--method org.gnome.Shell.Extensions.Windows.List" ) stdout = _get_cmd_result(cmd_windows_list) windows = json.loads(stdout) - focused_window = list(filter(lambda x: x["focus"], windows))[0] + focused_window = next(filter(lambda x: x["focus"], windows)) wm_class = focused_window["wm_class"] - cmd_windows_gettitle = ( + cmd_windows_get_title = ( "gdbus call --session --dest org.gnome.Shell " - + "--object-path /org/gnome/Shell/Extensions/Windows " - + "--method org.gnome.Shell.Extensions.Windows.GetTitle " - + f"{focused_window['id']}" + "--object-path /org/gnome/Shell/Extensions/Windows " + "--method org.gnome.Shell.Extensions.Windows.GetTitle " + f"{focused_window['id']}" ) - title = _get_cmd_result(cmd_windows_gettitle) + title = _get_cmd_result(cmd_windows_get_title) return wm_class, title -def get_active_window_info_x() -> Tuple[str, str]: +def get_active_window_info_x() -> tuple[str, str]: """Retrieve active window class and active window title on Xorg desktops. Returns: @@ -188,7 +190,8 @@ def get_active_window_info_x() -> Tuple[str, str]: """ # Query id of active window stdout_bytes: bytes = subprocess.check_output( - "xprop -root _NET_ACTIVE_WINDOW", shell=True + "xprop -root _NET_ACTIVE_WINDOW", # noqa: S607 + shell=True, # noqa: S602 ) stdout = stdout_bytes.decode() @@ -201,7 +204,8 @@ def get_active_window_info_x() -> Tuple[str, str]: # Query app_title and app_process stdout_bytes = subprocess.check_output( - f"xprop -id {window_id} WM_NAME WM_CLASS", shell=True + f"xprop -id {window_id} WM_NAME WM_CLASS", + shell=True, # noqa: S602 ) stdout = stdout_bytes.decode() @@ -222,7 +226,7 @@ def get_active_window_info_x() -> Tuple[str, str]: def is_using_wayland() -> bool: """Check if we are running on Wayland DE. - Returns + Returns: [bool] -- {True} if probably Wayland """ return "WAYLAND_DISPLAY" in os.environ @@ -231,7 +235,7 @@ def is_using_wayland() -> bool: def get_users_config_path() -> Union[Path, None]: """Retrieve path for config files. - Returns + Returns: Path -- Root of config folder """ if xdg_conf := os.getenv("XDG_CONFIG_HOME", None): @@ -240,7 +244,7 @@ def get_users_config_path() -> Union[Path, None]: return Path.home() / ".config" -def detect_active_window() -> Tuple[str, str]: +def detect_active_window() -> tuple[str, str]: """Get class and title of active window. Identify the OS and display server and pick the method accordingly. @@ -257,23 +261,23 @@ def detect_active_window() -> Tuple[str, str]: wm_class, window_title = get_active_window_info_x() except Exception: traceback.print_stack() - logger.error( + logger.exception( "Couldn't detect active application window." "KeyHint supports Wayland and X.\n" "For Wayland, the installation of the 'Window Calls' gnome extension is " "required: https://extensions.gnome.org/extension/4724/window-calls/\n" "For Xorg, the 'xprop' command is required, check your systems repository " "to identify its package.\n" - "If you met the prerequisits but still see this, please create an issue" + "If you met the prerequisites but still see this, please create an issue" "incl. the traceback above on https://github.com/dynobo/keyhint/issues." ) logger.debug( - f"Detected wm_class: '{wm_class}'. Detected window_title: '{window_title}'." + "Detected wm_class: '%s'. Detected window_title: '%s'", wm_class, window_title ) if "" in [wm_class, window_title]: logger.error( - "Couldn't detect active window! Please report this errror " + "Couldn't detect active window! Please report this error " "together with information about your OS and display server on " "https://github.com/dynobo/keyhint/issues" ) diff --git a/keyhint/window.py b/keyhint/window.py index a92c034..c0eee27 100644 --- a/keyhint/window.py +++ b/keyhint/window.py @@ -5,7 +5,9 @@ import logging import re -from typing import List, Optional, Tuple +from collections.abc import Iterable, Mapping +from pathlib import Path +from typing import Any, Optional from gi.repository import Gdk, GLib, Gtk @@ -13,7 +15,7 @@ logger = logging.getLogger(__name__) -RESOURCE_PATH = __file__.rstrip("window.py") + "resources" +RESOURCE_PATH = Path(__file__).parent / "resources" @Gtk.Template(filename=f"{RESOURCE_PATH}/window.ui") @@ -23,7 +25,7 @@ class KeyhintWindow(Gtk.ApplicationWindow): __gtype_name__ = "main_window" _section_title_height: Optional[int] = None _row_height: Optional[int] = None - _hints: List[dict] = keyhint.utils.load_hints() + _hints: list[dict] = keyhint.utils.load_hints() _dialog_is_open: bool = False _wm_class: str = "" _window_title: str = "" @@ -34,14 +36,14 @@ class KeyhintWindow(Gtk.ApplicationWindow): header_bar_title: Gtk.Label = Gtk.Template.Child() # type: ignore scrolled_window: Gtk.ScrolledWindow = Gtk.Template.Child() # type: ignore - def __init__(self, options): + def __init__(self, options: Mapping) -> None: """Initialize during window creation.""" super().__init__() self._options = options self._load_css() self.set_icon_name("keyhint") - logger.debug(f"Loaded {len(self._hints)} hints.") + logger.debug("Loaded %s hints.", len(self._hints)) self.connect("realize", self.on_realize) evk = Gtk.EventControllerKey() @@ -49,20 +51,20 @@ def __init__(self, options): self.add_controller(evk) # add to window self.screen_width, self.screen_height = self._get_screen_dims() - def _get_screen_dims(self) -> Tuple[int, int]: + def _get_screen_dims(self) -> tuple[int, int]: display = self.get_display() monitors = display.get_monitors() geometry = monitors.get_item(0).get_geometry() # TODO: Find correct monitor return geometry.width, geometry.height - def _get_hints_box_dims(self) -> Tuple[int, int]: + def _get_hints_box_dims(self) -> tuple[int, int]: size = self.hints_container_box.get_preferred_size().natural_size return size.width, size.height - def _get_hint_ids_titles(self) -> List[Tuple[str, str]]: + def _get_hint_ids_titles(self) -> list[tuple[str, str]]: return [(k["id"], k["title"]) for k in self._hints] - def _get_hints_by_id(self, hint_id: str) -> Optional[dict]: + def _get_hints_by_id(self, hint_id: str) -> Optional[dict[str, Any]]: return next((hint for hint in self._hints if hint["id"] == hint_id), None) def _get_hint_id_by_active_window(self) -> Optional[str]: @@ -96,17 +98,17 @@ def _get_appropriate_hint_id(self) -> Optional[str]: # If hint-id was provided by option, use that one: if "hint" in self._options: hint_id = self._options["hint"] - logger.debug(f"Using provided hint-id: {hint_id}") + logger.debug("Using provided hint-id: %s", hint_id) # Else try to find hints for active window if not hint_id: hint_id = self._get_hint_id_by_active_window() - logger.debug(f"Found matching hints '{hint_id}'.") + logger.debug("Found matching hints %s", hint_id) # First fallback to cli provided default if (not hint_id) and ("default-hint" in self._options): hint_id = self._options["default-hint"] - logger.debug(f"Using provided default hint-id: {hint_id}") + logger.debug("Using provided default hint-id: %s", hint_id) # Last fallback to first entry in list if not hint_id: @@ -116,7 +118,7 @@ def _get_appropriate_hint_id(self) -> Optional[str]: return hint_id - def _get_row_heights(self) -> Tuple[int, int]: + def _get_row_heights(self) -> tuple[int, int]: if self._section_title_height and self._row_height: return self._section_title_height, self._row_height @@ -135,10 +137,10 @@ def _get_row_heights(self) -> Tuple[int, int]: title_height = section_title.get_preferred_size().natural_size.height + spacing row_height = section_title.get_preferred_size().natural_size.height + spacing - logger.debug(f"Title height: {title_height}, Row height: {row_height}") + logger.debug("Title height: %s, Row height: %s", title_height, row_height) return title_height, row_height - def _distribute_hints_in_columns(self, keyhints: dict) -> List[dict]: + def _distribute_hints_in_columns(self, keyhints: dict) -> list[dict]: max_column_height = self.screen_height // 1.2 self._section_title_height, self._row_height = self._get_row_heights() @@ -163,7 +165,7 @@ def _distribute_hints_in_columns(self, keyhints: dict) -> List[dict]: return hint_columns # GENERATE/MODIFY WIDGETS - def _load_css(self): + def _load_css(self) -> None: css_path = f"{RESOURCE_PATH}/style.css" provider = Gtk.CssProvider() provider.load_from_path(css_path) @@ -172,13 +174,13 @@ def _load_css(self): ) @staticmethod - def _create_bindings(text) -> Gtk.Box: + def _create_bindings(text: str) -> Gtk.Box: box = Gtk.Box( orientation=Gtk.Orientation.HORIZONTAL, spacing=6, halign=Gtk.Align.END ) keys = [text.replace("`", "")] if text.startswith("`") else text.split() - for key in keys: - key = keyhint.utils.replace_keys(key.strip()) + for k in keys: + key = keyhint.utils.replace_keys(k.strip()) label = Gtk.Label() if key in ["+", "/"]: label.set_css_classes(["dim-label"]) @@ -190,24 +192,24 @@ def _create_bindings(text) -> Gtk.Box: box.append(label) return box - def _create_section_title(self, text) -> Gtk.Label: + def _create_section_title(self, text: str) -> Gtk.Label: label = Gtk.Label(xalign=0.0, css_classes=["section-title"]) label.set_markup(f"{text}") return label - def _populate_hints_drop_down(self): + def _populate_hints_drop_down(self) -> None: model = self.hints_drop_down.get_model() - for hint_id, title in self._get_hint_ids_titles(): + for hint_id, _ in self._get_hint_ids_titles(): model.append(hint_id) - def _clear_hints_container(self): + def _clear_hints_container(self) -> None: while child := self.hints_container_box.get_first_child(): child.get_parent().remove(child) - def _populate_hints_container(self): + def _populate_hints_container(self) -> None: hint_id = self.hints_drop_down.get_selected_item().get_string() keyhints = self._get_hints_by_id(hint_id) - hint_columns = self._distribute_hints_in_columns(keyhints) + hint_columns = self._distribute_hints_in_columns(keyhints or {}) for column in hint_columns: grid = Gtk.Grid(column_spacing=20, row_spacing=8) @@ -226,7 +228,7 @@ def _populate_hints_container(self): idx += 1 self.hints_container_box.append(grid) - def _adjust_window_dimensions(self): + def _adjust_window_dimensions(self) -> None: hints_box_width, hints_box_height = self._get_hints_box_dims() header_height = 80 # self._header_bar.get_preferred_size().natural_size.height target_height = min(hints_box_height + header_height, self.screen_height // 1.1) @@ -235,7 +237,13 @@ def _adjust_window_dimensions(self): # TODO: self.move(position_x, position_y) - def on_key_release(self, evk: Gtk.EventControllerKey, keycode, keyval, modifier): + def on_key_release( + self, + evk: Gtk.EventControllerKey, + keycode, # noqa: ANN001 + keyval, # noqa: ANN001 + modifier, # noqa: ANN001 + ) -> None: """Execute on key release.""" if keycode == Gdk.KEY_Escape: if self._dialog_is_open: @@ -257,7 +265,7 @@ def on_key_release(self, evk: Gtk.EventControllerKey, keycode, keyval, modifier) hadj = self.scrolled_window.get_hadjustment() hadj.set_value(hadj.get_value() - self.screen_width // 3) - def set_active_keyhint(self, hint_id): + def set_active_keyhint(self, hint_id: str) -> None: if hint_id == self._hint_id: return self._hint_id = hint_id @@ -266,19 +274,24 @@ def set_active_keyhint(self, hint_id): @Gtk.Template.Callback("on_hints_drop_down_changed") def on_select_hints_combo_changed( self, drop_down: Gtk.DropDown, selected_item: int - ): + ) -> None: """Execute on change of the hints selection dropdown.""" self.set_active_keyhint(drop_down.get_selected_item().get_string()) - self.header_bar_title.set_text(self._active_keyhint["title"] + " - Shortcuts") + title = ( + self._active_keyhint.get("title", "Unknown") + if self._active_keyhint + else "Unknown" + ) + self.header_bar_title.set_text(title + " - Shortcuts") self._clear_hints_container() self._populate_hints_container() self._adjust_window_dimensions() - def on_window_destroy(self, _): + def on_window_destroy(self, event) -> None: # noqa: ANN001 """Execute on window close.""" logger.debug("Closing application window.") - def on_realize(self, *_): + def on_realize(self, *_: Iterable) -> None: """Execute on window realization on startup.""" self._populate_hints_drop_down() drop_down_strings = [s.get_string() for s in self.hints_drop_down.get_model()] @@ -287,7 +300,7 @@ def on_realize(self, *_): self.hints_drop_down.grab_focus() @Gtk.Template.Callback("on_about_button_clicked") - def open_about_dialog(self, _): + def open_about_dialog(self, event) -> None: # noqa: ANN001 """Execute on click "about" in application menu.""" self._dialog_is_open = True logo = Gtk.Image.new_from_file(f"{RESOURCE_PATH}/keyhint.svg") diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 6bac51e..0000000 --- a/poetry.lock +++ /dev/null @@ -1,1620 +0,0 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. - -[[package]] -name = "black" -version = "23.7.0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, - {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, - {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, - {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, - {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, - {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, - {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, - {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, - {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, - {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, - {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "cachecontrol" -version = "0.13.1" -description = "httplib2 caching for requests" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cachecontrol-0.13.1-py3-none-any.whl", hash = "sha256:95dedbec849f46dda3137866dc28b9d133fc9af55f5b805ab1291833e4457aa4"}, - {file = "cachecontrol-0.13.1.tar.gz", hash = "sha256:f012366b79d2243a6118309ce73151bf52a38d4a5dac8ea57f09bd29087e506b"}, -] - -[package.dependencies] -filelock = {version = ">=3.8.0", optional = true, markers = "extra == \"filecache\""} -msgpack = ">=0.5.2" -requests = ">=2.16.0" - -[package.extras] -dev = ["CacheControl[filecache,redis]", "black", "build", "cherrypy", "mypy", "pytest", "pytest-cov", "sphinx", "tox", "types-redis", "types-requests"] -filecache = ["filelock (>=3.8.0)"] -redis = ["redis (>=2.10.5)"] - -[[package]] -name = "certifi" -version = "2023.7.22" -description = "Python package for providing Mozilla's CA Bundle." -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, -] - -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -category = "dev" -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 = "cfgv" -version = "3.4.0" -description = "Validate configuration and produce human readable error messages." -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, - {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.2.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" -optional = false -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 = "cli-ui" -version = "0.17.2" -description = "Build Nice User Interfaces In The Terminal" -category = "dev" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "cli-ui-0.17.2.tar.gz", hash = "sha256:2f67e50cf474e76ad160c3e660bbad98bf8b8dfb8d847765f3a261b7e13c05fa"}, - {file = "cli_ui-0.17.2-py3-none-any.whl", hash = "sha256:6a1ebdbbcd83a0fa06b2f63f4434082a3ba8664aebedd91f1ff86b9e4289d53e"}, -] - -[package.dependencies] -colorama = ">=0.4.1,<0.5.0" -tabulate = ">=0.8.3,<0.9.0" -unidecode = ">=1.0.23,<2.0.0" - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -category = "dev" -optional = false -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 = "contextlib2" -version = "21.6.0" -description = "Backports and enhancements for the contextlib module" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "contextlib2-21.6.0-py2.py3-none-any.whl", hash = "sha256:3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f"}, - {file = "contextlib2-21.6.0.tar.gz", hash = "sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869"}, -] - -[[package]] -name = "coverage" -version = "6.5.0" -description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "coverage-6.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53"}, - {file = "coverage-6.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a"}, - {file = "coverage-6.5.0-cp310-cp310-win32.whl", hash = "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32"}, - {file = "coverage-6.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e"}, - {file = "coverage-6.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b"}, - {file = "coverage-6.5.0-cp311-cp311-win32.whl", hash = "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578"}, - {file = "coverage-6.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b"}, - {file = "coverage-6.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f"}, - {file = "coverage-6.5.0-cp37-cp37m-win32.whl", hash = "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b"}, - {file = "coverage-6.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e"}, - {file = "coverage-6.5.0-cp38-cp38-win32.whl", hash = "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d"}, - {file = "coverage-6.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f"}, - {file = "coverage-6.5.0-cp39-cp39-win32.whl", hash = "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72"}, - {file = "coverage-6.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987"}, - {file = "coverage-6.5.0-pp36.pp37.pp38-none-any.whl", hash = "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a"}, - {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "coveralls" -version = "3.3.1" -description = "Show coverage stats online via coveralls.io" -category = "dev" -optional = false -python-versions = ">= 3.5" -files = [ - {file = "coveralls-3.3.1-py2.py3-none-any.whl", hash = "sha256:f42015f31d386b351d4226389b387ae173207058832fbf5c8ec4b40e27b16026"}, - {file = "coveralls-3.3.1.tar.gz", hash = "sha256:b32a8bb5d2df585207c119d6c01567b81fba690c9c10a753bfe27a335bfc43ea"}, -] - -[package.dependencies] -coverage = ">=4.1,<6.0.0 || >6.1,<6.1.1 || >6.1.1,<7.0" -docopt = ">=0.6.1" -requests = ">=1.0.0" - -[package.extras] -yaml = ["PyYAML (>=3.10)"] - -[[package]] -name = "cyclonedx-python-lib" -version = "4.1.0" -description = "A library for producing CycloneDX SBOM (Software Bill of Materials) files." -category = "dev" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "cyclonedx_python_lib-4.1.0-py3-none-any.whl", hash = "sha256:28b8c6c96372345c61464561b3040ede38d1c82026f706d87e8728ba5f7f4ddb"}, - {file = "cyclonedx_python_lib-4.1.0.tar.gz", hash = "sha256:7996657f9788758ed05bea8c247e3e6ffcccfbc48818cd34795a4ae094b307bd"}, -] - -[package.dependencies] -packageurl-python = ">=0.11" -py-serializable = ">=0.11.1,<0.12.0" -sortedcontainers = ">=2.4.0,<3.0.0" - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "distlib" -version = "0.3.7" -description = "Distribution utilities" -category = "dev" -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 = "docopt" -version = "0.6.2" -description = "Pythonic argument parser, that will make you smile" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.1.3" -description = "Backport of PEP 654 (exception groups)" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "filelock" -version = "3.12.2" -description = "A platform independent file lock." -category = "dev" -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 (>=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" -version = "1.1" -description = "HTML parser based on the WHATWG HTML specification" -category = "dev" -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 = ["chardet (>=2.2)", "genshi", "lxml"] -chardet = ["chardet (>=2.2)"] -genshi = ["genshi"] -lxml = ["lxml"] - -[[package]] -name = "identify" -version = "2.5.27" -description = "File identification library for Python" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "identify-2.5.27-py2.py3-none-any.whl", hash = "sha256:fdb527b2dfe24602809b2201e033c2a113d7bdf716db3ca8e3243f735dcecaba"}, - {file = "identify-2.5.27.tar.gz", hash = "sha256:287b75b04a0e22d727bc9a41f0d4f3c1bcada97490fa6eabb5b28f0e9097e733"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" -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 = "importlib-metadata" -version = "6.8.0" -description = "Read metadata from Python packages" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -category = "dev" -optional = false -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 = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "mdformat" -version = "0.7.17" -description = "CommonMark compliant Markdown formatter" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mdformat-0.7.17-py3-none-any.whl", hash = "sha256:91ffc5e203f5814a6ad17515c77767fd2737fc12ffd8b58b7bb1d8b9aa6effaa"}, - {file = "mdformat-0.7.17.tar.gz", hash = "sha256:a9dbb1838d43bb1e6f03bd5dca9412c552544a9bc42d6abb5dc32adfe8ae7c0d"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} -markdown-it-py = ">=1.0.0,<4.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "msgpack" -version = "1.0.5" -description = "MessagePack serializer" -category = "dev" -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 = "mypy" -version = "1.5.1" -description = "Optional static typing for Python" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, - {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, - {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, - {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, - {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, - {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, - {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, - {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, - {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, - {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, - {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, - {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, - {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, - {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, - {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, - {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, - {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, - {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, - {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, -] - -[package.dependencies] -mypy-extensions = ">=1.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "nodeenv" -version = "1.8.0" -description = "Node.js virtual environment builder" -category = "dev" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, -] - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "nuitka" -version = "1.7.10" -description = "Python compiler with full language support and CPython compatibility" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "Nuitka-1.7.10.tar.gz", hash = "sha256:61c84b4eb7105d20836940ab6134460b690da8aab7a74bdc84ddd05de1e04b16"}, -] - -[package.dependencies] -ordered-set = ">=4.1.0" -zstandard = ">=0.15" - -[[package]] -name = "objprint" -version = "0.2.2" -description = "A library that can print Python objects in human readable format" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "objprint-0.2.2-py3-none-any.whl", hash = "sha256:9f50bb3b7cbe95b6d22c79e4f08a5273e3f7e5ff5ce35e146f6e7854abd276a0"}, - {file = "objprint-0.2.2.tar.gz", hash = "sha256:90f2f3c19dfda1b5eb50d87d82ccbc20511ca4f02c4878553c56edc711e39689"}, -] - -[[package]] -name = "ordered-set" -version = "4.1.0" -description = "An OrderedSet is a custom MutableSet that remembers its order, so that every" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8"}, - {file = "ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562"}, -] - -[package.extras] -dev = ["black", "mypy", "pytest"] - -[[package]] -name = "packageurl-python" -version = "0.11.2" -description = "A purl aka. Package URL parser and builder" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packageurl-python-0.11.2.tar.gz", hash = "sha256:01fbf74a41ef85cf413f1ede529a1411f658bda66ed22d45d27280ad9ceba471"}, - {file = "packageurl_python-0.11.2-py3-none-any.whl", hash = "sha256:799acfe8d9e6e3534bbc19660be97d5b66754bc033e62c39f1e2f16323fcfa84"}, -] - -[package.extras] -build = ["wheel"] -lint = ["black", "isort", "mypy"] -sqlalchemy = ["sqlalchemy (>=2.0.0)"] -test = ["pytest"] - -[[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -category = "dev" -optional = false -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 = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, -] - -[[package]] -name = "pip" -version = "23.2.1" -description = "The PyPA recommended tool for installing Python packages." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pip-23.2.1-py3-none-any.whl", hash = "sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be"}, - {file = "pip-23.2.1.tar.gz", hash = "sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2"}, -] - -[[package]] -name = "pip-api" -version = "0.0.30" -description = "An unofficial, importable pip API" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pip-api-0.0.30.tar.gz", hash = "sha256:a05df2c7aa9b7157374bcf4273544201a0c7bae60a9c65bcf84f3959ef3896f3"}, - {file = "pip_api-0.0.30-py3-none-any.whl", hash = "sha256:2a0314bd31522eb9ffe8a99668b0d07fee34ebc537931e7b6483001dbedcbdc9"}, -] - -[package.dependencies] -pip = "*" - -[[package]] -name = "pip-audit" -version = "2.6.1" -description = "A tool for scanning Python environments for known vulnerabilities" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pip_audit-2.6.1-py3-none-any.whl", hash = "sha256:8a32bb67dca6a76c244bbccebed562c0f6957b1fc9d34d59a9ec0fbff0672ae0"}, - {file = "pip_audit-2.6.1.tar.gz", hash = "sha256:55c9bd18b0fe3959f73397db08d257c6012ad1826825e3d74cb6c3f79e95c245"}, -] - -[package.dependencies] -CacheControl = {version = ">=0.13.0", extras = ["filecache"]} -cyclonedx-python-lib = ">=4.0,<5.0" -html5lib = ">=1.1" -packaging = ">=23.0.0" -pip-api = ">=0.0.28" -pip-requirements-parser = ">=32.0.0" -requests = ">=2.31.0" -rich = ">=12.4" -toml = ">=0.10" - -[package.extras] -dev = ["build", "bump (>=1.3.2)", "pip-audit[doc,lint,test]"] -doc = ["pdoc"] -lint = ["black (>=22.3.0)", "interrogate", "isort", "mypy", "ruff (<0.0.281)", "types-html5lib", "types-requests", "types-toml"] -test = ["coverage[toml]", "pretend", "pytest", "pytest-cov"] - -[[package]] -name = "pip-requirements-parser" -version = "32.0.1" -description = "pip requirements parser - a mostly correct pip requirements parsing library because it uses pip's own code." -category = "dev" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "pip-requirements-parser-32.0.1.tar.gz", hash = "sha256:b4fa3a7a0be38243123cf9d1f3518da10c51bdb165a2b2985566247f9155a7d3"}, - {file = "pip_requirements_parser-32.0.1-py3-none-any.whl", hash = "sha256:4659bc2a667783e7a15d190f6fccf8b2486685b6dba4c19c3876314769c57526"}, -] - -[package.dependencies] -packaging = "*" -pyparsing = "*" - -[package.extras] -docs = ["Sphinx (>=3.3.1)", "doc8 (>=0.8.1)", "sphinx-rtd-theme (>=0.5.0)"] -testing = ["aboutcode-toolkit (>=6.0.0)", "black", "pytest (>=6,!=7.0.0)", "pytest-xdist (>=2)"] - -[[package]] -name = "platformdirs" -version = "3.10.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "pluggy" -version = "1.3.0" -description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pre-commit" -version = "3.3.3" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pre_commit-3.3.3-py2.py3-none-any.whl", hash = "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb"}, - {file = "pre_commit-3.3.3.tar.gz", hash = "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "py-serializable" -version = "0.11.1" -description = "Library for serializing and deserializing Python Objects to and from JSON and XML." -category = "dev" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "py-serializable-0.11.1.tar.gz", hash = "sha256:ba0e1287b9e4f645a5334f1913abd8e647e7250209f84f55dce3909498a6f586"}, - {file = "py_serializable-0.11.1-py3-none-any.whl", hash = "sha256:79e21f0672822e6200b15f45ce9f636e8126466f62dbd7d488c67313c72b5c3e"}, -] - -[package.dependencies] -defusedxml = ">=0.7.1,<0.8.0" - -[[package]] -name = "pycairo" -version = "1.24.0" -description = "Python interface for cairo" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycairo-1.24.0-cp310-cp310-win32.whl", hash = "sha256:031f5ef2c80792673f2c54ee285f2a31779a44d7521a27a7f82e4a5ecfafc26e"}, - {file = "pycairo-1.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:afccac552386ab628e8ae658185fa363e8d15a5afe96d1de43f97027dd78bdd6"}, - {file = "pycairo-1.24.0-cp311-cp311-win32.whl", hash = "sha256:4631ed794a3376ec314ce47826c3e51940b54695f4ef7d5b3245b203037ae760"}, - {file = "pycairo-1.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed0622a0ccffb873ffe7fee1699d60779f1260fba143390e5366d55f1d1739f5"}, - {file = "pycairo-1.24.0-cp312-cp312-win32.whl", hash = "sha256:220742f187d3940d695c1af1a0c1646e26dc2199d65b7bafaa527e15c3520fd3"}, - {file = "pycairo-1.24.0-cp312-cp312-win_amd64.whl", hash = "sha256:3199d6a0538d6482c71efb816bd330515e98bb06f182e23572c77d92be98f536"}, - {file = "pycairo-1.24.0-cp38-cp38-win32.whl", hash = "sha256:c7c79e748ec849811241d29553184c3ad93c857558dbe9954a49327680b8d356"}, - {file = "pycairo-1.24.0-cp38-cp38-win_amd64.whl", hash = "sha256:6ad5c3425408ebb0dfaad2cca4a80e7524d7a309305acdb2569638b5cc988fe7"}, - {file = "pycairo-1.24.0-cp39-cp39-win32.whl", hash = "sha256:c5f6efdd86fe13d36a6b004c64d8e97cde9854d599cf6cca962afb1966fe533d"}, - {file = "pycairo-1.24.0-cp39-cp39-win_amd64.whl", hash = "sha256:26fe2c32ba24caae524d855f26f3ee1a0c1ea3291da2a19604264ed29f64d834"}, - {file = "pycairo-1.24.0.tar.gz", hash = "sha256:1444d52f1bb4cc79a4a0c0fe2ccec4bd78ff885ab01ebe1c0f637d8392bcafb6"}, -] - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -category = "dev" -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.16.1" -description = "Pygments is a syntax highlighting package written in Python." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pygobject" -version = "3.44.1" -description = "Python bindings for GObject Introspection" -category = "main" -optional = false -python-versions = ">=3.7, <4" -files = [ - {file = "PyGObject-3.44.1.tar.gz", hash = "sha256:665fbe980c91e8b31ad78ed3f66879946948200864002d193f67eccc1d7d5d83"}, -] - -[package.dependencies] -pycairo = ">=1.16,<2.0" - -[[package]] -name = "pyparsing" -version = "3.1.1" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pytest" -version = "7.4.0" -description = "pytest: simple powerful testing with Python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "4.1.0" -description = "Pytest plugin for measuring coverage." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytoolconfig" -version = "1.2.5" -description = "Python tool configuration" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytoolconfig-1.2.5-py3-none-any.whl", hash = "sha256:239ba9d3e537b91d0243275a497700ea39a5e259ddb80421c366e3b288bf30fe"}, - {file = "pytoolconfig-1.2.5.tar.gz", hash = "sha256:a50f9dfe23b03a9d40414c1fdf902fefbeae12f2ac75a3c8f915944d6ffac279"}, -] - -[package.dependencies] -packaging = ">=22.0" -platformdirs = {version = ">=1.4.4", optional = true, markers = "extra == \"global\""} -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -doc = ["sphinx (>=4.5.0)", "tabulate (>=0.8.9)"] -gendocs = ["pytoolconfig[doc]", "sphinx (>=4.5.0)", "sphinx-autodoc-typehints (>=1.18.1)", "sphinx-rtd-theme (>=1.0.0)"] -global = ["platformdirs (>=1.4.4)"] -validation = ["pydantic (>=1.7.4)"] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -category = "dev" -optional = false -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,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rich" -version = "13.5.2" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "dev" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.5.2-py3-none-any.whl", hash = "sha256:146a90b3b6b47cac4a73c12866a499e9817426423f57c5a66949c086191a8808"}, - {file = "rich-13.5.2.tar.gz", hash = "sha256:fb9d6c0a0f643c99eed3875b5377a184132ba9be4d61516a55273d3554d75a39"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "rope" -version = "1.9.0" -description = "a python refactoring library..." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "rope-1.9.0-py3-none-any.whl", hash = "sha256:2ed32d72cd2c4395bb1d569e38fd4f15d6080cfadd61b6e5c565fd39e3f677aa"}, - {file = "rope-1.9.0.tar.gz", hash = "sha256:f48d708132c0e062b411308732ca13933b976486b4b53d1e804f94ed08d69503"}, -] - -[package.dependencies] -pytoolconfig = {version = ">=1.2.2", extras = ["global"]} - -[package.extras] -dev = ["build (>=0.7.0)", "pre-commit (>=2.20.0)", "pytest (>=7.0.1)", "pytest-timeout (>=2.1.0)"] -doc = ["pytoolconfig[doc]", "sphinx (>=4.5.0)", "sphinx-autodoc-typehints (>=1.18.1)", "sphinx-rtd-theme (>=1.0.0)"] -release = ["pip-tools (>=6.12.1)", "toml (>=0.10.2)", "twine (>=4.0.2)"] - -[[package]] -name = "ruff" -version = "0.0.243" -description = "An extremely fast Python linter, written in Rust." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.0.243-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:242571d79d3d7a1e441e88b0cf2814b24bfc4e3a073e5d82df81aa52ad829e4c"}, - {file = "ruff-0.0.243-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4fd0ef0dddd7ccce6457cca556baf51504c11f7deaaa5944a47c5e0c6c3b1425"}, - {file = "ruff-0.0.243-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e2e6632e2d07e6e7257a44592e0fade0d5df23004a3b180efd0d3bbb581a09"}, - {file = "ruff-0.0.243-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a70c7810453f6c5120887fc22fcbcf8a4987e767f45270a9aad5e6e9b0a26ff"}, - {file = "ruff-0.0.243-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cb8ef4a5cbb219ed344286b07795c0b88f277bc860207e0a6bce0fd8e4c5f8e"}, - {file = "ruff-0.0.243-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f75c11940cc6b374ba070b5dc154c85c2b8753d03cbb53f182438404bae52d31"}, - {file = "ruff-0.0.243-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:919075726724d62b60caedd286317ca0c77cb67ba4291b9067feafdac2506872"}, - {file = "ruff-0.0.243-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0f5bdb14a2a2f9a63f6f0979fb0501e426e2bd8e6499ade41e1311b379a4d92"}, - {file = "ruff-0.0.243-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8ffdbf62d72db5ab5d3b51abe5b4dfb53cf3f330af7f57e0101f36ff7176449"}, - {file = "ruff-0.0.243-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:081b70f1dd2d16d9f60079cf95215d9095ca16032c02118cfc88b0b53e406b9c"}, - {file = "ruff-0.0.243-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d8f1d26c0a3b51a4b5c493c29536112c61ec6ff7a66c5b673b2af37b7859d6f1"}, - {file = "ruff-0.0.243-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f432e745f6b38e2a643ae9c05ae30345196a435a23d844b61a50d1808acba82"}, - {file = "ruff-0.0.243-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f38b6b6470b468271e283ecc7bc169465b3f3cdb6df199abe69aff0c3c17c756"}, - {file = "ruff-0.0.243-py3-none-win32.whl", hash = "sha256:2707e2c32ace855afad3e06bddf2280d1fc15e303dea2de3ccd0e308a5b395ae"}, - {file = "ruff-0.0.243-py3-none-win_amd64.whl", hash = "sha256:be44aff098fd424b9a9218eedef80d7125222ea86c3cd62e15f6f587455c99f3"}, - {file = "ruff-0.0.243.tar.gz", hash = "sha256:d5847e75038b51801f45b31a93c3526114d3aac59acea3493bb06ebc7783b004"}, -] - -[[package]] -name = "schema" -version = "0.7.5" -description = "Simple data validation library" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "schema-0.7.5-py2.py3-none-any.whl", hash = "sha256:f3ffdeeada09ec34bf40d7d79996d9f7175db93b7a5065de0faa7f41083c1e6c"}, - {file = "schema-0.7.5.tar.gz", hash = "sha256:f06717112c61895cabc4707752b88716e8420a8819d71404501e114f91043197"}, -] - -[package.dependencies] -contextlib2 = ">=0.5.5" - -[[package]] -name = "setuptools" -version = "68.1.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, - {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "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.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "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 = "six" -version = "1.16.0" -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 = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, -] - -[[package]] -name = "tabulate" -version = "0.8.10" -description = "Pretty-print tabular data" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "tabulate-0.8.10-py3-none-any.whl", hash = "sha256:0ba055423dbaa164b9e456abe7920c5e8ed33fcc16f6d1b2f2d152c8e1e8b4fc"}, - {file = "tabulate-0.8.10.tar.gz", hash = "sha256:6c57f3f3dd7ac2782770155f3adb2db0b1a269637e42f27599925e64b114f519"}, -] - -[package.extras] -widechars = ["wcwidth"] - -[[package]] -name = "tbump" -version = "6.10.0" -description = "Bump software releases" -category = "dev" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "tbump-6.10.0-py3-none-any.whl", hash = "sha256:170a4395d167daee357cb96af5e874119c470feaba9f605e73f3426e768c2542"}, - {file = "tbump-6.10.0.tar.gz", hash = "sha256:9ebf5d69bc92ca8be1afb13a80f51e374526cb9988f4c3b167036a9e8a10a684"}, -] - -[package.dependencies] -cli-ui = ">=0.10.3" -docopt = ">=0.6.2,<0.7.0" -schema = ">=0.7.1,<0.8.0" -tomlkit = ">=0.11,<0.12" - -[[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" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tomlkit" -version = "0.11.8" -description = "Style preserving TOML library" -category = "dev" -optional = false -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 = "types-pyyaml" -version = "6.0.12.11" -description = "Typing stubs for PyYAML" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, - {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, -] - -[[package]] -name = "typing-extensions" -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 = "unidecode" -version = "1.3.6" -description = "ASCII transliterations of Unicode text" -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "Unidecode-1.3.6-py3-none-any.whl", hash = "sha256:547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be"}, - {file = "Unidecode-1.3.6.tar.gz", hash = "sha256:fed09cf0be8cf415b391642c2a5addfc72194407caee4f98719e40ec2a72b830"}, -] - -[[package]] -name = "urllib3" -version = "2.0.4" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" -optional = false -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 = ["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.24.3" -description = "Virtual Python Environment builder" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, - {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<4" - -[package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] - -[[package]] -name = "viztracer" -version = "0.15.6" -description = "A debugging and profiling tool that can trace and visualize python code execution" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "viztracer-0.15.6-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:73fbd8e6f7ebe7e1eb78dd6bedbec7b8a217aa9d4910d880268de26ec8089590"}, - {file = "viztracer-0.15.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:917b6709d4880ecd4419fb627290e27026a3e01b45bd965f02b147579f093893"}, - {file = "viztracer-0.15.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.manylinux_2_24_i686.whl", hash = "sha256:92253c2d83b30527ac423dc5be2f4a0bc68473548e81d91367cc98c915589824"}, - {file = "viztracer-0.15.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4598cf49fa4f58f476996df00af9b13c0300fd5e236629214cae4a409839a66"}, - {file = "viztracer-0.15.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f50c0f33d6396c19923d91f797baff8b7a3b8a08c3419164cc9e2a58af5bae4"}, - {file = "viztracer-0.15.6-cp310-cp310-win32.whl", hash = "sha256:d9646c4f2ee4cde6f643d7060b5dd5d23e79e3689c9b1c55d3afa5a60d4a3572"}, - {file = "viztracer-0.15.6-cp310-cp310-win_amd64.whl", hash = "sha256:dc65dcb8284d9b632c9abb2ab1185fba547a1eb419b33848a062927e9e1ddb89"}, - {file = "viztracer-0.15.6-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:96ce96695583ca845d6d4b1bede44e2330a5fe672541ba066d723b215e4ba0d2"}, - {file = "viztracer-0.15.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a783a30fe759adc08ce482d6d3c94df1fd89ef4906b2b77ff3c43a6982365e7"}, - {file = "viztracer-0.15.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.manylinux_2_24_i686.whl", hash = "sha256:95590ae898e8388bd4961d977977afa496fbe35f378f4f2f3b869d2e62ff0edb"}, - {file = "viztracer-0.15.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1ee3d8cf988f38018c6820d55292eb21781b95ec8bec29e9afd1d61dab28a13"}, - {file = "viztracer-0.15.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9d077b5415eb01792fb53362ab6142beb35914c655dae3d98df6000637267d1"}, - {file = "viztracer-0.15.6-cp311-cp311-win32.whl", hash = "sha256:b7136f84f626676e18573dae0913525880cf156d16b9ddc5e7ec806d092c03d4"}, - {file = "viztracer-0.15.6-cp311-cp311-win_amd64.whl", hash = "sha256:b393f15a66618c87fb7eeb2e072c35aa25c4b9449b37f82e3f00067bdd10b20b"}, - {file = "viztracer-0.15.6-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:4c579da3430a29e6bebb43f52487690aa120d0c3680e4039fc0db0a606cb4355"}, - {file = "viztracer-0.15.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4210c39e8c40bbfdeda96d402f99ffdd6b078e8ab3d2137829f4833c5876bc27"}, - {file = "viztracer-0.15.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.manylinux_2_24_i686.whl", hash = "sha256:221362a11cd11942cd7c741335f5a805bd9293a0e762c36949bcc760fc1b5bca"}, - {file = "viztracer-0.15.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a702dfcbc9c6ad2a52f0cc1eb95f93620cdc2101637ae43d636d107e73df818"}, - {file = "viztracer-0.15.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08570e77d57263e3cac4279f5e60f280c1250cb04b1245e37da0cd4479abe9ef"}, - {file = "viztracer-0.15.6-cp37-cp37m-win32.whl", hash = "sha256:e817ffe06d5a3cfd85abc98bdce6b03561069f3200f5e329cfca003366bfa83f"}, - {file = "viztracer-0.15.6-cp37-cp37m-win_amd64.whl", hash = "sha256:33bb4a5990cb183c7150c435249cf4481974b9698cfebcd71fdba24de3458932"}, - {file = "viztracer-0.15.6-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:35dce1ee0963baa9c6f032306f1c93f826ac3ac685f8d5d1e1749e5da927e270"}, - {file = "viztracer-0.15.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e46b5a5d057d549fcf5e0de830595286c8800dfa419c0d648f11fb1f5f7ac5d"}, - {file = "viztracer-0.15.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.manylinux_2_24_i686.whl", hash = "sha256:12eb68546fa995b08f576d6dd97cd8b55c5f7bb45e0886652890ffebf2ffa781"}, - {file = "viztracer-0.15.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c50a6e36cae6cbc571bd761dbbcba14e14069eafadc38745fd1fbae14a2a3538"}, - {file = "viztracer-0.15.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abd349608ee9efaf2cb3d0dc6c18a42ca3288ba32e0a4e8838afc9965e11e59a"}, - {file = "viztracer-0.15.6-cp38-cp38-win32.whl", hash = "sha256:a5b8112ac24443345058b1bfe91b78cedea59a51cf8ac05d8912d642d88ee5e5"}, - {file = "viztracer-0.15.6-cp38-cp38-win_amd64.whl", hash = "sha256:41117c0b8f418b1694cc95b48c6f1a28fd1936efe6d4e2982475bfe194d46d1b"}, - {file = "viztracer-0.15.6-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:9df88a236685a3b368a3c33176b1e660c792fed67f4dfb29970c61b96769e88a"}, - {file = "viztracer-0.15.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0fef6e892356becfdf6c9d4b43ee6ff3349fecad0f2e0be068326e227e71c98"}, - {file = "viztracer-0.15.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.manylinux_2_24_i686.whl", hash = "sha256:b7a0c216fd5eb29a6f8e0b3f546270b29738666a57df44fa7ccf0d7b31445099"}, - {file = "viztracer-0.15.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7054ed15a10f8052c5f85d21e712df5cd6ed53c7b6c1d2aac9d482fee42b9743"}, - {file = "viztracer-0.15.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca356949ca34fc4462ae467fcd281ea96722442f67824214f5868d30551bc96b"}, - {file = "viztracer-0.15.6-cp39-cp39-win32.whl", hash = "sha256:a0f927339a30442b0cf87c37e573c8b0423374f8664ec0daab29052fb9134d4a"}, - {file = "viztracer-0.15.6-cp39-cp39-win_amd64.whl", hash = "sha256:c0bb60a012e130413ce2d0d7452349869e0bc09e8fc39053df60215b218915b8"}, - {file = "viztracer-0.15.6.tar.gz", hash = "sha256:cfdbb2ae1a00f4903ec80ac1f9fadaf8f777f3d61082b98abd993795bd3da282"}, -] - -[package.dependencies] -objprint = ">=0.1.3" - -[package.extras] -full = ["orjson", "rich"] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -category = "dev" -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 = "zipp" -version = "3.16.2" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[[package]] -name = "zstandard" -version = "0.19.0" -description = "Zstandard bindings for Python" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "zstandard-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a65e0119ad39e855427520f7829618f78eb2824aa05e63ff19b466080cd99210"}, - {file = "zstandard-0.19.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fa496d2d674c6e9cffc561639d17009d29adee84a27cf1e12d3c9be14aa8feb"}, - {file = "zstandard-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f7c68de4f362c1b2f426395fe4e05028c56d0782b2ec3ae18a5416eaf775576"}, - {file = "zstandard-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1a7a716bb04b1c3c4a707e38e2dee46ac544fff931e66d7ae944f3019fc55b8"}, - {file = "zstandard-0.19.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:72758c9f785831d9d744af282d54c3e0f9db34f7eae521c33798695464993da2"}, - {file = "zstandard-0.19.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04c298d381a3b6274b0a8001f0da0ec7819d052ad9c3b0863fe8c7f154061f76"}, - {file = "zstandard-0.19.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aef0889417eda2db000d791f9739f5cecb9ccdd45c98f82c6be531bdc67ff0f2"}, - {file = "zstandard-0.19.0-cp310-cp310-win32.whl", hash = "sha256:9d97c713433087ba5cee61a3e8edb54029753d45a4288ad61a176fa4718033ce"}, - {file = "zstandard-0.19.0-cp310-cp310-win_amd64.whl", hash = "sha256:81ab21d03e3b0351847a86a0b298b297fde1e152752614138021d6d16a476ea6"}, - {file = "zstandard-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:593f96718ad906e24d6534187fdade28b611f8ed06e27ba972ba48aecec45fc6"}, - {file = "zstandard-0.19.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e21032efe673b887464667d09406bab6e16d96b09ad87e80859e3a20b6745b6"}, - {file = "zstandard-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:876567136b0359f6581ecd892bdb4ca03a0eead0265db73206c78cff03bcdb0f"}, - {file = "zstandard-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9087571729c968cd853d54b3f6e9d0ec61e45cd2c31e0eb8a0d4bdbbe6da2f"}, - {file = "zstandard-0.19.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8371217dff635cfc0220db2720fc3ce728cd47e72bb7572cca035332823dbdfc"}, - {file = "zstandard-0.19.0-cp311-cp311-win32.whl", hash = "sha256:126aa8433773efad0871f624339c7984a9c43913952f77d5abeee7f95a0c0860"}, - {file = "zstandard-0.19.0-cp311-cp311-win_amd64.whl", hash = "sha256:0fde1c56ec118940974e726c2a27e5b54e71e16c6f81d0b4722112b91d2d9009"}, - {file = "zstandard-0.19.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:898500957ae5e7f31b7271ace4e6f3625b38c0ac84e8cedde8de3a77a7fdae5e"}, - {file = "zstandard-0.19.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660b91eca10ee1b44c47843894abe3e6cfd80e50c90dee3123befbf7ca486bd3"}, - {file = "zstandard-0.19.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55b3187e0bed004533149882ef8c24e954321f3be81f8a9ceffe35099b82a0d0"}, - {file = "zstandard-0.19.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6d2182e648e79213b3881998b30225b3f4b1f3e681f1c1eaf4cacf19bde1040d"}, - {file = "zstandard-0.19.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ec2c146e10b59c376b6bc0369929647fcd95404a503a7aa0990f21c16462248"}, - {file = "zstandard-0.19.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67710d220af405f5ce22712fa741d85e8b3ada7a457ea419b038469ba379837c"}, - {file = "zstandard-0.19.0-cp36-cp36m-win32.whl", hash = "sha256:f097dda5d4f9b9b01b3c9fa2069f9c02929365f48f341feddf3d6b32510a2f93"}, - {file = "zstandard-0.19.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f4ebfe03cbae821ef994b2e58e4df6a087470cc522aca502614e82a143365d45"}, - {file = "zstandard-0.19.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b80f6f6478f9d4ca26daee6c61584499493bf97950cfaa1a02b16bb5c2c17e70"}, - {file = "zstandard-0.19.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:909bdd4e19ea437eb9b45d6695d722f6f0fd9d8f493e837d70f92062b9f39faf"}, - {file = "zstandard-0.19.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9c90a44470f2999779057aeaf33461cbd8bb59d8f15e983150d10bb260e16e0"}, - {file = "zstandard-0.19.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:401508efe02341ae681752a87e8ac9ef76df85ef1a238a7a21786a489d2c983d"}, - {file = "zstandard-0.19.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47dfa52bed3097c705451bafd56dac26535545a987b6759fa39da1602349d7ba"}, - {file = "zstandard-0.19.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1a4fb8b4ac6772e4d656103ccaf2e43e45bd16b5da324b963d58ef360d09eb73"}, - {file = "zstandard-0.19.0-cp37-cp37m-win32.whl", hash = "sha256:d63b04e16df8ea21dfcedbf5a60e11cbba9d835d44cb3cbff233cfd037a916d5"}, - {file = "zstandard-0.19.0-cp37-cp37m-win_amd64.whl", hash = "sha256:74c2637d12eaacb503b0b06efdf55199a11b1d7c580bd3dd9dfe84cac97ef2f6"}, - {file = "zstandard-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2e4812720582d0803e84aefa2ac48ce1e1e6e200ca3ce1ae2be6d410c1d637ae"}, - {file = "zstandard-0.19.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4514b19abe6dbd36d6c5d75c54faca24b1ceb3999193c5b1f4b685abeabde3d0"}, - {file = "zstandard-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6caed86cd47ae93915d9031dc04be5283c275e1a2af2ceff33932071f3eeff4d"}, - {file = "zstandard-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ccc4727300f223184520a6064c161a90b5d0283accd72d1455bcd85ec44dd0d"}, - {file = "zstandard-0.19.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:879411d04068bd489db57dcf6b82ffad3c5fb2a1fdd30817c566d8b7bedee442"}, - {file = "zstandard-0.19.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c9ca56345b0c5574db47560603de9d05f63cce5dfeb3a456eb60f3fec737ff2"}, - {file = "zstandard-0.19.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d777d239036815e9b3a093fa9208ad314c040c26d7246617e70e23025b60083a"}, - {file = "zstandard-0.19.0-cp38-cp38-win32.whl", hash = "sha256:be6329b5ba18ec5d32dc26181e0148e423347ed936dda48bf49fb243895d1566"}, - {file = "zstandard-0.19.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d5bb598963ac1f1f5b72dd006adb46ca6203e4fb7269a5b6e1f99e85b07ad38"}, - {file = "zstandard-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:619f9bf37cdb4c3dc9d4120d2a1003f5db9446f3618a323219f408f6a9df6725"}, - {file = "zstandard-0.19.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b253d0c53c8ee12c3e53d181fb9ef6ce2cd9c41cbca1c56a535e4fc8ec41e241"}, - {file = "zstandard-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c927b6aa682c6d96225e1c797f4a5d0b9f777b327dea912b23471aaf5385376"}, - {file = "zstandard-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f01b27d0b453f07cbcff01405cdd007e71f5d6410eb01303a16ba19213e58e4"}, - {file = "zstandard-0.19.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c7560f622e3849cc8f3e999791a915addd08fafe80b47fcf3ffbda5b5151047c"}, - {file = "zstandard-0.19.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e892d3177380ec080550b56a7ffeab680af25575d291766bdd875147ba246a91"}, - {file = "zstandard-0.19.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60a86b7b2b1c300779167cf595e019e61afcc0e20c4838692983a921db9006ac"}, - {file = "zstandard-0.19.0-cp39-cp39-win32.whl", hash = "sha256:755020d5aeb1b10bffd93d119e7709a2a7475b6ad79c8d5226cea3f76d152ce0"}, - {file = "zstandard-0.19.0-cp39-cp39-win_amd64.whl", hash = "sha256:55a513ec67e85abd8b8b83af8813368036f03e2d29a50fc94033504918273980"}, - {file = "zstandard-0.19.0.tar.gz", hash = "sha256:31d12fcd942dd8dbf52ca5f6b1bbe287f44e5d551a081a983ff3ea2082867863"}, -] - -[package.dependencies] -cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\""} - -[package.extras] -cffi = ["cffi (>=1.11)"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.9" -content-hash = "2d75703b942d1ff6ea0fd0f9fdce66dd03a231559add46f62503466a6dba9b9c" diff --git a/pyproject.toml b/pyproject.toml index c2ec213..cd72542 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,59 +1,76 @@ -[tool.poetry] +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] name = "keyhint" version = "0.3.0" description = "Cheat-sheets for shortcuts & commands at your fingertips." keywords = ["shortcuts", "keybindings", "hints", "helper", "cheatsheet"] -license = "MIT" -authors = ["dynobo "] readme = "README.md" -repository = "https://github.com/dynobo/keyhint" +requires-python = ">=3.7" +license = "MIT" +authors = [{ name = "dynobo", email = "dynobo@mailbox.org" }] classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", - "Programming Language :: Python :: 3", + "Programming Language :: Python", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Utilities", "Intended Audience :: End Users/Desktop", "Operating System :: POSIX :: Linux", ] +dependencies = ["PyGObject>=3.42.2", "PyYAML>=6.0"] + +[project.urls] +Documentation = "https://github.com/dynobo/keyhint#readme" +Issues = "https://github.com/dynobo/keyhint/issues" +Source = "https://github.com/dynobo/keyhint" + +[[tool.hatch.envs.all.matrix]] +python = ["3.7", "3.8", "3.9", "3.10", "3.11"] + +[tool.hatch.envs.default] +dependencies = [ + "coverage[toml]>=6.5", + "pytest", + "pytest-cov", + "pre-commit", + "coveralls", + "types-PyYAML", + "tbump", + "ruff", + "pip-audit", + "mypy", + "mdformat", +] -[tool.poetry.scripts] -keyhint = "keyhint.app:main" - -[tool.poetry.dependencies] -python = "^3.11" -PyGObject = "^3.42.2" -PyYAML = "^6.0" - -[tool.poetry.group.dev.dependencies] -pytest = "^7.2.1" -rope = "^1.7.0" -pytest-cov = "^4.0.0" -pre-commit = "^3.0.4" -coveralls = "^3.3.1" -types-PyYAML = "^6.0.12.4" -Nuitka = "^1.4.5" -tbump = "^6.9.0" -ruff = "^0.0.243" -pip-audit = "^2.4.14" -mdformat = "^0.7.16" -mypy = "^1.0.0" -ordered-set = "^4.1.0" -zstandard = "^0.19.0" -viztracer = "^0.15.6" - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" - -[tool.mypy] -files = ["keyhint/**/*.py", "tests/**/*.py"] -ignore_missing_imports = true -follow_imports_for_stubs = true - +[tool.hatch.envs.default.scripts] +style = [ + "ruff {args:.}", + "ruff format --check --diff {args:.}", + "mdformat --check --end-of-line keep {args:.}", +] +typing = "mypy" +test = ["pytest {args:tests}", "coverage lcov"] +security = "pip-audit" +fmt = [ + "ruff --fix {args:.}", + "ruff format {args:.}", + "mdformat --end-of-line keep {args:.}", +] +# Main tasks: +check = ["style", "typing", "test", "security"] +pre-commit = ["fmt", "check"] +version = "tbump {args:current-version}" [tool.ruff] -target-version = "py311" +target-version = "py39" line-length = 88 exclude = [".venv"] select = [ @@ -106,11 +123,36 @@ ignore = [ convention = "google" [tool.ruff.isort] -known-first-party = ["normcap"] +known-first-party = ["keyhint"] [tool.ruff.flake8-tidy-imports] ban-relative-imports = "all" +[tool.mypy] +files = ["keyhint/**/*.py", "tests/**/*.py"] +follow_imports = "skip" +ignore_missing_imports = true + +[tool.pytest.ini_options] +testpaths = ["tests"] +addopts = [ + "--durations=5", + "--showlocals", + "--cov", + "--cov-report=xml", + "--cov-report=html", +] + +[tool.coverage.run] +source_pkgs = ["keyhint"] +branch = true +parallel = true +omit = [] + +[tool.mdformat] +wrap = 88 +number = true +end_of_line = "keep" [tool.tbump] @@ -133,10 +175,6 @@ tag_template = "v{new_version}" src = "pyproject.toml" search = 'version = "{current_version}"' -[[tool.tbump.file]] -src = "Makefile" -search = "KeyHint-{current_version}" - [[tool.tbump.file]] src = "keyhint/__init__.py"