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() diff --git a/pipenv/utils.py b/pipenv/utils.py index 8094b175..4bd894a0 100644 --- a/pipenv/utils.py +++ b/pipenv/utils.py @@ -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('==') diff --git a/tasks/vendoring/patches/patched/prettytoml-table-iter.patch b/tasks/vendoring/patches/patched/prettytoml-table-iter.patch new file mode 100644 index 00000000..5758e122 --- /dev/null +++ b/tasks/vendoring/patches/patched/prettytoml-table-iter.patch @@ -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()