Skip to content
Snippets Groups Projects
Commit 79aef893 authored by Vuillaume's avatar Vuillaume
Browse files

Merge branch 'escape_option' into 'master'

Upload repository escape option

See merge request !233
parents 6a6b56fc 768f31d0
No related branches found
No related tags found
1 merge request!233Upload repository escape option
Pipeline #211371 passed
......@@ -4,7 +4,7 @@ import json
from datetime import date
from pathlib import Path
from .zenodo import validate_zenodo_metadata
from .zenodo import add_escape2020_community, add_escape2020_grant, validate_zenodo_metadata
codemeta_creators_fields = ['author', 'creator', 'maintainer', 'contributor']
codemeta_contributors_fields = ['editor', 'producer', 'publisher', 'provider', 'sponsor']
......@@ -279,14 +279,14 @@ class CodeMeta2ZenodoController(object):
Add compulsory information to the .zenodo.json file:
* zenodo community : ESCAPE2020
"""
self.zenodo_data["communities"] = [{"identifier": "escape2020"}]
add_escape2020_community(self.zenodo_data)
def add_escape2020_grant(self):
"""
Add compulsory information to the .zenodo.json file:
* ESCAPE grant ID (zenodo syntax)
"""
self.zenodo_data["grants"] = [{"id": "10.13039/501100000780::824064"}]
add_escape2020_grant(self.zenodo_data)
def write_zenodo(self, zenodo_filename):
"""Write `zenodo_filename` after conversion"""
......
......@@ -33,3 +33,34 @@ def test_zenodo_metadata_fail():
"upload_type": "image",
}
zenodo.validate_zenodo_metadata(meta)
def test_add_escape2020_community():
meta = {"title": "eOSSR unit test"}
zenodo.add_escape2020_community(meta)
assert meta["communities"] == [{"identifier": "escape2020"}]
meta = {"title": "eOSSR unit test", "communities": [{"identifier": "escape2020"}]}
zenodo.add_escape2020_community(meta)
assert meta["communities"] == [{"identifier": "escape2020"}]
meta = {"title": "eOSSR unit test", "communities": [{"identifier": "escape2021"}]}
zenodo.add_escape2020_community(meta)
assert meta["communities"] == [
{"identifier": "escape2021"},
{"identifier": "escape2020"},
]
def test_add_escape2020_grant():
meta = {"title": "eOSSR unit test"}
zenodo.add_escape2020_grant(meta)
assert meta["grants"] == [{"id": "10.13039/501100000780::824064"}]
meta = {"title": "eOSSR unit test", "grants": [{"id": "10.13039/501100000780::824064"}]}
zenodo.add_escape2020_grant(meta)
assert meta["grants"] == [{"id": "10.13039/501100000780::824064"}]
meta = {"title": "eOSSR unit test", "grants": [{"id": "another grant"}]}
zenodo.add_escape2020_grant(meta)
assert meta["grants"] == [{"id": "another grant"}, {"id": "10.13039/501100000780::824064"}]
......@@ -75,7 +75,7 @@ def validate_zenodo_metadata(metadata):
)
if "publication_date" not in metadata:
warnings.warn(f"Missing publication_date in the metadata.")
warnings.warn("Missing publication_date in the metadata.")
else:
try:
date.fromisoformat(metadata["publication_date"])
......@@ -121,3 +121,29 @@ def validate_zenodo_metadata(metadata):
raise ValueError("Missing access_conditions")
return None
def add_escape2020_community(zenodo_metadata):
"""
Add compulsory information to the Zenodo metadata:
* zenodo community : ESCAPE2020
:param zenodo_metadata: Zenodo metadata dictionary
"""
if 'communities' not in zenodo_metadata:
zenodo_metadata['communities'] = [{"identifier": "escape2020"}]
elif all(community['identifier'] != 'escape2020' for community in zenodo_metadata['communities']):
zenodo_metadata['communities'].append({"identifier": "escape2020"})
def add_escape2020_grant(zenodo_metadata):
"""
Add compulsory information to the Zenodo metadata:
* ESCAPE grant ID (zenodo syntax)
:param zenodo_metadata: Zenodo metadata dictionary
"""
if 'grants' not in zenodo_metadata:
zenodo_metadata['grants'] = [{"id": "10.13039/501100000780::824064"}]
elif all(grant['id'] != '10.13039/501100000780::824064' for grant in zenodo_metadata['grants']):
zenodo_metadata['grants'].append({"id": "10.13039/501100000780::824064"})
......@@ -10,6 +10,7 @@ from pathlib import Path
from eossr.api.zenodo import Record, SimilarRecordError, ZenodoAPI
from eossr.metadata.codemeta2zenodo import converter
from eossr.metadata.zenodo import add_escape2020_community, add_escape2020_grant
from eossr.utils import zip_repository
......@@ -22,6 +23,7 @@ def upload(
erase_previous_files=True,
force_new_record=False,
publish=True,
add_escape2020=False,
):
"""
Zip the content of `upload_directory` and upload it into the OSSR.
......@@ -51,6 +53,8 @@ def upload(
:param publish: bool
If true, publish the record. Otherwise, the record is prepared but publication must be done manually. This
is useful to check or discard the record before publication.
:param add_escape2020: bool
If True, adds ESCAPE project metadata: escape2020 community and ESCAPE grant number.
:return: The `record_id` of the record created/uploaded
`ZenodoAPI.upload_dir_content` answer
......@@ -65,14 +69,19 @@ def upload(
print(f"Record metadata based on zenodo file {zenodo.path_zenodo_file}")
with open(path_zenodo_file) as file:
metadata = json.load(file)
elif path_codemeta_file.exists():
print(f"Record metadata based on codemeta file {path_codemeta_file}")
with open(path_codemeta_file) as file:
codemeta = json.load(file)
metadata = converter(codemeta)
metadata = converter(codemeta, add_escape2020=False)
else:
raise FileNotFoundError("No metadata provided")
if add_escape2020:
add_escape2020_community(metadata)
add_escape2020_grant(metadata)
metadata_for_check = {'metadata': deepcopy(metadata), 'id': 1}
metadata_for_check['metadata']['doi'] = 1 # fake doi to create fake record
record = Record(metadata_for_check)
......@@ -170,6 +179,13 @@ def build_argparser():
'Useful for checking the record before publication of for CI purposes.',
)
parser.add_argument(
'--add-escape2020',
action='store_true',
dest='add_escape2020',
help='Add ESCAPE2020 community and grant number to the record.',
)
return parser
......@@ -186,6 +202,7 @@ def main():
record_id=args.record_id,
force_new_record=args.force_new_record,
publish=args.publish,
add_escape2020=args.add_escape2020,
)
......
......@@ -37,7 +37,7 @@ deploy_zenodo:
before_script:
- eossr-check-connection-zenodo --token $ZENODO_TOKEN -p $CI_PROJECT_DIR
script:
- eossr-upload-repository -t $ZENODO_TOKEN -i $CI_PROJECT_DIR --archive-name $CI_PROJECT_NAME.zip [-id $ZENODO_PROJECT_ID]
- eossr-upload-repository --add-escape2020 -t $ZENODO_TOKEN -i $CI_PROJECT_DIR --archive-name $CI_PROJECT_NAME.zip [-id $ZENODO_PROJECT_ID]
only:
- tags
......@@ -55,7 +55,7 @@ deploy_zenodo:
before_script:
- eossr-check-connection-zenodo --token $SANDBOX_ZENODO_TOKEN -p $CI_PROJECT_DIR --sandbox
script:
- eossr-upload-repository -t $SANDBOX_ZENODO_TOKEN --sandbox -i $CI_PROJECT_DIR --archive-name $CI_PROJECT_NAME.zip [-id $SANDBOX_ZENODO_PROJECT_ID]
- eossr-upload-repository --add-escape2020 -t $SANDBOX_ZENODO_TOKEN --sandbox -i $CI_PROJECT_DIR --archive-name $CI_PROJECT_NAME.zip [-id $SANDBOX_ZENODO_PROJECT_ID]
only:
- tags
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment