Source code for challenges.conf

import argparse
import glob
import importlib
import os
import sys


[docs]class Conf: def __init__(self): sys.path.insert(0, '.') sys.setrecursionlimit(15000) self.root = os.path.realpath('.') self.parser = None self.args = None path = '{0}/version.txt'.format(os.path.realpath( os.path.dirname(__file__))) with open(path) as f: self.version = f.read().strip()
[docs] def parse_arguments(self): self.parser = argparse.ArgumentParser() self.parser.add_argument('challenge', nargs='?', help='the challenge to run, to scaffold or ' 'to test') self.parser.add_argument('-f', '--file', action='store', help='load sample from given file') self.parser.add_argument('-k', '--klass', action='store_true', help='use sample form challenge class file') self.parser.add_argument('-l', '--list', action='store_true', help='list challenges') self.parser.add_argument('-s', '--scaffold', action='store_true', help="scaffold challenge") self.parser.add_argument('-u', '--unittest', action='store_true', help='unittest challenge') self.parser.add_argument('-v', '--verbose', action='store_true', help='verbose output') self.parser.add_argument('-V', '--version', action='version', version='%(prog)s {}'.format(self.version)) self.parser.add_argument('-w', '--write', action='store_true', help='write input and sample file into ' 'challenge directory') if len(sys.argv) == 1: self.print_help() self.args = self.parser.parse_args() if self.args.challenge and self.args.challenge[-1:] == '/': self.args.challenge = self.args.challenge[0:-1]
[docs] def print_help(self): self.parser.print_help() sys.exit(1)
[docs] def get_challenge_dir(self): return self.root + '/' + self.args.challenge
[docs] def get_challenge_file(self): challenge = self.args.challenge return self.root + '/' + challenge + '/challenge.py'
[docs] def get_challenge_init_file(self): challenge = self.args.challenge return self.root + '/' + challenge + '/__init__.py'
[docs] def get_unittest_file(self): challenge = self.args.challenge return self.root + '/' + challenge + '/test.py'
[docs] def get_input_file(self): return os.path.realpath(self.args.file)
[docs] def get_sample_file(self): return os.path.realpath(self.get_challenge_dir() + '/sample.txt')
[docs] def get_result_file(self): return os.path.realpath(self.get_challenge_dir() + '/result.txt')
[docs] def get_latest_file(self): return os.path.realpath(self.get_challenge_dir() + '/latest.txt')
[docs] def get_latest_at_root(self): return os.path.realpath(self.root + '/latest.txt')
[docs] def get_challenges(self): pattern = self.root + '/*/' return [d for d in (os.path.basename(d[:-1]) for d in glob.glob(pattern)) if d[0:1] == d[0:1].upper() and d[0:1] != '_' ]
[docs] def get_challenge_name(self): return self.args.challenge
[docs] def get_full_qualified_challenge_name(self): challenge = self.get_challenge_name() return challenge + '.challenge.' + challenge + 'Challenge'
[docs] def get_full_qualified_unittest_name(self): challenge = self.get_challenge_name() return challenge + '.test.' + challenge + 'Test'
[docs] def get_challenge(self): return self.get_class(self.get_full_qualified_challenge_name())()
[docs] def get_unittest(self): return self.get_class(self.get_full_qualified_unittest_name())
[docs] @staticmethod def get_class(class_): parts = class_.split('.') module = ".".join(parts[:-1]) return getattr(importlib.import_module(module), parts[-1])