11from enum import StrEnum
2- from uuid import uuid4
3- from pydantic import BaseModel
42
53
64class HTTPMethod (StrEnum ):
@@ -19,125 +17,3 @@ class FieldDataType(StrEnum):
1917 DATETIME = "DateTime"
2018 UUID = "UUID"
2119 JSONB = "JSONB"
22-
23-
24- # register a DataTypeInfo with a FieldDataType to make it easier to support types
25- class DataTypeInfo (BaseModel ):
26-
27- sqlalchemy_type : str
28- sqlalchemy_prefix : bool
29- python_type : str
30- faker_field_value : str
31- value : str
32- test_value : str
33- test_func : str = ""
34-
35-
36- class DataTypeInfoRegistry :
37- def __init__ (self ):
38- self ._registry : dict [FieldDataType , DataTypeInfo ] = {}
39-
40- def register (self , field_data_type : FieldDataType , data_type : DataTypeInfo ):
41- if field_data_type in self ._registry :
42- raise ValueError (f"Data type '{ field_data_type } ' is already registered." )
43- self ._registry [field_data_type ] = data_type
44-
45- def get (self , field_data_type : FieldDataType ) -> DataTypeInfo :
46- if field_data_type not in self ._registry :
47- raise ValueError (f"Data type '{ field_data_type } ' not found." )
48- return self ._registry [field_data_type ]
49-
50- def all (self ) -> list [DataTypeInfo ]:
51- return list (self ._registry .values ())
52-
53-
54- registry = DataTypeInfoRegistry ()
55- faker_placeholder = "factory.Faker({placeholder})"
56-
57-
58- registry .register (
59- FieldDataType .STRING ,
60- DataTypeInfo (
61- sqlalchemy_type = "String" ,
62- sqlalchemy_prefix = True ,
63- python_type = "str" ,
64- faker_field_value = faker_placeholder .format (placeholder = '"text"' ),
65- value = "hello" ,
66- test_value = "'world'" ,
67- ),
68- )
69-
70- registry .register (
71- FieldDataType .INTEGER ,
72- DataTypeInfo (
73- sqlalchemy_type = "Integer" ,
74- sqlalchemy_prefix = True ,
75- python_type = "int" ,
76- faker_field_value = faker_placeholder .format (placeholder = '"random_int"' ),
77- value = "1" ,
78- test_value = "2" ,
79- ),
80- )
81-
82- registry .register (
83- FieldDataType .FLOAT ,
84- DataTypeInfo (
85- sqlalchemy_type = "Float" ,
86- sqlalchemy_prefix = True ,
87- python_type = "float" ,
88- faker_field_value = faker_placeholder .format (
89- placeholder = '"pyfloat", positive=True, min_value=0.1, max_value=100'
90- ),
91- value = "1.0" ,
92- test_value = "2.0" ,
93- ),
94- )
95-
96- registry .register (
97- FieldDataType .BOOLEAN ,
98- DataTypeInfo (
99- sqlalchemy_type = "Boolean" ,
100- sqlalchemy_prefix = True ,
101- python_type = "bool" ,
102- faker_field_value = faker_placeholder .format (placeholder = '"boolean"' ),
103- value = "True" ,
104- test_value = "False" ,
105- ),
106- )
107-
108- registry .register (
109- FieldDataType .DATETIME ,
110- DataTypeInfo (
111- sqlalchemy_type = "DateTime(timezone=True)" ,
112- sqlalchemy_prefix = True ,
113- python_type = "datetime" ,
114- faker_field_value = faker_placeholder .format (placeholder = '"date_time"' ),
115- value = "datetime.now(timezone.utc)" ,
116- test_value = "datetime.now(timezone.utc)" ,
117- test_func = ".isoformat()" ,
118- ),
119- )
120-
121- registry .register (
122- FieldDataType .UUID ,
123- DataTypeInfo (
124- sqlalchemy_type = "UUID(as_uuid=True)" ,
125- sqlalchemy_prefix = True ,
126- python_type = "UUID" ,
127- faker_field_value = str (uuid4 ()),
128- value = str (uuid4 ()),
129- test_value = str (uuid4 ()),
130- ),
131- )
132-
133- registry .register (
134- FieldDataType .JSONB ,
135- DataTypeInfo (
136- sqlalchemy_type = "JSONB" ,
137- sqlalchemy_prefix = False ,
138- python_type = "dict[str, Any]" ,
139- faker_field_value = "{}" ,
140- value = "{}" ,
141- test_value = '{"key": "value"}' ,
142- ),
143- )
0 commit comments