Loading simple_backend.pydeleted 100644 → 0 +0 −92 Original line number Diff line number Diff line import csv import os 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_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") def load_and_prepare_songs(): global songs_data songs_data = [] # Zurücksetzen für den Fall, dass die Funktion mehrmals aufgerufen wird csv_file_path = os.path.join(os.path.dirname(__file__), SONGS_CSV_FILE) if not os.path.exists(csv_file_path): print(f"FEHLER: CSV-Datei nicht gefunden unter: {csv_file_path}") return try: 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 } year_str = row.get("YEAR", "").strip() if year_str.isdigit(): 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"]) 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(songs_data) # Route zum Ausliefern der index.html für den Root-Pfad @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") # Route zum Ausliefern aller anderen statischen Dateien aus dem frontend-Ordner # z.B. /style.css, /app.js, etc. @app.route("/<path:filename>") def serve_static_files(filename): return send_from_directory(FRONTEND_FOLDER, filename) 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." ) Loading
simple_backend.pydeleted 100644 → 0 +0 −92 Original line number Diff line number Diff line import csv import os 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_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") def load_and_prepare_songs(): global songs_data songs_data = [] # Zurücksetzen für den Fall, dass die Funktion mehrmals aufgerufen wird csv_file_path = os.path.join(os.path.dirname(__file__), SONGS_CSV_FILE) if not os.path.exists(csv_file_path): print(f"FEHLER: CSV-Datei nicht gefunden unter: {csv_file_path}") return try: 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 } year_str = row.get("YEAR", "").strip() if year_str.isdigit(): 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"]) 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(songs_data) # Route zum Ausliefern der index.html für den Root-Pfad @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") # Route zum Ausliefern aller anderen statischen Dateien aus dem frontend-Ordner # z.B. /style.css, /app.js, etc. @app.route("/<path:filename>") def serve_static_files(filename): return send_from_directory(FRONTEND_FOLDER, filename) 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." )