Source code for dtale.cli.loaders.arctic_loader
from logging import getLogger
import pandas as pd
from dtale.app import show
from dtale.cli.clickutils import get_loader_options
logger = getLogger(__name__)
'''
IMPORTANT!!! This global variable is required for building any customized CLI loader.
When find loaders on startup it will search for any modules containing the global variable LOADER_KEY.
'''
NOW = pd.Timestamp('now').strftime('%Y%m%d')
LOADER_KEY = 'arctic'
LOADER_PROPS = [
dict(name='host', help='arctic hostname'),
dict(name='library', help='library within --arctic-host'),
dict(name='node', help='node within --arctic-library'),
dict(name='start', help='start-date of range to load if reading from ChunkStore (EX: {})'.format(NOW)),
dict(name='end', help='end-date of range to load if reading from ChunkStore (EX: {})'.format(NOW)),
]
# IMPORTANT!!! This function is required if you would like to be able to use this loader from the back-end.
[docs]def show_loader(**kwargs):
return show(data_loader=lambda: loader_func(**kwargs), **kwargs)
[docs]def loader_func(**kwargs):
try:
from arctic import Arctic
from arctic.store.versioned_item import VersionedItem
except ImportError:
raise ImportError('In order to use the arctic loader you must install arctic!')
host = Arctic(kwargs.get('host'))
lib = host.get_library(kwargs.get('library'))
read_kwargs = {}
start, end = (kwargs.get(p) for p in ['start', 'end'])
if start and end:
read_kwargs['chunk_range'] = pd.date_range(start, end)
data = lib.read(kwargs.get('node'), **read_kwargs)
if isinstance(data, VersionedItem):
data = data.data
return data
# IMPORTANT!!! This function is required for building any customized CLI loader.
[docs]def find_loader(kwargs):
"""
Arctic implementation of data loader which will return a function if any of the
`click` options based on LOADER_KEY & LOADER_PROPS have been used, otherwise return None
:param kwargs: Optional keyword arguments to be passed from `click`
:return: data loader function for arctic implementation
"""
arctic_opts = get_loader_options(LOADER_KEY, kwargs)
if len([f for f in arctic_opts.values() if f]):
def _arctic_loader():
return loader_func(**arctic_opts)
return _arctic_loader
return None