latest code
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
try:
|
||||
import typer
|
||||
except ImportError:
|
||||
print("Typer is not installed. Please install it using: pip install typer")
|
||||
sys.exit(1)
|
||||
|
||||
app = typer.Typer(help="DocQube Management CLI")
|
||||
|
||||
|
||||
def run_command(args: list[str], env_name: str):
|
||||
"""Helper function to run subprocess commands with isolated environment variables."""
|
||||
if not args:
|
||||
return
|
||||
|
||||
# Use current virtual environment's python executable
|
||||
if args[0] == "python":
|
||||
args[0] = sys.executable
|
||||
|
||||
# Copy current OS environment and inject the passed env_name
|
||||
env = os.environ.copy()
|
||||
|
||||
# Map 'local' to 'localdev' to avoid Vite .env naming conflicts
|
||||
if env_name == "local":
|
||||
env_name = "localdev"
|
||||
|
||||
env["APP_ENV"] = env_name
|
||||
|
||||
try:
|
||||
subprocess.run(args, env=env, check=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
sys.exit(e.returncode)
|
||||
except KeyboardInterrupt:
|
||||
# Exit silently on Ctrl+C
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
@app.command()
|
||||
def run(
|
||||
env: str = typer.Option(
|
||||
None,
|
||||
"--env",
|
||||
"-e",
|
||||
help="Target environment to run the server in",
|
||||
)
|
||||
):
|
||||
"""
|
||||
Start the FastAPI application server.
|
||||
"""
|
||||
|
||||
actual_env = env or os.getenv("APP_ENV", "local")
|
||||
|
||||
if actual_env == "local":
|
||||
actual_env = "localdev"
|
||||
|
||||
typer.echo(f"Starting server in {actual_env.upper()} mode...")
|
||||
|
||||
os.environ["APP_ENV"] = actual_env
|
||||
|
||||
from app.core.settings import settings
|
||||
|
||||
args = [
|
||||
sys.executable,
|
||||
"-m",
|
||||
"uvicorn",
|
||||
"app.main:app",
|
||||
"--host",
|
||||
settings.HOST,
|
||||
"--port",
|
||||
str(settings.PORT),
|
||||
]
|
||||
|
||||
if actual_env in ["local", "development", "localdev"]:
|
||||
args.append("--reload")
|
||||
|
||||
run_command(args, actual_env)
|
||||
|
||||
|
||||
|
||||
@app.command()
|
||||
def migrate(
|
||||
env: str = typer.Option(
|
||||
"local", "--env", "-e", help="Target environment for migrations"
|
||||
)
|
||||
):
|
||||
"""
|
||||
Run Alembic database migrations.
|
||||
"""
|
||||
actual_env = "localdev" if env == "local" else env
|
||||
typer.echo(f"[*] Running migrations in {actual_env.upper()} mode...")
|
||||
|
||||
args = [sys.executable, "-m", "alembic", "upgrade", "head"]
|
||||
run_command(args, actual_env)
|
||||
|
||||
|
||||
@app.command()
|
||||
def seed(
|
||||
env: str = typer.Option(
|
||||
"local", "--env", "-e", help="Target environment for seeding"
|
||||
)
|
||||
):
|
||||
"""
|
||||
Run the database seed script.
|
||||
"""
|
||||
actual_env = "localdev" if env == "local" else env
|
||||
typer.echo(f"[*] Seeding database in {actual_env.upper()} mode...")
|
||||
|
||||
args = [sys.executable, os.path.join("scripts", "seed.py")]
|
||||
run_command(args, actual_env)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app()
|
||||
Reference in New Issue
Block a user