Commit 638d92a4 authored by Godefroid Chapelle's avatar Godefroid Chapelle

Problem: slow pkg_resources.Distribution.hashcmp

Solution: cache it
parent 16f9b863
...@@ -4,7 +4,7 @@ Change History ...@@ -4,7 +4,7 @@ Change History
3.0.0a2 (unreleased) 3.0.0a2 (unreleased)
==================== ====================
- Nothing changed yet. - Better patch for ``pkg_resources.Distribution.hashcmp`` performance.
3.0.0a1 (2020-05-17) 3.0.0a1 (2020-05-17)
......
...@@ -15,41 +15,22 @@ ...@@ -15,41 +15,22 @@
def patch_Distribution(): def patch_Distribution():
try: try:
from pkg_resources import _remove_md5_fragment
from pkg_resources import Distribution from pkg_resources import Distribution
if hasattr(Distribution, 'location'):
return
# prepare any Distribution built before monkeypatch
from pkg_resources import working_set
for dist in working_set:
dist._location = dist.location
dist._location_without_md5 = _remove_md5_fragment(dist.location)
def hashcmp(self): def hashcmp(self):
without_md5 = getattr(self, '_location_without_md5', '') if hasattr(self, '_hashcmp'):
return ( return self._hashcmp
self.parsed_version, else:
self.precedence, self._hashcmp = result = (
self.key, self.parsed_version,
without_md5, self.precedence,
self.py_version or '', self.key,
self.platform or '', self.location,
) self.py_version or '',
self.platform or '',
def get_location(self): )
try: return result
result = self._location
except AttributeError:
result = ''
return result
def set_location(self, l):
self._location = l
self._location_without_md5 = _remove_md5_fragment(l)
setattr(Distribution, 'location', property(get_location, set_location))
setattr(Distribution, 'hashcmp', property(hashcmp)) setattr(Distribution, 'hashcmp', property(hashcmp))
except ImportError: except ImportError:
return return
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment