2525"""Invenio module that adds GitHub integration to the platform."""
2626
2727import github3
28+ from convert_codemeta import crosswalk
2829from flask import current_app
2930from invenio_db import db
3031from invenio_oauth2server .models import Token as ProviderToken
4142from .errors import RepositoryAccessError
4243from .models import ReleaseStatus , Repository
4344from .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
4547
4648
4749class GitHubAPI (object ):
@@ -406,14 +408,29 @@ def defaults(self):
406408
407409 @cached_property
408410 def extra_metadata (self ):
409- """Get extra metadata for file in repository."""
411+ """Get extra metadata from file in repository."""
410412 return get_extra_metadata (
411413 self .gh .api ,
412414 self .repository ['owner' ]['login' ],
413415 self .repository ['name' ],
414416 self .release ['tag_name' ],
417+ current_app .config ['GITHUB_METADATA_FILE' ]
415418 )
416419
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+
417434 @cached_property
418435 def files (self ):
419436 """Extract files to download from GitHub payload."""
@@ -434,6 +451,7 @@ def metadata(self):
434451 """Return extracted metadata."""
435452 output = dict (self .defaults )
436453 output .update (self .extra_metadata )
454+ output .update (self .codemeta )
437455 return output
438456
439457 @cached_property
0 commit comments