Task #4758 (closed)
getObjects() improvements
Reported by: | wmoore | Owned by: | wmoore |
---|---|---|---|
Priority: | major | Milestone: | OMERO-Beta4.3 |
Component: | API | Version: | n.a. |
Keywords: | n.a. | Cc: | cneves |
Resources: | n.a. | Referenced By: | n.a. |
References: | n.a. | Remaining Time: | 0.0d |
Sprint: | 2011-03-24 (8) |
Description (last modified by wmoore)
Notes from discussion with Carlos on 22nd March
http://trac.openmicroscopy.org.uk/ome/changeset/3952f7d13643e6182661c96f28ea02a37b960113/ome.git
http://trac.openmicroscopy.org.uk/ome/changeset/d6d8490f4685a39f72299c881bf3f09fa4df8eba/ome.git
Need to check getObjects("TagAnnotation") Need to put extra logic in one place, available from getObjects() listObjects() Check if any other objects don't have details etc. Generic query string on base object Others in __bstrap__() for subclasses, accessed on class instance with wrapper().OMERO_CLASS Add Known wrappers logic. Remove old methods on separate branch - Carlos will check, then I can merge to develop def getObjects(self, obj_type, ids): """ Retrieve Objects by type and given IDs. Not Ordered. Supported types are "Project", "Dataset", "Image", "Screen", "Plate", "Well" Returns generator of L{ProjectWrapper}, L{DatasetWrapper}, L{ImageWrapper} L{PlateWrapper} or L{WellWrapper}. @param obj_type: Object type. E.g. "Project" see above @type obj_type: String @param ids: object IDs @type ids: List of Long @return: Generator yielding Images @rtype: see above """ wrapper = KNOWN_WRAPPERS.get(obj_type.lower(), None) if not wrapper: raise TypeError # TODO - maybe a better Error? q = self.getQueryService() p = omero.sys.Parameters() p.map = {} p.map["ids"] = rlist([rlong(a) for a in ids]) sql = "select obj from %s obj join fetch obj.details.owner join fetch obj.details.group where obj.id in (:ids)" % wrapper().OMERO_CLASS for e in q.findAllByQuery(sql, p): yield wrapper(self, e) KNOWN_WRAPPERS = {"project":ProjectWrapper, "dataset":DatasetWrapper, "screen":ScreenWrapper, "plate":PlateWrapper, "well":WellWrapper, "annotation", AnnotationWrapper._wrap } select obj from %s obj join fetch obj.details.owner join fetch obj.details.group where obj.id in (:ids)" % wrapper().OMERO_CLASS left outer join fetch obj.groupExperimenterMap as map left outer join fetch map.child e select obj from %s obj join fetch obj.details.owner join fetch obj.details.group where obj.id in (:ids) wrapper().QUERY % wrapper().OMERO_CLASS
Change History (10)
comment:1 Changed 13 years ago by wmoore
- Cc cneves-x added
- Component changed from General to API
- Description modified (diff)
- Priority changed from minor to major
comment:2 Changed 13 years ago by wmoore
- Status changed from new to accepted
comment:3 Changed 13 years ago by Will Moore <will@…>
comment:4 Changed 13 years ago by Will Moore <will@…>
(In [86ddc27825097c645ef178367d75a6e360c657ff/ome.git] on branch develop) gatewaytest checks for use of getObjects('CommentAnnotation?', id). See #4758
comment:5 Changed 13 years ago by Will Moore <will@…>
(In [de05d864a3d118f040690a7193dab1074e18c710/ome.git] on branch develop) Blitz getObjects() gets query string from wrappers themselves. See #4758
comment:6 Changed 13 years ago by Will Moore <will@…>
(In [b49ac4728eb2d8ec80695929c76bd9eda21b6dac/ome.git] on branch develop) Blitz searchObjects() uses KNOWN_WRAPPERS. See #4758, #4679
comment:7 Changed 13 years ago by wmoore
- Remaining Time changed from 1 to 0
- Resolution set to fixed
- Status changed from accepted to closed
Summary of changes:
- Used KNOWN_WRAPPERS (as in 4-1 custom commits above) for wrapping
- Object Wrappers provide their own string for querying using getQueryString, which uses self.OMERO_CLASS. Must therefore be called after init().
wrapper.getQueryString() # returns "select obj from %s obj join fetch obj.details.owner as owner join fetch obj.details.group" % self.OMERO_CLASS
- This returns a query that retrieves details by default.
- getQueryString is overridden by AnnotationWrapper (no OMERO_CLASS), ExperimenterWrapper (no details) and ExperimenterGroupWrapper (also loads experimenters).
- AnnotationWrapper?._wrap() can now take 0 arguments, returning AnnotationWrapper?() to allow for
wrapper = AnnotationWrapper._wrap # this is in KNOWN_WRAPPERS wrapper().getQueryString()
comment:8 Changed 13 years ago by Carlos Neves <carlos@…>
(In [e1720b85c76854449492c5281450caa261e809e3/ome.git] on branch dev_4_1_custom) Use KNOWN_WRAPPERS for wrapping in getObjects(). See #4758
comment:9 Changed 13 years ago by Carlos Neves <carlos@…>
(In [108e9b6b8d090bd8a4cc9b47e11056f2767e7ec7/ome.git] on branch dev_4_1_custom) Blitz getObjects() gets query string from wrappers themselves. See #4758
comment:10 Changed 13 years ago by Carlos Neves <carlos@…>
(In [980ce69fb756c2780a7c258f3c777d4944fcaed0/ome.git] on branch dev_4_1_custom) Blitz searchObjects() uses KNOWN_WRAPPERS. See #4758, #4679
(In [a78aa80574280236b17109ee56f4c89ee9692122/ome.git] on branch develop) Use KNOWN_WRAPPERS for wrapping in getObjects(). See #4758