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() |