Skip to content

Commit d02676b

Browse files
refactors repositories/environemnt
updates pyproject toml minor adjustments updates requirements
1 parent 79a4b53 commit d02676b

File tree

6 files changed

+100
-59
lines changed

6 files changed

+100
-59
lines changed

lib/controllers/environment.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def __init__(self, env: Env):
3636
self._env = env
3737

3838
@property
39-
async def env(self) -> Env:
39+
def env(self) -> Env:
4040
return self._env
4141

4242
@env.setter

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: 85 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,138 @@
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+
@property
28+
def env(self) -> "Env":
29+
return self._env
2930

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

34-
Args:
35-
rocketpy_env: rocketpy environment object
43+
async def create_env(self):
44+
"""
45+
Creates a non-existing models.Env in the database
3646
3747
Returns:
38-
InsertOneResult: result of the insert operation
48+
None
3949
"""
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)
50+
env_exists = await self.get_env()
51+
if env_exists:
52+
return
53+
54+
try:
55+
environment_to_dict = self.env.dict()
56+
environment_to_dict["env_id"] = self.env_id
57+
await self.collection.insert_one(environment_to_dict)
58+
except Exception as e:
59+
exc_str = parse_error(e)
60+
logging.error(
61+
f"[{datetime.now()}] repositories.environment.create_env: {exc_str}"
62+
)
63+
raise Exception(f"Error creating environment: {str(e)}") from e
64+
finally:
65+
logging.info(
66+
f"[{datetime.now()}] Call to repositories.environment.create_env completed; states: Env {hash(self.env)}, EnvID {self.env_id}"
67+
)
68+
self.close_connection()
5169

52-
async def update_env(self) -> "Union[int, None]":
70+
async def update_env(self):
5371
"""
54-
Updates a environment in the database
72+
Updates a models.Env in the database
5573
5674
Returns:
57-
int: environment id
75+
None
5876
"""
5977
try:
60-
environment_to_dict = self.environment.dict()
61-
environment_to_dict["env_id"] = self.environment.__hash__()
62-
78+
environment_to_dict = self.env.dict()
79+
environment_to_dict["env_id"] = hash(self.env)
6380
await self.collection.update_one(
6481
{"env_id": self.env_id}, {"$set": environment_to_dict}
6582
)
66-
6783
self.env_id = environment_to_dict["env_id"]
68-
return self.env_id
6984
except Exception as e:
85+
exc_str = parse_error(e)
86+
logging.error(
87+
f"[{datetime.now()}] repositories.environment.update_env: {exc_str}"
88+
)
7089
raise Exception(f"Error updating environment: {str(e)}") from e
90+
else:
91+
return
7192
finally:
72-
self.__del__()
93+
logging.info(
94+
f"[{datetime.now()}] Call to repositories.environment.update_env completed; states: Env {hash(self.env)}, EnvID {self.env_id}"
95+
)
96+
self.close_connection()
7397

7498
async def get_env(self) -> "Union[Env, None]":
7599
"""
76-
Gets a environment from the database
100+
Gets a models.Env from the database
77101
78102
Returns:
79-
models.Env: Model environment object
103+
models.Env
80104
"""
81105
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
106+
read_env = await self.collection.find_one({"env_id": self.env_id})
86107
except Exception as e:
108+
logging.error(
109+
f"[{datetime.now()}] repositories.environment.get_env: {str(e)}"
110+
)
87111
raise Exception(f"Error getting environment: {str(e)}") from e
112+
else:
113+
return Env.parse_obj(read_env) if read_env else None
114+
finally:
115+
logging.info(
116+
f"[{datetime.now()}] Call to repositories.environment.get_env completed; states: Env {hash(self.env)}, EnvID {self.env_id}"
117+
)
118+
self.close_connection()
88119

89-
async def delete_env(self) -> "DeleteResult":
120+
async def delete_env(self):
90121
"""
91-
Deletes a environment from the database
122+
Deletes a models.Env from the database
92123
93124
Returns:
94-
DeleteResult: result of the delete operation
125+
None
95126
"""
96127
try:
97-
return await self.collection.delete_one({"env_id": self.env_id})
128+
await self.collection.delete_one({"env_id": self.env_id})
98129
except Exception as e:
130+
logging.error(
131+
f"[{datetime.now()}] repositories.environment.delete_env: {str(e)}"
132+
)
99133
raise Exception(f"Error deleting environment: {str(e)}") from e
100134
finally:
101-
self.__del__()
135+
logging.info(
136+
f"[{datetime.now()}] Call to repositories.environment.delete_env completed; states: Env {hash(self.env)}, EnvID {self.env_id}"
137+
)
138+
self.close_connection()

lib/repositories/repo.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
from motor.motor_asyncio import AsyncIOMotorClient
23
from pymongo.server_api import ServerApi
34
from lib.secrets import secrets_instance
@@ -25,5 +26,6 @@ def __init__(self, collection: str):
2526
self.db = self.client.rocketpy
2627
self.collection = self.db[collection]
2728

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

pyproject.toml

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
1-
[build-system]
2-
requires = ["setuptools", "setuptools_scm"]
3-
build-backend = "setuptools.build_meta"
4-
5-
[tool.setuptools.dynamic]
6-
dependencies = {file = ["requirements.txt"]}
7-
81
[project]
92
name = "Infinity-API"
103
version = "1.1.0"
@@ -19,12 +12,15 @@ maintainers = [
1912
{name = "Luiz Mota", email = "luiz.mota1999@usp.br"}
2013
]
2114
readme = "README.md"
22-
keywords = ["rocketpy", "rocket flight", "simulation", "rocket", "flight"]
15+
keywords = ["rocketpy", "rocket flight", "simulation", "API"]
2316
classifiers = [
2417
"Development Status :: Alpha",
2518
"Programming Language :: Python"
2619
]
2720

21+
[tool.setuptools.dynamic]
22+
dependencies = { file = ["requirements.txt"] }
23+
2824
[project.urls]
2925
Homepage = "http://api.rocketpy.org/"
3026
Documentation = "http://api.rocketpy.org/docs"

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ pymongo
66
jsonpickle
77
gunicorn
88
uvicorn
9-
git+https://github.com/RocketPy-Team/RocketPy
9+
rocketpy

0 commit comments

Comments
 (0)