Skip to content

Commit 439510c

Browse files
authored
Updated type hinting (#167)
* Updated type hinting * Fix lint
1 parent 5de2954 commit 439510c

File tree

7 files changed

+23
-30
lines changed

7 files changed

+23
-30
lines changed

pyms/config/resource.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
from typing import Text
2+
13
from pyms.config import get_conf
24

35

46
class ConfigResource:
57

6-
config_resource = None
8+
config_resource: Text = ""
79

810
def __init__(self, *args, **kwargs):
911
self.config = get_conf(service=self.config_resource, empty_init=True, uppercase=False, *args, **kwargs)

pyms/flask/app/create_app.py

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22
import os
3-
from typing import Text
3+
from typing import List
44

55
from flask import Flask
66

@@ -10,7 +10,7 @@
1010
from pyms.crypt.driver import CryptResource
1111
from pyms.flask.app.utils import SingletonMeta, ReverseProxied
1212
from pyms.flask.healthcheck import healthcheck_blueprint
13-
from pyms.flask.services.driver import ServicesResource
13+
from pyms.flask.services.driver import ServicesResource, DriverService
1414
from pyms.logger import CustomJsonFormatter
1515
from pyms.utils import check_package_exists, import_from
1616

@@ -72,11 +72,12 @@ def example():
7272
Current services are swagger, request, tracer, metrics
7373
"""
7474
config_resource = CONFIG_BASE
75-
services = []
76-
application = None
77-
swagger = False
78-
request = False
79-
tracer = False
75+
services: List[DriverService] = []
76+
application = Flask
77+
swagger: DriverService = None
78+
request: DriverService = None
79+
tracer: DriverService = None
80+
metrics: DriverService = None
8081
_singleton = True
8182

8283
def __init__(self, *args, **kwargs):
@@ -137,7 +138,7 @@ def init_tracer(self) -> None:
137138
"""Set attribute in flask `tracer`. See in `pyms.flask.services.tracer` how it works
138139
:return: None
139140
"""
140-
if self._exists_service("tracer"):
141+
if self.tracer:
141142
FlaskTracing = import_from("flask_opentracing", "FlaskTracing")
142143
client = self.tracer.get_client()
143144
self.application.tracer = FlaskTracing(client, True, self.application)
@@ -169,7 +170,7 @@ def init_app(self) -> Flask:
169170
run a "normal" Flask app.
170171
:return: None
171172
"""
172-
if self._exists_service("swagger"):
173+
if self.swagger:
173174
application = self.swagger.init_app(config=self.config.to_flask(), path=self.path)
174175
else:
175176
check_package_exists("flask")
@@ -183,11 +184,11 @@ def init_app(self) -> Flask:
183184

184185
return application
185186

186-
def init_metrics(self):
187+
def init_metrics(self) -> None:
187188
"""Set attribute in flask `metrics`. See in `pyms.flask.services.metrics` how it works
188189
:return: None
189190
"""
190-
if getattr(self, "metrics", False) and self.metrics:
191+
if self.metrics:
191192
self.application.register_blueprint(self.metrics.metrics_blueprint)
192193
self.metrics.add_logger_handler(
193194
self.application.logger,
@@ -231,14 +232,6 @@ def create_app(self):
231232

232233
return self.application
233234

234-
def _exists_service(self, service_name: Text) -> bool:
235-
"""Check if service exists in the config.yml file
236-
:param service_name:
237-
:return: bool
238-
"""
239-
service = getattr(self, service_name, False)
240-
return service and service is not None
241-
242235
def add_error_handlers(self):
243236
"""Subclasses will override this method in order to add specific error handlers. This should be done with
244237
calls to add_error_handler method.

pyms/flask/app/utils.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
from typing import Dict
2+
3+
14
class SingletonMeta(type):
25
"""
36
The Singleton class can be implemented in different ways in Python. Some
47
possible methods include: base class, decorator, metaclass. We will use the
58
metaclass because it is best suited for this purpose.
69
"""
7-
_instances = {}
10+
_instances: Dict[type, type] = {}
811
_singleton = True
912

1013
def __call__(cls, *args, **kwargs):

pyms/flask/services/driver.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from typing import Text, Tuple
2+
from typing import Text, Tuple, Iterator
33

44
from pyms.config import ConfFile
55
from pyms.config.resource import ConfigResource
@@ -61,7 +61,7 @@ class ServicesResource(ConfigResource):
6161
"""
6262
config_resource = SERVICE_BASE
6363

64-
def get_services(self) -> Tuple[Text, DriverService]:
64+
def get_services(self) -> Iterator[Tuple[Text, DriverService]]:
6565
for k in self.config.__dict__.keys():
6666
if k.islower() and not k.startswith("_"):
6767
service = self.get_service(k)

pyms/flask/services/metrics.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import time
22
import logging
3+
from typing import Text
34

45
from flask import Blueprint, Response, request
56
from prometheus_client import Counter, Histogram, generate_latest
@@ -45,7 +46,7 @@ class Service(DriverService):
4546
"""
4647
Adds [Prometheus](https://prometheus.io/) metrics using the [Prometheus Client Library](https://github.com/prometheus/client_python).
4748
"""
48-
config_resource = "metrics"
49+
config_resource: Text = "metrics"
4950

5051
def __init__(self, *args, **kwargs):
5152
super().__init__(*args, **kwargs)

setup.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
'requests>=2.24.0',
3535
]
3636
install_swagger_requires = [
37-
'swagger-ui-bundle>=0.0.2',
3837
'connexion[swagger-ui]>=2.7.0',
3938
'swagger-ui-bundle>=0.0.6',
4039
'semver>=2.10.1',

tests/test_flask.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,6 @@ def test_swagger(self):
6868
def test_exists_service(self):
6969
self.assertTrue(isinstance(self.app.ms.swagger, DriverService))
7070

71-
def test_disabled_service(self):
72-
with pytest.raises(AttributeError) as excinfo:
73-
self.assertTrue(isinstance(self.app.ms.metrics, DriverService))
74-
assert "'MyMicroservice' object has no attribute 'metrics'" in str(excinfo.value)
75-
7671
def test_reverse_proxy(self):
7772
response = self.client.get('/my-proxy-path/ui/', headers={"X-Script-Name": "/my-proxy-path"})
7873
self.assertEqual(200, response.status_code)

0 commit comments

Comments
 (0)