From 5f296849f5b6e79d808771e1a35034cfbe6316a8 Mon Sep 17 00:00:00 2001 From: Oskar Date: Mon, 7 Dec 2020 20:57:57 +0100 Subject: [PATCH] clean up and properly structure backend --- .gitignore | 1 + fs-quiz-tool-db/__init__.py | 1 + fs-quiz-tool-db/__main__.py | 11 +++++++++++ {db => fs-quiz-tool-db}/app.py | 35 +++++++++++++++++----------------- setup.py | 29 ++++++++++++++++++++++++++++ 5 files changed, 59 insertions(+), 18 deletions(-) create mode 100644 fs-quiz-tool-db/__init__.py create mode 100644 fs-quiz-tool-db/__main__.py rename {db => fs-quiz-tool-db}/app.py (62%) create mode 100644 setup.py diff --git a/.gitignore b/.gitignore index 9116c8e..d29f725 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ __pycache__/ +*.egg-info/ *.log *.db *.json diff --git a/fs-quiz-tool-db/__init__.py b/fs-quiz-tool-db/__init__.py new file mode 100644 index 0000000..c07c459 --- /dev/null +++ b/fs-quiz-tool-db/__init__.py @@ -0,0 +1 @@ +from .app import app diff --git a/fs-quiz-tool-db/__main__.py b/fs-quiz-tool-db/__main__.py new file mode 100644 index 0000000..00fe5f1 --- /dev/null +++ b/fs-quiz-tool-db/__main__.py @@ -0,0 +1,11 @@ +from .app import app + +if __name__ == "__main__": + + @app.after_request + def add_headers(response): + response.headers['Access-Control-Allow-Origin'] = '*' + response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS' + return response + + app.run(host='0.0.0.0', port=12345) diff --git a/db/app.py b/fs-quiz-tool-db/app.py similarity index 62% rename from db/app.py rename to fs-quiz-tool-db/app.py index e975e4d..11c19a6 100644 --- a/db/app.py +++ b/fs-quiz-tool-db/app.py @@ -1,4 +1,4 @@ -from flask import Flask, request, Response +from flask import Flask, request import json import string import random @@ -7,12 +7,13 @@ import atexit app = Flask(__name__) filename = 'db.json' -id_length = 32 +id_length = 16 data = {} def startup(): + global data try: fd = open(filename) @@ -21,37 +22,38 @@ def startup(): pass -@app.after_request -def add_headers(response): - response.headers['Access-Control-Allow-Origin'] = '*' - response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS' - return response - - @app.route('/', methods = ['GET']) def get(id): - if id in data: - return data[id] - else: - return 'Error: Not found', 404 + return data[id] if id in data else ('Error: Not found', 404) def generateRandomString(): return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(id_length)) +def generateNewKey(): + + id = generateRandomString() + while id in data: + id = generateRandomString() + + return id + @app.route('/', methods = ['POST']) def post(): - id = generateRandomString() + + id = generateNewKey() data[id] = request.data.decode('UTF-8') + return id, 201 def dumpDB(): + if len(data) == 0: return - fd = open(filename, 'w+') try: + fd = open(filename, 'w+') json.dump(data, fd) finally: fd.close() @@ -59,6 +61,3 @@ def dumpDB(): startup() atexit.register(dumpDB) - -if __name__ == "__main__": - app.run(host='0.0.0.0') diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..1768877 --- /dev/null +++ b/setup.py @@ -0,0 +1,29 @@ +import setuptools as st + +with open("README.md", "r") as f: + long_description = f.read() + +with open('LICENSE.md') as f: + license_text = f.read() + +st.setup( + name="fs-quiz-tool-db", + version="0.1.0", + author="Oskar @ FaSTTUBe", + author_email="o.winkels@fasttube.de", + description="A tool to help FS teams train for registration qualification quizzes", + long_description=long_description, + long_description_content_type="text/markdown", + url="https://git.fasttube.de/FaSTTUBe/fs-quiz-tool", + packages=st.find_packages(exclude=['tests', 'docs']), + install_requires=[ + "flask", + ], + license=license_text, + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Operating System :: OS Independent", + ], + python_requires='>=3.6', +)