<!DOCTYPE html> <html class="writer-html5" lang="en" > <head> <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Blitz Gateway documentation — OMERO documentation</title> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> <!--[if lt IE 9]> <script src="../_static/js/html5shiv.min.js"></script> <![endif]--> <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> <script src="../_static/jquery.js"></script> <script src="../_static/underscore.js"></script> <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="../_static/doctools.js"></script> <script src="../_static/sphinx_highlight.js"></script> <script src="../_static/js/theme.js"></script> <link rel="index" title="Index" href="../genindex.html" /> <link rel="search" title="Search" href="../search.html" /> <link rel="next" title="Command Line Interface as an OMERO development tool" href="cli/index.html" /> <link rel="prev" title="OMERO Python language bindings" href="Python.html" /> </head> <body class="wy-body-for-nav"> <div class="wy-grid-for-nav"> <nav data-toggle="wy-nav-shift" class="wy-nav-side"> <div class="wy-side-scroll"> <div class="wy-side-nav-search" > <a href="../index.html" class="icon icon-home"> OMERO </a> <div class="version"> 5.6 </div> <div role="search"> <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> <input type="text" name="q" placeholder="Search docs" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> <ul class="current"> <li class="toctree-l1"><a class="reference internal" href="../users/index.html">OMERO Overview and CLI User Documentation</a></li> <li class="toctree-l1"><a class="reference internal" href="../sysadmins/index.html">System Administrator Documentation</a></li> <li class="toctree-l1 current"><a class="reference internal" href="index.html">Developer Documentation</a><ul class="current"> <li class="toctree-l2"><a class="reference internal" href="index.html#introduction-to-omero">Introduction to OMERO</a></li> <li class="toctree-l2 current"><a class="reference internal" href="index.html#using-the-omero-api">Using the OMERO API</a><ul class="current"> <li class="toctree-l3"><a class="reference internal" href="Python.html">OMERO Python language bindings</a></li> <li class="toctree-l3 current"><a class="current reference internal" href="#">Blitz Gateway documentation</a><ul> <li class="toctree-l4"><a class="reference internal" href="#connection-wrapper">Connection wrapper</a></li> <li class="toctree-l4"><a class="reference internal" href="#model-object-wrappers">Model object wrappers</a></li> <li class="toctree-l4"><a class="reference internal" href="#wrapper-coverage">Wrapper coverage</a></li> </ul> </li> <li class="toctree-l3"><a class="reference internal" href="cli/index.html">Command Line Interface as an OMERO development tool</a></li> <li class="toctree-l3"><a class="reference internal" href="Java.html">OMERO Java language bindings</a></li> <li class="toctree-l3"><a class="reference internal" href="Matlab.html">OMERO MATLAB language bindings</a></li> <li class="toctree-l3"><a class="reference internal" href="Cpp.html">OMERO C++ language bindings</a></li> <li class="toctree-l3"><a class="reference internal" href="json-api.html">JSON API</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="index.html#analysis">Analysis</a></li> <li class="toctree-l2"><a class="reference internal" href="index.html#scripts-plugins-for-omero">Scripts - plugins for OMERO</a></li> <li class="toctree-l2"><a class="reference internal" href="index.html#web">Web</a></li> <li class="toctree-l2"><a class="reference internal" href="index.html#insight">Insight</a></li> <li class="toctree-l2"><a class="reference internal" href="index.html#more-on-api-usage">More on API Usage</a></li> <li class="toctree-l2"><a class="reference internal" href="index.html#the-ome-data-model">The OME Data Model</a></li> <li class="toctree-l2"><a class="reference internal" href="index.html#searching">Searching</a></li> <li class="toctree-l2"><a class="reference internal" href="index.html#authentication-and-security">Authentication and Security</a></li> <li class="toctree-l2"><a class="reference internal" href="index.html#omero-server-in-depth">OMERO.server in depth</a></li> </ul> </li> </ul> </div> </div> </nav> <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > <i data-toggle="wy-nav-top" class="fa fa-bars"></i> <a href="../index.html">OMERO</a> </nav> <div class="wy-nav-content"> <div class="rst-content"> <div role="navigation" aria-label="Page navigation"> <ul class="wy-breadcrumbs"> <li><a href="../index.html" class="icon icon-home"></a></li> <li class="breadcrumb-item"><a href="index.html">Developer Documentation</a></li> <li class="breadcrumb-item active">Blitz Gateway documentation</li> <li class="wy-breadcrumbs-aside"> <a href="../_sources/developers/PythonBlitzGateway.rst.txt" rel="nofollow"> View page source</a> </li> </ul> <hr/> </div> <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <section id="blitz-gateway-documentation"> <h1>Blitz Gateway documentation<a class="headerlink" href="#blitz-gateway-documentation" title="Permalink to this heading">ïƒ</a></h1> <p>This page provides some background information on the OMERO Python client ‘gateway’ (omero.gateway module).</p> <p>The Blitz Gateway is a Python client-side library that facilitates working with the OMERO API, handling connection to the server, loading of data objects and providing convenience methods to access the data. It was originally designed as part of the <a class="reference internal" href="Web.html"><span class="doc">OMERO.web framework</span></a>, to provide connection and data retrieval services to various web clients. However, we encourage its use for all access to the OMERO Python API.</p> <section id="connection-wrapper"> <h2>Connection wrapper<a class="headerlink" href="#connection-wrapper" title="Permalink to this heading">ïƒ</a></h2> <p>The BlitzGateway class (see <a class="reference external" href="https://downloads.openmicroscopy.org/latest/omero5.5/api/python/omero/omero.gateway.html#omero.gateway._BlitzGateway">API of development code</a>) is a wrapper for the OMERO client and session objects. It provides various methods for connecting to the OMERO server, querying the status or context of the current connection and retrieving data objects from OMERO.</p> <p>BlitzGateway can be used as a context manager to ensure the underlying client connection is automatically closed.</p> <p>For examples see <a class="reference internal" href="Python.html#python-code-samples"><span class="std std-ref">Code samples</span></a>.</p> </section> <section id="model-object-wrappers"> <h2>Model object wrappers<a class="headerlink" href="#model-object-wrappers" title="Permalink to this heading">ïƒ</a></h2> <p>OMERO model objects, e.g. omero.model.Project, omero.model.Pixels etc. (see <a class="reference external" href="https://docs.openmicroscopy.org/omero-blitz/5.8.0/slice2html/omero/model.html">full list</a>) are code-generated and mapped to the OMERO database schema. They are language agnostic and their data is in the form of omero.rtypes as described in <a class="reference internal" href="GettingStarted/AdvancedClientDevelopment.html#advancedclientdevelopment-objects"><span class="std std-ref">about model objects</span></a>.</p> <p>To facilitate work in Python, particularly in web page templates, these Python model objects are wrapped in Blitz Object Wrappers. This hides the use of rtypes.</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">omero</span> <span class="kn">from</span><span class="w"> </span><span class="nn">omero.model</span><span class="w"> </span><span class="kn">import</span> <span class="n">ProjectI</span> <span class="kn">from</span><span class="w"> </span><span class="nn">omero.rtypes</span><span class="w"> </span><span class="kn">import</span> <span class="n">rstring</span> <span class="n">p</span> <span class="o">=</span> <span class="n">ProjectI</span><span class="p">()</span> <span class="n">p</span><span class="o">.</span><span class="n">setName</span><span class="p">(</span><span class="n">rstring</span><span class="p">(</span><span class="s2">"Omero Model Project"</span><span class="p">))</span> <span class="c1"># attributes are all rtypes</span> <span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span><span class="o">.</span><span class="n">getValue</span><span class="p">())</span> <span class="c1"># getValue() to unwrap the rtype</span> <span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">val</span><span class="p">)</span> <span class="c1"># short-hand</span> <span class="kn">from</span><span class="w"> </span><span class="nn">omero.gateway</span><span class="w"> </span><span class="kn">import</span> <span class="n">ProjectWrapper</span> <span class="n">project</span> <span class="o">=</span> <span class="n">ProjectWrapper</span><span class="p">(</span><span class="n">obj</span><span class="o">=</span><span class="n">p</span><span class="p">)</span> <span class="c1"># wrap the model.object</span> <span class="n">project</span><span class="o">.</span><span class="n">setName</span><span class="p">(</span><span class="s2">"Project Wrapper"</span><span class="p">)</span> <span class="c1"># Don't need to use rtypes</span> <span class="nb">print</span><span class="p">(</span><span class="n">project</span><span class="o">.</span><span class="n">getName</span><span class="p">())</span> <span class="nb">print</span><span class="p">(</span><span class="n">project</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="n">project</span><span class="o">.</span><span class="n">_obj</span><span class="p">)</span> <span class="c1"># access the wrapped object with ._obj</span> </pre></div> </div> <p>These wrappers also have a reference to the BlitzGateway connection wrapper, so they can make calls to the server and load more data when needed (lazy loading).</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span><span class="w"> </span><span class="nn">omero.gateway</span><span class="w"> </span><span class="kn">import</span> <span class="n">BlitzGateway</span> <span class="gp">>>> </span><span class="n">conn</span> <span class="o">=</span> <span class="n">BlitzGateway</span><span class="p">(</span><span class="s2">"username"</span><span class="p">,</span> <span class="s2">"password"</span><span class="p">,</span> <span class="n">host</span><span class="o">=</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">4064</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">conn</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span> <span class="gp">>>> </span><span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">conn</span><span class="o">.</span><span class="n">listProjects</span><span class="p">():</span> <span class="c1"># Initially we just load Projects</span> <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">getName</span><span class="p">())</span> <span class="gp">... </span> <span class="k">for</span> <span class="n">dataset</span> <span class="ow">in</span> <span class="n">p</span><span class="o">.</span><span class="n">listChildren</span><span class="p">():</span> <span class="c1"># lazy-loading of Datasets here</span> <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="n">dataset</span><span class="o">.</span><span class="n">getName</span><span class="p">())</span> <span class="gp">...</span> <span class="go">TestProject</span> <span class="go"> Aurora-B</span> <span class="go">tiff stacks</span> <span class="go"> newTimeStack</span> <span class="go"> test</span> <span class="go">siRNAi</span> <span class="go"> CENP</span> <span class="go"> live-cell</span> <span class="go"> survivin</span> <span class="gp">>>> </span><span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> </pre></div> </div> </section> <section id="wrapper-coverage"> <h2>Wrapper coverage<a class="headerlink" href="#wrapper-coverage" title="Permalink to this heading">ïƒ</a></h2> <p>The OMERO data model has a large number of objects, not all of which are used by the <a class="reference internal" href="Web.html"><span class="doc">OMERO.web framework</span></a>. Therefore, the Blitz gateway (which was originally built for this framework) has not yet been extended to wrap every omero.model object with a specific Blitz Object Wrapper. The current list of object wrappers can be found in the omero.gateway module <a class="reference external" href="https://downloads.openmicroscopy.org/latest/omero5.5/api/python/omero/omero.gateway.html">API</a>. As more functionality is provided by the Blitz Gateway, the coverage of object wrappers will increase accordingly.</p> <section id="access-to-the-omero-api-services"> <h3>Access to the OMERO API services<a class="headerlink" href="#access-to-the-omero-api-services" title="Permalink to this heading">ïƒ</a></h3> <p>If you need access to API methods that are not provided by the gateway library, you can get hold of the <a class="reference internal" href="Modules/Api.html"><span class="doc">OMERO Application Programming Interface</span></a>.</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>These services will always work with omero.model objects and not the gateway wrapper objects.</p> </div> <p>The gateway handles creation and reuse of the API services, so that new ones are not created unnecessarily. Services can be accessed using the methods of the underlying <a class="reference external" href="https://docs.openmicroscopy.org/omero-blitz/5.8.0/slice2html/omero/api/ServiceFactory.html">Service Factory</a> with the Gateway handling reuse as needed. <strong>Stateless</strong> services (those retrieved with getXXX methods e.g. <a class="reference external" href="https://docs.openmicroscopy.org/omero-blitz/5.8.0/slice2html/omero/api/ServiceFactory.html#getQueryService">getQueryService</a>) are always reused for each call, e.g. conn.getQueryService() whereas <strong>stateful</strong> services e.g. <a class="reference external" href="https://docs.openmicroscopy.org/omero-blitz/5.8.0/slice2html/omero/api/ServiceFactory.html#createRenderingEngine">createRenderingEngine</a> may be created each time.</p> <p>Not all methods of the service factory are currently supported in the gateway. You can get an idea of the currently supported services by looking at the source code under the <a class="reference external" href="https://downloads.openmicroscopy.org/latest/omero5.5/api/python/omero/omero.gateway.html#omero.gateway._BlitzGateway._createProxies">_createProxies</a> method.</p> <p>Example: ContainerService can load Projects and Datasets in a single call to server (no lazy loading)</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">cs</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">getContainerService</span><span class="p">()</span> <span class="n">projects</span> <span class="o">=</span> <span class="n">cs</span><span class="o">.</span><span class="n">loadContainerHierarchy</span><span class="p">(</span><span class="s2">"Project"</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">projects</span><span class="p">:</span> <span class="c1"># omero.model.ProjectI</span> <span class="nb">print</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span><span class="o">.</span><span class="n">getValue</span><span class="p">())</span> <span class="c1"># need to 'unwrap' rstring</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">p</span><span class="o">.</span><span class="n">linkedDatasetList</span><span class="p">():</span> <span class="nb">print</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span><span class="o">.</span><span class="n">getValue</span><span class="p">())</span> </pre></div> </div> </section> <section id="stateful-services-reconnection-error-handling-etc"> <h3>Stateful services, reconnection, error handling etc.<a class="headerlink" href="#stateful-services-reconnection-error-handling-etc" title="Permalink to this heading">ïƒ</a></h3> <p>The Blitz gateway was designed for use in the <a class="reference internal" href="Web.html"><span class="doc">OMERO.web framework</span></a> and it is not expected that stateful services will be maintained on the client for significant time. There are various error-handling functionalities in the Blitz gateway that will close existing services and recreate them in order to maintain a working connection. If this happens then any stateful services that you have on the client-side will become stale. Our general advice is to create, use and close the stateful services in the shortest practicable time.</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">try</span><span class="p">:</span> <span class="n">image</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">getObject</span><span class="p">(</span><span class="s2">"Image"</span><span class="p">,</span> <span class="n">image_id</span><span class="p">)</span> <span class="c1"># Initializes the Rendering engine and sets rendering settings</span> <span class="n">image</span><span class="o">.</span><span class="n">setActiveChannels</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="p">[[</span><span class="mi">20</span><span class="p">,</span> <span class="mi">300</span><span class="p">],</span> <span class="p">[</span><span class="mi">50</span><span class="p">,</span> <span class="mi">500</span><span class="p">]],</span> <span class="p">[</span><span class="s1">'00FF00'</span><span class="p">,</span> <span class="s1">'FF0000'</span><span class="p">])</span> <span class="n">pil_image</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">renderImage</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="c1"># Now we close the rendering engine</span> <span class="n">image</span><span class="o">.</span><span class="n">_re</span><span class="o">.</span><span class="n">close</span> <span class="c1"># Can continue to use the connection until done,</span> <span class="c1"># then close ALL services:</span> <span class="k">finally</span><span class="p">:</span> <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> </pre></div> </div> </section> <section id="overwriting-and-extending-omero-gateway-classes"> <h3>Overwriting and extending omero.gateway classes<a class="headerlink" href="#overwriting-and-extending-omero-gateway-classes" title="Permalink to this heading">ïƒ</a></h3> <p>When working with <a class="reference external" href="https://downloads.openmicroscopy.org/latest/omero5.5/api/python/omero/omero.gateway.html">omero.gateway</a> or wrapper classes such as <a class="reference external" href="https://downloads.openmicroscopy.org/latest/omero5.5/api/python/omero/omero.gateway.html#omero.gateway.ImageWrapper">omero.gateway.ImageWrapper</a> you might want to add your own functionality or customize an existing one. N.B. The call to <code class="docutils literal notranslate"><span class="pre">omero.gateway.refreshWrappers()</span></code> is important to update the dictionary of classes used by conn.getObjects(). This will ensure that instances of your class are returned by conn.getObjects().</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">MyBlitzGateway</span> <span class="p">(</span><span class="n">omero</span><span class="o">.</span><span class="n">gateway</span><span class="o">.</span><span class="n">BlitzGateway</span><span class="p">):</span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="nb">super</span><span class="p">(</span><span class="n">MyBlitzGateway</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">...</span><span class="n">do</span> <span class="n">something</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">g</span><span class="o">.</span> <span class="n">add</span> <span class="n">new</span> <span class="n">field</span><span class="o">...</span> <span class="bp">self</span><span class="o">.</span><span class="n">new_field</span> <span class="o">=</span> <span class="s1">'foo'</span> <span class="k">def</span><span class="w"> </span><span class="nf">connect</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="n">rv</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">MyBlitzGateway</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">if</span> <span class="n">rv</span><span class="p">:</span> <span class="o">...</span><span class="n">do</span> <span class="n">something</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">g</span><span class="o">.</span> <span class="n">modify</span> <span class="n">new</span> <span class="n">field</span><span class="o">...</span> <span class="bp">self</span><span class="o">.</span><span class="n">new_field</span> <span class="o">=</span> <span class="s1">'bla'</span> <span class="k">return</span> <span class="n">rv</span> <span class="n">omero</span><span class="o">.</span><span class="n">gateway</span><span class="o">.</span><span class="n">BlitzGateway</span> <span class="o">=</span> <span class="n">MyBlitzGateway</span> <span class="k">class</span><span class="w"> </span><span class="nc">MyBlitzObjectWrapper</span> <span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="n">annotation_counter</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">def</span><span class="w"> </span><span class="nf">countAnnotations</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="w"> </span><span class="sd">"""</span> <span class="sd"> Count on annotations linked to the object and set the value</span> <span class="sd"> on the custom field 'annotation_counter'.</span> <span class="sd"> @return Counter</span> <span class="sd"> """</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotation_counter</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotation_counter</span> <span class="k">else</span><span class="p">:</span> <span class="n">container</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conn</span><span class="o">.</span><span class="n">getContainerService</span><span class="p">()</span> <span class="n">m</span> <span class="o">=</span> <span class="n">container</span><span class="o">.</span><span class="n">getCollectionCount</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_obj</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_obj</span><span class="p">)</span><span class="o">.</span><span class="n">ANNOTATIONLINKS</span><span class="p">,</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_oid</span><span class="p">],</span> <span class="kc">None</span><span class="p">)</span> <span class="k">if</span> <span class="n">m</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_oid</span><span class="p">]</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotation_counter</span> <span class="o">=</span> <span class="n">m</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_oid</span><span class="p">]</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotation_counter</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="k">class</span><span class="w"> </span><span class="nc">ImageWrapper</span> <span class="p">(</span><span class="n">MyBlitzObjectWrapper</span><span class="p">,</span> <span class="n">omero</span><span class="o">.</span><span class="n">gateway</span><span class="o">.</span><span class="n">ImageWrapper</span><span class="p">):</span> <span class="w"> </span><span class="sd">"""</span> <span class="sd"> omero_model_ImageI class wrapper overwrite omero.gateway.ImageWrapper</span> <span class="sd"> and extends MyBlitzObjectWrapper.</span> <span class="sd"> """</span> <span class="k">def</span><span class="w"> </span><span class="fm">__prepare__</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s1">'annotation_counter'</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">annotation_counter</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">'annotation_counter'</span><span class="p">]</span> <span class="n">omero</span><span class="o">.</span><span class="n">gateway</span><span class="o">.</span><span class="n">ImageWrapper</span> <span class="o">=</span> <span class="n">ImageWrapper</span> <span class="c1"># IMPORTANT to update the map of wrappers for 'Image' etc. returned by getObjects("Image")</span> <span class="n">omero</span><span class="o">.</span><span class="n">gateway</span><span class="o">.</span><span class="n">refreshWrappers</span><span class="p">()</span> </pre></div> </div> </section> </section> </section> </div> </div> <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> <a href="Python.html" class="btn btn-neutral float-left" title="OMERO Python language bindings" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> <a href="cli/index.html" class="btn btn-neutral float-right" title="Command Line Interface as an OMERO development tool" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> </div> <hr/> <div role="contentinfo"> <p>© Copyright 2000-2025, The Open Microscopy Environment.</p> </div> Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. </footer> </div> </div> </section> </div> <script> jQuery(function () { SphinxRtdTheme.Navigation.enable(true); }); </script> </body> </html>