## Script (Python) "ti_115fc_resolve" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## # $Id: ti_115fc_resolve.py 3397 2008-03-31 10:07:17Z joachim $ """ """ try: from Products.zdb import set_trace except: def set_trace(): pass mtool = context.portal_membership member = mtool.getAuthenticatedMember() if str(member) not in ('admin','joachim'): return import logging import DateTime logger = logging.getLogger('Skins.ti_115fc_resolve') from Products.AdvancedQuery import Eq, Between, Le,In aq_students = context.students_catalog.evalAdvancedQuery aq_portal = context.portal_catalog_real.evalAdvancedQuery course_results = context.course_results aq_course_results = course_results.evalAdvancedQuery students_folder = context.portal_url.getPortalObject().campus.students request = context.REQUEST session = request.SESSION response = request.RESPONSE setheader = request.RESPONSE.setHeader def rwrite(s): response.setHeader('Content-type','text/html; charset=ISO-8859-15') response.write("%s
\n\r" % s) results = course_results() inconsistent = {} students = context.students_catalog() total = len(students) logger.info('started for %d students' % total) wrong_count = 0 count = 0 commit_after = 10000 #set_trace() for student in students: count += 1 if not count % commit_after: logger.info('found %d wrong of %d searched total %d' % (wrong_count,count,total)) levels = context.getLevelsFromCourseResults(student.id) for level in levels: if int(level) % 100: logger.info('%s invalid level in course_results %s' % (student.id,','.join(levels))) study_course = getattr(getattr(students_folder,student.id),'study_course',None) if study_course is None: wrong_count += 1 logger.info('%s no study_course object but %s levels' % (student.id,','.join(levels))) continue existing_levels = study_course.objectIds() different = [l for l in levels if l not in existing_levels] if different: wrong_count += 1 logger.info("%s levels %s in course_results and %s existing levels %d of %d checked %d wrong" % (student.id, ",".join(levels), ",".join(existing_levels), count, total, wrong_count, )) # if count > 10: # break # set_trace() logger.info('found %d' % wrong_count) logger.info('finished')