venkata1995 commited on
Commit
8be68c0
·
verified ·
1 Parent(s): e21b087

Update app/main.py

Browse files
Files changed (1) hide show
  1. app/main.py +27 -24
app/main.py CHANGED
@@ -1,22 +1,24 @@
1
  from fastapi import FastAPI
2
- from fastapi.responses import HTMLResponse
3
  from pydantic import BaseModel
4
  from supabase import create_client, Client
5
  import os
6
  import gradio as gr
7
  import requests
8
 
 
9
  SUPABASE_URL = os.getenv("SUPABASE_URL")
10
  SUPABASE_KEY = os.getenv("SUPABASE_KEY")
11
  supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)
12
 
 
13
  app = FastAPI()
14
 
15
- ### --- Task API --- ###
16
  class Task(BaseModel):
17
  title: str
18
  completed: bool = False
19
 
 
20
  @app.post("/tasks/")
21
  def add_task(task: Task):
22
  response = supabase.table("tasks").insert(task.dict()).execute()
@@ -37,64 +39,65 @@ def delete_task(task_id: str):
37
  supabase.table("tasks").delete().eq("id", task_id).execute()
38
  return {"detail": "Task deleted"}
39
 
40
- ### --- Gradio frontend logic --- ###
41
- API_URL = "http://localhost:7860"
42
 
43
  def get_tasks_data():
44
  response = requests.get(f"{API_URL}/tasks/")
45
  return response.json()
46
 
47
- def format_task(task):
48
- return f"{task['id']} | {task['title']} - {'✔️' if task['completed'] else '❌'}"
 
 
49
 
50
- def get_tasks_ui():
51
- return [format_task(t) for t in get_tasks_data()]
 
52
 
53
  def add_task_ui(title):
54
  if not title.strip():
55
- return "Title cannot be empty", get_tasks_ui(), gr.update(choices=get_tasks_ui())
56
  requests.post(f"{API_URL}/tasks/", json={"title": title, "completed": False})
57
- return "", get_tasks_ui(), gr.update(choices=get_tasks_ui())
58
 
59
- def complete_task_ui(task_id_combo):
60
- task_id = task_id_combo.split(" | ")[0]
61
  requests.patch(f"{API_URL}/tasks/{task_id}", params={"completed": True})
62
- return get_tasks_ui(), gr.update(choices=get_tasks_ui())
63
 
64
- def delete_task_ui(task_id_combo):
65
- task_id = task_id_combo.split(" | ")[0]
66
  requests.delete(f"{API_URL}/tasks/{task_id}")
67
- return get_tasks_ui(), gr.update(choices=get_tasks_ui())
68
-
69
- def get_task_choices():
70
- tasks = get_tasks_data()
71
- return [(f"{t['title']} - {'✔️' if t['completed'] else '❌'}", t['id']) for t in tasks]
72
 
 
73
  with gr.Blocks() as demo:
74
- gr.Markdown("## ✅ Task List Manager (FastAPI + Supabase)")
75
 
76
  with gr.Row():
77
  task_input = gr.Textbox(label="New Task", placeholder="e.g., Write blog post")
78
  add_button = gr.Button("Add Task")
79
 
80
  task_selector = gr.Dropdown(label="Select a Task", choices=[])
 
81
  with gr.Row():
82
  complete_button = gr.Button("Mark as Completed")
83
  delete_button = gr.Button("Delete Task")
84
 
85
  task_display = gr.Textbox(label="All Tasks", lines=10)
86
 
87
- # Button click logic
88
  add_button.click(add_task_ui, inputs=task_input, outputs=[task_input, task_display, task_selector])
89
  complete_button.click(complete_task_ui, inputs=task_selector, outputs=[task_display, task_selector])
90
  delete_button.click(delete_task_ui, inputs=task_selector, outputs=[task_display, task_selector])
 
 
91
  demo.load(
92
  lambda: (
93
- [f"{t['title']} - {'✔️' if t['completed'] else '❌'}" for t in get_tasks_data()],
94
  gr.update(choices=get_task_choices())
95
  ),
96
  outputs=[task_display, task_selector]
97
  )
98
 
99
- # Mount Gradio at root path
100
  app = gr.mount_gradio_app(app, demo, path="/")
 
1
  from fastapi import FastAPI
 
2
  from pydantic import BaseModel
3
  from supabase import create_client, Client
4
  import os
5
  import gradio as gr
6
  import requests
7
 
8
+ # --- Supabase Config ---
9
  SUPABASE_URL = os.getenv("SUPABASE_URL")
10
  SUPABASE_KEY = os.getenv("SUPABASE_KEY")
11
  supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)
12
 
13
+ # --- FastAPI Setup ---
14
  app = FastAPI()
15
 
16
+ # --- Pydantic Task Model ---
17
  class Task(BaseModel):
18
  title: str
19
  completed: bool = False
20
 
21
+ # --- API Endpoints ---
22
  @app.post("/tasks/")
23
  def add_task(task: Task):
24
  response = supabase.table("tasks").insert(task.dict()).execute()
 
39
  supabase.table("tasks").delete().eq("id", task_id).execute()
40
  return {"detail": "Task deleted"}
41
 
42
+ # --- Gradio Frontend Logic ---
43
+ API_URL = "http://localhost:7860" # adjust if needed for Hugging Face Spaces
44
 
45
  def get_tasks_data():
46
  response = requests.get(f"{API_URL}/tasks/")
47
  return response.json()
48
 
49
+ def get_task_choices():
50
+ """Returns [(label, uuid)] for the dropdown."""
51
+ tasks = get_tasks_data()
52
+ return [(f"{t['title']} - {'✔️' if t['completed'] else '❌'}", t['id']) for t in tasks]
53
 
54
+ def get_task_display():
55
+ """Returns formatted list of tasks for display."""
56
+ return [f"{t['title']} - {'✔️' if t['completed'] else '❌'}" for t in get_tasks_data()]
57
 
58
  def add_task_ui(title):
59
  if not title.strip():
60
+ return "Title cannot be empty", get_task_display(), gr.update(choices=get_task_choices())
61
  requests.post(f"{API_URL}/tasks/", json={"title": title, "completed": False})
62
+ return "", get_task_display(), gr.update(choices=get_task_choices())
63
 
64
+ def complete_task_ui(task_id):
 
65
  requests.patch(f"{API_URL}/tasks/{task_id}", params={"completed": True})
66
+ return get_task_display(), gr.update(choices=get_task_choices())
67
 
68
+ def delete_task_ui(task_id):
 
69
  requests.delete(f"{API_URL}/tasks/{task_id}")
70
+ return get_task_display(), gr.update(choices=get_task_choices())
 
 
 
 
71
 
72
+ # --- Gradio UI ---
73
  with gr.Blocks() as demo:
74
+ gr.Markdown("## ✅ Task List Manager")
75
 
76
  with gr.Row():
77
  task_input = gr.Textbox(label="New Task", placeholder="e.g., Write blog post")
78
  add_button = gr.Button("Add Task")
79
 
80
  task_selector = gr.Dropdown(label="Select a Task", choices=[])
81
+
82
  with gr.Row():
83
  complete_button = gr.Button("Mark as Completed")
84
  delete_button = gr.Button("Delete Task")
85
 
86
  task_display = gr.Textbox(label="All Tasks", lines=10)
87
 
88
+ # Button Logic
89
  add_button.click(add_task_ui, inputs=task_input, outputs=[task_input, task_display, task_selector])
90
  complete_button.click(complete_task_ui, inputs=task_selector, outputs=[task_display, task_selector])
91
  delete_button.click(delete_task_ui, inputs=task_selector, outputs=[task_display, task_selector])
92
+
93
+ # Load initial data
94
  demo.load(
95
  lambda: (
96
+ get_task_display(),
97
  gr.update(choices=get_task_choices())
98
  ),
99
  outputs=[task_display, task_selector]
100
  )
101
 
102
+ # Mount Gradio app into FastAPI
103
  app = gr.mount_gradio_app(app, demo, path="/")