From da1dc81c3ee76d7c46f43ffc595c632f811e9742 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Sat, 26 Dec 2020 22:08:57 +0100
Subject: [PATCH] =?UTF-8?q?Zkou=C5=A1=C3=ADm=20si=20hr=C3=A1t=20s=20typov?=
 =?UTF-8?q?=C3=A1n=C3=ADm?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .mypy.ini            |  2 ++
 dev-requirements.txt | 13 +++++++++++++
 test.py              | 19 +++++++++++++++++--
 3 files changed, 32 insertions(+), 2 deletions(-)
 create mode 100644 .mypy.ini
 create mode 100644 dev-requirements.txt

diff --git a/.mypy.ini b/.mypy.ini
new file mode 100644
index 00000000..d2d948d5
--- /dev/null
+++ b/.mypy.ini
@@ -0,0 +1,2 @@
+[mypy]
+plugins=sqlmypy
diff --git a/dev-requirements.txt b/dev-requirements.txt
new file mode 100644
index 00000000..a771a7a6
--- /dev/null
+++ b/dev-requirements.txt
@@ -0,0 +1,13 @@
+# Development tools
+python-language-server
+mypy
+sqlalchemy-stubs
+pyls-mypy
+pycodestyle
+pyflakes
+pylint
+rope
+future
+autopep8
+pydocstyle
+yapf
diff --git a/test.py b/test.py
index 52de5fae..c1118768 100755
--- a/test.py
+++ b/test.py
@@ -1,12 +1,23 @@
 #!/usr/bin/env python3
 
-from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Enum
+from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
 from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy.orm import relationship, sessionmaker
+from typing import List, TYPE_CHECKING, TypeVar, Type, Any
 import sqlalchemy.engine.url
 import config
 import enum
 
+# HACK: Work-around for https://github.com/dropbox/sqlalchemy-stubs/issues/114
+if TYPE_CHECKING:
+    from sqlalchemy.sql.type_api import TypeEngine
+    T = TypeVar('T')
+    class Enum(TypeEngine[T]):
+        def __init__(self, enum: Type[T], **kwargs: Any) -> None: ...
+else:
+    from sqlalchemy import Enum
+
+
 engine_url = sqlalchemy.engine.url.URL(
     drivername='postgresql',
     username=config.DB_USER,
@@ -19,11 +30,13 @@ engine = create_engine(engine_url, echo=True)
 
 Base = declarative_base()
 
+
 class PlaceType(enum.Enum):
     region = 1
     school = 2
     site = 3
 
+
 class Place(Base):
     __tablename__ = 'places'
 
@@ -37,13 +50,14 @@ class Place(Base):
 
     children = relationship('Place')
 
+
 Session = sessionmaker(bind=engine)
 session = Session()
 
 session.query(Place).delete()
 
 with open('db/regions') as reg_list:
-    stack = []
+    stack: List[Place] = []
     for line in reg_list:
         line = line.rstrip()
         cols = line.split('\t')
@@ -65,4 +79,5 @@ with open('db/regions') as reg_list:
         session.flush()
         stack.append(place)
 
+
 session.commit()
-- 
GitLab