entity.py
branchstable
changeset 3552 8facb3324170
parent 3546 f0aecddf367e
child 3589 a5432f99f2d9
child 3626 017869a514c3
equal deleted inserted replaced
3551:5a73db781dac 3552:8facb3324170
   802     def related_cache(self, rtype, role, entities=True, limit=None):
   802     def related_cache(self, rtype, role, entities=True, limit=None):
   803         """return values for the given relation if it's cached on the instance,
   803         """return values for the given relation if it's cached on the instance,
   804         else raise `KeyError`
   804         else raise `KeyError`
   805         """
   805         """
   806         res = self._related_cache['%s_%s' % (rtype, role)][entities]
   806         res = self._related_cache['%s_%s' % (rtype, role)][entities]
   807         if limit:
   807         if limit is not None:
   808             if entities:
   808             if entities:
   809                 res = res[:limit]
   809                 res = res[:limit]
   810             else:
   810             else:
   811                 res = res.limit(limit)
   811                 res = res.limit(limit)
   812         return res
   812         return res
   813 
   813 
   814     def set_related_cache(self, rtype, role, rset, col=0):
   814     def set_related_cache(self, rtype, role, rset, col=0):
   815         """set cached values for the given relation"""
   815         """set cached values for the given relation"""
   816         if rset:
   816         if rset:
   817             related = list(rset.entities(col))
   817             related = tuple(rset.entities(col))
   818             rschema = self.schema.rschema(rtype)
   818             rschema = self.schema.rschema(rtype)
   819             if role == 'subject':
   819             if role == 'subject':
   820                 rcard = rschema.rproperty(self.e_schema, related[0].e_schema,
   820                 rcard = rschema.rproperty(self.e_schema, related[0].e_schema,
   821                                           'cardinality')[1]
   821                                           'cardinality')[1]
   822                 target = 'object'
   822                 target = 'object'
   824                 rcard = rschema.rproperty(related[0].e_schema, self.e_schema,
   824                 rcard = rschema.rproperty(related[0].e_schema, self.e_schema,
   825                                           'cardinality')[0]
   825                                           'cardinality')[0]
   826                 target = 'subject'
   826                 target = 'subject'
   827             if rcard in '?1':
   827             if rcard in '?1':
   828                 for rentity in related:
   828                 for rentity in related:
   829                     rentity._related_cache['%s_%s' % (rtype, target)] = (self.as_rset(), [self])
   829                     rentity._related_cache['%s_%s' % (rtype, target)] = (
   830         else:
   830                         self.as_rset(), (self,))
   831             related = []
   831         else:
       
   832             related = ()
   832         self._related_cache['%s_%s' % (rtype, role)] = (rset, related)
   833         self._related_cache['%s_%s' % (rtype, role)] = (rset, related)
   833 
   834 
   834     def clear_related_cache(self, rtype=None, role=None):
   835     def clear_related_cache(self, rtype=None, role=None):
   835         """clear cached values for the given relation or the entire cache if
   836         """clear cached values for the given relation or the entire cache if
   836         no relation is given
   837         no relation is given