Inherit the Tree class from Mapping (abstract base class)

This allows us to use tree directly in existing functions that expect
a dict as input.
This commit is contained in:
Vineet Naik 2019-10-27 15:53:46 +05:30
parent 3b6fad3111
commit 29f78ca989
1 changed files with 16 additions and 1 deletions

View File

@ -13,6 +13,11 @@ try:
except ImportError: except ImportError:
from ordereddict import OrderedDict from ordereddict import OrderedDict
try:
from collections.abc import Mapping
except ImportError:
from collections import Mapping
try: try:
from pip._internal.utils.misc import get_installed_distributions from pip._internal.utils.misc import get_installed_distributions
from pip._internal.operations.freeze import FrozenRequirement from pip._internal.operations.freeze import FrozenRequirement
@ -287,7 +292,7 @@ class ReqPackage(Package):
'required_version': self.version_spec} 'required_version': self.version_spec}
class Tree(object): class Tree(Mapping):
@classmethod @classmethod
def from_pkgs(cls, pkgs): def from_pkgs(cls, pkgs):
@ -369,6 +374,16 @@ class Tree(object):
rtree[k.as_requirement()] = [] rtree[k.as_requirement()] = []
return ReverseTree(dict(rtree), base=self._base or self) return ReverseTree(dict(rtree), base=self._base or self)
# Methods required by the abstract base class Mapping
def __getitem__(self, *args):
return self._obj.get(*args)
def __iter__(self):
return self._obj.__iter__()
def __len__(self):
return len(self._obj)
class ReverseTree(Tree): class ReverseTree(Tree):