25
25
"""Invenio module that adds GitHub integration to the platform."""
26
26
27
27
import github3
28
+ from convert_codemeta import crosswalk
28
29
from flask import current_app
29
30
from invenio_db import db
30
31
from invenio_oauth2server .models import Token as ProviderToken
41
42
from .errors import RepositoryAccessError
42
43
from .models import ReleaseStatus , Repository
43
44
from .tasks import sync_hooks
44
- from .utils import get_extra_metadata , iso_utcnow , parse_timestamp , utcnow
45
+ from .utils import get_extra_metadata , iso_utcnow , \
46
+ parse_timestamp , utcnow
45
47
46
48
47
49
class GitHubAPI (object ):
@@ -406,14 +408,29 @@ def defaults(self):
406
408
407
409
@cached_property
408
410
def extra_metadata (self ):
409
- """Get extra metadata for file in repository."""
411
+ """Get extra metadata from file in repository."""
410
412
return get_extra_metadata (
411
413
self .gh .api ,
412
414
self .repository ['owner' ]['login' ],
413
415
self .repository ['name' ],
414
416
self .release ['tag_name' ],
417
+ current_app .config ['GITHUB_METADATA_FILE' ]
415
418
)
416
419
420
+
421
+ @cached_property
422
+ def codemeta (self ):
423
+ """Get extra metadata from codemeta file in repository."""
424
+ metadata = get_extra_metadata (
425
+ self .gh .api ,
426
+ self .repository ['owner' ]['login' ],
427
+ self .repository ['name' ],
428
+ self .release ['tag_name' ],
429
+ 'codemeta.json'
430
+ )
431
+ return crosswalk (metadata , "codemeta" , "Zenodo" )
432
+
433
+
417
434
@cached_property
418
435
def files (self ):
419
436
"""Extract files to download from GitHub payload."""
@@ -434,6 +451,7 @@ def metadata(self):
434
451
"""Return extracted metadata."""
435
452
output = dict (self .defaults )
436
453
output .update (self .extra_metadata )
454
+ output .update (self .codemeta )
437
455
return output
438
456
439
457
@cached_property
0 commit comments