How to create and publish a record
Create a draft with the Records API and publish it with the related Drafts
API.
Build a minimal request
from datetime import date
from invenio_rest_api_client.models import (
Access,
AccessFiles,
AccessRecord,
CreateADraftRecordBody,
Creator,
Files,
Metadata,
PersonOrOrg,
PersonOrOrgType,
ResourceType,
ResourceTypeId,
)
body = CreateADraftRecordBody(
access=Access(
record=AccessRecord.PUBLIC,
files=AccessFiles.PUBLIC,
),
files=Files(enabled=False),
metadata=Metadata(
resource_type=ResourceType(id=ResourceTypeId.DATASET),
title="Climate observations",
publication_date=date.today(),
creators=[
Creator(
person_or_org=PersonOrOrg(
type=PersonOrOrgType.PERSONAL,
given_name="Ada",
family_name="Lovelace",
)
)
],
publisher="Example Repository",
),
)
Create the draft
from invenio_rest_api_client.api.records import create_a_draft_record
draft = create_a_draft_record.sync(client=client, body=body)
if draft is None or draft.id is None:
raise RuntimeError("Invenio did not return the created draft")
Publish it
from invenio_rest_api_client.api.drafts import publish_a_draft_record
published = publish_a_draft_record.sync(
draft.id,
client=client,
)
if published is None:
raise RuntimeError("Invenio did not return the published record")
Keep a draft unpublished
Stop after draft creation when the record needs review, file uploads, DOI reservation, or further metadata changes. Relevant modules include:
api.drafts.update_a_draft_record;api.drafts.reserve_a_doi;api.drafts_files_upload.step_1_start_draft_file_uploads;api.drafts_files_upload.step_2_upload_a_draft_files_content;api.drafts_files_upload.step_3_complete_a_draft_file_upload.
See Record API reference for the complete map.