avantol's picture
feat(app): more examples, better parsing and error handling
cc69c66
"""
This file should contain all relevant data-only information, it should contain minimal to no behavior.
"""
from typing import Dict, List, Optional
from pydantic import BaseModel, Field, model_validator
class Property(BaseModel):
name: Optional[str] = None
type: Optional[str] = None
description: Optional[str] = None
model_config = {"extra": "ignore"}
def upsert_dict(mapping, kvp):
k, v = kvp
mapping[k] = v
return mapping
class DataModel(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
links: Optional[List[str]] = Field(default={})
properties: Optional[Dict[str, Property]] = Field(default={})
model_config = {"extra": "ignore"}
@model_validator(mode="before")
def _normalize_properties(cls, node_content):
props = node_content.get("properties", {})
if not isinstance(props, list):
return node_content
props_to_use = [prop for prop in props if "name" in prop]
prop_items = [Property(**prop) for prop in props_to_use]
prop_dict = {
prop.name: Property(type=prop.type, description=prop.description)
for prop in prop_items
}
return upsert_dict(node_content, ("properties", prop_dict))