Skip to content

Commit

Permalink
signals: add signal for deletion and upload of files.
Browse files Browse the repository at this point in the history
  • Loading branch information
Glignos authored and kpsherva committed Nov 21, 2019
1 parent 31b6266 commit f309ca0
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 9 deletions.
12 changes: 12 additions & 0 deletions invenio_files_rest/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,15 @@
Sent when a file is downloaded.
"""

file_uploaded = _signals.signal('file-uploaded')
"""File uploaded signal.
Sent when a file is uploaded.
"""

file_deleted = _signals.signal('file-deleted')
"""File deleted signal.
Sent when a file is deleted.
"""
2 changes: 2 additions & 0 deletions invenio_files_rest/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
from sqlalchemy.exc import IntegrityError

from .models import FileInstance, Location, MultipartObject, ObjectVersion
from .signals import file_uploaded
from .utils import obj_or_import_string

logger = get_task_logger(__name__)
Expand Down Expand Up @@ -246,6 +247,7 @@ def merge_multipartobject(upload_id, version_id=None):
progress_callback=progress_updater
)
db.session.commit()
file_uploaded.send(obj)
return str(obj.version_id)
except Exception:
db.session.rollback()
Expand Down
18 changes: 9 additions & 9 deletions invenio_files_rest/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
Part
from .proxies import current_files_rest, current_permission_factory
from .serializer import json_serializer
from .signals import file_downloaded
from .signals import file_deleted, file_downloaded, file_uploaded
from .tasks import merge_multipartobject, remove_file_data

blueprint = Blueprint(
Expand Down Expand Up @@ -585,6 +585,7 @@ def create_object(self, bucket, key):
ObjectVersionTag.create(obj, key, value)

db.session.commit()
file_uploaded.send(obj)
return self.make_response(
data=obj,
context={
Expand Down Expand Up @@ -621,17 +622,16 @@ def delete_object(self, bucket, obj, version_id):
obj.remove()
# Set newest object as head
if obj.is_head:
obj_to_restore = \
ObjectVersion.get_versions(obj.bucket,
obj.key,
desc=True).first()
if obj_to_restore:
obj_to_restore.is_head = True
latest = ObjectVersion.get_versions(obj.bucket,
obj.key,
desc=True).first()
if latest:
latest.is_head = True

if obj.file_id:
remove_file_data.delay(str(obj.file_id))

db.session.commit()
file_deleted.send(obj)
return self.make_response('', 204)

@staticmethod
Expand All @@ -657,7 +657,7 @@ def send_object(bucket, obj, expected_chksum=None,
current_app.logger.warning(
'File checksum mismatch detected.', extra=logger_data)

file_downloaded.send(current_app._get_current_object(), obj=obj)
file_downloaded.send(obj)
return obj.send_file(restricted=restricted,
as_attachment=as_attachment)

Expand Down

0 comments on commit f309ca0

Please sign in to comment.