cli-backend / app.py
theguywhosucks's picture
Update app.py
ed8b571 verified
Raw
History Blame Contribute Delete
6.09 kB
import os
import uuid
import gradio as gr
import requests
from fastapi import FastAPI
from fastapi.responses import FileResponse
from gradio_client import Client, handle_file
# -------------------------
# CONFIG
# -------------------------
SPACE = "pockit-cloud/main"
client = Client(SPACE)
HF_TOKEN = os.getenv("HF_TOKEN") # Secret for private dataset
# -------------------------
# LOGIN
# -------------------------
def login(user_id, password):
if not user_id or not password:
return "Username and password required", []
try:
files, status = client.predict(
user_id=user_id,
password=password,
api_name="/get_files_secure"
)
return status, files
except Exception as e:
return f"Login error: {e}", []
# -------------------------
# LIST FILES
# -------------------------
def list_files(user_id, password):
if not user_id or not password:
return "Username and password required", []
try:
files, status = client.predict(
user_id=user_id,
password=password,
api_name="/get_files_secure"
)
return status, files
except Exception as e:
return str(e), []
# -------------------------
# DOWNLOAD (UNCHANGED LOGIC)
# Returns temp file so Gradio generates link
# -------------------------
def download_file(user_id, password, filename):
if not user_id or not password:
return None
if not filename:
return None
try:
link = client.predict(
user_id=user_id,
password=password,
filename=filename,
api_name="/get_download_link_action"
)
headers = {}
if HF_TOKEN:
headers["Authorization"] = f"Bearer {HF_TOKEN}"
r = requests.get(link, headers=headers, stream=True)
r.raise_for_status()
temp_name = f"{uuid.uuid4()}_{filename}"
with open(temp_name, "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
return temp_name # IMPORTANT: keeps auto link behavior
except Exception as e:
print(e)
return None
# -------------------------
# UPLOAD
# -------------------------
def upload_file(user_id, password, file, custom_name):
if not user_id or not password:
return "Username and password required"
if not file:
return "No file selected"
try:
result = client.predict(
user_id=user_id,
password=password,
filepath=handle_file(file),
custom_name=custom_name if custom_name else os.path.basename(file),
api_name="/upload_file_secure"
)
return result[0]
except Exception as e:
return str(e)
# -------------------------
# DELETE
# -------------------------
def delete_file(user_id, password, filename):
if not user_id or not password:
return "Username and password required"
if not filename:
return "No file selected"
try:
result = client.predict(
user_id=user_id,
password=password,
filename=filename,
api_name="/delete_file_secure"
)
return result
except Exception as e:
return str(e)
# -------------------------
# PASSWORD CHANGE
# -------------------------
def change_password(user_id, password, new_password):
if not user_id or not password or not new_password:
return "All fields required"
try:
result = client.predict(
user_id=user_id,
new_password=new_password,
api_name="/update_password"
)
return result
except Exception as e:
return str(e)
# -------------------------
# GRADIO UI
# -------------------------
with gr.Blocks(title="Pockit Cloud Client") as app:
gr.Markdown("# ☁️ Pockit Cloud Client")
user = gr.Textbox(label="User ID")
pw = gr.Textbox(label="Password", type="password")
with gr.Tab("Login"):
login_btn = gr.Button("Login")
login_status = gr.Textbox(label="Status")
login_files = gr.Dropdown(label="Files", choices=[])
login_btn.click(
login,
inputs=[user, pw],
outputs=[login_status, login_files]
)
with gr.Tab("Files"):
refresh_btn = gr.Button("Refresh File List")
file_list = gr.Dropdown(label="Your Files", choices=[])
status_box = gr.Textbox(label="Status")
refresh_btn.click(
list_files,
inputs=[user, pw],
outputs=[status_box, file_list]
)
gr.Markdown("### Download")
download_btn = gr.Button("Download File")
download_output = gr.File(label="Downloaded File")
download_btn.click(
download_file,
inputs=[user, pw, file_list],
outputs=download_output
)
gr.Markdown("### Upload")
upload_input = gr.File(label="Select File")
custom_name = gr.Textbox(label="Custom Name (Optional)")
upload_btn = gr.Button("Upload")
upload_status = gr.Textbox(label="Upload Status")
upload_btn.click(
upload_file,
inputs=[user, pw, upload_input, custom_name],
outputs=upload_status
)
gr.Markdown("### Delete")
delete_btn = gr.Button("Delete Selected File")
delete_status = gr.Textbox(label="Delete Status")
delete_btn.click(
delete_file,
inputs=[user, pw, file_list],
outputs=delete_status
)
with gr.Tab("Password"):
new_pw = gr.Textbox(label="New Password", type="password")
change_btn = gr.Button("Change Password")
change_status = gr.Textbox(label="Status")
change_btn.click(
change_password,
inputs=[user, pw, new_pw],
outputs=change_status
)
# IMPORTANT FOR SPACES
app.queue()
app.launch()