modified: app/seed.py deleted: data/movies.json new file: data/movies/1922.json new file: data/movies/1927.json new file: data/movies/1933.json new file: data/movies/1939.json new file: data/movies/1941.json new file: data/movies/1942.json new file: data/movies/1949.json new file: data/movies/1950.json new file: data/movies/1952.json new file: data/movies/1954.json new file: data/movies/1956.json new file: data/movies/1957.json new file: data/movies/1958.json new file: data/movies/1959.json new file: data/movies/1960.json new file: data/movies/1961.json new file: data/movies/1962.json new file: data/movies/1964.json new file: data/movies/1965.json new file: data/movies/1967.json new file: data/movies/1968.json new file: data/movies/1969.json new file: data/movies/1971.json new file: data/movies/1972.json new file: data/movies/1973.json new file: data/movies/1974.json new file: data/movies/1975.json new file: data/movies/1976.json new file: data/movies/1977.json new file: data/movies/1978.json new file: data/movies/1979.json new file: data/movies/1980.json new file: data/movies/1981.json new file: data/movies/1982.json new file: data/movies/1983.json new file: data/movies/1984.json new file: data/movies/1985.json new file: data/movies/1986.json new file: data/movies/1987.json new file: data/movies/1988.json new file: data/movies/1989.json new file: data/movies/1990.json new file: data/movies/1991.json new file: data/movies/1992.json new file: data/movies/1993.json new file: data/movies/1994.json new file: data/movies/1995.json new file: data/movies/1996.json new file: data/movies/1997.json new file: data/movies/1998.json new file: data/movies/1999.json new file: data/movies/2000.json new file: data/movies/2001.json new file: data/movies/2002.json new file: data/movies/2003.json new file: data/movies/2004.json new file: data/movies/2005.json new file: data/movies/2006.json new file: data/movies/2007.json new file: data/movies/2008.json new file: data/movies/2009.json new file: data/movies/2010.json new file: data/movies/2011.json new file: data/movies/2012.json new file: data/movies/2013.json new file: data/movies/2014.json new file: data/movies/2015.json new file: data/movies/2016.json new file: data/movies/2017.json new file: data/movies/2018.json new file: data/movies/2019.json new file: data/movies/2020.json new file: data/movies/2021.json new file: data/movies/2022.json new file: data/movies/2023.json new file: data/movies/2024.json
96 lines
2.9 KiB
Python
96 lines
2.9 KiB
Python
import json
|
|
import os
|
|
|
|
from . import db
|
|
from .models import Genre, Movie, Platform, Studio, Universe
|
|
|
|
# Feste Referenzlisten (die moeglichen Werte fuer Plattform/Genre/Studio/Universum)
|
|
PLATFORMS = [
|
|
"Netflix", "Disney+", "Prime Video", "Max", "Apple TV+", "Paramount+",
|
|
"Blu-ray", "DVD", "4K UHD", "Cinema"
|
|
]
|
|
|
|
GENRES = [
|
|
"Action", "Abenteuer", "Animation", "Komödie", "Krimi", "Drama", "Fantasy",
|
|
"Horror", "Mystery", "Romantik", "Sci-Fi", "Thriller", "Western", "Musical", "Krieg", "Biografie"
|
|
]
|
|
|
|
STUDIOS = [
|
|
"Warner Bros", "Disney", "Universal", "Paramount", "Sony Pictures",
|
|
"20th Century", "MGM", "Lionsgate", "A24", "DreamWorks", "New Line",
|
|
"Orion", "Neon", "CJ Entertainment", "Show East", "Dimension", "Netflix"
|
|
]
|
|
|
|
UNIVERSES = [
|
|
"MCU", "Star Wars", "DC", "Wizarding World", "Fast & Furious", "Herr der Ringe", "Spider-Man"
|
|
]
|
|
|
|
|
|
def _get_or_create(model, name):
|
|
if not name:
|
|
return None
|
|
obj = model.query.filter_by(name=name).first()
|
|
if obj is None:
|
|
obj = model(name=name)
|
|
db.session.add(obj)
|
|
db.session.flush()
|
|
return obj
|
|
|
|
|
|
def seed_all():
|
|
"""Idempotent: legt Referenzlisten und Filme an, ohne bestehende zu duplizieren."""
|
|
# Referenzlisten
|
|
for name in PLATFORMS:
|
|
_get_or_create(Platform, name)
|
|
for name in GENRES:
|
|
_get_or_create(Genre, name)
|
|
for name in STUDIOS:
|
|
_get_or_create(Studio, name)
|
|
for name in UNIVERSES:
|
|
_get_or_create(Universe, name)
|
|
db.session.commit()
|
|
|
|
# Filme aus JSON laden
|
|
_seed_movies_from_json()
|
|
|
|
|
|
def _seed_movies_from_json():
|
|
data_dir = os.path.join(
|
|
os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "data", "movies"
|
|
)
|
|
if not os.path.isdir(data_dir):
|
|
return
|
|
|
|
# Alle Jahres-Dateien (z.B. data/movies/1977.json) laden
|
|
movies = []
|
|
for fname in sorted(os.listdir(data_dir)):
|
|
if not fname.endswith(".json"):
|
|
continue
|
|
path = os.path.join(data_dir, fname)
|
|
with open(path, "r", encoding="utf-8") as f:
|
|
movies.extend(json.load(f))
|
|
|
|
# Nur hinzufuegen, wenn noch kein Film in der DB ist (idempotent ueber den ganzen Datensatz)
|
|
if Movie.query.count() > 0:
|
|
return
|
|
|
|
for entry in movies:
|
|
movie = Movie(
|
|
title=entry["title"],
|
|
year=entry["year"],
|
|
fsk=entry.get("fsk"),
|
|
director=entry.get("director"),
|
|
budget=entry.get("budget"),
|
|
studio=_get_or_create(Studio, entry.get("studio")),
|
|
universe=_get_or_create(Universe, entry.get("universe")),
|
|
)
|
|
db.session.add(movie)
|
|
db.session.flush()
|
|
|
|
for gname in entry.get("genres", []):
|
|
movie.genres.append(_get_or_create(Genre, gname))
|
|
for pname in entry.get("platforms", []):
|
|
movie.platforms.append(_get_or_create(Platform, pname))
|
|
|
|
db.session.commit()
|