## Script (Python) "reindexEndLevel" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## # $Id: reindexEndLevel.py 3058 2008-01-28 18:04:29Z joachim $ """ """ try: from Products.zdb import set_trace except: def set_trace(): pass mtool = context.portal_membership member = mtool.getAuthenticatedMember() import logging import DateTime logger = logging.getLogger('Skins.reindexEndLevel') from Products.AdvancedQuery import Eq, Between, Le,In #aq_portal = context.portal_catalog_real.evalAdvancedQuery aq_students = context.students_catalog.evalAdvancedQuery #students_folder = context.portal_url.getPortalObject().campus.students request = context.REQUEST session = request.SESSION student_records = context.students_catalog() total = len(student_records) logger.info("found %d students" % total) count = 1 no_end_level = no_course = 1 commit_after = 1000 logger.info('started to reindex end_level for %d records in students_catalog' % total) certificate_dict = context.students_catalog.fill_certificates_dict() logger.info('filled certificate_dict') records_to_change = [] for student_record in student_records: # skip record without lga value if not count % commit_after: logger.info("found %d of %d sofar" % (len(records_to_change),count)) count += 1 if not student_record.course: #logger.info("%d: %s course is empty" % (no_course,student_record.id)) no_course += 1 continue if student_record.end_level and student_record.end_level == certificate_dict[student_record.course]['end_level']: continue elif not certificate_dict[student_record.course]['end_level']: logger.info("%s: no end_level for course %s faculty %s department %s" % (student_record.id, student_record.course, student_record.faculty, student_record.department)) no_end_level +=1 continue records_to_change += (student_record,certificate_dict[student_record.course]['end_level']), for record,end_level in records_to_change: logger.info("modified %s end_level from %s to %s" % (record.id,record.end_level,end_level)) context.students_catalog.modifyRecord(id = record.id, record=record,end_level=end_level) logger.info('found %d certificates with empty end_level' % (no_end_level - 1)) logger.info('found %d students with no course' % (no_course - 1)) logger.info('corrected %d students with wrong end_level' % len(records_to_change))