From ede218ccc31792460d6a4f9b093f72bcb2275ced Mon Sep 17 00:00:00 2001 From: Joel Collins Date: Tue, 20 Nov 2018 12:13:36 +0000 Subject: [PATCH] Implemented API delete method --- openflexure_microscope/api/static/main_v1.js | 24 +++++++++++++++---- .../api/static/style_v1.css | 2 +- openflexure_microscope/api/v1.py | 24 ++++++++++++------- openflexure_microscope/camera/capture.py | 6 +++++ 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/openflexure_microscope/api/static/main_v1.js b/openflexure_microscope/api/static/main_v1.js index 8eda3ea7..af4a1899 100644 --- a/openflexure_microscope/api/static/main_v1.js +++ b/openflexure_microscope/api/static/main_v1.js @@ -44,15 +44,26 @@ window.onload = function() { getCaptures() } +function deleteCapture(capture_id) { + function deleteCaptureCallback(response, status) { + console.log(status); + getCaptures(); + } + var r = confirm("Warning! This will delete all copies of this capture from the Raspberry Pi. Click OK to proceed."); + if (r == true) { + safeRequest("DELETE", baseURI+"/capture/"+capture_id+"/", null, deleteCaptureCallback, false) + } +} + function getCaptures() { function updateCapturesCallback(response, status) { console.log(status); - updateCaptures(response); + updateCaptureList(response); } safeRequest("GET", baseURI+"/capture", null, updateCapturesCallback, false) } -function updateCaptures(response) { +function updateCaptureList(response) { // Clear captures list var capturesNode = document.getElementById("captures"); while (capturesNode.firstChild) { @@ -69,8 +80,13 @@ function updateCaptures(response) {
- ${element.filename}
- View Download Delete JSON + ${element.filename} +
+ + +
+ +
diff --git a/openflexure_microscope/api/static/style_v1.css b/openflexure_microscope/api/static/style_v1.css index a21f7573..90cb3fd4 100644 --- a/openflexure_microscope/api/static/style_v1.css +++ b/openflexure_microscope/api/static/style_v1.css @@ -77,5 +77,5 @@ body { } .capture img { - width: 60px; + width: 80px; } \ No newline at end of file diff --git a/openflexure_microscope/api/v1.py b/openflexure_microscope/api/v1.py index 07a7e2d0..28fc4a2c 100644 --- a/openflexure_microscope/api/v1.py +++ b/openflexure_microscope/api/v1.py @@ -44,6 +44,7 @@ def uri(suffix, base=None): # Create flask app app = Flask(__name__) +app.url_map.strict_slashes = False # Make errors more API friendly @@ -291,9 +292,9 @@ class CaptureListAPI(MicroscopeView): include_unavailable = get_bool(request.args.get('include_unavailable')) if include_unavailable: - captures = [image.metadata for image in self.microscope.camera.images if image.metadata['available']] - else: captures = [image.metadata for image in self.microscope.camera.images] + else: + captures = [image.metadata for image in self.microscope.camera.images if image.metadata['available']] return jsonify(captures) @@ -462,16 +463,23 @@ class CaptureAPI(MicroscopeView): def delete(self, capture_id): """ - Delete a capture (not yet implemented) - - .. :quickref: Capture; Delete capture + Delete all capture data from the Pi, even if `keep_on_disk=true;`. + + .. :quickref: Capture; Delete capture. """ + capture_obj = self.microscope.camera.image_from_id(capture_id) + + if not capture_obj: + return abort(404) # 404 Not Found + + capture_obj.delete() + return jsonify({"return": capture_id}) def put(self, capture_id): """ Modify the metadata of a capture (not yet implemented) - + .. :quickref: Capture; Update capture metadata """ return jsonify({"return": capture_id}) @@ -485,7 +493,7 @@ class CaptureDownloadAPI(MicroscopeView): def get(self, capture_id): """ Return image data for a capture. - + .. :quickref: Capture; Download capture file **Example request**: @@ -505,7 +513,7 @@ class CaptureDownloadAPI(MicroscopeView): print(capture_id) capture_obj = self.microscope.camera.image_from_id(capture_id) - if not capture_obj: + if not capture_obj or not capture_obj.metadata['available']: return abort(404) # 404 Not Found as_attachment = get_bool(request.args.get('as_attachment')) diff --git a/openflexure_microscope/camera/capture.py b/openflexure_microscope/camera/capture.py index f245a60f..c1ced0e6 100644 --- a/openflexure_microscope/camera/capture.py +++ b/openflexure_microscope/camera/capture.py @@ -251,6 +251,12 @@ class StreamObject(object): else: return False + def delete(self): + """Entirely delete all capture data.""" + logging.info("Deleting {}".format(self.id)) + self.delete_stream() + self.delete_file() + def shunt(self): """Demote the StreamObject from being stored in memory.""" if not self.file_exists: # If file doesn't already exist