|
6 | 6 | from pydantic import BaseModel as PyDanticBaseModel |
7 | 7 | from pydantic import conlist |
8 | 8 | from pydantic import constr |
9 | | -from pydantic import EmailStr |
10 | 9 | from pydantic import Extra |
11 | 10 | from pydantic import StrictInt |
12 | 11 | from pydantic import StrictFloat |
@@ -46,6 +45,18 @@ def enum_error_handling(self) -> str: |
46 | 45 | StrictNumber = Union[StrictInt, StrictFloat] |
47 | 46 |
|
48 | 47 |
|
| 48 | +class EmailStr(StrictStr): |
| 49 | + @classmethod |
| 50 | + def validate(cls, value: Union[str]) -> Union[str]: |
| 51 | + try: |
| 52 | + constr( |
| 53 | + regex=r"^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$" |
| 54 | + ).validate(value) |
| 55 | + except StrRegexError: |
| 56 | + raise ValueError("Invalid email") |
| 57 | + return value |
| 58 | + |
| 59 | + |
49 | 60 | class BaseModel(PyDanticBaseModel): |
50 | 61 | class Config: |
51 | 62 | extra = Extra.allow |
@@ -121,10 +132,16 @@ class BaseInstance(TrackableModel, TimedBaseModel): |
121 | 132 | class_name: Optional[NotEmptyStr] = Field(None, alias="className") |
122 | 133 |
|
123 | 134 |
|
| 135 | +class BaseInstanceTagAttribute(BaseAttribute): |
| 136 | + name: NotEmptyStr |
| 137 | + group_name: NotEmptyStr = Field(alias="groupName") |
| 138 | + |
| 139 | + |
124 | 140 | class BaseInstanceTag(BaseInstance): |
125 | 141 | type: ClassTypeEnum |
126 | 142 | probability: Optional[StrictInt] = Field(100) |
127 | | - attributes: Optional[List[BaseAttribute]] = Field(list()) |
| 143 | + attributes: Optional[List[BaseInstanceTagAttribute]] = Field(list()) |
| 144 | + class_name: NotEmptyStr = Field(alias="className") |
128 | 145 |
|
129 | 146 |
|
130 | 147 | class BaseMetadata(BaseModel): |
|
0 commit comments