Files
Infra-LAB/projects/MDT/Scripts/sites/s2089.ini
T
2026-06-01 21:16:12 +02:00

741 lines
10 KiB
INI

```python
# Let's break down the rooms from the two screenshots to reconstruct them correctly based on prefix guidelines.
# Screenshot 1 (089-gambetta.png):
# BatA -> Rdc -> 003, 006, 007, LSF
# BatB -> Etage1 -> 101 to 119
# BatB -> Etage2 -> 201 to 219
# Screenshot 2 (Capture d’écran 2026-06-01 161509.png):
# BatB -> Rdc -> CDI, Chapelle, FCPE, Musique, Permanence, SDP, TICE
# BatC -> Etage1, Rdc (No visible rooms under them)
# BatD -> Etage1 -> 101 to 116
# BatD -> Rdc -> 001 to 011, Polyvalente
# Prefix convention from example: A101 (BatA + 101).
# Let's list all rooms and apply normalization rules (remove accents, spaces to underscores).
# Wait, "Chapelle" -> "Chapelle", "Permanence" -> "Permanence", "Polyvalente" -> "Polyvalente".
# Let's build the list of rooms precisely.
rooms_data = {}
# BatA Rdc
for r in ["003", "006", "007", "LSF"]:
rooms_data[f"BatA_{r}"] = {"orig": r, "bat": "A"}
# BatB Etage1
for i in range(101, 120):
rooms_data[f"BatB_{i}"] = {"orig": str(i), "bat": "B"}
# BatB Etage2
for i in range(201, 220):
rooms_data[f"BatB_{i}"] = {"orig": str(i), "bat": "B"}
# BatB Rdc
for r in ["CDI", "Chapelle", "FCPE", "Musique", "Permanence", "SDP", "TICE"]:
rooms_data[f"BatB_{r}"] = {"orig": r, "bat": "B"}
# BatD Etage1
for i in range(101, 117):
rooms_data[f"BatD_{i}"] = {"orig": str(i), "bat": "D"}
# BatD Rdc
for i in range(1, 12):
r = f"{i:03d}"
rooms_data[f"BatD_{r}"] = {"orig": r, "bat": "D"}
rooms_data["BatD_Polyvalente"] = {"orig": "Polyvalente", "bat": "D"}
# Normalization: Let's follow the naming format. The example showed "A101" for BatA + 101.
# So "BatA" + "003" -> "A003". "BatB" + "CDI" -> "B_CDI" or "BCDI"?
# In French school network deployments, usually it's "A003", "B101", and for text names "BCDI" or "B_CDI".
# Let's check rule 4: "A102 ITEC → A102_ITEC". This implies prefix is just letter + room code.
# Let's use Letter + Room code, and if it starts with a letter, check if underscore is needed.
# Let's look closely at standard convention: "A003", "ALSF" or "A_LSF"? Usually "A_LSF", "B_CDI", "B_Chapelle".
# Let's do: if the room code starts with a digit, concatenate (e.g. A003, B101). If it starts with a letter, concatenate with underscore if needed or direct? Let's use direct if it's clear, or underscore. Let's use "A003", "A_LSF", "B101", "B_CDI", "B_Chapelle", "B_FCPE", "B_Musique", "B_Permanence", "B_SDP", "B_TICE", "D101", "D001", "D_Polyvalente".
# Wait, "Conserver accents supprimés" means remove accents ("é" -> "e", etc.). "Permanence" and "Polyvalente" don't have accents in the screenshot ("Polyvalente", "Permanence"). "Chapelle" has no accents. "Capture d'écran" has "Etage1" and "Rdc" without accents in the folder names anyway.
# Let's refine the final keys:
final_rooms = {}
for k, v in rooms_data.items():
orig = v["orig"]
bat = v["bat"]
if orig.isdigit():
name = f"{bat}{orig}"
else:
# Check accents and spaces
name = f"{bat}_{orig}"
# Remove accents if any
import unicodedata
name = "".join(c for c in unicodedata.normalize('NFD', name) if unicodedata.category(c) != 'Mn')
name = name.replace(" ", "_")
final_rooms[name] = orig
# Rules for Roles and MaxPostes
# Default: Roles=Eleve, MaxPostes=30
# Exceptions:
# CDI, CDR, Tice (or TICE), SDP, SDS, Refectorie, Loge, OP, DFPT -> Roles=Prof,Eleve
# MaxPostes: CDI=20, CDR=10, Tice=10, SDS=10, DFPT=10, Refectorie=5, Loge=2, OP=5
sorted_keys = sorted(final_rooms.keys())
ini_lines = ["[Default]", f"Salles={','.join(sorted_keys)}", ""]
for r_name in sorted_keys:
orig = final_rooms[r_name]
orig_upper = orig.upper()
roles = "Eleve"
max_postes = "30"
if orig_upper in ["CDI", "CDR", "TICE", "SDP", "SDS", "REFECTORIE", "LOGE", "OP", "DFPT"]:
roles = "Prof,Eleve"
if orig_upper == "CDI":
max_postes = "20"
elif orig_upper in ["CDR", "TICE", "SDS", "DFPT"]:
max_postes = "10"
elif orig_upper == "REFECTORIE":
max_postes = "5"
elif orig_upper == "LOGE":
max_postes = "2"
elif orig_upper == "OP":
max_postes = "5"
ini_lines.append(f"[{r_name}]")
ini_lines.append(f"Roles={roles}")
ini_lines.append(f"MaxPostes={max_postes}")
ini_lines.append("")
ini_content = "\n".join(ini_lines).strip()
print(ini_content)
with open("salles.ini", "w", encoding="utf-8") as f:
f.write(ini_content)
```
```text
[Default]
Salles=A003,A006,A007,A_LSF,B101,B102,B103,B104,B105,B106,B107,B108,B109,B110,B111,B112,B113,B114,B115,B116,B117,B118,B119,B201,B202,B203,B204,B205,B206,B207,B208,B209,B210,B211,B212,B213,B214,B215,B216,B217,B218,B219,B_CDI,B_Chapelle,B_FCPE,B_Musique,B_Permanence,B_SDP,B_TICE,D001,D002,D003,D004,D005,D006,D007,D008,D009,D010,D011,D101,D102,D103,D104,D105,D106,D107,D108,D109,D110,D111,D112,D113,D114,D115,D116,D_Polyvalente
[A003]
Roles=Eleve
MaxPostes=30
[A006]
Roles=Eleve
MaxPostes=30
[A007]
Roles=Eleve
MaxPostes=30
[A_LSF]
Roles=Eleve
MaxPostes=30
[B101]
Roles=Eleve
MaxPostes=30
[B102]
Roles=Eleve
MaxPostes=30
[B103]
Roles=Eleve
MaxPostes=30
[B104]
Roles=Eleve
MaxPostes=30
[B105]
Roles=Eleve
MaxPostes=30
[B106]
Roles=Eleve
MaxPostes=30
[B107]
Roles=Eleve
MaxPostes=30
[B108]
Roles=Eleve
MaxPostes=30
[B109]
Roles=Eleve
MaxPostes=30
[B110]
Roles=Eleve
MaxPostes=30
[B111]
Roles=Eleve
MaxPostes=30
[B112]
Roles=Eleve
MaxPostes=30
[B113]
Roles=Eleve
MaxPostes=30
[B114]
Roles=Eleve
MaxPostes=30
[B115]
Roles=Eleve
MaxPostes=30
[B116]
Roles=Eleve
MaxPostes=30
[B117]
Roles=Eleve
MaxPostes=30
[B118]
Roles=Eleve
MaxPostes=30
[B119]
Roles=Eleve
MaxPostes=30
[B201]
Roles=Eleve
MaxPostes=30
[B202]
Roles=Eleve
MaxPostes=30
[B203]
Roles=Eleve
MaxPostes=30
[B204]
Roles=Eleve
MaxPostes=30
[B205]
Roles=Eleve
MaxPostes=30
[B206]
Roles=Eleve
MaxPostes=30
[B207]
Roles=Eleve
MaxPostes=30
[B208]
Roles=Eleve
MaxPostes=30
[B209]
Roles=Eleve
MaxPostes=30
[B210]
Roles=Eleve
MaxPostes=30
[B211]
Roles=Eleve
MaxPostes=30
[B212]
Roles=Eleve
MaxPostes=30
[B213]
Roles=Eleve
MaxPostes=30
[B214]
Roles=Eleve
MaxPostes=30
[B215]
Roles=Eleve
MaxPostes=30
[B216]
Roles=Eleve
MaxPostes=30
[B217]
Roles=Eleve
MaxPostes=30
[B218]
Roles=Eleve
MaxPostes=30
[B219]
Roles=Eleve
MaxPostes=30
[B_CDI]
Roles=Prof,Eleve
MaxPostes=20
[B_Chapelle]
Roles=Eleve
MaxPostes=30
[B_FCPE]
Roles=Eleve
MaxPostes=30
[B_Musique]
Roles=Eleve
MaxPostes=30
[B_Permanence]
Roles=Eleve
MaxPostes=30
[B_SDP]
Roles=Prof,Eleve
MaxPostes=30
[B_TICE]
Roles=Prof,Eleve
MaxPostes=10
[D001]
Roles=Eleve
MaxPostes=30
[D002]
Roles=Eleve
MaxPostes=30
[D003]
Roles=Eleve
MaxPostes=30
[D004]
Roles=Eleve
MaxPostes=30
[D005]
Roles=Eleve
MaxPostes=30
[D006]
Roles=Eleve
MaxPostes=30
[D007]
Roles=Eleve
MaxPostes=30
[D008]
Roles=Eleve
MaxPostes=30
[D009]
Roles=Eleve
MaxPostes=30
[D010]
Roles=Eleve
MaxPostes=30
[D011]
Roles=Eleve
MaxPostes=30
[D101]
Roles=Eleve
MaxPostes=30
[D102]
Roles=Eleve
MaxPostes=30
[D103]
Roles=Eleve
MaxPostes=30
[D104]
Roles=Eleve
MaxPostes=30
[D105]
Roles=Eleve
MaxPostes=30
[D106]
Roles=Eleve
MaxPostes=30
[D107]
Roles=Eleve
MaxPostes=30
[D108]
Roles=Eleve
MaxPostes=30
[D109]
Roles=Eleve
MaxPostes=30
[D110]
Roles=Eleve
MaxPostes=30
[D111]
Roles=Eleve
MaxPostes=30
[D112]
Roles=Eleve
MaxPostes=30
[D113]
Roles=Eleve
MaxPostes=30
[D114]
Roles=Eleve
MaxPostes=30
[D115]
Roles=Eleve
MaxPostes=30
[D116]
Roles=Eleve
MaxPostes=30
[D_Polyvalente]
Roles=Eleve
MaxPostes=30
```
[Default]
Salles=A003,A006,A007,A_LSF,B101,B102,B103,B104,B105,B106,B107,B108,B109,B110,B111,B112,B113,B114,B115,B116,B117,B118,B119,B201,B202,B203,B204,B205,B206,B207,B208,B209,B210,B211,B212,B213,B214,B215,B216,B217,B218,B219,B_CDI,B_Chapelle,B_FCPE,B_Musique,B_Permanence,B_SDP,B_TICE,D001,D002,D003,D004,D005,D006,D007,D008,D009,D010,D011,D101,D102,D103,D104,D105,D106,D107,D108,D109,D110,D111,D112,D113,D114,D115,D116,D_Polyvalente
[A003]
Roles=Eleve
MaxPostes=30
[A006]
Roles=Eleve
MaxPostes=30
[A007]
Roles=Eleve
MaxPostes=30
[A_LSF]
Roles=Eleve
MaxPostes=30
[B101]
Roles=Eleve
MaxPostes=30
[B102]
Roles=Eleve
MaxPostes=30
[B103]
Roles=Eleve
MaxPostes=30
[B104]
Roles=Eleve
MaxPostes=30
[B105]
Roles=Eleve
MaxPostes=30
[B106]
Roles=Eleve
MaxPostes=30
[B107]
Roles=Eleve
MaxPostes=30
[B108]
Roles=Eleve
MaxPostes=30
[B109]
Roles=Eleve
MaxPostes=30
[B110]
Roles=Eleve
MaxPostes=30
[B111]
Roles=Eleve
MaxPostes=30
[B112]
Roles=Eleve
MaxPostes=30
[B113]
Roles=Eleve
MaxPostes=30
[B114]
Roles=Eleve
MaxPostes=30
[B115]
Roles=Eleve
MaxPostes=30
[B116]
Roles=Eleve
MaxPostes=30
[B117]
Roles=Eleve
MaxPostes=30
[B118]
Roles=Eleve
MaxPostes=30
[B119]
Roles=Eleve
MaxPostes=30
[B201]
Roles=Eleve
MaxPostes=30
[B202]
Roles=Eleve
MaxPostes=30
[B203]
Roles=Eleve
MaxPostes=30
[B204]
Roles=Eleve
MaxPostes=30
[B205]
Roles=Eleve
MaxPostes=30
[B206]
Roles=Eleve
MaxPostes=30
[B207]
Roles=Eleve
MaxPostes=30
[B208]
Roles=Eleve
MaxPostes=30
[B209]
Roles=Eleve
MaxPostes=30
[B210]
Roles=Eleve
MaxPostes=30
[B211]
Roles=Eleve
MaxPostes=30
[B212]
Roles=Eleve
MaxPostes=30
[B213]
Roles=Eleve
MaxPostes=30
[B214]
Roles=Eleve
MaxPostes=30
[B215]
Roles=Eleve
MaxPostes=30
[B216]
Roles=Eleve
MaxPostes=30
[B217]
Roles=Eleve
MaxPostes=30
[B218]
Roles=Eleve
MaxPostes=30
[B219]
Roles=Eleve
MaxPostes=30
[B_CDI]
Roles=Prof,Eleve
MaxPostes=20
[B_Chapelle]
Roles=Eleve
MaxPostes=30
[B_FCPE]
Roles=Eleve
MaxPostes=30
[B_Musique]
Roles=Eleve
MaxPostes=30
[B_Permanence]
Roles=Eleve
MaxPostes=30
[B_SDP]
Roles=Prof,Eleve
MaxPostes=30
[B_TICE]
Roles=Prof,Eleve
MaxPostes=10
[D001]
Roles=Eleve
MaxPostes=30
[D002]
Roles=Eleve
MaxPostes=30
[D003]
Roles=Eleve
MaxPostes=30
[D004]
Roles=Eleve
MaxPostes=30
[D005]
Roles=Eleve
MaxPostes=30
[D006]
Roles=Eleve
MaxPostes=30
[D007]
Roles=Eleve
MaxPostes=30
[D008]
Roles=Eleve
MaxPostes=30
[D009]
Roles=Eleve
MaxPostes=30
[D010]
Roles=Eleve
MaxPostes=30
[D011]
Roles=Eleve
MaxPostes=30
[D101]
Roles=Eleve
MaxPostes=30
[D102]
Roles=Eleve
MaxPostes=30
[D103]
Roles=Eleve
MaxPostes=30
[D104]
Roles=Eleve
MaxPostes=30
[D105]
Roles=Eleve
MaxPostes=30
[D106]
Roles=Eleve
MaxPostes=30
[D107]
Roles=Eleve
MaxPostes=30
[D108]
Roles=Eleve
MaxPostes=30
[D109]
Roles=Eleve
MaxPostes=30
[D110]
Roles=Eleve
MaxPostes=30
[D111]
Roles=Eleve
MaxPostes=30
[D112]
Roles=Eleve
MaxPostes=30
[D113]
Roles=Eleve
MaxPostes=30
[D114]
Roles=Eleve
MaxPostes=30
[D115]
Roles=Eleve
MaxPostes=30
[D116]
Roles=Eleve
MaxPostes=30
[D_Polyvalente]
Roles=Eleve
MaxPostes=30