From 5efc3dd3307604d80203af793a205501ef689164 Mon Sep 17 00:00:00 2001 From: Yax <1949284+kianby@users.noreply.github.com> Date: Tue, 19 Jan 2021 19:27:49 +0100 Subject: [PATCH] add mypy tool --- poetry.lock | 59 ++++++++++++++++++++++++++++++++- pyproject.toml | 1 + stacosys/interface/scheduler.py | 38 ++++++++++++++++++--- stacosys/model/email.py | 11 +++--- 4 files changed, 99 insertions(+), 10 deletions(-) diff --git a/poetry.lock b/poetry.lock index 997c104..82d1597 100644 --- a/poetry.lock +++ b/poetry.lock @@ -210,6 +210,30 @@ category = "dev" optional = false python-versions = ">=3.5" +[[package]] +name = "mypy" +version = "0.790" +description = "Optional static typing for Python" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +mypy-extensions = ">=0.4.3,<0.5.0" +typed-ast = ">=1.4.0,<1.5.0" +typing-extensions = ">=3.7.4" + +[package.extras] +dmypy = ["psutil (>=4.0)"] + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "packaging" version = "19.2" @@ -394,6 +418,14 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "typing-extensions" +version = "3.7.4.3" +description = "Backported and Experimental Type Hints for Python 3.5+" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "tzlocal" version = "2.0.0" @@ -457,7 +489,7 @@ testing = ["pathlib2", "contextlib2", "unittest2"] [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "6a714b61f2ae04be8377aa2fb513c09bdae22cb71685b4b7ddfed843bfd9ff08" +content-hash = "f3a87d43b25f363c4ef34c8e8aa8b16aadb975c204d34234babbe0ee33038a02" [metadata.files] appdirs = [ @@ -562,6 +594,26 @@ more-itertools = [ {file = "more-itertools-8.0.2.tar.gz", hash = "sha256:b84b238cce0d9adad5ed87e745778d20a3f8487d0f0cb8b8a586816c7496458d"}, {file = "more_itertools-8.0.2-py3-none-any.whl", hash = "sha256:c833ef592a0324bcc6a60e48440da07645063c453880c9477ceb22490aec1564"}, ] +mypy = [ + {file = "mypy-0.790-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:bd03b3cf666bff8d710d633d1c56ab7facbdc204d567715cb3b9f85c6e94f669"}, + {file = "mypy-0.790-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:2170492030f6faa537647d29945786d297e4862765f0b4ac5930ff62e300d802"}, + {file = "mypy-0.790-cp35-cp35m-win_amd64.whl", hash = "sha256:e86bdace26c5fe9cf8cb735e7cedfe7850ad92b327ac5d797c656717d2ca66de"}, + {file = "mypy-0.790-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e97e9c13d67fbe524be17e4d8025d51a7dca38f90de2e462243ab8ed8a9178d1"}, + {file = "mypy-0.790-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0d34d6b122597d48a36d6c59e35341f410d4abfa771d96d04ae2c468dd201abc"}, + {file = "mypy-0.790-cp36-cp36m-win_amd64.whl", hash = "sha256:72060bf64f290fb629bd4a67c707a66fd88ca26e413a91384b18db3876e57ed7"}, + {file = "mypy-0.790-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:eea260feb1830a627fb526d22fbb426b750d9f5a47b624e8d5e7e004359b219c"}, + {file = "mypy-0.790-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:c614194e01c85bb2e551c421397e49afb2872c88b5830e3554f0519f9fb1c178"}, + {file = "mypy-0.790-cp37-cp37m-win_amd64.whl", hash = "sha256:0a0d102247c16ce93c97066443d11e2d36e6cc2a32d8ccc1f705268970479324"}, + {file = "mypy-0.790-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4e7bf7f1214826cf7333627cb2547c0db7e3078723227820d0a2490f117a01"}, + {file = "mypy-0.790-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:af4e9ff1834e565f1baa74ccf7ae2564ae38c8df2a85b057af1dbbc958eb6666"}, + {file = "mypy-0.790-cp38-cp38-win_amd64.whl", hash = "sha256:da56dedcd7cd502ccd3c5dddc656cb36113dd793ad466e894574125945653cea"}, + {file = "mypy-0.790-py3-none-any.whl", hash = "sha256:2842d4fbd1b12ab422346376aad03ff5d0805b706102e475e962370f874a5122"}, + {file = "mypy-0.790.tar.gz", hash = "sha256:2b21ba45ad9ef2e2eb88ce4aeadd0112d0f5026418324176fd494a6824b74975"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] packaging = [ {file = "packaging-19.2-py2.py3-none-any.whl", hash = "sha256:d9551545c6d761f3def1677baf08ab2a3ca17c56879e70fecba2fc4dde4ed108"}, {file = "packaging-19.2.tar.gz", hash = "sha256:28b924174df7a2fa32c1953825ff29c61e2f5e082343165438812f00d3a7fc47"}, @@ -680,6 +732,11 @@ typed-ast = [ {file = "typed_ast-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:3742b32cf1c6ef124d57f95be609c473d7ec4c14d0090e5a5e05a15269fb4d0c"}, {file = "typed_ast-1.4.1.tar.gz", hash = "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b"}, ] +typing-extensions = [ + {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, + {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, + {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, +] tzlocal = [ {file = "tzlocal-2.0.0-py2.py3-none-any.whl", hash = "sha256:11c9f16e0a633b4b60e1eede97d8a46340d042e67b670b290ca526576e039048"}, {file = "tzlocal-2.0.0.tar.gz", hash = "sha256:949b9dd5ba4be17190a80c0268167d7e6c92c62b30026cf9764caf3e308e5590"}, diff --git a/pyproject.toml b/pyproject.toml index 99ae291..a95099d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,7 @@ tinydb = "^4.3.0" pytest = "^5.2" black = {version = "^19.10b0", allow-prereleases = true} rope = "^0.16.0" +mypy = "^0.790" [build-system] requires = ["poetry>=0.12"] diff --git a/stacosys/interface/scheduler.py b/stacosys/interface/scheduler.py index 832a0d6..33ea3ef 100644 --- a/stacosys/interface/scheduler.py +++ b/stacosys/interface/scheduler.py @@ -7,11 +7,21 @@ from stacosys.interface import app class JobConfig(object): - JOBS = [] + JOBS: list = [] SCHEDULER_EXECUTORS = {"default": {"type": "threadpool", "max_workers": 4}} - def __init__(self, imap_polling_seconds, new_comment_polling_seconds, lang, site_name, site_token, site_admin_email, mailer, rss): + def __init__( + self, + imap_polling_seconds, + new_comment_polling_seconds, + lang, + site_name, + site_token, + site_admin_email, + mailer, + rss, + ): self.JOBS = [ { "id": "fetch_mail", @@ -30,8 +40,28 @@ class JobConfig(object): ] -def configure(imap_polling, comment_polling, lang, site_name, site_token, site_admin_email, mailer, rss): - app.config.from_object(JobConfig(imap_polling, comment_polling, lang, site_name, site_token, site_admin_email, mailer, rss)) +def configure( + imap_polling, + comment_polling, + lang, + site_name, + site_token, + site_admin_email, + mailer, + rss, +): + app.config.from_object( + JobConfig( + imap_polling, + comment_polling, + lang, + site_name, + site_token, + site_admin_email, + mailer, + rss, + ) + ) scheduler = APScheduler() scheduler.init_app(app) scheduler.start() diff --git a/stacosys/model/email.py b/stacosys/model/email.py index c3feb34..4d0b081 100644 --- a/stacosys/model/email.py +++ b/stacosys/model/email.py @@ -2,26 +2,27 @@ # -*- coding: UTF-8 -*- from datetime import datetime +from typing import List -class Part(): +class Part: content: str content_type: str -class Attachment(): +class Attachment: filename: str content: str content_type: str -class Email(): +class Email: id: int encoding: str date: datetime from_addr: str to_addr: str subject: str - parts: list[Part] - attachments: list[Attachment] + parts: List[Part] + attachments: List[Attachment] plain_text_content: str