MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / Canary

Class Canary

test/orm/test_collection.py:50–97  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

48
49
50class Canary:
51 def __init__(self):
52 self.data = set()
53 self.added = set()
54 self.removed = set()
55 self.appended_wo_mutation = set()
56 self.dupe_check = True
57
58 @contextlib.contextmanager
59 def defer_dupe_check(self):
60 self.dupe_check = False
61 try:
62 yield
63 finally:
64 self.dupe_check = True
65
66 def listen(self, attr):
67 event.listen(attr, "append", self.append)
68 event.listen(attr, "append_wo_mutation", self.append_wo_mutation)
69 event.listen(attr, "remove", self.remove)
70 event.listen(attr, "set", self.set)
71
72 def append(self, obj, value, initiator):
73 if self.dupe_check:
74 assert value not in self.added
75 self.added.add(value)
76 self.data.add(value)
77 return value
78
79 def append_wo_mutation(self, obj, value, initiator):
80 if self.dupe_check:
81 assert value in self.added
82 self.appended_wo_mutation.add(value)
83
84 def remove(self, obj, value, initiator):
85 if self.dupe_check:
86 assert value not in self.removed
87 self.removed.add(value)
88 self.data.remove(value)
89
90 def set(self, obj, value, oldvalue, initiator):
91 if isinstance(value, str):
92 value = CollectionsTest.entity_maker()
93
94 if oldvalue is not None:
95 self.remove(obj, oldvalue, None)
96 self.append(obj, value, None)
97 return value
98
99
100class OrderedDictFixture:

Callers 15

_test_adapterMethod · 0.85
_test_listMethod · 0.85
_test_list_bulkMethod · 0.85
_test_set_wo_mutationMethod · 0.85
_test_setMethod · 0.85
_test_set_bulkMethod · 0.85
_test_set_dataclassesMethod · 0.85
_test_dictMethod · 0.85
_test_dict_bulkMethod · 0.85

Calls

no outgoing calls

Tested by 15

_test_adapterMethod · 0.68
_test_listMethod · 0.68
_test_list_bulkMethod · 0.68
_test_set_wo_mutationMethod · 0.68
_test_setMethod · 0.68
_test_set_bulkMethod · 0.68
_test_set_dataclassesMethod · 0.68
_test_dictMethod · 0.68
_test_dict_bulkMethod · 0.68