1212 Tail as RocketPyTail ,
1313)
1414
15+ from fastapi import HTTPException , status
16+
1517from src import logger
1618from src .models .rocket import RocketModel , Parachute
1719from src .models .sub .aerosurfaces import NoseCone , Tail , Fins
@@ -132,13 +134,20 @@ def get_rocketpy_nose(nose: NoseCone) -> RocketPyNoseCone:
132134 RocketPyNoseCone
133135 """
134136
135- rocketpy_nose = RocketPyNoseCone (
136- name = nose .name ,
137- length = nose .length ,
138- kind = nose .kind ,
139- base_radius = nose .base_radius ,
140- rocket_radius = nose .rocket_radius ,
141- )
137+ try :
138+ rocketpy_nose = RocketPyNoseCone (
139+ name = nose .name ,
140+ length = nose .length ,
141+ kind = nose .kind ,
142+ base_radius = nose .base_radius ,
143+ rocket_radius = nose .rocket_radius ,
144+ )
145+ except ValueError as exc :
146+ raise HTTPException (
147+ status_code = status .HTTP_422_UNPROCESSABLE_ENTITY ,
148+ detail = str (exc ),
149+ ) from exc
150+
142151 rocketpy_nose .position = nose .position
143152 return rocketpy_nose
144153
@@ -159,25 +168,40 @@ def get_rocketpy_finset(fins: Fins, kind: str) -> RocketPyFins:
159168 RocketPyTrapezoidalFins
160169 RocketPyEllipticalFins
161170 """
171+
172+ if fins .rocket_radius is None :
173+ raise HTTPException (
174+ status_code = status .HTTP_422_UNPROCESSABLE_ENTITY ,
175+ detail = "Fin definition missing required field 'rocket_radius'" ,
176+ )
177+
178+ base_kwargs = {
179+ 'n' : fins .n ,
180+ 'name' : fins .name ,
181+ 'root_chord' : fins .root_chord ,
182+ 'span' : fins .span ,
183+ 'rocket_radius' : fins .rocket_radius ,
184+ }
185+
162186 match kind :
163187 case "trapezoidal" :
164- rocketpy_finset = RocketPyTrapezoidalFins (
165- n = fins .n ,
166- name = fins .name ,
167- root_chord = fins .root_chord ,
168- span = fins .span ,
169- ** fins .get_additional_parameters (),
170- )
188+ factory = RocketPyTrapezoidalFins
171189 case "elliptical" :
172- rocketpy_finset = RocketPyEllipticalFins (
173- n = fins .n ,
174- name = fins .name ,
175- root_chord = fins .root_chord ,
176- span = fins .span ,
177- ** fins .get_additional_parameters (),
178- )
190+ factory = RocketPyEllipticalFins
179191 case _:
180192 raise ValueError (f"Invalid fins kind: { kind } " )
193+
194+ try :
195+ rocketpy_finset = factory (
196+ ** base_kwargs ,
197+ ** fins .get_additional_parameters (),
198+ )
199+ except (TypeError , ValueError ) as exc :
200+ raise HTTPException (
201+ status_code = status .HTTP_422_UNPROCESSABLE_ENTITY ,
202+ detail = str (exc ),
203+ ) from exc
204+
181205 rocketpy_finset .position = fins .position
182206 return rocketpy_finset
183207
0 commit comments