Source code for uw.local.teaching.bin.submit_exam_print

"""Automatic printing of final examinations.

Python process to print examinations, either individually or an entire
final examination print period at once.
"""

import argparse
from sys import exit

from uw.sql.wrap import open_psycopg2_db_service_cursor
from ..db.cursor import Cursor

from ..db.exam_print import print_examination, submit_period_print_jobs

[docs]def main (): parser = argparse.ArgumentParser () parser.add_argument ('--dry-run', action='store_true') group = parser.add_mutually_exclusive_group (required=True) group.add_argument ('--ropp', nargs="?", default=argparse.SUPPRESS, type=int, metavar='period_id') group.add_argument ('--exam', nargs="?", default=argparse.SUPPRESS, type=int, metavar='exam_id') args = parser.parse_args () cursor = open_psycopg2_db_service_cursor (cursor_class=Cursor) if 'exam' in args: exam_id = args.exam exams = cursor.execute_tuples ("select * from exam_exam_plus where (%(exam_id)s is null or exam_id = %(exam_id)s) and sequence_assigned is not null and master_approved is not null and master_accepted is null", exam_id=exam_id) if exam_id is not None and not exams: exit ('No such exam or exam already printed or not ready to print: %d' % exam_id) for exam in exams: if args.dry_run: print('Would process %s (%d)' % (exam.full_title, exam.exam_id)) else: print_examination (cursor, exam) elif 'ropp' in args: period_id = args.ropp periods = cursor.execute_tuples ("select * from exam_print_deadline_plus where (term_id, administer_admin_id, period_id) = (uw_term_current (), 20050, %(period_id)s) and deadline_processed is null", period_id=period_id) if not periods: exit ('No such print period or already processed: %d' % period_id) for period in periods: if args.dry_run: print('Would process period beginning %s (%d)' % (period.period_begin_date, period.period_id)) else: submit_period_print_jobs (cursor, period) cursor.connection.commit ()