import os
from ibllib.io import params as iopar
from getpass import getpass
from pathlib import Path
from ibllib.graphic import login
_PAR_ID_STR = 'one_params'
[docs]def default():
par = {"ALYX_LOGIN": "intbrainlab",
"ALYX_PWD": "international",
"ALYX_URL": "https://openalyx.internationalbrainlab.org",
"CACHE_DIR": str(Path.home() / "Downloads" / "FlatIron"),
"HTTP_DATA_SERVER": "https://ibl.flatironinstitute.org",
"HTTP_DATA_SERVER_LOGIN": "",
"HTTP_DATA_SERVER_PWD": "",
}
return iopar.from_dict(par)
def _get_current_par(k, par_current):
cpar = getattr(par_current, k, None)
if cpar is None:
cpar = getattr(default(), k, None)
return cpar
[docs]def setup_silent():
par = iopar.read(_PAR_ID_STR, default())
if par.CACHE_DIR:
Path(par.CACHE_DIR).mkdir(parents=True, exist_ok=True)
[docs]def setup_alyx_params():
setup_silent()
par = iopar.read(_PAR_ID_STR).as_dict()
[usr, pwd] = login(title='Alyx credentials')
par['ALYX_LOGIN'] = usr
par['ALYX_PWD'] = pwd
iopar.write(_PAR_ID_STR, par)
# first get current and default parameters
[docs]def setup():
par_default = default()
par_current = iopar.read(_PAR_ID_STR, par_default)
par = iopar.as_dict(par_default)
for k in par.keys():
cpar = _get_current_par(k, par_current)
if "PWD" not in k:
par[k] = input("Param " + k + ", current value is [" + str(cpar) + "]:") or cpar
cpar = _get_current_par("ALYX_PWD", par_current)
prompt = "Enter the Alyx password for " + par["ALYX_LOGIN"] + '(leave empty to keep current):'
par["ALYX_PWD"] = getpass(prompt) or cpar
cpar = _get_current_par("HTTP_DATA_SERVER_PWD", par_current)
prompt = "Enter the FlatIron HTTP password for " + par["HTTP_DATA_SERVER_LOGIN"] +\
'(leave empty to keep current): '
par["HTTP_DATA_SERVER_PWD"] = getpass(prompt) or cpar
# default to home dir if empty dir somehow made it here
if len(par['CACHE_DIR']) == 0:
par['CACHE_DIR'] = str(Path.home() / "Downloads" / "FlatIron")
par = iopar.from_dict(par)
# create directory if needed
if par.CACHE_DIR and not os.path.isdir(par.CACHE_DIR):
os.mkdir(par.CACHE_DIR)
iopar.write(_PAR_ID_STR, par)
print('ONE Parameter file location: ' + iopar.getfile(_PAR_ID_STR))
[docs]def get(silent=False):
par = iopar.read(_PAR_ID_STR, {})
if not par and not silent:
setup()
elif not par and silent:
setup_silent()
return iopar.read(_PAR_ID_STR, default=default())