# retoor <retoor@molodetz.nl>
import os
from flask import Flask
from flask import jsonify
from flask import make_response
from flask import request
from flask.wrappers import Response
from typosaurus_sandbox.domain.calculator import add
from typosaurus_sandbox.domain.calculator import clamp
from typosaurus_sandbox.domain.calculator import clamp_to_byte
from typosaurus_sandbox.domain.calculator import subtract
app = Flask(__name__)
@app.route('/')
def index() -> Response:
index_path = os.path.join(os.path.dirname(__file__), 'index.html')
with open(index_path) as f:
return make_response(f.read(), 200, {'Content-Type': 'text/html'})
@app.route('/add', methods=['GET'])
def add_route() -> Response:
try:
left = int(request.args['left'])
right = int(request.args['right'])
except (KeyError, TypeError, ValueError):
return make_response(jsonify({'error': 'Invalid or missing parameters'}), 400)
return make_response(jsonify({'result': add(left, right)}), 200)
@app.route('/subtract', methods=['GET'])
def subtract_route() -> Response:
try:
left = int(request.args['left'])
right = int(request.args['right'])
except (KeyError, TypeError, ValueError):
return make_response(jsonify({'error': 'Invalid or missing parameters'}), 400)
return make_response(jsonify({'result': subtract(left, right)}), 200)
@app.route('/clamp', methods=['GET'])
def clamp_route() -> Response:
try:
value = int(request.args['value'])
low = int(request.args['low'])
high = int(request.args['high'])
except (KeyError, TypeError, ValueError):
return make_response(jsonify({'error': 'Invalid or missing parameters'}), 400)
try:
result = clamp(value, low, high)
except ValueError:
return make_response(jsonify({'error': 'Invalid or missing parameters'}), 400)
return make_response(jsonify({'result': result}), 200)
@app.route('/clamp_to_byte', methods=['GET'])
def clamp_to_byte_route() -> Response:
try:
value = int(request.args['value'])
except (KeyError, TypeError, ValueError):
return make_response(jsonify({'error': 'Invalid or missing parameters'}), 400)
return make_response(jsonify({'result': clamp_to_byte(value)}), 200)