@@ -52,9 +52,11 @@ class Component:
52
52
"""
53
53
_type : ComponentType
54
54
_package_url_type : str
55
+ _namespace : str
55
56
_name : str
56
57
_version : str
57
58
_qualifiers : str
59
+ _subpath : str
58
60
59
61
_author : str = None
60
62
_description : str = None
@@ -93,17 +95,21 @@ def for_file(absolute_file_path: str, path_for_bom: str = None):
93
95
package_url_type = 'generic'
94
96
)
95
97
96
- def __init__ (self , name : str , version : str , qualifiers : str = None , hashes : List [HashType ] = None ,
98
+ def __init__ (self , name : str , version : str , namespace : str = None , qualifiers : str = None , subpath : str = None ,
99
+ hashes : List [HashType ] = None ,
97
100
component_type : ComponentType = ComponentType .LIBRARY , package_url_type : str = 'pypi' ):
101
+ self ._package_url_type = package_url_type
102
+ self ._namespace = namespace
98
103
self ._name = name
99
104
self ._version = version
100
105
self ._type = component_type
101
106
self ._qualifiers = qualifiers
107
+ self ._subpath = subpath
108
+
102
109
self ._hashes .clear ()
103
110
if hashes :
104
111
self ._hashes = hashes
105
112
self ._vulnerabilites .clear ()
106
- self ._package_url_type = package_url_type
107
113
self ._external_references .clear ()
108
114
109
115
def add_external_reference (self , reference : ExternalReference ):
@@ -193,21 +199,36 @@ def get_name(self) -> str:
193
199
"""
194
200
return self ._name
195
201
202
+ def get_namespace (self ) -> str :
203
+ """
204
+ Get the namespace of this Component.
205
+
206
+ Returns:
207
+ Declared namespace of this Component as `str` if declared, else `None`.
208
+ """
209
+ return self ._namespace
210
+
196
211
def get_purl (self ) -> str :
197
212
"""
198
213
Get the PURL for this Component.
199
214
200
215
Returns:
201
- PackageURL that reflects this Component as `str`.
216
+ PackageURL or 'PURL' that reflects this Component as `str`.
202
217
"""
203
- base_purl = 'pkg:{}/{}@{}' .format (self ._package_url_type , self ._name , self ._version )
204
- if self ._qualifiers :
205
- base_purl = '{}?{}' .format (base_purl , self ._qualifiers )
206
- return base_purl
218
+ return self .to_package_url ().to_string ()
207
219
208
220
def get_pypi_url (self ) -> str :
209
221
return f'https://pypi.org/project/{ self .get_name ()} /{ self .get_version ()} '
210
222
223
+ def get_subpath (self ) -> str :
224
+ """
225
+ Get the subpath of this Component.
226
+
227
+ Returns:
228
+ Declared subpath of this Component as `str` if declared, else `None`.
229
+ """
230
+ return self ._subpath
231
+
211
232
def get_type (self ) -> ComponentType :
212
233
"""
213
234
Get the type of this Component.
@@ -292,9 +313,11 @@ def to_package_url(self) -> PackageURL:
292
313
""" ""
293
314
return PackageURL (
294
315
type = self ._package_url_type ,
316
+ namespace = self ._namespace ,
295
317
name = self ._name ,
296
318
version = self ._version ,
297
- qualifiers = self ._qualifiers
319
+ qualifiers = self ._qualifiers ,
320
+ subpath = self ._subpath
298
321
)
299
322
300
323
def __eq__ (self , other ):
0 commit comments