Skip to content

Commit 13983bc

Browse files
committed
metadata: add codemeta
1 parent 586cc25 commit 13983bc

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

invenio_github/api.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@
4141
from .errors import RepositoryAccessError
4242
from .models import ReleaseStatus, Repository
4343
from .tasks import sync_hooks
44-
from .utils import get_extra_metadata, iso_utcnow, parse_timestamp, utcnow
44+
from .utils import convert_codemeta, get_extra_metadata, iso_utcnow, \
45+
parse_timestamp, utcnow
4546

4647

4748
class GitHubAPI(object):
@@ -406,14 +407,29 @@ def defaults(self):
406407

407408
@cached_property
408409
def extra_metadata(self):
409-
"""Get extra metadata for file in repository."""
410+
"""Get extra metadata from file in repository."""
410411
return get_extra_metadata(
411412
self.gh.api,
412413
self.repository['owner']['login'],
413414
self.repository['name'],
414415
self.release['tag_name'],
416+
current_app.config['GITHUB_METADATA_FILE']
415417
)
416418

419+
420+
@cached_property
421+
def codemeta(self):
422+
"""Get extra metadata from codemeta file in repository."""
423+
metadata = get_extra_metadata(
424+
self.gh.api,
425+
self.repository['owner']['login'],
426+
self.repository['name'],
427+
self.release['tag_name'],
428+
'codemeta.json'
429+
)
430+
return convert_codemeta(met)
431+
432+
417433
@cached_property
418434
def files(self):
419435
"""Extract files to download from GitHub payload."""
@@ -434,6 +450,7 @@ def metadata(self):
434450
"""Return extracted metadata."""
435451
output = dict(self.defaults)
436452
output.update(self.extra_metadata)
453+
output.update(self.codemeta)
437454
return output
438455

439456
@cached_property

invenio_github/utils.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,29 @@ def parse_timestamp(x):
5050
return dt
5151

5252

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

6767

68+
def convert_codemeta(metadata):
69+
"""Convert codemeta to standard values."""
70+
if 'description' in metadata:
71+
return dict(description=metadata['description'])
72+
else:
73+
return {}
74+
75+
6876
def get_owner(gh, owner):
6977
"""Get owner of repository as a creator."""
7078
try:

0 commit comments

Comments
 (0)