Skip to content

Commit 2b11c66

Browse files
authored
fix: fix validate (#10)
Signed-off-by: Will Killian <william.killian@outlook.com>
1 parent 539f844 commit 2b11c66

File tree

1 file changed

+10
-35
lines changed

1 file changed

+10
-35
lines changed

src/scheduler/config.py

Lines changed: 10 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@
121121
"""
122122

123123

124-
class _StrictBaseModel(BaseModel):
124+
class StrictBaseModel(BaseModel):
125125
"""
126126
Base class for all models which need strict validation.
127127
@@ -163,7 +163,7 @@ def edit_mode(self):
163163
raise e
164164

165165

166-
class TimeBlock(_StrictBaseModel):
166+
class TimeBlock(StrictBaseModel):
167167
"""
168168
Represents a time block within a day.
169169
"""
@@ -201,7 +201,7 @@ def _validate_end_after_start(cls, v, info):
201201
return v
202202

203203

204-
class TimeRange(_StrictBaseModel):
204+
class TimeRange(StrictBaseModel):
205205
"""
206206
A time range with start and end times, ensuring start < end.
207207
"""
@@ -243,7 +243,7 @@ def from_string(cls, time_range_str: TimeRangeString) -> "TimeRange":
243243
return cls(start=start, end=end)
244244

245245

246-
class Meeting(_StrictBaseModel):
246+
class Meeting(StrictBaseModel):
247247
"""
248248
Represents a single meeting instance.
249249
"""
@@ -269,7 +269,7 @@ class Meeting(_StrictBaseModel):
269269
"""
270270

271271

272-
class ClassPattern(_StrictBaseModel):
272+
class ClassPattern(StrictBaseModel):
273273
"""
274274
Represents a class pattern.
275275
"""
@@ -312,7 +312,7 @@ def _validate_meetings(cls, v):
312312
return v
313313

314314

315-
class TimeSlotConfig(_StrictBaseModel):
315+
class TimeSlotConfig(StrictBaseModel):
316316
"""
317317
Represents a time slot configuration.
318318
"""
@@ -381,7 +381,7 @@ def validate(self):
381381
return self
382382

383383

384-
class CourseConfig(_StrictBaseModel):
384+
class CourseConfig(StrictBaseModel):
385385
"""
386386
Represents a course configuration.
387387
"""
@@ -417,7 +417,7 @@ class CourseConfig(_StrictBaseModel):
417417
"""
418418

419419

420-
class FacultyConfig(_StrictBaseModel):
420+
class FacultyConfig(StrictBaseModel):
421421
"""
422422
Represents a faculty configuration.
423423
"""
@@ -511,7 +511,7 @@ def validate(self):
511511
return self
512512

513513

514-
class SchedulerConfig(_StrictBaseModel):
514+
class SchedulerConfig(StrictBaseModel):
515515
"""
516516
Represents a scheduler configuration.
517517
"""
@@ -644,31 +644,6 @@ def validate(self):
644644

645645
return self
646646

647-
@contextmanager
648-
def edit_mode(self):
649-
"""
650-
Context manager for making multiple changes with automatic rollback on validation failure.
651-
652-
**Usage:**
653-
```python
654-
with config.edit_mode() as editable_config:
655-
editable_config.courses[0].room = ["NewRoom"]
656-
editable_config.courses[0].faculty = ["NewFaculty"]
657-
editable_config.rooms.append("AnotherRoom")
658-
# If validation fails, changes are automatically rolled back
659-
```
660-
661-
**Raises:**
662-
- ValueError: If any cross-reference validation fails (with automatic rollback)
663-
"""
664-
# Create a working copy for editing
665-
working_copy = self.model_copy(deep=True)
666-
yield working_copy
667-
# Validate the working copy
668-
working_copy.validate_references()
669-
# If validation passes, update the original object
670-
self.__dict__.update(working_copy.__dict__)
671-
672647
def _validate_business_logic(self, errors: list[str]) -> "SchedulerConfig":
673648
"""
674649
Validate business logic constraints.
@@ -744,7 +719,7 @@ class OptimizerFlags(StrEnum):
744719
"""
745720

746721

747-
class CombinedConfig(_StrictBaseModel):
722+
class CombinedConfig(StrictBaseModel):
748723
"""
749724
Represents a combined configuration.
750725
"""

0 commit comments

Comments
 (0)