Esempio n. 1
0
 def parse_schools(string):
     """Parse a comma-separated list of numbers and integers into a list of
     School instances."""
     schools = set(school for school in Schools.select())
     try:
         string = string.lstrip()
     except AttributeError:
         return list(schools)
     if string[:3] == "NOT":
         avoid = set()
         for label in string[3:].split(","):
             label = label.strip()
             try:
                 avoid.update(Schools.get(label))
             except TooManyObjectsError:
                 pass
             except SQLObjectNotFound:
                 pass
         return list(schools - avoid)
     else:
         include = []
         for label in string.split(","):
             label = label.strip()
             try:
                 include.append(Schools.get(label))
             except TooManyObjectsError:
                 pass
             except SQLObjectNotFound:
                 pass
         return include
Esempio n. 2
0
def parse_arguments(arguments):
    """Parse command line arguments.  Returns the tuple (options, (given_name,
    surname, school, gender)).  May raise a ConnectionError."""
    option_parser = OptionParser()
    option_parser.set_usage("%prog [options] GIVEN_NAME SURNAME SCHOOL GENDER")
    option_parser.add_option("--competition-year", default=date.today().year,
                             type="int")
    option_parser.add_option("-n", "--nicknames")
    option_parser.add_option("-y", "--year", help="Graduation year", type="int")
    options, arguments = option_parser.parse_args(arguments[1:])
    index = count(0)
    try:
        connect(options.server)
        given_name = arguments[index.next()]
        surname = arguments[index.next()]
        school_id = Schools.get(arguments[index.next()])
        gender = parse_gender(arguments[index.next()])
    except ConnectionError, error:
        option_parser.error(error)
Esempio n. 3
0
def verify(runners, options):
    """Check that all runners have the fields required by Runners.create().
    Raises a VerificationError if any problems are encountered."""
    for runner in runners:
        #Leaving out the names is not allowed
        for field in ("given_name", "surname"):
            if field not in runner:
                raise VerificationError("Required field \"%s\" left blank." %
                                        field)
        #School must be defined
        if "school" not in runner:
            if options.school is None:
                raise VerificationError("Required field \"school\" left blank.")
            runner["school"] = options.school
        else:
            runner["school"] = Schools.get(runner["school"])
        #Gender must be defined
        if "gender" not in runner:
            if options.gender is None:
                raise VerificationError("Required field \"gender\" left blank.")
            runner["gender"] = options.gender
        for field in ("year", "nicknames", "competition_year"):
            if field not in runner:
                runner[field] = None
Esempio n. 4
0
from common import connect, ConnectionError, gender_callback, OptionParser

def parse_arguments(arguments):
    """Parse command line arguments.  Returns the tuple (options,
    arguments)."""
    option_parser = OptionParser()
    option_parser.add_option("-g", "--gender", action="callback",
                             callback=gender_callback, type="str")
    option_parser.add_option("--school")
    options, arguments = option_parser.parse_args(arguments[1:])
    try:
        connect(options.server)
    except ConnectionError, error:
        option_parser.error(error)
    if options.school is not None:
        options.school = Schools.get(options.school)
    return options, arguments

@main_function(parse_arguments)
def main(options, arguments):
    """Read a YAML description of the runners from stdin, and save it to the
    database."""
    try:
        runners = load(stdin.read())
        verify(runners, options)
    except KeyboardInterrupt:
        return 1
    except ScannerError, error:
        print >> stderr, error
        return 1
    except (SQLObjectNotFound, VerificationError), error:
Esempio n. 5
0
def parse_arguments(arguments):
    """Parse command line arguments.  Returns the tuple (options, (school,)).
    May raise a ConnectionError."""
    option_parser = OptionParser("%prog SCHOOL")
    option_parser.add_option("-g", "--sort-by-gender", action="store_true",
                             default=False)
    option_parser.add_option("-y", "--year", default=date.today().year,
                             type="int")
    options, arguments = option_parser.parse_args(arguments[1:])
    try:
        connect(options.server)
    except ConnectionError, error:
        option_parser.error(error)
    index = count()
    try:
        school = Schools.get(arguments[next(index)])
    except (TooManyObjectsError, SQLObjectNotFound), error:
        option_parser.error(error)
    except IndexError:
        option_parser.error("Required argument not provided.")
    return options, (school,)

@main_function(parse_arguments)
def main(options, (school,)):
    runners = irunners(school, options.year, options.sort_by_gender)
    pads = [str.rjust, None, None, None]
    runners = Table(runners, column_seperator=" | ", pads=pads)
    for runner in runners:
        print runner

def irunners(school, year, sort_by_gender=False):