This test fails because cut fails on the compressed input with
`cut: /private/var/folders/df/6xqpqpcd7h73b6jpx9t6cwhw0000gn/T/tmpu8gqd71c/tmpmae9egoz/tmpz8sonmgx/database/objects/6/9/8/dataset_69847aef-7b3f-4915-a8ae-394921dbe388.dat: Illegal byte sequence`
with the ``CONVERTER_gz_to_uncompressed`` tool.
Previously, if a user forced an incorrect datatype to a compressed input
dataset (e.g. `fastqsanger` instead of `fastqsanger.gz`), then the output
datatype assigned by this tool would be an invalid one (`fastqsan`).
Fix#17938.
[24.0] Fix ``InvalidRequestError: Can't operate on closed transaction inside context manager. Please complete the context manager before emitting further commands.``
Fixes:
```
ExceptionGroup: unhandled errors in a TaskGroup
File "starlette/_utils.py", line 87, in collapse_excgroups
yield
File "starlette/middleware/base.py", line 190, in __call__
async with anyio.create_task_group() as task_group:
File "anyio/_backends/_asyncio.py", line 678, in __aexit__
raise BaseExceptionGroup(
AttributeError: 'NoneType' object has no attribute 'replace'
File "starlette/applications.py", line 123, in __call__
await self.middleware_stack(scope, receive, send)
File "starlette/middleware/errors.py", line 186, in __call__
raise exc
File "starlette/middleware/errors.py", line 164, in __call__
await self.app(scope, receive, _send)
File "starlette_context/middleware/raw_middleware.py", line 92, in __call__
await self.app(scope, receive, send_wrapper)
File "starlette/middleware/base.py", line 189, in __call__
with collapse_excgroups():
File "contextlib.py", line 155, in __exit__
self.gen.throw(typ, value, traceback)
File "starlette/_utils.py", line 93, in collapse_excgroups
raise exc
File "starlette/middleware/base.py", line 191, in __call__
response = await self.dispatch_func(request, call_next)
File "galaxy/webapps/galaxy/fast_app.py", line 108, in add_x_frame_options
response = await call_next(request)
File "starlette/middleware/base.py", line 165, in call_next
raise app_exc
File "starlette/middleware/base.py", line 151, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
File "starlette/middleware/exceptions.py", line 62, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "starlette/_exception_handler.py", line 64, in wrapped_app
raise exc
File "starlette/_exception_handler.py", line 53, in wrapped_app
await app(scope, receive, sender)
File "starlette/routing.py", line 758, in __call__
await self.middleware_stack(scope, receive, send)
File "starlette/routing.py", line 778, in app
await route.handle(scope, receive, send)
File "starlette/routing.py", line 299, in handle
await self.app(scope, receive, send)
File "starlette/routing.py", line 79, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "starlette/_exception_handler.py", line 64, in wrapped_app
raise exc
File "starlette/_exception_handler.py", line 53, in wrapped_app
await app(scope, receive, sender)
File "starlette/routing.py", line 74, in app
response = await func(request)
File "fastapi/routing.py", line 278, in app
raw_response = await run_endpoint_function(
File "fastapi/routing.py", line 193, in run_endpoint_function
return await run_in_threadpool(dependant.call, **values)
File "starlette/concurrency.py", line 42, in run_in_threadpool
return await anyio.to_thread.run_sync(func, *args)
File "anyio/to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
File "anyio/_backends/_asyncio.py", line 2144, in run_sync_in_worker_thread
return await future
File "anyio/_backends/_asyncio.py", line 851, in run
result = context.run(func, *args)
File "galaxy/webapps/galaxy/api/history_contents.py", line 465, in index
items = self.service.index(
File "galaxy/webapps/galaxy/services/history_contents.py", line 312, in index
return self.__index_v2(trans, history_id, params, serialization_params, filter_query_params, accept)
File "galaxy/webapps/galaxy/services/history_contents.py", line 992, in __index_v2
items = [
File "galaxy/webapps/galaxy/services/history_contents.py", line 993, in <listcomp>
self._serialize_content_item(
File "galaxy/webapps/galaxy/services/history_contents.py", line 1064, in _serialize_content_item
rval = serializer.serialize_to_view(
File "galaxy/managers/base.py", line 785, in serialize_to_view
return self.serialize(item, all_keys, **context)
File "galaxy/managers/hdas.py", line 614, in serialize
return super().serialize(hda, keys, user=user, **context)
File "galaxy/managers/datasets.py", line 770, in serialize
serialized = super().serialize(dataset_assoc, keys, **context)
File "galaxy/managers/base.py", line 698, in serialize
returned[key] = self.serializers[key](item, key, **context)
File "galaxy/managers/datasets.py", line 633, in <lambda>
"peek": lambda item, key, **context: item.display_peek() if item.peek and item.peek != "no peek" else None,
File "galaxy/model/__init__.py", line 4669, in display_peek
return self.datatype.display_peek(self)
File "galaxy/datatypes/qiime2.py", line 57, in display_peek
table += [make_row(pair) for pair in self._peek(dataset, simple=True)]
File "galaxy/datatypes/qiime2.py", line 57, in <listcomp>
table += [make_row(pair) for pair in self._peek(dataset, simple=True)]
File "galaxy/datatypes/qiime2.py", line 54, in make_row
return f"<tr><th>{pair[0]}</th><td>{html.escape(pair[1])}</td></tr>"
File "__init__.py", line 19, in escape
s = s.replace("&", "&") # Must be done first!
```
This reverts commit 061d4c32db.
Fixes:
```
Traceback (most recent call last):
File "/home/runner/work/galaxy/galaxy/galaxy root/lib/galaxy/jobs/handler.py", line 1083, in __monitor
self.__monitor_step()
File "/home/runner/work/galaxy/galaxy/galaxy root/lib/galaxy/jobs/handler.py", line 1115, in __monitor_step
self._check_jobs(session, jobs_to_check)
File "/home/runner/work/galaxy/galaxy/galaxy root/lib/galaxy/jobs/handler.py", line 1181, in _check_jobs
self.__stop(job, session)
File "/home/runner/work/galaxy/galaxy/galaxy root/lib/galaxy/jobs/handler.py", line 1099, in __stop
job.set_state(job.states.STOPPED)
File "/home/runner/work/galaxy/galaxy/galaxy root/lib/galaxy/model/__init__.py", line 1703, in set_state
self.state_history.append(JobStateHistory(self))
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 487, in __get__
return self.impl.get(state, dict_)
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 959, in get
value = self._fire_loader_callables(state, key, passive)
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 995, in _fire_loader_callables
return self.callable_(state, passive)
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/strategies.py", line 912, in _load_for_state
return self._emit_lazyload(
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/strategies.py", line 1022, in _emit_lazyload
lazy_clause, params = self._generate_lazy_clause(state, passive)
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/strategies.py", line 807, in _generate_lazy_clause
value = mapper._get_state_attr_by_column(
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/mapper.py", line 3018, in _get_state_attr_by_column
return state.manager[prop.key].impl.get(state, dict_, passive=passive)
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 959, in get
value = self._fire_loader_callables(state, key, passive)
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 990, in _fire_loader_callables
return state._load_expired(state, passive)
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/state.py", line 712, in _load_expired
self.manager.expired_attribute_loader(self, toload, passive)
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/loading.py", line 1451, in load_scalar_attributes
result = load_on_ident(
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/loading.py", line 407, in load_on_ident
return load_on_pk_identity(
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/loading.py", line 530, in load_on_pk_identity
session.execute(
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1716, in execute
conn = self._connection_for_bind(bind)
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1552, in _connection_for_bind
TransactionalContext._trans_ctx_check(self)
File "/home/runner/work/galaxy/galaxy/galaxy root/.venv/lib/python3.8/site-packages/sqlalchemy/engine/util.py", line 199, in _trans_ctx_check
raise exc.InvalidRequestError(
sqlalchemy.exc.InvalidRequestError: Can't operate on closed transaction inside context manager. Please complete the context manager before emitting further commands.
```
at the cost of larger transactions that are more likely to deadlock.
Still likely a better tradeoff. Probably fixes
test/integration/test_interactivetools_api.py::TestInteractiveToolsIntegration::test_multi_server_realtime_tool.
metadata
Fixes:
```
Message
Uncaught exception in exposed API method:
Stack Trace(most recent call first)
TypeError: 'NoneType' object is not iterable
File "galaxy/web/framework/decorators.py", line 346, in decorator
rval = func(self, trans, *args, **kwargs)
File "galaxy/webapps/galaxy/api/tools.py", line 247, in build
return tool.to_json(trans, kwd.get("inputs", kwd), history=history)
File "galaxy/tools/__init__.py", line 2509, in to_json
populate_state(request_context, self.inputs, params.__dict__, state_inputs, state_errors)
File "galaxy/tools/parameters/__init__.py", line 412, in populate_state
_populate_state_legacy(
File "galaxy/tools/parameters/__init__.py", line 525, in _populate_state_legacy
state[input.name] = input.get_initial_value(request_context, context)
File "galaxy/tools/parameters/basic.py", line 1107, in get_initial_value
options = list(self.get_options(trans, other_values))
File "galaxy/tools/parameters/basic.py", line 960, in get_options
return self.options.get_options(trans, other_values)
File "galaxy/tools/parameters/dynamic_options.py", line 893, in get_options
rval = filter.filter_options(rval, trans, other_values)
File "galaxy/tools/parameters/dynamic_options.py", line 227, in filter_options
for r in ref:
```
from
https://sentry.galaxyproject.org/share/issue/ac3a350198604034aca07eaca3cc9cb8/
This happens if you have the following input section:
```
<param name="otu" type="data" format="mothur.list,mothur.shared" label="list or shared - OTU List of Shared"/>
<param name="repfasta" type="data" format="fasta" optional="true" label="repfasta - rep.fasta" help="rep.fasta file generated by get.oturep"/>
<param name="label" type="select" label="label - OTU Labels" optional="true" help="Select exactly one label. If none selected, first label in your list or shared file will be used">
<options>
<filter type="data_meta" ref="otu" key="labels"/>
</options>
</param>
```
but the first input collection to mothur.list or mothur.shared dataset
has no elements.
Fixes:
```
AttributeError: 'NoneType' object has no attribute 'values'
File "galaxy/web/framework/decorators.py", line 346, in decorator
rval = func(self, trans, *args, **kwargs)
File "galaxy/webapps/galaxy/api/workflows.py", line 357, in workflow_dict
ret_dict = self.workflow_contents_manager.workflow_to_dict(
File "galaxy/managers/workflows.py", line 907, in workflow_to_dict
wf_dict = self._workflow_to_dict_run(trans, stored, workflow=workflow, history=history or trans.history)
File "galaxy/managers/workflows.py", line 1025, in _workflow_to_dict_run
step_model["replacement_parameters"] = step.module.get_informal_replacement_parameters(step)
File "galaxy/workflow/modules.py", line 2388, in get_informal_replacement_parameters
for argument in pja.action_arguments.values():
```
from https://sentry.galaxyproject.org/share/issue/954ebe7b658f401a8a8e40987d43a91d/