Coverage for o2/models/timetable/resource_pool.py: 100%
13 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-16 11:18 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-16 11:18 +0000
1from dataclasses import dataclass, replace
3from dataclass_wizard import JSONWizard
5from o2.models.timetable.resource import Resource
8@dataclass(frozen=True)
9class ResourcePool(JSONWizard):
10 """Collection of resources that can be assigned to a task."""
12 id: str
13 name: str
14 resource_list: list[Resource]
15 fixed_cost_fn: str = "0"
17 def remove_resource(self, resource_id: str) -> "ResourcePool":
18 """Remove a resource from the pool."""
19 return replace(
20 self,
21 resource_list=[resource for resource in self.resource_list if resource.id != resource_id],
22 )
24 def update_resource(self, updated_resource: Resource) -> "ResourcePool":
25 """Update a resource in the pool."""
26 return replace(
27 self,
28 resource_list=[
29 updated_resource if updated_resource.id == resource.id else resource
30 for resource in self.resource_list
31 ],
32 )