[Zope-dev] docs.zope.org automation

Chris Withers chris at simplistix.co.uk
Wed Aug 4 04:50:03 EDT 2010


Jens Vagelpohl wrote:
> I understand that. But it must be possible to do that programatically in
> my code. I mean, "setup.py --long-description" obviously executes Python
> code, which I may be able to execute myself in my current interpreter
> session by importing and executing stuff from setuptools.

Yeah, this is why setup.py sucks ;-)

I've just been doing some build and release tools for a customer that 
involve this sort of stuff, I resorted to:

         with nested(Replacer(),OutputCapture()) as (r,o):
             r.replace('sys.argv',['X','egg_info'])
             try:
                 sys.path.insert(0,path)
                 curdir = os.getcwd()
                 os.chdir(path)
                 # yuk, but setup.py is yuk anyway!
                 if 'setup' in sys.modules:
                     del sys.modules['setup']
                 import setup
             finally:
                 os.chdir(curdir)
                 sys.path.pop(0)

..in my tests, the del from sys.modules is to allow this to by done 
multiple times in one process.

Replacer is 
http://packages.python.org/testfixtures/mocking.html#the-context-manager

OutputCapture looks like:

class OutputCapture:

     def __enter__(self):
         self.original_stdout = sys.stdout
         self.original_stderr = sys.stderr
         self.output = sys.stdout = sys.stderr = StringIO()
         return self

     def __exit__(self,*args):
         sys.stdout = self.original_stdout
         sys.stderr = self.original_stderr

     def compare(self,expected):
         compare(expected.strip(),self.output.getvalue().strip())

 > Having to
> invoke another Python interpreter in a subshell because that's too
> complicated to do any other way is awful.

Yeah, I do resort to this for some things too ;-)

http://packages.python.org/execute/use.html

cheers,

Chris




More information about the Zope-Dev mailing list