diff --git a/openflexure_microscope/api/v1.py b/openflexure_microscope/api/v1.py index 6366a57b..e49a0d2f 100644 --- a/openflexure_microscope/api/v1.py +++ b/openflexure_microscope/api/v1.py @@ -487,18 +487,42 @@ app.add_url_rule( view_func=CaptureAPI.as_view('capture', microscope=api_microscope)) +class CaptureDownloadRedirectAPI(MicroscopeView): + def get(self, capture_id, filename): + """ + Redirect to download the capture under it's currently set filename. + I.e., `/(capture_id)/download` will + redirect to `/(capture_id)/download/(filename)`. + + Note: This route may be deprecated in the future. Where at all + possible, please include a filename to download as. + + .. :quickref: Capture; Redirect to download + """ + capture_obj = self.microscope.camera.image_from_id(capture_id) + + 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')) + thumbnail = get_bool(request.args.get('thumbnail')) + + return redirect(url_for('capture_download', capture_id=capture_id, filename=capture_obj.filename, as_attachment=as_attachment, thumbnail=thumbnail), code=307) + +# Route for shortcut where no filename is specified +app.add_url_rule( + uri('/capture//download/'), + view_func=CaptureDownloadRedirectAPI.as_view('capture_download_redirect', microscope=api_microscope)) + + class CaptureDownloadAPI(MicroscopeView): def get(self, capture_id, filename): """ Return image data for a capture. - If no (filename) is specified, the request will redirect to download the capture - under it's currently set filename. I.e., `/(capture_id)/download` will - redirect to `/(capture_id)/download/(filename)`. - - If (filename) is specified, the capture data will be returned as an image - file with the requested filename. I.e., `/(capture_id)/download/foo.jpeg` will - download the image as `foo.jpeg`, regardless of the capture's initially set filename. + Return capture data as an image file with the requested filename. + I.e., `/(capture_id)/download/foo.jpeg` will download the image as + `foo.jpeg`, regardless of the capture's initially set filename. .. :quickref: Capture; Download capture file @@ -541,19 +565,9 @@ class CaptureDownloadAPI(MicroscopeView): as_attachment=as_attachment, attachment_filename=filename) -# General download view -download_view = CaptureDownloadAPI.as_view('capture_download', microscope=api_microscope) - -# Full route, including filename app.add_url_rule( uri('/capture//download/'), - view_func=download_view) - -# Route for shortcut where no filename is specified -app.add_url_rule( - uri('/capture//download/'), - defaults={'filename': None}, - view_func=download_view) + view_func=CaptureDownloadAPI.as_view('capture_download', microscope=api_microscope)) if __name__ == "__main__":