11# Standard library imports
22import json
33import os
4- from typing import Dict , Any , List , TypedDict , cast
5-
4+ from typing import Any , TypedDict , cast
65# Third party imports
76import flask
87import opengeode
98import werkzeug
10-
119# Local application imports
1210from opengeodeweb_back import geode_functions , utils_functions
1311from opengeodeweb_microservice .database .data import Data
@@ -30,12 +28,12 @@ class CreatePointRequest(TypedDict):
3028
3129class CreateAOIRequest (TypedDict ):
3230 name : str
33- points : List [Point ]
31+ points : list [Point ]
3432 z : float
3533
3634# Load schema for point creation
3735with open (os .path .join (schemas , "create_point.json" ), "r" ) as file :
38- create_point_json = cast (Dict [str , Any ], json .load (file ))
36+ create_point_json = cast (dict [str , Any ], json .load (file ))
3937
4038@routes .route (
4139 create_point_json ["route" ],
@@ -46,50 +44,33 @@ def create_point() -> flask.Response:
4644 print (f"create_point : { flask .request = } " , flush = True )
4745 utils_functions .validate_request (flask .request , create_point_json )
4846
49- try :
50- # Extract and validate data from request
51- request_data = cast (CreatePointRequest , flask .request .json )
52- name : str = request_data ["name" ]
53- x : float = request_data ["x" ]
54- y : float = request_data ["y" ]
55- z : float = request_data ["z" ]
56-
57- # Create the point set
58- class_ = geode_functions .geode_object_class ("PointSet3D" )
59- point_set = class_ .create ()
60- builder = geode_functions .create_builder ("PointSet3D" , point_set )
61- builder .create_point (opengeode .Point3D ([x , y , z ])) # type: ignore
62- builder .set_name (name )
63-
64- # Save and get info
65- result = save_all_viewables_and_return_info (
66- geode_object = "PointSet3D" ,
67- data = point_set ,
68- )
69-
70- # Vérifier que binary_light_viewable est présent
71- if "binary_light_viewable" not in result :
72- raise ValueError ("binary_light_viewable is missing in the result" )
73-
74- # Prepare response
75- response : Dict [str , Any ] = {
76- "viewable_file_name" : result ["viewable_file_name" ],
77- "id" : result ["id" ],
78- "name" : name ,
79- "native_file_name" : result ["native_file_name" ],
80- "object_type" : result ["object_type" ],
81- "geode_object" : result ["geode_object" ],
82- "binary_light_viewable" : result ["binary_light_viewable" ],
83- }
84-
85- return flask .make_response (response , 200 )
86-
87- except Exception as e :
88- return flask .make_response ({"error" : str (e )}, 500 )
47+ # Extract and validate data from request
48+ request_data = cast (CreatePointRequest , flask .request .json )
49+ name : str = request_data ["name" ]
50+ x : float = request_data ["x" ]
51+ y : float = request_data ["y" ]
52+ z : float = request_data ["z" ]
53+
54+ # Create the point set
55+ class_ = geode_functions .geode_object_class ("PointSet3D" )
56+ point_set = class_ .create ()
57+ builder = geode_functions .create_builder ("PointSet3D" , point_set )
58+ builder .create_point (opengeode .Point3D ([x , y , z ]))
59+ builder .set_name (name )
60+
61+ # Save and get info
62+ result = save_all_viewables_and_return_info (
63+ geode_object = "PointSet3D" ,
64+ data = point_set ,
65+ )
66+ result ["name" ] = name
67+ if "binary_light_viewable" not in result :
68+ raise ValueError ("binary_light_viewable is missing in the result" )
69+ return flask .make_response (result , 200 )
8970
9071# Load schema for AOI creation
9172with open (os .path .join (schemas , "create_aoi.json" ), "r" ) as file :
92- create_aoi_json = cast (Dict [str , Any ], json .load (file ))
73+ create_aoi_json = cast (dict [str , Any ], json .load (file ))
9374
9475@routes .route (
9576 create_aoi_json ["route" ],
@@ -100,55 +81,38 @@ def create_aoi() -> flask.Response:
10081 print (f"create_aoi : { flask .request = } " , flush = True )
10182 utils_functions .validate_request (flask .request , create_aoi_json )
10283
103- try :
104- # Extract and validate data from request
105- request_data = cast (CreateAOIRequest , flask .request .json )
106- name : str = request_data ["name" ]
107- points : List [Point ] = request_data ["points" ]
108- z : float = request_data ["z" ]
109-
110- # Create the edged curve
111- class_ = geode_functions .geode_object_class ("EdgedCurve3D" )
112- edged_curve = class_ .create ()
113- builder = geode_functions .create_builder ("EdgedCurve3D" , edged_curve )
114- builder .set_name (name )
115-
116- # Create vertices first
117- vertex_indices : List [int ] = []
118- for point in points :
119- vertex_id = builder .create_point (opengeode .Point3D ([point ["x" ], point ["y" ], z ])) # type: ignore
120- vertex_indices .append (vertex_id )
121-
122- # Create edges between consecutive vertices and close the loop
123- num_vertices = len (vertex_indices )
124- for i in range (num_vertices ):
125- next_i = (i + 1 ) % num_vertices
126- edge_id = builder .create_edge ()
127- builder .set_edge_vertex (opengeode .EdgeVertex (edge_id , 0 ), vertex_indices [i ]) # type: ignore
128- builder .set_edge_vertex (opengeode .EdgeVertex (edge_id , 1 ), vertex_indices [next_i ]) # type: ignore
129-
130- # Save and get info
131- result = save_all_viewables_and_return_info (
132- geode_object = "EdgedCurve3D" ,
133- data = edged_curve ,
134- )
135-
136- # Vérifier que binary_light_viewable est présent
137- if "binary_light_viewable" not in result :
138- raise ValueError ("binary_light_viewable is missing in the result" )
139-
140- # Prepare response
141- response : Dict [str , Any ] = {
142- "viewable_file_name" : result ["viewable_file_name" ],
143- "id" : result ["id" ],
144- "name" : name ,
145- "native_file_name" : result ["native_file_name" ],
146- "object_type" : result ["object_type" ],
147- "geode_object" : result ["geode_object" ],
148- "binary_light_viewable" : result ["binary_light_viewable" ],
149- }
150-
151- return flask .make_response (response , 200 )
152-
153- except Exception as e :
154- return flask .make_response ({"error" : str (e )}, 500 )
84+ # Extract and validate data from request
85+ request_data = cast (CreateAOIRequest , flask .request .json )
86+ name : str = request_data ["name" ]
87+ points : list [Point ] = request_data ["points" ]
88+ z : float = request_data ["z" ]
89+
90+ # Create the edged curve
91+ class_ = geode_functions .geode_object_class ("EdgedCurve3D" )
92+ edged_curve = class_ .create ()
93+ builder = geode_functions .create_builder ("EdgedCurve3D" , edged_curve )
94+ builder .set_name (name )
95+
96+ # Create vertices first
97+ vertex_indices : list [int ] = []
98+ for point in points :
99+ vertex_id = builder .create_point (opengeode .Point3D ([point ["x" ], point ["y" ], z ]))
100+ vertex_indices .append (vertex_id )
101+
102+ # Create edges between consecutive vertices and close the loop
103+ num_vertices = len (vertex_indices )
104+ for i in range (num_vertices ):
105+ next_i = (i + 1 ) % num_vertices
106+ edge_id = builder .create_edge ()
107+ builder .set_edge_vertex (opengeode .EdgeVertex (edge_id , 0 ), vertex_indices [i ])
108+ builder .set_edge_vertex (opengeode .EdgeVertex (edge_id , 1 ), vertex_indices [next_i ])
109+
110+ # Save and get info
111+ result = save_all_viewables_and_return_info (
112+ geode_object = "EdgedCurve3D" ,
113+ data = edged_curve ,
114+ )
115+ result ["name" ] = name
116+ if "binary_light_viewable" not in result :
117+ raise ValueError ("binary_light_viewable is missing in the result" )
118+ return flask .make_response (result , 200 )
0 commit comments