## Script (Python) "ti_112fc_resolve" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## # $Id: ti_112fc_resolve.py 3370 2008-03-25 13:20:19Z 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_112fc_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 = {} student_ids = [] count = 0 for result in results: d = {} d['student_id'],d['level_id'],d['code'] = result.key.split('|') not_equal = [] for attr in ('student_id','level_id','code'): if d[attr] != getattr(result,attr,''): not_equal += attr, if not_equal: if d['student_id'] not in student_ids: student_ids += d['student_id'], #logger.info('%s has inconsistent data for %s' % (result.key,",".join(not_equal))) inconsistent[result.key] = d count += 1 #set_trace() logger.info("found %d students with %d inconsistent results" % (len(student_ids),len(inconsistent))) student_id = '' for key,d in inconsistent.items(): if d['student_id'] != student_id: student_id = d['student_id'] logger.info('fixing course_results for student %s' % student_id) d['key'] = key course_results.modifyRecord(**d) logger.info("fixed %d students with %d inconsistent results" % (len(student_ids),len(inconsistent))) logger.info('finished')