def main(): global syn parser = argparse.ArgumentParser() parser.add_argument("-u", "--user", help="UserName", default=None) parser.add_argument("-p", "--password", help="Password", default=None) parser.add_argument("--notifications", help="Send error notifications to challenge admins", action="store_true", default=False) parser.add_argument("--send-messages", help="Send error confirmation and validation errors to participants", action="store_true", default=False) parser.add_argument("--dry-run", help="Perform the requested command without updating anything in Synapse", action="store_true", default=False) parser.add_argument("--debug", help="Show verbose error output from Synapse API calls", action="store_true", default=False) subparsers = parser.add_subparsers(title="subcommand") parser_list = subparsers.add_parser('list', help="List submissions to an evaluation or list evaluations") parser_list.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None) parser_list.add_argument("--challenge-project", "--challenge", "--project", metavar="SYNAPSE-ID", default=None) parser_list.add_argument("-s", "--status", default=None) parser_list.add_argument("--all", action="store_true", default=False) parser_list.set_defaults(func=command_list) parser_status = subparsers.add_parser('status', help="Check the status of a submission") parser_status.add_argument("submission") parser_status.set_defaults(func=command_check_status) parser_reset = subparsers.add_parser('reset', help="Reset a submission to RECEIVED for re-scoring (or set to some other status)") parser_reset.add_argument("submission", metavar="SUBMISSION-ID", type=int, nargs='*', help="One or more submission IDs, or omit if using --rescore-all") parser_reset.add_argument("-s", "--status", default='RECEIVED') parser_reset.add_argument("--rescore-all", action="store_true", default=False) parser_reset.set_defaults(func=command_reset) parser_validate = subparsers.add_parser('validate', help="Validate all RECEIVED submissions to an evaluation") parser_validate.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None, ) parser_validate.add_argument("--all", action="store_true", default=False) parser_validate.add_argument("--send-validation-passed-message", help="Send confirmation email to participants when a submission passes validation", action="store_true", default=False) parser_validate.set_defaults(func=command_validate) parser_score = subparsers.add_parser('score', help="Score all VALIDATED submissions to an evaluation") parser_score.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None) parser_score.add_argument("--all", action="store_true", default=False) parser_score.set_defaults(func=command_score) parser_rank = subparsers.add_parser('rank', help="Rank all SCORED submissions to an evaluation") parser_rank.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_rank.set_defaults(func=command_rank) parser_leaderboard = subparsers.add_parser('leaderboard', help="Print the leaderboard for an evaluation") parser_leaderboard.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_leaderboard.add_argument("--out", default=None) parser_leaderboard.set_defaults(func=command_leaderboard) args = parser.parse_args() print "\n" * 2, "=" * 75 print datetime.utcnow().isoformat() ## Acquire lock, don't run two scoring scripts at once try: update_lock = lock.acquire_lock_or_fail('challenge', max_age=timedelta(hours=4)) except lock.LockedException: print u"Is the scoring script already running? Can't acquire lock." # can't acquire lock, so return error code 75 which is a # temporary error according to /usr/include/sysexits.h return 75 try: syn = synapseclient.Synapse(debug=args.debug) if not args.user: args.user = os.environ.get('SYNAPSE_USER', None) if not args.password: args.password = os.environ.get('SYNAPSE_PASSWORD', None) syn.login(email=args.user, password=args.password) args.func(args) except Exception as ex1: sys.stderr.write('Error in scoring script:\n') st = StringIO() traceback.print_exc(file=st) sys.stderr.write(st.getvalue()) sys.stderr.write('\n') if args.notifications: message = error_notification_template.format(message=st.getvalue()) if args.dry_run: print "Dry Run: error notification:", "Exception while scoring " + ismb_akes_challenge.CHALLENGE_NAME print message else: response = syn.sendMessage( userIds=ismb_akes_challenge.ADMIN_USER_IDS, messageSubject="Exception while scoring " + ismb_akes_challenge.CHALLENGE_NAME, messageBody=message) print "sent notification: ", unicode(response).encode('utf-8') finally: update_lock.release() print "\ndone: ", datetime.utcnow().isoformat() print "=" * 75, "\n" * 2
def main(): if conf.CHALLENGE_SYN_ID == "": sys.stderr.write("Please configure your challenge. See sample_challenge.py for an example.") global syn parser = argparse.ArgumentParser() parser.add_argument("-u", "--user", help="UserName", default=None) parser.add_argument("-p", "--password", help="Password", default=None) parser.add_argument("--notifications", help="Send error notifications to challenge admins", action="store_true", default=False) parser.add_argument("--send-messages", help="Send validation and scoring messages to participants", action="store_true", default=False) parser.add_argument("--acknowledge-receipt", help="Send confirmation message on passing validation to participants", action="store_true", default=False) parser.add_argument("--dry-run", help="Perform the requested command without updating anything in Synapse", action="store_true", default=False) parser.add_argument("--debug", help="Show verbose error output from Synapse API calls", action="store_true", default=False) parser.add_argument("--threads", help="Number of parallel processes to use for validation and scoring", type=int, default=1) subparsers = parser.add_subparsers(title="subcommand") parser_list = subparsers.add_parser('list', help="List submissions to an evaluation or list evaluations") parser_list.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None) parser_list.add_argument("--challenge-project", "--challenge", "--project", metavar="SYNAPSE-ID", default=None) parser_list.add_argument("-s", "--status", default=None) parser_list.add_argument("--all", action="store_true", default=False) parser_list.set_defaults(func=command_list) parser_status = subparsers.add_parser('status', help="Check the status of a submission") parser_status.add_argument("submission") parser_status.set_defaults(func=command_check_status) parser_reset = subparsers.add_parser('reset', help="Reset a submission to RECEIVED for re-scoring (or set to some other status)") parser_reset.add_argument("submission", metavar="SUBMISSION-ID", type=int, nargs='*', help="One or more submission IDs, or omit if using --rescore-all") parser_reset.add_argument("-s", "--status", default='RECEIVED') parser_reset.add_argument("--rescore-all", action="store_true", default=False) parser_reset.add_argument("--rescore", metavar="EVALUATION-ID", type=int, nargs='*', help="One or more evaluation IDs to rescore") parser_reset.set_defaults(func=command_reset) parser_validate = subparsers.add_parser('validate', help="Validate all RECEIVED submissions to an evaluation") parser_validate.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None) parser_validate.add_argument("--all", action="store_true", default=False) parser_validate.add_argument("--canCancel", action="store_true", default=False) parser_validate.set_defaults(func=command_validate) parser_score = subparsers.add_parser('score', help="Score all VALIDATED submissions to an evaluation") parser_score.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None) parser_score.add_argument("--all", action="store_true", default=False) parser_score.add_argument("--canCancel", action="store_true", default=False) parser_score.set_defaults(func=command_score) parser_rank = subparsers.add_parser('rank', help="Rank all SCORED submissions to an evaluation") parser_rank.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_rank.set_defaults(func=command_rank) parser_archive = subparsers.add_parser('archive', help="Archive submissions to a challenge") parser_archive.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_archive.add_argument("archiveType",metavar="TYPE", choices=["submission","writeup"]) parser_archive.add_argument("destination", metavar="FOLDER-ID", default=None) parser_archive.add_argument("-q", "--query", default=None) parser_archive.add_argument("-n", "--name", default=None) parser_archive.set_defaults(func=command_archive) parser_leaderboard = subparsers.add_parser('leaderboard', help="Print the leaderboard for an evaluation") parser_leaderboard.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_leaderboard.add_argument("--out", default=None) parser_leaderboard.set_defaults(func=command_leaderboard) args = parser.parse_args() print "\n" * 2, "=" * 75 print datetime.utcnow().isoformat() ## Acquire lock, don't run two scoring scripts at once try: update_lock = lock.acquire_lock_or_fail('challenge', max_age=timedelta(hours=4)) except lock.LockedException: print u"Is the scoring script already running? Can't acquire lock." # can't acquire lock, so return error code 75 which is a # temporary error according to /usr/include/sysexits.h return 75 try: syn = synapseclient.Synapse(debug=args.debug) if not args.user: args.user = os.environ.get('SYNAPSE_USER', None) if not args.password: args.password = os.environ.get('SYNAPSE_PASSWORD', None) syn.login(email=args.user, password=args.password) ## initialize messages messages.syn = syn messages.dry_run = args.dry_run messages.send_messages = args.send_messages messages.send_notifications = args.notifications messages.acknowledge_receipt = args.acknowledge_receipt args.func(args) except Exception as ex1: sys.stderr.write('Error in scoring script:\n') st = StringIO() traceback.print_exc(file=st) sys.stderr.write(st.getvalue()) sys.stderr.write('\n') if conf.ADMIN_USER_IDS: messages.error_notification(userIds=conf.ADMIN_USER_IDS, message=st.getvalue(), queue_name=conf.CHALLENGE_NAME) finally: update_lock.release() print "\ndone: ", datetime.utcnow().isoformat() print "=" * 75, "\n" * 2
def main(): if conf.CHALLENGE_SYN_ID == "": sys.stderr.write("Please configure your challenge. See sample_challenge.py for an example.") global syn parser = argparse.ArgumentParser() parser.add_argument("-u", "--user", help="UserName", default=None) parser.add_argument("-p", "--password", help="Password", default=None) parser.add_argument("--notifications", help="Send error notifications to challenge admins", action="store_true", default=False) parser.add_argument("--send-messages", help="Send validation and scoring messages to participants", action="store_true", default=False) parser.add_argument("--acknowledge-receipt", help="Send confirmation message on passing validation to participants", action="store_true", default=False) parser.add_argument("--dry-run", help="Perform the requested command without updating anything in Synapse", action="store_true", default=False) parser.add_argument("--debug", help="Show verbose error output from Synapse API calls", action="store_true", default=False) subparsers = parser.add_subparsers(title="subcommand") parser_list = subparsers.add_parser('list', help="List submissions to an evaluation or list evaluations") parser_list.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None) parser_list.add_argument("--challenge-project", "--challenge", "--project", metavar="SYNAPSE-ID", default=None) parser_list.add_argument("-s", "--status", default=None) parser_list.add_argument("--all", action="store_true", default=False) parser_list.set_defaults(func=command_list) parser_status = subparsers.add_parser('status', help="Check the status of a submission") parser_status.add_argument("submission") parser_status.set_defaults(func=command_check_status) parser_reset = subparsers.add_parser('reset', help="Reset a submission to RECEIVED for re-scoring (or set to some other status)") parser_reset.add_argument("submission", metavar="SUBMISSION-ID", type=int, nargs='*', help="One or more submission IDs, or omit if using --rescore-all") parser_reset.add_argument("-s", "--status", default='RECEIVED') parser_reset.add_argument("--rescore-all", action="store_true", default=False) parser_reset.add_argument("--rescore", metavar="EVALUATION-ID", type=int, nargs='*', help="One or more evaluation IDs to rescore") parser_reset.set_defaults(func=command_reset) parser_validate = subparsers.add_parser('validate', help="Validate all RECEIVED submissions to an evaluation") parser_validate.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None, ) parser_validate.add_argument("--all", action="store_true", default=False) parser_validate.set_defaults(func=command_validate) parser_score = subparsers.add_parser('score', help="Score all VALIDATED submissions to an evaluation") parser_score.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None) parser_score.add_argument("--all", action="store_true", default=False) parser_score.set_defaults(func=command_score) parser_rank = subparsers.add_parser('rank', help="Rank all SCORED submissions to an evaluation") parser_rank.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_rank.set_defaults(func=command_rank) parser_archive = subparsers.add_parser('archive', help="Archive submissions to a challenge") parser_archive.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_archive.add_argument("destination", metavar="FOLDER-ID", default=None) parser_archive.add_argument("-q", "--query", default=None) parser_archive.add_argument("-n", "--name", default=None) parser_archive.set_defaults(func=command_archive) parser_leaderboard = subparsers.add_parser('leaderboard', help="Print the leaderboard for an evaluation") parser_leaderboard.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_leaderboard.add_argument("--out", default=None) parser_leaderboard.set_defaults(func=command_leaderboard) args = parser.parse_args() print "\n" * 2, "=" * 75 print datetime.utcnow().isoformat() ## Acquire lock, don't run two scoring scripts at once try: update_lock = lock.acquire_lock_or_fail('challenge', max_age=timedelta(hours=4)) except lock.LockedException: print u"Is the scoring script already running? Can't acquire lock." # can't acquire lock, so return error code 75 which is a # temporary error according to /usr/include/sysexits.h return 75 try: syn = synapseclient.Synapse(debug=args.debug) if not args.user: args.user = os.environ.get('SYNAPSE_USER', None) if not args.password: args.password = os.environ.get('SYNAPSE_PASSWORD', None) syn.login(email=args.user, password=args.password) ## initialize messages messages.syn = syn messages.dry_run = args.dry_run messages.send_messages = args.send_messages messages.send_notifications = args.notifications messages.acknowledge_receipt = args.acknowledge_receipt args.func(args) except Exception as ex1: sys.stderr.write('Error in scoring script:\n') st = StringIO() traceback.print_exc(file=st) sys.stderr.write(st.getvalue()) sys.stderr.write('\n') if conf.ADMIN_USER_IDS: messages.error_notification(userIds=conf.ADMIN_USER_IDS, message=st.getvalue(), queue_name=conf.CHALLENGE_NAME) finally: update_lock.release() print "\ndone: ", datetime.utcnow().isoformat() print "=" * 75, "\n" * 2
def main(): global syn parser = argparse.ArgumentParser() parser.add_argument("-u", "--user", help="UserName", default=None) parser.add_argument("-p", "--password", help="Password", default=None) parser.add_argument("--challengeName", help="Challenge Name", required=True) parser.add_argument("--notifications", help="Send error notifications to challenge admins", action="store_true", default=False) parser.add_argument("--send-messages", help="Send validation and scoring messages to participants", action="store_true", default=False) parser.add_argument("--acknowledge-receipt", help="Send confirmation message on passing validation to participants", action="store_true", default=False) parser.add_argument("--dry-run", help="Perform the requested command without updating anything in Synapse", action="store_true", default=False) parser.add_argument("--debug", help="Show verbose error output from Synapse API calls", action="store_true", default=False) subparsers = parser.add_subparsers(title="subcommand") parser_validate = subparsers.add_parser('validate', help="Validate all RECEIVED submissions to an evaluation") parser_validate.add_argument("evaluation", metavar="EVALUATION-IDs", nargs='*', default=None) parser_validate.add_argument("--admin", metavar="ADMIN", default=None) parser_validate.add_argument("--public", action="store_true", default=False) parser_validate.set_defaults(func=command_validate) parser_archive = subparsers.add_parser('archive', help="Archive submissions to a challenge") parser_archive.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_archive.add_argument("--status",metavar="STATUS", default="VALIDATED") parser_archive.add_argument("--reArchive", action="store_true", default=False) parser_archive.set_defaults(func=command_archive) args = parser.parse_args() print("\n" * 2, "=" * 75) print(datetime.utcnow().isoformat()) ## Acquire lock, don't run two scoring scripts at once try: update_lock = lock.acquire_lock_or_fail('challenge', max_age=timedelta(hours=4)) except lock.LockedException: print("Is the scoring script already running? Can't acquire lock.") # can't acquire lock, so return error code 75 which is a # temporary error according to /usr/include/sysexits.h return 75 try: syn = synapseclient.Synapse(debug=args.debug) if not args.user: args.user = os.environ.get('SYNAPSE_USER', None) if not args.password: args.password = os.environ.get('SYNAPSE_PASSWORD', None) syn.login(email=args.user, password=args.password) ## initialize messages messages.syn = syn messages.dry_run = args.dry_run messages.send_messages = args.send_messages messages.send_notifications = args.notifications messages.acknowledge_receipt = args.acknowledge_receipt args.func(args) except Exception as ex1: sys.stderr.write('Error in scoring script:\n') st = StringIO() traceback.print_exc(file=st) sys.stderr.write(st.getvalue()) sys.stderr.write('\n') if conf.ADMIN_USER_IDS: messages.error_notification(userIds=conf.ADMIN_USER_IDS, message=st.getvalue(), queue_name=args.challengeName) finally: update_lock.release() print("\ndone: ", datetime.utcnow().isoformat()) print("=" * 75, "\n" * 2)
def main(): global syn parser = argparse.ArgumentParser() parser.add_argument("-u", "--user", help="UserName", default=None) parser.add_argument("-p", "--password", help="Password", default=None) parser.add_argument("--notifications", help="Send error notifications to challenge admins", action="store_true", default=False) parser.add_argument( "--send-messages", help="Send error confirmation and validation errors to participants", action="store_true", default=False) parser.add_argument( "--dry-run", help= "Perform the requested command without updating anything in Synapse", action="store_true", default=False) parser.add_argument( "--debug", help="Show verbose error output from Synapse API calls", action="store_true", default=False) subparsers = parser.add_subparsers(title="subcommand") parser_list = subparsers.add_parser( 'list', help="List submissions to an evaluation or list evaluations") parser_list.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None) parser_list.add_argument("--challenge-project", "--challenge", "--project", metavar="SYNAPSE-ID", default=None) parser_list.add_argument("-s", "--status", default=None) parser_list.add_argument("--all", action="store_true", default=False) parser_list.set_defaults(func=command_list) parser_status = subparsers.add_parser( 'status', help="Check the status of a submission") parser_status.add_argument("submission") parser_status.set_defaults(func=command_check_status) parser_reset = subparsers.add_parser( 'reset', help= "Reset a submission to RECEIVED for re-scoring (or set to some other status)" ) parser_reset.add_argument( "submission", metavar="SUBMISSION-ID", type=int, nargs='*', help="One or more submission IDs, or omit if using --rescore-all") parser_reset.add_argument("-s", "--status", default='RECEIVED') parser_reset.add_argument("--rescore-all", action="store_true", default=False) parser_reset.set_defaults(func=command_reset) parser_validate = subparsers.add_parser( 'validate', help="Validate all RECEIVED submissions to an evaluation") parser_validate.add_argument( "evaluation", metavar="EVALUATION-ID", nargs='?', default=None, ) parser_validate.add_argument("--all", action="store_true", default=False) parser_validate.add_argument( "--send-validation-passed-message", help= "Send confirmation email to participants when a submission passes validation", action="store_true", default=False) parser_validate.set_defaults(func=command_validate) parser_score = subparsers.add_parser( 'score', help="Score all VALIDATED submissions to an evaluation") parser_score.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None) parser_score.add_argument("--all", action="store_true", default=False) parser_score.set_defaults(func=command_score) parser_rank = subparsers.add_parser( 'rank', help="Rank all SCORED submissions to an evaluation") parser_rank.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_rank.set_defaults(func=command_rank) parser_leaderboard = subparsers.add_parser( 'leaderboard', help="Print the leaderboard for an evaluation") parser_leaderboard.add_argument("evaluation", metavar="EVALUATION-ID", default=None) parser_leaderboard.add_argument("--out", default=None) parser_leaderboard.set_defaults(func=command_leaderboard) args = parser.parse_args() print "\n" * 2, "=" * 75 print datetime.utcnow().isoformat() ## Acquire lock, don't run two scoring scripts at once try: update_lock = lock.acquire_lock_or_fail('challenge', max_age=timedelta(hours=4)) except lock.LockedException: print u"Is the scoring script already running? Can't acquire lock." # can't acquire lock, so return error code 75 which is a # temporary error according to /usr/include/sysexits.h return 75 try: syn = synapseclient.Synapse(debug=args.debug) if not args.user: args.user = os.environ.get('SYNAPSE_USER', None) if not args.password: args.password = os.environ.get('SYNAPSE_PASSWORD', None) syn.login(email=args.user, password=args.password) args.func(args) except Exception as ex1: sys.stderr.write('Error in scoring script:\n') st = StringIO() traceback.print_exc(file=st) sys.stderr.write(st.getvalue()) sys.stderr.write('\n') if args.notifications: message = error_notification_template.format(message=st.getvalue()) if args.dry_run: print "Dry Run: error notification:", "Exception while scoring " + ismb_akes_challenge.CHALLENGE_NAME print message else: response = syn.sendMessage( userIds=ismb_akes_challenge.ADMIN_USER_IDS, messageSubject="Exception while scoring " + ismb_akes_challenge.CHALLENGE_NAME, messageBody=message) print "sent notification: ", unicode(response).encode('utf-8') finally: update_lock.release() print "\ndone: ", datetime.utcnow().isoformat() print "=" * 75, "\n" * 2
def main(): parser = argparse.ArgumentParser() parser.add_argument("submissionId", metavar="Submission Id") parser.add_argument("--challengePredFolder", required=True) parser.add_argument("--challengeLogFolder", required=True) parser.add_argument("--outputDir", required=True) parser.add_argument("--mountedVolumes", nargs="*", required=True) parser.add_argument("--configFile", required=True) parser.add_argument("--timeQuota", help="Time quota in milliseconds", type=int) #Has default values parser.add_argument("-u", "--user", help="UserName", default=None) parser.add_argument("-p", "--password", help="Password", default=None) parser.add_argument("--notifications", help="Send error notifications to challenge admins", action="store_true", default=False) parser.add_argument( "--send-messages", help="Send validation and scoring messages to participants", action="store_true", default=False) parser.add_argument( "--acknowledge-receipt", help="Send confirmation message on passing validation to participants", action="store_true", default=False) parser.add_argument( "--dry-run", help= "Perform the requested command without updating anything in Synapse", action="store_true", default=False) parser.add_argument( "--debug", help="Show verbose error output from Synapse API calls", action="store_true", default=False) parser.add_argument("--canCancel", action="store_true", default=False) #Test run #python runDockerSubmission.py 9636069 --challengePredFolder syn7998461 --challengeLogFolder syn9974718 --configFile config.json --mountedVolumes /home/ubuntu/sc2/Celgene-Multiple-Myeloma-Challenge/docker_agent/test-data:/test-data:ro /.synapseCache:/.synapseCache:ro -u $SYNAPSE_USER -p $SYNAPSE_PASS --outputDir /home/ubuntu/sc2/Celgene-Multiple-Myeloma-Challenge/docker_agent/9636069 --send-messages --notifications args = parser.parse_args() print "\n" * 2, "=" * 75 print datetime.utcnow().isoformat() # Acquire lock, don't run two scoring scripts at once try: submission_lock = lock.acquire_lock_or_fail( args.submissionId, max_age=timedelta(hours=9000)) except lock.LockedException: print u"Is the scoring script already running? Can't acquire lock." # can't acquire lock, so return error code 75 which is a # temporary error according to /usr/include/sysexits.h return 75 try: syn = synapseclient.Synapse(debug=args.debug) if not args.user: args.user = os.environ.get('SYNAPSE_USER', None) if not args.password: args.password = os.environ.get('SYNAPSE_PASSWORD', None) syn.login(email=args.user, password=args.password) #Add client into arguments client = docker.from_env() client.login(args.user, args.password, registry="http://docker.synapse.org") #Add syn and client into arguments args.syn = syn args.client = client ## initialize messages messages.syn = syn messages.dry_run = args.dry_run messages.send_messages = args.send_messages messages.send_notifications = args.notifications messages.acknowledge_receipt = args.acknowledge_receipt command_run(args) except Exception as ex1: sys.stderr.write('Error in scoring script:\n') st = StringIO() traceback.print_exc(file=st) sys.stderr.write(st.getvalue()) sys.stderr.write('\n') if ADMIN_USER_IDS: messages.error_notification(userIds=ADMIN_USER_IDS, message=st.getvalue(), queue_name=CHALLENGE_NAME) finally: submission_lock.release() print "\ndone: ", datetime.utcnow().isoformat() print "=" * 75, "\n" * 2
def main(): parser = argparse.ArgumentParser() parser.add_argument("-u", "--user", help="UserName", default=None) parser.add_argument("-p", "--password", help="Password", default=None) parser.add_argument("-c", "--config", help="Challenge Config File", required=True) parser.add_argument( "--storeEvalConfig", help="Store Evaluation quota configuration through the config file", action="store_true") parser.add_argument( "--dry-run", help= "Perform the requested command without updating anything in Synapse", action="store_true") parser.add_argument( "--debug", help="Show verbose error output from Synapse API calls", action="store_true") subparsers = parser.add_subparsers(title="subcommand") parser_validate = subparsers.add_parser( 'validate', help="Validate all RECEIVED submissions to an evaluation") parser_validate.add_argument("evaluation", metavar="EVALUATION-ID", nargs='?', default=None) parser_validate.add_argument("--all", action="store_true", default=False) parser_validate.add_argument("--canCancel", action="store_true", default=False) parser_validate.set_defaults(func=command_validate) args = parser.parse_args() logger.info("\n" * 2 + "=" * 75) syn = synapseclient.Synapse(debug=args.debug) try: syn.login(email=args.user, password=args.password, rememberMe=True) except Exception as error: logger.error("Please provide correct Synapse credentials") raise error with open(args.config) as config: args.challenge_config = readYaml(config) checkAndConfigEval(syn, args.challenge_config, args.setEvalConfig) ## Acquire lock, don't run two scoring scripts at once try: update_lock = lock.acquire_lock_or_fail('challenge', max_age=timedelta(hours=4)) except lock.LockedException: logger.error( "Is the scoring script already running? Can't acquire lock.") # can't acquire lock, so return error code 75 which is a # temporary error according to /usr/include/sysexits.h return 75 try: args.func(syn, args) except Exception as ex1: logger.error('Error in scoring harness:\n') st = StringIO() traceback.print_exc(file=st) logger.error(st.getvalue()) logger.error('\n') finally: update_lock.release() logger.info("DONE EVAL\n\n" + "=" * 75)