diff --git a/SlideServer.py b/SlideServer.py index 81b0efa..c1dc9c4 100644 --- a/SlideServer.py +++ b/SlideServer.py @@ -13,6 +13,7 @@ import urllib import flask import flask_cors +from flask import request import openslide from werkzeug.utils import secure_filename import dev_utils @@ -184,7 +185,8 @@ def testRoute(): @app.route("/data/one/", methods=['GET']) def singleSlide(filepath): - res = dev_utils.getMetadata(filepath, app.config['UPLOAD_FOLDER']) + extended = request.args.get('extended') + res = dev_utils.getMetadata(filepath, app.config['UPLOAD_FOLDER'], extended) if (hasattr(res, 'error')): return flask.Response(json.dumps(res), status=500) else: @@ -203,7 +205,8 @@ def singleThumb(filepath): @app.route("/data/many/", methods=['GET']) def multiSlide(filepathlist): - res = dev_utils.getMetadataList(json.loads(filepathlist), app.config['UPLOAD_FOLDER']) + request.args.get('extended') + res = dev_utils.getMetadataList(json.loads(filepathlist), app.config['UPLOAD_FOLDER'], extended) if (hasattr(res, 'error')): return flask.Response(json.dumps(res), status=500) else: diff --git a/dev_utils.py b/dev_utils.py index 22bf71b..bab3719 100644 --- a/dev_utils.py +++ b/dev_utils.py @@ -10,7 +10,7 @@ # given a path, get metadata -def getMetadata(filename, upload_folder): +def getMetadata(filename, upload_folder, extended): # TODO consider restricting filepath metadata = {} filepath = os.path.join(upload_folder, filename) @@ -26,21 +26,24 @@ def getMetadata(filename, upload_folder): print(msg) return msg slideData = slide.properties - metadata['mpp-x'] = slideData.get(openslide.PROPERTY_NAME_MPP_X, None) - metadata['mpp-y'] = slideData.get(openslide.PROPERTY_NAME_MPP_Y, None) - metadata['height'] = slideData.get(openslide.PROPERTY_NAME_BOUNDS_HEIGHT, None) or slideData.get( - "openslide.level[0].height", None) - metadata['width'] = slideData.get(openslide.PROPERTY_NAME_BOUNDS_WIDTH, None) or slideData.get( - "openslide.level[0].width", None) - metadata['vendor'] = slideData.get(openslide.PROPERTY_NAME_VENDOR, None) - metadata['level_count'] = int(slideData.get('level_count', 1)) - metadata['objective'] = float(slideData.get(openslide.PROPERTY_NAME_OBJECTIVE_POWER, 0) or - slideData.get("aperio.AppMag", -1.0)) - metadata['md5sum'] = file_md5(filepath) - metadata['comment'] = slideData.get(openslide.PROPERTY_NAME_COMMENT, None) - metadata['study'] = "" - metadata['specimen'] = "" - return metadata + if extended: + return {k:v for (k,v) in slideData.items()} + else: + metadata['mpp-x'] = slideData.get(openslide.PROPERTY_NAME_MPP_X, None) + metadata['mpp-y'] = slideData.get(openslide.PROPERTY_NAME_MPP_Y, None) + metadata['height'] = slideData.get(openslide.PROPERTY_NAME_BOUNDS_HEIGHT, None) or slideData.get( + "openslide.level[0].height", None) + metadata['width'] = slideData.get(openslide.PROPERTY_NAME_BOUNDS_WIDTH, None) or slideData.get( + "openslide.level[0].width", None) + metadata['vendor'] = slideData.get(openslide.PROPERTY_NAME_VENDOR, None) + metadata['level_count'] = int(slideData.get('level_count', 1)) + metadata['objective'] = float(slideData.get(openslide.PROPERTY_NAME_OBJECTIVE_POWER, 0) or + slideData.get("aperio.AppMag", -1.0)) + metadata['md5sum'] = file_md5(filepath) + metadata['comment'] = slideData.get(openslide.PROPERTY_NAME_COMMENT, None) + metadata['study'] = "" + metadata['specimen'] = "" + return metadata def postslide(img, url): @@ -55,10 +58,10 @@ def postslide(img, url): # given a list of path, get metadata for each -def getMetadataList(filenames, upload_folder): +def getMetadataList(filenames, upload_folder, extended): allData = [] for filename in filenames: - allData.append(getMetadata(filename, upload_folder)) + allData.append(getMetadata(filename, upload_folder, extended)) return allData