Skip to content

Commit 9efa99b

Browse files
committed
Refactor, added service driver system
1 parent 73d43d0 commit 9efa99b

File tree

10 files changed

+84
-38
lines changed

10 files changed

+84
-38
lines changed

.coveragerc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ include=
33
*pyms/*
44
*tests/*
55
omit =
6-
*example/*
6+
*examples/*
77
.tox/*
88
venv/*

examples/mininum_microservice/config.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
swagger:
2-
path: ""
3-
file: "swagger.yaml"
1+
pyms:
2+
swagger:
3+
path: ""
4+
file: "swagger.yaml"
45
my-ms:
56
DEBUG: true
67
TESTING: false

pyms/constants.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,4 @@
22

33
LOGGER_NAME = "pyms"
44

5-
SWAGGER_PATH = "swagger"
6-
SWAGGER_FILE = "swagger.yaml"
5+
SERVICE_BASE = "pyms"

pyms/flask/app/__init__.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
from typing import Text
44

55
import connexion
6+
from flask import Flask
67
from flask_opentracing import FlaskTracer
78

89
from pyms.config.conf import get_conf
9-
from pyms.flask.app.swagger import Swagger
1010
from pyms.flask.healthcheck import healthcheck_blueprint
11+
from pyms.flask.services.driver import ServicesManager
1112
from pyms.logger import CustomJsonFormatter
1213
from pyms.tracer.main import init_jaeger_tracer
1314

@@ -19,8 +20,13 @@ class Microservice:
1920
def __init__(self, service: Text, path=__file__):
2021
self.service = service
2122
self.path = os.path.dirname(path)
22-
self.swagger = Swagger()
2323
self.config = get_conf(service=self.service)
24+
self.init_services()
25+
26+
def init_services(self):
27+
service_manager = ServicesManager()
28+
for service_name, service in service_manager.get_services():
29+
setattr(self, service_name, service)
2430

2531
def init_libs(self):
2632
return self.application
@@ -39,22 +45,29 @@ def init_logger(self):
3945
self.application.logger.propagate = False
4046
self.application.logger.setLevel(logging.INFO)
4147

48+
def init_app(self):
49+
if getattr(self, "swagger", False):
50+
app = connexion.App(__name__, specification_dir=os.path.join(self.path, self.swagger.path))
51+
app.add_api(self.swagger.file,
52+
arguments={'title': self.config.APP_NAME},
53+
base_path=self.config.APPLICATION_ROOT
54+
)
55+
56+
application = app.app
57+
application._connexion_app = app
58+
else:
59+
application = Flask(__name__)
60+
61+
return application
62+
4263
def create_app(self):
4364
"""Initialize the Flask app, register blueprints and initialize
4465
all libraries like Swagger, database,
4566
the trace system...
4667
return the app and the database objects.
4768
:return:
4869
"""
49-
50-
app = connexion.App(__name__, specification_dir=os.path.join(self.path, self.swagger.path))
51-
app.add_api(self.swagger.file,
52-
arguments={'title': self.config.APP_NAME},
53-
base_path=self.config.APPLICATION_ROOT
54-
)
55-
56-
self.application = app.app
57-
self.application._connexion_app = app
70+
self.application = self.init_app()
5871
self.application.config.from_object(self.config)
5972
self.application.tracer = None
6073

pyms/flask/app/swagger.py

Lines changed: 0 additions & 21 deletions
This file was deleted.

pyms/flask/services/driver.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import logging
2+
3+
from pyms.config.conf import get_conf
4+
from pyms.constants import SERVICE_BASE, LOGGER_NAME
5+
from pyms.utils.utils import import_from
6+
7+
logger = logging.getLogger(LOGGER_NAME)
8+
9+
class DriverService:
10+
service = ""
11+
12+
def __init__(self, service, *args, **kwargs):
13+
self.service = ".".join([service, self.service])
14+
self.config = get_conf(service=self.service, empty_init=True)
15+
16+
def __getattr__(self, attr, *args, **kwargs):
17+
config_attribute = getattr(self.config, attr)
18+
return config_attribute if config_attribute is "" or config_attribute != {} else self.default_values.get(attr,
19+
None)
20+
21+
22+
class ServicesManager:
23+
service = SERVICE_BASE
24+
25+
def __init__(self, service=None):
26+
self.service = (service if service else SERVICE_BASE)
27+
self.config = get_conf(service=self.service, empty_init=True)
28+
29+
def get_services(self):
30+
return ((k, self.get_service(k)) for k in self.config.__dict__.keys() if k not in ['empty_init',])
31+
32+
def get_service(self, service, *args, **kwargs):
33+
service_object = import_from("pyms.flask.services.{}".format(service), "Service")
34+
logger.info("Init service {}".format(service))
35+
return service_object(service=self.service, *args, **kwargs)

pyms/flask/services/swagger.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from pyms.flask.services.driver import DriverService
2+
3+
SWAGGER_PATH = "swagger"
4+
SWAGGER_FILE = "swagger.yaml"
5+
6+
7+
class Service(DriverService):
8+
service = "swagger"
9+
default_values = {
10+
"path": SWAGGER_PATH,
11+
"file": SWAGGER_FILE
12+
}

pyms/utils/utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
def import_from(module, name):
2+
module = __import__(module, fromlist=[name])
3+
return getattr(module, name)

tests/config-tests.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
pyms:
2+
swagger:
3+
path: ""
4+
file: "swagger.yaml"
15
my-ms:
26
DEBUG: true
37
TESTING: true

0 commit comments

Comments
 (0)