scratch
All checks were successful
Build and push container image / build-and-push-image (push) Successful in 6m3s

This commit is contained in:
2026-02-09 13:34:47 +00:00
parent 9700a5dc7f
commit b4e6b4c296
14 changed files with 131 additions and 63 deletions

View File

@@ -1,7 +1,7 @@
# Imports
from flask import Blueprint, render_template, abort
from os import getenv as env
import logging, os, re
import logging, os, re, markdown
# Create blueprint
bp = Blueprint(
@@ -16,6 +16,7 @@ log = logging.getLogger(__name__)
# Get all files in folder
def ListFiles(path):
path = os.path.join(bp.template_folder, 'pages', path)[3:]
files = []
for root, dirs, files_in_dir in os.walk(path):
for file in files_in_dir:
@@ -27,14 +28,27 @@ def ListFiles(path):
# Catch-all route for generic pages
@bp.route('/<path:filename>')
def catch_all(filename):
try:
return render_template(f'pages/{filename if re.match(r'^.+\.[a-zA-Z0-9]+$', filename) else filename + '.html'}')
if os.path.exists(os.path.join(bp.template_folder, 'pages', filename)[3:]):
return render_template(f'pages/{filename}')
except Exception as e:
os_path = os.path.join(bp.template_folder, 'pages', filename)[3:]
if os.path.isdir(os_path):
if not filename.endswith('/'): filename += '/'
return render_template('bases/directory.html', directory=filename, pages=ListFiles(os_path))
elif os.path.exists(os.path.join(bp.template_folder, 'pages', filename + '.html')[3:]):
return render_template(f'pages/{filename}.html')
# If it is a file, return a 404 error
abort(404, f"Template '{filename}' not found: {e}")
elif os.path.exists(os.path.join(bp.template_folder, 'pages', filename + '.md')[3:]):
print("yay")
print(markdown.markdownFromFile("../templates/pages/test.md"))
return render_template(
f'bases/md.html',
title = filename.split("/")[-1],
markdown = markdown.markdownFromFile(os.path.join(bp.template_folder, 'pages', filename + '.md'))
)
elif os.path.isdir(os.path.join(bp.template_folder, 'pages', filename)[3:]):
return render_template(
'bases/directory.html',
directory=filename + "/" if not filename.endswith('/') else filename,
pages=ListFiles(filename)
)
else:
abort(404, f"'{filename}' not found")

View File

@@ -1,5 +1,6 @@
# Imports
from flask import Blueprint, render_template
from werkzeug.exceptions import HTTPException
from os import getenv as env
import logging
@@ -17,23 +18,35 @@ log = logging.getLogger(__name__)
# Route for 500 error
@bp.route('/500')
@bp.app_errorhandler(500)
def internal_server_error(error=None):
if error is not None:
log.error("Internal server error: %s", error)
return render_template('errors/500.html'), 500
def internal_server_error(error:HTTPException=None):
return render_template('errors/500.html', error=error), 500
# Route for 404 error
@bp.route('/404')
@bp.app_errorhandler(404)
def not_found(error=None):
if error is not None:
log.warning("Page not found: %s", error)
return render_template('errors/404.html'), 404 if error is not None else 200
def not_found(error:HTTPException=None):
return render_template('errors/404.html', error=error), 404
# Route for 400 error
@bp.route('/400')
@bp.app_errorhandler(400)
def bad_request(error=None):
if error is not None:
log.warning("Bad request: %s", error)
return render_template('errors/400.html', error=error), 400
def bad_request(error:HTTPException=None):
return render_template('errors/400.html', error=error), 400
# Route for all other errors
@bp.route('/error')
@bp.app_errorhandler(Exception)
def unauthorized(error:HTTPException=None):
if isinstance(error, HTTPException):
return render_template(
'errors/error.html',
code = error.code,
description = error.description,
name = error.name
), error.code
return render_template(
'errors/error.html',
code=418,
description="meow :3",
name="I'm a teapot"
), 418

View File

@@ -1,26 +0,0 @@
from flask import Blueprint, jsonify
from os import getenv as env
import logging, requests
# Create blueprint
bp = Blueprint(
'lastfm',
__name__,
template_folder=env('TEMPLATE_FOLDER', default='../templates'),
static_folder=env('STATIC_FOLDER', default='../static')
)
# Create logger
log = logging.getLogger(__name__)
# lastfm info
@bp.route('/info')
def lastfm_info():
url = f"http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user={env('LASTFM_USER')}&api_key={env('LASTFM_API_KEY')}&format=json&limit=1"
response = requests.get(url).json()
data = {
'artist': response['recenttracks']['track'][0]['artist']['#text'],
'track': response['recenttracks']['track'][0]['name'],
'image': response['recenttracks']['track'][0]['image'][3]['#text']
}
return jsonify(data)

View File

@@ -8,7 +8,6 @@ import logging
import src.routes.error_handlers
import src.routes.dynamic_routes
import src.routes.lastfm
# Load env
load_dotenv()
@@ -43,7 +42,6 @@ Session(app)
# Load routes
app.register_blueprint(src.routes.error_handlers.bp, url_prefix='/error')
app.register_blueprint(src.routes.lastfm.bp, url_prefix='/lastfm')
app.register_blueprint(src.routes.dynamic_routes.bp, url_prefix='/')
# Generic routes