entity.py
branchstable
changeset 7911 5ab88d05083f
parent 7899 4f6ff757f83c
child 7920 5146c63e8e34
equal deleted inserted replaced
7909:71c70bf482cf 7911:5ab88d05083f
   720                         self.cw_attr_cache[name] = value = self._cw._('unaccessible')
   720                         self.cw_attr_cache[name] = value = self._cw._('unaccessible')
   721                     else:
   721                     else:
   722                         self.cw_attr_cache[name] = value = None
   722                         self.cw_attr_cache[name] = value = None
   723             return value
   723             return value
   724 
   724 
   725     def related(self, rtype, role='subject', limit=None, entities=False): # XXX .cw_related
   725     def related(self, rtype, role='subject', limit=None, entities=False, # XXX .cw_related
       
   726                 safe=False):
   726         """returns a resultset of related entities
   727         """returns a resultset of related entities
   727 
   728 
   728         :param role: is the role played by 'self' in the relation ('subject' or 'object')
   729         :param rtype:
   729         :param limit: resultset's maximum size
   730           the name of the relation, aka relation type
   730         :param entities: if True, the entites are returned; if False, a result set is returned
   731         :param role:
       
   732           the role played by 'self' in the relation ('subject' or 'object')
       
   733         :param limit:
       
   734           resultset's maximum size
       
   735         :param entities:
       
   736           if True, the entites are returned; if False, a result set is returned
       
   737         :param safe:
       
   738           if True, an empty rset/list of entities will be returned in case of
       
   739           :exc:`Unauthorized`, else (the default), the exception is propagated
   731         """
   740         """
   732         try:
   741         try:
   733             return self._cw_relation_cache(rtype, role, entities, limit)
   742             return self._cw_relation_cache(rtype, role, entities, limit)
   734         except KeyError:
   743         except KeyError:
   735             pass
   744             pass
   736         if not self.has_eid():
   745         if not self.has_eid():
   737             if entities:
   746             if entities:
   738                 return []
   747                 return []
   739             return self._cw.empty_rset()
   748             return self._cw.empty_rset()
   740         rql = self.cw_related_rql(rtype, role)
   749         rql = self.cw_related_rql(rtype, role)
   741         rset = self._cw.execute(rql, {'x': self.eid})
   750         try:
       
   751             rset = self._cw.execute(rql, {'x': self.eid})
       
   752         except Unauthorized:
       
   753             if not safe:
       
   754                 raise
       
   755             rset = self._cw.empty_rset()
   742         self.cw_set_relation_cache(rtype, role, rset)
   756         self.cw_set_relation_cache(rtype, role, rset)
   743         return self.related(rtype, role, limit, entities)
   757         return self.related(rtype, role, limit, entities)
   744 
   758 
   745     def cw_related_rql(self, rtype, role='subject', targettypes=None):
   759     def cw_related_rql(self, rtype, role='subject', targettypes=None):
   746         rschema = self._cw.vreg.schema[rtype]
   760         rschema = self._cw.vreg.schema[rtype]