entity.py
changeset 7920 5146c63e8e34
parent 7914 fb757a7d887e
parent 7911 5ab88d05083f
child 7963 059914a691a9
equal deleted inserted replaced
7919:ae3307cac44e 7920:5146c63e8e34
   834                         self.cw_attr_cache[name] = value = self._cw._('unaccessible')
   834                         self.cw_attr_cache[name] = value = self._cw._('unaccessible')
   835                     else:
   835                     else:
   836                         self.cw_attr_cache[name] = value = None
   836                         self.cw_attr_cache[name] = value = None
   837             return value
   837             return value
   838 
   838 
   839     def related(self, rtype, role='subject', limit=None, entities=False): # XXX .cw_related
   839     def related(self, rtype, role='subject', limit=None, entities=False, # XXX .cw_related
       
   840                 safe=False):
   840         """returns a resultset of related entities
   841         """returns a resultset of related entities
   841 
   842 
   842         :param role: is the role played by 'self' in the relation ('subject' or 'object')
   843         :param rtype:
   843         :param limit: resultset's maximum size
   844           the name of the relation, aka relation type
   844         :param entities: if True, the entites are returned; if False, a result set is returned
   845         :param role:
       
   846           the role played by 'self' in the relation ('subject' or 'object')
       
   847         :param limit:
       
   848           resultset's maximum size
       
   849         :param entities:
       
   850           if True, the entites are returned; if False, a result set is returned
       
   851         :param safe:
       
   852           if True, an empty rset/list of entities will be returned in case of
       
   853           :exc:`Unauthorized`, else (the default), the exception is propagated
   845         """
   854         """
   846         rtype = str(rtype)
   855         rtype = str(rtype)
   847         try:
   856         try:
   848             return self._cw_relation_cache(rtype, role, entities, limit)
   857             return self._cw_relation_cache(rtype, role, entities, limit)
   849         except KeyError:
   858         except KeyError:
   851         if not self.has_eid():
   860         if not self.has_eid():
   852             if entities:
   861             if entities:
   853                 return []
   862                 return []
   854             return self._cw.empty_rset()
   863             return self._cw.empty_rset()
   855         rql = self.cw_related_rql(rtype, role)
   864         rql = self.cw_related_rql(rtype, role)
   856         rset = self._cw.execute(rql, {'x': self.eid})
   865         try:
       
   866             rset = self._cw.execute(rql, {'x': self.eid})
       
   867         except Unauthorized:
       
   868             if not safe:
       
   869                 raise
       
   870             rset = self._cw.empty_rset()
   857         self.cw_set_relation_cache(rtype, role, rset)
   871         self.cw_set_relation_cache(rtype, role, rset)
   858         return self.related(rtype, role, limit, entities)
   872         return self.related(rtype, role, limit, entities)
   859 
   873 
   860     def cw_related_rql(self, rtype, role='subject', targettypes=None):
   874     def cw_related_rql(self, rtype, role='subject', targettypes=None):
   861         vreg = self._cw.vreg
   875         vreg = self._cw.vreg