-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathseating_storage.py
More file actions
29 lines (24 loc) · 873 Bytes
/
Copy pathseating_storage.py
File metadata and controls
29 lines (24 loc) · 873 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import json
from pathlib import Path
from typing import Union
from seating_models import SeatingPlan
def save_plan(plan: SeatingPlan, output_file: Union[str, Path]) -> None:
output_path = Path(output_file)
payload = {
"course": plan.course,
"date": plan.date,
"layout_name": plan.layout_name,
"assignments": plan.assignments,
"desk_facings": plan.desk_facings,
}
output_path.write_text(json.dumps(payload, indent=2, sort_keys=True))
def load_plan(input_file: Union[str, Path]) -> SeatingPlan:
input_path = Path(input_file)
payload = json.loads(input_path.read_text())
return SeatingPlan(
course=payload["course"],
date=payload["date"],
layout_name=payload["layout_name"],
assignments=payload["assignments"],
desk_facings=payload.get("desk_facings", {}),
)