Skip to content

Commit 5504668

Browse files
GabrielBarberiniCopilotcoderabbitai[bot]
authored
Change simulation encoding workaround to official rocketpy encoders (#51)
* implements rocketpy encoders * addresses code review * addresses PR review * removes remaining redundant init * Update src/utils.py Co-authored-by: Copilot <[email protected]> * update docs * removes duplicate attributes * Closes #53 * addresses PR review * Update src/utils.py Co-authored-by: Copilot <[email protected]> * fix informat date format * Update src/views/rocket.py Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update src/views/rocket.py Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update src/views/motor.py Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update src/views/flight.py Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update src/views/environment.py Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * addresses PR review --------- Co-authored-by: Copilot <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent b3f1ede commit 5504668

File tree

16 files changed

+446
-303
lines changed

16 files changed

+446
-303
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ disable = """
5555
no-member,
5656
protected-access,
5757
import-outside-toplevel,
58+
too-many-statements,
5859
"""
5960

6061
[tool.ruff]

src/models/environment.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1-
import datetime
1+
from datetime import datetime, timezone, timedelta
22
from typing import Optional, ClassVar, Self, Literal
3+
from pydantic import Field
34
from src.models.interface import ApiBaseModel
45

56

7+
def _default_future_datetime() -> datetime:
8+
"""Factory function to create timezone-aware datetime one day in the future."""
9+
return datetime.now(timezone.utc) + timedelta(days=1)
10+
11+
612
class EnvironmentModel(ApiBaseModel):
713
NAME: ClassVar = 'environment'
814
METHODS: ClassVar = ('POST', 'GET', 'PUT', 'DELETE')
@@ -24,9 +30,7 @@ class EnvironmentModel(ApiBaseModel):
2430
'ensemble',
2531
] = 'standard_atmosphere'
2632
atmospheric_model_file: Optional[str] = None
27-
date: Optional[datetime.datetime] = (
28-
datetime.datetime.today() + datetime.timedelta(days=1)
29-
)
33+
date: Optional[datetime] = Field(default_factory=_default_future_datetime)
3034

3135
@staticmethod
3236
def UPDATED():

src/models/interface.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class ApiBaseModel(BaseModel, ABC):
2121
validate_default=True,
2222
validate_all_in_root=True,
2323
validate_assignment=True,
24+
ser_json_exclude_none=True,
2425
)
2526

2627
def set_id(self, value):

src/repositories/flight.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@ def __init__(self):
1919

2020
@repository_exception_handler
2121
async def create_flight(self, flight: FlightModel) -> str:
22-
return await self.insert(flight.model_dump())
22+
return await self.insert(flight.model_dump(exclude_none=True))
2323

2424
@repository_exception_handler
2525
async def read_flight_by_id(self, flight_id: str) -> Optional[FlightModel]:
2626
return await self.find_by_id(data_id=flight_id)
2727

2828
@repository_exception_handler
2929
async def update_flight_by_id(self, flight_id: str, flight: FlightModel):
30-
await self.update_by_id(flight.model_dump(), data_id=flight_id)
30+
await self.update_by_id(
31+
flight.model_dump(exclude_none=True), data_id=flight_id
32+
)
3133

3234
@repository_exception_handler
3335
async def delete_flight_by_id(self, flight_id: str):

src/repositories/motor.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@ def __init__(self):
1919

2020
@repository_exception_handler
2121
async def create_motor(self, motor: MotorModel) -> str:
22-
return await self.insert(motor.model_dump())
22+
return await self.insert(motor.model_dump(exclude_none=True))
2323

2424
@repository_exception_handler
2525
async def read_motor_by_id(self, motor_id: str) -> Optional[MotorModel]:
2626
return await self.find_by_id(data_id=motor_id)
2727

2828
@repository_exception_handler
2929
async def update_motor_by_id(self, motor_id: str, motor: MotorModel):
30-
await self.update_by_id(motor.model_dump(), data_id=motor_id)
30+
await self.update_by_id(
31+
motor.model_dump(exclude_none=True), data_id=motor_id
32+
)
3133

3234
@repository_exception_handler
3335
async def delete_motor_by_id(self, motor_id: str):

src/repositories/rocket.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@ def __init__(self):
1919

2020
@repository_exception_handler
2121
async def create_rocket(self, rocket: RocketModel) -> str:
22-
return await self.insert(rocket.model_dump())
22+
return await self.insert(rocket.model_dump(exclude_none=True))
2323

2424
@repository_exception_handler
2525
async def read_rocket_by_id(self, rocket_id: str) -> Optional[RocketModel]:
2626
return await self.find_by_id(data_id=rocket_id)
2727

2828
@repository_exception_handler
2929
async def update_rocket_by_id(self, rocket_id: str, rocket: RocketModel):
30-
await self.update_by_id(rocket.model_dump(), data_id=rocket_id)
30+
await self.update_by_id(
31+
rocket.model_dump(exclude_none=True), data_id=rocket_id
32+
)
3133

3234
@repository_exception_handler
3335
async def delete_rocket_by_id(self, rocket_id: str):

src/services/environment.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import dill
44

55
from rocketpy.environment.environment import Environment as RocketPyEnvironment
6-
from rocketpy.utilities import get_instance_attributes
76
from src.models.environment import EnvironmentModel
87
from src.views.environment import EnvironmentSimulation
8+
from src.utils import rocketpy_encoder, DiscretizeConfig
99

1010

1111
class EnvironmentService:
@@ -54,7 +54,9 @@ def get_environment_simulation(self) -> EnvironmentSimulation:
5454
EnvironmentSimulation
5555
"""
5656

57-
attributes = get_instance_attributes(self.environment)
57+
attributes = rocketpy_encoder(
58+
self.environment, DiscretizeConfig.for_environment()
59+
)
5860
env_simulation = EnvironmentSimulation(**attributes)
5961
return env_simulation
6062

src/services/flight.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
import dill
44

55
from rocketpy.simulation.flight import Flight as RocketPyFlight
6-
from rocketpy.utilities import get_instance_attributes
76

87
from src.services.environment import EnvironmentService
98
from src.services.rocket import RocketService
109
from src.models.flight import FlightModel
1110
from src.views.flight import FlightSimulation
11+
from src.utils import rocketpy_encoder, DiscretizeConfig
1212

1313

1414
class FlightService:
@@ -55,7 +55,9 @@ def get_flight_simulation(self) -> FlightSimulation:
5555
Returns:
5656
FlightSimulation
5757
"""
58-
attributes = get_instance_attributes(self.flight)
58+
attributes = rocketpy_encoder(
59+
self.flight, DiscretizeConfig.for_flight()
60+
)
5961
flight_simulation = FlightSimulation(**attributes)
6062
return flight_simulation
6163

src/services/motor.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from rocketpy.motors.solid_motor import SolidMotor
77
from rocketpy.motors.liquid_motor import LiquidMotor
88
from rocketpy.motors.hybrid_motor import HybridMotor
9-
from rocketpy.utilities import get_instance_attributes
109
from rocketpy import (
1110
LevelBasedTank,
1211
MassBasedTank,
@@ -18,6 +17,7 @@
1817
from src.models.sub.tanks import TankKinds
1918
from src.models.motor import MotorKinds, MotorModel
2019
from src.views.motor import MotorSimulation
20+
from src.utils import rocketpy_encoder, DiscretizeConfig
2121

2222

2323
class MotorService:
@@ -140,7 +140,7 @@ def get_motor_simulation(self) -> MotorSimulation:
140140
Returns:
141141
MotorSimulation
142142
"""
143-
attributes = get_instance_attributes(self.motor)
143+
attributes = rocketpy_encoder(self.motor, DiscretizeConfig.for_motor())
144144
motor_simulation = MotorSimulation(**attributes)
145145
return motor_simulation
146146

src/services/rocket.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111
Fins as RocketPyFins,
1212
Tail as RocketPyTail,
1313
)
14-
from rocketpy.utilities import get_instance_attributes
1514

1615
from src import logger
1716
from src.models.rocket import RocketModel, Parachute
1817
from src.models.sub.aerosurfaces import NoseCone, Tail, Fins
1918
from src.services.motor import MotorService
2019
from src.views.rocket import RocketSimulation
20+
from src.utils import rocketpy_encoder, DiscretizeConfig
2121

2222

2323
class RocketService:
@@ -107,7 +107,9 @@ def get_rocket_simulation(self) -> RocketSimulation:
107107
Returns:
108108
RocketSimulation
109109
"""
110-
attributes = get_instance_attributes(self.rocket)
110+
attributes = rocketpy_encoder(
111+
self.rocket, DiscretizeConfig.for_rocket()
112+
)
111113
rocket_simulation = RocketSimulation(**attributes)
112114
return rocket_simulation
113115

0 commit comments

Comments
 (0)