(obj, attr, newvalue)
| 32 | |
| 33 | @contextmanager |
| 34 | def patch(obj, attr, newvalue): |
| 35 | had_attr = hasattr(obj, attr) |
| 36 | orig_value = getattr(obj, attr, None) |
| 37 | setattr(obj, attr, newvalue) |
| 38 | try: |
| 39 | yield |
| 40 | finally: |
| 41 | if had_attr: |
| 42 | setattr(obj, attr, orig_value) |
| 43 | else: |
| 44 | delattr(obj, attr) |
| 45 | |
| 46 | |
| 47 | def _as_str(value) -> str: |
no outgoing calls