-
Notifications
You must be signed in to change notification settings - Fork 0
/
gcj_init_contest.py
executable file
·81 lines (65 loc) · 2.76 KB
/
gcj_init_contest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
#
# Copyright 2011 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""This file implements the main function for the contest initializer, which
uses the ContestManager class in the lib directory."""
import optparse
import os
import sys
from lib import constants
from lib import contest_manager
from lib import error
def main():
"""Main function for the contest initializer script.
This script receives one positional argument, which is the contest id.
"""
try:
# Create an option parser and use it to parse the supplied arguments.
program_version = 'GCJ contest crawler {0}'.format(
constants.VERSION)
parser = optparse.OptionParser(usage='%prog [options] contest_id',
version=program_version)
parser.add_option('-p', '--passwd', action='store', dest='password',
help=('Password used to login in the server, will be '
'asked if not specified'))
parser.add_option('--base_dir', action='store', dest='base_dir',
help=('Base directory used to parametrize configuration '
'file paths'))
parser.set_defaults(base_dir=os.path.dirname(os.path.realpath(__file__)))
options, args = parser.parse_args()
# Store the script location in a runtime constant, so it can be used by
# the library to locate the configuration files.
constants.SetRuntimeConstant('base_dir', options.base_dir)
# Check that the number of arguments is valid.
if len(args) > 1:
raise error.OptionError('need 0 or 1 positional arguments')
# Extract the contest id from the arguments or use None to initialize for
# the current contest.
contest_id = args[0] if len(args) == 1 else None
contest_manager.Initialize(-1, contest_id, options.password)
except error.OptionError as e:
parser.print_usage()
program_basename = os.path.basename(sys.argv[0])
sys.stderr.write('{0}: error: {1}\n'.format(program_basename, e))
sys.exit(1)
except error.UserError as e:
sys.stderr.write(str(e))
sys.exit(1)
except error.CommandlineError as e:
sys.stderr.write('{0}: {1}'.format(e.__class__.__name__, e))
sys.exit(1)
if __name__ == '__main__':
main()