Spaces:
Configuration error
Configuration error
import gradio as gr | |
from flask import Flask, jsonify, request | |
from flask_pymongo import PyMongo | |
from bson import ObjectId | |
from datetime import datetime | |
import bcrypt | |
import os | |
app = Flask(__name__) | |
app.config["MONGO_URI"] = os.environ.get("MONGO_URI", "mongodb://localhost:27017/aitrendpulse") | |
mongo = PyMongo(app) | |
# User Management | |
def register_user(username, password): | |
users = mongo.db.users | |
hashed = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()) | |
user_id = users.insert_one({ | |
'username': username, | |
'password': hashed, | |
'created_at': datetime.utcnow() | |
}).inserted_id | |
return f"User registered successfully. User ID: {str(user_id)}" | |
def login_user(username, password): | |
users = mongo.db.users | |
user = users.find_one({'username': username}) | |
if user and bcrypt.checkpw(password.encode('utf-8'), user['password']): | |
return f"Login successful. User ID: {str(user['_id'])}" | |
else: | |
return "Invalid username or password" | |
# Trend Management | |
def get_trends(): | |
trends = mongo.db.trends.find().sort('created_at', -1).limit(10) | |
return "\n".join([f"Title: {trend['title']}, Category: {trend['category']}" for trend in trends]) | |
def add_trend(title, description, category): | |
trends = mongo.db.trends | |
trend_id = trends.insert_one({ | |
'title': title, | |
'description': description, | |
'category': category, | |
'created_at': datetime.utcnow() | |
}).inserted_id | |
return f"Trend added successfully. Trend ID: {str(trend_id)}" | |
# User Preferences | |
def get_preferences(user_id): | |
preferences = mongo.db.preferences.find_one({'user_id': ObjectId(user_id)}) | |
if preferences: | |
return f"Categories: {', '.join(preferences['categories'])}" | |
else: | |
return "Preferences not found" | |
def update_preferences(user_id, categories): | |
preferences = mongo.db.preferences | |
categories_list = [cat.strip() for cat in categories.split(',')] | |
result = preferences.update_one( | |
{'user_id': ObjectId(user_id)}, | |
{'$set': { | |
'categories': categories_list, | |
'updated_at': datetime.utcnow() | |
}}, | |
upsert=True | |
) | |
if result.modified_count > 0 or result.upserted_id: | |
return "Preferences updated successfully" | |
else: | |
return "No changes made to preferences" | |
# Gradio Interface | |
def create_gradio_interface(): | |
with gr.Blocks() as demo: | |
gr.Markdown("# AITrendPulse") | |
with gr.Tab("User Management"): | |
with gr.Group(): | |
gr.Markdown("## Register User") | |
register_username = gr.Textbox(label="Username") | |
register_password = gr.Textbox(label="Password", type="password") | |
register_button = gr.Button("Register") | |
register_output = gr.Textbox(label="Result") | |
register_button.click(register_user, inputs=[register_username, register_password], outputs=register_output) | |
with gr.Group(): | |
gr.Markdown("## Login User") | |
login_username = gr.Textbox(label="Username") | |
login_password = gr.Textbox(label="Password", type="password") | |
login_button = gr.Button("Login") | |
login_output = gr.Textbox(label="Result") | |
login_button.click(login_user, inputs=[login_username, login_password], outputs=login_output) | |
with gr.Tab("Trend Management"): | |
with gr.Group(): | |
gr.Markdown("## Get Trends") | |
get_trends_button = gr.Button("Get Trends") | |
trends_output = gr.Textbox(label="Trends") | |
get_trends_button.click(get_trends, inputs=[], outputs=trends_output) | |
with gr.Group(): | |
gr.Markdown("## Add Trend") | |
trend_title = gr.Textbox(label="Title") | |
trend_description = gr.Textbox(label="Description") | |
trend_category = gr.Textbox(label="Category") | |
add_trend_button = gr.Button("Add Trend") | |
add_trend_output = gr.Textbox(label="Result") | |
add_trend_button.click(add_trend, inputs=[trend_title, trend_description, trend_category], outputs=add_trend_output) | |
with gr.Tab("User Preferences"): | |
with gr.Group(): | |
gr.Markdown("## Get Preferences") | |
get_pref_user_id = gr.Textbox(label="User ID") | |
get_pref_button = gr.Button("Get Preferences") | |
get_pref_output = gr.Textbox(label="Preferences") | |
get_pref_button.click(get_preferences, inputs=[get_pref_user_id], outputs=get_pref_output) | |
with gr.Group(): | |
gr.Markdown("## Update Preferences") | |
update_pref_user_id = gr.Textbox(label="User ID") | |
update_pref_categories = gr.Textbox(label="Categories (comma-separated)") | |
update_pref_button = gr.Button("Update Preferences") | |
update_pref_output = gr.Textbox(label="Result") | |
update_pref_button.click(update_preferences, inputs=[update_pref_user_id, update_pref_categories], outputs=update_pref_output) | |
return demo | |
# Create and launch the Gradio interface | |
interface = create_gradio_interface() | |
interface.launch() |