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}