From b89a338246112cd25d0468a932f27388e7001d89 Mon Sep 17 00:00:00 2001 From: scito Date: Thu, 29 Dec 2022 14:24:12 +0100 Subject: [PATCH] enable mypy type checking --- .github/workflows/ci.yml | 6 +++- Pipfile | 2 ++ Pipfile.lock | 61 +++++++++++++++++++++++++++++++++++++- extract_otp_secret_keys.py | 10 +++---- requirements-dev.txt | 2 ++ setup.py | 2 +- upgrade_deps.sh | 10 +++++++ 7 files changed, 85 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9cb7160..9962340 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,13 +36,17 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install flake8 pytest pytest-mock + pip install flake8 pytest pytest-mock mypy types-protobuf pip install --use-pep517 -r requirements.txt + mypy --install-types --non-interactive - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=200 --statistics + - name: Type checking with mypy + run: | + mypy *.py - name: Test with pytest run: pytest diff --git a/Pipfile b/Pipfile index 899e049..e5dd662 100644 --- a/Pipfile +++ b/Pipfile @@ -15,6 +15,8 @@ pytest = "*" wheel = "*" flake8 = "*" pylint = "*" +mypy = "*" +types-protobuf = "*" [requires] python_version = "3.11" diff --git a/Pipfile.lock b/Pipfile.lock index c09f920..1a565c4 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "2f4059c8dbac6be85b1e3b2c2032b884d48dc6a7fd520ffdebb951e23246a23e" + "sha256": "507dfa1a2ffdf56718b6f68f988b5576d8b15cadb9a43fa74edcb273dd7af0b5" }, "pipfile-spec": 6, "requires": { @@ -254,6 +254,49 @@ "markers": "python_version >= '3.6'", "version": "==0.7.0" }, + "mypy": { + "hashes": [ + "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d", + "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6", + "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf", + "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f", + "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813", + "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33", + "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad", + "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05", + "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297", + "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06", + "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd", + "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243", + "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305", + "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476", + "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711", + "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70", + "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5", + "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461", + "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab", + "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c", + "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d", + "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135", + "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93", + "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648", + "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a", + "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb", + "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3", + "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372", + "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb", + "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef" + ], + "index": "pypi", + "version": "==0.991" + }, + "mypy-extensions": { + "hashes": [ + "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", + "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" + ], + "version": "==0.4.3" + }, "packaging": { "hashes": [ "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3", @@ -318,6 +361,22 @@ "markers": "python_version >= '3.6'", "version": "==0.11.6" }, + "types-protobuf": { + "hashes": [ + "sha256:7df483d34ad3fcb1fa7fff1073560d596c9ac1f419cfa851b220c9a93386c998", + "sha256:aeefcf39d637016998b3c7b699750847071b555f7c2e0c9873d42ab6103d1a39" + ], + "index": "pypi", + "version": "==4.21.0.2" + }, + "typing-extensions": { + "hashes": [ + "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", + "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" + ], + "markers": "python_version >= '3.7'", + "version": "==4.4.0" + }, "wheel": { "hashes": [ "sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac", diff --git a/extract_otp_secret_keys.py b/extract_otp_secret_keys.py index a33f6de..a5161ef 100644 --- a/extract_otp_secret_keys.py +++ b/extract_otp_secret_keys.py @@ -53,18 +53,18 @@ import urllib.parse as urlparse from enum import Enum from operator import add -from qrcode import QRCode +from qrcode import QRCode # type: ignore -import protobuf_generated_python.google_auth_pb2 +import protobuf_generated_python.google_auth_pb2 # type: ignore try: - import cv2 + import cv2 # type: ignore import numpy try: - import pyzbar.pyzbar as zbar - from qreader import QReader + import pyzbar.pyzbar as zbar # type: ignore + from qreader import QReader # type: ignore except ImportError as e: raise SystemExit(f""" ERROR: Cannot import QReader module. This problem is probably due to the missing zbar shared library. diff --git a/requirements-dev.txt b/requirements-dev.txt index cf07791..4372796 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,3 +3,5 @@ pytest flake8 pylint pytest-mock +mypy +types-protobuf diff --git a/setup.py b/setup.py index 8c9d510..433782c 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,5 @@ import pathlib -from setuptools import setup +from setuptools import setup # type: ignore setup( name='extract_otp_secret_keys', diff --git a/upgrade_deps.sh b/upgrade_deps.sh index 00de251..a17fe93 100755 --- a/upgrade_deps.sh +++ b/upgrade_deps.sh @@ -213,6 +213,16 @@ cmd="$FLAKE8 . --count --exit-zero --max-complexity=10 --max-line-length=200 --s if $interactive ; then askContinueYn "$cmd"; else echo -e "${cyan}$cmd${reset}";fi eval "$cmd" +# Type checking + +cmd="mypy --install-types --non-interactive" +if $interactive ; then askContinueYn "$cmd"; else echo -e "${cyan}$cmd${reset}";fi +eval "$cmd" + +cmd="mypy *.py" +if $interactive ; then askContinueYn "$cmd"; else echo -e "${cyan}$cmd${reset}";fi +eval "$cmd" + # Test cmd="pytest"