*** Wartungsfenster jeden ersten Mittwoch vormittag im Monat ***

Skip to content
Snippets Groups Projects
Commit f9e92500 authored by Moser, Maximilian's avatar Moser, Maximilian
Browse files

cli: add commands for verifying the integrity of deposits

parent dc1360dd
Branches
Tags
No related merge requests found
...@@ -317,3 +317,32 @@ def list_files(pid, pid_type, user): ...@@ -317,3 +317,32 @@ def list_files(pid, pid_type, user):
ov = ObjectVersion.get(f["bucket_id"], f["key"], f["version_id"]) ov = ObjectVersion.get(f["bucket_id"], f["key"], f["version_id"])
fi = ov.file fi = ov.file
click.secho("{}\t{}\t{}".format(ov.key, fi.uri, fi.checksum), fg="green") click.secho("{}\t{}\t{}".format(ov.key, fi.uri, fi.checksum), fg="green")
@files.command("verify")
@option_pid_value
@option_pid_type
@option_as_user
@with_appcontext
def verify_files(pid, pid_type, user):
"""Verify the checksums for each of the draft's files."""
recid = convert_to_recid(pid, pid_type)
identity = get_identity_for_user(user)
service = get_record_service()
service.require_permission(identity, "read_files")
draft = service.read_draft(id_=recid, identity=identity)
draft = draft._record if hasattr(draft, "_record") else draft
num_errors = 0
for name, rec_file in draft.files.entries.items():
if rec_file.file.verify_checksum():
click.secho(name, fg="green")
else:
click.secho("{}: failed checksum verification".format(name), fg="red")
num_errors += 1
if num_errors > 0:
click.secho(
"{} files failed the checksum verification".format(num_errors), fg="red"
)
sys.exit(1)
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
"""Management commands for records.""" """Management commands for records."""
import json import json
import sys
import click import click
from flask.cli import with_appcontext from flask.cli import with_appcontext
...@@ -131,7 +132,13 @@ def delete_record(pid, pid_type, user): ...@@ -131,7 +132,13 @@ def delete_record(pid, pid_type, user):
click.secho(recid, fg="red") click.secho(recid, fg="red")
@records.command("files") @records.group()
def files():
"""Manage files deposited with the record."""
pass
@files.command("list")
@option_pid_value @option_pid_value
@option_pid_type @option_pid_type
@option_as_user @option_as_user
...@@ -148,6 +155,35 @@ def list_files(pid, pid_type, user): ...@@ -148,6 +155,35 @@ def list_files(pid, pid_type, user):
click.secho("{}\t{}\t{}".format(ov.key, fi.uri, fi.checksum), fg="green") click.secho("{}\t{}\t{}".format(ov.key, fi.uri, fi.checksum), fg="green")
@files.command("verify")
@option_pid_value
@option_pid_type
@option_as_user
@with_appcontext
def verify_files(pid, pid_type, user):
"""Verify the checksums for each of the record's files."""
recid = convert_to_recid(pid, pid_type)
identity = get_identity_for_user(user)
service = get_record_file_service()
service.require_permission(identity, "read_files")
record = service.read(id_=recid, identity=identity)
record = record._record if hasattr(record, "_record") else record
num_errors = 0
for name, rec_file in record.files.entries.items():
if rec_file.file.verify_checksum():
click.secho(name, fg="green")
else:
click.secho("{}: failed checksum verification".format(name), fg="red")
num_errors += 1
if num_errors > 0:
click.secho(
"{} files failed the checksum verification".format(num_errors), fg="red"
)
sys.exit(1)
@records.command("reindex") @records.command("reindex")
@option_pid_values @option_pid_values
@option_pid_type @option_pid_type
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment