|
|
import os |
|
|
from dotenv import load_dotenv |
|
|
from sqlalchemy import create_engine, text |
|
|
import pandas as pd |
|
|
import gradio as gr |
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
DATABASE_URL = os.getenv('DATABASE_URL') |
|
|
engine = create_engine(DATABASE_URL) |
|
|
|
|
|
def test_connection(): |
|
|
"""Test database connection and show basic info""" |
|
|
try: |
|
|
with engine.connect() as connection: |
|
|
result = connection.execute(text("SELECT version()")) |
|
|
version = result.scalar() |
|
|
return f"โ
์ฐ๊ฒฐ ์ฑ๊ณต!\n๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ : {version}" |
|
|
except Exception as e: |
|
|
return f"โ ์ฐ๊ฒฐ ์คํจ: {e}" |
|
|
|
|
|
def get_all_puzzles(): |
|
|
"""Fetch all puzzles from database""" |
|
|
try: |
|
|
query = text("SELECT * FROM puzzles ORDER BY puzzle_number") |
|
|
df = pd.read_sql_query(query, engine) |
|
|
return df |
|
|
except Exception as e: |
|
|
return pd.DataFrame({"error": [str(e)]}) |
|
|
|
|
|
def get_puzzle_by_difficulty(difficulty): |
|
|
"""Fetch puzzles filtered by difficulty""" |
|
|
try: |
|
|
if difficulty == "์ ์ฒด": |
|
|
query = text("SELECT * FROM puzzles ORDER BY puzzle_number") |
|
|
df = pd.read_sql_query(query, engine) |
|
|
else: |
|
|
query = text("SELECT * FROM puzzles WHERE difficulty = :difficulty ORDER BY puzzle_number") |
|
|
df = pd.read_sql_query(query, engine, params={"difficulty": difficulty}) |
|
|
return df |
|
|
except Exception as e: |
|
|
return pd.DataFrame({"error": [str(e)]}) |
|
|
|
|
|
def get_table_count(): |
|
|
"""Get total count of puzzles""" |
|
|
try: |
|
|
query = text("SELECT COUNT(*) FROM puzzles") |
|
|
with engine.connect() as connection: |
|
|
result = connection.execute(query) |
|
|
count = result.scalar() |
|
|
return f"์ ์ฒด ํผ์ฆ ๊ฐ์: {count}๊ฐ" |
|
|
except Exception as e: |
|
|
return f"์ค๋ฅ: {e}" |
|
|
|
|
|
with gr.Blocks(title="Puzzles DB ํ
์คํธ") as demo: |
|
|
gr.Markdown("# ๐งฉ Puzzles ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ํ
์คํธ") |
|
|
|
|
|
with gr.Row(): |
|
|
with gr.Column(): |
|
|
test_btn = gr.Button("์ฐ๊ฒฐ ํ
์คํธ", variant="primary") |
|
|
connection_status = gr.Textbox(label="์ฐ๊ฒฐ ์ํ", lines=3) |
|
|
|
|
|
with gr.Column(): |
|
|
count_btn = gr.Button("๋ฐ์ดํฐ ๊ฐ์ ํ์ธ") |
|
|
count_output = gr.Textbox(label="๊ฐ์") |
|
|
|
|
|
gr.Markdown("## ์ ์ฒด ๋ฐ์ดํฐ ์กฐํ") |
|
|
load_all_btn = gr.Button("๋ชจ๋ ํผ์ฆ ๋ถ๋ฌ์ค๊ธฐ") |
|
|
all_data = gr.Dataframe(label="์ ์ฒด ํผ์ฆ ๋ฐ์ดํฐ") |
|
|
|
|
|
gr.Markdown("## ๋์ด๋๋ณ ํํฐ๋ง") |
|
|
difficulty_filter = gr.Dropdown( |
|
|
["์ ์ฒด", "easy", "medium", "hard"], |
|
|
value="์ ์ฒด", |
|
|
label="๋์ด๋ ์ ํ" |
|
|
) |
|
|
filter_btn = gr.Button("ํํฐ ์ ์ฉ") |
|
|
filtered_data = gr.Dataframe(label="ํํฐ๋ง๋ ๋ฐ์ดํฐ") |
|
|
|
|
|
|
|
|
test_btn.click(test_connection, outputs=connection_status) |
|
|
count_btn.click(get_table_count, outputs=count_output) |
|
|
load_all_btn.click(get_all_puzzles, outputs=all_data) |
|
|
filter_btn.click(get_puzzle_by_difficulty, inputs=difficulty_filter, outputs=filtered_data) |
|
|
difficulty_filter.change(get_puzzle_by_difficulty, inputs=difficulty_filter, outputs=filtered_data) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |