Add more opts support for getObjects('Annotation')#489
Conversation
|
Tests added in ome/openmicroscopy#6458 |
|
Comment on what changed after first commit.... The problem with the Therefore, Do we ever need to load annotations for more that 1 type of Object? E.g. webclient almost never allows you to select multiple different Object types, (e.g. Dataset and Image, except maybe in the search results) The webclient/api endpoint does a series of queries
So, let's instead go for: |
We may be loading file annotations even without using ann_type of 'file'
It makes sense to me to limit the parent type to one per request, if a client requires annotations on different parent types, the client can make multiple requests. I think it could even be justified to limit requests to a single parent object if that simplifies the requests and responses significantly. |
| clauses.append("obj.class=FileAnnotation") | ||
| elif ann_type == "comment": | ||
| clauses.append("obj.class=CommentAnnotation") | ||
| elif ann_type == "rating": |
There was a problem hiding this comment.
Similar to parent types, it might be best to stick with the built-in annotation types here. There is only one other reference to ratings in all of OMERO.py, which arguably should not be there either. This would also remove the special treatment of the namespace option in line 5210.
This adds support for various options for
conn.getObjects("Annotation", opts), in preparation for JSON api:Tests added in ome/openmicroscopy#6458
Supported opts - All are optional (but parent_ids needs parent_type)
"parent_type": "dataset""parent_ids": [1, 2]"ann_type': "tag""ns": "my.namespace"E.g.
/api/annotations/?type=tag&project=1&project=2would be backed by:Known issue: Loading Parents
For webclient/api/annotations/ we get the annotations along with links to the parents and the parent objects too.
E.g.
This is useful to have permissions, timestamp, owner etc on the link but it is particularly essential when we are loading annotations on multiple objects. E.g.
/api/annotations/?type=tag&project=1&project=2would load annotations for 2 projects, BUT we without links, we don't know which Annotations are linked to which Project.But, it doesn't appear possible to achieve this with
omero_marshal, since for Annotations, there is no handling of links to Parent objects. Annotations are "Annotatable", so we check for annotations ON the object https://github.com/ome/omero-marshal/blob/f8ff1c2e439f0599d96423b7f64898864548ba9f/omero_marshal/encode/encoders/annotation.py#L68but not whether the Object (annotation) is annotating a Parent.
In fact, I don't see that it's possible for e.g. an Annotation to have links loaded (in the same way that a Project or Dataset can have
obj.copyAnnotationLinks(), since the possible links for an Annotation object are stored in a different Table for each parent, e.g.ProjectAnnotationLinks, DatasetAnnotationLinksetc.