def __init__(self, installer, moduleKey): self._installer = installer self._ctx = installer.builder._ctx self._cf = CloudFoundryInstaller(self._ctx) self._moduleKey = moduleKey self._extn = '' self._modules = [] self._load_modules = self._default_load_method self._regex = None self._log = _log
class Installer(object): def __init__(self, builder): self.builder = builder self._log = _log self._installer = CloudFoundryInstaller(self.builder._ctx) def package(self, key): if key in self.builder._ctx.keys(): key = self.builder._ctx[key] self.builder._ctx['%s_INSTALL_PATH' % key] = \ self._installer.install_binary(key) self._log.info("Installed [%s] to [%s]", key, self.builder._ctx['%s_INSTALL_PATH' % key]) return self def packages(self, *keys): for key in keys: self.package(key) return self def modules(self, key): return ModuleInstaller(self, key) def config(self): return ConfigInstaller(self) def extensions(self): ctx = self.builder._ctx extn_reg = self.builder._extn_reg def process(retcode): if retcode != 0: raise RuntimeError('Extension Failed with [%s]' % retcode) for path in extn_reg._paths: process_extension(path, ctx, 'compile', process, args=[self]) ctx['EXTENSIONS'].extend(extn_reg._paths) return self def build_pack_utils(self): self._log.info("Installed build pack utils.") (self.builder.copy() .under('{BP_DIR}/lib/build_pack_utils') .into('{BUILD_DIR}/.bp/lib/build_pack_utils') .done()) return self def build_pack(self): return BuildPackManager(self) def done(self): return self.builder
class Installer(object): def __init__(self, builder): self.builder = builder self._log = _log self._installer = CloudFoundryInstaller(self.builder._ctx) def package(self, key): if key in self.builder._ctx.keys(): key = self.builder._ctx[key] self.builder._ctx['%s_INSTALL_PATH' % key] = \ self._installer.install_binary(key) self._log.info("Installed [%s] to [%s]", key, self.builder._ctx['%s_INSTALL_PATH' % key]) return self def packages(self, *keys): for key in keys: self.package(key) return self def modules(self, key): return ModuleInstaller(self, key) def config(self): return ConfigInstaller(self) def extension(self): return ExtensionInstaller(self) def extensions(self): return ExtensionInstaller(self) def build_pack_utils(self): self._log.info("Installed build pack utils.") (self.builder.copy() .under('{BP_DIR}/lib/build_pack_utils') .into('{BUILD_DIR}/.bp/lib/build_pack_utils') .done()) return self def build_pack(self): return BuildPackManager(self) def done(self): return self.builder
class Installer(object): def __init__(self, builder): self.builder = builder self._log = _log self._installer = CloudFoundryInstaller(self.builder._ctx) def package(self, key): if key in self.builder._ctx.keys(): key = self.builder._ctx[key] self.builder._ctx['%s_INSTALL_PATH' % key] = \ self._installer.install_binary(key) self._log.info("Installed [%s] to [%s]", key, self.builder._ctx['%s_INSTALL_PATH' % key]) return self def packages(self, *keys): for key in keys: self.package(key) return self def modules(self, key): return ModuleInstaller(self, key) def config(self): return ConfigInstaller(self) def extension(self): return ExtensionInstaller(self) def extensions(self): return ExtensionInstaller(self) def build_pack_utils(self): self._log.info("Installed build pack utils.") (self.builder.copy().under('{BP_DIR}/lib/build_pack_utils').into( '{BUILD_DIR}/.bp/lib/build_pack_utils').done()) return self def build_pack(self): return BuildPackManager(self) def done(self): return self.builder
class Installer(object): def __init__(self, builder): self.builder = builder self._installer = CloudFoundryInstaller(self.builder._ctx) def package(self, key): self.builder._ctx['%s_INSTALL_PATH' % key] = \ self._installer.install_binary(key) return self def packages(self, *keys): for key in keys: self.package(key) return self def config(self): return ConfigInstaller(self) def done(self): return self.builder
class ModuleInstaller(object): def __init__(self, installer, moduleKey): self._installer = installer self._ctx = installer.builder._ctx self._cf = CloudFoundryInstaller(self._ctx) self._moduleKey = moduleKey self._extn = '' self._modules = [] self._load_modules = self._default_load_method self._regex = None self._log = _log def _default_load_method(self, path): with open(path, 'rt') as f: return [line.strip() for line in f] def _regex_load_method(self, path): modules = [] with open(path, 'rt') as f: for line in f: m = self._regex.match(line.strip()) if m: modules.append(m.group(1)) return modules def filter_files_by_extension(self, extn): self._extn = extn return self def find_modules_with(self, method): self._load_modules = method return self def find_modules_with_regex(self, regex): self._regex = re.compile(regex) self._load_modules = self._regex_load_method return self def include_module(self, module): self._modules.append(module) return self def include_modules_from(self, key): self._modules.extend(self._ctx.get(key, [])) return self def from_application(self, path): fullPath = os.path.join(self._ctx['BUILD_DIR'], path) if os.path.exists(fullPath) and os.path.isdir(fullPath): for root, dirs, files in os.walk(fullPath): for f in files: if f.endswith(self._extn): self._log.debug('Loading modules from [%s]', os.path.join(root, f)) self._modules.extend( self._load_modules(os.path.join(root, f))) elif os.path.exists(fullPath) and os.path.isfile(fullPath): self._log.debug('Loading modules from [%s]', fullPath) self._modules.extend(self._load_modules(fullPath)) self._modules = list(set(self._modules)) return self def done(self): toPath = os.path.join(self._ctx['BUILD_DIR'], self._moduleKey.lower()) strip = self._ctx.get('%s_MODULES_STRIP' % self._moduleKey, False) for module in set(self._modules): try: self._ctx['MODULE_NAME'] = module url = self._ctx['%s_MODULES_PATTERN' % self._moduleKey] self._cf._install_binary_from_manifest(url, toPath, strip=strip) except Exception: self._log.warning('Module %s failed to install', module) self._log.debug('Module %s failed to install because', module, exc_info=True) finally: if 'MODULE_NAME' in self._ctx.keys(): del self._ctx['MODULE_NAME'] return self._installer
def __init__(self, builder): self.builder = builder self._log = _log self._installer = CloudFoundryInstaller(self.builder._ctx)