diff --git a/cernopendata/modules/fixtures/cli.py b/cernopendata/modules/fixtures/cli.py index 97e29ffde5..00fc80a25c 100644 --- a/cernopendata/modules/fixtures/cli.py +++ b/cernopendata/modules/fixtures/cli.py @@ -55,9 +55,8 @@ def get_jsons_from_dir(dir): return res -def create_record(schema, data, files, skip_files): - """Creates a new record.""" - bucket = Bucket.create() +def handle_record_files(data, bucket, files, skip_files): + """Handles record files.""" for file in files: if skip_files: @@ -91,6 +90,11 @@ def create_record(schema, data, files, skip_files): str(e))) continue + +def create_record(schema, data, files, skip_files): + """Creates a new record.""" + bucket = Bucket.create() + handle_record_files(data, bucket, files, skip_files) id = uuid.uuid4() cernopendata_recid_minter(id, data) record = Record.create(data, id_=id) @@ -101,11 +105,22 @@ def create_record(schema, data, files, skip_files): return record -def update_record(pid, schema, data): +def update_record(pid, schema, data, files, skip_files): """Updates the given record.""" record = Record.get_record(pid.object_uuid) record['$schema'] = schema + RecordsBuckets.query.filter_by( + record=record.model, + bucket=record.files.bucket + ).delete() + ObjectVersion.query.delete() + Bucket.query.delete() + FileInstance.query.delete() + bucket = Bucket.create() + handle_record_files(data, bucket, files, skip_files) record.update(data) + RecordsBuckets.create( + record=record.model, bucket=bucket) record.commit() return record @@ -172,7 +187,7 @@ def records(skip_files, files, profile, verbose, mode): try: pid = PersistentIdentifier.get('recid', data['recid']) if pid: - record = update_record(pid, schema, data) + record = update_record(pid, schema, data, files, skip_files) action = 'updated' except PIDDoesNotExistError: record = create_record(schema, data, files, skip_files) @@ -198,7 +213,7 @@ def records(skip_files, files, profile, verbose, mode): 'cannot replace it.'.format( data.get('recid')), err=True) return - record = update_record(pid, schema, data) + record = update_record(pid, schema, data, files, skip_files) action = 'updated' db.session.commit() click.echo(