示例#1
0
                    "Field 'extra_headers' isn't a list of strings"
            assert isinstance(data['order'], int), \
                "Field 'order' isn't an integer"
        except KeyError as exc:
            raise InvalidData("Field %s is missing" % exc.message)
        except AssertionError as exc:
            raise InvalidData(exc.message)

    def set(self, data):
        self.validate(data)
        self.name = data['name']
        self.short_name = data['short_name']
        self.contest = data['contest']
        self.max_score = data['max_score']
        self.score_precision = data['score_precision']
        self.extra_headers = data['extra_headers']
        self.order = data['order']
        self.score_mode = data['score_mode']

    def get(self):
        result = self.__dict__.copy()
        del result['key']
        return result

    def consistent(self):
        from cmsranking.Contest import store as contest_store
        return self.contest in contest_store


store = Store(Task, 'tasks', [submission_store])
示例#2
0
                "Field 'name' isn't a string"
            assert isinstance(data['begin'], int), \
                "Field 'begin' isn't an integer"
            assert isinstance(data['end'], int), \
                "Field 'end' isn't an integer"
            assert data['begin'] <= data['end'], \
                "Field 'begin' is greater than 'end'"
            assert isinstance(data['score_precision'], int), \
                "Field 'score_precision' isn't an integer"
            assert data['score_precision'] >= 0, \
                "Field 'score_precision' is negative"
        except KeyError as exc:
            raise InvalidData("Field %s is missing" % exc.message)
        except AssertionError as exc:
            raise InvalidData(exc.message)

    def set(self, data):
        self.validate(data)
        self.name = data['name']
        self.begin = data['begin']
        self.end = data['end']
        self.score_precision = data['score_precision']

    def get(self):
        result = self.__dict__.copy()
        del result['key']
        return result


store = Store(Contest, 'contests', [task_store])
示例#3
0
                for i in data['extra']:
                    assert isinstance(i, str), \
                        "Field 'extra' isn't a list of strings"
        except KeyError as exc:
            raise InvalidData("Field %s is missing" % exc.message)
        except AssertionError as exc:
            raise InvalidData(exc.message)

    def set(self, data):
        self.validate(data)
        self.submission = data['submission']
        self.time = data['time']
        self.score = (data['score'] if 'score' in data else None)
        self.token = (data['token'] if 'token' in data else None)
        self.extra = (data['extra'] if 'extra' in data else None)

    def get(self):
        result = self.__dict__.copy()
        del result['key']
        for field in ['score', 'token', 'extra']:
            if result[field] is None:
                del result[field]
        return result

    def consistent(self):
        from cmsranking.Submission import store as submission_store
        return self.submission in submission_store


store = Store(Subchange, 'subchanges')
示例#4
0
        except AssertionError as message:
            raise InvalidData(str(message))

    def set(self, data):
        self.validate(data)
        self.f_name = data['f_name']
        self.l_name = data['l_name']
        self.team = data['team']

    def get(self):
        result = self.__dict__.copy()
        del result["key"]
        return result

    def load(self, data):
        self.validate(data)
        self.f_name = data['f_name']
        self.l_name = data['l_name']
        self.team = data['team']

    def dump(self):
        result = self.__dict__.copy()
        del result["key"]
        return result

    def consistent(self):
        return self.team is None or self.team in Team.store


store = Store(User, 'users', [Submission])
示例#5
0
        self.name = None

    @staticmethod
    def validate(data):
        """Validate the given dictionary.

        See if it contains a valid representation of this entity.

        """
        try:
            assert isinstance(data, dict), \
                "Not a dictionary"
            assert isinstance(data['name'], str), \
                "Field 'name' isn't a string"
        except KeyError as exc:
            raise InvalidData("Field %s is missing" % exc.message)
        except AssertionError as exc:
            raise InvalidData(exc.message)

    def set(self, data):
        self.validate(data)
        self.name = data['name']

    def get(self):
        result = self.__dict__.copy()
        del result['key']
        return result


store = Store(Team, 'teams', [user_store])
示例#6
0
def main():
    """Entry point for RWS.

    return (int): exit code (0 on success, 1 on error)

    """
    parser = argparse.ArgumentParser(
        description="Ranking for CMS.")
    parser.add_argument("--config", type=argparse.FileType("rt"),
                        help="override config file")
    parser.add_argument("-d", "--drop", action="store_true",
                        help="drop the data already stored")
    args = parser.parse_args()

    config = Config()
    config.load(args.config)

    if args.drop:
        ans = input("Are you sure you want to delete directory %s? [y/N]" %
                    config.lib_dir).strip().lower()
        if ans in ['y', 'yes']:
            print("Removing directory %s." % config.lib_dir)
            shutil.rmtree(config.lib_dir)
        else:
            print("Not removing directory %s." % config.lib_dir)
        return 1

    stores = dict()

    stores["subchange"] = Store(
        Subchange, os.path.join(config.lib_dir, 'subchanges'), stores)
    stores["submission"] = Store(
        Submission, os.path.join(config.lib_dir, 'submissions'), stores,
        [stores["subchange"]])
    stores["user"] = Store(
        User, os.path.join(config.lib_dir, 'users'), stores,
        [stores["submission"]])
    stores["team"] = Store(
        Team, os.path.join(config.lib_dir, 'teams'), stores,
        [stores["user"]])
    stores["task"] = Store(
        Task, os.path.join(config.lib_dir, 'tasks'), stores,
        [stores["submission"]])
    stores["contest"] = Store(
        Contest, os.path.join(config.lib_dir, 'contests'), stores,
        [stores["task"]])

    stores["contest"].load_from_disk()
    stores["task"].load_from_disk()
    stores["team"].load_from_disk()
    stores["user"].load_from_disk()
    stores["submission"].load_from_disk()
    stores["subchange"].load_from_disk()

    stores["scoring"] = ScoringStore(stores)
    stores["scoring"].init_store()

    toplevel_handler = RoutingHandler(
        DataWatcher(stores, config.buffer_size),
        ImageHandler(
            os.path.join(config.lib_dir, '%(name)s'),
            os.path.join(config.web_dir, 'img', 'logo.png')),
        ScoreHandler(stores),
        HistoryHandler(stores))

    wsgi_app = SharedDataMiddleware(DispatcherMiddleware(
        toplevel_handler, {
            '/contests': StoreHandler(
                stores["contest"],
                config.username, config.password, config.realm_name),
            '/tasks': StoreHandler(
                stores["task"],
                config.username, config.password, config.realm_name),
            '/teams': StoreHandler(
                stores["team"],
                config.username, config.password, config.realm_name),
            '/users': StoreHandler(
                stores["user"],
                config.username, config.password, config.realm_name),
            '/submissions': StoreHandler(
                stores["submission"],
                config.username, config.password, config.realm_name),
            '/subchanges': StoreHandler(
                stores["subchange"],
                config.username, config.password, config.realm_name),
            '/faces': ImageHandler(
                os.path.join(config.lib_dir, 'faces', '%(name)s'),
                os.path.join(config.web_dir, 'img', 'face.png')),
            '/flags': ImageHandler(
                os.path.join(config.lib_dir, 'flags', '%(name)s'),
                os.path.join(config.web_dir, 'img', 'flag.png')),
            '/sublist': SubListHandler(stores),
        }), {'/': config.web_dir})

    servers = list()
    if config.http_port is not None:
        http_server = WSGIServer(
            (config.bind_address, config.http_port), wsgi_app)
        servers.append(http_server)
    if config.https_port is not None:
        https_server = WSGIServer(
            (config.bind_address, config.https_port), wsgi_app,
            certfile=config.https_certfile, keyfile=config.https_keyfile)
        servers.append(https_server)

    try:
        gevent.joinall(list(gevent.spawn(s.serve_forever) for s in servers))
    except KeyboardInterrupt:
        pass
    finally:
        gevent.joinall(list(gevent.spawn(s.stop) for s in servers))
    return 0
示例#7
0
                "Not a dictionary"
            assert isinstance(data['f_name'], six.text_type), \
                "Field 'f_name' isn't a string"
            assert isinstance(data['l_name'], six.text_type), \
                "Field 'l_name' isn't a string"
            assert data['team'] is None or \
                isinstance(data['team'], six.text_type), \
                "Field 'team' isn't a string (or null)"
        except KeyError as exc:
            raise InvalidData("Field %s is missing" % exc.message)
        except AssertionError as exc:
            raise InvalidData(exc.message)

    def set(self, data):
        self.validate(data)
        self.f_name = data['f_name']
        self.l_name = data['l_name']
        self.team = data['team']

    def get(self):
        result = self.__dict__.copy()
        del result['key']
        return result

    def consistent(self):
        from cmsranking.Team import store as team_store
        return self.team is None or self.team in team_store


store = Store(User, 'users', [submission_store])
示例#8
0
            assert isinstance(data['task'], str), \
                "Field 'task' isn't a string"
            assert isinstance(data['time'], int), \
                "Field 'time' isn't an integer (unix timestamp)"
        except KeyError as exc:
            raise InvalidData("Field %s is missing" % exc.message)
        except AssertionError as exc:
            raise InvalidData(exc.message)

    def set(self, data):
        self.validate(data)
        self.user = data['user']
        self.task = data['task']
        self.time = data['time']

    def get(self):
        result = self.__dict__.copy()
        del result['key']
        del result['score']
        del result['token']
        del result['extra']
        return result

    def consistent(self):
        from cmsranking.Task import store as task_store
        from cmsranking.User import store as user_store
        return self.task in task_store and self.user in user_store


store = Store(Submission, 'submissions', [subchange_store])
示例#9
0
        self.short_name = data['short_name']
        self.contest = data['contest']
        self.max_score = data['max_score']
        self.extra_headers = data['extra_headers']
        self.order = data['order']

    def get(self):
        result = self.__dict__.copy()
        del result["key"]
        return result

    def load(self, data):
        self.validate(data)
        self.name = data['name']
        self.short_name = data['short_name']
        self.contest = data['contest']
        self.max_score = data['max_score']
        self.extra_headers = data['extra_headers']
        self.order = data['order']

    def dump(self):
        result = self.__dict__.copy()
        del result["key"]
        return result

    def consistent(self):
        return self.contest in Contest.store


store = Store(Task, 'tasks', [Submission])
示例#10
0
文件: Team.py 项目: sekouperry/cms
            assert type(data) is dict, \
                "Not a dictionary"
            assert type(data['name']) is unicode or \
                   type(data['name']) is str, \
                "Field 'name' isn't a string"
        except KeyError as field:
            raise InvalidData("Field %s is missing" % field)
        except AssertionError as message:
            raise InvalidData(str(message))

    def set(self, data):
        self.validate(data)
        self.name = data['name']

    def get(self):
        result = self.__dict__.copy()
        del result["key"]
        return result

    def load(self, data):
        self.validate(data)
        self.name = data['name']

    def dump(self):
        result = self.__dict__.copy()
        del result["key"]
        return result


store = Store(Team, 'teams', [User])
示例#11
0
        self.task = data['task']
        self.time = data['time']

    def get(self):
        result = self.__dict__.copy()
        del result["key"]
        del result["score"]
        del result["token"]
        del result["extra"]
        return result

    def load(self, data):
        self.validate(data)
        self.user = data['user']
        self.task = data['task']
        self.time = data['time']

    def dump(self):
        result = self.__dict__.copy()
        del result["key"]
        del result["score"]
        del result["token"]
        del result["extra"]
        return result

    def consistent(self):
        return self.task in Task.store and self.user in User.store


store = Store(Submission, 'submissions', [Subchange])
示例#12
0
                "Field 'begin' is greater than 'end'"
        except KeyError as field:
            raise InvalidData("Field %s is missing" % field)
        except AssertionError as message:
            raise InvalidData(str(message))

    def set(self, data):
        self.validate(data)
        self.name = data['name']
        self.begin = data['begin']
        self.end = data['end']

    def get(self):
        result = self.__dict__.copy()
        del result["key"]
        return result

    def load(self, data):
        self.validate(data)
        self.name = data['name']
        self.begin = data['begin']
        self.end = data['end']

    def dump(self):
        result = self.__dict__.copy()
        del result["key"]
        return result


store = Store(Contest, 'contests', [Task])