move job scheduling to DB

This commit is contained in:
Bryan Van Deusen
2026-01-24 23:50:09 -05:00
parent 61e9336eef
commit dc6755a0c2
8 changed files with 50 additions and 12 deletions
+23
View File
@@ -31,6 +31,29 @@ async def get_or_create_extension_api_key(session: AsyncSession) -> str:
return new_key
async def get_setting_value(session: AsyncSession, key: str, default=None):
"""Get a setting value from the database, falling back to defaults.
Args:
session: Database session
key: Setting key (e.g., 'download.schedule_interval')
default: Fallback if not in database or DEFAULT_SETTINGS
Returns:
The setting value
"""
result = await session.execute(
select(Setting).where(Setting.key == key)
)
setting = result.scalar()
if setting:
return setting.value
# Fall back to DEFAULT_SETTINGS, then to provided default
return DEFAULT_SETTINGS.get(key, default)
@bp.route("", methods=["GET"])
async def get_all_settings():
"""Get all application settings."""
+7 -1
View File
@@ -8,6 +8,7 @@ from sqlalchemy.orm import selectinload
from app.models.source import Source
from app.models.subscription import Subscription
from app.tasks.downloads import download_source
from app.api.settings import get_setting_value
bp = Blueprint("sources", __name__)
@@ -100,12 +101,17 @@ async def create_source():
if existing.scalar():
return jsonify({"error": "Source with this platform and URL already exists"}), 409
# Get default check interval from database settings
default_interval = await get_setting_value(
session, "download.schedule_interval", 3600
)
source = Source(
subscription_id=data["subscription_id"],
platform=data["platform"],
url=data["url"],
enabled=data.get("enabled", True),
check_interval=data.get("check_interval", 3600),
check_interval=data.get("check_interval", default_interval),
metadata_=data.get("metadata", {}),
)
+13 -2
View File
@@ -8,6 +8,7 @@ from sqlalchemy.orm import selectinload
from app.models.subscription import Subscription
from app.models.source import Source
from app.tasks.downloads import download_source
from app.api.settings import get_setting_value
bp = Blueprint("subscriptions", __name__)
@@ -85,6 +86,11 @@ async def create_subscription():
metadata_=data.get("metadata", {}),
)
# Get default check interval from database settings
default_interval = await get_setting_value(
session, "download.schedule_interval", 3600
)
# Add sources if provided
sources_data = data.get("sources", [])
for source_data in sources_data:
@@ -94,7 +100,7 @@ async def create_subscription():
platform=source_data["platform"],
url=source_data["url"],
enabled=source_data.get("enabled", True),
check_interval=source_data.get("check_interval", 3600),
check_interval=source_data.get("check_interval", default_interval),
metadata_=source_data.get("metadata", {}),
)
subscription.sources.append(source)
@@ -254,12 +260,17 @@ async def add_source_to_subscription(subscription_id: int):
# Store name before commit (attributes expire after commit)
subscription_name = subscription.name
# Get default check interval from database settings
default_interval = await get_setting_value(
session, "download.schedule_interval", 3600
)
source = Source(
subscription_id=subscription_id,
platform=data["platform"],
url=data["url"],
enabled=data.get("enabled", True),
check_interval=data.get("check_interval", 3600),
check_interval=data.get("check_interval", default_interval),
metadata_=data.get("metadata", {}),
)