Skip to content

Commit 77efcc2

Browse files
implements db context manager
1 parent 7879742 commit 77efcc2

File tree

9 files changed

+143
-105
lines changed

9 files changed

+143
-105
lines changed

lib/controllers/environment.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ async def create_env(self) -> Union[EnvCreated, HTTPException]:
7070
views.EnvCreated
7171
"""
7272
try:
73-
await EnvRepository.fetch_env(self.env).create_env()
73+
with EnvRepository.fetch_env(self.env) as env_repo:
74+
await env_repo.create_env()
7475
except Exception as e:
7576
exc_str = parse_error(e)
7677
logger.error(f"controllers.environment.create_env: {exc_str}")
@@ -100,7 +101,9 @@ async def get_env_by_id(env_id: str) -> Union[Env, HTTPException]:
100101
HTTP 404 Not Found: If the env is not found in the database.
101102
"""
102103
try:
103-
read_env = await EnvRepository().get_env_by_id(env_id)
104+
with EnvRepository() as env_repo:
105+
await env_repo.get_env_by_id(env_id)
106+
read_env = env_repo.env
104107
except Exception as e:
105108
exc_str = parse_error(e)
106109
logger.error(f"controllers.environment.get_env_by_id: {exc_str}")
@@ -176,8 +179,9 @@ async def update_env_by_id(
176179
HTTP 404 Not Found: If the env is not found in the database.
177180
"""
178181
try:
179-
env_repo = await EnvRepository.fetch_env(self.env).create_env()
180-
await env_repo.delete_env_by_id(env_id)
182+
with EnvRepository.fetch_env(self.env) as env_repo:
183+
await env_repo.create_env()
184+
await env_repo.delete_env_by_id(env_id)
181185
except Exception as e:
182186
exc_str = parse_error(e)
183187
logger.error(f"controllers.environment.update_env: {exc_str}")
@@ -209,7 +213,8 @@ async def delete_env_by_id(
209213
HTTP 404 Not Found: If the env is not found in the database.
210214
"""
211215
try:
212-
await EnvRepository().delete_env_by_id(env_id)
216+
with EnvRepository() as env_repo:
217+
await env_repo.delete_env_by_id(env_id)
213218
except Exception as e:
214219
exc_str = parse_error(e)
215220
logger.error(f"controllers.environment.delete_env: {exc_str}")
@@ -243,6 +248,7 @@ async def simulate_env(
243248
try:
244249
read_env = await cls.get_env_by_id(env_id)
245250
rocketpy_env = cls.get_rocketpy_env(read_env)
251+
246252
env_simulation_numbers = EnvData.parse_obj(
247253
rocketpy_env.all_info_returned()
248254
)

lib/controllers/flight.py

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,11 @@ async def create_flight(self) -> Union[FlightCreated, HTTPException]:
107107
views.FlightCreated
108108
"""
109109
try:
110-
await FlightRepository.fetch_flight(self.flight).create_flight(
111-
motor_kind=self.motor_kind, rocket_option=self.rocket_option
112-
)
110+
with FlightRepository.fetch_flight(self.flight) as flight_repo:
111+
await flight_repo.create_flight(
112+
motor_kind=self.motor_kind,
113+
rocket_option=self.rocket_option,
114+
)
113115
except Exception as e:
114116
exc_str = parse_error(e)
115117
logger.error(f"controllers.flight.create_flight: {exc_str}")
@@ -139,7 +141,9 @@ async def get_flight_by_id(flight_id: str) -> Union[Flight, HTTPException]:
139141
HTTP 404 Not Found: If the flight is not found in the database.
140142
"""
141143
try:
142-
read_flight = await FlightRepository().get_flight_by_id(flight_id)
144+
with FlightRepository() as flight_repo:
145+
await flight_repo.get_flight_by_id(flight_id)
146+
read_flight = flight_repo.flight
143147
except Exception as e:
144148
exc_str = parse_error(e)
145149
logger.error(f"controllers.flight.get_flight_by_id: {exc_str}")
@@ -215,12 +219,12 @@ async def update_flight_by_id(
215219
HTTP 404 Not Found: If the flight is not found in the database.
216220
"""
217221
try:
218-
flight_repo = await FlightRepository.fetch_flight(
219-
self.flight
220-
).create_flight(
221-
motor_kind=self.motor_kind, rocket_option=self.rocket_option
222-
)
223-
await flight_repo.delete_flight_by_id(flight_id)
222+
with FlightRepository.fetch_flight(self.flight) as flight_repo:
223+
await flight_repo.create_flight(
224+
motor_kind=self.motor_kind,
225+
rocket_option=self.rocket_option,
226+
)
227+
await flight_repo.delete_flight_by_id(flight_id)
224228
except Exception as e:
225229
exc_str = parse_error(e)
226230
logger.error(f"controllers.flight.update_flight: {exc_str}")
@@ -257,13 +261,12 @@ async def update_env_by_flight_id(
257261
new_flight = read_flight.dict()
258262
new_flight["environment"] = env
259263
new_flight = Flight(**new_flight)
260-
flight_repo = await FlightRepository.fetch_flight(
261-
new_flight
262-
).create_flight(
263-
motor_kind=read_flight.rocket.motor.motor_kind,
264-
rocket_option=read_flight.rocket.rocket_option,
265-
)
266-
await flight_repo.delete_flight_by_id(flight_id)
264+
with FlightRepository.fetch_flight(new_flight) as flight_repo:
265+
await flight_repo.create_flight(
266+
motor_kind=read_flight.rocket.motor.motor_kind,
267+
rocket_option=read_flight.rocket.rocket_option,
268+
)
269+
await flight_repo.delete_flight_by_id(flight_id)
267270
except HTTPException as e:
268271
raise e from e
269272
except Exception as e:
@@ -305,10 +308,11 @@ async def update_rocket_by_flight_id(
305308
new_flight = read_flight.dict()
306309
new_flight["rocket"] = updated_rocket
307310
new_flight = Flight(**new_flight)
308-
flight_repo = await FlightRepository.fetch_flight(
309-
new_flight
310-
).create_flight(motor_kind=motor_kind, rocket_option=rocket_option)
311-
await flight_repo.delete_flight_by_id(flight_id)
311+
with FlightRepository.fetch_flight(new_flight) as flight_repo:
312+
await flight_repo.create_flight(
313+
motor_kind=motor_kind, rocket_option=rocket_option
314+
)
315+
await flight_repo.delete_flight_by_id(flight_id)
312316
except HTTPException as e:
313317
raise e from e
314318
except Exception as e:
@@ -342,7 +346,8 @@ async def delete_flight_by_id(
342346
HTTP 404 Not Found: If the flight is not found in the database.
343347
"""
344348
try:
345-
await FlightRepository().delete_flight_by_id(flight_id)
349+
with FlightRepository() as flight_repo:
350+
await flight_repo.delete_flight_by_id(flight_id)
346351
except Exception as e:
347352
exc_str = parse_error(e)
348353
logger.error(f"controllers.flight.delete_flight: {exc_str}")
@@ -376,8 +381,7 @@ async def simulate_flight(
376381
"""
377382
try:
378383
read_flight = await cls.get_flight_by_id(flight_id=flight_id)
379-
rocketpy_flight = cls.get_rocketpy_flight(flight=read_flight)
380-
flight = rocketpy_flight
384+
flight = cls.get_rocketpy_flight(read_flight)
381385

382386
_initial_conditions = InitialConditions(
383387
initial_altitude="Attitude - e0: {:.3f} | e1: {:.3f} | e2: {:.3f} | e3: {:.3f}".format(

lib/controllers/motor.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,8 @@ async def create_motor(self) -> Union[MotorCreated, HTTPException]:
118118
views.MotorCreated
119119
"""
120120
try:
121-
await MotorRepository.fetch_motor(self.motor).create_motor(
122-
motor_kind=self.motor_kind
123-
)
121+
with MotorRepository.fetch_motor(self.motor) as motor_repo:
122+
await motor_repo.create_motor(motor_kind=self.motor_kind)
124123
except Exception as e:
125124
exc_str = parse_error(e)
126125
logger.error(f"controllers.motor.create_motor: {exc_str}")
@@ -150,7 +149,9 @@ async def get_motor_by_id(motor_id: str) -> Union[Motor, HTTPException]:
150149
HTTP 404 Not Found: If the motor is not found in the database.
151150
"""
152151
try:
153-
read_motor = await MotorRepository().get_motor_by_id(motor_id)
152+
with MotorRepository() as motor_repo:
153+
await motor_repo.get_motor_by_id(motor_id)
154+
read_motor = motor_repo.motor
154155
except Exception as e:
155156
exc_str = parse_error(e)
156157
logger.error(f"controllers.motor.get_motor_by_id: {exc_str}")
@@ -226,10 +227,9 @@ async def update_motor_by_id(
226227
HTTP 404 Not Found: If the motor is not found in the database.
227228
"""
228229
try:
229-
motor_repo = await MotorRepository.fetch_motor(
230-
self.motor
231-
).create_motor(motor_kind=self.motor_kind)
232-
await motor_repo.delete_motor_by_id(motor_id)
230+
with MotorRepository.fetch_motor(self.motor) as motor_repo:
231+
await motor_repo.create_motor(motor_kind=self.motor_kind)
232+
await motor_repo.delete_motor_by_id(motor_id)
233233
except Exception as e:
234234
exc_str = parse_error(e)
235235
logger.error(f"controllers.motor.update_motor: {exc_str}")
@@ -261,7 +261,8 @@ async def delete_motor_by_id(
261261
HTTP 404 Not Found: If the motor is not found in the database.
262262
"""
263263
try:
264-
await MotorRepository().delete_motor_by_id(motor_id)
264+
with MotorRepository() as motor_repo:
265+
await motor_repo.delete_motor_by_id(motor_id)
265266
except Exception as e:
266267
exc_str = parse_error(e)
267268
logger.error(f"controllers.motor.delete_motor: {exc_str}")
@@ -293,7 +294,7 @@ async def simulate_motor(
293294
HTTP 404 Not Found: If the motor does not exist in the database.
294295
"""
295296
try:
296-
read_motor = await MotorRepository().get_motor_by_id(motor_id)
297+
read_motor = await cls.get_motor_by_id(motor_id)
297298
motor = cls.get_rocketpy_motor(read_motor)
298299

299300
motor_simulation_numbers = MotorData(

lib/controllers/rocket.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,11 @@ async def create_rocket(self) -> Union[RocketCreated, HTTPException]:
155155
views.RocketCreated
156156
"""
157157
try:
158-
await RocketRepository.fetch_rocket(self.rocket).create_rocket(
159-
rocket_option=self.rocket_option, motor_kind=self.motor_kind
160-
)
158+
with RocketRepository.fetch_rocket(self.rocket) as rocket_repo:
159+
await rocket_repo.create_rocket(
160+
rocket_option=self.rocket_option,
161+
motor_kind=self.motor_kind,
162+
)
161163
except Exception as e:
162164
exc_str = parse_error(e)
163165
logger.error(f"controllers.rocket.create_rocket: {exc_str}")
@@ -189,7 +191,9 @@ async def get_rocket_by_id(
189191
HTTP 404 Not Found: If the rocket is not found in the database.
190192
"""
191193
try:
192-
read_rocket = await RocketRepository().get_rocket_by_id(rocket_id)
194+
with RocketRepository() as rocket_repo:
195+
await rocket_repo.get_rocket_by_id(rocket_id)
196+
read_rocket = rocket_repo.rocket
193197
except Exception as e:
194198
exc_str = parse_error(e)
195199
logger.error(f"controllers.rocket.get_rocket_by_id: {exc_str}")
@@ -264,12 +268,12 @@ async def update_rocket_by_id(
264268
HTTP 404 Not Found: If the rocket is not found in the database.
265269
"""
266270
try:
267-
rocket_repo = await RocketRepository.fetch_rocket(
268-
self.rocket
269-
).create_rocket(
270-
rocket_option=self.rocket_option, motor_kind=self.motor_kind
271-
)
272-
await rocket_repo.delete_rocket_by_id(rocket_id)
271+
with RocketRepository.fetch_rocket(self.rocket) as rocket_repo:
272+
await rocket_repo.create_rocket(
273+
rocket_option=self.rocket_option,
274+
motor_kind=self.motor_kind,
275+
)
276+
await rocket_repo.delete_rocket_by_id(rocket_id)
273277
except Exception as e:
274278
exc_str = parse_error(e)
275279
logger.error(f"controllers.rocket.update_rocket: {exc_str}")
@@ -301,7 +305,8 @@ async def delete_rocket_by_id(
301305
HTTP 404 Not Found: If the rocket is not found in the database.
302306
"""
303307
try:
304-
await RocketRepository().delete_rocket_by_id(rocket_id)
308+
with RocketRepository() as rocket_repo:
309+
await rocket_repo.delete_rocket_by_id(rocket_id)
305310
except Exception as e:
306311
exc_str = parse_error(e)
307312
logger.error(f"controllers.rocket.delete_rocket: {exc_str}")

lib/repositories/environment.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class EnvRepository(Repository):
1818

1919
def __init__(self):
2020
super().__init__("environments")
21+
self._env = None
2122

2223
@classmethod
2324
def fetch_env(cls, environment: Env):
@@ -42,6 +43,17 @@ def env_id(self) -> str:
4243
def env_id(self, env_id: "str"):
4344
self._env_id = env_id
4445

46+
async def insert_env(self, env_data: dict):
47+
await self.collection.insert_one(env_data)
48+
return self
49+
50+
async def find_env(self, env_id: str):
51+
return await self.collection.find_one({"env_id": env_id})
52+
53+
async def delete_env(self, env_id: str):
54+
await self.collection.delete_one({"env_id": env_id})
55+
return self
56+
4557
async def create_env(self):
4658
"""
4759
Creates a non-existing models.Env in the database
@@ -69,17 +81,18 @@ async def get_env_by_id(self, env_id: str) -> Union[Env, None]:
6981
Gets a models.Env from the database
7082
7183
Returns:
72-
models.Env
84+
self
7385
"""
7486
try:
7587
read_env = await self.find_env(env_id)
7688
parsed_env = Env.parse_obj(read_env) if read_env else None
89+
self.env = parsed_env
7790
except Exception as e:
7891
exc_str = parse_error(e)
7992
logger.error(f"repositories.environment.get_env: {exc_str}")
8093
raise Exception(f"Error getting environment: {exc_str}") from e
8194
else:
82-
return parsed_env
95+
return self
8396
finally:
8497
logger.info(
8598
f"Call to repositories.environment.get_env completed for Env {env_id}"
@@ -90,26 +103,17 @@ async def delete_env_by_id(self, env_id: str):
90103
Deletes a models.Env from the database
91104
92105
Returns:
93-
None
106+
self
94107
"""
95108
try:
96109
await self.delete_env(env_id)
97110
except Exception as e:
98111
exc_str = parse_error(e)
99112
logger.error(f"repositories.environment.delete_env: {exc_str}")
100113
raise Exception(f"Error deleting environment: {exc_str}") from e
114+
else:
115+
return self
101116
finally:
102117
logger.info(
103118
f"Call to repositories.environment.delete_env completed for Env {env_id}"
104119
)
105-
106-
async def insert_env(self, env_data: dict):
107-
await self.collection.insert_one(env_data)
108-
return self
109-
110-
async def find_env(self, env_id: str):
111-
return await self.collection.find_one({"env_id": env_id})
112-
113-
async def delete_env(self, env_id: str):
114-
await self.collection.delete_one({"env_id": env_id})
115-
return self

0 commit comments

Comments
 (0)