def use(self, name): envPath = os.path.normpath(os.path.join(self.envsPath, name)) if not os.path.isdir(envPath): return Fail(InvalidOptionError("Environment '%s' does not exist.")) envSpec = SubenvSpec.fromEnvPath(envPath) current = os.path.join(self.basePath, "current") return Try.attempt(makeSymlink, envSpec.envPath, current, True) \ .then(dinfo("Current substance environment now: '%s'" % envSpec.name))
def ls(self): envs = [] current = self._getCurrentEnv() for f in os.listdir(self.envsPath): path = os.path.join(self.envsPath, f) if os.path.isdir(path): env = SubenvSpec.fromEnvPath(path) if current and env.envPath == current.envPath: env.current = True envs.append(env) return OK(envs)
def _getCurrentEnv(self): try: current = readSymlink(os.path.join(self.basePath, "current")) return SubenvSpec.fromEnvPath(current) except Exception as err: return None
def init(self, path, env={}): logger.info("Initializing subenv from: %s" % path) return SubenvSpec.fromSpecPath(path, env) \ .bind(self._applyEnv)
def _loadEnvSpec(self, name): envPath = os.path.normpath(os.path.join(self.envsPath, name)) if not os.path.isdir(envPath): return Fail( InvalidOptionError("Environment '%s' does not exist." % name)) return OK(SubenvSpec.fromEnvPath(envPath))