Update app.py
Browse files
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 =
|
| 503 |
-
numero = row.get("numero") or job_id
|
| 504 |
out.append({
|
| 505 |
-
"titre": row.get("titre")
|
| 506 |
"numero": numero,
|
| 507 |
-
"direction": row.get("direction_interne_acronyme")
|
| 508 |
-
"service": row.get("service_acronyme")
|
| 509 |
-
"grade": row.get("corps_grade")
|
| 510 |
-
"lieu": row.get("lieu_travail")
|
| 511 |
"disponible_immediatement": bool(row.get("disponible_immediatement")),
|
| 512 |
-
"date_cloture":
|
| 513 |
"score": round(float(filtered_scores[i]), 3),
|
| 514 |
-
"url": row.get("url")
|
| 515 |
-
"url_markdown":
|
| 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)
|