[Checkins] SVN: z3c.dependencychecker/trunk/ - Sorted "unneeded requirements" reports and filtered out duplicates.

Reinout van Rees reinout at vanrees.org
Tue Dec 8 16:01:04 EST 2009


Log message for revision 106304:
  - Sorted "unneeded requirements" reports and filtered out duplicates.
  - Reporting separately on dependencies that should be moved from the regular
    to the test dependencies.
  

Changed:
  U   z3c.dependencychecker/trunk/CHANGES.txt
  U   z3c.dependencychecker/trunk/TODO.txt
  U   z3c.dependencychecker/trunk/src/z3c/dependencychecker/USAGE.txt
  U   z3c.dependencychecker/trunk/src/z3c/dependencychecker/dependencychecker.py
  U   z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/dependencychecker.txt
  U   z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/setup.py_in
  U   z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1/tests/test_setup.py_in
  U   z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1.egg-info/requires.txt

-=-
Modified: z3c.dependencychecker/trunk/CHANGES.txt
===================================================================
--- z3c.dependencychecker/trunk/CHANGES.txt	2009-12-08 16:39:52 UTC (rev 106303)
+++ z3c.dependencychecker/trunk/CHANGES.txt	2009-12-08 21:01:04 UTC (rev 106304)
@@ -4,9 +4,12 @@
 0.3 (unreleased)
 ----------------
 
-- Nothing changed yet.
+- Sorted "unneeded requirements" reports and filtered out duplicates.
 
+- Reporting separately on dependencies that should be moved from the regular
+  to the test dependencies.
 
+
 0.2 (2009-12-08)
 ----------------
 

Modified: z3c.dependencychecker/trunk/TODO.txt
===================================================================
--- z3c.dependencychecker/trunk/TODO.txt	2009-12-08 16:39:52 UTC (rev 106303)
+++ z3c.dependencychecker/trunk/TODO.txt	2009-12-08 21:01:04 UTC (rev 106304)
@@ -12,7 +12,4 @@
 
 - Optionally check imports inside doctests.
 
-- Optionally report separately on dependencies that should be moved from the
-  regular to the test dependencies.
 
-- Sort "missing requirements" reports and filter out duplicates.

Modified: z3c.dependencychecker/trunk/src/z3c/dependencychecker/USAGE.txt
===================================================================
--- z3c.dependencychecker/trunk/src/z3c/dependencychecker/USAGE.txt	2009-12-08 16:39:52 UTC (rev 106303)
+++ z3c.dependencychecker/trunk/src/z3c/dependencychecker/USAGE.txt	2009-12-08 21:01:04 UTC (rev 106304)
@@ -50,6 +50,10 @@
     =====================
          unneeded.req
     <BLANKLINE>
+    Requirements that should be test requirements
+    =============================================
+         needed.by.test
+    <BLANKLINE>
     Unneeded test requirements
     ==========================
          zope.testing

Modified: z3c.dependencychecker/trunk/src/z3c/dependencychecker/dependencychecker.py
===================================================================
--- z3c.dependencychecker/trunk/src/z3c/dependencychecker/dependencychecker.py	2009-12-08 16:39:52 UTC (rev 106303)
+++ z3c.dependencychecker/trunk/src/z3c/dependencychecker/dependencychecker.py	2009-12-08 21:01:04 UTC (rev 106304)
@@ -120,6 +120,7 @@
                 found = True
         if not found:
             missing.append(needed)
+    missing = sorted(set(missing))
     return missing
 
 
@@ -140,6 +141,7 @@
                 found = True
         if not found:
             unneeded.append(req)
+    unneeded = sorted(set(unneeded))
     return unneeded
 
 
@@ -233,8 +235,15 @@
 
     install_unneeded = filter_unneeded(install_imports + zcml_imports,
                                        install_required)
-    print_modules(install_unneeded, "Unneeded requirements")
+    # See if one of ours is needed by the tests
+    really_unneeded = filter_unneeded(test_imports + zcml_test_imports,
+                                      install_unneeded)
+    move_to_test = sorted(set(install_unneeded) - set(really_unneeded))
 
+    print_modules(really_unneeded, "Unneeded requirements")
+    print_modules(move_to_test,
+                  "Requirements that should be test requirements")
+
     test_unneeded = filter_unneeded(test_imports + zcml_test_imports,
                                     test_required)
     print_modules(test_unneeded, "Unneeded test requirements")

Modified: z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/dependencychecker.txt
===================================================================
--- z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/dependencychecker.txt	2009-12-08 16:39:52 UTC (rev 106303)
+++ z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/dependencychecker.txt	2009-12-08 21:01:04 UTC (rev 106304)
@@ -1,8 +1,103 @@
 """
 .. :doctest:
 
-Sample test:
+Detailed tests for dependencychecker:
 
     >>> from z3c.dependencychecker import dependencychecker
 
+
+Filtering out missing requirements
+----------------------------------
+
+Empty lists, no problems:
+
+    >>> dependencychecker.filter_missing([], [])
+    []
+
+Exact matching lists result in an empty list:
+
+    >>> dependencychecker.filter_missing(['a'], ['a'])
+    []
+
+A missing import is reported:
+
+    >>> imports = ['flup']
+    >>> required = []
+    >>> dependencychecker.filter_missing(imports, required)
+    ['flup']
+
+Everything is reported just once:
+
+    >>> imports = ['flup', 'flup']
+    >>> required = []
+    >>> dependencychecker.filter_missing(imports, required)
+    ['flup']
+
+And it sorted for reproducible display:
+
+    >>> imports = ['a', 'c', 'b']
+    >>> required = []
+    >>> dependencychecker.filter_missing(imports, required)
+    ['a', 'b', 'c']
+
+A requirement for some.thing is assumed to be enough for some.thing.else:
+
+    >>> imports = ['some.thing.else']
+    >>> required = ['some.thing']
+    >>> dependencychecker.filter_missing(imports, required)
+    []
+
+But a requirement that is more specific than the import fails:
+
+    >>> imports = ['some.thing']
+    >>> required = ['some.thing.else']
+    >>> dependencychecker.filter_missing(imports, required)
+    ['some.thing']
+
+An oft-occurring example is a an import like ``from zope import interface``,
+and a requirement for ``zope.interface``.  zope is picked up by the
+importchecker mechanism (not zope.interface!), so we get the following problem:
+
+    >>> imports = ['zope']
+    >>> required = ['zope.interface']
+    >>> dependencychecker.filter_missing(imports, required)
+    ['zope']
+
+
+Filter out unneeded requirements
+--------------------------------
+
+Empty lists, no problems:
+
+    >>> dependencychecker.filter_unneeded([], [])
+    []
+
+Exact matches are fine:
+
+    >>> imports = ['zope.interface']
+    >>> required = ['zope.interface']
+    >>> dependencychecker.filter_unneeded(imports, required)
+    []
+
+Too-specific requirements are reported:
+
+    >>> imports = ['zope']
+    >>> required = ['zope.interface']
+    >>> dependencychecker.filter_unneeded(imports, required)
+    ['zope.interface']
+
+There are no duplicates in the output:
+
+    >>> imports = []
+    >>> required = ['a', 'a']
+    >>> dependencychecker.filter_unneeded(imports, required)
+    ['a']
+
+And the output is sorted:
+
+    >>> imports = []
+    >>> required = ['a', 'c', 'b']
+    >>> dependencychecker.filter_unneeded(imports, required)
+    ['a', 'b', 'c']
+
 """

Modified: z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/setup.py_in
===================================================================
--- z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/setup.py_in	2009-12-08 16:39:52 UTC (rev 106303)
+++ z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/setup.py_in	2009-12-08 21:01:04 UTC (rev 106304)
@@ -21,6 +21,7 @@
           'setuptools',
           'zest.releaser',
           'unneeded.req',
+          'needed.by.test',
           ],
       extras_require = {
           'test': [

Modified: z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1/tests/test_setup.py_in
===================================================================
--- z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1/tests/test_setup.py_in	2009-12-08 16:39:52 UTC (rev 106303)
+++ z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1/tests/test_setup.py_in	2009-12-08 21:01:04 UTC (rev 106304)
@@ -1,10 +1,14 @@
-"""Using our test dependency and also using one that's missing"""
+"Testing test requirements"""
 
 # This one's OK:
 import z3c.testsetup
 # This one's missing:
 import reinout.hurray
+# This one us a global requirement, but should be a test requirement.
+import needed.by.test
 
 
+# Using them here to prevent them from being required 
 z3c.testsetup.something()
 reinout.hurray.hip_hip()
+needed.by.test

Modified: z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1.egg-info/requires.txt
===================================================================
--- z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1.egg-info/requires.txt	2009-12-08 16:39:52 UTC (rev 106303)
+++ z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1.egg-info/requires.txt	2009-12-08 21:01:04 UTC (rev 106304)
@@ -1,6 +1,7 @@
 setuptools
 zest.releaser
 unneeded.req
+needed.by.test
 
 [test]
 z3c.testsetup>=0.3



More information about the checkins mailing list