Пример #1
0
def test_set():

    with tempdir.tempdir(changeto=False) as td1,\
         tempdir.tempdir(changeto=False) as td2:

        s1 = settings.Settings(cfgdir=td1, writeOnExit=False)
        s2 = settings.Settings(cfgdir=td2, writeOnExit=False)

        settings.set(s1)
        with settings.writeFile('file1') as f:
            f.write('hi!')
        assert os.listdir(td1) == ['file1']
        assert os.listdir(td2) == []

        settings.set(s2)
        with settings.writeFile('file2') as f:
            f.write('hi!')
        assert os.listdir(td1) == ['file1']
        assert os.listdir(td2) == ['file2']

        settings.set(s1)
        with settings.writeFile('file3') as f:
            f.write('hi!')
        assert sorted(os.listdir(td1)) == ['file1', 'file3']
        assert os.listdir(td2) == ['file2']

        settings.set(s2)
        with settings.writeFile('file4') as f:
            f.write('hi!')
        assert sorted(os.listdir(td1)) == ['file1', 'file3']
        assert sorted(os.listdir(td2)) == ['file2', 'file4']
Пример #2
0
def test_initialise():

    # Assuming that initialise()
    # has not yet been called
    assert settings.read('nothing') is None
    assert settings.read('nothing', 'default') == 'default'
    settings.write('nothing', 'nothing')
    settings.delete('nothing')
    assert settings.readFile('nothing') is None
    settings.writeFile('nothing', 'nothing')
    settings.deleteFile('nothing')
    assert settings.filePath() is None
    assert settings.readAll() == {}
    assert settings.listFiles() == []
    settings.clear()

    with tests.testdir() as testdir:

        settings.initialise(cfgid='test', cfgdir=testdir, writeOnExit=False)

        assert settings.settings.configID == 'test'
        assert settings.settings.configDir == testdir

        settings.write('setting', 'value')

        assert settings.read('setting') == 'value'
        assert settings.read('nothing') is None
Пример #3
0
def installColourMap(key):
    """Attempts to install a previously registered colourmap into the
    ``[settingsbase]/colourmaps/`` directory.
    """

    # keyerror if not registered
    cmap = _cmaps[key]

    # TODO I think the colors attribute is only
    #      available on ListedColormap instances,
    #      so if you ever start using different
    #      mpl types, you might need to revisit
    #      this.
    data = cmap.mapObj.colors

    destFile = op.join('colourmaps', '{}.cmap'.format(key))

    log.debug('Installing colour map {} to {}'.format(key, destFile))

    # Numpy under python 3 will break if
    # we give it a file opened with mode='wt'.
    with fslsettings.writeFile(destFile, mode='b') as f:
        np.savetxt(f, data, '%0.6f')

    # Update user-added settings
    cmapNames = fslsettings.read('fsleyes.colourmaps', OrderedDict())
    cmapNames[key] = cmap.name

    fslsettings.write('fsleyes.colourmaps', cmapNames)

    cmap.installed = True
Пример #4
0
def _serverloop(callback, ev=None):
    """Starts a TCP server which runs forever.

    The server port number is written to the FSLeyes settings directoy in a
    file called ``cliserver.txt`` (see :mod:`fsl.utils.settings`).  Then,
    every line of text received on the socket is passed to the ``callback``
    function.

    :arg callback: Callback function to which every line that is received
                   is passed.
    :arg ev:       Optional ``threading.Event`` which can be used to signal
                   the server thread to stop.
    """

    if ev is None:
        ev = threading.Event()

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost', 0))
    sock.listen(1)
    sock.settimeout(1)
    port = sock.getsockname()[1]

    with fslsettings.writeFile('cliserver.txt') as f:
        f.write('{}'.format(port))

    atexit.register(fslsettings.deleteFile, 'cliserver.txt')

    log.debug('CLI server running on port %i', port)

    while True:

        try:
            conn, addr = sock.accept()
        except socket.timeout:
            if ev.isSet(): break
            else: continue

        log.debug('Connection from %s', addr)

        with conn:

            line = conn.makefile().readline().strip()

            log.debug('Received %s ...', line[:50])

            try:
                callback(line)
            except Exception as e:
                log.warning('Callback function raised error: %s',
                            e,
                            exc_info=True)
Пример #5
0
def test_use():

    with tempdir.tempdir(changeto=False) as td1,\
         tempdir.tempdir(changeto=False) as td2:

        s1 = settings.Settings(cfgdir=td1, writeOnExit=False)
        s2 = settings.Settings(cfgdir=td2, writeOnExit=False)

        with settings.use(s1):
            with settings.writeFile('file1') as f:
                f.write('hi!')

        assert os.listdir(td1) == ['file1']
        assert os.listdir(td2) == []

        with settings.use(s2):
            with settings.writeFile('file2') as f:
                f.write('hi!')

        settings.set(s1)
        with settings.writeFile('file3') as f:
            f.write('hi!')

        with settings.use(s2):
            with settings.writeFile('file4') as f:
                f.write('hi!')

        assert sorted(os.listdir(td1)) == ['file1', 'file3']
        assert sorted(os.listdir(td2)) == ['file2', 'file4']

        # should go back to s1
        with settings.writeFile('file5') as f:
            f.write('hi!')

        assert sorted(os.listdir(td1)) == ['file1', 'file3', 'file5']
        assert sorted(os.listdir(td2)) == ['file2', 'file4']

        try:
            with settings.use(s2):
                raise Exception('hur')
        except Exception:
            pass

        # should go back to s1
        with settings.writeFile('file6') as f:
            f.write('hi!')

        assert sorted(os.listdir(td1)) == ['file1', 'file3', 'file5', 'file6']
        assert sorted(os.listdir(td2)) == ['file2', 'file4']
Пример #6
0
def installPlugin(filename):
    """Copies the given Python file into the FSLeyes settings directory,
    within a sub-directory called ``plugins``. After the file has been
    copied, the path to the copy is passed to :func:`loadPlugin`.
    """

    basename = op.splitext(op.basename(filename))[0]
    dest = 'plugins/{}.py'.format(basename)

    log.debug('Installing plugin %s', filename)

    with open(filename, 'rt')        as inf, \
         fslsettings.writeFile(dest) as outf:
        outf.write(inf.read())

    dest = fslsettings.filePath(dest)

    try:
        loadPlugin(dest)
    except Exception:
        fslsettings.deleteFile(dest)
        raise