diff --git a/invenio_utilities_tuw/cli/drafts.py b/invenio_utilities_tuw/cli/drafts.py index 014f27d6cdc9184e63e75a551db240a0cb00e89a..dcc616fb563ca9174b832751106e25c63fb166c6 100644 --- a/invenio_utilities_tuw/cli/drafts.py +++ b/invenio_utilities_tuw/cli/drafts.py @@ -32,6 +32,7 @@ from .utils import ( get_identity_for_user, patch_metadata, read_metadata, + set_creatibutor_names, set_record_owners, ) @@ -99,6 +100,7 @@ def create_draft(metadata_path, publish, user, owners, vanity_pid): if owners: metadata = set_record_owners(metadata, owners) + metadata = set_creatibutor_names(metadata) draft = create_record_from_metadata(metadata, identity, vanity_pid=vanity_pid) recid = draft["id"] @@ -112,6 +114,7 @@ def create_draft(metadata_path, publish, user, owners, vanity_pid): if owners: metadata = set_record_owners(metadata, owners) + metadata = set_creatibutor_names(metadata) draft = create_record_from_metadata(metadata, identity) recid = draft["id"] file_names = [] @@ -196,6 +199,7 @@ def update_draft(metadata_file, pid, pid_type, user, patch, owners): owners = [get_identity_for_user(owner) for owner in owners] metadata = set_record_owners(metadata, owners) + metadata = set_creatibutor_names(metadata) service.update_draft(id_=pid, identity=identity, data=metadata) click.secho(pid, fg="green") diff --git a/invenio_utilities_tuw/cli/records.py b/invenio_utilities_tuw/cli/records.py index 319e12d88a6ac445f5e72d4892c6f4e7e6741e7e..ec2ca0cf46bc4770de29b29199b554f21db2237d 100644 --- a/invenio_utilities_tuw/cli/records.py +++ b/invenio_utilities_tuw/cli/records.py @@ -29,6 +29,7 @@ from .utils import ( get_identity_for_user, get_object_uuid, patch_metadata, + set_creatibutor_names, set_record_owners, ) @@ -112,6 +113,7 @@ def update_record(metadata_file, pid, pid_type, user, patch, owners): owners = [get_identity_for_user(owner) for owner in owners] metadata = set_record_owners(metadata, owners) + metadata = set_creatibutor_names(metadata) service.update(id_=pid, identity=identity, data=metadata) click.secho(pid, fg="green") diff --git a/invenio_utilities_tuw/cli/utils.py b/invenio_utilities_tuw/cli/utils.py index 6b8fcef5699f748415d31afe657410e3ddee01c6..a041978f5d04a3c79ef92f5cb6dd59466e4a7e18 100644 --- a/invenio_utilities_tuw/cli/utils.py +++ b/invenio_utilities_tuw/cli/utils.py @@ -133,3 +133,28 @@ def set_record_owners(record_metadata, owners): metadata["access"]["owned_by"] = owners return metadata + + +def _set_creatibutor_name(creatibutor): + """Set the name from the given_name and family_name from the creator/contributor.""" + creatibutor = creatibutor.get("person_or_org", {}) + name = creatibutor.get("name") + + if not name: + given_name = creatibutor.get("given_name") + family_name = creatibutor.get("family_name") + if given_name and family_name: + creatibutor["name"] = "{}, {}".format(family_name, given_name) + + +def set_creatibutor_names(record_metadata): + """Set the name field for each creator and contributor if they're not set.""" + metadata = record_metadata.copy() + + for creator in metadata.get("metadata", {}).get("creators", []): + _set_creatibutor_name(creator) + + for contributor in metadata.get("metadata", {}).get("contributors", []): + _set_creatibutor_name(contributor) + + return metadata