Mercurial > hg > buttercup
view buttercup/buttercup.py @ 49:e3770a2530ff
STUB: buttercup/buttercup.py
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Sat, 25 Jan 2014 18:42:50 -0800 |
parents | c99fbe84c3c2 |
children | 0c66ca55e336 |
line wrap: on
line source
""" the flower blooming to k0s.org """ import os import source from subprocess import check_call as call __all__ = ['Buttercup', 'SetupError'] class SetupError(Exception): """error during setup""" def __init__(self, message, directory, uri=None): self.directory = os.path.abspath(directory) self.uri = uri _message = "Error setting up '{}'".format(directory) if uri: _message += " (from {})".format(uri) _message += "\n {}".format(message) Exception.__init__(self, _message) class Buttercup(object): # k0sware software # TODO: make this a `package` (or more likely `python-package`) # subtype HG='http://k0s.org/hg' PACKAGES=['bitsyapps', 'bitsyauth', 'bitsyblog', 'bitsytweet', 'buttercup', 'clwapp', 'commentator', 'contenttransformer', 'cropresize', 'decoupage', 'emaildispatcher', 'genshi_view', 'hgpaste', 'lxmlmiddleware', 'martINI', 'montage', 'pyloader', 'redirector', 'relocator', 'svgsitemap', 'uploader', 'webob_view', 'wordstream', 'wsgintegrate'] def __init__(self, srcdir): self.srcdir = srcdir # TODO: this should all go in a `pip` requirements file # base webapps and dependencies self.sources = {'hg': ['%s/%s' % (self.HG, package) for package in self.PACKAGES ]} self.sources['git'] = ['git://github.com/mozilla/toolbox.git'] def install(self): """install all software needed for this flower""" source_objs = source.sources(self.sources, srcdir=self.srcdir) for source_obj in source_objs: source_obj() # clone/update the software def setup(self, source_objs=None): """setup python packages for development""" if source_objs is None: source_objs = source.sources(self.sources, srcdir=self.srcdir) for source_obj in source_objs: directory = source_obj.directory() if os.path.exists(os.path.join(directory, 'setup.py')): try: call(['python', 'setup.py', 'develop'], cwd=source_obj.directory()) except Exception as e: raise SetupError(str(e), directory, source_obj.uri) def deploy(self): self.install() self.setup() __call__ = deploy