From 63eb94f60f8a373c6c0a391dd3db15a15481642f Mon Sep 17 00:00:00 2001
From: Joscha Schmiedt <joscha@schmiedt.dev>
Date: Wed, 17 Apr 2024 23:10:26 +0200
Subject: [PATCH] Add type hints to connection

---
 src/linkahead/connection/authentication/input.py     | 10 +++++-----
 src/linkahead/connection/authentication/interface.py |  9 +++++++--
 src/linkahead/connection/authentication/keyring.py   |  2 +-
 src/linkahead/connection/authentication/pass.py      |  2 +-
 src/linkahead/connection/utils.py                    |  2 +-
 5 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/linkahead/connection/authentication/input.py b/src/linkahead/connection/authentication/input.py
index 27992073..697ca5dd 100644
--- a/src/linkahead/connection/authentication/input.py
+++ b/src/linkahead/connection/authentication/input.py
@@ -25,13 +25,13 @@
 
 A CredentialsProvider which reads the password from the input line.
 """
-from __future__ import absolute_import, unicode_literals, print_function
+from __future__ import absolute_import, unicode_literals, print_function, annotations
 from .interface import CredentialsProvider, CredentialsAuthenticator
-
+from typing import Optional
 import getpass
 
 
-def get_authentication_provider():
+def get_authentication_provider() -> CredentialsAuthenticator:
     """get_authentication_provider.
 
     Return an authenticator which uses the input for username/password credentials.
@@ -61,8 +61,8 @@ class InputCredentialsProvider(CredentialsProvider):
 
     def __init__(self):
         super(InputCredentialsProvider, self).__init__()
-        self._password = None
-        self._username = None
+        self._password: Optional[str] = None
+        self._username: Optional[str] = None
 
     def configure(self, **config):
         """configure.
diff --git a/src/linkahead/connection/authentication/interface.py b/src/linkahead/connection/authentication/interface.py
index 04ca11cd..cd61427b 100644
--- a/src/linkahead/connection/authentication/interface.py
+++ b/src/linkahead/connection/authentication/interface.py
@@ -26,12 +26,17 @@ LinkAhead server.
 
 Implementing modules muts provide a `get_authentication_provider()` method.
 """
+from __future__ import annotations
 from abc import ABC, abstractmethod
 import logging
 from ..utils import urlencode
 from ..interface import CaosDBServerConnection
 from ..utils import parse_auth_token, auth_token_to_cookie
 from ...exceptions import LoginFailedError
+from typing import TYPE_CHECKING, Dict, Optional
+if TYPE_CHECKING:
+    from ..interface import CaosDBHTTPResponse
+    QueryDict = Dict[str, Optional[str]]
 
 
 _LOGGER = logging.getLogger(__name__)
@@ -106,7 +111,7 @@ class AbstractAuthenticator(ABC):
         """
         pass
 
-    def on_response(self, response):
+    def on_response(self, response: CaosDBHTTPResponse):
         """on_response.
 
         A call-back with is to be called by the connection after each
@@ -123,7 +128,7 @@ class AbstractAuthenticator(ABC):
         self.auth_token = parse_auth_token(
             response.getheader("Set-Cookie"))
 
-    def on_request(self, method, path, headers, **kwargs):
+    def on_request(self, method: str, path: str, headers: QueryDict, **kwargs):
         # pylint: disable=unused-argument
         """on_request.
 
diff --git a/src/linkahead/connection/authentication/keyring.py b/src/linkahead/connection/authentication/keyring.py
index 202520bb..dad6ed9b 100644
--- a/src/linkahead/connection/authentication/keyring.py
+++ b/src/linkahead/connection/authentication/keyring.py
@@ -35,7 +35,7 @@ from .external_credentials_provider import ExternalCredentialsProvider
 from .interface import CredentialsAuthenticator
 
 
-def get_authentication_provider():
+def get_authentication_provider() -> CredentialsAuthenticator:
     """get_authentication_provider.
 
     Return an authenticator which uses plain text username/password credentials.
diff --git a/src/linkahead/connection/authentication/pass.py b/src/linkahead/connection/authentication/pass.py
index bec30740..81a90152 100644
--- a/src/linkahead/connection/authentication/pass.py
+++ b/src/linkahead/connection/authentication/pass.py
@@ -33,7 +33,7 @@ from .interface import CredentialsAuthenticator
 from .external_credentials_provider import ExternalCredentialsProvider
 
 
-def get_authentication_provider():
+def get_authentication_provider() -> CredentialsAuthenticator:
     """get_authentication_provider.
 
     Return an authenticator which uses plain text username/password credentials.
diff --git a/src/linkahead/connection/utils.py b/src/linkahead/connection/utils.py
index bfb27a72..099db329 100644
--- a/src/linkahead/connection/utils.py
+++ b/src/linkahead/connection/utils.py
@@ -117,7 +117,7 @@ def make_uri_path(segments: Optional[List[str]] = None,
     return str("?".join([
         path_no_query, "&".join([
             quote(key) + "=" +
-            (quote(query[key]) if query[key] is not None else "")
+            (quote(query[key]) if query[key] is not None else "")  # type: ignore
             for key in query
         ])
     ]))
-- 
GitLab