## Script (Python) "purgeCourseResultsObjects" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## # $Id: purgeCourseResultsObjects.py 3206 2008-02-23 22:59:10Z henrik $ """ """ 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.purgeCourseResultsObjects') from Products.AdvancedQuery import Eq, Between, Le,In aq_results = context.course_results.evalAdvancedQuery aq_portal = context.portal_catalog_real.evalAdvancedQuery #aq_students = context.students_catalog.evalAdvancedQuery students = context.portal_url.getPortalObject().campus.students request = context.REQUEST session = request.SESSION response = request.RESPONSE setheader = request.RESPONSE.setHeader results = aq_portal(Eq('portal_type','StudentCourseResult')) total = len(results) logger.info("found %d course result objects" % (total)) count = 0 moved = 0 cocount = 0 commit_after = 20 current_student_id = '' current_level_id = '' to_move = [] for result in results: count += 1 pl = result.getPath().split('/') student_id = pl[-4] level_id = pl[-2] if student_id != current_student_id: if current_student_id: to_move += (current_student_id,current_level_id), current_student_id = student_id current_level_id = level_id elif level_id != current_level_id: to_move += (current_student_id,current_level_id), current_level_id = level_id for student_id,level_id in to_move: try: study_level = getattr(getattr(getattr(students,student_id), "study_course") ,level_id) except: logger.info('%s level %s not found' % (student_id,level_id)) continue context.course_results.moveResultsHere(study_level,student_id) moved += 1 logger.info("moved results of student %s" % (student_id)) if moved and not moved % commit_after: context.waeup_tool.doCommit() logger.info("Committing %s transactions, total %s" % (commit_after,len(to_move))) # cocount += 1 # if cocount > 2: # break msg = "finished moving results of %d students" % (moved) logger.info(msg) #rwrite(msg)