11from typing import Dict , List , Union
22
3- from mindee .error .mindee_error import MindeeAPIV2Error
3+ from mindee .error .mindee_error import MindeeApiV2Error
44from mindee .parsing .common .string_dict import StringDict
55
66
@@ -14,7 +14,9 @@ def __init__(self, indent_level=0) -> None:
1414 self ._indent_level = indent_level
1515
1616 @staticmethod
17- def create_field (raw_response : StringDict , indent_level : int = 0 ) -> "BaseField" :
17+ def create_field (
18+ raw_response : StringDict , indent_level : int = 0
19+ ) -> Union ["ListField" , "ObjectField" , "SimpleField" ]:
1820 """Factory function to create appropriate field instances."""
1921 if isinstance (raw_response , dict ):
2022 if "items" in raw_response :
@@ -23,14 +25,14 @@ def create_field(raw_response: StringDict, indent_level: int = 0) -> "BaseField"
2325 return ObjectField (raw_response , indent_level )
2426 if "value" in raw_response :
2527 return SimpleField (raw_response , indent_level )
26- raise MindeeAPIV2Error ( "Unrecognized field format." )
27- raise MindeeAPIV2Error ( "Unrecognized field format." )
28+ raise MindeeApiV2Error ( f "Unrecognized field format in { raw_response } ." )
29+ raise MindeeApiV2Error ( f "Unrecognized field format { raw_response } ." )
2830
2931
3032class ListField (BaseField ):
3133 """List field containing multiple fields."""
3234
33- items : List [BaseField ]
35+ items : List [Union [ "ListField" , "ObjectField" , "SimpleField" ] ]
3436 """Items contained in the list."""
3537
3638 def __init__ (self , raw_response : StringDict , indent_level : int = 0 ):
@@ -40,23 +42,26 @@ def __init__(self, raw_response: StringDict, indent_level: int = 0):
4042 for item in raw_response ["items" ]:
4143 if isinstance (item , dict ):
4244 self .items .append (BaseField .create_field (item , 1 ))
43- raise MindeeAPIV2Error ("Unrecognized field format." )
45+ else :
46+ raise MindeeApiV2Error (f"Unrecognized field format '{ item } '." )
4447
4548
4649class ObjectField (BaseField ):
4750 """Object field containing multiple fields."""
4851
49- fields : Dict [str , BaseField ]
52+ fields : Dict [str , Union [ ListField , "ObjectField" , "SimpleField" ] ]
5053 """Fields contained in the object."""
5154
5255 def __init__ (self , raw_response : StringDict , indent_level : int = 0 ):
5356 super ().__init__ (indent_level )
54- fields : Dict [str , BaseField ] = {}
55- for field_key , field_value in raw_response .items ():
57+ inner_fields = raw_response .get ("fields" , raw_response )
58+
59+ self .fields : Dict [str , Union ["ListField" , "ObjectField" , "SimpleField" ]] = {}
60+ for field_key , field_value in inner_fields .items ():
5661 if isinstance (field_value , dict ):
57- fields [field_key ] = BaseField .create_field (field_value , 1 )
62+ self . fields [field_key ] = BaseField .create_field (field_value , 1 )
5863 else :
59- raise MindeeAPIV2Error ( "Unrecognized field format." )
64+ raise MindeeApiV2Error ( f "Unrecognized field format ' { field_value } ' ." )
6065
6166 def __str__ (self ) -> str :
6267 out_str = ""
@@ -72,7 +77,7 @@ class SimpleField(BaseField):
7277
7378 def __init__ (self , raw_response : StringDict , indent_level : int = 0 ):
7479 super ().__init__ (indent_level )
75- self .value = raw_response ["value" ] if "value" in raw_response else None
80+ self .value = raw_response ["value" ] = raw_response . get ( "value" , None )
7681
7782 def __str__ (self ) -> str :
7883 return f"{ ' ' * self ._indent_level } { self .value } \n "
0 commit comments