def upload_output(self, input, file): """ POST /upload_output """ output_id = Database.gen_id() try: path = StorageManager.new_output_file(output_id, file["name"]) except ValueError: BaseHandler.raise_exc(BadRequest, "INVALID_FILENAME", "The provided file has an invalid name") StorageManager.save_file(path, file["content"]) file_size = StorageManager.get_file_size(path) try: result = ContestManager.evaluate_output(input["task"], input["path"], path) except: BaseHandler.raise_exc(InternalServerError, "INTERNAL_ERROR", "Failed to evaluate the output") Database.add_output(output_id, input["id"], path, file_size, result) Logger.info( "UPLOAD", "User %s has uploaded the output %s" % (input["token"], output_id)) return InfoHandler.patch_output(Database.get_output(output_id))
def test_get_output(self): Database.add_user("token", "", "") Database.add_task("poldo", "", "", 42, 1) Database.add_input("inputid", "token", "poldo", 1, "/path", 42) Database.add_output("outputid", "inputid", "/path", 42, b'{"validation":42}') Utils.start_contest() res = self.handler.get_output(output_id="outputid", _ip="1.1.1.1") self.assertEqual("outputid", res["id"]) self.assertEqual(42, res["validation"])
def test_call_with_decorators(self): handler = TestBaseHandler.DummyHandler() env = Environ({"wsgi.input": None}) request = Request(env) Database.add_user("token", "", "") Database.add_task("poldo", "", "", 1, 1) Database.add_input("inputid", "token", "poldo", 1, "", 42) Database.add_output("outputid", "inputid", "", 42, "") handler._call(handler.with_decorators, { "input_id": "inputid", "output_id": "outputid" }, request)
def test_get_submissions(self): Utils.start_contest() Database.add_user("token", "", "") Database.add_task("poldo", "", "", 42, 1) Database.add_input("inputid", "token", "poldo", 1, "/path", 42) Database.add_output("outputid", "inputid", "/path", 42, b'{"validation":42,"feedback":42}') Database.add_source("sourceid", "inputid", "/path", 42) Database.add_submission("subid", "inputid", "outputid", "sourceid", 42) res = self.handler.get_submissions(token="token", task="poldo", _ip="1.1.1.1") self.assertEqual(1, len(res["items"])) self.assertEqual("subid", res["items"][0]["id"])
def _insert_data(self): Database.add_user("token", "", "") Database.add_task("poldo", "Poldo", "/path", 42, 1) Database.add_input("inputid", "token", "poldo", 1, "/path", 42) Database.add_output("outputid", "inputid", "/path", 42, "{}") Database.add_source("sourceid", "inputid", "/path", 42)