Skip to content

Commit

Permalink
handle enums when key passed instead of value (#18)
Browse files Browse the repository at this point in the history
  • Loading branch information
gblackadder authored Feb 6, 2025
1 parent 9dc4747 commit a737a1f
Show file tree
Hide file tree
Showing 14 changed files with 249 additions and 36 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# metadata-schemas

[![PyPI version](https://badge.fury.io/py/metadataschemas.svg)](https://badge.fury.io/py/metadataschemas)

This repository contains both the definitions of Metadata Schemas and a python library for creating schema objects with pydantic and Excel.

## Defining Metadata Schemas
Expand Down
6 changes: 2 additions & 4 deletions pydantic_schemas/document_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from __future__ import annotations

from enum import Enum
from .utils.enum_with_value_or_key import EnumWithValueOrKey
from typing import Any, Dict, List, Optional

from pydantic import ConfigDict, Field, PrivateAttr
Expand Down Expand Up @@ -256,7 +256,7 @@ class Discipline(SchemaBaseModel):
uri: Optional[str] = Field(None, description="Website link", title="URI")


class Type(Enum):
class Type(EnumWithValueOrKey):
isPartOf = "isPartOf"
hasPart = "hasPart"
isVersionOf = "isVersionOf"
Expand Down Expand Up @@ -595,11 +595,9 @@ class ScriptSchemaDraft(SchemaBaseModel):
"""
Schema for Document data type
"""

_metadata_type__:str = PrivateAttr("document")
_metadata_type_version__:str = PrivateAttr("0.1.0")


idno: Optional[str] = Field(
None, description="Project unique identifier", title="Project unique identifier"
)
Expand Down
10 changes: 10 additions & 0 deletions pydantic_schemas/generators/generate_pydantic_schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,5 +74,15 @@
updated_content,
)

# replace from enum import Enum with rom .utils.enum_with_value_or_key import EnumWithValueOrKey
updated_content = re.sub(
r"from enum import Enum",
"from .utils.enum_with_value_or_key import EnumWithValueOrKey",
updated_content,
)

# replace (Enum) with (EnumWithValueOrKey)
updated_content = re.sub(r"\(Enum\)", "(EnumWithValueOrKey)", updated_content)

with open(output_path, "w") as file:
file.write(updated_content)
6 changes: 3 additions & 3 deletions pydantic_schemas/geospatial_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from __future__ import annotations

from enum import Enum
from .utils.enum_with_value_or_key import EnumWithValueOrKey
from typing import Any, Dict, List, Optional

from pydantic import ConfigDict, Field, RootModel, confloat, PrivateAttr
Expand Down Expand Up @@ -226,12 +226,12 @@ class Geohash(SchemaBaseModel):
note: Optional[str] = Field(None, title="Note")


class Ring(Enum):
class Ring(EnumWithValueOrKey):
exterior = "exterior"
interior = "interior"


class Type(Enum):
class Type(EnumWithValueOrKey):
Point = "Point"
LineString = "LineString"
Polygon = "Polygon"
Expand Down
12 changes: 6 additions & 6 deletions pydantic_schemas/image_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@

from __future__ import annotations

from enum import Enum
from .utils.enum_with_value_or_key import EnumWithValueOrKey
from typing import Any, Dict, List, Optional

from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field, confloat, PrivateAttr

from .utils.schema_base_model import SchemaBaseModel


class Overwrite(Enum):
class Overwrite(EnumWithValueOrKey):
"""
Overwrite document if already exists?
"""
Expand Down Expand Up @@ -100,7 +100,7 @@ class SubjectCodesLabelledItem(SchemaBaseModel):
)


class Delimitertype(Enum):
class Delimitertype(EnumWithValueOrKey):
spatial = "spatial"
temporal = "temporal"

Expand Down Expand Up @@ -581,7 +581,7 @@ class Rating(SchemaBaseModel):
)


class MeasureType(Enum):
class MeasureType(EnumWithValueOrKey):
"""
How the measures of the rectangle are expressed
"""
Expand Down Expand Up @@ -670,7 +670,7 @@ class TemporalCoverage(SchemaBaseModel):
)


class TimeFormat(Enum):
class TimeFormat(EnumWithValueOrKey):
"""
Identifier of the time format. For time code formats following SMPTE specifications.
"""
Expand Down Expand Up @@ -755,7 +755,7 @@ class Language(SchemaBaseModel):
code: Optional[str] = Field(None, title="Code")


class Type(Enum):
class Type(EnumWithValueOrKey):
isPartOf = "isPartOf"
hasPart = "hasPart"
isVersionOf = "isVersionOf"
Expand Down
16 changes: 8 additions & 8 deletions pydantic_schemas/indicator_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from __future__ import annotations

from enum import Enum
from .utils.enum_with_value_or_key import EnumWithValueOrKey
from typing import Any, Dict, List, Optional, Union

from pydantic import ConfigDict, Field, PrivateAttr
Expand Down Expand Up @@ -604,15 +604,15 @@ class SeriesDescription(SchemaBaseModel):
)


class DataType(Enum):
class DataType(EnumWithValueOrKey):
string = "string"
integer = "integer"
float = "float"
date = "date"
boolean = "boolean"


class ColumnType(Enum):
class ColumnType(EnumWithValueOrKey):
dimension = "dimension"
time_period = "time_period"
measure = "measure"
Expand All @@ -624,7 +624,7 @@ class ColumnType(Enum):
observation_value = "observation_value"


class TimePeriodFormat(Enum):
class TimePeriodFormat(EnumWithValueOrKey):
YYYY = "YYYY"
YYYY_MM = "YYYY-MM"
YYYY_MM_DD = "YYYY-MM-DD"
Expand Down Expand Up @@ -655,7 +655,7 @@ class DataStructureItem(SchemaBaseModel):
)


class Operator(Enum):
class Operator(EnumWithValueOrKey):
field_ = "="
field__ = "!="
field__1 = "<"
Expand Down Expand Up @@ -684,7 +684,7 @@ class Tag(SchemaBaseModel):
tag_group: Optional[str] = Field(None, title="Tag group")


class NameType(Enum):
class NameType(EnumWithValueOrKey):
Personal = "Personal"
Organizational = "Organizational"

Expand All @@ -696,7 +696,7 @@ class Creator(SchemaBaseModel):
familyName: Optional[str] = Field(None, title="Family name")


class TitleType(Enum):
class TitleType(EnumWithValueOrKey):
AlternativeTitle = "AlternativeTitle"
Subtitle = "Subtitle"
TranslatedTitle = "TranslatedTitle"
Expand All @@ -709,7 +709,7 @@ class Title(SchemaBaseModel):
lang: Optional[str] = Field(None, title="Language")


class ResourceTypeGeneral(Enum):
class ResourceTypeGeneral(EnumWithValueOrKey):
Audiovisual = "Audiovisual"
Collection = "Collection"
DataPaper = "DataPaper"
Expand Down
4 changes: 2 additions & 2 deletions pydantic_schemas/indicators_db_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@

from __future__ import annotations

from enum import Enum
from .utils.enum_with_value_or_key import EnumWithValueOrKey
from typing import Any, Dict, List, Optional

from pydantic import ConfigDict, Field, PrivateAttr

from .utils.schema_base_model import SchemaBaseModel


class Overwrite(Enum):
class Overwrite(EnumWithValueOrKey):
"""
Overwrite database if already exists?
"""
Expand Down
10 changes: 5 additions & 5 deletions pydantic_schemas/microdata_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@

from __future__ import annotations

from enum import Enum
from .utils.enum_with_value_or_key import EnumWithValueOrKey
from typing import Any, Dict, List, Optional, Union

from pydantic import ConfigDict, Field, constr, PrivateAttr

from .utils.schema_base_model import SchemaBaseModel


class AccessPolicy(Enum):
class AccessPolicy(EnumWithValueOrKey):
"""
Data access policy for attached microdata resources
"""
Expand All @@ -24,7 +24,7 @@ class AccessPolicy(Enum):
data_na = "data_na"


class Overwrite(Enum):
class Overwrite(EnumWithValueOrKey):
"""
Overwrite survey if already exists?
"""
Expand Down Expand Up @@ -56,7 +56,7 @@ class DatafileSchema(SchemaBaseModel):
notes: Optional[str] = Field(None, title="File notes")


class VarIntrvl(Enum):
class VarIntrvl(EnumWithValueOrKey):
"""
indicates the interval type; options are discrete or continuous.
"""
Expand Down Expand Up @@ -201,7 +201,7 @@ class VariableSchema(SchemaBaseModel):
var_notes: Optional[str] = Field(None, title="Variable notes")


class GroupType(Enum):
class GroupType(EnumWithValueOrKey):
subject = "subject"
section = "section"
multiResp = "multiResp"
Expand Down
4 changes: 2 additions & 2 deletions pydantic_schemas/script_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@

from __future__ import annotations

from enum import Enum
from .utils.enum_with_value_or_key import EnumWithValueOrKey
from typing import Any, Dict, List, Optional

from pydantic import ConfigDict, Field, PrivateAttr

from .utils.schema_base_model import SchemaBaseModel


class Overwrite(Enum):
class Overwrite(EnumWithValueOrKey):
"""
Overwrite document if already exists?
"""
Expand Down
6 changes: 3 additions & 3 deletions pydantic_schemas/table_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@

from __future__ import annotations

from enum import Enum
from .utils.enum_with_value_or_key import EnumWithValueOrKey
from typing import Any, Dict, List, Optional

from pydantic import ConfigDict, Field, RootModel, PrivateAttr

from .utils.schema_base_model import SchemaBaseModel


class Overwrite(Enum):
class Overwrite(EnumWithValueOrKey):
"""
Overwrite document if already exists?
"""
Expand Down Expand Up @@ -309,7 +309,7 @@ class Note(SchemaBaseModel):
note: Optional[str] = Field(None, title="Note")


class Type(Enum):
class Type(EnumWithValueOrKey):
isPartOf = "isPartOf"
hasPart = "hasPart"
isVersionOf = "isVersionOf"
Expand Down
Loading

0 comments on commit a737a1f

Please sign in to comment.