AIdeaText commited on
Commit
6c561c5
·
verified ·
1 Parent(s): 10a77ad

Update modules/studentact/student_activities_v2.py

Browse files
modules/studentact/student_activities_v2.py CHANGED
@@ -212,22 +212,36 @@ def display_current_situation_activities(username: str, t: dict):
212
  if situation_data and 'metrics' in situation_data:
213
  metrics = situation_data['metrics']
214
 
215
- # Verificar si metrics es un diccionario y tiene elementos
216
- if isinstance(metrics, dict) and metrics:
217
- # Dividir en dos columnas
218
- col1, col2 = st.columns(2)
 
 
 
 
 
219
 
220
- # Principales métricas en formato de tarjetas
221
- with col1:
222
- st.subheader(t.get('key_metrics', 'Métricas clave'))
223
-
224
- # Mostrar cada métrica principal
225
- for metric_name, metric_data in metrics.items():
226
- try:
227
- # Verificar si metric_data es un diccionario y tiene normalized_score
228
- if isinstance(metric_data, dict) and 'normalized_score' in metric_data:
229
  score = metric_data['normalized_score']
230
-
 
 
 
 
 
 
 
 
 
 
231
  # Determinar color y emoji basado en la puntuación
232
  if score < 0.5:
233
  emoji = "🔴"
@@ -245,25 +259,41 @@ def display_current_situation_activities(username: str, t: dict):
245
  <b>{emoji} {metric_name.capitalize()}:</b> {score:.2f}
246
  </div>
247
  """, unsafe_allow_html=True)
248
- except Exception as e:
249
- logger.error(f"Error procesando métrica {metric_name}: {str(e)}")
 
 
 
 
 
 
 
 
 
 
 
 
250
 
251
- # Mostrar detalles adicionales si están disponibles
252
- with col2:
253
- st.subheader(t.get('details', 'Detalles'))
254
-
255
- # Para cada métrica, mostrar sus detalles si existen
256
- for metric_name, metric_data in metrics.items():
257
- try:
258
- if isinstance(metric_data, dict) and 'details' in metric_data and metric_data['details']:
259
- # Usar st.json con un key único
 
 
 
 
 
 
260
  st.write(f"**{metric_name.capitalize()}**")
261
- st.json(metric_data['details'], expanded=False)
262
- except Exception as e:
263
- logger.error(f"Error mostrando detalles de {metric_name}: {str(e)}")
264
- else:
265
- st.info(t.get('no_metrics_data', 'No hay datos de métricas disponibles'))
266
- logger.warning(f"La estructura de métricas no es válida: {metrics}")
267
  else:
268
  st.info(t.get('no_diagnosis', 'No hay datos de diagnóstico disponibles'))
269
  if situation_data:
 
212
  if situation_data and 'metrics' in situation_data:
213
  metrics = situation_data['metrics']
214
 
215
+ # Imprimir estructura real para depuración
216
+ st.write("Estructura de métricas:", metrics)
217
+
218
+ # Dividir en dos columnas
219
+ col1, col2 = st.columns(2)
220
+
221
+ # Principales métricas en formato de tarjetas
222
+ with col1:
223
+ st.subheader(t.get('key_metrics', 'Métricas clave'))
224
 
225
+ # Mostrar cada métrica principal
226
+ for metric_name, metric_data in metrics.items():
227
+ try:
228
+ # Determinar la puntuación
229
+ score = None
230
+ if isinstance(metric_data, dict):
231
+ # Intentar diferentes nombres de campo
232
+ if 'normalized_score' in metric_data:
 
233
  score = metric_data['normalized_score']
234
+ elif 'score' in metric_data:
235
+ score = metric_data['score']
236
+ elif 'value' in metric_data:
237
+ score = metric_data['value']
238
+ # Agregar fallback para valores numéricos directos
239
+ elif isinstance(metric_data, (int, float)):
240
+ score = metric_data
241
+
242
+ if score is not None:
243
+ # Asegurarse de que score es numérico
244
+ if isinstance(score, (int, float)):
245
  # Determinar color y emoji basado en la puntuación
246
  if score < 0.5:
247
  emoji = "🔴"
 
259
  <b>{emoji} {metric_name.capitalize()}:</b> {score:.2f}
260
  </div>
261
  """, unsafe_allow_html=True)
262
+ else:
263
+ # Si no es numérico, mostrar como texto
264
+ st.markdown(f"""
265
+ <div style="background-color:#f0f0f0; padding:10px; border-radius:5px; margin-bottom:10px;">
266
+ <b>ℹ️ {metric_name.capitalize()}:</b> {score}
267
+ </div>
268
+ """, unsafe_allow_html=True)
269
+ except Exception as e:
270
+ st.error(f"Error procesando métrica {metric_name}: {str(e)}")
271
+ logger.error(f"Error procesando métrica {metric_name}: {str(e)}")
272
+
273
+ # Mostrar detalles adicionales si están disponibles
274
+ with col2:
275
+ st.subheader(t.get('details', 'Detalles'))
276
 
277
+ # Para cada métrica, mostrar sus detalles si existen
278
+ for metric_name, metric_data in metrics.items():
279
+ try:
280
+ if isinstance(metric_data, dict):
281
+ # Mostrar detalles directamente o buscar en subcampos
282
+ details = None
283
+ if 'details' in metric_data and metric_data['details']:
284
+ details = metric_data['details']
285
+ else:
286
+ # Crear un diccionario con los detalles excluyendo 'normalized_score' y similares
287
+ details = {k: v for k, v in metric_data.items()
288
+ if k not in ['normalized_score', 'score', 'value']}
289
+
290
+ if details:
291
+ detail_key = f"details_{metric_name}_{timestamp_key}_{i}"
292
  st.write(f"**{metric_name.capitalize()}**")
293
+ st.json(details, expanded=False)
294
+ except Exception as e:
295
+ st.error(f"Error mostrando detalles de {metric_name}: {str(e)}")
296
+ logger.error(f"Error mostrando detalles de {metric_name}: {str(e)}")
 
 
297
  else:
298
  st.info(t.get('no_diagnosis', 'No hay datos de diagnóstico disponibles'))
299
  if situation_data: