From 29f78ca989acdac34b5dce869f0bfec43c43162a Mon Sep 17 00:00:00 2001 From: Vineet Naik Date: Sun, 27 Oct 2019 15:53:46 +0530 Subject: [PATCH] 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. --- pipdeptree.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/pipdeptree.py b/pipdeptree.py index 17ccf50..28b7f8d 100644 --- a/pipdeptree.py +++ b/pipdeptree.py @@ -13,6 +13,11 @@ try: except ImportError: from ordereddict import OrderedDict +try: + from collections.abc import Mapping +except ImportError: + from collections import Mapping + try: from pip._internal.utils.misc import get_installed_distributions from pip._internal.operations.freeze import FrozenRequirement @@ -287,7 +292,7 @@ class ReqPackage(Package): 'required_version': self.version_spec} -class Tree(object): +class Tree(Mapping): @classmethod def from_pkgs(cls, pkgs): @@ -369,6 +374,16 @@ class Tree(object): rtree[k.as_requirement()] = [] 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):