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