VIATEUR-AI commited on
Commit
e34ddbf
·
verified ·
1 Parent(s): 310265c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -45
app.py CHANGED
@@ -1,10 +1,10 @@
 
1
  import gradio as gr
2
  import sqlite3
3
  import hashlib
4
- import os
5
 
6
  # ---------------- Database Setup ----------------
7
- DB_PATH = './family.db' # relative path for HF Space
8
  conn = sqlite3.connect(DB_PATH, check_same_thread=False)
9
  cursor = conn.cursor()
10
 
@@ -44,6 +44,16 @@ CREATE TABLE IF NOT EXISTS expenses(
44
  ''')
45
  conn.commit()
46
 
 
 
 
 
 
 
 
 
 
 
47
  # ---------------- Utility Functions ----------------
48
  def hash_password(password):
49
  return hashlib.sha256(password.encode()).hexdigest()
@@ -122,53 +132,60 @@ def delete_expense(id):
122
 
123
  # ---------------- Gradio Interface ----------------
124
  with gr.Blocks() as demo:
125
- gr.Markdown("## Family Software Online")
126
-
 
127
  with gr.Row():
128
  username = gr.Textbox(label="Username")
129
  password = gr.Textbox(label="Password", type="password")
130
  login_btn = gr.Button("Login")
131
  login_status = gr.Label("")
132
-
133
- with gr.Column(visible=False) as main_app:
134
- gr.Markdown("### Family Members")
135
- id_input = gr.Number(label="ID (for Edit/Delete)")
136
- name = gr.Textbox(label="Name")
137
- dob = gr.Textbox(label="DOB (YYYY-MM-DD)")
138
- gender = gr.Textbox(label="Gender")
139
- relationship = gr.Textbox(label="Relationship")
140
- phone = gr.Textbox(label="Phone")
141
- email = gr.Textbox(label="Email")
142
- add_member_btn = gr.Button("Add Member")
143
- edit_member_btn = gr.Button("Edit Member")
144
- delete_member_btn = gr.Button("Delete Member")
145
- view_members_btn = gr.Button("View Members")
146
- members_output = gr.Textbox(label="Members", lines=10)
147
-
148
- gr.Markdown("### Expenses")
149
- expense_id = gr.Number(label="Expense ID (Edit/Delete)")
150
- member_id_input = gr.Number(label="Member ID")
151
- amount_input = gr.Number(label="Amount")
152
- category_input = gr.Textbox(label="Category")
153
- date_input = gr.Textbox(label="Date (YYYY-MM-DD)")
154
- desc_input = gr.Textbox(label="Description")
155
- add_expense_btn = gr.Button("Add Expense")
156
- edit_expense_btn = gr.Button("Edit Expense")
157
- delete_expense_btn = gr.Button("Delete Expense")
158
- view_expenses_btn = gr.Button("View Expenses")
159
- expenses_output = gr.Textbox(label="Expenses", lines=10)
160
-
161
- # Button actions
162
  login_btn.click(check_login, [username, password], [login_status, main_app])
163
- add_member_btn.click(add_member, [name, dob, gender, relationship, phone, email], members_output)
164
- edit_member_btn.click(edit_member, [id_input, name, dob, gender, relationship, phone, email], members_output)
165
- delete_member_btn.click(delete_member, [id_input], members_output)
166
- view_members_btn.click(view_members, [], members_output)
167
-
168
- add_expense_btn.click(add_expense, [member_id_input, amount_input, category_input, date_input, desc_input], expenses_output)
169
- edit_expense_btn.click(edit_expense, [expense_id, member_id_input, amount_input, category_input, date_input, desc_input], expenses_output)
170
- delete_expense_btn.click(delete_expense, [expense_id], expenses_output)
171
- view_expenses_btn.click(view_expenses, [], expenses_output)
172
-
173
- # ---------------- Launch without errors ----------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
  demo.launch()
 
1
+ # app.py
2
  import gradio as gr
3
  import sqlite3
4
  import hashlib
 
5
 
6
  # ---------------- Database Setup ----------------
7
+ DB_PATH = './family.db'
8
  conn = sqlite3.connect(DB_PATH, check_same_thread=False)
9
  cursor = conn.cursor()
10
 
 
44
  ''')
45
  conn.commit()
46
 
47
+ # ---------------- Default Admin ----------------
48
+ DEFAULT_ADMIN = "admin"
49
+ DEFAULT_PASSWORD = "1234"
50
+ cursor.execute("SELECT * FROM users WHERE username=?", (DEFAULT_ADMIN,))
51
+ if not cursor.fetchone():
52
+ cursor.execute("INSERT INTO users(username,password_hash) VALUES (?,?)",
53
+ (DEFAULT_ADMIN, hashlib.sha256(DEFAULT_PASSWORD.encode()).hexdigest()))
54
+ conn.commit()
55
+ print(f"Default admin created! Username: {DEFAULT_ADMIN}, Password: {DEFAULT_PASSWORD}")
56
+
57
  # ---------------- Utility Functions ----------------
58
  def hash_password(password):
59
  return hashlib.sha256(password.encode()).hexdigest()
 
132
 
133
  # ---------------- Gradio Interface ----------------
134
  with gr.Blocks() as demo:
135
+ gr.Markdown("## 🏠 Family Management App")
136
+
137
+ # ---------------- Login Section ----------------
138
  with gr.Row():
139
  username = gr.Textbox(label="Username")
140
  password = gr.Textbox(label="Password", type="password")
141
  login_btn = gr.Button("Login")
142
  login_status = gr.Label("")
143
+ register_btn = gr.Button("Register Admin")
144
+
145
+ main_app = gr.Column(visible=False)
146
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  login_btn.click(check_login, [username, password], [login_status, main_app])
148
+ register_btn.click(register_admin, [username, password], login_status)
149
+
150
+ # ---------------- Tabs ----------------
151
+ with main_app:
152
+ with gr.Tabs():
153
+ with gr.Tab("Family Members"):
154
+ id_input = gr.Number(label="ID (for Edit/Delete)")
155
+ name = gr.Textbox(label="Name")
156
+ dob = gr.Textbox(label="DOB (YYYY-MM-DD)")
157
+ gender = gr.Textbox(label="Gender")
158
+ relationship = gr.Textbox(label="Relationship")
159
+ phone = gr.Textbox(label="Phone")
160
+ email = gr.Textbox(label="Email")
161
+ add_member_btn = gr.Button("Add Member")
162
+ edit_member_btn = gr.Button("Edit Member")
163
+ delete_member_btn = gr.Button("Delete Member")
164
+ view_members_btn = gr.Button("View Members")
165
+ members_output = gr.Textbox(label="Members", lines=10)
166
+
167
+ add_member_btn.click(add_member, [name, dob, gender, relationship, phone, email], members_output)
168
+ edit_member_btn.click(edit_member, [id_input, name, dob, gender, relationship, phone, email], members_output)
169
+ delete_member_btn.click(delete_member, [id_input], members_output)
170
+ view_members_btn.click(view_members, [], members_output)
171
+
172
+ with gr.Tab("Expenses"):
173
+ expense_id = gr.Number(label="Expense ID (Edit/Delete)")
174
+ member_id_input = gr.Number(label="Member ID")
175
+ amount_input = gr.Number(label="Amount")
176
+ category_input = gr.Textbox(label="Category")
177
+ date_input = gr.Textbox(label="Date (YYYY-MM-DD)")
178
+ desc_input = gr.Textbox(label="Description")
179
+ add_expense_btn = gr.Button("Add Expense")
180
+ edit_expense_btn = gr.Button("Edit Expense")
181
+ delete_expense_btn = gr.Button("Delete Expense")
182
+ view_expenses_btn = gr.Button("View Expenses")
183
+ expenses_output = gr.Textbox(label="Expenses", lines=10)
184
+
185
+ add_expense_btn.click(add_expense, [member_id_input, amount_input, category_input, date_input, desc_input], expenses_output)
186
+ edit_expense_btn.click(edit_expense, [expense_id, member_id_input, amount_input, category_input, date_input, desc_input], expenses_output)
187
+ delete_expense_btn.click(delete_expense, [expense_id], expenses_output)
188
+ view_expenses_btn.click(view_expenses, [], expenses_output)
189
+
190
+ # Launch the app
191
  demo.launch()