Created
July 2, 2012 20:55
-
-
Save will-moore/3035653 to your computer and use it in GitHub Desktop.
Search for OMERO Images with key-value pairs in Original Metadata
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# -*- coding: utf-8 -*- | |
# Sript to look for images with key-value pairs in Original Metadata | |
# See https://www.openmicroscopy.org/community/viewtopic.php?f=4&t=1226 | |
import omero | |
import omero.scripts as scripts | |
from omero.gateway import BlitzGateway | |
from omero.rtypes import * | |
def check_image(conn, img, params) : | |
""" | |
Check image metadata for matches | |
@param conn: The BlitzGateway connection | |
@param img: The ImageWrapper object | |
@param params: The script parameters | |
""" | |
key = params["Key"] # Key the user is looking for | |
value = params["Value"] # Value (may end with * wildcard) | |
om = img.loadOriginalMetadata() | |
if om is not None: | |
#global_metadata : om[1] | |
#series_metadata : om[2] | |
for keyValue in (om[1] + om[2]): | |
if len(keyValue) > 1: | |
if keyValue[0] == key: | |
if value[-1] == "*": | |
if keyValue[1].startswith(value): | |
return True | |
else: | |
if keyValue[1] == value: | |
return True | |
def search_images(conn, params): | |
""" | |
Parse each image for metadata | |
@param conn: The BlitzGateway connection | |
@param params: The script parameters | |
""" | |
images = [] | |
all_imgs = conn.getObjects("Image") | |
for img in all_imgs: | |
print "Checking Image: %s ID: %s" % (img.getName(), img.getId()) | |
if check_image(conn, img, params): | |
images.append(img) | |
return images | |
def runAsScript(): | |
""" | |
The main entry point of the script, as called by the client via the | |
scripting service, passing the required parameters. | |
""" | |
client = scripts.client('Search_Orig_Metadata.py', """\ | |
Look for images that have key-value matches in their Original Metadata | |
""", | |
scripts.String("Key", optional=False, grouping="1.1", | |
description="The name of the Metadata value."), | |
scripts.String("Value", optional=False, grouping="1.2", | |
description="Value you're looking for. End with * for wild-card"), | |
) | |
conn = BlitzGateway(client_obj=client) | |
# Process the list of args above. | |
params = {} | |
for key in client.getInputKeys(): | |
if client.getInput(key): | |
params[key] = client.getInput(key, unwrap=True) | |
print params | |
# Call the main script - returns the number of images and total bytes | |
results = search_images(conn, params) | |
msg = "Found %s images" % len(results) | |
print msg | |
client.setOutput("Message", rstring(msg)) | |
if len(results) > 0: | |
client.setOutput("Image", robject(results[0]._obj)) | |
if __name__ == "__main__": | |
""" | |
Python entry point | |
""" | |
runAsScript() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment