11from dataclasses import dataclass , field
2- from typing import Any , ClassVar , Dict , List , Optional
2+ from typing import Any , ClassVar , Dict , List , Optional , Union
33
44from openapi_python_client import utils
55
@@ -91,6 +91,16 @@ def transform(self) -> str:
9191 return f"{ self .python_name } .isoformat()"
9292
9393
94+ @dataclass
95+ class FileProperty (Property ):
96+ """ A property used for uploading files """
97+
98+ _type_string : ClassVar [str ] = "File"
99+
100+ def transform (self ) -> str :
101+ return f"{ self .python_name } .to_tuple()"
102+
103+
94104@dataclass
95105class FloatProperty (Property ):
96106 """ A property of type float """
@@ -246,6 +256,23 @@ class DictProperty(Property):
246256}
247257
248258
259+ def _string_based_property (
260+ name : str , required : bool , data : Dict [str , Any ]
261+ ) -> Union [StringProperty , DateProperty , DateTimeProperty , FileProperty ]:
262+ """ Construct a Property from the type "string" """
263+ string_format = data .get ("format" )
264+ if string_format is None :
265+ return StringProperty (name = name , default = data .get ("default" ), required = required , pattern = data .get ("pattern" ))
266+ if string_format == "date-time" :
267+ return DateTimeProperty (name = name , required = required , default = data .get ("default" ))
268+ elif string_format == "date" :
269+ return DateProperty (name = name , required = required , default = data .get ("default" ))
270+ elif string_format == "binary" :
271+ return FileProperty (name = name , required = required , default = data .get ("default" ))
272+ else :
273+ raise ValueError (f'Unsupported string format:{ data ["format" ]} ' )
274+
275+
249276def property_from_dict (name : str , required : bool , data : Dict [str , Any ]) -> Property :
250277 """ Generate a Property from the OpenAPI dictionary representation of it """
251278 if "enum" in data :
@@ -259,14 +286,7 @@ def property_from_dict(name: str, required: bool, data: Dict[str, Any]) -> Prope
259286 if "$ref" in data :
260287 return RefProperty (name = name , required = required , reference = Reference .from_ref (data ["$ref" ]), default = None )
261288 if data ["type" ] == "string" :
262- if "format" in data :
263- if data .get ("format" ) == "date-time" :
264- return DateTimeProperty (name = name , required = required , default = data .get ("default" ))
265- elif data .get ("format" ) == "date" :
266- return DateProperty (name = name , required = required , default = data .get ("default" ))
267- else :
268- raise ValueError (f'Unsupported string format:{ data ["format" ]} ' )
269- return StringProperty (name = name , default = data .get ("default" ), required = required , pattern = data .get ("pattern" ),)
289+ return _string_based_property (name = name , required = required , data = data )
270290 elif data ["type" ] == "number" :
271291 return FloatProperty (name = name , default = data .get ("default" ), required = required )
272292 elif data ["type" ] == "integer" :
0 commit comments