typesdigital commited on
Commit
b53cb99
·
verified ·
1 Parent(s): 9865928

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +123 -0
app.py ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pymongo
3
+ from bson import ObjectId
4
+ from datetime import datetime
5
+ import bcrypt
6
+ import os
7
+
8
+ # MongoDB setup
9
+ client = pymongo.MongoClient(os.environ.get("MONGO_URI", "mongodb://localhost:27017/"))
10
+ db = client.aitrendpulse
11
+
12
+ def register_user(username, password):
13
+ users = db.users
14
+ existing_user = users.find_one({"username": username})
15
+ if existing_user:
16
+ return "Username already exists"
17
+ hashed = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
18
+ user_id = users.insert_one({
19
+ 'username': username,
20
+ 'password': hashed,
21
+ 'created_at': datetime.utcnow()
22
+ }).inserted_id
23
+ return f"User registered successfully. User ID: {str(user_id)}"
24
+
25
+ def login_user(username, password):
26
+ users = db.users
27
+ user = users.find_one({'username': username})
28
+ if user and bcrypt.checkpw(password.encode('utf-8'), user['password']):
29
+ return f"Login successful. User ID: {str(user['_id'])}"
30
+ else:
31
+ return "Invalid username or password"
32
+
33
+ def get_trends():
34
+ trends = db.trends.find().sort('created_at', -1).limit(10)
35
+ return "\n".join([f"Title: {trend['title']}, Category: {trend['category']}" for trend in trends])
36
+
37
+ def add_trend(title, description, category):
38
+ trends = db.trends
39
+ trend_id = trends.insert_one({
40
+ 'title': title,
41
+ 'description': description,
42
+ 'category': category,
43
+ 'created_at': datetime.utcnow()
44
+ }).inserted_id
45
+ return f"Trend added successfully. Trend ID: {str(trend_id)}"
46
+
47
+ def get_preferences(user_id):
48
+ preferences = db.preferences.find_one({'user_id': ObjectId(user_id)})
49
+ if preferences:
50
+ return f"Categories: {', '.join(preferences['categories'])}"
51
+ else:
52
+ return "Preferences not found"
53
+
54
+ def update_preferences(user_id, categories):
55
+ preferences = db.preferences
56
+ categories_list = [cat.strip() for cat in categories.split(',')]
57
+ result = preferences.update_one(
58
+ {'user_id': ObjectId(user_id)},
59
+ {'$set': {
60
+ 'categories': categories_list,
61
+ 'updated_at': datetime.utcnow()
62
+ }},
63
+ upsert=True
64
+ )
65
+ if result.modified_count > 0 or result.upserted_id:
66
+ return "Preferences updated successfully"
67
+ else:
68
+ return "No changes made to preferences"
69
+
70
+ # Gradio interface
71
+ with gr.Blocks() as demo:
72
+ gr.Markdown("# AITrendPulse")
73
+
74
+ with gr.Tab("User Management"):
75
+ with gr.Group():
76
+ gr.Markdown("## Register User")
77
+ register_username = gr.Textbox(label="Username")
78
+ register_password = gr.Textbox(label="Password", type="password")
79
+ register_button = gr.Button("Register")
80
+ register_output = gr.Textbox(label="Result")
81
+ register_button.click(register_user, inputs=[register_username, register_password], outputs=register_output)
82
+
83
+ with gr.Group():
84
+ gr.Markdown("## Login User")
85
+ login_username = gr.Textbox(label="Username")
86
+ login_password = gr.Textbox(label="Password", type="password")
87
+ login_button = gr.Button("Login")
88
+ login_output = gr.Textbox(label="Result")
89
+ login_button.click(login_user, inputs=[login_username, login_password], outputs=login_output)
90
+
91
+ with gr.Tab("Trend Management"):
92
+ with gr.Group():
93
+ gr.Markdown("## Get Trends")
94
+ get_trends_button = gr.Button("Get Trends")
95
+ trends_output = gr.Textbox(label="Trends")
96
+ get_trends_button.click(get_trends, inputs=[], outputs=trends_output)
97
+
98
+ with gr.Group():
99
+ gr.Markdown("## Add Trend")
100
+ trend_title = gr.Textbox(label="Title")
101
+ trend_description = gr.Textbox(label="Description")
102
+ trend_category = gr.Textbox(label="Category")
103
+ add_trend_button = gr.Button("Add Trend")
104
+ add_trend_output = gr.Textbox(label="Result")
105
+ add_trend_button.click(add_trend, inputs=[trend_title, trend_description, trend_category], outputs=add_trend_output)
106
+
107
+ with gr.Tab("User Preferences"):
108
+ with gr.Group():
109
+ gr.Markdown("## Get Preferences")
110
+ get_pref_user_id = gr.Textbox(label="User ID")
111
+ get_pref_button = gr.Button("Get Preferences")
112
+ get_pref_output = gr.Textbox(label="Preferences")
113
+ get_pref_button.click(get_preferences, inputs=[get_pref_user_id], outputs=get_pref_output)
114
+
115
+ with gr.Group():
116
+ gr.Markdown("## Update Preferences")
117
+ update_pref_user_id = gr.Textbox(label="User ID")
118
+ update_pref_categories = gr.Textbox(label="Categories (comma-separated)")
119
+ update_pref_button = gr.Button("Update Preferences")
120
+ update_pref_output = gr.Textbox(label="Result")
121
+ update_pref_button.click(update_preferences, inputs=[update_pref_user_id, update_pref_categories], outputs=update_pref_output)
122
+
123
+ demo.launch()