[ome-devel] Plan for transferring data from one OMERO to another
Eilidh Troup
e.troup at epcc.ed.ac.uk
Wed Nov 1 22:00:00 GMT 2017
Hi Will, Josh,
That does work! Thank you very much for your help.
In the gist code, this line:
conn = BlitzGateway(client_obj=client)
should instead be:
conn = BlitzGateway(client_obj=c)
to access remote instead of local.
Cheers,
Eilidh
> On 1 Nov 2017, at 11:54, William Moore (Staff) <W.Moore at dundee.ac.uk <mailto:W.Moore at dundee.ac.uk>> wrote:
>
>
> Hi Eilidh,
>
> I updated my gist at https://gist.github.com/will-moore/90b26a5d39f8084a22dcc8c4af44fa4c <https://gist.github.com/will-moore/90b26a5d39f8084a22dcc8c4af44fa4c>
> with Josh’s fix.
> This also now uses the BlitzGateway to list projects on the remote server.
>
> c = omero.client(host=‘demo.openmicroscopy.org <http://demo.openmicroscopy.org/>', port=4064, args=["--Ice.Config=/dev/null"])
> c.createSession(‘username', ‘password')
> print c
> conn = BlitzGateway(client_obj=client)
> …
>
> Hope that helps,
>
> Will.
>
>
>> On 1 Nov 2017, at 10:53, Josh Moore <josh at glencoesoftware.com <mailto:josh at glencoesoftware.com>> wrote:
>>
>> Hi Eilidh,
>>
>> On Wed, Nov 1, 2017 at 12:36 AM, William Moore (Staff)
>> <W.Moore at dundee.ac.uk <mailto:W.Moore at dundee.ac.uk>> wrote:
>>> Hi Eilidh,
>>>
>>> I created a test python script to illustrate the issue:
>>> https://gist.github.com/will-moore/90b26a5d39f8084a22dcc8c4af44fa4c <https://gist.github.com/will-moore/90b26a5d39f8084a22dcc8c4af44fa4c>
>>>
>>> Hopefully that will help debugging…
>>>
>>> We’ll let you know if we make progress….
>>
>> using Will's gist as a basis, the problem is that scripts are run with
>> a default configuration, pointing to the launching server. In the
>> script itself, line 28 [1] creates the remote connection:
>>
>> c = omero.client(host='%s', port=4064)
>>
>> To see the default configuration that is being passed, use:
>>
>> c = omero.client(host='%s', port=4064, args=["--omero.dump=1"])
>>
>> To _disable_ the default configuration, use:
>>
>> c = omero.client(host='%s', port=4064, args=["--Ice.Config=/dev/null"])
>>
>> All the best,
>> ~Josh
>>
>>
>>
>> [1] https://gist.github.com/will-moore/90b26a5d39f8084a22dcc8c4af44fa4c#file-connect_to_remote_omero-py-L28 <https://gist.github.com/will-moore/90b26a5d39f8084a22dcc8c4af44fa4c#file-connect_to_remote_omero-py-L28>
>>
>>
>>
>>> Cheers,
>>>
>>> Will.
>>>
>>>
>>>
>>> On 31 Oct 2017, at 22:18, William Moore (Staff) <W.Moore at dundee.ac.uk <mailto:W.Moore at dundee.ac.uk>>
>>> wrote:
>>>
>>> Hi Eilidh,
>>>
>>> Yes, I’m afraid the output from conn.connect() is not very helpful.
>>>
>>> You can try the underlying omero.client connection like this:
>>>
>>>>>> c = omero.client(host=‘demo.openmicroscopy.org <http://demo.openmicroscopy.org/>', port=4064)
>>>>>> c.createSession(‘username', ‘password’)
>>>
>>> which should give you an exception if this fails.
>>>
>>> e.g.
>>>
>>> $ omero script launch 87923
>>> Using session 009e7c47-5b59-4156-a664-21bd8d84ea68 (root at localhost:4064).
>>> Idle timeout: 10 min. Current group: system
>>> Enter value for "IDs": 1
>>> Job 89261 ready
>>> Waiting....
>>> Callback received: FINISHED
>>>
>>> *** start stderr (id=89762)***
>>> * Traceback (most recent call last):
>>> * File "./script", line 394, in <module>
>>> * run_script()
>>> * File "./script", line 369, in run_script
>>> * ok = c.createSession('user', ‘password')
>>> * File
>>> "/Users/wmoore/Desktop/OMERO/openmicroscopy/dist/lib/python/omero/clients.py",
>>> line 569, in createSession
>>> * prx = rtr.createSession(username, password, ctx)
>>> * File "/usr/local/lib/python2.7/site-packages/Glacier2_Router_ice.py",
>>> line 258, in createSession
>>> * return _M_Glacier2.Router._op_createSession.invoke(self, ((userId,
>>> password), _ctx))
>>> * Glacier2.PermissionDeniedException: exception
>>> ::Glacier2::PermissionDeniedException
>>> * {
>>> * reason = Password check failed for 'user': []
>>> * }
>>> * !! 10/31/17 21:30:57.788 error: communicator not destroyed during global
>>> destruction.
>>> *** end stderr ***
>>>
>>>
>>> *** out parameters ***
>>> *** done ***
>>>
>>> In fact, I’ve found the same issue as you - Connection to a different server
>>> doesn’t work from within an OMERO.script
>>> but does work locally.
>>> Not sure what is going on here but I’ll ask others on the OME team.
>>>
>>> You shouldn’t be seeing a "ValidationException Can’t find params…” when
>>> you run the script.
>>>
>>> Do you see any errors when uploading the script with $ omero script upload
>>> ?
>>> Or are you simply putting the script into the lib/scripts directory?
>>>
>>> Cheers,
>>>
>>> Will.
>>>
>>>
>>>
>>> On 31 Oct 2017, at 16:15, Eilidh Troup <e.troup at epcc.ed.ac.uk <mailto:e.troup at epcc.ed.ac.uk>> wrote:
>>>
>>> Hi,
>>>
>>> Thank you very much for your thoughtful response to my question on how to
>>> transfer data from one OMERO to another.
>>>
>>> I was able to create a script to take an Image ID as input, along with
>>> username & password of central server, and could list the files belonging to
>>> the image too.
>>>
>>> I got stuck when I tried to create a BlitzGateway connection to central
>>> server. I’m using the demo OMERO server as my remote OMERO.
>>>
>>> This is a short script that reproduces the problem. I can connect to a local
>>> or remote OMERO.server using the following script when I run it as a python
>>> script directly from the command line, but when I run it as an omero script,
>>> it will connect to the local server (itself), but not to the remote server:
>>> remote_conn.connect() returns False. Is there a way to get more information
>>> about why it won’t connect? I’m at a loss as to how to debug this.
>>>
>>> --------------------------------------------------
>>> Connect_to_remote_omero.py
>>>
>>> from omero.gateway import BlitzGateway
>>>
>>> # remote
>>> username = "etroup"
>>> password = “redacted"
>>> host = 'demo.openmicroscopy.org <http://demo.openmicroscopy.org/>'
>>>
>>> # local
>>> # username = "root"
>>> # password = “redacted"
>>> # host = 'localhost'
>>> port = 4064
>>>
>>> # Connect to remote server.
>>> remote_conn = BlitzGateway(username, password, host=host, port=port)
>>> connected = remote_conn.connect() # returns true if connected
>>>
>>> if (connected):
>>> print "connected"
>>> for p in remote_conn.listProjects():
>>> print p.getName()
>>> else:
>>> print "not connected"
>>>
>>> remote_conn.close()
>>> —————————————————————————
>>>
>>> Running from python (works for local or remote server):
>>>
>>> python Connect_to_remote_omero.py
>>>
>>> connected
>>> Project1
>>>
>>> Running as OMERO script, fails to connect to remote server:
>>>
>>> bin/omero script list
>>>
>>> 623 | /rdm/Connect_to_remote_omero.py
>>> 524 | /rdm/Export_to_other_omero.py
>>> 547 | /rdm/ping.py
>>> (20 rows)
>>>
>>> bin/omero script launch 623
>>>
>>> Using session 5f02548b-6655-490b-981a-85edec1e70c4 (root at localhost:4064).
>>> Idle timeout: 10 min. Current group: system
>>> ValidationException: Can't find params for 623!
>>> stdout is in file 624:
>>> ---------------------------------
>>> not connected
>>>
>>> ---------------------------------
>>> No stderr.
>>>
>>> Running as OMERO script, does connect to local server:
>>> bin/omero script launch 625
>>> Using session 5f02548b-6655-490b-981a-85edec1e70c4 (root at localhost:4064).
>>> Idle timeout: 10 min. Current group: system
>>> ValidationException: Can't find params for 625!
>>> stdout is in file 626:
>>> ---------------------------------
>>> connected
>>> project2
>>> project1
>>>
>>> ————————————————
>>>
>>> Thanks,
>>> Eilidh
>>>
>>>
>>>
>>>
>>> On 17 Oct 2017, at 12:00, ome-devel-request at lists.openmicroscopy.org.uk <mailto:ome-devel-request at lists.openmicroscopy.org.uk>
>>> wrote:
>>>
>>> Send ome-devel mailing list submissions to
>>> ome-devel at lists.openmicroscopy.org.uk <mailto:ome-devel at lists.openmicroscopy.org.uk>
>>>
>>> To subscribe or unsubscribe via the World Wide Web, visit
>>> http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-devel <http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-devel>
>>> or, via email, send a message with subject or body 'help' to
>>> ome-devel-request at lists.openmicroscopy.org.uk <mailto:ome-devel-request at lists.openmicroscopy.org.uk>
>>>
>>> You can reach the person managing the list at
>>> ome-devel-owner at lists.openmicroscopy.org.uk <mailto:ome-devel-owner at lists.openmicroscopy.org.uk>
>>>
>>> When replying, please edit your Subject line so it is more specific
>>> than "Re: Contents of ome-devel digest..."
>>>
>>>
>>> Today's Topics:
>>>
>>> 1. Re: Plan for transferring data from one OMERO to another
>>> (William Moore (Staff))
>>>
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Message: 1
>>> Date: Tue, 17 Oct 2017 10:18:18 +0000
>>> From: "William Moore (Staff)" <W.Moore at dundee.ac.uk <mailto:W.Moore at dundee.ac.uk>>
>>> To: OME External Developer List
>>> <ome-devel at lists.openmicroscopy.org.uk <mailto:ome-devel at lists.openmicroscopy.org.uk>>
>>> Subject: Re: [ome-devel] Plan for transferring data from one OMERO to
>>> another
>>> Message-ID: <818C04E1-B318-472F-AEF4-16F998AEB015 at dundee.ac.uk <mailto:818C04E1-B318-472F-AEF4-16F998AEB015 at dundee.ac.uk>>
>>> Content-Type: text/plain; charset="utf-8"
>>>
>>> Hi,
>>>
>>> This could be quite a bit of work, so you will need to start small and
>>> build-up functionality as you go. Some investigation will be required - Some
>>> things will depend on the type of images you?ll be transferring. You?ll also
>>> need to have both OMERO servers using the same major version. E.g. 5.3.x.
>>>
>>> You?ll really need to re-import the images to the central server instead of
>>> manually creating new DB entries for all image metadata etc. This can be
>>> acheived from the command line, with your OMERO.script invoking ?bin/omero
>>> import ?? to the central server.
>>>
>>> Are these images imported in OMERO 5.0 or later (original files will be in
>>> managed repo)?
>>> Your script, running on the source OMERO server *may* be able to access the
>>> managed repository directly, and call e.g. ?bin/omero import
>>> /OMERO/ManagedRepository/will_3/2017-10/05/15-31-34.090/control.lsm?
>>> This is certainly the easiest solution.
>>>
>>> Alternatively, if the managed repo is not available then you can download
>>> the original images to the folder where the OMERO.script is running and
>>> import the images from there.
>>> In the simplest case, a single OMERO Image has a single image file. However,
>>> some Images are stored as multiple original files in the managed repo, which
>>> means they will all need to be downloaded to the script before they can be
>>> imported if you go for that option.
>>>
>>> In some cases, a single original file (or set of original files) will
>>> generate multiple OMERO Images when imported. So you may find that multiple
>>> images in your source server come from the same original file(s). In that
>>> case, you will have to be careful when you iterate through these images that
>>> you don?t import the same original file multiple times.
>>>
>>> It?s not really possible for OMERO.scripts to be ?interactive?. The easiest
>>> option for choosing a target is to have your users log in to the webclient
>>> (or Insight) in the central server and pick a Project or Dataset ID to enter
>>> into the script dialog in the other server.
>>>
>>> Traversing the graph of linked objects Dataset -> Image and handling of file
>>> Annotations / duplicate tags etc should be pretty straight-forward once you
>>> have the re-import of images working.
>>>
>>> Please put your script in github and commit all changes as you go. This will
>>> allow us to see what you have working and to help or contribute much easier.
>>> One option if you don?t already have a repo is to fork
>>> https://github.com/ome/omero-user-scripts <https://github.com/ome/omero-user-scripts> which allows us and the community
>>> to find your repo from there.
>>>
>>> Be careful when handling usernames and passwords in your OMERO.script. Make
>>> sure you?re not logging these etc.
>>>
>>> Initial goals:
>>> - Create an script that can take an Image ID as input, along with username &
>>> password of central server. Can use
>>> https://github.com/openmicroscopy/openmicroscopy/blob/develop/examples/Training/python/Scripting_Service_Example.py <https://github.com/openmicroscopy/openmicroscopy/blob/develop/examples/Training/python/Scripting_Service_Example.py>
>>> - List original files from source Image
>>> for f in image.getImportedImageFiles():
>>> print f.path, f.name
>>> - Create a BlitzGateway connection to central server
>>> - You can get a ?client? object using client = conn.c
>>> - Command line import using code similar to that in our python test
>>> framework (using ?client? from above as in the example)
>>> :https://github.com/openmicroscopy/openmicroscopy/blob/develop/components/tools/OmeroPy/src/omero/testlib/__init__.py#L277 <https://github.com/openmicroscopy/openmicroscopy/blob/develop/components/tools/OmeroPy/src/omero/testlib/__init__.py#L277>
>>>
>>>
>>> Let us know how this goes,
>>>
>>> Regards,
>>>
>>> Will.
>>>
>>>
>>> On 12 Oct 2017, at 12:46, Eilidh Troup
>>> <e.troup at epcc.ed.ac.uk <mailto:e.troup at epcc.ed.ac.uk><mailto:e.troup at epcc.ed.ac.uk <mailto:e.troup at epcc.ed.ac.uk>>> wrote:
>>>
>>> Hi,
>>>
>>> I?m a software engineer working on data management in biology. Our use case
>>> is that lab groups have their own instances of OMERO, and there is also a
>>> centrally-hosted university OMERO server which they would like to transfer
>>> data to. I?m planning to write a script to allow users to transfer data from
>>> one OMERO to another. I wanted to run the plans by this forum to see what
>>> you thought of the idea, and whether my planned implementation seems
>>> sensible.
>>>
>>> I plan to write a script (OMERO.scripts) to run on the local instances of
>>> OMERO and be used through OMERO.server or OMERO.web. This will let the user
>>> choose the image, dataset or project that they want to move, and enter their
>>> credentials for the central OMERO server. Then the script will use the Blitz
>>> Gateway to read data from the local server, and then to write to the remote
>>> server.
>>>
>>> issues:
>>>
>>> - How will users choose where to put data? It will have to be either in a
>>> default project on the central server, or the script would have to be
>>> interactive, where the user enters their credentials, and then the central
>>> server is contacted so that a list of projects and datasets belonging to
>>> that user can be presented.
>>>
>>> - There will be a graph of objects linked to any given one, for example, a
>>> dataset with images, tags and attachments. Need to traverse this to transfer
>>> all associated data.
>>>
>>> - Some IDs will need to be mapped from one OMERO to the other, for example
>>> tags - shouldn?t create a new one, but link to existing tag with same name
>>> on the other OMERO.
>>>
>>> I?m planning to write the code in Python and use OMERO.scripts and the Blitz
>>> Gateway. Please let me know what you think.
>> _______________________________________________
>> ome-devel mailing list
>> ome-devel at lists.openmicroscopy.org.uk <mailto:ome-devel at lists.openmicroscopy.org.uk>
>> http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-devel <http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-devel>
>
>
> The University of Dundee is a registered Scottish Charity, No: SC015096
> _______________________________________________
> ome-devel mailing list
> ome-devel at lists.openmicroscopy.org.uk <mailto:ome-devel at lists.openmicroscopy.org.uk>
> http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openmicroscopy.org.uk/pipermail/ome-devel/attachments/20171101/6d5c6e9d/attachment.html>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: not available
URL: <http://lists.openmicroscopy.org.uk/pipermail/ome-devel/attachments/20171101/6d5c6e9d/attachment.ksh>
More information about the ome-devel
mailing list