Commit ee266d73 authored by Jakob Moser's avatar Jakob Moser
Browse files

Lint file

parent 5d2f6889
Loading
Loading
Loading
Loading
+38 −27
Original line number Diff line number Diff line
from flask import Flask, jsonify, send_from_directory
import csv
import os

app = Flask(__name__, static_folder='frontend') # static_folder auf 'frontend' setzen
from flask import Flask, jsonify, send_from_directory

app = Flask(__name__, static_folder="frontend")  # static_folder auf 'frontend' setzen

# Es wird davon ausgegangen, dass die CSV-Datei im selben Verzeichnis wie simple_backend.py liegt.
SONGS_CSV_FILE = 'songs.csv'
SONGS_CSV_FILE = "songs.csv"
songs_data = []

# Definiere den Pfad zum Frontend-Ordner relativ zum Skriptverzeichnis
# __file__ ist der Pfad zum aktuellen Skript (simple_backend.py)
# os.path.dirname(__file__) ist das Verzeichnis, in dem das Skript liegt
# os.path.join(...) erstellt einen plattformunabhängigen Pfad
FRONTEND_FOLDER = os.path.join(os.path.dirname(__file__), 'frontend')
FRONTEND_FOLDER = os.path.join(os.path.dirname(__file__), "frontend")


def load_and_prepare_songs():
@@ -26,56 +27,66 @@ def load_and_prepare_songs():
        return

    try:
        with open(csv_file_path, mode='r', encoding='utf-8-sig') as infile: # utf-8-sig für BOM-Handling
        with open(
            csv_file_path, encoding="utf-8-sig"
        ) as infile:  # utf-8-sig für BOM-Handling
            reader = csv.DictReader(infile)
            for i, row in enumerate(reader):
                song_entry = {
                    'id': f's{i+1}', # Eindeutige ID generieren
                    'title': row.get('TITLE', '').strip(),
                    'artist': row.get('ARTIST', '').strip(),
                    'genre': row.get('GENRE', '').strip(),
                    'year': None # Standardmäßig None
                    "id": f"s{i + 1}",  # Eindeutige ID generieren
                    "title": row.get("TITLE", "").strip(),
                    "artist": row.get("ARTIST", "").strip(),
                    "genre": row.get("GENRE", "").strip(),
                    "year": None,  # Standardmäßig None
                }
                year_str = row.get('YEAR', '').strip()
                year_str = row.get("YEAR", "").strip()
                if year_str.isdigit():
                    song_entry['year'] = int(year_str)
                    song_entry["year"] = int(year_str)

                songs_data.append(song_entry)
        print(f"{len(songs_data)} Songs erfolgreich geladen und vorbereitet.")
    except Exception as e:
        print(f"Fehler beim Lesen oder Verarbeiten der CSV-Datei: {e}")


# API-Endpunkt zum Abrufen der Song-Daten
@app.route('/api/songs', methods=['GET'])
@app.route("/api/songs", methods=["GET"])
def get_songs():
    if not songs_data:
        print("Keine Songdaten im Speicher, versuche erneut zu laden...")
        load_and_prepare_songs()

    if not songs_data:
        return jsonify({"error": "Songdaten konnten nicht geladen werden oder Datei nicht vorhanden."}), 500
        return jsonify(
            {
                "error": "Songdaten konnten nicht geladen werden oder Datei nicht vorhanden."
            }
        ), 500

    return jsonify(songs_data)


# Route zum Ausliefern der index.html für den Root-Pfad
@app.route('/', methods=['GET'])
@app.route("/", methods=["GET"])
def serve_index():
    # send_from_directory benötigt den Ordner und den Dateinamen
    return send_from_directory(FRONTEND_FOLDER, 'index.html')
    return send_from_directory(FRONTEND_FOLDER, "index.html")


# Route zum Ausliefern aller anderen statischen Dateien aus dem frontend-Ordner
# z.B. /style.css, /app.mjs, etc.
@app.route('/<path:filename>')
@app.route("/<path:filename>")
def serve_static_files(filename):
    return send_from_directory(FRONTEND_FOLDER, filename)


if __name__ == '__main__':
if __name__ == "__main__":
    load_and_prepare_songs()  # Lade Songs beim Start des Servers
    if songs_data:
        # debug=True ist gut für die Entwicklung, für Produktion auf False setzen
        app.run(debug=True, port=5001)
    else:
        print("Backend startet nicht, da keine Songdaten geladen werden konnten.")
        print(f"Bitte stelle sicher, dass die Datei '{SONGS_CSV_FILE}' im selben Verzeichnis wie das Skript liegt oder passe den Pfad an.")
        print(
            f"Bitte stelle sicher, dass die Datei '{SONGS_CSV_FILE}' im selben Verzeichnis wie das Skript liegt oder passe den Pfad an."
        )