def upload_source(self, input, file):
        """
        POST /upload_source
        """
        alerts = []
        if get_exeflags(file["content"]):
            alerts.append({
                "severity": "warning",
                "message": "You have submitted an executable! Please send the "
                           "source code."
            })
            Logger.info("UPLOAD",
                        "User %s has uploaded an executable" % input["token"])
        if not alerts:
            alerts.append({
                "severity": "success",
                "message": "Source file uploaded correctly."
            })

        source_id = Database.gen_id()
        try:
            path = StorageManager.new_source_file(source_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)

        Database.add_source(source_id, input["id"], path, file_size)
        Logger.info("UPLOAD", "User %s has uploaded the source %s" % (
            input["token"], source_id))
        output = BaseHandler.format_dates(Database.get_source(source_id))
        output["validation"] = {"alerts": alerts}
        return output
예제 #2
0
    def test_get_source(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_source("sourceid", "inputid", "/path", 42)

        res = self.handler.get_source(source_id="sourceid", _ip="1.1.1.1")
        self.assertEqual("sourceid", res["id"])
예제 #3
0
    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)