def main(host=None, port=None, debug=False, no_reaper=False, open_browser=False, name=None, **kwargs): """ Runs a local server for the D-Tale application. This local server is recommended when you have a pandas object stored in a CSV or retrievable from :class:`arctic.Arctic` data store. """ log_opts = get_log_options(kwargs) setup_logging(log_opts.get('logfile'), log_opts.get('log_level'), log_opts.get('verbose')) data_loader = check_loaders(kwargs) show(host=host, port=int(port or find_free_port()), debug=debug, subprocess=False, data_loader=data_loader, reaper_on=not no_reaper, open_browser=open_browser, name=name, **kwargs)
def main(host, port=None, debug=False, no_reaper=False, **kwargs): """ Runs a local server for the D-Tale application. This local server is recommended when you have a pandas object stored in a CSV or retrievable from :class:`arctic.Arctic` data store. """ log_opts = get_log_options(kwargs) setup_logging(log_opts.get('logfile'), log_opts.get('log_level'), log_opts.get('verbose')) # Setup arctic loader arctic_opts = get_loader_options('arctic', kwargs) if len([f for f in arctic_opts.values() if f]): def _arctic_loader(): try: from arctic import Arctic from arctic.store.versioned_item import VersionedItem except BaseException as ex: logger.exception( 'In order to use the arctic loader you must install ahl.core!' ) raise ex host = Arctic(arctic_opts['host']) lib = host.get_library(arctic_opts['library']) read_kwargs = {} start, end = map(arctic_opts.get, ['start', 'end']) if start and end: read_kwargs['chunk_range'] = pd.date_range(start, end) data = lib.read(arctic_opts['node'], **read_kwargs) if isinstance(data, VersionedItem): data = data.data return data data_loader = _arctic_loader # Setup csv loader csv_opts = get_loader_options('csv', kwargs) if len([f for f in csv_opts.values() if f]): def _csv_loader(): csv_arg_parsers = { # TODO: add additional arg parsers 'parse_dates': lambda v: v.split(',') if v else None } kwargs = { k: csv_arg_parsers.get(k, lambda v: v)(v) for k, v in csv_opts.items() if k != 'path' } return pd.read_csv(csv_opts['path'], **kwargs) data_loader = _csv_loader show(host=host, port=int(port or find_free_port()), debug=debug, subprocess=False, data_loader=data_loader, reaper_on=not no_reaper, **kwargs)
def test_find_free_port(): from dtale.app import find_free_port with ExitStack() as stack: mock_socket = stack.enter_context(mock.patch("socket.socket", mock.Mock())) assert find_free_port() == 40000 mock_socket.assert_called_once() mock_socket.return_value.connect_ex.assert_called_once() class MockSocket(object): def connect_ex(self, addr): (host, port) = addr if port == 40000: return 0 return 1 def close(self): pass with ExitStack() as stack: stack.enter_context( mock.patch("socket.socket", mock.Mock(return_value=MockSocket())) ) assert find_free_port() == 40001 class MockSocket2(object): def connect_ex(self, _addr): return 0 def close(self): pass with ExitStack() as stack: stack.enter_context( mock.patch("socket.socket", mock.Mock(return_value=MockSocket2())) ) with pytest.raises(IOError) as excinfo: find_free_port() assert ( "D-Tale could not find an open port from 40000 to 49000, please increase your range by altering " "the environment variables DTALE_MIN_PORT & DTALE_MAX_PORT." ) in str(excinfo)
def main(host=None, port=None, debug=None, no_reaper=None, open_browser=False, name=None, no_cell_edits=None, hide_shutdown=None, github_fork=None, app_root=None, hide_drop_rows=None, **kwargs): """ Runs a local server for the D-Tale application. This local server is recommended when you have a pandas object stored in a CSV or retrievable from :class:`arctic.Arctic` data store. """ log_opts = get_log_options(kwargs) setup_logging(log_opts.get("logfile"), log_opts.get("log_level"), log_opts.get("verbose")) data_loader = check_loaders(kwargs) # in order to handle the hierarchy of inputs if "--no-cell-edits" is not specified # then we'll update it to None allow_cell_edits = False if no_cell_edits is not None else None kwargs["show_columns"] = (kwargs["show_columns"].split(",") if kwargs.get("show_columns") else None) kwargs["hide_columns"] = (kwargs["hide_columns"].split(",") if kwargs.get("hide_columns") else None) kwargs["sort"] = ([ tuple(sort.split("|")) for sort in kwargs["sort"].split(",") ] if kwargs.get("sort") else None) kwargs["locked"] = kwargs["locked"].split(",") if kwargs.get( "locked") else None show(host=host, port=int(port or find_free_port()), debug=debug, subprocess=False, data_loader=data_loader, reaper_on=not no_reaper, open_browser=open_browser, name=name, allow_cell_edits=allow_cell_edits, hide_shutdown=hide_shutdown, github_fork=github_fork, app_root=app_root, hide_drop_rows=hide_drop_rows, **kwargs)
def test_find_free_port(): from dtale.app import find_free_port assert find_free_port() is not None