# HG changeset patch # User Jeff Hammel # Date 1358982757 28800 # Node ID a8236b97abd3e16bed1ba3ef8e4f1a96cefefc05 # Parent c588375a7ce4ef1e98271e22794c7cff50f8eee2 separate methods for gathering package information diff -r c588375a7ce4 -r a8236b97abd3 paint/info.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paint/info.py Wed Jan 23 15:12:37 2013 -0800 @@ -0,0 +1,37 @@ +""" +interfaces to get information from a package +""" + +import os +import sys + +class PackageInfo(object): + """abstract base class of package info""" + def __init__(self, path): + """ + - path : path to setup.py or its directory + """ + if os.path.isdir(path): + path = os.path.join(path, 'setup.py') + assert os.path.exists(path), "'%s' not found" % path + self.setup_py = os.path.abspath(path) + + def __call__(self): + """returns dictionary of package info""" + raise NotImplementedError("abstract base class") + +class SetupOverridePackageInfo(PackageInfo): + """ + gather setup.py information by overriding the function + """ + + def __call__(self): + setuptools = sys.modules.get('setuptools') + sys.modules['setuptools'] = sys.modules[__name__] + globals()['setup'] = self._setup + try: + + return self.__dict__.pop('_info') + + def _setup(self, **kwargs): + self._info = kwargs diff -r c588375a7ce4 -r a8236b97abd3 tests/doctest.txt --- a/tests/doctest.txt Wed Jan 02 13:59:27 2013 -0800 +++ b/tests/doctest.txt Wed Jan 23 15:12:37 2013 -0800 @@ -12,3 +12,8 @@ >>> dependencies == {'mozharness': 'http://hg.mozilla.org/build/mozharness/archive/tip.tar.gz#egg=mozharness', 'talos': 'http://hg.mozilla.org/build/talos/archive/tip.tar.gz#egg=talos'} True >>> jetperf._cleanup() + +Test different ways of getting package information. First we'll use +an interface that overrides ``setuptools.setup``:: + + >>> import paint.info