""" | |
Expose zipp.Path as .zipfile.Path. | |
Includes everything else in ``zipfile`` to match future usage. Just | |
use: | |
from zipp.compat.overlay import zipfile | |
in place of ``import zipfile``. | |
Relative imports are supported too. | |
from zipp.compat.overlay.zipfile import ZipInfo | |
The ``zipfile`` object added to ``sys.modules`` needs to be | |
hashable (#126). | |
_ = hash(sys.modules['zipp.compat.overlay.zipfile']) | |
""" | |
import importlib | |
import sys | |
import types | |
import zipp | |
class HashableNamespace(types.SimpleNamespace): | |
def __hash__(self): | |
return hash(tuple(vars(self))) | |
zipfile = HashableNamespace(**vars(importlib.import_module('zipfile'))) | |
zipfile.Path = zipp.Path | |
zipfile._path = zipp | |
sys.modules[__name__ + '.zipfile'] = zipfile # type: ignore[assignment] | |