Source code for lightmlboard.options_helpers
"""
Defines helpers used in different places of the module.
:githublink:`%|py|5`
"""
import importlib
import logging
import os
import sys
import pandas
[docs]def read_options(config):
"""
Reads configuration from a file or a dictionary.
:githublink:`%|py|15`
"""
config_options = {}
if config is not None:
if isinstance(config, dict):
config_options.update(config)
elif isinstance(config, str) and os.path.exists(config):
app_log = logging.getLogger("tornado.application")
app_log.info("[LightMLBoard] read file '{0}'".format(config))
obj = None
fname = os.path.splitext(config)[0]
path, name = os.path.split(fname)
if path:
sys.path.append(path)
mod = importlib.import_module(name)
del sys.path[-1]
else:
mod = importlib.import_module(name)
for k, v in mod.__dict__.items():
if isinstance(v, pandas.DataFrame.__class__):
obj = v
break
if obj is None:
raise ValueError(
"Unable to read configuration '{0}'.".format(config))
for k, v in obj.__dict__.items():
if not k.startswith('_'):
config_options[k] = v
else:
raise ValueError(
"Unable to interpret config\ncwd: '{0}'\n{1}".format(os.getcwd(), config))
return config_options
[docs]def read_users(filename):
"""
Reads users definition.
:githublink:`%|py|51`
"""
df = pandas.read_csv(filename)
cols = list(sorted(df.columns))
df = df[cols]
exp = "login,mail,name,pwd,team".split(",")
has = list(df.columns)
if exp != has:
raise ValueError(
"Users should be defined in CSV file with columns: {0}, not {1}".format(exp, has))
users = {}
for i in range(0, df.shape[0]):
name, login, mail, pwd, team = (df.loc[i, 'name'], df.loc[i, 'login'],
df.loc[i, 'mail'], df.loc[i, 'pwd'], df.loc[i, 'team'])
if login in users:
raise ValueError("Duplicated user: '{0}'.".format(login))
users[login] = dict(mail=mail, pwd=pwd, team=team,
name=name, login=login)
return users