Skip to content

Commit

Permalink
chore: Update database initialization to use EXECUTABLE_DIR instead o…
Browse files Browse the repository at this point in the history
…f ROOT_DIR
  • Loading branch information
JakubAndrysek committed Sep 6, 2024
1 parent cf87601 commit 9548287
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 39 deletions.
2 changes: 1 addition & 1 deletion forester-game-app/app/init.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def create_app(config_class="config.Config"):
# Enable CORS
CORS(app)

db.init(app.config["ROOT_DIR"], app.config["DATAFILE"])
db.init(app.config["EXECUTABLE_DIR"], app.config["DATAFILE"])

# Set custom Jinja loader

Expand Down
98 changes: 62 additions & 36 deletions forester-game-app/app/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,38 @@

from app.init import db
from app.utils import get_local_ip_address
from flask import Blueprint, render_template, abort, send_from_directory, current_app, jsonify, request
from flask import (
Blueprint,
render_template,
abort,
send_from_directory,
current_app,
jsonify,
request,
)
from jinja2 import TemplateNotFound

main = Blueprint('main', __name__)
main = Blueprint("main", __name__)


def get_html_and_folders(folder: Path):
res = []
if folder.exists():
for folder_iter in folder.iterdir():
if folder_iter.is_dir():
res.append({
"name": folder_iter.name,
"is_dir": True,
})
res.append(
{
"name": folder_iter.name,
"is_dir": True,
}
)
elif folder_iter.suffix == ".html" and folder_iter.stem != "index":
res.append({
"name": folder_iter.stem,
"is_dir": False,
})
res.append(
{
"name": folder_iter.stem,
"is_dir": False,
}
)
return res


Expand All @@ -37,59 +49,73 @@ def get_selected_level_routes(folder: str):
return top_level_routes


@main.route('/')
@main.route("/")
def index():
return render_template('index.html', title='Menu', same_level_routes=get_selected_level_routes('.'))
return render_template(
"index.html", title="Menu", same_level_routes=get_selected_level_routes(".")
)


@main.route('/download-data')
@main.route("/download-data")
def download_data():
return send_from_directory(current_app.config['ROOT_DIR'], current_app.config['DATAFILE'], as_attachment=True)
return send_from_directory(
current_app.config["EXECUTABLE_DIR"],
current_app.config["DATAFILE"],
as_attachment=True,
)


@main.route('/clear-data')
@main.route("/clear-data")
def clear_data():
db.overwrite_data_dict({})
return jsonify({"status": "success"})


@main.route('/upload-data', methods=['POST'])
@main.route("/upload-data", methods=["POST"])
def upload_data():
if 'file' not in request.files:
if "file" not in request.files:
return jsonify({"status": "error", "message": "No file part"})
file = request.files['file']
file = request.files["file"]

if file.filename == '':
if file.filename == "":
return jsonify({"status": "error", "message": "No selected file"})

allowed_extensions = current_app.config['ALLOWED_EXTENSIONS']
if (
not file
or file.filename.rsplit('.', 1)[1].lower() not in allowed_extensions
):
return jsonify({"status": "error", "message": f"Invalid file type - allowed extensions: {allowed_extensions}"})
print(f'Uploading file {file.filename} that will overwrite the current data')
allowed_extensions = current_app.config["ALLOWED_EXTENSIONS"]
if not file or file.filename.rsplit(".", 1)[1].lower() not in allowed_extensions:
return jsonify(
{
"status": "error",
"message": f"Invalid file type - allowed extensions: {allowed_extensions}",
}
)
print(f"Uploading file {file.filename} that will overwrite the current data")
db.overwrite_data_file(file)
return jsonify({"status": "success"})


@main.route('/<folder>/', defaults={'page': 'index'})
@main.route('/<folder>/<page>')
@main.route("/<folder>/", defaults={"page": "index"})
@main.route("/<folder>/<page>")
def render_page(folder: str, page: str):
try:
# if page contains a dot, it is a file extension - serve as static file
if '.' in page:
path_to_file = Path(f'{current_app.config.get("GAMES_FOLDER")}/{folder}/{page}')
path_to_file_live = Path(f'{current_app.config.get("GAMES_FOLDER_LIVE")}/{folder}/{page}')
if "." in page:
path_to_file = Path(
f'{current_app.config.get("GAMES_FOLDER")}/{folder}/{page}'
)
path_to_file_live = Path(
f'{current_app.config.get("GAMES_FOLDER_LIVE")}/{folder}/{page}'
)
if path_to_file_live.exists():
return send_from_directory(path_to_file_live.parent, path_to_file_live.name)
return send_from_directory(
path_to_file_live.parent, path_to_file_live.name
)
elif path_to_file.exists():
return send_from_directory(path_to_file.parent, path_to_file.name)
return abort(404)
else:
return render_template(
f'{folder}/{page}.html',
title=f'{folder.capitalize()}',
f"{folder}/{page}.html",
title=f"{folder.capitalize()}",
folder=folder,
page=page,
data=db.get_data(),
Expand All @@ -102,13 +128,13 @@ def render_page(folder: str, page: str):
abort(404)


@main.route('/<path:filename>')
@main.route("/<path:filename>")
def not_allowed(filename):
return "Not allowed depth level 3", 404


# Serve static files
@main.route('/assets/<path:filename>')
@main.route("/assets/<path:filename>")
def static_files(filename):
static_path = current_app.config.get("ASSETS_FOLDER")
return send_from_directory(static_path, filename)
4 changes: 2 additions & 2 deletions forester-game-app/games/admin/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ <h5 class="card-title">Upravit data</h5>
<h5 class="card-title">Správa dat hry</h5>
<button id="download-button" class="btn btn-primary mb-2">Stáhnout data hry</button>
<button id="clear-button" class="btn btn-danger mb-2">Vymazat data hry</button>
<p class="card-text">Data hry jsou uložena v počítači: <strong>{{ config.ROOT_DIR }}/{{ config.DATAFILE }}</strong></p>
<p class="card-text">Veškerý informace jsou logovány do souboru: <strong>{{ config.ROOT_DIR }}/{{ config.LOG_FOLDER }}</strong></p>
<p class="card-text">Data hry jsou uložena v počítači: <strong>{{ config.EXECUTABLE_DIR }}/{{ config.DATAFILE }}</strong></p>
<p class="card-text">Veškerý informace jsou logovány do souboru: <strong>{{ config.EXECUTABLE_DIR }}/{{ config.LOG_FOLDER }}</strong></p>
<p class="card-text">Debug: <strong>{{ config.DEBUG }}</strong></p>
<p class="card-text">Root: <strong>{{ config.TEMP_DIR }}</strong></p>
</div>
Expand Down

0 comments on commit 9548287

Please sign in to comment.