Skip to content

Commit

Permalink
refactor: inserting cmodels in db
Browse files Browse the repository at this point in the history
  • Loading branch information
jearistiz committed Apr 21, 2021
1 parent 842d011 commit 76dedd9
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 29 deletions.
4 changes: 1 addition & 3 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import uvicorn

from src.config import settings
from src.utils.cmodels import insert_cmodels_document

if __name__ == '__main__':

insert_cmodels_document()
if __name__ == '__main__':
uvicorn.run(
"src.api:app",
host=settings['HOST'],
Expand Down
3 changes: 3 additions & 0 deletions src/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from src.config import settings
from src.routers.main import main_router
from src.use_cases.cmodels import CmodelUseCases

app = FastAPI()

Expand All @@ -25,3 +26,5 @@
main_router,
tags=["Main"],
)

CmodelUseCases.update_cmodels_collection()
40 changes: 27 additions & 13 deletions src/utils/cmodels.py → src/interfaces/cmodels.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,25 @@
from datetime import datetime

from src.db.mongo import get_collection
from pymongo.collection import Collection
from pymongo.mongo_client import MongoClient

from src.models.db.cmodels import (
CompartmentalModelBase,
CompartmentalModelEnum
)
from src.models.db.cmodels import CompartmentalModel
from src.interfaces.crud import MongoCRUD
from src.use_cases.cmodels import CmodelUseCases


def insert_cmodels_document():
class CModelsInterface:
def __init__(
self,
db_connection: MongoClient,
collection: Collection
) -> None:
self.crud = MongoCRUD(db_connection, collection)

for model in CompartmentalModelEnum:
model: CompartmentalModelBase = model.value
def insert_one_cmodel_document(self, model: CompartmentalModelBase):

id_dict = {'_id': model.name.encode('utf-8').hex()}

Expand All @@ -24,28 +30,36 @@ def insert_cmodels_document():
**model.dict()
).dict(by_alias=True)

cmodels_crud = MongoCRUD(*get_collection())

existent_model = cmodels_crud.read(id_dict)
existent_model = self.crud.read(id_dict)

if existent_model:
pruned_existent_model = \
CmodelUseCases.model_information_in_db_to_compare(
CModelsInterface._prune_db_document(
existent_model
)
if pruned_existent_model == model.dict():
if pruned_existent_model == model.dict(by_alias=True):
# TODO: log cmodel exists
...
print(f'Cmodel exists: {model.name}')
else:
cmodel_document.pop('inserted_at')
cmodels_crud.update(
self.crud.update(
id_dict,
cmodel_document
)
# TODO log updated cmodel
print(f'Updated cmodel: {model.name}')
else:
cmodels_crud.insert(cmodel_document)
self.crud.insert(cmodel_document)
# TODO: log created cmodel
print(f'Created cmodel: {model.name}')

def insert_all_cmodel_documents(self, ):
for model in CompartmentalModelEnum.values():
self.insert_one_cmodel_document(model)

@staticmethod
def _prune_db_document(model_in_db: dict) -> dict:
model_in_db.pop('_id')
model_in_db.pop('inserted_at')
model_in_db.pop('updated_at')
return model_in_db
5 changes: 0 additions & 5 deletions src/interfaces/simulation_interface.py

This file was deleted.

12 changes: 10 additions & 2 deletions src/models/db/cmodels.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class CompartmentalModelBase(BaseModel):
"""Units of each parameter. The keys are the 'parameters' array elements"""


class CompartmentalModel(CompartmentalModelBase):
class MetadataBase(BaseModel):
id: str = Field(..., alias='_id')
inserted_at: datetime
updated_at: datetime
Expand All @@ -31,6 +31,10 @@ class Config:
allow_population_by_field_name = True


class CompartmentalModel(MetadataBase, CompartmentalModelBase):
pass


class CompartmentalModelEnum(Enum):
"""Compartmental Models' Data.
Expand Down Expand Up @@ -83,10 +87,14 @@ class CompartmentalModelEnum(Enum):
parameters_units={
'a': 'units of a',
'b': 'units of b',
'c': 'units_test'
'c': 'units of c'
},
)

@classmethod
def values(cls) -> List[CompartmentalModelBase]:
return [m.value for m in cls]


class CModel(BaseModel):
model: CompartmentalModelEnum
Expand Down
14 changes: 8 additions & 6 deletions src/use_cases/cmodels.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
class CmodelUseCases:
from src.db.mongo import get_collection
from src.interfaces.cmodels import CModelsInterface


class CmodelUseCases:
@staticmethod
def model_information_in_db_to_compare(model_in_db: dict) -> dict:
model_in_db.pop('_id')
model_in_db.pop('inserted_at')
model_in_db.pop('updated_at')
return model_in_db
def update_cmodels_collection():
db_connection, cmodels_coll = get_collection()
cmodels_interface = CModelsInterface(db_connection, cmodels_coll)
cmodels_interface.insert_all_cmodel_documents()

0 comments on commit 76dedd9

Please sign in to comment.