Persistence up and running with basic app applicartion
This commit is contained in:
parent
d6c3f3ef67
commit
f99b8497ff
|
@ -4,8 +4,8 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
Copyright © 2022 Concordia CERC group
|
Copyright © 2022 Concordia CERC group
|
||||||
Project CoderPeter Yefi peteryefi@gmail.com
|
Project CoderPeter Yefi peteryefi@gmail.com
|
||||||
"""
|
"""
|
||||||
from hub.persistence import CityRepo
|
from hub.persistence import City
|
||||||
from hub.persistence import HeatPumpSimulationRepo
|
from hub.persistence import Application
|
||||||
|
|
||||||
|
|
||||||
class DBFactory:
|
class DBFactory:
|
||||||
|
@ -14,40 +14,30 @@ class DBFactory:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, db_name, app_env, dotenv_path):
|
def __init__(self, db_name, app_env, dotenv_path):
|
||||||
self._city_repo = CityRepo(db_name=db_name, app_env=app_env, dotenv_path=dotenv_path)
|
self._city = City(db_name=db_name, app_env=app_env, dotenv_path=dotenv_path)
|
||||||
self._hp_simulation_repo = HeatPumpSimulationRepo(db_name=db_name, app_env=app_env, dotenv_path=dotenv_path)
|
self._application = Application(db_name=db_name, app_env=app_env, dotenv_path=dotenv_path)
|
||||||
|
|
||||||
def get_city(self, city_id):
|
def get_city(self, city_id):
|
||||||
"""
|
"""
|
||||||
Retrieve a single city from postgres
|
Retrieve a single city from postgres
|
||||||
:param city_id: the id of the city to get
|
:param city_id: the id of the city to get
|
||||||
"""
|
"""
|
||||||
return self._city_repo.get_by_id(city_id)
|
return self._city.get_by_id(city_id)
|
||||||
|
|
||||||
def get_city_by_name(self, city_name):
|
def get_city_by_name(self, city_name):
|
||||||
"""
|
"""
|
||||||
Retrieve a single city from postgres
|
Retrieve a single city from postgres
|
||||||
:param city_name: the name of the city to get
|
:param city_name: the name of the city to get
|
||||||
"""
|
"""
|
||||||
return self._city_repo.get_by_name(city_name)
|
return self._city.get_by_name(city_name)
|
||||||
|
|
||||||
def get_city_by_user(self, user_id):
|
def get_city_by_user(self, user_id):
|
||||||
"""
|
"""
|
||||||
Retrieve cities created by user
|
Retrieve cities created by user
|
||||||
:param user_id: the id of the user
|
:param user_id: the id of the user
|
||||||
"""
|
"""
|
||||||
return self._city_repo.get_by_user(user_id)
|
return self._city.get_by_user(user_id)
|
||||||
|
|
||||||
def get_hp_simulation(self, hp_sim_id: int):
|
def application_info(self, application_uuid):
|
||||||
"""
|
return self._application.get_by_uuid(application_uuid)
|
||||||
Retrieve a single heat pump simulation from postgres
|
|
||||||
:param hp_sim_id: the id of the heat pump to get
|
|
||||||
"""
|
|
||||||
return self._hp_simulation_repo.get_by_id(hp_sim_id)
|
|
||||||
|
|
||||||
def get_hp_simulation_by_city(self, city_id: int):
|
|
||||||
"""
|
|
||||||
Retrieve a single city from postgres
|
|
||||||
:param city_id: the id of the city
|
|
||||||
"""
|
|
||||||
return self._hp_simulation_repo.get_by_city(city_id)
|
|
||||||
|
|
|
@ -4,10 +4,8 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
Copyright © 2022 Concordia CERC group
|
Copyright © 2022 Concordia CERC group
|
||||||
Project CoderPeter Yefi peteryefi@gmail.com
|
Project CoderPeter Yefi peteryefi@gmail.com
|
||||||
"""
|
"""
|
||||||
from hub.persistence import CityRepo
|
|
||||||
from hub.persistence import HeatPumpSimulationRepo
|
|
||||||
from typing import Dict
|
|
||||||
from hub.city_model_structure.city import City
|
from hub.city_model_structure.city import City
|
||||||
|
from hub.persistence import City as CityRepository
|
||||||
|
|
||||||
|
|
||||||
class DBFactory:
|
class DBFactory:
|
||||||
|
@ -16,14 +14,13 @@ class DBFactory:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, db_name, dotenv_path, app_env):
|
def __init__(self, db_name, dotenv_path, app_env):
|
||||||
self._city_repo = CityRepo(db_name=db_name, dotenv_path=dotenv_path, app_env=app_env)
|
self._city_repository = CityRepository(db_name=db_name, dotenv_path=dotenv_path, app_env=app_env)
|
||||||
self._hp_simulation_repo = HeatPumpSimulationRepo(db_name=db_name, dotenv_path=dotenv_path, app_env=app_env)
|
|
||||||
|
|
||||||
def persist_city(self, user_id: int, city: City):
|
def persist_city(self, application_id: int, user_id: int, city: City):
|
||||||
"""
|
"""
|
||||||
Persist city into postgres database
|
Persist city into postgres database
|
||||||
"""
|
"""
|
||||||
return self._city_repo.insert(city, user_id)
|
return self._city_repository.insert(city, application_id, user_id)
|
||||||
|
|
||||||
def update_city(self, city_id, city):
|
def update_city(self, city_id, city):
|
||||||
"""
|
"""
|
||||||
|
@ -31,27 +28,11 @@ class DBFactory:
|
||||||
:param city_id: the id of the city to update
|
:param city_id: the id of the city to update
|
||||||
:param city: the updated city object
|
:param city: the updated city object
|
||||||
"""
|
"""
|
||||||
return self._city_repo.update(city_id, city)
|
return self._city_repository.update(city_id, city)
|
||||||
|
|
||||||
def delete_city(self, city_id):
|
def delete_city(self, city_id):
|
||||||
"""
|
"""
|
||||||
Deletes a single city from postgres
|
Deletes a single city from postgres
|
||||||
:param city_id: the id of the city to get
|
:param city_id: the id of the city to get
|
||||||
"""
|
"""
|
||||||
self._city_repo.delete_city(city_id)
|
self._city_repository.delete(city_id)
|
||||||
|
|
||||||
def persist_hp_simulation(self, hp_simulation_data: Dict, city_id: int):
|
|
||||||
"""
|
|
||||||
Persist heat pump simulation results
|
|
||||||
:param hp_simulation_data: the simulation results
|
|
||||||
:param city_id: the city object used in running the simulation
|
|
||||||
:return: HeatPumpSimulation object
|
|
||||||
"""
|
|
||||||
return self._hp_simulation_repo.insert(hp_simulation_data, city_id)
|
|
||||||
|
|
||||||
def delete_hp_simulation(self, hp_sim_id):
|
|
||||||
"""
|
|
||||||
Deletes a single heat pump simulation from postgres
|
|
||||||
:param hp_sim_id: the id of the heat pump simulation to get
|
|
||||||
"""
|
|
||||||
self._hp_simulation_repo.delete_hp_simulation(hp_sim_id)
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from .repository import Repository
|
from .repository import Repository
|
||||||
from .repositories.city import City
|
from .repositories.city import City
|
||||||
|
from .repositories.application import Application
|
||||||
from .db_setup import DBSetup
|
from .db_setup import DBSetup
|
||||||
from .repositories.user import User
|
from .repositories.user import User
|
||||||
from .models.user import UserRoles
|
from .models.user import UserRoles
|
||||||
|
|
|
@ -10,8 +10,7 @@ from dotenv import load_dotenv
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
from hub.hub_logger import logger
|
from hub.hub_logger import logger
|
||||||
|
|
||||||
Base = declarative_base()
|
Models = declarative_base()
|
||||||
|
|
||||||
|
|
||||||
class Configuration:
|
class Configuration:
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -30,15 +30,15 @@ class DBSetup:
|
||||||
|
|
||||||
# Create the tables using the models
|
# Create the tables using the models
|
||||||
Application.__table__.create(bind=repository.engine, checkfirst=True)
|
Application.__table__.create(bind=repository.engine, checkfirst=True)
|
||||||
|
User.__table__.create(bind=repository.engine, checkfirst=True)
|
||||||
City.__table__.create(bind=repository.engine, checkfirst=True)
|
City.__table__.create(bind=repository.engine, checkfirst=True)
|
||||||
CityObject.__table__.create(bind=repository.engine, checkfirst=True)
|
CityObject.__table__.create(bind=repository.engine, checkfirst=True)
|
||||||
SimulationResults.__table__.create(bind=repository.engine, checkfirst=True)
|
SimulationResults.__table__.create(bind=repository.engine, checkfirst=True)
|
||||||
User.__table__.create(bind=repository.engine, checkfirst=True)
|
|
||||||
|
|
||||||
self._user_repo = UserRepository(db_name=db_name, app_env=app_env, dotenv_path=dotenv_path)
|
self._user_repo = UserRepository(db_name=db_name, app_env=app_env, dotenv_path=dotenv_path)
|
||||||
self._application_repo = ApplicationRepository(db_name=db_name, app_env=app_env, dotenv_path=dotenv_path)
|
self._application_repo = ApplicationRepository(db_name=db_name, app_env=app_env, dotenv_path=dotenv_path)
|
||||||
self._create_admin_user(self._user_repo, admin_password)
|
application_id = self._create_admin_app(self._application_repo, application_uuid)
|
||||||
self._create_admin_app(self._application_repo, application_uuid)
|
self._create_admin_user(self._user_repo, admin_password, application_id)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _create_admin_app(application_repo, application_uuid):
|
def _create_admin_app(application_repo, application_uuid):
|
||||||
|
@ -46,12 +46,14 @@ class DBSetup:
|
||||||
description = 'Admin tool to control city persistence and to test the API v1.4'
|
description = 'Admin tool to control city persistence and to test the API v1.4'
|
||||||
print('Creating default admin tool application...')
|
print('Creating default admin tool application...')
|
||||||
application = application_repo.insert(name, description, application_uuid)
|
application = application_repo.insert(name, description, application_uuid)
|
||||||
|
|
||||||
if type(application) is dict:
|
if type(application) is dict:
|
||||||
logger.info(application)
|
logger.info(application)
|
||||||
else:
|
else:
|
||||||
msg = f'Created Admin tool with application_uuid: {application_uuid}'
|
msg = f'Created Admin tool with application_uuid: {application_uuid}'
|
||||||
print(msg)
|
print(msg)
|
||||||
logger.info(msg)
|
logger.info(msg)
|
||||||
|
return application.id
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _create_admin_user(user_repo, admin_password, application_id):
|
def _create_admin_user(user_repo, admin_password, application_id):
|
||||||
|
@ -62,4 +64,4 @@ class DBSetup:
|
||||||
logger.info(user)
|
logger.info(user)
|
||||||
else:
|
else:
|
||||||
print(f'Created Admin user')
|
print(f'Created Admin user')
|
||||||
logger.info(f'Created Admin user')
|
logger.info(f'Created Admin user')
|
||||||
|
|
|
@ -10,13 +10,14 @@ import datetime
|
||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy import Column, Integer, String, Sequence
|
from sqlalchemy import Column, Integer, String, Sequence
|
||||||
from sqlalchemy import DateTime
|
from sqlalchemy import DateTime
|
||||||
|
from hub.persistence.configuration import Models
|
||||||
|
|
||||||
|
|
||||||
class Application:
|
class Application(Models):
|
||||||
"""
|
"""
|
||||||
A model representation of an application
|
A model representation of an application
|
||||||
"""
|
"""
|
||||||
__table__ = "application"
|
__tablename__ = 'application'
|
||||||
id = Column(Integer, Sequence('application_id_seq'), primary_key=True)
|
id = Column(Integer, Sequence('application_id_seq'), primary_key=True)
|
||||||
name = Column(String, nullable=False)
|
name = Column(String, nullable=False)
|
||||||
description = Column(String, nullable=False)
|
description = Column(String, nullable=False)
|
||||||
|
|
|
@ -9,12 +9,13 @@ import datetime
|
||||||
|
|
||||||
from sqlalchemy import Column, Integer, String, Sequence, ForeignKey
|
from sqlalchemy import Column, Integer, String, Sequence, ForeignKey
|
||||||
from sqlalchemy import DateTime, PickleType
|
from sqlalchemy import DateTime, PickleType
|
||||||
|
from hub.persistence.configuration import Models
|
||||||
|
|
||||||
|
|
||||||
class City:
|
class City(Models):
|
||||||
"""A model representation of a city
|
"""A model representation of a city
|
||||||
"""
|
"""
|
||||||
__table__ = "city"
|
__tablename__ = 'city'
|
||||||
id = Column(Integer, Sequence('city_id_seq'), primary_key=True)
|
id = Column(Integer, Sequence('city_id_seq'), primary_key=True)
|
||||||
city = Column(PickleType, nullable=False)
|
city = Column(PickleType, nullable=False)
|
||||||
name = Column(String, nullable=False)
|
name = Column(String, nullable=False)
|
||||||
|
|
|
@ -9,12 +9,13 @@ import datetime
|
||||||
|
|
||||||
from sqlalchemy import Column, Integer, String, Sequence, ForeignKey, Float
|
from sqlalchemy import Column, Integer, String, Sequence, ForeignKey, Float
|
||||||
from sqlalchemy import DateTime
|
from sqlalchemy import DateTime
|
||||||
|
from hub.persistence.configuration import Models
|
||||||
|
|
||||||
class CityObject:
|
class CityObject(Models):
|
||||||
"""
|
"""
|
||||||
A model representation of an application
|
A model representation of an application
|
||||||
"""
|
"""
|
||||||
__table__ = "city_object"
|
__tablename__ = 'city_object'
|
||||||
id = Column(Integer, Sequence('application_id_seq'), primary_key=True)
|
id = Column(Integer, Sequence('application_id_seq'), primary_key=True)
|
||||||
city_id = Column(Integer, ForeignKey('city.id'), nullable=False)
|
city_id = Column(Integer, ForeignKey('city.id'), nullable=False)
|
||||||
name = Column(String, nullable=False)
|
name = Column(String, nullable=False)
|
||||||
|
|
|
@ -10,12 +10,13 @@ import datetime
|
||||||
from sqlalchemy import Column, Integer, String, Sequence, ForeignKey
|
from sqlalchemy import Column, Integer, String, Sequence, ForeignKey
|
||||||
from sqlalchemy import DateTime
|
from sqlalchemy import DateTime
|
||||||
from sqlalchemy.dialects.postgresql import JSONB
|
from sqlalchemy.dialects.postgresql import JSONB
|
||||||
|
from hub.persistence.configuration import Models
|
||||||
|
|
||||||
class SimulationResults:
|
class SimulationResults(Models):
|
||||||
"""
|
"""
|
||||||
A model representation of an application
|
A model representation of an application
|
||||||
"""
|
"""
|
||||||
__table__ = "simulation_results"
|
__tablename__ = 'simulation_results'
|
||||||
id = Column(Integer, Sequence('application_id_seq'), primary_key=True)
|
id = Column(Integer, Sequence('application_id_seq'), primary_key=True)
|
||||||
city_id = Column(Integer, ForeignKey('city.id'), nullable=True)
|
city_id = Column(Integer, ForeignKey('city.id'), nullable=True)
|
||||||
city_object_id = Column(Integer, ForeignKey('city_object.id'), nullable=True)
|
city_object_id = Column(Integer, ForeignKey('city_object.id'), nullable=True)
|
||||||
|
|
|
@ -11,17 +11,19 @@ import enum
|
||||||
from sqlalchemy import Column, Integer, String, Sequence
|
from sqlalchemy import Column, Integer, String, Sequence
|
||||||
from sqlalchemy import DateTime, Enum
|
from sqlalchemy import DateTime, Enum
|
||||||
|
|
||||||
|
from hub.persistence.configuration import Models
|
||||||
|
|
||||||
|
|
||||||
class UserRoles(enum.Enum):
|
class UserRoles(enum.Enum):
|
||||||
Admin = 'Admin'
|
Admin = 'Admin'
|
||||||
Hub_Reader = 'Hub_Reader'
|
Hub_Reader = 'Hub_Reader'
|
||||||
|
|
||||||
|
|
||||||
class User:
|
class User(Models):
|
||||||
"""
|
"""
|
||||||
A model representation of a city
|
A model representation of a city
|
||||||
"""
|
"""
|
||||||
__table__ = "user"
|
__tablename__ = 'user'
|
||||||
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
|
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
|
||||||
name = Column(String, nullable=False)
|
name = Column(String, nullable=False)
|
||||||
password = Column(String, nullable=False)
|
password = Column(String, nullable=False)
|
||||||
|
|
|
@ -80,15 +80,16 @@ class Application(Repository):
|
||||||
except SQLAlchemyError as err:
|
except SQLAlchemyError as err:
|
||||||
logger.error(f'Error while deleting application: {err}')
|
logger.error(f'Error while deleting application: {err}')
|
||||||
|
|
||||||
def get_by_uuid(self, application_uuid: str) -> [Model]:
|
def get_by_uuid(self, application_uuid: str) -> Model:
|
||||||
"""
|
"""
|
||||||
Fetch Application based on the application uuid
|
Fetch Application based on the application uuid
|
||||||
:param application_uuid: the application uuid
|
:param application_uuid: the application uuid
|
||||||
:return: [Application] with the provided application_uuid
|
:return: Application with the provided application_uuid
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
return self.session.execute(select(Model).where(
|
return self.session.execute(select(Model).where(
|
||||||
Model.application_uuid == application_uuid)
|
Model.application_uuid == application_uuid)
|
||||||
).first()
|
).first()[0]
|
||||||
except SQLAlchemyError as err:
|
except SQLAlchemyError as err:
|
||||||
logger.error(f'Error while fetching application by application_uuid: {err}')
|
logger.error(f'Error while fetching application by application_uuid: {err}')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user