Spaces:
Paused
Paused
| """ | |
| Management command for initial setup. | |
| This command is designed to be used as a Docker entrypoint or for | |
| scripted deployments where browser-based setup is not available. | |
| """ | |
| from django.core.management.base import BaseCommand | |
| from core.services.setup_service import SetupService | |
| class Command(BaseCommand): | |
| help = "Run initial setup (migrations + default environment)" | |
| def add_arguments(self, parser): | |
| parser.add_argument( | |
| "--skip-env", | |
| action="store_true", | |
| help="Skip creating the default Python environment", | |
| ) | |
| parser.add_argument( | |
| "--force", | |
| action="store_true", | |
| help="Run setup even if already completed", | |
| ) | |
| def handle(self, *args, **options): | |
| skip_env = options["skip_env"] | |
| force = options["force"] | |
| self.stdout.write("Starting PyRunner setup...\n") | |
| # ALWAYS run migrations (required for upgrades) | |
| self.stdout.write("Running database migrations...") | |
| success, message = SetupService.run_migrations() | |
| if success: | |
| self.stdout.write(self.style.SUCCESS(" Migrations complete")) | |
| else: | |
| self.stdout.write(self.style.ERROR(f" Migration failed: {message}")) | |
| return | |
| # Check if full setup is needed (environment creation, etc.) | |
| if not force and not SetupService.is_setup_needed(): | |
| self.stdout.write( | |
| self.style.SUCCESS("Setup already completed.") | |
| ) | |
| return | |
| # Create default environment (only on initial setup) | |
| if not skip_env: | |
| self.stdout.write("Creating default Python environment...") | |
| success, message = SetupService.create_default_environment() | |
| if success: | |
| self.stdout.write(self.style.SUCCESS(f" {message}")) | |
| else: | |
| self.stdout.write(self.style.ERROR(f" Failed: {message}")) | |
| return | |
| else: | |
| self.stdout.write( | |
| self.style.WARNING(" Skipping default environment (--skip-env)") | |
| ) | |
| # Mark setup as complete | |
| SetupService.complete_setup() | |
| self.stdout.write("") | |
| self.stdout.write(self.style.SUCCESS("Setup completed successfully!")) | |
| self.stdout.write("") | |
| self.stdout.write("Next steps:") | |
| self.stdout.write(" 1. Start the task worker: python manage.py qcluster") | |
| self.stdout.write(" 2. Start the web server: python manage.py runserver") | |
| self.stdout.write(" 3. Log in - the first user becomes the administrator") | |