entity.py
changeset 3589 a5432f99f2d9
parent 3459 e134d2dd9992
parent 3552 8facb3324170
child 3629 559cad62c786
equal deleted inserted replaced
3536:f6c9a5df80fb 3589:a5432f99f2d9
   698     def related_cache(self, rtype, role, entities=True, limit=None):
   698     def related_cache(self, rtype, role, entities=True, limit=None):
   699         """return values for the given relation if it's cached on the instance,
   699         """return values for the given relation if it's cached on the instance,
   700         else raise `KeyError`
   700         else raise `KeyError`
   701         """
   701         """
   702         res = self._related_cache['%s_%s' % (rtype, role)][entities]
   702         res = self._related_cache['%s_%s' % (rtype, role)][entities]
   703         if limit:
   703         if limit is not None:
   704             if entities:
   704             if entities:
   705                 res = res[:limit]
   705                 res = res[:limit]
   706             else:
   706             else:
   707                 res = res.limit(limit)
   707                 res = res.limit(limit)
   708         return res
   708         return res
   720                 rcard = rschema.rproperty(related[0].e_schema, self.e_schema,
   720                 rcard = rschema.rproperty(related[0].e_schema, self.e_schema,
   721                                           'cardinality')[0]
   721                                           'cardinality')[0]
   722                 target = 'subject'
   722                 target = 'subject'
   723             if rcard in '?1':
   723             if rcard in '?1':
   724                 for rentity in related:
   724                 for rentity in related:
   725                     rentity._related_cache['%s_%s' % (rtype, target)] = (self.as_rset(), [self])
   725                     rentity._related_cache['%s_%s' % (rtype, target)] = (
   726         else:
   726                         self.as_rset(), (self,))
   727             related = []
   727         else:
       
   728             related = ()
   728         self._related_cache['%s_%s' % (rtype, role)] = (rset, related)
   729         self._related_cache['%s_%s' % (rtype, role)] = (rset, related)
   729 
   730 
   730     def clear_related_cache(self, rtype=None, role=None):
   731     def clear_related_cache(self, rtype=None, role=None):
   731         """clear cached values for the given relation or the entire cache if
   732         """clear cached values for the given relation or the entire cache if
   732         no relation is given
   733         no relation is given
   818 
   819 
   819         :rtype: list
   820         :rtype: list
   820         :return: the list of indexable word of this entity
   821         :return: the list of indexable word of this entity
   821         """
   822         """
   822         from indexer.query_objects import tokenize
   823         from indexer.query_objects import tokenize
       
   824         # take care to cases where we're modyfying the schema
       
   825         pending = self.req.transaction_data.setdefault('pendingrdefs', set())
   823         words = []
   826         words = []
   824         for rschema in self.e_schema.indexable_attributes():
   827         for rschema in self.e_schema.indexable_attributes():
       
   828             if (self.e_schema, rschema) in pending:
       
   829                 continue
   825             try:
   830             try:
   826                 value = self.printable_value(rschema, format='text/plain')
   831                 value = self.printable_value(rschema, format='text/plain')
   827             except TransformError:
   832             except TransformError:
   828                 continue
   833                 continue
   829             except:
   834             except: