"""distutils.command.x Implements the Distutils 'x' command. """ # created 2000/mm/dd, John Doe __revision__ = "$Id$" from distutils.core import Command class DependencyFailure(Exception): pass class VersionTooOld(DependencyFailure): pass class VersionNotKnown(DependencyFailure): pass class checkdep (Command): # Brief (40-50 characters) description of the command description = "check package dependencies" # List of option tuples: long name, short name (None if no short # name), and help string. # Later on, we might have auto-fetch and the like here. Feel free. user_options = [] def initialize_options (self): self.debug = None # initialize_options() def finalize_options (self): pass # finalize_options() def run (self): from distutils.version import LooseVersion failed = [] for pkg, ver in self.distribution.metadata.requires: if pkg == 'python': if ver is not None: # Special case the 'python' package import sys thisver = LooseVersion('%d.%d.%d'%sys.version_info[:3]) if thisver < ver: failed.append(((pkg,ver), VersionTooOld(thisver))) continue # Kinda hacky - we should do more here try: mod = __import__(pkg) except Exception, e: failed.append(((pkg,ver), e)) continue if ver is not None: if hasattr(mod, '__version__'): thisver = LooseVersion(mod.__version__) if thisver < ver: failed.append(((pkg,ver), VersionTooOld(thisver))) else: failed.append(((pkg,ver), VersionNotKnown())) if failed: raise DependencyFailure, failed # run() # class x