def __call__(self, data: pd.DataFrame, fmt: str = "json"): if self._provider is None: self._provider = Provider() content, resource_id = self._serialize(data, fmt) if resource_id not in self._resources: self._resources[resource_id] = self._provider.create( content=content, extension=fmt, headers={"Access-Control-Allow-Origin": "*"}, ) return {"url": self._resources[resource_id].url}
def __call__(self, data: pd.DataFrame, fmt: str = "json", port: Optional[int] = None) -> Dict[str, str]: if self._provider is None: self._provider = Provider().start(port=port) if port is not None and port != self._provider.port: self._provider.stop().start(port=port) content, resource_id = self._serialize(data, fmt) if resource_id not in self._resources: self._resources[resource_id] = self._provider.create( content=content, extension=fmt, headers={"Access-Control-Allow-Origin": "*"}, ) return {"url": self._resources[resource_id].url}
class AltairDataServer(object): """Backend server for Altair datasets.""" def __init__(self): self._provider: Optional[Provider] = None # We need to keep references to served resources, because the background # server uses weakrefs. self._resources = {} def reset(self): if self._provider is not None: self._provider.stop() self._resources = {} @staticmethod def _serialize(data: pd.DataFrame, fmt: str) -> Tuple[str, str]: """Serialize data to the given format.""" if fmt == "json": content = _data_to_json_string(data) elif fmt == "csv": content = _data_to_csv_string(data) else: raise ValueError("Unrecognized format: '{0}'".format(fmt)) return content, _compute_data_hash(content) def __call__(self, data: pd.DataFrame, fmt: str = "json"): if self._provider is None: self._provider = Provider() content, resource_id = self._serialize(data, fmt) if resource_id not in self._resources: self._resources[resource_id] = self._provider.create( content=content, extension=fmt, headers={"Access-Control-Allow-Origin": "*"}, ) return {"url": self._resources[resource_id].url}