Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion NCISlideUtil.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def openslidedata(metadata):
slide = openslide.OpenSlide(metadata['location'])
slideData = slide.properties
metadata['mpp-x'] = slideData.get(openslide.PROPERTY_NAME_MPP_X, None)
metadata['mpp-x'] = slideData.get(openslide.PROPERTY_NAME_MPP_Y, None)
metadata['mpp-y'] = slideData.get(openslide.PROPERTY_NAME_MPP_Y, None)
metadata['mpp'] = metadata['mpp-x'] or metadata['mpp-x'] or None
metadata['height'] = slideData.get(
openslide.PROPERTY_NAME_BOUNDS_HEIGHT, None)
Expand Down
20 changes: 5 additions & 15 deletions OmniLoad.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import json # for json in and out
import requests # for api and pathdb in and out
import hashlib
import dev_utils

# for large csv fields, especially segmentations
csv.field_size_limit(sys.maxsize)
Expand Down Expand Up @@ -51,21 +52,10 @@ def file_md5(fileName):
def openslidedata(manifest):
for img in manifest:
img['location'] = img.get("path", "") or img.get("location", "") or img.get("filename", "") or img.get("file", "")
slide = openslide.OpenSlide(img['location'])
slideData = slide.properties
img['mpp-x'] = slideData.get(openslide.PROPERTY_NAME_MPP_X, None)
img['mpp-y'] = slideData.get(openslide.PROPERTY_NAME_MPP_Y, None)
img['mpp'] = img['mpp-x'] or img['mpp-y']
img['height'] = slideData.get(openslide.PROPERTY_NAME_BOUNDS_HEIGHT, None) or slideData.get(
"openslide.level[0].height", None)
img['width'] = slideData.get(openslide.PROPERTY_NAME_BOUNDS_WIDTH, None) or slideData.get(
"openslide.level[0].width", None)
img['vendor'] = slideData.get(openslide.PROPERTY_NAME_VENDOR, None)
img['level_count'] = int(slideData.get('level_count', 1))
img['objective'] = float(slideData.get(openslide.PROPERTY_NAME_OBJECTIVE_POWER, 0) or
slideData.get("aperio.AppMag", -1.0))
img['md5sum'] = file_md5(img['location'])
img['comment'] = slideData.get(openslide.PROPERTY_NAME_COMMENT, None)
metadata = dev_utils.getMetadata(img['location'], False, True)
for k, v in metadata.items():
if k not in img:
img[k] = v
# required values which are often unused
img['study'] = img.get('study', "")
img['specimen'] = img.get('specimen', "")
Expand Down
11 changes: 6 additions & 5 deletions SlideServer.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
import string
import sys
import pyvips
from os import listdir
from os.path import isfile, join
import os
from spritemaker import createSpritesheet
from PIL import Image
import urllib
Expand Down Expand Up @@ -203,7 +202,7 @@ def testRoute():
@app.route("/data/one/<filepath>", methods=['GET'])
def singleSlide(filepath):
extended = request.args.get('extended')
res = dev_utils.getMetadata(filepath, app.config['UPLOAD_FOLDER'], extended)
res = dev_utils.getMetadata(os.path.join(app.config['UPLOAD_FOLDER'], filepath), extended, False)
if (hasattr(res, 'error')):
return flask.Response(json.dumps(res), status=500)
else:
Expand All @@ -223,8 +222,10 @@ def singleThumb(filepath):

@app.route("/data/many/<filepathlist>", methods=['GET'])
def multiSlide(filepathlist):
request.args.get('extended')
res = dev_utils.getMetadataList(json.loads(filepathlist), app.config['UPLOAD_FOLDER'], extended)
extended = request.args.get('extended')
filenames = json.loads(filepathlist)
paths = [os.path.join(app.config['UPLOAD_FOLDER'], filename) for filename in filenames]
res = dev_utils.getMetadataList(paths, extended, False)
if (hasattr(res, 'error')):
return flask.Response(json.dumps(res), status=500)
else:
Expand Down
20 changes: 6 additions & 14 deletions SlideUtil.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import openslide

from dev_utils import file_md5
from dev_utils import getMetadata
from dev_utils import postslide
from dev_utils import post_url

Expand Down Expand Up @@ -34,22 +34,14 @@ def gen_thumbnail(filename, slide, size, imgtype="png"):


def openslidedata(metadata):
slide = openslide.OpenSlide(metadata['location'])
slideData = slide.properties
metadata['mpp-x'] = slideData.get(openslide.PROPERTY_NAME_MPP_X, None)
metadata['mpp-x'] = slideData.get(openslide.PROPERTY_NAME_MPP_Y, None)
metadata['mpp'] = metadata['mpp-x'] or metadata['mpp-x'] or None
# metadata['height'] = slideData.get("openslide.level[0].height", None)
# metadata['width'] = slideData.get("openslide.level[0].width", None)
metadata['height'] = slideData.get(openslide.PROPERTY_NAME_BOUNDS_HEIGHT, None)
metadata['width'] = slideData.get(openslide.PROPERTY_NAME_BOUNDS_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("aperio.AppMag", 0.0))
metadata['md5sum'] = file_md5(metadata['location'])
metadata_retrieved = getMetadata(metadata['location'], False, True)
for k, v in metadata_retrieved.items():
if k not in metadata:
metadata[k] = v
metadata['timestamp'] = time.time()
thumbnail_size = config.get('thumbnail_size', None)
if thumbnail_size:
slide = openslide.OpenSlide(metadata['location'])
gen_thumbnail(metadata['location'], slide, thumbnail_size)
return metadata

Expand Down
11 changes: 7 additions & 4 deletions dev_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,21 @@


# given a path, get metadata
def getMetadata(filename, upload_folder, extended):
def getMetadata(filepath, extended, raise_exception):
# TODO consider restricting filepath
metadata = {}
filepath = os.path.join(upload_folder, filename)
if not os.path.isfile(filepath):
if raise_exception:
raise ValueError("No such file")
msg = {"error": "No such file"}
print(msg)
return msg
metadata['location'] = filepath
try:
slide = openslide.OpenSlide(filepath)
except BaseException as e:
if raise_exception:
raise e
msg = {"type": "Openslide", "error": str(e)}
print(msg)
return msg
Expand Down Expand Up @@ -60,10 +63,10 @@ def postslide(img, url, token=''):


# given a list of path, get metadata for each
def getMetadataList(filenames, upload_folder, extended):
def getMetadataList(filenames, extended, raise_exception):
allData = []
for filename in filenames:
allData.append(getMetadata(filename, upload_folder, extended))
allData.append(getMetadata(filename, extended, raise_exception))
return allData


Expand Down