Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-toposort for openSUSE:Factory 
checked in at 2021-10-23 23:14:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-toposort (Old)
 and      /work/SRC/openSUSE:Factory/.python-toposort.new.1890 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-toposort"

Sat Oct 23 23:14:06 2021 rev:2 rq:927092 version:1.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-toposort/python-toposort.changes  
2020-09-15 16:26:36.050499748 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-toposort.new.1890/python-toposort.changes    
    2021-10-23 23:14:16.704989956 +0200
@@ -1,0 +2,8 @@
+Fri Oct 22 20:19:36 UTC 2021 - Ben Greiner <c...@bnavigator.de>
+
+- Update to version 1.7
+  * Changed to use setup.cfg and pyproject.toml.  Deleted setup.py.
+  * GH issue #1: No longer modify input data structures.  Thanks
+    Lenz Furrer.
+
+-------------------------------------------------------------------

Old:
----
  toposort-1.5.tar.gz

New:
----
  toposort-1.7.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-toposort.spec ++++++
--- /var/tmp/diff_new_pack.Zstrw4/_old  2021-10-23 23:14:17.108990153 +0200
+++ /var/tmp/diff_new_pack.Zstrw4/_new  2021-10-23 23:14:17.108990153 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-toposort
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,14 +18,16 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-toposort
-Version:        1.5
+Version:        1.7
 Release:        0
 Summary:        Implements a topological sort algorithm
 License:        Apache-2.0
 Group:          Development/Languages/Python
-URL:            https://bitbucket.org/ericvsmith/toposort
+URL:            https://gitlab.com/ericvsmith/toposort
 Source:         
https://files.pythonhosted.org/packages/source/t/toposort/toposort-%{version}.tar.gz
+BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module setuptools}
+BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 BuildArch:      noarch
@@ -37,20 +39,24 @@
 %prep
 %setup -q -n toposort-%{version}
 chmod a-x *.txt
+# can't discover and execute at the same time
+sed -i '/unittest.main/d' test/test_toposort.py
 
 %build
-%python_build
+%pyproject_wheel
 
 %install
-%python_install
+%pyproject_install
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
-%python_exec setup.py test
+%pyunittest -v
 
 %files %{python_files}
 %doc CHANGES.txt README.txt
 %license LICENSE.txt
-%{python_sitelib}/*
+%{python_sitelib}/toposort.py*
+%pycache_only %{python_sitelib}/__pycache__/toposort*
+%{python_sitelib}/toposort-%{version}*-info
 
 %changelog

++++++ toposort-1.5.tar.gz -> toposort-1.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/CHANGES.txt new/toposort-1.7/CHANGES.txt
--- old/toposort-1.5/CHANGES.txt        2016-10-25 03:03:14.000000000 +0200
+++ new/toposort-1.7/CHANGES.txt        2021-09-28 16:18:39.000000000 +0200
@@ -1,6 +1,19 @@
 Change log
 ==========
 
+1.7 2021-09-28 Eric V. Smith
+----------------------------
+
+* Changed to use setup.cfg and pyproject.toml.  Deleted setup.py.
+
+* GH issue #1: No longer modify input data structures.  Thanks Lenz
+  Furrer.
+
+1.6 2020-12-17 Eric V. Smith
+----------------------------
+
+* No changes, just updated the project URL from bitbucket to gitlab.
+
 1.5 2016-10-24 Eric V. Smith
 ----------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/MANIFEST.in new/toposort-1.7/MANIFEST.in
--- old/toposort-1.5/MANIFEST.in        2015-05-16 19:16:56.000000000 +0200
+++ new/toposort-1.7/MANIFEST.in        2021-09-28 16:21:19.000000000 +0200
@@ -1 +1 @@
-include NOTICE *.txt MANIFEST.in test/__init__.py
+include NOTICE *.txt MANIFEST.in test/__init__.py Makefile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/Makefile new/toposort-1.7/Makefile
--- old/toposort-1.5/Makefile   1970-01-01 01:00:00.000000000 +0100
+++ new/toposort-1.7/Makefile   2021-09-28 18:44:43.000000000 +0200
@@ -0,0 +1,18 @@
+all: wheel sdist
+
+wheel:
+       python3 -m build --wheel
+
+sdist:
+       python3 -m build --sdist
+
+clean:
+       rm -rf build/ dist/ src/*.egg-info src/__pycache__ test/__pycache__
+
+test:  unittest doctest
+
+unittest:
+       PYTHONPATH=src:test python3 -m test.test_toposort
+
+doctest:
+       PYTHONPATH=src python3 -m doctest README.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/NOTICE new/toposort-1.7/NOTICE
--- old/toposort-1.5/NOTICE     2014-02-11 01:08:24.000000000 +0100
+++ new/toposort-1.7/NOTICE     2021-09-26 18:35:36.000000000 +0200
@@ -1,4 +1,4 @@
-Copyright 2014 True Blade Systems, Inc.
+Copyright 2014-2021 True Blade Systems, Inc.
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/PKG-INFO new/toposort-1.7/PKG-INFO
--- old/toposort-1.5/PKG-INFO   2016-10-25 03:05:02.000000000 +0200
+++ new/toposort-1.7/PKG-INFO   2021-09-28 19:03:16.734459900 +0200
@@ -1,185 +1,125 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
 Name: toposort
-Version: 1.5
-Summary: Implements a topological sort algorithm.
-Home-page: https://bitbucket.org/ericvsmith/toposort
-Author: Eric V. Smith
-Author-email: e...@trueblade.com
-License: Apache License Version 2.0
-Description: ========
-        toposort
-        ========
-        
-        Overview
-        ========
-        
-        Implements a topological sort algorithm.
-        
-        From `Wikipedia <http://en.wikipedia.org/wiki/Topological_sorting>`_:
-        In computer science, a topological sort (sometimes abbreviated topsort
-        or toposort) or topological ordering of a directed graph is a linear
-        ordering of its vertices such that for every directed edge uv from
-        vertex u to vertex v, u comes before v in the ordering.
-        
-        Input data description
-        ======================
-        
-        The input to the toposort function is a dict describing the
-        dependencies among the input nodes. Each key is a dependent node, the
-        corresponding value is a set containing the dependent nodes.
-        
-        Note that toposort does not care what the input node values mean: it
-        just compares them for equality. The examples here usually use
-        integers, but they could be any hashable type.
-        
-        Typical usage
-        =============
-        
-        The interpretation of the input data here is: If 2 depends on 11; 9
-        depends on 11, 8 and 10; 10 depends on 11 and 3 (and so on), then in 
what
-        order should we process the items such that all nodes are processed
-        before any of their dependencies?::
-        
-            >>> from toposort import toposort, toposort_flatten
-            >>> list(toposort({2: {11},
-            ...                9: {11, 8, 10},
-            ...                10: {11, 3},
-            ...                11: {7, 5},
-            ...                8: {7, 3},
-            ...               }))
-            [{3, 5, 7}, {8, 11}, {2, 10}, {9}]
-        
-        And the answer is: process 3, 5, and 7 (in any order); then process 8
-        and 11; then process 2 and 10; then process 9. Note that 3, 5, and 7
-        are returned first because they do not depend on anything. They are
-        then removed from consideration, and then 8 and 11 don't depend on
-        anything remaining. This process continues until all nodes are
-        returned, or a circular dependency is detected.
-        
-        Circular dependencies
-        =====================
-        
-        A circular dependency will raise a CyclicDependencyError, which is
-        derived from ValueError.  Here 1 depends on 2, and 2 depends on 1::
-        
-            >>> list(toposort({1: {2},
-            ...                2: {1},
-            ...               }))
-            Traceback (most recent call last):
-                ...
-            toposort.CircularDependencyError: Circular dependencies exist 
among these items: {1:{2}, 2:{1}}
-        
-        In addition, the 'data' attribute of the raised CyclicDependencyError
-        will contain a dict containing the subset of the input data involved
-        in the circular dependency.
-        
-        
-        Module contents
-        ===============
-        
-        ``toposort(data)``
-        
-        Returns an iterator describing the dependencies among nodes in the
-        input data. Each returned item will be a set. Each member of this set
-        has no dependencies in this set, or in any set previously returned.
-        
-        ``toposort_flatten(data, sort=True)``
-        
-        Like toposort(data), except that it returns a list of all of the
-        depend values, in order. If sort is true, the returned nodes are 
sorted within
-        each group before they are appended to the result::
-        
-            >>> toposort_flatten({2: {11},
-            ...                   9: {11, 8, 10},
-            ...                   10: {11, 3},
-            ...                   11: {7, 5},
-            ...                   8: {7, 3},
-            ...                  })
-            [3, 5, 7, 8, 11, 2, 10, 9]
-        
-        Note that this result is the same as the first example: ``[{3, 5, 7}, 
{8, 11}, {2, 10}, {9}]``,
-        except that the result is flattened, and within each set the nodes
-        are sorted.
-        
-        
-        Testing
-        =======
-        
-        To test, run 'python setup.py test'. On python >= 3.0, this also runs 
the doctests.
-        
-        Change log
-        ==========
-        
-        1.5 2016-10-24 Eric V. Smith
-        ----------------------------
-        
-        * When a circular dependency error is detected, raise a specific
-          exception, CircularDependencyError, which is a subclass of
-          ValueError.  The 'data' attribute of the exception will contain the
-          data involved in the circular dependency (issue #2).  Thanks
-          lilydjwg for the initial patch.
-        
-        * To make building wheels easier, always require setuptools in
-          setup.py (issue #5).
-        
-        * Mark wheel as being universal, that is, supporting both Python 2.7
-          and 3.x (issue #7).
-        
-        1.4 2015-05-16 Eric V. Smith
-        ----------------------------
-        
-        * Removed 'test' package, so it won't get installed by bdist_*. It's 
still
-          included in sdists.
-        
-        * No code changes.
-        
-        1.3 2015-05-15 Eric V. Smith
-        ----------------------------
-        
-        * Fixed change log date.
-        
-        * No code changes.
-        
-        1.2 2015-05-15 Eric V. Smith
-        ----------------------------
-        
-        * Changed RPM name to python3-toposort if running with python 3.
-        
-        * No code changes.
-        
-        1.1 2014-07-24 Eric V. Smith
-        ----------------------------
-        
-        * Release version 1.1. No code changes.
-        
-        * Add a README.txt entry on running the test suite.
-        
-        * Fix missing test/__init__.py in the sdist.
-        
-        1.0 2014-03-14 Eric V. Smith
-        ----------------------------
-        
-        * Release version 1.0. The API is stable.
-        
-        * Add MANIFEST.in to MANIFEST.in, so that it is created in the sdist
-          (issue #1).
-        
-        0.2 2014-02-11 Eric V. Smith
-        ----------------------------
-        
-        * Modify setup.py to produce a RPM name of python-toposort for 
bdist_rpm.
-        
-        0.1 2014-02-10 Eric V. Smith
-        ----------------------------
-        
-        * Initial release.
-        
+Version: 1.7
+Summary: "Implements a topological sort algorithm."
+Home-page: UNKNOWN
+Author: "Eric V. Smith"
+Author-email: "e...@trueblade.com"
+License: "Apache License Version 2.0"
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Description-Content-Type: text/x-rst
+License-File: LICENSE.txt
+License-File: NOTICE
+
+========
+toposort
+========
+
+Overview
+========
+
+Implements a topological sort algorithm.
+
+From `Wikipedia <http://en.wikipedia.org/wiki/Topological_sorting>`_:
+In computer science, a topological sort (sometimes abbreviated topsort
+or toposort) or topological ordering of a directed graph is a linear
+ordering of its vertices such that for every directed edge uv from
+vertex u to vertex v, u comes before v in the ordering.
+
+Input data description
+======================
+
+The input to the toposort function is a dict describing the
+dependencies among the input nodes. Each key is a dependent node, the
+corresponding value is a set containing the dependent nodes.
+
+Note that toposort does not care what the input node values mean: it
+just compares them for equality. The examples here usually use
+integers, but they could be any hashable type.
+
+Typical usage
+=============
+
+The interpretation of the input data here is: If 2 depends on 11; 9
+depends on 11, 8 and 10; 10 depends on 11 and 3 (and so on), then in what
+order should we process the items such that all nodes are processed
+before any of their dependencies?::
+
+    >>> from toposort import toposort, toposort_flatten
+    >>> list(toposort({2: {11},
+    ...                9: {11, 8, 10},
+    ...                10: {11, 3},
+    ...                11: {7, 5},
+    ...                8: {7, 3},
+    ...               }))
+    [{3, 5, 7}, {8, 11}, {2, 10}, {9}]
+
+And the answer is: process 3, 5, and 7 (in any order); then process 8
+and 11; then process 2 and 10; then process 9. Note that 3, 5, and 7
+are returned first because they do not depend on anything. They are
+then removed from consideration, and then 8 and 11 don't depend on
+anything remaining. This process continues until all nodes are
+returned, or a circular dependency is detected.
+
+Circular dependencies
+=====================
+
+A circular dependency will raise a CyclicDependencyError, which is
+derived from ValueError.  Here 1 depends on 2, and 2 depends on 1::
+
+    >>> list(toposort({1: {2},
+    ...                2: {1},
+    ...               }))
+    Traceback (most recent call last):
+        ...
+    toposort.CircularDependencyError: Circular dependencies exist among these 
items: {1:{2}, 2:{1}}
+
+In addition, the 'data' attribute of the raised CyclicDependencyError
+will contain a dict containing the subset of the input data involved
+in the circular dependency.
+
+
+Module contents
+===============
+
+``toposort(data)``
+
+Returns an iterator describing the dependencies among nodes in the
+input data. Each returned item will be a set. Each member of this set
+has no dependencies in this set, or in any set previously returned.
+
+``toposort_flatten(data, sort=True)``
+
+Like toposort(data), except that it returns a list of all of the
+depend values, in order. If sort is true, the returned nodes are sorted within
+each group before they are appended to the result::
+
+    >>> toposort_flatten({2: {11},
+    ...                   9: {11, 8, 10},
+    ...                   10: {11, 3},
+    ...                   11: {7, 5},
+    ...                   8: {7, 3},
+    ...                  })
+    [3, 5, 7, 8, 11, 2, 10, 9]
+
+Note that this result is the same as the first example: ``[{3, 5, 7}, {8, 11}, 
{2, 10}, {9}]``,
+except that the result is flattened, and within each set the nodes
+are sorted.
+
+
+Testing
+=======
+
+To test, run 'python setup.py test'. On python >= 3.0, this also runs the 
doctests.
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/pyproject.toml 
new/toposort-1.7/pyproject.toml
--- old/toposort-1.5/pyproject.toml     1970-01-01 01:00:00.000000000 +0100
+++ new/toposort-1.7/pyproject.toml     2021-09-26 21:11:54.000000000 +0200
@@ -0,0 +1,6 @@
+[build-system]
+requires = [
+    "setuptools>=42",
+    "wheel",
+]
+build-backend = "setuptools.build_meta"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/setup.cfg new/toposort-1.7/setup.cfg
--- old/toposort-1.5/setup.cfg  2016-10-25 03:05:02.000000000 +0200
+++ new/toposort-1.7/setup.cfg  2021-09-28 19:03:16.734971500 +0200
@@ -1,8 +1,34 @@
+[metadata]
+name = toposort
+version = attr: toposort.__version__
+author = "Eric V. Smith"
+author_email = "e...@trueblade.com"
+description = "Implements a topological sort algorithm."
+long_description = file: README.txt
+long_description_content_type = text/x-rst
+license = "Apache License Version 2.0"
+classifier = 
+       Development Status :: 5 - Production/Stable
+       Intended Audience :: Developers
+       License :: OSI Approved :: Apache Software License
+       Topic :: Software Development :: Libraries :: Python Modules
+       Programming Language :: Python :: 2.7
+       Programming Language :: Python :: 3.6
+       Programming Language :: Python :: 3.7
+       Programming Language :: Python :: 3.8
+       Programming Language :: Python :: 3.9
+       Programming Language :: Python :: 3.10
+
+[options]
+package_dir = 
+       =src
+py_modules = 
+       toposort
+
 [bdist_wheel]
 universal = 1
 
 [egg_info]
 tag_build = 
 tag_date = 0
-tag_svn_revision = 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/setup.py new/toposort-1.7/setup.py
--- old/toposort-1.5/setup.py   2016-10-25 03:02:53.000000000 +0200
+++ new/toposort-1.7/setup.py   1970-01-01 01:00:00.000000000 +0100
@@ -1,46 +0,0 @@
-from __future__ import print_function
-from setuptools import setup, Command
-
-# run our tests
-class PyTest(Command):
-    user_options = []
-    def initialize_options(self):
-        pass
-    def finalize_options(self):
-        pass
-    def run(self):
-        import sys, subprocess
-        tests = [('test suite', ['-m', 'test.test_toposort']),
-                 ]
-        if sys.hexversion >= 0x03000000:
-            # Skip doctests for python < 3.0. They use set literal reprs, which
-            #  are different in 2.7. Testing under 3.x is good enough.
-            tests.append(('doctests',   ['-m' 'doctest', 'README.txt']))
-        for name, cmds in tests:
-            print(name)
-            errno = subprocess.call([sys.executable] + cmds)
-            if errno != 0:
-                raise SystemExit(errno)
-        print('test complete')
-
-
-setup(name='toposort',
-      version='1.5',
-      url='https://bitbucket.org/ericvsmith/toposort',
-      author='Eric V. Smith',
-      author_email='e...@trueblade.com',
-      description='Implements a topological sort algorithm.',
-      long_description=open('README.txt').read() + '\n' + 
open('CHANGES.txt').read(),
-      classifiers=['Development Status :: 5 - Production/Stable',
-                   'Intended Audience :: Developers',
-                   'License :: OSI Approved :: Apache Software License',
-                   'Topic :: Software Development :: Libraries :: Python 
Modules',
-                   'Programming Language :: Python :: 2.7',
-                   'Programming Language :: Python :: 3.3',
-                   'Programming Language :: Python :: 3.4',
-                   'Programming Language :: Python :: 3.5',
-                   ],
-      license='Apache License Version 2.0',
-      py_modules=['toposort'],
-      cmdclass = {'test': PyTest},
-      )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/src/toposort.egg-info/PKG-INFO 
new/toposort-1.7/src/toposort.egg-info/PKG-INFO
--- old/toposort-1.5/src/toposort.egg-info/PKG-INFO     1970-01-01 
01:00:00.000000000 +0100
+++ new/toposort-1.7/src/toposort.egg-info/PKG-INFO     2021-09-28 
19:03:16.000000000 +0200
@@ -0,0 +1,125 @@
+Metadata-Version: 2.1
+Name: toposort
+Version: 1.7
+Summary: "Implements a topological sort algorithm."
+Home-page: UNKNOWN
+Author: "Eric V. Smith"
+Author-email: "e...@trueblade.com"
+License: "Apache License Version 2.0"
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: Apache Software License
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Description-Content-Type: text/x-rst
+License-File: LICENSE.txt
+License-File: NOTICE
+
+========
+toposort
+========
+
+Overview
+========
+
+Implements a topological sort algorithm.
+
+From `Wikipedia <http://en.wikipedia.org/wiki/Topological_sorting>`_:
+In computer science, a topological sort (sometimes abbreviated topsort
+or toposort) or topological ordering of a directed graph is a linear
+ordering of its vertices such that for every directed edge uv from
+vertex u to vertex v, u comes before v in the ordering.
+
+Input data description
+======================
+
+The input to the toposort function is a dict describing the
+dependencies among the input nodes. Each key is a dependent node, the
+corresponding value is a set containing the dependent nodes.
+
+Note that toposort does not care what the input node values mean: it
+just compares them for equality. The examples here usually use
+integers, but they could be any hashable type.
+
+Typical usage
+=============
+
+The interpretation of the input data here is: If 2 depends on 11; 9
+depends on 11, 8 and 10; 10 depends on 11 and 3 (and so on), then in what
+order should we process the items such that all nodes are processed
+before any of their dependencies?::
+
+    >>> from toposort import toposort, toposort_flatten
+    >>> list(toposort({2: {11},
+    ...                9: {11, 8, 10},
+    ...                10: {11, 3},
+    ...                11: {7, 5},
+    ...                8: {7, 3},
+    ...               }))
+    [{3, 5, 7}, {8, 11}, {2, 10}, {9}]
+
+And the answer is: process 3, 5, and 7 (in any order); then process 8
+and 11; then process 2 and 10; then process 9. Note that 3, 5, and 7
+are returned first because they do not depend on anything. They are
+then removed from consideration, and then 8 and 11 don't depend on
+anything remaining. This process continues until all nodes are
+returned, or a circular dependency is detected.
+
+Circular dependencies
+=====================
+
+A circular dependency will raise a CyclicDependencyError, which is
+derived from ValueError.  Here 1 depends on 2, and 2 depends on 1::
+
+    >>> list(toposort({1: {2},
+    ...                2: {1},
+    ...               }))
+    Traceback (most recent call last):
+        ...
+    toposort.CircularDependencyError: Circular dependencies exist among these 
items: {1:{2}, 2:{1}}
+
+In addition, the 'data' attribute of the raised CyclicDependencyError
+will contain a dict containing the subset of the input data involved
+in the circular dependency.
+
+
+Module contents
+===============
+
+``toposort(data)``
+
+Returns an iterator describing the dependencies among nodes in the
+input data. Each returned item will be a set. Each member of this set
+has no dependencies in this set, or in any set previously returned.
+
+``toposort_flatten(data, sort=True)``
+
+Like toposort(data), except that it returns a list of all of the
+depend values, in order. If sort is true, the returned nodes are sorted within
+each group before they are appended to the result::
+
+    >>> toposort_flatten({2: {11},
+    ...                   9: {11, 8, 10},
+    ...                   10: {11, 3},
+    ...                   11: {7, 5},
+    ...                   8: {7, 3},
+    ...                  })
+    [3, 5, 7, 8, 11, 2, 10, 9]
+
+Note that this result is the same as the first example: ``[{3, 5, 7}, {8, 11}, 
{2, 10}, {9}]``,
+except that the result is flattened, and within each set the nodes
+are sorted.
+
+
+Testing
+=======
+
+To test, run 'python setup.py test'. On python >= 3.0, this also runs the 
doctests.
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/src/toposort.egg-info/SOURCES.txt 
new/toposort-1.7/src/toposort.egg-info/SOURCES.txt
--- old/toposort-1.5/src/toposort.egg-info/SOURCES.txt  1970-01-01 
01:00:00.000000000 +0100
+++ new/toposort-1.7/src/toposort.egg-info/SOURCES.txt  2021-09-28 
19:03:16.000000000 +0200
@@ -0,0 +1,15 @@
+CHANGES.txt
+LICENSE.txt
+MANIFEST.in
+Makefile
+NOTICE
+README.txt
+pyproject.toml
+setup.cfg
+src/toposort.py
+src/toposort.egg-info/PKG-INFO
+src/toposort.egg-info/SOURCES.txt
+src/toposort.egg-info/dependency_links.txt
+src/toposort.egg-info/top_level.txt
+test/__init__.py
+test/test_toposort.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/toposort-1.5/src/toposort.egg-info/dependency_links.txt 
new/toposort-1.7/src/toposort.egg-info/dependency_links.txt
--- old/toposort-1.5/src/toposort.egg-info/dependency_links.txt 1970-01-01 
01:00:00.000000000 +0100
+++ new/toposort-1.7/src/toposort.egg-info/dependency_links.txt 2021-09-28 
19:03:16.000000000 +0200
@@ -0,0 +1 @@
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/src/toposort.egg-info/top_level.txt 
new/toposort-1.7/src/toposort.egg-info/top_level.txt
--- old/toposort-1.5/src/toposort.egg-info/top_level.txt        1970-01-01 
01:00:00.000000000 +0100
+++ new/toposort-1.7/src/toposort.egg-info/top_level.txt        2021-09-28 
19:03:16.000000000 +0200
@@ -0,0 +1 @@
+toposort
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/src/toposort.py 
new/toposort-1.7/src/toposort.py
--- old/toposort-1.5/src/toposort.py    1970-01-01 01:00:00.000000000 +0100
+++ new/toposort-1.7/src/toposort.py    2021-09-28 18:49:02.000000000 +0200
@@ -0,0 +1,96 @@
+#######################################################################
+# Implements a topological sort algorithm.
+#
+# Copyright 2014-2021 True Blade Systems, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Notes:
+#  Based on http://code.activestate.com/recipes/578272-topological-sort
+#   with these major changes:
+#    Added unittests.
+#    Deleted doctests (maybe not the best idea in the world, but it cleans
+#     up the docstring).
+#    Moved functools import to the top of the file.
+#    Changed assert to a ValueError.
+#    Changed iter[items|keys] to [items|keys], for python 3
+#     compatibility. I don't think it matters for python 2 these are
+#     now lists instead of iterables.
+#    Copy the input so as to leave it unmodified.
+#    Renamed function from toposort2 to toposort.
+#    Handle empty input.
+#    Switch tests to use set literals.
+#
+########################################################################
+
+from functools import reduce as _reduce
+
+__all__ = ["toposort", "toposort_flatten", "CircularDependencyError"]
+__version__ = "1.7"
+
+
+class CircularDependencyError(ValueError):
+    def __init__(self, data):
+        # Sort the data just to make the output consistent, for use in
+        #  error messages.  That's convenient for doctests.
+        s = "Circular dependencies exist among these items: {{{}}}".format(
+            ", ".join(
+                "{!r}:{!r}".format(key, value) for key, value in 
sorted(data.items())
+            )
+        )
+        super(CircularDependencyError, self).__init__(s)
+        self.data = data
+
+
+def toposort(data):
+    """\
+Dependencies are expressed as a dictionary whose keys are items
+and whose values are a set of dependent items. Output is a list of
+sets in topological order. The first set consists of items with no
+dependences, each subsequent set consists of items that depend upon
+items in the preceeding sets."""
+
+    # Special case empty input.
+    if len(data) == 0:
+        return
+
+    # Copy the input so as to leave it unmodified.
+    # Discard self-dependencies and copy two levels deep.
+    data = {item: set(e for e in dep if e != item) for item, dep in 
data.items()}
+
+    # Find all items that don't depend on anything.
+    extra_items_in_deps = _reduce(set.union, data.values()) - set(data.keys())
+    # Add empty dependences where needed.
+    data.update({item: set() for item in extra_items_in_deps})
+    while True:
+        ordered = set(item for item, dep in data.items() if len(dep) == 0)
+        if not ordered:
+            break
+        yield ordered
+        data = {
+            item: (dep - ordered) for item, dep in data.items() if item not in 
ordered
+        }
+    if len(data) != 0:
+        raise CircularDependencyError(data)
+
+
+def toposort_flatten(data, sort=True):
+    """\
+Returns a single list of dependencies. For any set returned by
+toposort(), those items are sorted and appended to the result (just to
+make the results deterministic)."""
+
+    result = []
+    for d in toposort(data):
+        result.extend((sorted if sort else list)(d))
+    return result
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/test/test_toposort.py 
new/toposort-1.7/test/test_toposort.py
--- old/toposort-1.5/test/test_toposort.py      2016-10-25 02:38:50.000000000 
+0200
+++ new/toposort-1.7/test/test_toposort.py      2021-09-28 16:24:55.000000000 
+0200
@@ -1,7 +1,7 @@
 #######################################################################
 # Tests for toposort module.
 #
-# Copyright 2014 True Blade Systems, Inc.
+# Copyright 2014-2021 True Blade Systems, Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -23,64 +23,100 @@
 
 from toposort import toposort, toposort_flatten, CircularDependencyError
 
+
 class TestCase(unittest.TestCase):
     def test_simple(self):
-        self.assertEqual(list(toposort({2: {11},
-                                        9: {11, 8},
-                                        10: {11, 3},
-                                        11: {7, 5},
-                                        8: {7, 3},
-                                        })),
-                         [{3, 5, 7},
-                          {8, 11},
-                          {2, 9, 10},
-                          ])
-
-        # make sure self dependencies are ignored
-        self.assertEqual(list(toposort({2: {2, 11},
-                                        9: {11, 8},
-                                        10: {10, 11, 3},
-                                        11: {7, 5},
-                                        8: {7, 3},
-                                        })),
-                         [{3, 5, 7},
-                          {8, 11},
-                          {2, 9, 10},
-                          ])
-
-        self.assertEqual(list(toposort({1: set()})),
-                         [{1}])
-        self.assertEqual(list(toposort({1: {1}})),
-                         [{1}])
+        self.assertEqual(
+            list(
+                toposort(
+                    {
+                        2: {11},
+                        9: {11, 8},
+                        10: {11, 3},
+                        11: {7, 5},
+                        8: {7, 3},
+                    }
+                )
+            ),
+            [
+                {3, 5, 7},
+                {8, 11},
+                {2, 9, 10},
+            ],
+        )
+
+        # Make sure self dependencies are ignored.
+        self.assertEqual(
+            list(
+                toposort(
+                    {
+                        2: {2, 11},
+                        9: {11, 8},
+                        10: {10, 11, 3},
+                        11: {7, 5},
+                        8: {7, 3},
+                    }
+                )
+            ),
+            [
+                {3, 5, 7},
+                {8, 11},
+                {2, 9, 10},
+            ],
+        )
+
+        self.assertEqual(list(toposort({1: set()})), [{1}])
+        self.assertEqual(list(toposort({1: {1}})), [{1}])
 
     def test_no_dependencies(self):
-        self.assertEqual(list(toposort({1: {2},
-                                        3: {4},
-                                        5: {6},
-                                        })),
-                         [{2, 4, 6}, {1, 3, 5}])
-
-        self.assertEqual(list(toposort({1: set(),
-                                        3: set(),
-                                        5: set(),
-                                        })),
-                         [{1, 3, 5}])
+        self.assertEqual(
+            list(
+                toposort(
+                    {
+                        1: {2},
+                        3: {4},
+                        5: {6},
+                    }
+                )
+            ),
+            [{2, 4, 6}, {1, 3, 5}],
+        )
+
+        self.assertEqual(
+            list(
+                toposort(
+                    {
+                        1: set(),
+                        3: set(),
+                        5: set(),
+                    }
+                )
+            ),
+            [{1, 3, 5}],
+        )
 
     def test_empty(self):
-        self.assertEqual(list(toposort({})),
-                         [])
+        self.assertEqual(list(toposort({})), [])
 
     def test_strings(self):
-        self.assertEqual(list(toposort({'2': {'11'},
-                                        '9': {'11', '8'},
-                                        '10': {'11', '3'},
-                                        '11': {'7', '5'},
-                                        '8': {'7', '3'},
-                                        })),
-                         [{'3', '5', '7'},
-                          {'8', '11'},
-                          {'2', '9', '10'},
-                          ])
+        self.assertEqual(
+            list(
+                toposort(
+                    {
+                        "2": {"11"},
+                        "9": {"11", "8"},
+                        "10": {"11", "3"},
+                        "11": {"7", "5"},
+                        "8": {"7", "3"},
+                    }
+                )
+            ),
+            [
+                {"3", "5", "7"},
+                {"8", "11"},
+                {"2", "9", "10"},
+            ],
+        )
 
     def test_objects(self):
         o2 = object()
@@ -91,92 +127,129 @@
         o9 = object()
         o10 = object()
         o11 = object()
-        self.assertEqual(list(toposort({o2: {o11},
-                                        o9: {o11, o8},
-                                        o10: {o11, o3},
-                                        o11: {o7, o5},
-                                        o8: {o7, o3, o8},
-                                        })),
-                         [{o3, o5, o7},
-                          {o8, o11},
-                          {o2, o9, o10},
-                          ])
+        self.assertEqual(
+            list(
+                toposort(
+                    {
+                        o2: {o11},
+                        o9: {o11, o8},
+                        o10: {o11, o3},
+                        o11: {o7, o5},
+                        o8: {o7, o3, o8},
+                    }
+                )
+            ),
+            [
+                {o3, o5, o7},
+                {o8, o11},
+                {o2, o9, o10},
+            ],
+        )
 
     def test_cycle(self):
-        # a simple, 2 element cycle
-        # make sure we can catch this both as ValueError and 
CircularDependencyError
-        self.assertRaises(ValueError, list, toposort({1: {2},
-                                                      2: {1}
-                                                      }))
+        # A simple, 2 element cycle.
+        # Make sure we can catch this both as ValueError and 
CircularDependencyError.
+        self.assertRaises(ValueError, list, toposort({1: {2}, 2: {1}}))
         with self.assertRaises(CircularDependencyError) as ex:
-            list(toposort({1: {2},
-                           2: {1}
-                           }))
+            list(toposort({1: {2}, 2: {1}}))
         self.assertEqual(ex.exception.data, {1: {2}, 2: {1}})
 
-        # an indirect cycle
-        self.assertRaises(ValueError, list, toposort({1: {2},
-                                                      2: {3},
-                                                      3: {1},
-                                                      }))
+        # An indirect cycle.
+        self.assertRaises(
+            ValueError,
+            list,
+            toposort(
+                {
+                    1: {2},
+                    2: {3},
+                    3: {1},
+                }
+            ),
+        )
         with self.assertRaises(CircularDependencyError) as ex:
-            list(toposort({1: {2},
-                           2: {3},
-                           3: {1},
-                           }))
+            list(
+                toposort(
+                    {
+                        1: {2},
+                        2: {3},
+                        3: {1},
+                    }
+                )
+            )
         self.assertEqual(ex.exception.data, {1: {2}, 2: {3}, 3: {1}})
 
-        # not all elements involved in a cycle
+        # Not all elements involved in a cycle.
         with self.assertRaises(CircularDependencyError) as ex:
-            list(toposort({1: {2},
-                           2: {3},
-                           3: {1},
-                           5: {4},
-                           4: {6},
-                           }))
+            list(
+                toposort(
+                    {
+                        1: {2},
+                        2: {3},
+                        3: {1},
+                        5: {4},
+                        4: {6},
+                    }
+                )
+            )
         self.assertEqual(ex.exception.data, {1: set([2]), 2: set([3]), 3: 
set([1])})
 
     def test_input_not_modified(self):
-        data = {2: {11},
+        def get_data():
+            return {
+                2: {11},
                 9: {11, 8},
                 10: {11, 3},
                 11: {7, 5},
-                8: {7, 3, 8},  # includes something self-referential
-                }
-        orig = data.copy()
+                8: {7, 3, 8},  # Includes something self-referential.
+            }
+
+        data = get_data()
+        orig = get_data()
+        self.assertEqual(data, orig)
         results = list(toposort(data))
         self.assertEqual(data, orig)
 
     def test_input_not_modified_when_cycle_error(self):
-        data = {1: {2},
+        def get_data():
+            return {
+                1: {2},
                 2: {1},
                 3: {4},
-                }
-        orig = data.copy()
+            }
+
+        data = get_data()
+        orig = get_data()
+        self.assertEqual(data, orig)
         self.assertRaises(ValueError, list, toposort(data))
         self.assertEqual(data, orig)
 
 
 class TestCaseAll(unittest.TestCase):
     def test_sort_flatten(self):
-        data = {2: {11},
-                9: {11, 8},
-                10: {11, 3},
-                11: {7, 5},
-                8: {7, 3, 8},  # includes something self-referential
-                }
+        data = {
+            2: {11},
+            9: {11, 8},
+            10: {11, 3},
+            11: {7, 5},
+            8: {7, 3, 8},  # Includes something self-referential.
+        }
         expected = [{3, 5, 7}, {8, 11}, {2, 9, 10}]
         self.assertEqual(list(toposort(data)), expected)
 
-        # now check the sorted results
+        # Now check the sorted results.
         results = []
         for item in expected:
             results.extend(sorted(item))
         self.assertEqual(toposort_flatten(data), results)
 
-        # and the unsorted results. break the results up into groups to 
compare them
+        # And the unsorted results.  Break the results up into groups to
+        # compare them.
         actual = toposort_flatten(data, False)
-        results = [{i for i in actual[0:3]}, {i for i in actual[3:5]}, {i for 
i in actual[5:8]}]
+        results = [
+            {i for i in actual[0:3]},
+            {i for i in actual[3:5]},
+            {i for i in actual[5:8]},
+        ]
         self.assertEqual(results, expected)
 
 
@@ -184,18 +257,22 @@
     def test_all(self):
         import toposort
 
-        # check that __all__ in the module contains everything that should be
-        #  public, and only those symbols
+        # Check that __all__ in the module contains everything that should be
+        # public, and only those symbols.
         all = set(toposort.__all__)
 
-        # check that things in __all__ only appear once
-        self.assertEqual(len(all), len(toposort.__all__),
-                         'some symbols appear more than once in __all__')
+        # Check that things in __all__ only appear once.
+        self.assertEqual(
+            len(all),
+            len(toposort.__all__),
+            "some symbols appear more than once in __all__",
+        )
 
-        # get the list of public symbols
-        found = set(name for name in dir(toposort) if not name.startswith('_'))
+        # Get the list of public symbols.
+        found = set(name for name in dir(toposort) if not name.startswith("_"))
 
-        # make sure it matches __all__
+        # Make sure it matches __all__.
         self.assertEqual(all, found)
 
+
 unittest.main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/toposort.egg-info/PKG-INFO 
new/toposort-1.7/toposort.egg-info/PKG-INFO
--- old/toposort-1.5/toposort.egg-info/PKG-INFO 2016-10-25 03:05:02.000000000 
+0200
+++ new/toposort-1.7/toposort.egg-info/PKG-INFO 1970-01-01 01:00:00.000000000 
+0100
@@ -1,185 +0,0 @@
-Metadata-Version: 1.1
-Name: toposort
-Version: 1.5
-Summary: Implements a topological sort algorithm.
-Home-page: https://bitbucket.org/ericvsmith/toposort
-Author: Eric V. Smith
-Author-email: e...@trueblade.com
-License: Apache License Version 2.0
-Description: ========
-        toposort
-        ========
-        
-        Overview
-        ========
-        
-        Implements a topological sort algorithm.
-        
-        From `Wikipedia <http://en.wikipedia.org/wiki/Topological_sorting>`_:
-        In computer science, a topological sort (sometimes abbreviated topsort
-        or toposort) or topological ordering of a directed graph is a linear
-        ordering of its vertices such that for every directed edge uv from
-        vertex u to vertex v, u comes before v in the ordering.
-        
-        Input data description
-        ======================
-        
-        The input to the toposort function is a dict describing the
-        dependencies among the input nodes. Each key is a dependent node, the
-        corresponding value is a set containing the dependent nodes.
-        
-        Note that toposort does not care what the input node values mean: it
-        just compares them for equality. The examples here usually use
-        integers, but they could be any hashable type.
-        
-        Typical usage
-        =============
-        
-        The interpretation of the input data here is: If 2 depends on 11; 9
-        depends on 11, 8 and 10; 10 depends on 11 and 3 (and so on), then in 
what
-        order should we process the items such that all nodes are processed
-        before any of their dependencies?::
-        
-            >>> from toposort import toposort, toposort_flatten
-            >>> list(toposort({2: {11},
-            ...                9: {11, 8, 10},
-            ...                10: {11, 3},
-            ...                11: {7, 5},
-            ...                8: {7, 3},
-            ...               }))
-            [{3, 5, 7}, {8, 11}, {2, 10}, {9}]
-        
-        And the answer is: process 3, 5, and 7 (in any order); then process 8
-        and 11; then process 2 and 10; then process 9. Note that 3, 5, and 7
-        are returned first because they do not depend on anything. They are
-        then removed from consideration, and then 8 and 11 don't depend on
-        anything remaining. This process continues until all nodes are
-        returned, or a circular dependency is detected.
-        
-        Circular dependencies
-        =====================
-        
-        A circular dependency will raise a CyclicDependencyError, which is
-        derived from ValueError.  Here 1 depends on 2, and 2 depends on 1::
-        
-            >>> list(toposort({1: {2},
-            ...                2: {1},
-            ...               }))
-            Traceback (most recent call last):
-                ...
-            toposort.CircularDependencyError: Circular dependencies exist 
among these items: {1:{2}, 2:{1}}
-        
-        In addition, the 'data' attribute of the raised CyclicDependencyError
-        will contain a dict containing the subset of the input data involved
-        in the circular dependency.
-        
-        
-        Module contents
-        ===============
-        
-        ``toposort(data)``
-        
-        Returns an iterator describing the dependencies among nodes in the
-        input data. Each returned item will be a set. Each member of this set
-        has no dependencies in this set, or in any set previously returned.
-        
-        ``toposort_flatten(data, sort=True)``
-        
-        Like toposort(data), except that it returns a list of all of the
-        depend values, in order. If sort is true, the returned nodes are 
sorted within
-        each group before they are appended to the result::
-        
-            >>> toposort_flatten({2: {11},
-            ...                   9: {11, 8, 10},
-            ...                   10: {11, 3},
-            ...                   11: {7, 5},
-            ...                   8: {7, 3},
-            ...                  })
-            [3, 5, 7, 8, 11, 2, 10, 9]
-        
-        Note that this result is the same as the first example: ``[{3, 5, 7}, 
{8, 11}, {2, 10}, {9}]``,
-        except that the result is flattened, and within each set the nodes
-        are sorted.
-        
-        
-        Testing
-        =======
-        
-        To test, run 'python setup.py test'. On python >= 3.0, this also runs 
the doctests.
-        
-        Change log
-        ==========
-        
-        1.5 2016-10-24 Eric V. Smith
-        ----------------------------
-        
-        * When a circular dependency error is detected, raise a specific
-          exception, CircularDependencyError, which is a subclass of
-          ValueError.  The 'data' attribute of the exception will contain the
-          data involved in the circular dependency (issue #2).  Thanks
-          lilydjwg for the initial patch.
-        
-        * To make building wheels easier, always require setuptools in
-          setup.py (issue #5).
-        
-        * Mark wheel as being universal, that is, supporting both Python 2.7
-          and 3.x (issue #7).
-        
-        1.4 2015-05-16 Eric V. Smith
-        ----------------------------
-        
-        * Removed 'test' package, so it won't get installed by bdist_*. It's 
still
-          included in sdists.
-        
-        * No code changes.
-        
-        1.3 2015-05-15 Eric V. Smith
-        ----------------------------
-        
-        * Fixed change log date.
-        
-        * No code changes.
-        
-        1.2 2015-05-15 Eric V. Smith
-        ----------------------------
-        
-        * Changed RPM name to python3-toposort if running with python 3.
-        
-        * No code changes.
-        
-        1.1 2014-07-24 Eric V. Smith
-        ----------------------------
-        
-        * Release version 1.1. No code changes.
-        
-        * Add a README.txt entry on running the test suite.
-        
-        * Fix missing test/__init__.py in the sdist.
-        
-        1.0 2014-03-14 Eric V. Smith
-        ----------------------------
-        
-        * Release version 1.0. The API is stable.
-        
-        * Add MANIFEST.in to MANIFEST.in, so that it is created in the sdist
-          (issue #1).
-        
-        0.2 2014-02-11 Eric V. Smith
-        ----------------------------
-        
-        * Modify setup.py to produce a RPM name of python-toposort for 
bdist_rpm.
-        
-        0.1 2014-02-10 Eric V. Smith
-        ----------------------------
-        
-        * Initial release.
-        
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: Apache Software License
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Programming Language :: Python :: 3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/toposort.egg-info/SOURCES.txt 
new/toposort-1.7/toposort.egg-info/SOURCES.txt
--- old/toposort-1.5/toposort.egg-info/SOURCES.txt      2016-10-25 
03:05:02.000000000 +0200
+++ new/toposort-1.7/toposort.egg-info/SOURCES.txt      1970-01-01 
01:00:00.000000000 +0100
@@ -1,14 +0,0 @@
-CHANGES.txt
-LICENSE.txt
-MANIFEST.in
-NOTICE
-README.txt
-setup.cfg
-setup.py
-toposort.py
-test/__init__.py
-test/test_toposort.py
-toposort.egg-info/PKG-INFO
-toposort.egg-info/SOURCES.txt
-toposort.egg-info/dependency_links.txt
-toposort.egg-info/top_level.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/toposort.egg-info/dependency_links.txt 
new/toposort-1.7/toposort.egg-info/dependency_links.txt
--- old/toposort-1.5/toposort.egg-info/dependency_links.txt     2016-10-25 
03:05:02.000000000 +0200
+++ new/toposort-1.7/toposort.egg-info/dependency_links.txt     1970-01-01 
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/toposort.egg-info/top_level.txt 
new/toposort-1.7/toposort.egg-info/top_level.txt
--- old/toposort-1.5/toposort.egg-info/top_level.txt    2016-10-25 
03:05:02.000000000 +0200
+++ new/toposort-1.7/toposort.egg-info/top_level.txt    1970-01-01 
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-toposort
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/toposort-1.5/toposort.py new/toposort-1.7/toposort.py
--- old/toposort-1.5/toposort.py        2016-10-25 02:38:15.000000000 +0200
+++ new/toposort-1.7/toposort.py        1970-01-01 01:00:00.000000000 +0100
@@ -1,92 +0,0 @@
-#######################################################################
-# Implements a topological sort algorithm.
-#
-# Copyright 2014 True Blade Systems, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Notes:
-#  Based on http://code.activestate.com/recipes/578272-topological-sort
-#   with these major changes:
-#    Added unittests.
-#    Deleted doctests (maybe not the best idea in the world, but it cleans
-#     up the docstring).
-#    Moved functools import to the top of the file.
-#    Changed assert to a ValueError.
-#    Changed iter[items|keys] to [items|keys], for python 3
-#     compatibility. I don't think it matters for python 2 these are
-#     now lists instead of iterables.
-#    Copy the input so as to leave it unmodified.
-#    Renamed function from toposort2 to toposort.
-#    Handle empty input.
-#    Switch tests to use set literals.
-#
-########################################################################
-
-from functools import reduce as _reduce
-
-__all__ = ['toposort', 'toposort_flatten', 'CircularDependencyError']
-
-
-class CircularDependencyError(ValueError):
-    def __init__(self, data):
-        # Sort the data just to make the output consistent, for use in
-        #  error messages.  That's convenient for doctests.
-        s = 'Circular dependencies exist among these items: {{{}}}'.format(', 
'.join('{!r}:{!r}'.format(key, value) for key, value in sorted(data.items())))
-        super(CircularDependencyError, self).__init__(s)
-        self.data = data
-
-
-def toposort(data):
-    """Dependencies are expressed as a dictionary whose keys are items
-and whose values are a set of dependent items. Output is a list of
-sets in topological order. The first set consists of items with no
-dependences, each subsequent set consists of items that depend upon
-items in the preceeding sets.
-"""
-
-    # Special case empty input.
-    if len(data) == 0:
-        return
-
-    # Copy the input so as to leave it unmodified.
-    data = data.copy()
-
-    # Ignore self dependencies.
-    for k, v in data.items():
-        v.discard(k)
-    # Find all items that don't depend on anything.
-    extra_items_in_deps = _reduce(set.union, data.values()) - set(data.keys())
-    # Add empty dependences where needed.
-    data.update({item:set() for item in extra_items_in_deps})
-    while True:
-        ordered = set(item for item, dep in data.items() if len(dep) == 0)
-        if not ordered:
-            break
-        yield ordered
-        data = {item: (dep - ordered)
-                for item, dep in data.items()
-                    if item not in ordered}
-    if len(data) != 0:
-        raise CircularDependencyError(data)
-
-
-def toposort_flatten(data, sort=True):
-    """Returns a single list of dependencies. For any set returned by
-toposort(), those items are sorted and appended to the result (just to
-make the results deterministic)."""
-
-    result = []
-    for d in toposort(data):
-        result.extend((sorted if sort else list)(d))
-    return result

Reply via email to