Skip to content

Commit

Permalink
Fix nested sdfThing
Browse files Browse the repository at this point in the history
  • Loading branch information
christiansandberg committed Oct 17, 2024
1 parent 3a8610d commit 395fa07
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 10 deletions.
15 changes: 6 additions & 9 deletions onedm/sdf/definitions.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,11 @@ class Object(CommonQualities):


class Thing(CommonQualities):
things: Things
things: dict[str, Thing] = Field(
default_factory=dict,
alias="sdfThing",
description="Definition of models for complex devices",
)
objects: Objects
properties: Properties
actions: Actions
Expand All @@ -149,11 +153,4 @@ class Thing(CommonQualities):
max_items: NonNegativeInt | None = None


Things = Annotated[
dict[str, Thing],
Field(
default_factory=dict,
alias="sdfThing",
description="Definition of models for complex devices",
),
]
Thing.model_rebuild()
6 changes: 5 additions & 1 deletion onedm/sdf/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,11 @@ class Document(BaseModel):
),
),
] = None
things: definitions.Things
things: dict[str, definitions.Thing] = Field(
default_factory=dict,
alias="sdfThing",
description="Definition of models for complex devices",
)
objects: definitions.Objects
properties: definitions.Properties
actions: definitions.Actions
Expand Down
77 changes: 77 additions & 0 deletions tests/sdf/test_document.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
from onedm import sdf


def test_document_generation():
doc = sdf.Document(
info=sdf.Information(
title="Test title",
),
things={
"MyThing": sdf.Thing(
things={
"MySubThing": sdf.Thing(
objects={
"MyObject": sdf.Object(
properties={
"MyProperty": sdf.ArrayProperty(
items=sdf.AnyData(
ref="#/sdfData/MyEnum",
# Put a temporary definition here
),
definitions={
"MyEnum": sdf.IntegerData(
choices={
"ONE": sdf.IntegerData(
const=1
)
}
)
}
)
}
)
}
)
}
)
}
)

dump = doc.model_dump(mode="json", by_alias=True, exclude_defaults=True)

assert dump == {
"info": {
"title": "Test title"
},
"sdfThing": {
"MyThing": {
"sdfThing": {
"MySubThing": {
"sdfObject": {
"MyObject": {
"sdfProperty": {
"MyProperty": {
"type": "array",
"items": {
"sdfRef": "#/sdfData/MyEnum"
}
}
}
}
}
}
}
}
},
"sdfData": {
"MyEnum": {
"type": "integer",
"sdfChoice": {
"ONE": {
"type": "integer",
"const": 1
}
}
}
}
}

0 comments on commit 395fa07

Please sign in to comment.