Skip to content

Commit 0c6c21a

Browse files
committed
metadata: add codemeta
1 parent c86db04 commit 0c6c21a

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

invenio_github/api.py

+20-2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"""Invenio module that adds GitHub integration to the platform."""
2626

2727
import github3
28+
from convert_codemeta import crosswalk
2829
from flask import current_app
2930
from invenio_db import db
3031
from invenio_oauth2server.models import Token as ProviderToken
@@ -41,7 +42,8 @@
4142
from .errors import RepositoryAccessError
4243
from .models import ReleaseStatus, Repository
4344
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
4547

4648

4749
class 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

invenio_github/utils.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,19 +52,19 @@ def parse_timestamp(x):
5252
return dt
5353

5454

55-
def get_extra_metadata(gh, owner, repo_name, ref):
55+
def get_extra_metadata(gh, owner, repo_name, ref, metadata_file):
5656
"""Get the metadata file."""
5757
try:
5858
content = gh.repository(owner, repo_name).file_contents(
59-
path=current_app.config['GITHUB_METADATA_FILE'], ref=ref
59+
path=metadata_file, ref=ref
6060
)
6161
if not content:
6262
# File does not exists in the given ref
6363
return {}
6464
return json.loads(content.decoded.decode('utf-8'))
6565
except ValueError:
6666
raise CustomGitHubMetadataError(
67-
file=current_app.config['GITHUB_METADATA_FILE'])
67+
file=metadata_file)
6868

6969

7070
def get_owner(gh, owner):

setup.py

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
'Flask-Menu>=0.5.0',
7070
'Flask>=1.0.4',
7171
'WTForms-Alchemy>=0.15.0,<0.17',
72+
'convert-codemeta>=0.2.0',
7273
'email-validator>=1.0.5',
7374
'github3.py==1.0.0a4',
7475
'humanize>=0.5.1',

0 commit comments

Comments
 (0)