Merge pull request #1 from Lunaresk:new_folder_structure

New_folder_structure
This commit is contained in:
Lunaresk 2022-01-17 20:30:57 +01:00 committed by GitHub
commit f184a2493f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 75 additions and 21 deletions

1
.gitignore vendored
View File

@ -131,3 +131,4 @@ dmypy.json
# Misc # Misc
config.yaml config.yaml
scans.json scans.json
test.*

View File

@ -0,0 +1,5 @@
from flask import Flask
app = Flask(__name__)
from app import views

View File

@ -11,7 +11,7 @@ LOGGER.setLevel(logging.DEBUG)
logFormatter = logging.Formatter( logFormatter = logging.Formatter(
"%(asctime)s [%(threadName)s] [%(levelname)s] %(message)s") "%(asctime)s [%(threadName)s] [%(levelname)s] %(message)s")
fileHandler = logging.FileHandler(DIR + "../logs/database.log") fileHandler = logging.FileHandler(DIR + "../../logs/database.log")
fileHandler.setFormatter(logFormatter) fileHandler.setFormatter(logFormatter)
fileHandler.setLevel(logging.INFO) fileHandler.setLevel(logging.INFO)
LOGGER.addHandler(fileHandler) LOGGER.addHandler(fileHandler)

View File

@ -0,0 +1,15 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
{% block content %}{% endblock %}
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
</body>
</html>

View File

@ -0,0 +1,27 @@
{% extends "base.html" %}
{% block content %}
{% for user, dates in results.items() %}
<div class="row">
<h3>{{ user }}: {{ dates.sum }}€</h3>
{% for date, items in dates.items() %}
{% if date != "sum" %}
<div class="row">
<div class="col-sm-1"></div>
<div class="col">
<h4>{{ date }}</h4>
{% for item, values in items.items() %}
<div class="row">
<div class="col-sm-1"></div>
<div class="col">
{{ values.0 }}x {{ item }} je {{ values.1 }}€
</div>
</div>
{% endfor %}
</div>
</div>
{% endif %}
{% endfor %}
</div>
{% endfor %}
{% endblock %}

View File

@ -1,7 +1,7 @@
from database import Database from app import app
from flask import Flask, abort, request from app.database import Database
from flask import abort, request, render_template
from flask.json import jsonify from flask.json import jsonify
from gevent.pywsgi import WSGIServer
from os import makedirs from os import makedirs
from os.path import dirname, exists from os.path import dirname, exists
import logging import logging
@ -17,7 +17,7 @@ LOGGER.setLevel(logging.DEBUG)
logFormatter = logging.Formatter( logFormatter = logging.Formatter(
"%(asctime)s [%(threadName)s] [%(levelname)s] %(message)s") "%(asctime)s [%(threadName)s] [%(levelname)s] %(message)s")
fileHandler = logging.FileHandler(DIR + "../logs/server.log") fileHandler = logging.FileHandler(DIR + "../../logs/server.log")
fileHandler.setFormatter(logFormatter) fileHandler.setFormatter(logFormatter)
fileHandler.setLevel(logging.INFO) fileHandler.setLevel(logging.INFO)
LOGGER.addHandler(fileHandler) LOGGER.addHandler(fileHandler)
@ -26,16 +26,17 @@ consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG) consoleHandler.setLevel(logging.DEBUG)
LOGGER.addHandler(consoleHandler) LOGGER.addHandler(consoleHandler)
app = Flask(__name__)
DATABASE = Database() DATABASE = Database()
APPNAME = "scan2kasse"
@app.route('/') @app.route('/')
def index(): def index():
return "<h1>Hello, World!</h>", 200 return "<h1>Hello, World!</h>", 200
@app.route('/scan2kasse/login') @app.route(f'/{APPNAME}/login')
def login(): def login():
if not request.json or 'login' not in request.json: if not request.json or 'login' not in request.json:
abort(400) abort(400)
@ -44,7 +45,7 @@ def login():
return jsonify({}), 200 return jsonify({}), 200
@app.route('/scan2kasse/insert', methods=['POST']) @app.route(f'/{APPNAME}/insert', methods=['POST'])
def insert(): def insert():
match request.json: match request.json:
case {'user': user, 'items': items, 'date': date}: case {'user': user, 'items': items, 'date': date}:
@ -60,10 +61,10 @@ def insert():
case _: case _:
abort(400) abort(400)
@app.route('/scan2kasse/<string:user>', methods=['GET']) @app.route(f'/{APPNAME}/<string:user>', methods=['GET'])
@app.route('/scan2kasse/<int:year>/<int:month>', methods=['GET']) @app.route(f'/{APPNAME}/<int:year>/<int:month>', methods=['GET'])
@app.route('/scan2kasse/<string:user>/<int:year>', methods=['GET']) @app.route(f'/{APPNAME}/<string:user>/<int:year>', methods=['GET'])
@app.route('/scan2kasse/<string:user>/<int:year>/<int:month>', methods=['GET']) @app.route(f'/{APPNAME}/<string:user>/<int:year>/<int:month>', methods=['GET'])
def get_monthly_report_from_user(user: str = None, year: int = None, month: int = None): def get_monthly_report_from_user(user: str = None, year: int = None, month: int = None):
if month and (month > 12 or month < 1): if month and (month > 12 or month < 1):
abort(400) abort(400)
@ -74,7 +75,10 @@ def get_monthly_report_from_user(user: str = None, year: int = None, month: int
result_dict = group_results(results) result_dict = group_results(results)
else: else:
result_dict = {} result_dict = {}
return jsonify(result_dict) if request.content_type == "application/json":
return jsonify(result_dict)
else:
return render_template("overview.html", results=result_dict)
def group_results(results: tuple) -> dict: def group_results(results: tuple) -> dict:
@ -82,15 +86,11 @@ def group_results(results: tuple) -> dict:
LOGGER.debug("Grouping...") LOGGER.debug("Grouping...")
for result in results: for result in results:
if result[0] not in result_dict: if result[0] not in result_dict:
result_dict[result[0]] = {} result_dict[result[0]] = {"sum": 0}
if str(result[1]) not in 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_dict[result[0]][str(result[1])][result[2]] = ( result_dict[result[0]][str(result[1])][result[2]] = (
result[3], result[4]) result[3], result[4])
result_dict[result[0]]["sum"] += (result[3] * (result[4] * 100)) / 100
LOGGER.debug("Grouped.") LOGGER.debug("Grouped.")
return result_dict return result_dict
if __name__ == '__main__':
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()

6
server/src/run.py Normal file
View File

@ -0,0 +1,6 @@
from app import app
from gevent.pywsgi import WSGIServer
if __name__ == '__main__':
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()