Skip to content

Commit aefb690

Browse files
authored
Add mypy check to github actions (#177)
* Add mypy check to github actions * Add more type hints & reduce errors in mypy checks
1 parent 810bb86 commit aefb690

File tree

9 files changed

+188
-58
lines changed

9 files changed

+188
-58
lines changed

.github/workflows/python-package.yml

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ jobs:
3232
- name: Test with pytest
3333
run: |
3434
python setup.py test
35+
- name: Run mypy
36+
continue-on-error: true
37+
run: |
38+
mypy pyms
3539
- name: Lint with flake8
3640
run: |
3741
# stop the build if there are Python syntax errors or undefined names

Pipfile.lock

+159-37
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyms/cloud/aws/kms.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,36 @@ class Crypt(CryptAbstract):
88
encryption_algorithm = "SYMMETRIC_DEFAULT" # 'SYMMETRIC_DEFAULT' | 'RSAES_OAEP_SHA_1' | 'RSAES_OAEP_SHA_256'
99
key_id = ""
1010

11-
def __init__(self, *args, **kwargs):
11+
def __init__(self, *args, **kwargs) -> None:
1212
self._init_boto()
1313
super().__init__(*args, **kwargs)
1414

15-
def encrypt(self, message): # pragma: no cover
15+
def encrypt(self, message: str) -> str: # pragma: no cover
1616
ciphertext = self.client.encrypt(
1717
KeyId=self.config.key_id,
1818
Plaintext=bytes(message, encoding="UTF-8"),
1919
)
2020
return str(base64.b64encode(ciphertext["CiphertextBlob"]), encoding="UTF-8")
2121

22-
def _init_boto(self): # pragma: no cover
22+
def _init_boto(self) -> None: # pragma: no cover
2323
check_package_exists("boto3")
2424
boto3 = import_package("boto3")
2525
boto3.set_stream_logger(name='botocore')
2626
self.client = boto3.client('kms')
2727

28-
def _aws_decrypt(self, blob_text): # pragma: no cover
28+
def _aws_decrypt(self, blob_text: bytes) -> str: # pragma: no cover
2929
response = self.client.decrypt(
3030
CiphertextBlob=blob_text,
3131
KeyId=self.config.key_id,
3232
EncryptionAlgorithm=self.encryption_algorithm
3333
)
3434
return str(response['Plaintext'], encoding="UTF-8")
3535

36-
def _parse_encrypted(self, encrypted):
36+
def _parse_encrypted(self, encrypted: str) -> bytes:
3737
blob_text = base64.b64decode(encrypted)
3838
return blob_text
3939

40-
def decrypt(self, encrypted):
40+
def decrypt(self, encrypted: str) -> str:
4141
blob_text = self._parse_encrypted(encrypted)
4242
decrypted = self._aws_decrypt(blob_text)
4343

pyms/crypt/fernet.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ def __init__(self, *args, **kwargs):
1818
self._loader = LoadFile(kwargs.get("path"), CRYPT_FILE_KEY_ENVIRONMENT, DEFAULT_KEY_FILENAME)
1919
super().__init__(*args, **kwargs)
2020

21-
def generate_key(self, password: Text, write_to_file: bool = False):
22-
password = password.encode() # Convert to type bytes
21+
def generate_key(self, password: Text, write_to_file: bool = False) -> bytes:
22+
byte_password = password.encode() # Convert to type bytes
2323
salt = os.urandom(16)
2424
kdf = PBKDF2HMAC(
2525
algorithm=hashes.SHA512_256(),
@@ -28,7 +28,7 @@ def generate_key(self, password: Text, write_to_file: bool = False):
2828
iterations=100000,
2929
backend=default_backend()
3030
)
31-
key = base64.urlsafe_b64encode(kdf.derive(password)) # Can only use kdf once
31+
key = base64.urlsafe_b64encode(kdf.derive(byte_password)) # Can only use kdf once
3232
if write_to_file:
3333
self._loader.put_file(key, 'wb')
3434
return key

pyms/flask/app/create_app.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22
import os
3-
from typing import List
3+
from typing import List, Optional
44

55
from flask import Flask
66

@@ -73,12 +73,12 @@ def example():
7373
Current services are swagger, request, tracer, metrics
7474
"""
7575
config_resource = CONFIG_BASE
76-
services: List[DriverService] = []
76+
services: List[str] = []
7777
application = Flask
78-
swagger: DriverService = None
79-
request: DriverService = None
80-
tracer: DriverService = None
81-
metrics: DriverService = None
78+
swagger: Optional[DriverService] = None
79+
request: Optional[DriverService] = None
80+
tracer: Optional[DriverService] = None
81+
metrics: Optional[DriverService] = None
8282
_singleton = True
8383

8484
def __init__(self, *args, **kwargs):

pyms/flask/services/driver.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
logger = logging.getLogger(LOGGER_NAME)
1010

1111

12-
def get_service_name(service_base=SERVICE_BASE, service=""):
12+
def get_service_name(service_base: str = SERVICE_BASE, service: str = "") -> str:
1313
return ".".join([service_base, service])
1414

1515

@@ -48,10 +48,10 @@ def __getattr__(self, attr, *args, **kwargs):
4848
return config_attribute if config_attribute == "" or config_attribute != {} else self.default_values.get(attr,
4949
None)
5050

51-
def is_enabled(self):
51+
def is_enabled(self) -> bool:
5252
return self.enabled
5353

54-
def exists_config(self):
54+
def exists_config(self) -> bool:
5555
return self.config is not None and isinstance(self.config, ConfFile)
5656

5757

pyms/flask/services/requests.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def set_propagate_headers(headers: dict) -> dict:
9797
headers.update({k: v})
9898
return headers
9999

100-
def _get_headers(self, headers, propagate_headers=False):
100+
def _get_headers(self, headers: dict, propagate_headers: bool = False) -> dict:
101101
"""If enabled appends trace headers to received ones.
102102
103103
:param headers: dictionary of HTTP Headers to send.

setup.cfg

+4-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,7 @@ addopts = --cov=pyms --cov=tests tests/
88
ignore = E501
99
exclude = .git,__pycache__,docs/source/conf.py,old,build,dist
1010
max-complexity = 12
11-
max-line-length = 120
11+
max-line-length = 120
12+
13+
[mypy]
14+
ignore_missing_imports = True

setup.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@
6464
'mkdocs>=1.1.2',
6565
'mkdocs-material>=6.0.0',
6666
'lightstep>=4.4.8',
67-
'safety==1.9.0'
67+
'safety==1.9.0',
68+
'mypy>=0.782'
6869
]
6970

7071
install_all_requires = (install_request_requires + install_swagger_requires +

0 commit comments

Comments
 (0)