Skip to content

Commit

Permalink
Refactor and clean-up type_util module (streamlit#9022)
Browse files Browse the repository at this point in the history
## Describe your changes

The `type_util` module contains various, mostly unrelated functionality.
This PR moves many utility functions to new or better utility modules.
It contains no logical changes; it only moves existing methods around.

## Testing Plan

- No logical changes -> no new tests required.

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
  • Loading branch information
lukasmasuch authored Jul 3, 2024
1 parent b013f6d commit 3aad5e2
Show file tree
Hide file tree
Showing 53 changed files with 2,228 additions and 2,112 deletions.
2 changes: 1 addition & 1 deletion e2e_playwright/shared/data_mocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import pandas as pd
import pyarrow as pa

from streamlit.type_util import DataFormat
from streamlit.dataframe_util import DataFormat

np.random.seed(0)
random.seed(0)
Expand Down
2 changes: 1 addition & 1 deletion e2e_playwright/st_data_editor_input_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import streamlit as st
from shared.data_mocks import SHARED_TEST_CASES, TestCaseMetadata
from streamlit.type_util import DataFormat
from streamlit.dataframe_util import DataFormat

np.random.seed(0)
random.seed(0)
Expand Down
27 changes: 16 additions & 11 deletions lib/streamlit/components/v1/component_arrow.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

from typing import TYPE_CHECKING, Any

from streamlit import type_util
from streamlit import dataframe_util, type_util
from streamlit.elements.lib import pandas_styler_utils

if TYPE_CHECKING:
Expand All @@ -29,6 +29,11 @@
from streamlit.proto.Components_pb2 import ArrowTable as ArrowTableProto


def _maybe_tuple_to_list(item: Any) -> Any:
"""Convert a tuple to a list. Leave as is if it's not a tuple."""
return list(item) if isinstance(item, tuple) else item


def marshall(
proto: ArrowTableProto, data: Any, default_uuid: str | None = None
) -> None:
Expand All @@ -43,10 +48,10 @@ def marshall(
Something that is or can be converted to a dataframe.
"""
if type_util.is_pandas_styler(data):
if dataframe_util.is_pandas_styler(data):
pandas_styler_utils.marshall_styler(proto, data, default_uuid) # type: ignore

df = type_util.convert_anything_to_df(data)
df = dataframe_util.convert_anything_to_df(data)
_marshall_index(proto, df.index)
_marshall_columns(proto, df.columns)
_marshall_data(proto, df)
Expand All @@ -67,9 +72,9 @@ def _marshall_index(proto: ArrowTableProto, index: Index) -> None:
"""
import pandas as pd

index = map(type_util.maybe_tuple_to_list, index.values)
index = map(_maybe_tuple_to_list, index.values)
index_df = pd.DataFrame(index)
proto.index = type_util.data_frame_to_bytes(index_df)
proto.index = dataframe_util.data_frame_to_bytes(index_df)


def _marshall_columns(proto: ArrowTableProto, columns: Series) -> None:
Expand All @@ -87,9 +92,9 @@ def _marshall_columns(proto: ArrowTableProto, columns: Series) -> None:
"""
import pandas as pd

columns = map(type_util.maybe_tuple_to_list, columns.values)
columns = map(_maybe_tuple_to_list, columns.values)
columns_df = pd.DataFrame(columns)
proto.columns = type_util.data_frame_to_bytes(columns_df)
proto.columns = dataframe_util.data_frame_to_bytes(columns_df)


def _marshall_data(proto: ArrowTableProto, df: DataFrame) -> None:
Expand All @@ -104,7 +109,7 @@ def _marshall_data(proto: ArrowTableProto, df: DataFrame) -> None:
A dataframe to marshall.
"""
proto.data = type_util.data_frame_to_bytes(df)
proto.data = dataframe_util.data_frame_to_bytes(df)


def arrow_proto_to_dataframe(proto: ArrowTableProto) -> DataFrame:
Expand All @@ -125,9 +130,9 @@ def arrow_proto_to_dataframe(proto: ArrowTableProto) -> DataFrame:

import pandas as pd

data = type_util.bytes_to_data_frame(proto.data)
index = type_util.bytes_to_data_frame(proto.index)
columns = type_util.bytes_to_data_frame(proto.columns)
data = dataframe_util.bytes_to_data_frame(proto.data)
index = dataframe_util.bytes_to_data_frame(proto.index)
columns = dataframe_util.bytes_to_data_frame(proto.columns)

return pd.DataFrame(
data.values, index=index.values.T.tolist(), columns=columns.values.T.tolist()
Expand Down
3 changes: 2 additions & 1 deletion lib/streamlit/components/v1/custom_component.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from typing import TYPE_CHECKING, Any

from streamlit.components.types.base_custom_component import BaseCustomComponent
from streamlit.dataframe_util import is_dataframe_like
from streamlit.delta_generator import main_dg
from streamlit.elements.form import current_form_id
from streamlit.elements.lib.policies import check_cache_replay_rules
Expand All @@ -29,7 +30,7 @@
from streamlit.runtime.scriptrunner import get_script_run_ctx
from streamlit.runtime.state import NoValue, register_widget
from streamlit.runtime.state.common import compute_widget_id
from streamlit.type_util import is_bytes_like, is_dataframe_like, to_bytes
from streamlit.type_util import is_bytes_like, to_bytes

if TYPE_CHECKING:
from streamlit.delta_generator import DeltaGenerator
Expand Down
Loading

0 comments on commit 3aad5e2

Please sign in to comment.