Beispiel #1
0
def upload_markup():
    token = validate_token()

    if not token:
        return "Forbidden", 403

    job_id = token['job']['id']
    project_id = token['project']['id']

    r = execute_one(
        """
        SELECT count(*) FROM job_markup WHERE job_id = %s
    """, (job_id, ))

    if r[0] > 0:
        return "Forbidden", 403

    if len(request.files) > 10:
        return "Too many uploads", 400

    for name, f in request.files.iteritems():
        try:
            if not allowed_file(f.filename, ("json", )):
                return "Filetype not allowed", 400

            path = '/tmp/data.json'
            f.save(path)

            # Check size
            if os.path.getsize(path) > 8 * 1024 * 1024:
                return "File too big", 400

            # Parse it
            with open(path, 'r') as md:
                content = md.read()
                data = json.loads(content)
                validate_markup(data)

            cursor = conn.cursor()
            cursor.execute(
                """INSERT INTO job_markup (job_id, name, data, project_id, type)
                              VALUES (%s, %s, %s, %s, 'markup')""",
                (job_id, name, content, project_id))
            cursor.close()
            conn.commit()
        except ValidationError as e:
            return e.message, 400
        except Exception as e:
            app.logger.error(e)
            return "Failed to parse json", 400

    return ""
Beispiel #2
0
    def post(self):
        job_id = g.token['job']['id']
        project_id = g.token['project']['id']

        r = g.db.execute_one(
            """
            SELECT count(*) FROM job_markup WHERE job_id = %s
        """, [job_id])

        if r[0] > 0:
            abort(403, "Forbidden")

        if len(request.files) > 10:
            abort(400, "Too many uploads")

        path = '/tmp/%s.json' % uuid.uuid4()

        @after_this_request
        def _remove_file(response):
            delete_file(path)
            return response

        for name, f in request.files.iteritems():
            try:
                if not allowed_file(f.filename, ("json", )):
                    abort(400, "Filetype not allowed")

                f.save(path)

                # Check size
                if os.path.getsize(path) > 8 * 1024 * 1024:
                    abort(400, "File too big")

                # Parse it
                with open(path, 'r') as md:
                    content = md.read()
                    data = json.loads(content)
                    validate_markup(data)

                g.db.execute(
                    """INSERT INTO job_markup (job_id, name, data, project_id, type)
                                VALUES (%s, %s, %s, %s, 'markup')
                             """, [job_id, name, content, project_id])
                g.db.commit()
            except ValidationError as e:
                abort(400, e.message)
            except Exception as e:
                app.logger.error(e)
                abort(400, "Failed to parse json")

        return jsonify({})