Changeset 2078


Ignore:
Timestamp:
30 Jul 2007, 14:10:40 (17 years ago)
Author:
joachim
Message:

optimize reindex

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WAeUP_SRP/trunk/WAeUPTables.py

    r2069 r2078  
    313313    ###)
    314314
    315     def get_from_doc_department(self,doc): ###(
     315    def fill_certificates_dict(self):
     316        "return certificate data in  dict"
     317        certificates_brains = self.portal_catalog(portal_type ='Certificate')
     318        d = {}
     319        for cb in certificates_brains:
     320            certificate_doc = cb.getObject().getContent()
     321            cb_path = cb.getPath().split('/')
     322            ld = {}
     323            ld['faculty'] = cb_path[-4]
     324            ld['department'] = cb_path[-3]
     325            ld['end_level'] = getattr(certificate_doc,'end_level','999')
     326            d[cb.getId] = ld
     327        return d
     328           
     329    def get_from_doc_department(self,doc,cached_data={}): ###(
    316330        "return the students department"
    317331        if doc is None:
    318332            return None
     333        if cached_data.has_key(doc.study_course):
     334            return cached_data[doc.study_course]['department']
    319335        certificate_res = self.portal_catalog(id = doc.study_course)
    320336        if len(certificate_res) != 1:
     
    322338        return certificate_res[0].getPath().split('/')[-3]
    323339
    324     def get_from_doc_faculty(self,doc):
     340    def get_from_doc_faculty(self,doc,cached_data={}):
    325341        "return the students faculty"
    326342        if doc is None:
    327343            return None
     344        if cached_data.has_key(doc.study_course):
     345            return cached_data[doc.study_course]['faculty']
    328346        certificate_res = self.portal_catalog(id = doc.study_course)
    329347        if len(certificate_res) != 1:
     
    331349        return certificate_res[0].getPath().split('/')[-4]
    332350
    333     def get_from_doc_end_level(self,doc): ###(
     351    def get_from_doc_end_level(self,doc,cached_data={}):
    334352        "return the students end_level"
    335353        if doc is None:
    336354            return None
     355        if cached_data.has_key(doc.study_course):
     356            return cached_data[doc.study_course]['end_level']
    337357        certificate_res = self.portal_catalog(id = doc.study_course)
    338358        if len(certificate_res) != 1:
     
    340360        return getattr(certificate_res[0].getObject().getContent(),'end_level','unknown')
    341361
    342     def get_from_doc_level(self,doc):
     362    def get_from_doc_level(self,doc,cached_data={}):
    343363        "return the students level"
    344364        if doc is None:
     
    346366        return getattr(doc,'current_level',None)
    347367
    348     def get_from_doc_mode(self,doc):
     368    def get_from_doc_mode(self,doc,cached_data={}):
    349369        "return the students mode"
    350370        if doc is None:
     
    354374
    355375
    356     def get_from_doc_session(self,doc):
     376    def get_from_doc_session(self,doc,cached_data={}):
    357377        "return the students current_session"
    358378        if doc is None:
     
    360380        return getattr(doc,'current_session',None)
    361381
    362     def get_from_doc_entry_session(self,doc):
     382    def get_from_doc_entry_session(self,doc,cached_data={}):
    363383        "return the students entry_session"
    364384        if doc is None:
     
    375395        return "9%c" % doc.jamb_reg_no[0]
    376396
    377     def get_from_doc_course(self,doc):
     397    def get_from_doc_course(self,doc,cached_data={}):
    378398        "return the students study_course"
    379399        if doc is None:
     
    381401        return getattr(doc,'study_course',None)
    382402
    383     def get_from_doc_name(self,doc):
     403    def get_from_doc_name(self,doc,cached_data={}):
    384404        "return the students name from the personal"
    385405        if doc is None:
     
    387407        return "%s %s %s" % (doc.firstname,doc.middlename,doc.lastname)
    388408
    389     def get_from_doc_verdict(self,doc):
     409    def get_from_doc_verdict(self,doc,cached_data={}):
    390410        "return the students study_course"
    391411        if doc is None:
     
    410430                            reindextypes[pt]= [n]
    411431                        break
     432        cached_data = {}
     433        if set(name).intersection(set(('faculty','department','end_level'))):
     434            cached_data = self.fill_certificates_dict()
    412435        students = self.portal_catalog(portal_type="Student")
    413436        if hasattr(self,'portal_catalog_real'):
     
    439462                for field in self.affected_types[pt]['fields']:
    440463                    if hasattr(self,'get_from_doc_%s' % field):
    441                         data[field] = getattr(self,'get_from_doc_%s' % field)(doc)
     464                        data[field] = getattr(self,'get_from_doc_%s' % field)(doc,
     465                                                                              cached_data=cached_data)
    442466                    else:
    443467                        data[field] = getattr(doc,field)
     
    483507        students = self.portal_catalog(portal_type="Student")
    484508        num_objects = len(students)
     509        cached_data = self.fill_certificates_dict()
    485510        if pghandler:
    486511            pghandler.init('Refreshing catalog: %s' % self.absolute_url(1), num_objects)
     
    504529                for field in self.affected_types[pt]['fields']:
    505530                    if hasattr(self,'get_from_doc_%s' % field):
    506                         data[field] = getattr(self,'get_from_doc_%s' % field)(doc)
     531                        data[field] = getattr(self,'get_from_doc_%s' % field)(doc,
     532                                                                              cached_data=cached_data)
    507533                    else:
    508534                        data[field] = getattr(doc,field,None)
Note: See TracChangeset for help on using the changeset viewer.