33
44# Third party imports
55import opengeode_geosciences as og_gs
6- import opengeode as og
6+ import opengeode as og
77import werkzeug
88import flask
99from typing import Any
1010
1111# Local application imports
12- from .geode_objects import geode_objects ,GeodeType , GeodeObject , to_geode_type
12+ from .geode_objects import geode_objects
13+ from .geode_objects .geode_object import GeodeType , GeodeObject , to_geode_type
1314from . import utils_functions
1415from opengeodeweb_microservice .database .data import Data
1516from opengeodeweb_microservice .database .connection import get_session
1617
18+
1719def data_file_path (data_id : str , filename : str | None ) -> str :
1820 data_folder_path = flask .current_app .config ["DATA_FOLDER_PATH" ]
1921 data_path = os .path .join (data_folder_path , data_id )
@@ -30,7 +32,9 @@ def load_data(data_id: str) -> GeodeObject:
3032 file_absolute_path = data_file_path (data_id , data_entry .native_file_name )
3133 print ("Loading file: " , file_absolute_path )
3234 print ("File exists: " , os .path .exists (file_absolute_path ))
33- return geode_objects [to_geode_type (data_entry .geode_object )].load (file_absolute_path )
35+ return geode_objects [to_geode_type (data_entry .geode_object )].load (
36+ file_absolute_path
37+ )
3438
3539
3640def get_data_info (data_id : str ) -> Data :
@@ -46,6 +50,31 @@ def upload_file_path(filename: str) -> str:
4650 return os .path .abspath (os .path .join (upload_folder , secure_filename ))
4751
4852
53+ def geode_object_output_extensions (
54+ geode_object : GeodeObject ,
55+ ) -> dict [GeodeType , dict [str , bool ]]:
56+ results : dict [GeodeType , dict [str , bool ]] = {}
57+ for mixin_geode_object in geode_objects [geode_object .geode_type ()].__mro__ :
58+ output_extensions_method = getattr (
59+ mixin_geode_object , "output_extensions" , None
60+ )
61+ if output_extensions_method is None :
62+ continue
63+ output_extensions = output_extensions_method .__func__ (mixin_geode_object )
64+ if output_extensions is None :
65+ continue
66+ object_output_extensions : dict [str , bool ] = {}
67+ is_saveable_method = getattr (mixin_geode_object , "is_saveable" )
68+ for output_extension in output_extensions :
69+ bool_is_saveable = is_saveable_method (
70+ geode_object , f"test.{ output_extension } "
71+ )
72+ object_output_extensions [output_extension ] = bool_is_saveable
73+ if hasattr (mixin_geode_object , "geode_type" ):
74+ results [mixin_geode_object .geode_type ()] = object_output_extensions
75+ return results
76+
77+
4978# def assign_crs(geode_type: GeodeType, data, crs_name: str, info):
5079# builder = create_builder(geode_object, data)
5180# geode_objects[geode_type].["crs"]["assign"](data, builder, crs_name, info)
@@ -69,154 +98,56 @@ def upload_file_path(filename: str) -> str:
6998# )
7099
71100
72- def filter_geode_objects (key : str | None = None )-> list [GeodeType ]:
73- filtered_geode_objects = []
74- for geode_object , value in geode_objects .items ():
75- if key != None and key != "" :
76- if key in value :
77- if type (value [key ]) == bool :
78- filtered_geode_objects .append (geode_object )
79- else :
80- filtered_geode_objects .append (geode_object )
81- else :
82- filtered_geode_objects .append (geode_object )
83- filtered_geode_objects .sort ()
84- return filtered_geode_objects
85-
86-
87- def list_input_extensions (key : str | None = None ) -> list [str ]:
88- extensions_list = []
89- for geode_object in filter_geode_objects (key ):
90- extensions_list += geode_object_input_extensions (geode_object )
91- extensions_list = list (set (extensions_list ))
92- extensions_list .sort ()
93- return extensions_list
94-
95-
96- def has_creator (geode_type : GeodeType , extension : str ):
97- return input_factory (geode_object ).has_creator (extension )
98-
99-
100- def list_geode_objects (
101- file_absolute_path : str ,
102- key : str | None = None ,
103- ):
104- return_dict = {}
105- file_extension = utils_functions .extension_from_filename (
106- os .path .basename (file_absolute_path )
107- )
108- geode_objects_filtered_list = filter_geode_objects (key )
109- for geode_object in geode_objects_filtered_list :
110- if has_creator (geode_object , file_extension ):
111- loadability_score = is_loadable (geode_object , file_absolute_path )
112- priority_score = object_priority (geode_object , file_absolute_path )
113- return_dict [geode_object ] = {
114- "is_loadable" : loadability_score ,
115- "object_priority" : priority_score ,
116- }
117- return return_dict
118-
119-
120- def geode_objects_output_extensions (geode_type : GeodeType , data ):
121- geode_objects_output_extensions_dict = {}
122- output_extensions = geode_object_output_extensions (geode_object )
123- extensions_dict = {}
124- for output_extension in output_extensions :
125- bool_is_saveable = is_saveable (geode_object , data , f"test.{ output_extension } " )
126- extensions_dict [output_extension ] = {"is_saveable" : bool_is_saveable }
127- geode_objects_output_extensions_dict [geode_object ] = extensions_dict
128-
129- if "parent" in geode_objects [geode_type ]..keys ():
130- parent_geode_object = geode_objects [geode_type ]. ["parent" ]
131- geode_objects_output_extensions_dict .update (
132- geode_objects_output_extensions (parent_geode_object , data )
133- )
134- return geode_objects_output_extensions_dict
135-
136-
137- def get_inspector_children (obj ):
138- new_object = {}
139-
140- if "inspection_type" in dir (obj ):
141- new_object ["title" ] = obj .inspection_type ()
142- new_object ["nb_issues" ] = 0
143- new_object ["children" ] = []
144- for child in dir (obj ):
145- if not child .startswith ("__" ) and not child in [
146- "inspection_type" ,
147- "string" ,
148- ]:
149- child_instance = obj .__getattribute__ (child )
150- child_object = get_inspector_children (child_instance )
151- new_object ["children" ].append (child_object )
152- new_object ["nb_issues" ] += child_object ["nb_issues" ]
153- else :
154- new_object ["title" ] = obj .description ()
155- nb_issues = obj .nb_issues ()
156- new_object ["nb_issues" ] = nb_issues
157- if nb_issues > 0 :
158- issues = obj .string ().split ("\n " )
159- new_object ["issues" ] = issues
160- return new_object
161-
162-
163- def geographic_coordinate_systems (geode_type : GeodeType ):
164- if is_3D (geode_object ):
165- return og_gs .GeographicCoordinateSystem3D .geographic_coordinate_systems ()
166- else :
167- return og_gs .GeographicCoordinateSystem2D .geographic_coordinate_systems ()
168-
169-
170- def geographic_coordinate_systems_info (geode_type : GeodeType , crs ):
171- if is_3D (geode_object ):
172- return og_gs .GeographicCoordinateSystemInfo3D (
173- crs ["authority" ], crs ["code" ], crs ["name" ]
174- )
175- else :
176- return og_gs .GeographicCoordinateSystemInfo2D (
177- crs ["authority" ], crs ["code" ], crs ["name" ]
178- )
179-
180-
181- def coordinate_system (geode_type : GeodeType , coordinate_system ):
182- return og .CoordinateSystem2D (
183- [
184- og .Vector2D (
185- og .Point2D (
186- [coordinate_system ["origin_x" ], coordinate_system ["origin_y" ]]
187- ),
188- og .Point2D (
189- [coordinate_system ["point_1_x" ], coordinate_system ["point_1_y" ]]
190- ),
191- ),
192- og .Vector2D (
193- og .Point2D (
194- [coordinate_system ["origin_x" ], coordinate_system ["origin_y" ]]
195- ),
196- og .Point2D (
197- [coordinate_system ["point_2_x" ], coordinate_system ["point_2_y" ]]
198- ),
199- ),
200- ],
201- og .Point2D ([coordinate_system ["origin_x" ], coordinate_system ["origin_y" ]]),
202- )
101+ # def geographic_coordinate_systems_info(geode_type: GeodeType, crs):
102+ # if is_3D(geode_object):
103+ # return og_gs.GeographicCoordinateSystemInfo3D(
104+ # crs["authority"], crs["code"], crs["name"]
105+ # )
106+ # else:
107+ # return og_gs.GeographicCoordinateSystemInfo2D(
108+ # crs["authority"], crs["code"], crs["name"]
109+ # )
110+
111+
112+ # def coordinate_system(geode_type: GeodeType, coordinate_system):
113+ # return og.CoordinateSystem2D(
114+ # [
115+ # og.Vector2D(
116+ # og.Point2D(
117+ # [coordinate_system["origin_x"], coordinate_system["origin_y"]]
118+ # ),
119+ # og.Point2D(
120+ # [coordinate_system["point_1_x"], coordinate_system["point_1_y"]]
121+ # ),
122+ # ),
123+ # og.Vector2D(
124+ # og.Point2D(
125+ # [coordinate_system["origin_x"], coordinate_system["origin_y"]]
126+ # ),
127+ # og.Point2D(
128+ # [coordinate_system["point_2_x"], coordinate_system["point_2_y"]]
129+ # ),
130+ # ),
131+ # ],
132+ # og.Point2D([coordinate_system["origin_x"], coordinate_system["origin_y"]]),
133+ # )
203134
204135
205- def assign_geographic_coordinate_system_info (geode_type : GeodeType , data , input_crs ):
206- info = geographic_coordinate_systems_info (geode_object , input_crs )
207- assign_crs (geode_object , data , input_crs ["name" ], info )
136+ # def assign_geographic_coordinate_system_info(geode_type: GeodeType, data, input_crs):
137+ # info = geographic_coordinate_systems_info(geode_object, input_crs)
138+ # assign_crs(geode_object, data, input_crs["name"], info)
208139
209140
210- def convert_geographic_coordinate_system_info (geode_type : GeodeType , data , output_crs ):
211- info = geographic_coordinate_systems_info (geode_object , output_crs )
212- convert_crs (geode_object , data , output_crs ["name" ], info )
141+ # def convert_geographic_coordinate_system_info(geode_type: GeodeType, data, output_crs):
142+ # info = geographic_coordinate_systems_info(geode_object, output_crs)
143+ # convert_crs(geode_object, data, output_crs["name"], info)
213144
214145
215- def create_coordinate_system (
216- geode_type : GeodeType , data , name , input_coordinate_points , output_coordinate_points
217- ):
218- input_coordiante_system = coordinate_system (geode_object , input_coordinate_points )
219- output_coordiante_system = coordinate_system (geode_object , output_coordinate_points )
220- create_crs (
221- geode_object , data , name , input_coordiante_system , output_coordiante_system
222- )
146+ # def create_coordinate_system(
147+ # geode_type: GeodeType, data, name, input_coordinate_points, output_coordinate_points
148+ # ):
149+ # input_coordiante_system = coordinate_system(geode_object, input_coordinate_points)
150+ # output_coordiante_system = coordinate_system(geode_object, output_coordinate_points)
151+ # create_crs(
152+ # geode_object, data, name, input_coordiante_system, output_coordiante_system
153+ # )
0 commit comments