rastadidi commited on
Commit
ed0f9f6
·
verified ·
1 Parent(s): 3c48d81

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -10
app.py CHANGED
@@ -497,22 +497,33 @@ def search_avps(query: str, threshold: float = 50) -> str:
497
  filtered = filtered[filtered["_s"] > 0].sort_values("_s", ascending=False)
498
  filtered_scores = filtered["_s"].tolist()
499
 
 
 
 
 
 
 
 
 
 
 
 
500
  out = []
501
  for i, (_, row) in enumerate(filtered.iterrows()):
502
- job_id = str(row.get("id") or "")
503
- numero = row.get("numero") or job_id
504
  out.append({
505
- "titre": row.get("titre") or "",
506
  "numero": numero,
507
- "direction": row.get("direction_interne_acronyme") or "",
508
- "service": row.get("service_acronyme") or "",
509
- "grade": row.get("corps_grade") or "",
510
- "lieu": row.get("lieu_travail") or "",
511
  "disponible_immediatement": bool(row.get("disponible_immediatement")),
512
- "date_cloture": str(row.get("date_cloture") or ""),
513
  "score": round(float(filtered_scores[i]), 3),
514
- "url": row.get("url") or "",
515
- "url_markdown": f"https://raw.githubusercontent.com/opt-nc/avps/refs/heads/main/data/{numero}.md",
516
  "keywords": keywords_by_id.get(job_id, []),
517
  })
518
  return json.dumps(out[:10], ensure_ascii=False, indent=2)
 
497
  filtered = filtered[filtered["_s"] > 0].sort_values("_s", ascending=False)
498
  filtered_scores = filtered["_s"].tolist()
499
 
500
+ def safe_str(v):
501
+ """Convertit toute valeur en string, gère NaN, None, bool, numpy types."""
502
+ if v is None:
503
+ return ""
504
+ try:
505
+ if pd.isna(v):
506
+ return ""
507
+ except (TypeError, ValueError):
508
+ pass
509
+ return str(v)
510
+
511
  out = []
512
  for i, (_, row) in enumerate(filtered.iterrows()):
513
+ job_id = safe_str(row.get("id"))
514
+ numero = safe_str(row.get("numero")) or job_id
515
  out.append({
516
+ "titre": safe_str(row.get("titre")),
517
  "numero": numero,
518
+ "direction": safe_str(row.get("direction_interne_acronyme")),
519
+ "service": safe_str(row.get("service_acronyme")),
520
+ "grade": safe_str(row.get("corps_grade")),
521
+ "lieu": safe_str(row.get("lieu_travail")),
522
  "disponible_immediatement": bool(row.get("disponible_immediatement")),
523
+ "date_cloture": safe_str(row.get("date_cloture")),
524
  "score": round(float(filtered_scores[i]), 3),
525
+ "url": safe_str(row.get("url")),
526
+ "url_markdown": "https://raw.githubusercontent.com/opt-nc/avps/refs/heads/main/data/" + numero + ".md" if numero else "",
527
  "keywords": keywords_by_id.get(job_id, []),
528
  })
529
  return json.dumps(out[:10], ensure_ascii=False, indent=2)