@@ -294,12 +294,12 @@ def parse(cls, location):
294294 if not isinstance (e , ast .Str ):
295295 continue
296296 value .append (e .s )
297- if isinstance (statement_v , ast .Str ):
297+ if isinstance (statement_v , ( ast .Str , ast . Constant ) ):
298298 value = statement_v .s
299299 metadata_fields [key_name ] = value
300300
301301 parties = []
302- maintainers = metadata_fields .get ('maintainers' , [])
302+ maintainers = metadata_fields .get ('maintainers' , []) or []
303303 for maintainer in maintainers :
304304 parties .append (
305305 models .Party (
@@ -309,31 +309,70 @@ def parse(cls, location):
309309 )
310310 )
311311
312- # TODO: Create function that determines package type from download URL,
313- # then create a package of that package type from the metadata info
314- yield models .PackageData (
315- datasource_id = cls .datasource_id ,
316- type = metadata_fields .get ('upstream_type' , cls .default_package_type ),
317- name = metadata_fields .get ('name' ),
318- version = metadata_fields .get ('version' ),
319- declared_license = metadata_fields .get ('licenses' , []),
320- parties = parties ,
321- homepage_url = metadata_fields .get ('upstream_address' , '' ),
322- # TODO: Store 'upstream_hash` somewhere
323- )
312+ if (
313+ 'upstream_type'
314+ and 'name'
315+ and 'version'
316+ and 'licenses'
317+ and 'upstream_address'
318+ in metadata_fields
319+ ):
320+ # TODO: Create function that determines package type from download URL,
321+ # then create a package of that package type from the metadata info
322+ yield models .PackageData (
323+ datasource_id = cls .datasource_id ,
324+ type = metadata_fields .get ('upstream_type' , cls .default_package_type ),
325+ name = metadata_fields .get ('name' ),
326+ version = metadata_fields .get ('version' ),
327+ declared_license = metadata_fields .get ('licenses' , []),
328+ parties = parties ,
329+ homepage_url = metadata_fields .get ('upstream_address' , '' ),
330+ # TODO: Store 'upstream_hash` somewhere
331+ )
332+
333+ if (
334+ 'package_type'
335+ and 'name'
336+ and 'version'
337+ and 'license_expression'
338+ and 'homepage_url'
339+ and 'download_url'
340+ and 'vcs_url'
341+ and 'download_archive_sha1'
342+ and 'vcs_commit_hash'
343+ in metadata_fields
344+ ):
345+ yield models .PackageData (
346+ datasource_id = cls .datasource_id ,
347+ type = metadata_fields .get ('package_type' , cls .default_package_type ),
348+ name = metadata_fields .get ('name' ),
349+ version = metadata_fields .get ('version' ),
350+ declared_license = metadata_fields .get ('license_expression' , '' ),
351+ parties = parties ,
352+ homepage_url = metadata_fields .get ('homepage_url' , '' ),
353+ download_url = metadata_fields .get ('download_url' , '' ),
354+ vcs_url = metadata_fields .get ('vcs_url' , '' ),
355+ sha1 = metadata_fields .get ('download_archive_sha1' , '' ),
356+ extra_data = dict (vcs_commit_hash = metadata_fields .get ('vcs_commit_hash' , '' ))
357+ )
324358
325359 @classmethod
326360 def compute_normalized_license (cls , package ):
327- if not package .declared_license :
361+ declared_license = package .declared_license
362+ if not declared_license :
328363 return
329364
330- detected_licenses = []
331- for declared in package .declared_license :
332- detected_license = models .compute_normalized_license (declared )
333- detected_licenses .append (detected_license )
365+ if isinstance (declared_license , (list , tuple ,)):
366+ detected_licenses = [
367+ models .compute_normalized_license (declared )
368+ for declared in declared_license
369+ ]
370+
371+ if detected_licenses :
372+ return combine_expressions (detected_licenses )
334373
335- if detected_licenses :
336- return combine_expressions ( detected_licenses )
374+ if isinstance ( declared_license , str ) :
375+ return models . compute_normalized_license ( declared_license )
337376
338377 @classmethod
339378 def assign_package_to_resources (cls , package , resource , codebase ):
0 commit comments