Commit 811c4fea authored by Jason R. Coombs's avatar Jason R. Coombs Committed by GitHub

Merge pull request #1364 from seawolf42/feature/issue-1330

Feature/issue 1330
parents 5749b9cf 58ad1e14
Add `__dir__()` implementation to `pkg_resources.Distribution()` that includes the attributes in the `_provider` instance variable.
\ No newline at end of file
...@@ -2663,6 +2663,19 @@ class Distribution(object): ...@@ -2663,6 +2663,19 @@ class Distribution(object):
raise AttributeError(attr) raise AttributeError(attr)
return getattr(self._provider, attr) return getattr(self._provider, attr)
def __dir__(self):
return list(
set(super(Distribution, self).__dir__())
| set(
attr for attr in self._provider.__dir__()
if not attr.startswith('_')
)
)
if not hasattr(object, '__dir__'):
# python 2.7 not supported
del __dir__
@classmethod @classmethod
def from_filename(cls, filename, metadata=None, **kw): def from_filename(cls, filename, metadata=None, **kw):
return cls.from_location( return cls.from_location(
......
...@@ -145,6 +145,35 @@ class TestDistro: ...@@ -145,6 +145,35 @@ class TestDistro:
for v in "Twisted>=1.5", "Twisted>=1.5\nZConfig>=2.0": for v in "Twisted>=1.5", "Twisted>=1.5\nZConfig>=2.0":
self.checkRequires(self.distRequires(v), v) self.checkRequires(self.distRequires(v), v)
needs_object_dir = pytest.mark.skipif(
not hasattr(object, '__dir__'),
reason='object.__dir__ necessary for self.__dir__ implementation',
)
def test_distribution_dir(self):
d = pkg_resources.Distribution()
dir(d)
@needs_object_dir
def test_distribution_dir_includes_provider_dir(self):
d = pkg_resources.Distribution()
before = d.__dir__()
assert 'test_attr' not in before
d._provider.test_attr = None
after = d.__dir__()
assert len(after) == len(before) + 1
assert 'test_attr' in after
@needs_object_dir
def test_distribution_dir_ignores_provider_dir_leading_underscore(self):
d = pkg_resources.Distribution()
before = d.__dir__()
assert '_test_attr' not in before
d._provider._test_attr = None
after = d.__dir__()
assert len(after) == len(before)
assert '_test_attr' not in after
def testResolve(self): def testResolve(self):
ad = pkg_resources.Environment([]) ad = pkg_resources.Environment([])
ws = WorkingSet([]) ws = WorkingSet([])
......
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