[Checkins] SVN: z3c.dependencychecker/trunk/ Better dependency reporing for 'from zope import interface'-style imports

Reinout van Rees reinout at vanrees.org
Thu Dec 10 07:07:09 EST 2009


Log message for revision 106380:
  Better dependency reporing for 'from zope import interface'-style imports

Changed:
  U   z3c.dependencychecker/trunk/CHANGES.txt
  U   z3c.dependencychecker/trunk/src/z3c/dependencychecker/USAGE.txt
  U   z3c.dependencychecker/trunk/src/z3c/dependencychecker/importchecker.py
  U   z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1/fromimports.py_in

-=-
Modified: z3c.dependencychecker/trunk/CHANGES.txt
===================================================================
--- z3c.dependencychecker/trunk/CHANGES.txt	2009-12-10 11:53:32 UTC (rev 106379)
+++ z3c.dependencychecker/trunk/CHANGES.txt	2009-12-10 12:07:09 UTC (rev 106380)
@@ -4,7 +4,9 @@
 0.4 (unreleased)
 ----------------
 
-- Nothing changed yet.
+- Supporting "from zope import interface"-style imports where you really want
+  to be told you're missing an "zope.interface" dependency instead of just
+  "zope" (which is just a namespace package).
 
 
 0.3 (2009-12-08)

Modified: z3c.dependencychecker/trunk/src/z3c/dependencychecker/USAGE.txt
===================================================================
--- z3c.dependencychecker/trunk/src/z3c/dependencychecker/USAGE.txt	2009-12-10 11:53:32 UTC (rev 106379)
+++ z3c.dependencychecker/trunk/src/z3c/dependencychecker/USAGE.txt	2009-12-10 12:07:09 UTC (rev 106380)
@@ -45,7 +45,8 @@
     Missing requirements
     ====================
          missing.req
-         zope
+         something.origname
+         zope.interface
     <BLANKLINE>
     Missing test requirements
     =========================

Modified: z3c.dependencychecker/trunk/src/z3c/dependencychecker/importchecker.py
===================================================================
--- z3c.dependencychecker/trunk/src/z3c/dependencychecker/importchecker.py	2009-12-10 11:53:32 UTC (rev 106379)
+++ z3c.dependencychecker/trunk/src/z3c/dependencychecker/importchecker.py	2009-12-10 12:07:09 UTC (rev 106380)
@@ -86,7 +86,8 @@
                 name = as_name
             names_dict[name] = orig_name
         self._map.setdefault(module_name, {'names': names_dict,
-                                           'lineno': stmt.lineno})
+                                           'lineno': stmt.lineno,
+                                           'fromimport': True})
 
     def visitImport(self, stmt):
         """Will be called for 'import foo.bar' statements
@@ -97,7 +98,8 @@
             else:
                 name = as_name
             self._map.setdefault(orig_name, {'names': {name: orig_name},
-                                             'lineno': stmt.lineno})
+                                             'lineno': stmt.lineno,
+                                             'fromimport': False})
 
     def getMap(self):
         return self._map
@@ -129,7 +131,22 @@
     def getImportedModuleNames(self):
         """Return the names of imported modules.
         """
-        return self._map.keys()
+        result = []
+        for modulename in self._map.keys():
+            if not self._map[modulename]['fromimport']:
+                # Regular import
+                result.append(modulename)
+            else:
+                # from xyz import abc, return xyz.abc to help with detecting
+                # "from zope import interface"-style imports where
+                # zope.inteface is the real module and zope just a namespace
+                # package.  This is for the dependencychecker, btw.
+                if len(self._map[modulename]['names'].values()) == 0:
+                    # from xyz import *
+                    result.append(modulename)
+                for submodule in self._map[modulename]['names'].values():
+                    result.append('.'.join([modulename, submodule]))
+        return result
 
     def getImportNames(self):
         """Return the names of imports; add dottednames as well.

Modified: z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1/fromimports.py_in
===================================================================
--- z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1/fromimports.py_in	2009-12-10 11:53:32 UTC (rev 106379)
+++ z3c.dependencychecker/trunk/src/z3c/dependencychecker/tests/sample1/src/sample1/fromimports.py_in	2009-12-10 12:07:09 UTC (rev 106380)
@@ -1,7 +1,8 @@
 """Test the from imports"""
 
 from zope import interface
+from something import origname as newname
 
-
 # Use it to prevent "unused!" warnings
-interface
\ No newline at end of file
+interface
+newname
\ No newline at end of file



More information about the checkins mailing list