caissaa23 commited on
Commit
33f8313
·
verified ·
1 Parent(s): a2eb07f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -40
app.py CHANGED
@@ -3,22 +3,12 @@ import datetime
3
  import random
4
  import json
5
  import os
6
- from login import iniciar_sesion, registrar_usuario
7
  from registro import guardar_registro, cargar_registro
8
  from chatbot_nuti import buscar_respuesta
9
  from optimizacion import resize_imagen, cargar_modelo_ligero, cache_resultado
 
10
 
11
- # ---------------- SESIÓN ----------------
12
- SESION_FILE = "sesion.json"
13
-
14
- def obtener_usuario_actual():
15
- if os.path.exists(SESION_FILE):
16
- with open(SESION_FILE, "r") as f:
17
- data = json.load(f)
18
- return data.get("usuario", None)
19
- return None
20
-
21
- # ---------------- ESTADO ----------------
22
  estado = cargar_registro()
23
  for k, v in {
24
  "meta_diaria": 0, "restantes": 0, "quemas": 0, "puntos": 0,
@@ -26,21 +16,23 @@ for k, v in {
26
  }.items():
27
  estado.setdefault(k, v)
28
 
29
- # ---------------- MODELO ----------------
30
  modelo = cargar_modelo_ligero()
31
 
32
- # ---------------- DATOS ----------------
33
  calorias_promedio = {
34
  "pizza": 285, "hamburger": 354, "apple": 95, "banana": 105,
35
  "salad": 150, "pasta": 350, "rice": 200, "ice cream": 210,
36
  "donut": 195, "fish": 206, "chicken": 239, "broccoli": 55
37
  }
38
 
 
39
  actividades = {
40
  "Correr": 700, "Caminar": 250, "Fútbol": 600,
41
  "Natación": 550, "Básquetbol": 500, "Voleibol": 400, "Yoga": 200,
42
  }
43
 
 
44
  nutriologos = [
45
  {"nombre": "Dra. Ana López", "pais": "México", "estado": "Sonora", "ciudad": "Hermosillo",
46
  "especialidad": "Nutrición deportiva", "direccion": "Av. Universidad 200", "contacto": "Instagram: @dra.analpz"},
@@ -54,15 +46,7 @@ nutriologos = [
54
  "especialidad": "Nutrición general y recetas personalizadas", "direccion": "Av. Chapultepec 100", "contacto": "IG: @sofiariveranutri"},
55
  ]
56
 
57
- misiones = [
58
- "🥤 Bebe 8 vasos de agua.",
59
- "🍎 Come 3 frutas distintas.",
60
- "🚶 Camina 20 minutos.",
61
- "🌈 Come 4 colores de comida diferentes.",
62
- "🧘 Haz 10 minutos de respiración o yoga."
63
- ]
64
-
65
- # ---------------- FUNCIONES ----------------
66
  def calcular_calorias(edad, peso, altura, sexo, actividad):
67
  if sexo.lower() == "hombre":
68
  bmr = 88.36 + (13.4 * peso) + (4.8 * altura) - (5.7 * edad)
@@ -116,6 +100,14 @@ def coach_emocional(emocion):
116
  guardar_registro(estado)
117
  return sugerencias.get(emocion.lower(), "💬 Cuéntame más sobre cómo te sientes.")
118
 
 
 
 
 
 
 
 
 
119
  def generar_mision():
120
  mision = random.choice(misiones)
121
  estado["mision_actual"] = mision
@@ -138,12 +130,14 @@ def buscar_nutriologo(pais, estado_, ciudad):
138
  salida += f"\n• {n['nombre']} — {n['especialidad']}\n 📍 {n['direccion']}\n 📞 {n['contacto']}\n"
139
  return salida
140
 
141
- # ---------------- INTERFAZ ----------------
142
- usuario_actual = obtener_usuario_actual()
143
-
144
  with gr.Blocks() as demo:
145
- if usuario_actual is None:
146
- # ---------- LOGIN / REGISTRO ----------
 
 
 
 
147
  gr.Markdown("# 🥗 Bienvenido a NutriBot Ultra 🌈")
148
  gr.Markdown("Por favor inicia sesión o crea una cuenta para continuar")
149
 
@@ -162,21 +156,28 @@ with gr.Blocks() as demo:
162
  def login_click(email, password):
163
  msg = iniciar_sesion(email, password)
164
  if "✅" in msg:
165
- # Si login exitoso, recarga la página para mostrar app principal
166
- usuario = email
167
  with open(SESION_FILE, "w") as f:
168
- json.dump({"usuario": usuario}, f)
169
- return gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)
170
- return msg
171
 
172
  def reg_click(nombre, email, password):
173
- return registrar_usuario(nombre, email, password)
174
-
175
- btn_login.click(login_click, inputs=[email_login, pass_login], outputs=salida_login)
176
- btn_reg.click(reg_click, inputs=[nombre_reg, email_reg, pass_reg], outputs=salida_reg)
177
-
178
- else:
179
- # ---------- APP PRINCIPAL ----------
 
 
 
 
 
 
 
 
 
180
  gr.Markdown(f"👋 Hola, **{usuario_actual}**. Bienvenido a NutriBot Ultra!")
181
 
182
  with gr.Tab("🧍 Tu perfil"):
 
3
  import random
4
  import json
5
  import os
 
6
  from registro import guardar_registro, cargar_registro
7
  from chatbot_nuti import buscar_respuesta
8
  from optimizacion import resize_imagen, cargar_modelo_ligero, cache_resultado
9
+ from login import registrar_usuario, iniciar_sesion, SESION_FILE
10
 
11
+ # -------------------- ESTADO --------------------
 
 
 
 
 
 
 
 
 
 
12
  estado = cargar_registro()
13
  for k, v in {
14
  "meta_diaria": 0, "restantes": 0, "quemas": 0, "puntos": 0,
 
16
  }.items():
17
  estado.setdefault(k, v)
18
 
19
+ # -------------------- MODELO --------------------
20
  modelo = cargar_modelo_ligero()
21
 
22
+ # Calorías promedio
23
  calorias_promedio = {
24
  "pizza": 285, "hamburger": 354, "apple": 95, "banana": 105,
25
  "salad": 150, "pasta": 350, "rice": 200, "ice cream": 210,
26
  "donut": 195, "fish": 206, "chicken": 239, "broccoli": 55
27
  }
28
 
29
+ # Actividades físicas
30
  actividades = {
31
  "Correr": 700, "Caminar": 250, "Fútbol": 600,
32
  "Natación": 550, "Básquetbol": 500, "Voleibol": 400, "Yoga": 200,
33
  }
34
 
35
+ # Nutriólogos
36
  nutriologos = [
37
  {"nombre": "Dra. Ana López", "pais": "México", "estado": "Sonora", "ciudad": "Hermosillo",
38
  "especialidad": "Nutrición deportiva", "direccion": "Av. Universidad 200", "contacto": "Instagram: @dra.analpz"},
 
46
  "especialidad": "Nutrición general y recetas personalizadas", "direccion": "Av. Chapultepec 100", "contacto": "IG: @sofiariveranutri"},
47
  ]
48
 
49
+ # -------------------- FUNCIONES --------------------
 
 
 
 
 
 
 
 
50
  def calcular_calorias(edad, peso, altura, sexo, actividad):
51
  if sexo.lower() == "hombre":
52
  bmr = 88.36 + (13.4 * peso) + (4.8 * altura) - (5.7 * edad)
 
100
  guardar_registro(estado)
101
  return sugerencias.get(emocion.lower(), "💬 Cuéntame más sobre cómo te sientes.")
102
 
103
+ misiones = [
104
+ "🥤 Bebe 8 vasos de agua.",
105
+ "🍎 Come 3 frutas distintas.",
106
+ "🚶 Camina 20 minutos.",
107
+ "🌈 Come 4 colores de comida diferentes.",
108
+ "🧘 Haz 10 minutos de respiración o yoga."
109
+ ]
110
+
111
  def generar_mision():
112
  mision = random.choice(misiones)
113
  estado["mision_actual"] = mision
 
130
  salida += f"\n• {n['nombre']} — {n['especialidad']}\n 📍 {n['direccion']}\n 📞 {n['contacto']}\n"
131
  return salida
132
 
133
+ # -------------------- INTERFAZ --------------------
 
 
134
  with gr.Blocks() as demo:
135
+ # Bloques para login/registro y app principal
136
+ login_block = gr.Column(visible=True)
137
+ app_block = gr.Column(visible=False)
138
+
139
+ # --- LOGIN / REGISTRO ---
140
+ with login_block:
141
  gr.Markdown("# 🥗 Bienvenido a NutriBot Ultra 🌈")
142
  gr.Markdown("Por favor inicia sesión o crea una cuenta para continuar")
143
 
 
156
  def login_click(email, password):
157
  msg = iniciar_sesion(email, password)
158
  if "✅" in msg:
 
 
159
  with open(SESION_FILE, "w") as f:
160
+ json.dump({"usuario": email}, f)
161
+ return msg, gr.update(visible=False), gr.update(visible=True)
162
+ return msg, gr.update(visible=True), gr.update(visible=False)
163
 
164
  def reg_click(nombre, email, password):
165
+ msg = registrar_usuario(nombre, email, password)
166
+ if "✅" in msg:
167
+ with open(SESION_FILE, "w") as f:
168
+ json.dump({"usuario": email}, f)
169
+ return msg, gr.update(visible=False), gr.update(visible=True)
170
+ return msg, gr.update(visible=True), gr.update(visible=False)
171
+
172
+ btn_login.click(login_click, inputs=[email_login, pass_login], outputs=[salida_login, login_block, app_block])
173
+ btn_reg.click(reg_click, inputs=[nombre_reg, email_reg, pass_reg], outputs=[salida_reg, login_block, app_block])
174
+
175
+ # --- APP PRINCIPAL ---
176
+ with app_block:
177
+ usuario_actual = None
178
+ if os.path.exists(SESION_FILE):
179
+ with open(SESION_FILE, "r") as f:
180
+ usuario_actual = json.load(f).get("usuario", None)
181
  gr.Markdown(f"👋 Hola, **{usuario_actual}**. Bienvenido a NutriBot Ultra!")
182
 
183
  with gr.Tab("🧍 Tu perfil"):