in tool schema. New lxml is more strict when validating
the xml schema and fails with
```
lxml.etree.XMLSchemaParseError: complex type 'Output': The content model is not determinist., line 5329
```
this is because `filter` and `discover_datasets` are present in
OutputDataElement and OutputCollectionElement, making
```
<xs:sequence>
<xs:group ref="OutputDataElement" minOccurs="0" maxOccurs="unbounded" />
<xs:group ref="OutputCollectionElement" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
```
not deterministic.
In any case this isn't an accurate model of what is allowed and parsed,
as you can't use collection-specific discover_datasets options outside
of a dataset collection.
I **think** that the reason for adding
OutputCollectionElement to the sequence is that you can have a `data`
element nested in a `collection` element.
To continue allowing this and making it more precise I've added an
additional `OutputCollectionDataElement` type that is allowed within
`collection`. This then should allow us to remove
`OutputCollectionElement` from the `OutputData` type.
A quick test against IUC and devteam revealed no problem with this
approach per se, however it showed that https://github.com/galaxyproject/tools-iuc/blob/aa8360cb3ec9faf1488938a430855977632706ff/tools/krakentools/extract_kraken_reads.xml#L145
uses `change_format` which is not implemented for collections.
for metadata files and use same interface also for datasets,
which should effectively give us test coverage?
Fixes:
```
Stack Trace(most recent call first)
AttributeError: 'Bunch' object has no attribute 'get_file_name'
File "starlette/applications.py", line 122, in __call__
await self.middleware_stack(scope, receive, send)
File "starlette/middleware/errors.py", line 184, in __call__
raise exc
File "starlette/middleware/errors.py", line 162, in __call__
await self.app(scope, receive, _send)
File "starlette_context/middleware/raw_middleware.py", line 93, in __call__
await self.app(scope, receive, send_wrapper)
File "starlette/middleware/base.py", line 109, in __call__
await response(scope, receive, send)
File "starlette/responses.py", line 270, in __call__
async with anyio.create_task_group() as task_group:
File "anyio/_backends/_asyncio.py", line 597, in __aexit__
raise exceptions[0]
File "starlette/responses.py", line 273, in wrap
await func()
File "starlette/middleware/base.py", line 134, in stream_response
return await super().stream_response(send)
File "starlette/responses.py", line 262, in stream_response
async for chunk in self.body_iterator:
File "starlette/middleware/base.py", line 98, in body_stream
raise app_exc
File "starlette/middleware/base.py", line 70, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
File "starlette/middleware/exceptions.py", line 79, in __call__
raise exc
File "starlette/middleware/exceptions.py", line 68, in __call__
await self.app(scope, receive, sender)
File "fastapi/middleware/asyncexitstack.py", line 20, in __call__
raise e
File "fastapi/middleware/asyncexitstack.py", line 17, in __call__
await self.app(scope, receive, send)
File "starlette/routing.py", line 718, in __call__
await route.handle(scope, receive, send)
File "starlette/routing.py", line 443, in handle
await self.app(scope, receive, send)
File "a2wsgi/wsgi.py", line 157, in __call__
return await responder(scope, receive, send)
File "a2wsgi/wsgi.py", line 198, in __call__
raise self.exc_info[0].with_traceback(
File "galaxy/web/framework/middleware/error.py", line 165, in __call__
app_iter = self.application(environ, sr_checker)
File "galaxy/web/framework/middleware/statsd.py", line 29, in __call__
req = self.application(environ, start_response)
File "/cvmfs/main.galaxyproject.org/venv/lib/python3.11/site-packages/paste/httpexceptions.py", line 640, in __call__
return self.application(environ, start_response)
File "galaxy/web/framework/base.py", line 173, in __call__
return self.handle_request(request_id, path_info, environ, start_response)
File "galaxy/web/framework/base.py", line 262, in handle_request
body = method(trans, **kwargs)
File "galaxy/web/framework/decorators.py", line 138, in set_nocache_headers
return func(self, trans, *args, **kwargs)
File "galaxy/webapps/galaxy/controllers/dataset.py", line 677, in display_application
file_name = value.get_file_name()
File "galaxy/datatypes/display_applications/parameters.py", line 256, in __getattr__
return getattr(self.value, key)
```
from https://sentry.galaxyproject.org/share/issue/c68d4f4d94f941c09e6eb5f62b163a69/
The function `getPanelSectionsForTool` was outdated and not needed.
It was only working for the `default` and ontology views, and it
was only used to prevent looking at each section in
`createSortedResultObject` - which was looking at all panel
sections anyways, so the function wasn't really needed at all.
In this PR:
- removed the `deselectLabel` for `SingleItemSelector`, since it
is used to only select 1 item
- added `overflow-auto` class to History `Index` to prevent filters
in advanced menu from being hidden on smaller/zoomed-in screen
- fixed `PanelViewMenu` when advanced filters are shown in tool
panel; currently it can be confusing as it shows panel views even
when filter menu is toggled