from database import Database from flask import Flask, abort, request from flask.json import jsonify from gevent.pywsgi import WSGIServer import logging LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) logFormatter = logging.Formatter( "%(asctime)s [%(threadName)s] [%(levelname)s] %(message)s") fileHandler = logging.FileHandler("../logs/server.log") fileHandler.setFormatter(logFormatter) fileHandler.setLevel(logging.INFO) LOGGER.addHandler(fileHandler) consoleHandler = logging.StreamHandler() consoleHandler.setLevel(logging.DEBUG) LOGGER.addHandler(consoleHandler) app = Flask(__name__) DATABASE = Database() @app.route('/') def index(): return "

Hello, World!", 200 @app.route('/scan2kasse/login') def login(): if not request.json or 'login' not in request.json: abort(400) if not DATABASE.get_user(login = request.json['login']): abort(403) return jsonify({}), 200 @app.route('/scan2kasse/insert', methods=['POST']) def insert(): match request.json: case {'user': user, 'items': items, 'date': date}: failed = DATABASE.insert_bought_items(user, items, date) if failed: return jsonify(failed), 400 return jsonify({'inserted': True}), 201 case {'user': user, 'items': items}: failed = DATABASE.insert_bought_items(user, items) if failed: return jsonify(failed), 400 return jsonify({'inserted': True}), 201 case _: abort(400) @app.route('/scan2kasse/', methods=['GET']) @app.route('/scan2kasse//', methods=['GET']) @app.route('/scan2kasse//', methods=['GET']) @app.route('/scan2kasse///', methods=['GET']) def get_monthly_report_from_user(user: str = None, year: int = None, month: int = None): if month and (month > 12 or month < 1): abort(400) LOGGER.info("Getting results.") results = DATABASE.get_report(user=user, year=year, month=month) LOGGER.debug(f"Results received: {results}") if results: result_dict = group_results(results) else: result_dict = {} return jsonify(result_dict) def group_results(results: tuple) -> dict: result_dict = {} LOGGER.debug("Grouping...") for result in results: if result[0] not in result_dict: result_dict[result[0]] = {} if str(result[1]) not in result_dict[result[0]]: result_dict[result[0]][str(result[1])] = {} result_dict[result[0]][str(result[1])][result[2]] = ( result[3], result[4]) LOGGER.debug("Grouped.") return result_dict if __name__ == '__main__': http_server = WSGIServer(('', 5000), app) http_server.serve_forever()