muhammadshaheryar commited on
Commit
cfaf51e
·
verified ·
1 Parent(s): b165736

Update src/main.py

Browse files
Files changed (1) hide show
  1. src/main.py +7 -55
src/main.py CHANGED
@@ -1,4 +1,3 @@
1
- """FastAPI application for Todo management."""
2
  import os
3
  import sys
4
  from pathlib import Path
@@ -10,35 +9,29 @@ from fastapi.middleware.cors import CORSMiddleware
10
  from sqlalchemy.orm import Session
11
  from dotenv import load_dotenv
12
 
13
- # Path setup
14
  _src_path = Path(__file__).parent
15
  sys.path.insert(0, str(_src_path))
16
  load_dotenv(_src_path.parent / ".env")
17
 
18
  from database import get_db, engine, Base
19
- from models.todo import Todo
20
- from models.user import User
21
- from schemas.todo import TodoCreate, TodoUpdate, TodoResponse, TodoListResponse
22
  from services.todo_service import TodoService
23
  from api.routes.auth import router as auth_router
24
  from api.chat_router import router as chat_router
25
  from api.task_router import router as task_router
26
  from middleware.auth import get_current_user
27
 
28
- # --- CRITICAL FIX: NO LIFESPAN ARGUMENT HERE ---
29
  app = FastAPI(
30
  title="Todo API",
31
- description="REST API for managing todo items",
32
- version="2.0.0"
33
  )
34
 
35
- # Use the older startup event which is more stable in container environments
36
  @app.on_event("startup")
37
  def startup_event():
38
- print("Application starting up... Creating database tables.")
39
  Base.metadata.create_all(bind=engine)
40
 
41
- # FIXED CORS: Using "*" ensures GitHub Pages is never blocked
42
  app.add_middleware(
43
  CORSMiddleware,
44
  allow_origins=["*"],
@@ -47,55 +40,14 @@ app.add_middleware(
47
  allow_headers=["*"],
48
  )
49
 
50
- # Include routers
51
  app.include_router(auth_router, prefix="/api/v1")
52
  app.include_router(chat_router)
53
  app.include_router(task_router, prefix="/api/v1")
54
 
55
- # Helper functions
56
- def _calculate_overdue(todo: Todo) -> bool:
57
- if todo.due_date is None or todo.completed:
58
- return False
59
- return todo.due_date < datetime.utcnow()
60
 
61
- def _todo_to_response(todo: Todo) -> TodoResponse:
62
- return TodoResponse(
63
- id=todo.id,
64
- user_id=todo.user_id,
65
- title=todo.title,
66
- description=todo.description,
67
- completed=todo.completed,
68
- priority=todo.priority,
69
- tags=todo.tags,
70
- due_date=todo.due_date,
71
- recurrence=todo.recurrence,
72
- created_at=todo.created_at,
73
- updated_at=todo.updated_at,
74
- overdue=_calculate_overdue(todo)
75
- )
76
-
77
- # Basic Routes
78
- @app.get("/api/v1/todos", response_model=TodoListResponse)
79
- def get_todos(
80
- db: Session = Depends(get_db),
81
- current_user: User = Depends(get_current_user),
82
- search: Optional[str] = Query(None),
83
- status: Optional[str] = Query(None),
84
- priority: Optional[str] = Query(None),
85
- ):
86
- service = TodoService(db, user_id=current_user.id)
87
- todos = service.get_all(search=search, status=status, priority=priority)
88
- todos_response = [_todo_to_response(todo) for todo in todos]
89
- return {"todos": todos_response, "count": len(todos_response), "has_more": False}
90
-
91
- @app.post("/api/v1/todos", response_model=TodoResponse, status_code=201)
92
- def create_todo(todo_data: TodoCreate, db: Session = Depends(get_db), current_user: User = Depends(get_current_user)):
93
- service = TodoService(db, user_id=current_user.id)
94
- todo = service.create(todo_data)
95
- return _todo_to_response(todo)
96
-
97
- # Deployment entry point
98
  if __name__ == "__main__":
99
  import uvicorn
100
- # Hugging Face Spaces port is 7860
101
  uvicorn.run(app, host="0.0.0.0", port=7860)
 
 
1
  import os
2
  import sys
3
  from pathlib import Path
 
9
  from sqlalchemy.orm import Session
10
  from dotenv import load_dotenv
11
 
 
12
  _src_path = Path(__file__).parent
13
  sys.path.insert(0, str(_src_path))
14
  load_dotenv(_src_path.parent / ".env")
15
 
16
  from database import get_db, engine, Base
 
 
 
17
  from services.todo_service import TodoService
18
  from api.routes.auth import router as auth_router
19
  from api.chat_router import router as chat_router
20
  from api.task_router import router as task_router
21
  from middleware.auth import get_current_user
22
 
23
+ # FORCE DISABLE LIFESPAN to bypass the Starlette error
24
  app = FastAPI(
25
  title="Todo API",
26
+ version="2.0.0",
27
+ lifespan=None # This explicitly tells FastAPI to ignore lifespan generators
28
  )
29
 
 
30
  @app.on_event("startup")
31
  def startup_event():
32
+ # Use the old-school startup method
33
  Base.metadata.create_all(bind=engine)
34
 
 
35
  app.add_middleware(
36
  CORSMiddleware,
37
  allow_origins=["*"],
 
40
  allow_headers=["*"],
41
  )
42
 
 
43
  app.include_router(auth_router, prefix="/api/v1")
44
  app.include_router(chat_router)
45
  app.include_router(task_router, prefix="/api/v1")
46
 
47
+ @app.get("/")
48
+ def health_check():
49
+ return {"status": "online"}
 
 
50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  if __name__ == "__main__":
52
  import uvicorn
 
53
  uvicorn.run(app, host="0.0.0.0", port=7860)