diff --git a/app/plugins/builtins/automation/plugin.py b/app/plugins/builtins/automation/plugin.py index afb6e6c..ee7a56f 100644 --- a/app/plugins/builtins/automation/plugin.py +++ b/app/plugins/builtins/automation/plugin.py @@ -248,7 +248,7 @@ class AutomationPlugin(BasePlugin): from sqlalchemy import select as sa_select # Get first tenant + admin user for seeding - from app.models.user import User, UserTenant + from app.models.user import User from app.models.tenant import Tenant tenant_result = await db.execute(sa_select(Tenant).limit(1)) tenant = tenant_result.scalar_one_or_none() @@ -388,29 +388,30 @@ class AutomationPlugin(BasePlugin): logger.exception("Failed to register contributed automation '%s' from plugin '%s'", prefixed_name, plugin_name) self._contributed_automations[plugin_name] = automation_names - # Register cron jobs + # Register cron jobs (skip if no tenant exists yet) cron_job_names: list[str] = [] - for cron_def in manifest.cron_jobs: - prefixed_name = f"{plugin_name}.{cron_def.name}" - cron_job_names.append(prefixed_name) - try: - # Check if cron job already exists - result = await db.execute( - select(AutomationCronJob).where(AutomationCronJob.name == prefixed_name).limit(1) - ) - existing = result.scalar_one_or_none() - if existing is None: - await CronJobService.create(db, default_tenant_id, { - "name": prefixed_name, - "cron_expression": cron_def.cron_expression, - "job_type": cron_def.job_type, - "target_name": cron_def.target_name, - "plugin_name": plugin_name, - "is_active": True, - }) + if default_tenant_id is not None: + for cron_def in manifest.cron_jobs: + prefixed_name = f"{plugin_name}.{cron_def.name}" + cron_job_names.append(prefixed_name) + try: + # Check if cron job already exists + result = await db.execute( + select(AutomationCronJob).where(AutomationCronJob.name == prefixed_name).limit(1) + ) + existing = result.scalar_one_or_none() + if existing is None: + await CronJobService.create(db, default_tenant_id, { + "name": prefixed_name, + "cron_expression": cron_def.cron_expression, + "job_type": cron_def.job_type, + "target_name": cron_def.target_name, + "plugin_name": plugin_name, + "is_active": True, + }) logger.info("Registered contributed cron job '%s' from plugin '%s'", prefixed_name, plugin_name) - except Exception: - logger.exception("Failed to register contributed cron job '%s' from plugin '%s'", prefixed_name, plugin_name) + except Exception: + logger.exception("Failed to register contributed cron job '%s' from plugin '%s'", prefixed_name, plugin_name) self._contributed_cron_jobs[plugin_name] = cron_job_names # Register heartbeat configs