Warning: Can't synchronize with repository "(default)" (/home/git/ome.git does not appear to be a Git repository.). Look in the Trac log for more information.
Notice: In order to edit this ticket you need to be either: a Product Owner, The owner or the reporter of the ticket, or, in case of a Task not yet assigned, a team_member"

Task #4758 (closed)

Opened 13 years ago

Closed 13 years ago

Last modified 13 years ago

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@…>

(In [a78aa80574280236b17109ee56f4c89ee9692122/ome.git] on branch develop) Use KNOWN_WRAPPERS for wrapping in getObjects(). See #4758

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

Note: See TracTickets for help on using tickets. You may also have a look at Agilo extensions to the ticket.

1.3.13-PRO © 2008-2011 Agilo Software all rights reserved (this page was served in: 0.70808 sec.)

We're Hiring!