| 664 | from _collections_abc import MutableMapping, Mapping |
| 665 | |
| 666 | class _Environ(MutableMapping): |
| 667 | def __init__(self, data, encodekey, decodekey, encodevalue, decodevalue): |
| 668 | self.encodekey = encodekey |
| 669 | self.decodekey = decodekey |
| 670 | self.encodevalue = encodevalue |
| 671 | self.decodevalue = decodevalue |
| 672 | self._data = data |
| 673 | |
| 674 | def __getitem__(self, key): |
| 675 | try: |
| 676 | value = self._data[self.encodekey(key)] |
| 677 | except KeyError: |
| 678 | # raise KeyError with the original key value |
| 679 | raise KeyError(key) from None |
| 680 | return self.decodevalue(value) |
| 681 | |
| 682 | def __setitem__(self, key, value): |
| 683 | key = self.encodekey(key) |
| 684 | value = self.encodevalue(value) |
| 685 | putenv(key, value) |
| 686 | self._data[key] = value |
| 687 | |
| 688 | def __delitem__(self, key): |
| 689 | encodedkey = self.encodekey(key) |
| 690 | unsetenv(encodedkey) |
| 691 | try: |
| 692 | del self._data[encodedkey] |
| 693 | except KeyError: |
| 694 | # raise KeyError with the original key value |
| 695 | raise KeyError(key) from None |
| 696 | |
| 697 | def __iter__(self): |
| 698 | # list() from dict object is an atomic operation |
| 699 | keys = list(self._data) |
| 700 | for key in keys: |
| 701 | yield self.decodekey(key) |
| 702 | |
| 703 | def __len__(self): |
| 704 | return len(self._data) |
| 705 | |
| 706 | def __repr__(self): |
| 707 | formatted_items = ", ".join( |
| 708 | f"{self.decodekey(key)!r}: {self.decodevalue(value)!r}" |
| 709 | for key, value in self._data.items() |
| 710 | ) |
| 711 | return f"environ({{{formatted_items}}})" |
| 712 | |
| 713 | def copy(self): |
| 714 | return dict(self) |
| 715 | |
| 716 | def setdefault(self, key, value): |
| 717 | if key not in self: |
| 718 | self[key] = value |
| 719 | return self[key] |
| 720 | |
| 721 | def __ior__(self, other): |
| 722 | self.update(other) |
| 723 | return self |
no outgoing calls
no test coverage detected