From 6a4b3b6681562af85fdf959b53caf4053168087b Mon Sep 17 00:00:00 2001 From: Czechman Date: Sun, 16 Feb 2025 13:46:39 +0100 Subject: [PATCH] aktualisiert nach erstem Fehler wegen veralteter sqlalchemy --- bundle_checker.py | 71 +++++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/bundle_checker.py b/bundle_checker.py index 310e17b..0a2dae0 100644 --- a/bundle_checker.py +++ b/bundle_checker.py @@ -5,9 +5,9 @@ import hashlib from datetime import datetime from bs4 import BeautifulSoup +# Importiere declarative_base aus sqlalchemy.orm (SQLAlchemy 2.0-konform) +from sqlalchemy.orm import declarative_base, relationship, sessionmaker from sqlalchemy import create_engine, Column, Integer, String, Float, DateTime, ForeignKey, Text -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker, relationship # Basis-Klasse für SQLAlchemy-Modelle Base = declarative_base() @@ -19,7 +19,7 @@ class Bundle(Base): machine_name = Column(String, unique=True) # z. B. "linuxfrombeginnertoprofessionaloreilly_bookbundle" human_name = Column(String) current_version_id = Column(Integer, ForeignKey('bundle_versions.id')) - + # Beziehung zur aktuellen Version current_version = relationship("BundleVersion", uselist=False, foreign_keys=[current_version_id]) # Alle Versionen (historisch) @@ -35,7 +35,7 @@ class BundleVersion(Base): version_hash = Column(String) # SHA-256 Hash der relevanten Daten version_data = Column(Text) # Alle relevanten Bundle-Daten als JSON-String timestamp = Column(DateTime, default=datetime.utcnow) - + bundle = relationship("Bundle", back_populates="versions") # Tabelle für Verkaufshistorie (zur zeitlichen Analyse der Verkaufszahlen) @@ -45,33 +45,29 @@ class BundleSalesHistory(Base): bundle_id = Column(Integer, ForeignKey('bundles.id')) bundles_sold = Column(Float) timestamp = Column(DateTime, default=datetime.utcnow) - + bundle = relationship("Bundle", back_populates="sales_history") def calculate_hash(data: dict) -> str: - """ - Berechnet einen SHA-256 Hash aus dem JSON-String der relevanten Daten. - """ + """Berechnet einen SHA-256 Hash aus dem sortierten JSON-String der relevanten Daten.""" json_string = json.dumps(data, sort_keys=True, ensure_ascii=False) return hashlib.sha256(json_string.encode('utf-8')).hexdigest() def fetch_bundle_data(url: str) -> dict: - """ - Ruft die Bundle-Detailseite ab und extrahiert den JSON-Inhalt aus dem