ungleich-game/challenge.py

59 lines
1.6 KiB
Python
Raw Normal View History

2019-08-27 21:19:37 +00:00
from flask import request, Response, abort
from flask_restful import reqparse
2019-08-26 18:47:15 +00:00
def require_args(*args):
parser = reqparse.RequestParser()
for arg in args:
2019-08-27 21:19:37 +00:00
parser.add_argument(arg, required=True, help="{} required".format(arg))
2019-08-26 18:47:15 +00:00
return parser.parse_args()
class Challenge(object):
""" A sample challenge -- inherit this and overwrite accordingly """
points = 0
provides = []
requires = []
2019-08-26 20:16:23 +00:00
description = "This description should be overriden"
2019-08-26 18:47:15 +00:00
dependencies_provided_by = {}
def __init__(self, wrapper):
self.db = wrapper
def game(self):
if request.method == 'GET':
return self.describe()
2019-08-27 21:19:37 +00:00
if request.method == 'HEAD':
return self.describe()
2019-08-26 18:47:15 +00:00
if request.method == 'POST':
return self.solve()
def describe(self):
2019-08-27 21:19:37 +00:00
""" Describe what to do to solve this challenge"""
2019-08-26 18:47:15 +00:00
return self.description
def save_points(self, user):
""" should be called when the challenge was solved successfully"""
key = "points/{}".format(user, type(self).__name__)
self.db.set_user_key(user, key, self.points)
def solve(self):
""" Needs to be implemented per challenge """
pass
2019-08-27 21:19:37 +00:00
def error(self, msg=""):
""" Abort with an error """
return Response(status=400, response=msg)
def get_args(self, *args):
res = {}
f = request.form
for arg in args:
if arg not in f:
abort(Response("Missing argument: {}\n".format(arg)))
res[arg] = f[arg]
return res