import functools import re import flask text2bool = {"absència": True, "presència": False, "absent": True, "present": False} bool2text = {True: "absent", False: "present"} app = flask.Flask(__name__) class HTTPError(flask.Response, Exception): def __init__(self, *args, status_code, **kwargs): super().__init__(*args, **kwargs) self.status_code = status_code def handle_errors(func): @functools.wraps(func) def wrapped(*args, **kwargs): try: return func(*args, **kwargs) except HTTPError as r: return r, r.status_code except Exception: return flask.Response("Oh no! Hi ha hagut un error en el servidor :(", status="Internal error"), 500 return wrapped @app.route("/calcula", methods=['POST']) @handle_errors def calcula(): frase = flask.request.get_json().get('frase') if not frase: raise HTTPError("Cal introduir una frase!", status_code=400, status="Missing parameter") return calcula_presencia(frase) def xor(a, b): return (a and not b) or (b and not a) def calcula_presencia(frase): frase = frase[3:] subjecte, atribut = frase.split(" és ") llista_subjecte = re.split(" de | d'", subjecte) objecte = llista_subjecte[-1] llista_bool = [text2bool[x.strip()] for x in llista_subjecte[:-1]] bool_total = text2bool[atribut] for bool in llista_bool: bool_total = xor(bool_total, bool) return f'{objecte} és {bool2text[bool_total]}' if __name__ == "__main__": app.run()