feat(planning_import): skip les rows Windows a l'import (seuls Linux geres)
- Regex WINDOWS_OS_RE: \bwin(dows)?\b ou 'microsoft' insensible casse - _is_skipped_os(os) : true si OS Windows - Skip dans la boucle, comptage skipped_windows - Append au note de l'import un suffix '[skip-windows: N ligne(s) Windows ignoree(s)]' pour tracer combien de rows ont ete filtrees
This commit is contained in:
parent
c63b3a9119
commit
3cdff5db08
@ -29,6 +29,16 @@ templates = Jinja2Templates(directory="app/templates")
|
||||
# Patterns acceptés : "PCT", "prévenance PCT", "prévenir PCT", "prevenir le PCT", "informer PCT", etc.
|
||||
PCT_DETECTION_RE = re.compile(r"\bpct\b", re.IGNORECASE)
|
||||
|
||||
# Filtre OS à l'import : on ne garde que les Linux (Windows hors périmètre patcher).
|
||||
WINDOWS_OS_RE = re.compile(r"\bwin(dows)?\b|microsoft", re.IGNORECASE)
|
||||
|
||||
|
||||
def _is_skipped_os(os_str) -> bool:
|
||||
"""Vrai si l'OS est explicitement Windows (ou Microsoft Server) — à exclure de l'import."""
|
||||
if not os_str:
|
||||
return False # OS vide → on garde, on ne sait pas
|
||||
return bool(WINDOWS_OS_RE.search(str(os_str)))
|
||||
|
||||
|
||||
def _detect_pct_required(rec: dict) -> bool:
|
||||
"""Vrai si l'une des colonnes texte de la ligne mentionne 'PCT' en mot entier."""
|
||||
@ -601,6 +611,7 @@ async def import_upload(request: Request, db=Depends(get_db),
|
||||
|
||||
sheet_count = 0
|
||||
row_count = 0
|
||||
skipped_windows = 0 # comptage des rows skippées (Windows)
|
||||
|
||||
# Pré-charge mapping hostname → server_id pour résolution
|
||||
hostname_map = {}
|
||||
@ -624,6 +635,10 @@ async def import_upload(request: Request, db=Depends(get_db),
|
||||
asset_str = str(asset).strip() if asset else None
|
||||
if not asset_str:
|
||||
continue
|
||||
# Skip Windows : seules les Linux sont gérées par le workflow patching
|
||||
if _is_skipped_os(rec.get("os")):
|
||||
skipped_windows += 1
|
||||
continue
|
||||
sid = hostname_map.get(asset_str.lower())
|
||||
jour_d, jour_t = _coerce_date_or_text(rec.get("jour"))
|
||||
heure_t = _coerce_time(rec.get("heure"))
|
||||
@ -688,6 +703,15 @@ async def import_upload(request: Request, db=Depends(get_db),
|
||||
db.execute(text("""
|
||||
UPDATE patch_planning_imports SET sheet_count=:s, row_count=:r WHERE id=:id
|
||||
"""), {"s": sheet_count, "r": row_count, "id": import_id})
|
||||
# Append au champ note un récap des skips Windows
|
||||
if skipped_windows > 0:
|
||||
existing_note = db.execute(text(
|
||||
"SELECT note FROM patch_planning_imports WHERE id=:id"
|
||||
), {"id": import_id}).scalar() or ""
|
||||
suffix = f"\n[skip-windows: {skipped_windows} ligne(s) Windows ignorée(s) à l'import]"
|
||||
db.execute(text(
|
||||
"UPDATE patch_planning_imports SET note = :n WHERE id = :id"
|
||||
), {"n": (existing_note + suffix).strip(), "id": import_id})
|
||||
db.commit()
|
||||
|
||||
return RedirectResponse(url=f"/patching/import/{import_id}?msg=ok", status_code=303)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user