Files
filmdle/app/seed.py
SimolZimol 7c271d3946 modified: README.md
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
2026-08-07 22:53:38 +02:00

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()