Tailored instrumentation wrappers for any dict-like mapping class.
()
| 1217 | |
| 1218 | |
| 1219 | def _dict_decorators() -> Dict[str, Callable[[_FN], _FN]]: |
| 1220 | """Tailored instrumentation wrappers for any dict-like mapping class.""" |
| 1221 | |
| 1222 | def _tidy(fn): |
| 1223 | fn._sa_instrumented = True |
| 1224 | fn.__doc__ = getattr(dict, fn.__name__).__doc__ |
| 1225 | |
| 1226 | def __setitem__(fn): |
| 1227 | def __setitem__(self, key, value, _sa_initiator=None): |
| 1228 | if key in self: |
| 1229 | __del(self, self[key], _sa_initiator, key) |
| 1230 | value = __set(self, value, _sa_initiator, key) |
| 1231 | fn(self, key, value) |
| 1232 | |
| 1233 | _tidy(__setitem__) |
| 1234 | return __setitem__ |
| 1235 | |
| 1236 | def __delitem__(fn): |
| 1237 | def __delitem__(self, key, _sa_initiator=None): |
| 1238 | if key in self: |
| 1239 | __del(self, self[key], _sa_initiator, key) |
| 1240 | fn(self, key) |
| 1241 | |
| 1242 | _tidy(__delitem__) |
| 1243 | return __delitem__ |
| 1244 | |
| 1245 | def clear(fn): |
| 1246 | def clear(self): |
| 1247 | for key in self: |
| 1248 | __del(self, self[key], None, key) |
| 1249 | fn(self) |
| 1250 | |
| 1251 | _tidy(clear) |
| 1252 | return clear |
| 1253 | |
| 1254 | def pop(fn): |
| 1255 | def pop(self, key, default=NO_ARG): |
| 1256 | __before_pop(self) |
| 1257 | _to_del = key in self |
| 1258 | if default is NO_ARG: |
| 1259 | item = fn(self, key) |
| 1260 | else: |
| 1261 | item = fn(self, key, default) |
| 1262 | if _to_del: |
| 1263 | __del(self, item, None, key) |
| 1264 | return item |
| 1265 | |
| 1266 | _tidy(pop) |
| 1267 | return pop |
| 1268 | |
| 1269 | def popitem(fn): |
| 1270 | def popitem(self): |
| 1271 | __before_pop(self) |
| 1272 | item = fn(self) |
| 1273 | __del(self, item[1], None, 1) |
| 1274 | return item |
| 1275 | |
| 1276 | _tidy(popitem) |
no test coverage detected