Skip to content

Commit ef0bc48

Browse files
refactors repositories/environemnt
1 parent 79a4b53 commit ef0bc48

File tree

2 files changed

+95
-48
lines changed

2 files changed

+95
-48
lines changed

lib/repositories/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# lib/controllers/__init__.py
2+
3+
4+
def parse_error(e):
5+
exc_str = f"{e}".replace("\n", " ").replace(" ", " ")
6+
return exc_str

lib/repositories/environment.py

Lines changed: 89 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,142 @@
1+
import logging
2+
from datetime import datetime
13
from typing import Union
2-
from pymongo.results import InsertOneResult
3-
from pymongo.results import DeleteResult
4+
from lib.repositories import parse_error
45
from lib.models.environment import Env
56
from lib.repositories.repo import Repository
67

78

89
class EnvRepository(Repository):
910
"""
10-
Environment repository
11+
Enables database CRUD operations with models.Env
1112
1213
Init Attributes:
13-
environment: Env object
14-
env_id: Environment id
14+
environment: models.Env
15+
env_id: str
1516
16-
Enables CRUD operations on environment objects
1717
"""
1818

1919
def __init__(self, environment: Env = None, env_id: str = None):
2020
super().__init__("environments")
21-
self.environment = environment
21+
self._env = environment
2222
if env_id:
23-
self.env_id = env_id
23+
self._env_id = env_id
2424
else:
25-
self.env_id = self.environment.__hash__()
25+
self._env_id = hash(self._env)
2626

27-
def __del__(self):
28-
super().__del__()
27+
def close_connection(self) -> None:
28+
logging.info(f"[{datetime.now()}] Closing connection to database")
29+
self.client.close()
2930

30-
async def create_env(self) -> "InsertOneResult":
31-
"""
32-
Creates a environment in the database
31+
@property
32+
def env(self) -> "Env":
33+
return self._env
34+
35+
@env.setter
36+
def env(self, environment: "Env"):
37+
self._env = environment
38+
39+
@property
40+
def env_id(self) -> "str":
41+
return self._env_id
3342

34-
Args:
35-
rocketpy_env: rocketpy environment object
43+
@env_id.setter
44+
def env_id(self, env_id: "str"):
45+
self._env_id = env_id
46+
47+
async def create_env(self):
48+
"""
49+
Creates a non-existing models.Env in the database
3650
3751
Returns:
38-
InsertOneResult: result of the insert operation
52+
None
3953
"""
40-
if not await self.get_env():
41-
try:
42-
environment_to_dict = self.environment.dict()
43-
environment_to_dict["env_id"] = self.env_id
44-
return await self.collection.insert_one(environment_to_dict)
45-
except Exception as e:
46-
raise Exception(f"Error creating environment: {str(e)}") from e
47-
finally:
48-
self.__del__()
49-
else:
50-
return InsertOneResult(acknowledged=True, inserted_id=None)
54+
env_exists = await self.get_env()
55+
if env_exists:
56+
return
57+
58+
try:
59+
environment_to_dict = self.env.dict()
60+
environment_to_dict["env_id"] = self.env_id
61+
await self.collection.insert_one(environment_to_dict)
62+
except Exception as e:
63+
exc_str = parse_error(e)
64+
logging.error(
65+
f"[{datetime.now()}] repositories.environment.create_env: {exc_str}"
66+
)
67+
raise Exception(f"Error creating environment: {str(e)}") from e
68+
finally:
69+
logging.info(
70+
f"[{datetime.now()}] Call to repositories.environment.create_env completed; states: Env {hash(self.env)}, EnvID {self.env_id}"
71+
)
72+
self.close_connection()
5173

52-
async def update_env(self) -> "Union[int, None]":
74+
async def update_env(self):
5375
"""
54-
Updates a environment in the database
76+
Updates a models.Env in the database
5577
5678
Returns:
57-
int: environment id
79+
None
5880
"""
5981
try:
60-
environment_to_dict = self.environment.dict()
61-
environment_to_dict["env_id"] = self.environment.__hash__()
62-
82+
environment_to_dict = self.env.dict()
83+
environment_to_dict["env_id"] = hash(self.env)
6384
await self.collection.update_one(
6485
{"env_id": self.env_id}, {"$set": environment_to_dict}
6586
)
66-
6787
self.env_id = environment_to_dict["env_id"]
68-
return self.env_id
6988
except Exception as e:
89+
exc_str = parse_error(e)
90+
logging.error(
91+
f"[{datetime.now()}] repositories.environment.update_env: {exc_str}"
92+
)
7093
raise Exception(f"Error updating environment: {str(e)}") from e
94+
else:
95+
return
7196
finally:
72-
self.__del__()
97+
logging.info(
98+
f"[{datetime.now()}] Call to repositories.environment.update_env completed; states: Env {hash(self.env)}, EnvID {self.env_id}"
99+
)
100+
self.close_connection()
73101

74102
async def get_env(self) -> "Union[Env, None]":
75103
"""
76-
Gets a environment from the database
104+
Gets a models.Env from the database
77105
78106
Returns:
79-
models.Env: Model environment object
107+
models.Env
80108
"""
81109
try:
82-
environment = await self.collection.find_one({"env_id": self.env_id})
83-
if environment is not None:
84-
return Env.parse_obj(environment)
85-
return None
110+
read_env = await self.collection.find_one({"env_id": self.env_id})
86111
except Exception as e:
112+
logging.error(
113+
f"[{datetime.now()}] repositories.environment.get_env: {str(e)}"
114+
)
87115
raise Exception(f"Error getting environment: {str(e)}") from e
116+
else:
117+
return Env.parse_obj(read_env) if read_env else None
118+
finally:
119+
logging.info(
120+
f"[{datetime.now()}] Call to repositories.environment.get_env completed; states: Env {hash(self.env)}, EnvID {self.env_id}"
121+
)
122+
self.close_connection()
88123

89-
async def delete_env(self) -> "DeleteResult":
124+
async def delete_env(self):
90125
"""
91-
Deletes a environment from the database
126+
Deletes a models.Env from the database
92127
93128
Returns:
94-
DeleteResult: result of the delete operation
129+
None
95130
"""
96131
try:
97-
return await self.collection.delete_one({"env_id": self.env_id})
132+
await self.collection.delete_one({"env_id": self.env_id})
98133
except Exception as e:
134+
logging.error(
135+
f"[{datetime.now()}] repositories.environment.delete_env: {str(e)}"
136+
)
99137
raise Exception(f"Error deleting environment: {str(e)}") from e
100138
finally:
101-
self.__del__()
139+
logging.info(
140+
f"[{datetime.now()}] Call to repositories.environment.delete_env completed; states: Env {hash(self.env)}, EnvID {self.env_id}"
141+
)
142+
self.close_connection()

0 commit comments

Comments
 (0)