1+ from labelbox .data .annotation_types .classification .classification import VideoClassificationAnswer
12from typing import List , Union
23
34from pydantic .main import BaseModel
@@ -12,27 +13,44 @@ class LBV1ClassificationAnswer(LBV1Feature):
1213 ...
1314
1415
16+ def get_classification_answer (
17+ answer : LBV1ClassificationAnswer
18+ ) -> Union [ClassificationAnswer , VideoClassificationAnswer ]:
19+ kwargs = dict (feature_schema_id = answer .schema_id ,
20+ name = answer .title ,
21+ extra = {
22+ 'feature_id' : answer .feature_id ,
23+ 'value' : answer .value
24+ })
25+ if answer .keyframe is not None :
26+ return VideoClassificationAnswer (keyframe = answer .keyframe , ** kwargs )
27+ else :
28+ return ClassificationAnswer (** kwargs )
29+
30+
31+ def get_lbv1_classification_answer (answer : Union [ClassificationAnswer ,
32+ VideoClassificationAnswer ]):
33+ return LBV1ClassificationAnswer (
34+ schema_id = answer .feature_schema_id ,
35+ title = answer .name ,
36+ value = answer .extra .get ('value' ),
37+ feature_id = answer .extra .get ('feature_id' ),
38+ keyframe = getattr (answer , 'keyframe' ,
39+ None ) # Only applies to video clasifications
40+ )
41+
42+
1543class LBV1Radio (LBV1Feature ):
1644 answer : LBV1ClassificationAnswer
1745
1846 def to_common (self ) -> Radio :
19- return Radio (answer = ClassificationAnswer (
20- feature_schema_id = self .answer .schema_id ,
21- name = self .answer .title ,
22- extra = {
23- 'feature_id' : self .answer .feature_id ,
24- 'value' : self .answer .value
25- }))
47+ return Radio (answer = get_classification_answer (self .answer ))
2648
2749 @classmethod
2850 def from_common (cls , radio : Radio , feature_schema_id : Cuid ,
2951 ** extra ) -> "LBV1Radio" :
3052 return cls (schema_id = feature_schema_id ,
31- answer = LBV1ClassificationAnswer (
32- schema_id = radio .answer .feature_schema_id ,
33- title = radio .answer .name ,
34- value = radio .answer .extra .get ('value' ),
35- feature_id = radio .answer .extra .get ('feature_id' )),
53+ answer = get_lbv1_classification_answer (radio .answer ),
3654 ** extra )
3755
3856
@@ -41,24 +59,15 @@ class LBV1Checklist(LBV1Feature):
4159
4260 def to_common (self ) -> Checklist :
4361 return Checklist (answer = [
44- ClassificationAnswer (feature_schema_id = answer .schema_id ,
45- name = answer .title ,
46- extra = {
47- 'feature_id' : answer .feature_id ,
48- 'value' : answer .value
49- }) for answer in self .answers
62+ get_classification_answer (answer ) for answer in self .answers
5063 ])
5164
5265 @classmethod
5366 def from_common (cls , checklist : Checklist , feature_schema_id : Cuid ,
5467 ** extra ) -> "LBV1Checklist" :
5568 return cls (schema_id = feature_schema_id ,
5669 answers = [
57- LBV1ClassificationAnswer (
58- schema_id = answer .feature_schema_id ,
59- title = answer .name ,
60- value = answer .extra .get ('value' ),
61- feature_id = answer .extra .get ('feature_id' ))
70+ get_lbv1_classification_answer (answer )
6271 for answer in checklist .answer
6372 ],
6473 ** extra )
@@ -69,24 +78,15 @@ class LBV1Dropdown(LBV1Feature):
6978
7079 def to_common (self ) -> Dropdown :
7180 return Dropdown (answer = [
72- ClassificationAnswer (feature_schema_id = answer .schema_id ,
73- name = answer .title ,
74- extra = {
75- 'feature_id' : answer .feature_id ,
76- 'value' : answer .value
77- }) for answer in self .answer
81+ get_classification_answer (answer ) for answer in self .answer
7882 ])
7983
8084 @classmethod
8185 def from_common (cls , dropdown : Dropdown , feature_schema_id : Cuid ,
8286 ** extra ) -> "LBV1Dropdown" :
8387 return cls (schema_id = feature_schema_id ,
8488 answer = [
85- LBV1ClassificationAnswer (
86- schema_id = answer .feature_schema_id ,
87- title = answer .name ,
88- value = answer .extra .get ('value' ),
89- feature_id = answer .extra .get ('feature_id' ))
89+ get_lbv1_classification_answer (answer )
9090 for answer in dropdown .answer
9191 ],
9292 ** extra )
0 commit comments