Implement __iter__ to make AbstractTable a mapping

This supplements #2101 and makes the check more idiomatic.
This commit is contained in:
Tzu-ping Chung
2018-05-02 18:06:08 +08:00
parent 47e3447012
commit c9f74d7e1e
3 changed files with 38 additions and 3 deletions
@@ -1,8 +1,13 @@
try:
from collections.abc import Mapping
except ImportError:
from collections import Mapping
from prettytoml.elements.common import ContainerElement
from prettytoml.elements import traversal
class AbstractTable(ContainerElement, traversal.TraversalMixin):
class AbstractTable(ContainerElement, traversal.TraversalMixin, Mapping):
"""
Common code for handling tables as key-value pairs with metadata elements sprinkled all over.
@@ -37,6 +42,9 @@ class AbstractTable(ContainerElement, traversal.TraversalMixin):
def __len__(self):
return len(tuple(self._enumerate_items()))
def __iter__(self):
return (key for key, _ in self.items())
def __contains__(self, item):
return item in self.keys()
+1 -2
View File
@@ -47,7 +47,6 @@ from contextlib import contextmanager
from .pep508checker import lookup
from .environments import PIPENV_MAX_ROUNDS, PIPENV_CACHE_DIR
from prettytoml.elements.abstracttable import AbstractTable
try:
from collections.abc import Mapping
except ImportError:
@@ -646,7 +645,7 @@ def is_star(val):
def is_pinned(val):
if isinstance(val, Mapping) or isinstance(val, AbstractTable):
if isinstance(val, Mapping):
val = val.get('version')
return isinstance(val, six.string_types) and val.startswith('==')
@@ -0,0 +1,28 @@
diff --git a/pipenv/patched/prettytoml/elements/abstracttable.py b/pipenv/patched/prettytoml/elements/abstracttable.py
index 59fd5748..48663aed 100644
--- a/pipenv/patched/prettytoml/elements/abstracttable.py
+++ b/pipenv/patched/prettytoml/elements/abstracttable.py
@@ -1,8 +1,13 @@
+try:
+ from collections.abc import Mapping
+except ImportError:
+ from collections import Mapping
+
from prettytoml.elements.common import ContainerElement
from prettytoml.elements import traversal
-class AbstractTable(ContainerElement, traversal.TraversalMixin):
+class AbstractTable(ContainerElement, traversal.TraversalMixin, Mapping):
"""
Common code for handling tables as key-value pairs with metadata elements sprinkled all over.
@@ -37,6 +42,9 @@ class AbstractTable(ContainerElement, traversal.TraversalMixin):
def __len__(self):
return len(tuple(self._enumerate_items()))
+ def __iter__(self):
+ return (key for key, _ in self.items())
+
def __contains__(self, item):
return item in self.keys()