diff --git a/dandischema/models.py b/dandischema/models.py index 2906acc5..20af6198 100644 --- a/dandischema/models.py +++ b/dandischema/models.py @@ -15,6 +15,7 @@ EmailStr, Field, GetJsonSchemaHandler, + StringConstraints, TypeAdapter, ValidationInfo, field_validator, @@ -652,11 +653,20 @@ def ensure_value(cls, val: Union[Any, List[Any]]) -> Union[Any, List[Any]]: class BaseType(DandiBaseModel): """Base class for enumerated types""" - identifier: Optional[Union[AnyHttpUrl, str]] = Field( + identifier: Optional[ + Annotated[ + Union[ + AnyHttpUrl, + Annotated[ + str, StringConstraints(pattern=r"^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\._]+$") + ], + ], + Field(union_mode="left_to_right"), + ] + ] = Field( None, description="The identifier can be any url or a compact URI, preferably" " supported by identifiers.org.", - pattern=r"^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\._]+$", json_schema_extra={"nskey": "schema"}, ) name: Optional[str] = Field(