1class Slot:
2 def __init__(self, object_limit=None, size_limit=None):
3 self.object_limit = object_limit
4 self.size_limit = size_limit
5 self.data = {}
6
7 def __get__(self, instance, owner):
8 if instance is None:
9 return self
10
11 return tuple(self.data.get(instance, []))
12
13 def __set__(self, instance, value):
14 if instance not in self.data:
15 self.data[instance] = []
16
17 items = self.data[instance]
18
19 if (
20 self.object_limit is not None
21 and len(items) + 1 > self.object_limit
22 ):
23 raise ValueError("Object limit exceeded")
24
25 if self.size_limit is not None:
26 total_size = sum(len(item) for item in items)
27
28 if total_size + len(value) > self.size_limit:
29 raise ValueError("Size limit exceeded")
30
31 items.append(value)
32
33 def __delete__(self, instance):
34 items = self.data.get(instance, [])
35
36 if items:
37 items.pop(0)
.......
----------------------------------------------------------------------
Ran 7 tests in 0.000s
OK