18
18
# Copyright (c) OWASP Foundation. All Rights Reserved.
19
19
20
20
from abc import ABC , abstractmethod
21
- from typing import Any , Iterable , Optional , Set
21
+ from typing import Any , Iterable , List , Optional , Set
22
22
23
23
import serializable
24
24
from sortedcontainers import SortedSet
29
29
from .bom_ref import BomRef
30
30
31
31
32
+ class DependencyDependencies (serializable .BaseHelper ): # type: ignore
33
+
34
+ @classmethod
35
+ def serialize (cls , o : object ) -> List [str ]:
36
+ if isinstance (o , SortedSet ):
37
+ return list (map (lambda i : str (i .ref ), o ))
38
+
39
+ raise ValueError (f'Attempt to serialize a non-Dependency: { o .__class__ } ' )
40
+
41
+ @classmethod
42
+ def deserialize (cls , o : object ) -> Set ["Dependency" ]:
43
+ dependencies : Set ["Dependency" ] = set ()
44
+ if isinstance (o , list ):
45
+ for v in o :
46
+ dependencies .add (Dependency (ref = BomRef (value = v )))
47
+ return dependencies
48
+
49
+
32
50
@serializable .serializable_class
33
51
class Dependency :
34
52
"""
@@ -54,6 +72,7 @@ def ref(self, ref: BomRef) -> None:
54
72
55
73
@property # type: ignore[misc]
56
74
@serializable .json_name ('dependsOn' )
75
+ @serializable .type_mapping (DependencyDependencies )
57
76
@serializable .xml_array (serializable .XmlArraySerializationType .FLAT , 'dependency' )
58
77
def dependencies (self ) -> "SortedSet[Dependency]" :
59
78
return self ._dependencies
0 commit comments