Beispiel #1
0
def test_session():
	sess = Session()
	assert isinstance(sess._d, dict)
	assert sess._start is None
	sess.start()
	assert sess._start is not None
	took = sess.stop()
	assert sess._start is None
	assert isinstance(took, float)
Beispiel #2
0
def test_stop_error():
	sess = Session()
	sess.start()
	sess.stop()
	sess._done = False
	with raises(SessionError, match = 'session not started'):
		sess.stop()
Beispiel #3
0
 def __init__(self, profile, name, config=None):
     self.profile = Profile(profile, config)
     if name == 'default':
         name = self.profile.config.get('default', 'env')
     self._name = name
     self._profName = self.profile.name()
     self._logtag = ''
     self._run = {}
     self.settings = Settings()
     self.session = Session()
     self._load()
     self._check()
Beispiel #4
0
class Env(object):
    _name = None
    _cfgfile = None
    _profile = None
    _profName = None
    _logtag = None
    _run = None
    _lockfn = None
    _err = None
    profile = None
    assets = None
    settings = None
    session = None
    build = None

    def __init__(self, profile, name, config=None):
        self.profile = Profile(profile, config)
        if name == 'default':
            name = self.profile.config.get('default', 'env')
        self._name = name
        self._profName = self.profile.name()
        self._logtag = ''
        self._run = {}
        self.settings = Settings()
        self.session = Session()
        self._load()
        self._check()

    def __str__(self):
        return "%s/%s" % (self._profName, self._name)

    def _load(self, fn=None, pdir=None):
        self.debug('env load')
        # env self.config.ini
        opt = "env.%s" % self._name
        if fn is None:
            fn = self.profile.config.get(self._profName, opt, fallback=None)
            if fn is None:
                raise self.error("'%s/%s' env not found" %
                                 (self._profName, self._name))
        fn = path.normpath(fn.strip())
        if fn == '.':
            raise self.error('config file not set')
        self._cfgfile = fn
        # profile dir
        if pdir is None:
            pdir = self.profile.config.get(self._profName, 'dir')
        pdir = path.normpath(pdir.strip())
        if not path.exists(pdir):
            raise self.error("%s directory not found" % pdir)
        if not path.isdir(pdir):
            raise self.error("%s is not a directory" % pdir)
        # env assets
        _rootdir = path.realpath(pdir)
        self.assets = asset.Manager(_rootdir)
        self.debug("assets %s" % _rootdir)
        # env builddir
        _builddir = path.join(path.dirname(_rootdir), 'build', self._profName,
                              self._name)
        self.build = build.Manager(_builddir)
        self.debug("builddir %s" % self.build.rootdir())

    def _check(self):
        # check env dist setting
        if self.dist() not in dist.SUPPORTED.keys():
            raise self.error("unsupported dist %s" % self.dist())

    def configure(self, cfgfile=None):
        self.debug('session start')
        self.session.start()
        plugins.configure(self, cfgfile=cfgfile)

    def name(self):
        return self._name

    def cfgfile(self):
        return self._cfgfile

    def _log(self, func, msg):
        func("%s/%s%s %s" % (self._profName, self._name, self._logtag, msg))

    def log(self, msg):
        self._log(log.msg, msg)

    def info(self, msg):
        self._log(log.info, msg)

    def warn(self, msg):
        self._log(log.warn, msg)

    def debug(self, msg):
        tag = "%s/%s%s" % (self._profName, self._name, self._logtag)
        log.debug("%s" % msg, depth=4, tag=tag)

    def error(self, msg):
        self._err = EnvError(msg)
        self._log(log.error, msg)
        return self._err

    def getError(self):
        return self._err

    def start(self, action, msg=''):
        if self._run.get(action, None) is not None:
            raise self.error("%s action already started" % action)
        prev = self._logtag
        self._logtag = " %s" % action
        sep = ''
        if msg != '':
            sep = ' '
        self.info("start%s%s" % (sep, msg))
        self._run[action] = {'tag.prev': prev, 'start': time()}

    def end(self, action):
        if self._run.get(action, None) is None:
            raise self.error("%s action was not started" % action)
        self._run[action]['end'] = time()
        self.info("end (%fs)" %
                  (self._run[action]['end'] - self._run[action]['start']))
        self._logtag = self._run[action]['tag.prev']

    def report(self, action, startTime=None):
        actno = 0
        noend = []
        for n, d in self._run.items():
            actno += 1
            if d.get('end', None) is None:
                noend.append(n)
        took = ''
        if startTime is not None:
            took = " in %f seconds" % (time() - startTime)
        self.log("%s %d/%d actions%s" % (action,
                                         (actno - len(noend)), actno, took))
        if len(noend) > 0:
            raise self.error("not finished action(s): %s" % ','.join(noend))

    def plugins(self, action, revert=False):
        for p in self.settings.plugins(revert=revert):
            yield getPlugin(p, action)

    def dist(self):
        return self.settings.get('sadm', 'env.dist', fallback='debian')

    @contextmanager
    def lock(self):
        try:
            yield _lock(self)
        finally:
            _unlock(self)
Beispiel #5
0
def test_stopped_error():
	sess = Session()
	sess.start()
	sess.stop()
	with raises(SessionError, match = 'session stopped'):
		sess.set('testing', 'stopped')
Beispiel #6
0
def test_dump():
	sess = Session()
	sess.start()
	fh = StringIO()
	sess.dump(fh, indent = None)
	fh.seek(0, 0)
	assert fh.read() == '{}'
	fh.truncate()
	fh.seek(0, 0)
	sess.set('opt1', 'val1')
	sess.set('opt2', 'val2')
	sess.dump(fh, indent = None)
	fh.seek(0, 0)
	assert fh.read() == '{"opt1": "val1", "opt2": "val2"}'
	sess.stop()
Beispiel #7
0
def test_set_get_error():
	sess = Session()
	sess.start()
	with raises(SessionError, match = 'test option not set'):
		assert sess.get('test') == 'testing'
	sess.set('test', 'testing')
	with raises(SessionError, match = 'test option already set'):
		sess.set('test', 'testing')
	sess.stop()
Beispiel #8
0
def test_get_default():
	sess = Session()
	sess.start()
	assert sess.get('test', 'testing_default') == 'testing_default'
	sess.stop()
Beispiel #9
0
def test_set_get():
	sess = Session()
	sess.start()
	sess.set('test', 'testing')
	assert sess.get('test') == 'testing'
	sess.stop()
Beispiel #10
0
def test_start_error():
	sess = Session()
	sess.start()
	with raises(SessionError, match = 'session already started'):
		sess.start()