Skip to content

Commit

Permalink
add omero_get_children
Browse files Browse the repository at this point in the history
  • Loading branch information
lldelisle committed Dec 22, 2023
1 parent 5e93a0a commit 5ba56b2
Show file tree
Hide file tree
Showing 3 changed files with 354 additions and 0 deletions.
7 changes: 7 additions & 0 deletions tools/omero_get_children_ids/.shed.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
categories:
- Imaging
description: Get omero id of children of an omero object id
name: omero_get_children_ids
owner: lldelisle
long_description: Uses a python script to get the ids of children of an omero object.
remote_repository_url: https://github.com/lldelisle/tools-lldelisle/tree/master/tools/omero_get_children_ids
80 changes: 80 additions & 0 deletions tools/omero_get_children_ids/omero_get_children_ids.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import argparse
import json

import omero
from omero.gateway import BlitzGateway


def get_omero_credentials(config_file):
if config_file is None: # IDR connection
omero_username = "public"
omero_password = "public"
else: # other omero instance
with open(config_file) as f:
cfg = json.load(f)
omero_username = cfg["username"]
omero_password = cfg["password"]

if omero_username == "" or omero_password == "":
omero_username = "public"
omero_password = "public"
return (omero_username, omero_password)


def recursive_get_children_id(parent_object, final_object_type):
output = []
if parent_object.OMERO_CLASS == 'WellSample':
return [parent_object.getImage().id]
for children in parent_object.listChildren():
if children.OMERO_CLASS == final_object_type.title():
output.append(children.id)
else:
# We need to go one step further
output += recursive_get_children_id(children, final_object_type)
return output


def get_children_ids(
parent_object_type,
omero_id,
final_object_type,
omero_username,
omero_password,
omero_host="idr.openmicroscopy.org",
omero_secured=False,
):
## Connect to omero:
with BlitzGateway(
omero_username, omero_password, host=omero_host, secure=omero_secured
) as conn:
# Retrieve omero object
parent_object = conn.getObject(parent_object_type.title(), omero_id)
return recursive_get_children_id(parent_object, final_object_type)


if __name__ == "__main__":
p = argparse.ArgumentParser()
p.add_argument("-oh", "--omero-host", type=str,
default="idr.openmicroscopy.org")
p.add_argument("--omero-secured", action="store_true", default=True)
p.add_argument("-cf", "--config-file", dest="config_file",
default=None)
p.add_argument("--parent-object-type", dest="parent_object_type",
type=str, default=None, required=True)
p.add_argument("--omero-id", dest="omero_id",
type=int, default=None, required=True)
p.add_argument("--final-object-type", dest="final_object_type",
type=str, default=None, required=True)
p.add_argument("--output", type=str, default=None, required=True)
args = p.parse_args()
children_ids = get_children_ids(
args.parent_object_type,
args.omero_id,
args.final_object_type,
*get_omero_credentials(args.config_file),
omero_host=args.omero_host,
omero_secured=args.omero_secured,
)
with open(args.output, 'w') as fo:
fo.write('\n'.join([str(id) for id in children_ids]))
fo.write('\n')
267 changes: 267 additions & 0 deletions tools/omero_get_children_ids/omero_get_children_ids.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,267 @@
<tool id="omero_get_children_ids" name="Omero" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="20.01" license="MIT">
<description>Get children ids</description>
<macros>
<token name="@TOOL_VERSION@">0.1.0</token>
<token name="@VERSION_SUFFIX@">0</token>
</macros>
<requirements>
<requirement type="package" version="5.17.0">omero-py</requirement>
</requirements>
<command detect_errors="exit_code"><![CDATA[
#if $omero_instance_type.omero_instance == "priv":
## the user wants to use a non-public OMERO instance
## check if credentials are set in the user-preferences, if not warn the user and exit
#set $username = $__user__.extra_preferences.get('omero_account|username', "")
#set $password = $__user__.extra_preferences.get('omero_account|password', "")
#if $omero_instance_type.galaxy_test_param != 'true' and ($username == "" or $password ==""):
echo "OMERO connection credentials are empty. Set your credentials via: User -> Preferences -> Manage Information" 1>&2 &&
exit 1 &&
#end if
#end if
python '$__tool_directory__/omero_get_children_ids.py'
#if $omero_instance_type.omero_instance =='priv':
-oh '$omero_instance_type.omero_host'
$omero_instance_type.omero_secured
-cf '$credentials'
#end if
--parent-object-type '$omero_object.parent_object_type'
--omero-id '$omero_object.omero_id'
--final-object-type '$omero_object.final_object_type'
--output '$output'
]]></command>
<configfiles>
<configfile name="credentials"><![CDATA[
#if $omero_instance_type.omero_instance =='priv' and $omero_instance_type.galaxy_test_param == 'true':
## as a test for a private instance we actually use a public instance, but with credentials
#set $username = 'public'
#set $password = 'public'
#else:
#set $username = $__user__.extra_preferences.get('omero_account|username', "")
#set $password = $__user__.extra_preferences.get('omero_account|password', "")
#end if
{
"username": "$username",
"password": "$password"
}
]]></configfile>
</configfiles>
<inputs>
<conditional name="omero_instance_type">
<param name="omero_instance" type="select" label="Which OMERO instance to connect?"
help="By default, the tool will request children ID from IDR. If you
need to connect to your own instance, set your connection username and password from User->Preference->Manage Information" >
<option value="idr">IDR</option>
<option value="priv">other OMERO instance</option>
</param>
<when value="priv">
<param name="omero_host" type="text" label="OMERO host URL">
<validator type="regex" message="Enter a valid host location, for example, your.omero.server">^[a-zA-Z0-9._-]*$</validator>
<validator type="expression" message="No two dots (..) allowed">'..' not in value</validator>
</param>
<param name="omero_secured" type="boolean" label="Secured connection?" checked="true" truevalue="--omero-secured" falsevalue=""
help="Select Yes if your OMERO instance is running with SSL, otherwise select No">
</param>
<param name="galaxy_test_param" type="hidden" value="false" />
</when>
<when value="idr" />
</conditional>
<conditional name="omero_object">
<param name="parent_object_type" type="select" label="Type of parent object">
<option value="well">Well</option>
<option value="plate">Plate</option>
<option value="screen">Screen</option>
<option value="dataset">Dataset</option>
<option value="project">Project</option>
</param>
<when value="well">
<param name="omero_id" type="integer" value="" label="Well ID on omero" />
<param name="final_object_type" type="hidden" value="image"/>
</when>
<when value="plate">
<param name="omero_id" type="integer" value="" label="Plate ID on omero" />
<param name="final_object_type" type="select" label="Type of children object for which you want the id">
<option value="image">All Omero Image Ids</option>
<option value="well">All Omero Well Ids</option>
</param>
</when>
<when value="screen">
<param name="omero_id" type="integer" value="" label="Screen ID on omero" />
<param name="final_object_type" type="select" label="Type of children object for which you want the id">
<option value="image">All Omero Image Ids</option>
<option value="well">All Omero Well Ids</option>
<option value="plate">All Omero Plate Ids</option>
</param>
</when>
<when value="dataset">
<param name="omero_id" type="integer" value="" label="Dataset ID on omero" />
<param name="final_object_type" type="hidden" value="image"/>
</when>
<when value="project">
<param name="omero_id" type="integer" value="" label="Project ID on omero" />
<param name="final_object_type" type="select" label="Type of children object for which you want the id">
<option value="image">All Omero Image Ids</option>
<option value="dataset">All Omero Dataset Ids</option>
</param>
</when>
</conditional>
</inputs>
<outputs>
<data name="output" format="tabular" label="All ${omero_object.final_object_type} from ${omero_object.parent_object_type} ID ${omero_object.omero_id}" />
</outputs>
<tests>
<test expect_num_outputs="1">
<conditional name="omero_instance_type">
<param name="omero_instance" value="idr"/>
</conditional>
<conditional name="omero_object">
<param name="parent_object_type" value="well"/>
<param name="omero_id" value="2184933"/>
<param name="final_object_type" value="image"/>
</conditional>
<output name="output">
<assert_contents>
<has_line line="14263182"/>
<has_n_lines n="4"/>
</assert_contents>
</output>
</test>
<test expect_num_outputs="1">
<conditional name="omero_instance_type">
<param name="omero_instance" value="idr"/>
</conditional>
<conditional name="omero_object">
<param name="parent_object_type" value="plate"/>
<param name="omero_id" value="10055"/>
<param name="final_object_type" value="image"/>
</conditional>
<output name="output">
<assert_contents>
<has_line line="14263182"/>
<has_n_lines n="1300"/>
</assert_contents>
</output>
</test>
<test expect_num_outputs="1">
<conditional name="omero_instance_type">
<param name="omero_instance" value="idr"/>
</conditional>
<conditional name="omero_object">
<param name="parent_object_type" value="plate"/>
<param name="omero_id" value="10055"/>
<param name="final_object_type" value="well"/>
</conditional>
<output name="output">
<assert_contents>
<has_line line="2184933"/>
<has_n_lines n="325"/>
</assert_contents>
</output>
</test>
<test expect_num_outputs="1">
<conditional name="omero_instance_type">
<param name="omero_instance" value="idr"/>
</conditional>
<conditional name="omero_object">
<param name="parent_object_type" value="screen"/>
<param name="omero_id" value="3302"/>
<param name="final_object_type" value="image"/>
</conditional>
<output name="output">
<assert_contents>
<has_line line="14263182"/>
<has_n_lines n="9100"/>
</assert_contents>
</output>
</test>
<test expect_num_outputs="1">
<conditional name="omero_instance_type">
<param name="omero_instance" value="idr"/>
</conditional>
<conditional name="omero_object">
<param name="parent_object_type" value="screen"/>
<param name="omero_id" value="3302"/>
<param name="final_object_type" value="plate"/>
</conditional>
<output name="output">
<assert_contents>
<has_line line="10055"/>
<has_n_lines n="7"/>
</assert_contents>
</output>
</test>
<test expect_num_outputs="1">
<conditional name="omero_instance_type">
<param name="omero_instance" value="idr"/>
</conditional>
<conditional name="omero_object">
<param name="parent_object_type" value="screen"/>
<param name="omero_id" value="3302"/>
<param name="final_object_type" value="well"/>
</conditional>
<output name="output">
<assert_contents>
<has_line line="2184933"/>
<has_n_lines n="2275"/>
</assert_contents>
</output>
</test>
<test expect_num_outputs="1">
<conditional name="omero_instance_type">
<param name="omero_instance" value="idr"/>
</conditional>
<conditional name="omero_object">
<param name="parent_object_type" value="dataset"/>
<param name="omero_id" value="18101"/>
<param name="final_object_type" value="image"/>
</conditional>
<output name="output">
<assert_contents>
<has_line line="15148237"/>
<has_n_lines n="199"/>
</assert_contents>
</output>
</test>
<test expect_num_outputs="1">
<conditional name="omero_instance_type">
<param name="omero_instance" value="idr"/>
</conditional>
<conditional name="omero_object">
<param name="parent_object_type" value="project"/>
<param name="omero_id" value="2801"/>
<param name="final_object_type" value="image"/>
</conditional>
<output name="output">
<assert_contents>
<has_line line="15148237"/>
<has_n_lines n="494"/>
</assert_contents>
</output>
</test>
<test expect_num_outputs="1">
<conditional name="omero_instance_type">
<param name="omero_instance" value="idr"/>
</conditional>
<conditional name="omero_object">
<param name="parent_object_type" value="project"/>
<param name="omero_id" value="2801"/>
<param name="final_object_type" value="dataset"/>
</conditional>
<output name="output">
<assert_contents>
<has_line line="18101"/>
<has_n_lines n="2"/>
</assert_contents>
</output>
</test>
</tests>
<help><![CDATA[
.. class:: infomark
**What it does**
This tool will create a file with the list of all children ids of a given omero object.
]]></help>
</tool>

0 comments on commit 5ba56b2

Please sign in to comment.