4
4
from enum import Enum
5
5
from nucleus .constants import (
6
6
CAMERA_PARAMS_KEY ,
7
+ FRAMES_KEY ,
7
8
METADATA_KEY ,
8
9
REFERENCE_ID_KEY ,
9
10
TYPE_KEY ,
@@ -69,7 +70,7 @@ def to_json(self) -> str:
69
70
70
71
@dataclass
71
72
class Frame :
72
- items : Dict [str , SceneDatasetItem ]
73
+ items : Dict [str , SceneDatasetItem ] = {}
73
74
74
75
def __post_init__ (self ):
75
76
for key , value in self .items .items ():
@@ -81,13 +82,20 @@ def __post_init__(self):
81
82
def add_item (self , item : SceneDatasetItem , sensor_name : str ):
82
83
self .items [sensor_name ] = item
83
84
85
+ def to_payload (self ) -> dict :
86
+ return {
87
+ sensor : scene_dataset_item .to_payload ()
88
+ for sensor , scene_dataset_item in self .items .items ()
89
+ }
90
+
84
91
85
92
@dataclass
86
93
class Scene :
87
- frames : List [Frame ]
88
94
reference_id : str
95
+ frames : List [Frame ] = []
89
96
metadata : Optional [dict ] = None
90
97
98
+ # TODO: move validation to scene upload
91
99
def __post_init__ (self ):
92
100
assert isinstance (self .frames , List ), "frames must be a list"
93
101
for frame in self .frames :
@@ -99,6 +107,16 @@ def __post_init__(self):
99
107
self .reference_id , str
100
108
), "reference_id must be a string"
101
109
110
+ def add_frame (self , frame : Frame ):
111
+ self .frames .append (frame )
112
+
113
+ def to_payload (self ) -> dict :
114
+ return {
115
+ REFERENCE_ID_KEY : self .reference_id ,
116
+ FRAMES_KEY : [frame .to_payload () for frame in self .frames ],
117
+ METADATA_KEY : self .metadata ,
118
+ }
119
+
102
120
103
121
@dataclass
104
122
class LidarScene (Scene ):
0 commit comments