ome / omero-py

Python project containing Ice remoting code for OMERO
https://www.openmicroscopy.org/omero
GNU General Public License v2.0
20 stars 33 forks source link

assert_re ignoreExceptions is None #308

Open will-moore opened 2 years ago

will-moore commented 2 years ago

If an exception is thrown during init of rendering engine, this throws an Exception which then also generates a TypeError with except ctx.ignoreExceptions: since ignoreExceptions is None by default see https://www.openmicroscopy.org/qa2/qa/feedback/30554/

Traceback (most recent call last):

File "/omero/omerowebenv/lib/python3.6/site-packages/omero/gateway/__init__.py", line 7941, in wrapped
if not self._prepareRenderingEngine() \

File "/omero/omerowebenv/lib/python3.6/site-packages/omero/gateway/__init__.py", line 8217, in _prepareRenderingEngine
self._re = self._prepareRE(rdid=rdid)

File "/omero/omerowebenv/lib/python3.6/site-packages/omero/gateway/__init__.py", line 8191, in _prepareRE
re.resetDefaultSettings(True, ctx)

File "/omero/omerowebenv/lib/python3.6/site-packages/omero/gateway/__init__.py", line 4856, in __call__
return self.handle_exception(e, *args, **kwargs)

File "/omero/omerowebenv/lib/python3.6/site-packages/omeroweb/webclient/webclient_gateway.py", line 2109, in handle_exception
super(OmeroWebSafeCallWrapper, self).handle_exception(e, *args, **kwargs)

File "/omero/omerowebenv/lib/python3.6/site-packages/omero/gateway/__init__.py", line 4853, in __call__
return self.f(*args, **kwargs)

File "/omero/omerowebenv/lib/python3.6/site-packages/omero_api_RenderingEngine_ice.py", line 2323, in resetDefaultSettings
return _M_omero.api.RenderingEngine._op_resetDefaultSettings.invoke(self, ((save, ), _ctx))

omero.LockTimeout: exception ::omero::LockTimeout
{
serverStackTrace = ome.conditions.LockTimeout: Pixels pyramid missing, being created or import in progress.

...

at java.base/java.lang.Thread.run(Thread.java:829)

serverExceptionClass = ome.conditions.LockTimeout
message = Pixels pyramid missing, being created or import in progress.
backOff = 15000
seconds = 0
}

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "/omero/omerowebenv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)

File "/omero/omerowebenv/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)

File "/omero/omerowebenv/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/omero/omerowebenv/lib/python3.6/site-packages/omeroweb/decorators.py", line 538, in wrapped
retval = f(request, *args, **kwargs)

File "/omero/omerowebenv/lib/python3.6/site-packages/omeroweb/webgateway/views.py", line 1076, in render_image
jpeg_data = img.renderJpeg(z, t, compression=compress_quality)

File "/omero/omerowebenv/lib/python3.6/site-packages/omero/gateway/__init__.py", line 7946, in wrapped
except ctx.ignoreExceptions:

TypeError: catching classes that do not inherit from BaseException is not allowed
will-moore commented 2 years ago

Seen again today on nightshade:

File "/opt/omero/web/venv3/lib64/python3.6/site-packages/omeroweb/webgateway/views.py" in render_image
  1076.         jpeg_data = img.renderJpeg(z, t, compression=compress_quality)

File "/opt/omero/web/venv3/lib64/python3.6/site-packages/omero/gateway/__init__.py" in wrapped
  7886.             except ctx.ignoreExceptions:

Exception Type: TypeError at /webgateway/render_image/3970392/
Exception Value: catching classes that do not inherit from BaseException is not allowed
joshmoore commented 2 years ago

Looking at:

(base) /opt/omero-py $git grep assert_re
src/omero/gateway/__init__.py:class assert_re (object):
src/omero/gateway/__init__.py:        Used by the :meth:`assert_re` method to wrap calls requiring rendering
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re(ignoreExceptions=(omero.ConcurrencyException))
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()
src/omero/gateway/__init__.py:    @assert_re()

and

class assert_re (object):
    """
    Function decorator to make sure that rendering engine is prepared before
    call. Is configurable by various options.
    """

    def __init__(self, onPrepareFailureReturnNone=True, ignoreExceptions=None):

and

>>> try:
...     pass
... except
KeyboardInterrupt
>>> ignore = (,)
  File "<stdin>", line 1
    ignore = (,)
              ^
SyntaxError: invalid syntax
>>> ignore = None
>>> try:
...     pass
... except ignore:
...     pass
...
>>> try:
...     1/0
... except ignore:
...     pass
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
TypeError: catching classes that do not inherit from BaseException is not allowed

I think just defining a default for assert_re might solve this.