@@ -168,36 +168,57 @@ def _read_energyml_json_bytes_as_class(file: bytes, json_version: JSON_VERSION,
168168
169169
170170def read_energyml_json_bytes (
171- file : bytes , json_version : JSON_VERSION , obj_type : Optional [type ] = None
171+ file : Union [ dict , bytes ] , json_version : JSON_VERSION , obj_type : Optional [type ] = None
172172) -> Union [List , Any ]:
173173 """
174174 Read a json file into energyml object. If json_version==JSON_VERSION.XSDATA the instance will be of type :param:`obj_class`.
175175 For json_version==JSON_VERSION.OSDU_OFFICIAL a list of read objects is returned
176176 :param file:
177177 :param json_version:
178- :param obj_type:
178+ :param obj_type: ignored if the json file is a list
179179 :return:
180180 """
181- if obj_type is None :
182- obj_type = get_class_from_content_type (get_class_from_json_dict (file ))
183- if json_version == JSON_VERSION .XSDATA :
181+
182+ if isinstance (file , bytes ):
183+ json_obj = json .loads (file )
184+ else :
185+ json_obj = file
186+
187+ if not isinstance (json_obj , list ):
188+ json_obj = [json_obj ]
189+ else :
190+ obj_type = None
191+
192+ result = []
193+ for obj in json_obj :
184194 try :
185- return _read_energyml_json_bytes_as_class (file , obj_type )
186- except xsdata .exceptions .ParserError as e :
187- logging .error (
188- f"Failed to read file with type { obj_type } : { get_energyml_class_in_related_dev_pkg (obj_type )} "
189- )
190- for obj_type_dev in get_energyml_class_in_related_dev_pkg (obj_type ):
195+ if obj_type is None :
196+ obj_type = get_class_from_content_type (get_class_from_json_dict (obj ))
197+ if json_version == JSON_VERSION .XSDATA :
191198 try :
192- logging .debug (f"Trying with class : { obj_type_dev } " )
193- obj = _read_energyml_json_bytes_as_class (file , obj_type_dev )
194- logging .debug (f" ==> succeed read with { obj_type_dev } " )
195- return obj
196- except Exception :
197- pass
199+ result = result + _read_energyml_json_bytes_as_class (obj , obj_type )
200+ except xsdata .exceptions .ParserError as e :
201+ logging .error (
202+ f"Failed to read file with type { obj_type } : { get_energyml_class_in_related_dev_pkg (obj_type )} "
203+ )
204+ for obj_type_dev in get_energyml_class_in_related_dev_pkg (obj_type ):
205+ try :
206+ logging .debug (f"Trying with class : { obj_type_dev } " )
207+ obj = _read_energyml_json_bytes_as_class (obj , obj_type_dev )
208+ logging .debug (f" ==> succeed read with { obj_type_dev } " )
209+ result = result + obj
210+ except Exception :
211+ pass
212+ raise e
213+ elif json_version == JSON_VERSION .OSDU_OFFICIAL :
214+ result = result + read_json_dict (obj )
215+ except Exception as e :
216+ logging .error (e )
217+ logging .error (obj )
198218 raise e
199- elif json_version == JSON_VERSION .OSDU_OFFICIAL :
200- return read_json_dict (json .loads (file ))
219+ obj_type = None
220+
221+ return result
201222
202223
203224def read_energyml_json_io (
0 commit comments