@@ -294,12 +294,12 @@ def parse(cls, location):
294
294
if not isinstance (e , ast .Str ):
295
295
continue
296
296
value .append (e .s )
297
- if isinstance (statement_v , ast .Str ):
297
+ if isinstance (statement_v , ( ast .Str , ast . Constant ) ):
298
298
value = statement_v .s
299
299
metadata_fields [key_name ] = value
300
300
301
301
parties = []
302
- maintainers = metadata_fields .get ('maintainers' , [])
302
+ maintainers = metadata_fields .get ('maintainers' , []) or []
303
303
for maintainer in maintainers :
304
304
parties .append (
305
305
models .Party (
@@ -309,31 +309,70 @@ def parse(cls, location):
309
309
)
310
310
)
311
311
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
+ )
324
358
325
359
@classmethod
326
360
def compute_normalized_license (cls , package ):
327
- if not package .declared_license :
361
+ declared_license = package .declared_license
362
+ if not declared_license :
328
363
return
329
364
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 )
334
373
335
- if detected_licenses :
336
- return combine_expressions ( detected_licenses )
374
+ if isinstance ( declared_license , str ) :
375
+ return models . compute_normalized_license ( declared_license )
337
376
338
377
@classmethod
339
378
def assign_package_to_resources (cls , package , resource , codebase ):
0 commit comments