From 2ed13c97ce6c8ba4dc5a9a2ea834949720f5e2bd Mon Sep 17 00:00:00 2001 From: EliuX Date: Mon, 23 Mar 2020 09:42:31 -0500 Subject: [PATCH] Apply changes requested in meeting --- tests/sql_repository_test.py | 3 +- time_tracker_api/api.py | 3 +- time_tracker_api/config.py | 2 - time_tracker_api/database.py | 12 +--- time_tracker_api/projects/projects_model.py | 76 +++++---------------- 5 files changed, 20 insertions(+), 76 deletions(-) diff --git a/tests/sql_repository_test.py b/tests/sql_repository_test.py index 7f5c7b58..48f220ff 100644 --- a/tests/sql_repository_test.py +++ b/tests/sql_repository_test.py @@ -54,8 +54,7 @@ def test_find_all(sql_repository): assert all(e in existing_elements_registry for e in existing_elements) -def test_find_all_that_contains_property_with_string(sql_repository): - """Find all elements that have a property that partially contains a string (case-insensitive)""" +def test_find_all_that_contains_property_with_string_case_insensitive(sql_repository): fake_name = fake.name() new_element = dict(name="%s Snow" % fake_name, email=fake.safe_email(), diff --git a/time_tracker_api/api.py b/time_tracker_api/api.py index 49710b91..6b8fb8d0 100644 --- a/time_tracker_api/api.py +++ b/time_tracker_api/api.py @@ -94,6 +94,5 @@ def handle_connection_error(e): @api.errorhandler def generic_exception_handler(e): - if not app.config.get("FLASK_DEBUG", False): - app.logger.error(e) + app.logger.error(e) return {'message': 'An unhandled exception occurred.'}, 500 diff --git a/time_tracker_api/config.py b/time_tracker_api/config.py index 70ff43eb..5e935a97 100644 --- a/time_tracker_api/config.py +++ b/time_tracker_api/config.py @@ -1,6 +1,5 @@ import os -from time_tracker_api.database import DATABASE_TYPE from time_tracker_api.security import generate_dev_secret_key @@ -26,7 +25,6 @@ class SQLConfig(Config): SQLALCHEMY_DATABASE_URI = Config.DATABASE_URI SQLALCHEMY_COMMIT_ON_TEARDOWN = True SQLALCHEMY_TRACK_MODIFICATIONS = False - DATABASE = DATABASE_TYPE.SQL class AzureConfig(SQLConfig): diff --git a/time_tracker_api/database.py b/time_tracker_api/database.py index e9593717..845735fe 100644 --- a/time_tracker_api/database.py +++ b/time_tracker_api/database.py @@ -12,11 +12,6 @@ from flask import Flask -class DATABASE_TYPE(enum.Enum): - IN_MEMORY = 'in-memory' - SQL = 'sql' - - class CRUDDao(abc.ABC): @abc.abstractmethod def get_all(self): @@ -76,13 +71,8 @@ def to_dto(*args, **kw): def init_app(app: Flask) -> None: - database_strategy = app.config['DATABASE'] - with app.app_context(): - globals()["use_%s" % database_strategy.name.lower()](app) - - -def use_sql(app: Flask) -> None: from time_tracker_api.sql_repository import init_app, SQLSeeder init_app(app) global seeder seeder = SQLSeeder() + diff --git a/time_tracker_api/projects/projects_model.py b/time_tracker_api/projects/projects_model.py index 55c42206..a47fbc72 100644 --- a/time_tracker_api/projects/projects_model.py +++ b/time_tracker_api/projects/projects_model.py @@ -2,7 +2,7 @@ from flask import Flask -from time_tracker_api.database import DATABASE_TYPE, CRUDDao +from time_tracker_api.database import CRUDDao from time_tracker_api.sql_repository import SQLCRUDDao, AuditedSQLModel, SQLModel @@ -20,66 +20,24 @@ class ProjectDao(CRUDDao): def create_dao(app: Flask) -> ProjectDao: - if app.config['DATABASE'] == DATABASE_TYPE.SQL: - from time_tracker_api.sql_repository import db + from time_tracker_api.sql_repository import db - class ProjectSQLModel(db.Model, SQLModel, AuditedSQLModel): - __tablename__ = 'projects' - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(50), unique=True, nullable=False) - description = db.Column(db.String(250), unique=False, nullable=False) - type = db.Column(db.String(10), nullable=False) - active = db.Column(db.Boolean, default=True) + class ProjectSQLModel(db.Model, SQLModel, AuditedSQLModel): + __tablename__ = 'projects' + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(50), unique=True, nullable=False) + description = db.Column(db.String(250), unique=False, nullable=False) + type = db.Column(db.String(10), nullable=False) + active = db.Column(db.Boolean, default=True) - def __repr__(self): - return '' % self.name + def __repr__(self): + return '' % self.name - def __str___(self): - return "the project \"%s\"" % self.name + def __str___(self): + return "the project \"%s\"" % self.name - class ProjectSQLDao(SQLCRUDDao): - def __init__(self): - SQLCRUDDao.__init__(self, ProjectSQLModel) + class ProjectSQLDao(SQLCRUDDao): + def __init__(self): + SQLCRUDDao.__init__(self, ProjectSQLModel) - return ProjectSQLDao() - else: - """ - This is legacy, just to make clear how multiple database strategies can be supported - with the current design/architecture. - """ - from time_tracker_api.errors import MissingResource - - class ProjectInMemoryDAO(object): - def __init__(self): - self.counter = 0 - self.projects = [] - - def get_all(self): - return self.projects - - def get(self, id): - for project in self.projects: - if project.get('id') == id: - return project - raise MissingResource("Project '%s' not found" % id) - - def create(self, project): - self.counter += 1 - project['id'] = str(self.counter) - self.projects.append(project) - return project - - def update(self, id, data): - project = self.get(id) - if project: - project.update(data) - return project - else: - raise MissingResource("Project '%s' not found" % id) - - def delete(self, id): - if id: - project = self.get(id) - self.projects.remove(project) - - return ProjectInMemoryDAO() + return ProjectSQLDao()