Mercurial > hg > buttercup
view buttercup/buttercup.py @ 52:b717de8b384f
py3
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Tue, 03 Nov 2020 07:51:52 -0800 |
parents | 0c66ca55e336 |
children | af4155b0a260 |
line wrap: on
line source
""" the flower blooming to k0s.org """ import os from subprocess import check_call as call from . import source __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""" 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', 'toolbox', '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'] = [] 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