def fromEnvPath(path): if not os.path.isdir(path): return Fail( InvalidOptionError("Specified path '%s' does not exist." % path)) envPath = path name = os.path.basename(envPath) envVars = Try.attempt(readDotEnv, os.path.join(envPath, ENVFILE)) if envVars.isFail(): return envVars envVars = envVars.getOK() reserved = [ 'SUBENV_NAME', 'SUBENV_LASTAPPLIED', 'SUBENV_ENVPATH', 'SUBENV_SPECPATH', 'SUBENV_BASEPATH' ] vars = envVars.copy() for k in vars.keys(): if k in reserved: del vars[k] lastApplied = None if 'SUBENV_LASTAPPLIED' in envVars: lastApplied = envVars['SUBENV_LASTAPPLIED'] env = SubenvSpec(envVars['SUBENV_SPECPATH'], envVars['SUBENV_BASEPATH'], envVars['SUBENV_NAME'], vars, lastApplied) env.setEnvPath(envPath) return env
def readInputPath(self): if len(self.args) <= 0: return Fail( InvalidOptionError("Please specify a path to a '%s' folder." % SPECDIR)) path = os.path.abspath(os.path.normpath(self.args[0])) return OK(path)
def readInputEnv(self): env = {} envopts = self.options.define for opt in envopts: if opt.index('=') == 01: return Fail(InvalidOptionError("%s is not a valid define. Use VAR=val form." % opt)) (var, val) = ''.join(shlex.split(opt)).split('=') env[var] = val return OK(env)
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 buildConfigFromArgs(self, config={}): opts = {} boxName = self.core.getDefaultBoxString( ) if not self.options.box else self.options.box box = self.core.readBox(boxName) if box.isFail(): return box opts['box'] = box.getOK().boxstring if self.options.driver: if not self.validateDriver(self.options.driver): return Fail( InvalidOptionError("Driver %s is not valid." % self.options.driver)) opts['driver'] = self.options.driver if self.options.devroot: if not os.path.isdir(self.options.devroot): return Fail( InvalidOptionError("Devroot path %s does not exist." % self.options.devroot)) opts['devroot'] = {} if 'devroot' not in opts else opts['devroot'] opts['devroot']['path'] = self.options.devroot if self.options.devroot_mode: # XXX Fix hardcoded values. if self.options.devroot_mode not in [ 'rsync', 'sharedfolder', 'unison' ]: return Fail( InvalidOptionError("Devroot mode '%s' is not valid.")) opts['devroot'] = {} if 'devroot' not in opts else opts['devroot'] opts['devroot']['mode'] = self.options.devroot_mode config['config'] = opts return OK(config)
def fromSpecPath(path, vars={}): if not os.path.isdir(path): return Fail( InvalidEnvError("Specified path '%s' does not exist." % path)) if os.path.basename(path) == SPECDIR or not os.path.isdir( os.path.join(path, SPECDIR)): return Fail( InvalidOptionError( "Invalid path specified. Please pass a path to a folder with a %s directory." % SPECDIR)) specPath = os.path.join(path, SPECDIR) name = os.path.basename(path) return SubenvSpec(specPath, path, name, vars).scan()
def readInputName(self): if len(self.args) <= 0: return Fail( InvalidOptionError("Please specify the name of a subenv.")) name = os.path.normpath(self.args[0]) return OK(name)
def delete(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.")) return Shell.nukeDirectory(envPath)
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))