Tailored instrumentation wrappers for any set-like class.
()
| 1330 | |
| 1331 | |
| 1332 | def _set_decorators() -> Dict[str, Callable[[_FN], _FN]]: |
| 1333 | class="st">""class="st">"Tailored instrumentation wrappers for any set-like class."class="st">"" |
| 1334 | |
| 1335 | def _tidy(fn): |
| 1336 | fn._sa_instrumented = True |
| 1337 | fn.__doc__ = getattr(set, fn.__name__).__doc__ |
| 1338 | |
| 1339 | def add(fn): |
| 1340 | def add(self, value, _sa_initiator=None): |
| 1341 | if value not in self: |
| 1342 | value = __set(self, value, _sa_initiator, NO_KEY) |
| 1343 | else: |
| 1344 | __set_wo_mutation(self, value, _sa_initiator) |
| 1345 | class="cm"># testlib.pragma exempt:__hash__ |
| 1346 | fn(self, value) |
| 1347 | |
| 1348 | _tidy(add) |
| 1349 | return add |
| 1350 | |
| 1351 | def discard(fn): |
| 1352 | def discard(self, value, _sa_initiator=None): |
| 1353 | class="cm"># testlib.pragma exempt:__hash__ |
| 1354 | if value in self: |
| 1355 | __del(self, value, _sa_initiator, NO_KEY) |
| 1356 | class="cm"># testlib.pragma exempt:__hash__ |
| 1357 | fn(self, value) |
| 1358 | |
| 1359 | _tidy(discard) |
| 1360 | return discard |
| 1361 | |
| 1362 | def remove(fn): |
| 1363 | def remove(self, value, _sa_initiator=None): |
| 1364 | class="cm"># testlib.pragma exempt:__hash__ |
| 1365 | if value in self: |
| 1366 | __del(self, value, _sa_initiator, NO_KEY) |
| 1367 | class="cm"># testlib.pragma exempt:__hash__ |
| 1368 | fn(self, value) |
| 1369 | |
| 1370 | _tidy(remove) |
| 1371 | return remove |
| 1372 | |
| 1373 | def pop(fn): |
| 1374 | def pop(self): |
| 1375 | __before_pop(self) |
| 1376 | item = fn(self) |
| 1377 | class="cm"># for set in particular, we have no way to access the item |
| 1378 | class="cm"># that will be popped before pop is called. |
| 1379 | __del(self, item, None, NO_KEY) |
| 1380 | return item |
| 1381 | |
| 1382 | _tidy(pop) |
| 1383 | return pop |
| 1384 | |
| 1385 | def clear(fn): |
| 1386 | def clear(self): |
| 1387 | for item in list(self): |
| 1388 | self.remove(item) |
| 1389 |
no test coverage detected