added prototype dev settings with test import and db wipe
This commit is contained in:
99
scripts/generate_dev_fixture.py
Normal file
99
scripts/generate_dev_fixture.py
Normal file
@ -0,0 +1,99 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate dev-test-fixture.json for admin Dev tab import."""
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
PREFIX = "dev_"
|
||||
PASSWORD = "socialvrlab"
|
||||
CLIENT_PREFIX = "DEV-CL-"
|
||||
|
||||
QUESTIONNAIRE_IDS = [
|
||||
"questionnaire_1_demographic_information",
|
||||
"questionnaire_2_rhs",
|
||||
"questionnaire_3_integration_index",
|
||||
"questionnaire_4_consultation_results",
|
||||
"questionnaire_5_final_interview",
|
||||
"questionnaire_6_follow_up_survey",
|
||||
]
|
||||
|
||||
PER_QUESTIONNAIRE = 40
|
||||
NUM_ADMINS = 2
|
||||
NUM_SUPERVISORS = 3
|
||||
NUM_COACHES = 20
|
||||
NUM_CLIENTS = 100
|
||||
CLIENTS_WITHOUT_COMPLETIONS = 15 # DEV-CL-0086 .. 0100
|
||||
|
||||
|
||||
def main():
|
||||
admins = [
|
||||
{"username": f"{PREFIX}admin_{i}", "location": f"Dev Admin Standort {i}"}
|
||||
for i in range(1, NUM_ADMINS + 1)
|
||||
]
|
||||
supervisors = [
|
||||
{"username": f"{PREFIX}supervisor_{i}", "location": f"Dev Supervisor Region {i}"}
|
||||
for i in range(1, NUM_SUPERVISORS + 1)
|
||||
]
|
||||
coaches = []
|
||||
for i in range(1, NUM_COACHES + 1):
|
||||
sv = (i - 1) % NUM_SUPERVISORS + 1
|
||||
coaches.append({
|
||||
"username": f"{PREFIX}coach_{i:02d}",
|
||||
"supervisor": f"{PREFIX}supervisor_{sv}",
|
||||
})
|
||||
|
||||
clients = []
|
||||
for i in range(1, NUM_CLIENTS + 1):
|
||||
coach_idx = (i - 1) // 5 + 1
|
||||
if coach_idx > NUM_COACHES:
|
||||
coach_idx = NUM_COACHES
|
||||
clients.append({
|
||||
"clientCode": f"{CLIENT_PREFIX}{i:04d}",
|
||||
"coach": f"{PREFIX}coach_{coach_idx:02d}",
|
||||
})
|
||||
|
||||
clients_with_data = [
|
||||
c["clientCode"]
|
||||
for c in clients
|
||||
if int(c["clientCode"].split("-")[-1]) <= NUM_CLIENTS - CLIENTS_WITHOUT_COMPLETIONS
|
||||
]
|
||||
|
||||
completions = []
|
||||
slot = 0
|
||||
for qn_id in QUESTIONNAIRE_IDS:
|
||||
for _ in range(PER_QUESTIONNAIRE):
|
||||
client_code = clients_with_data[slot % len(clients_with_data)]
|
||||
completions.append({
|
||||
"clientCode": client_code,
|
||||
"questionnaireID": qn_id,
|
||||
})
|
||||
slot += 1
|
||||
|
||||
fixture = {
|
||||
"fixtureVersion": 1,
|
||||
"description": "Dev/test users, clients, and completed questionnaires. Skip-on-conflict import; password socialvrlab.",
|
||||
"prefix": PREFIX,
|
||||
"defaultPassword": PASSWORD,
|
||||
"admins": admins,
|
||||
"supervisors": supervisors,
|
||||
"coaches": coaches,
|
||||
"clients": clients,
|
||||
"completions": completions,
|
||||
"stats": {
|
||||
"admins": len(admins),
|
||||
"supervisors": len(supervisors),
|
||||
"coaches": len(coaches),
|
||||
"clients": len(clients),
|
||||
"clientsWithoutCompletions": CLIENTS_WITHOUT_COMPLETIONS,
|
||||
"completions": len(completions),
|
||||
"perQuestionnaire": PER_QUESTIONNAIRE,
|
||||
},
|
||||
}
|
||||
|
||||
out = Path(__file__).resolve().parents[2] / "dev-test-fixture.json"
|
||||
out.write_text(json.dumps(fixture, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
||||
print(f"Wrote {out}")
|
||||
print(json.dumps(fixture["stats"], indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user