Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| import base64 | |
| from io import BytesIO | |
| from typing import TYPE_CHECKING | |
| from urllib.parse import urlencode | |
| import pandas as pd | |
| import zstandard as zstd | |
| if TYPE_CHECKING: | |
| from viewer import AxisProperties, ColorTransform | |
| COMPRESSOR = zstd.ZstdCompressor(level=22) | |
| DECOMPRESSOR = zstd.ZstdDecompressor() | |
| def encode_url( | |
| title: str, | |
| molecule_id: str, | |
| colors: ColorTransform, | |
| axis_properties: AxisProperties, | |
| data: pd.DataFrame, | |
| description: str = "", | |
| ): | |
| encode_dict = dict(title=title, molecule_id=molecule_id) | |
| encode_dict.update({**colors.model_dump(), **axis_properties.model_dump()}) | |
| csv_str = data.to_csv(float_format="%.4f", index=False) | |
| compressed = COMPRESSOR.compress(csv_str.encode()) | |
| base64_text = base64.b64encode(compressed).decode("utf8") | |
| encode_dict["data"] = base64_text | |
| if description: | |
| encode_dict["description"] = description | |
| return urlencode(encode_dict) | |
| def decode_data(base64_text) -> pd.DataFrame: | |
| decoded_bytes = base64.b64decode(base64_text) | |
| decompressed = DECOMPRESSOR.decompress(decoded_bytes) | |
| bio = BytesIO(decompressed) | |
| data = pd.read_csv(bio) | |
| bio.close() | |
| return data | |