[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