Skip to content

Commit

Permalink
refactor: get_record_or_draft
Browse files Browse the repository at this point in the history
* get_record_or_draft returns a Draft or Record object

* get_data returns the data dict
  • Loading branch information
utnapischtim committed Jun 7, 2023
1 parent 30fbeb9 commit 7192e53
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 36 deletions.
1 change: 1 addition & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -342,4 +342,5 @@
("py:class", "Draft"),
("py:class", "db.Model"),
("py:class", "Record"),
("py:class", "RecordItem"),
]
40 changes: 14 additions & 26 deletions repository_cli/records.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
from click import STRING, Choice, File, group, option, secho
from flask.cli import with_appcontext
from invenio_db import db
from invenio_pidstore.errors import PIDDoesNotExistError

from .click_options import (
option_data_model,
Expand All @@ -34,6 +33,7 @@
from .utils import (
add_metadata_to_marc21_record,
exists_record,
get_data,
get_draft,
get_identity,
get_metadata_model,
Expand Down Expand Up @@ -195,7 +195,7 @@ def add_metadata_to_records(records: list, data_model: str) -> None:
secho(f"\n'{pid}', trying to update", fg=Color.warning)

try:
old_data = get_record_or_draft(service, pid, identity)
old_data = get_data(service, pid, identity)
except RuntimeError as error:
secho(str(error), fg=Color.error)
continue
Expand Down Expand Up @@ -482,14 +482,10 @@ def delete_file(data_model: str, pid: str, filename: str) -> None:
service = get_records_service(data_model=data_model)

try:
record = service.read(identity=identity, id_=pid)._record
except PIDDoesNotExistError:
try:
record = service.read_draft(identity=identity, id_=pid)._record
except PIDDoesNotExistError as error:
msg = f"Record id '{error.pid_value} ({data_model})' does not exist."
secho(msg, fg=Color.error)
return
record = get_record_or_draft(service, pid, identity)
except RuntimeError as error:
secho(error.msg, fg=Color.error)
return

files = record.files
obj = None
Expand Down Expand Up @@ -529,14 +525,10 @@ def replace_file(
service = get_records_service(data_model=data_model)

try:
record = service.read(identity=identity, id_=pid)._record
except PIDDoesNotExistError:
try:
record = service.read_draft(identity=identity, id_=pid)._record
except PIDDoesNotExistError as error:
msg = f"Record id '{error.pid_value} ({data_model})' does not exist."
secho(msg, fg=Color.error)
return
record = get_record_or_draft(service, pid, identity)
except RuntimeError as error:
secho(error.msg, fg=Color.error)
return

files = record.files
filename = Path(input_file.name).name # Path().name gets the filename only
Expand Down Expand Up @@ -587,14 +579,10 @@ def add_file(
service = get_records_service(data_model=data_model)

try:
record = service.read(identity=identity, id_=pid)._record
except PIDDoesNotExistError:
try:
record = service.read_draft(identity=identity, id_=pid)._record
except PIDDoesNotExistError as error:
msg = f"Record id '{error.pid_value} ({data_model})' does not exist."
secho(msg, fg=Color.error)
return
record = get_record_or_draft(service, pid, identity)
except RuntimeError as error:
secho(error.msg, fg=Color.error)
return

files = record.files
filename = Path(input_file.name).name
Expand Down
31 changes: 21 additions & 10 deletions repository_cli/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@
from invenio_records_marc21 import Marc21Metadata, current_records_marc21
from invenio_records_marc21.records import DraftMetadata as Marc21DraftMetadata
from invenio_records_marc21.records import RecordMetadata as Marc21RecordMetadata
from sqlalchemy.orm.exc import NoResultFound

if TYPE_CHECKING:
from invenio_db import db
from invenio_drafts_resources.records.api import Draft, Record
from invenio_records_resources.services import RecordService

from invenio_records_resources.services.records.results import RecordItem

BELOW_CONTROLFIELD = 10

Expand Down Expand Up @@ -74,21 +75,31 @@ def get_draft(service: RecordService, pid: str, identity: Identity) -> Draft | N
return draft


def get_record_item(service: RecordService, pid: str, identity: Identity) -> RecordItem:
"""Get record item."""
try:
record_item = service.read(id_=pid, identity=identity)
except NoResultFound:
try:
record_item = service.read_draft(id_=pid, identity=identity)
except NoResultFound as exc:
msg = f"Record ({pid}) does not exists"
raise RuntimeError(msg) from exc
return record_item


def get_data(service: RecordService, pid: str, identity: Identity) -> dict:
"""Get data."""
return get_record_item(service, pid, identity).data


def get_record_or_draft(
service: RecordService,
pid: str,
identity: Identity,
) -> Draft | Record:
"""Get record or draft."""
try:
old_data = service.read(id_=pid, identity=identity).data
except Exception as exc:
try:
old_data = service.read_draft(id_=pid, identity=identity).data
except Exception:
msg = f"Record ({pid}) does not exists"
raise RuntimeError(msg) from exc
return old_data
return get_record_item(service, pid, identity)._record


def get_records_service(data_model: str = "rdm") -> RecordService:
Expand Down

0 comments on commit 7192e53

Please sign in to comment.