Skip to content

Commit 5397a59

Browse files
committed
remove _repr_html_()
1 parent 53953bb commit 5397a59

File tree

4 files changed

+469
-100
lines changed

4 files changed

+469
-100
lines changed

bigframes/dataframe.py

Lines changed: 51 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -827,11 +827,58 @@ def __repr__(self) -> str:
827827
lines.append(f"[{row_count} rows x {column_count} columns]")
828828
return "\n".join(lines)
829829

830-
def _repr_html_(self) -> str:
830+
def _repr_mimebundle_(self, include=None, exclude=None):
831+
"""
832+
Custom display method for IPython/Jupyter environments.
833+
This is called by IPython's display system when the object is displayed.
834+
"""
835+
opts = bigframes.options.display
836+
837+
# Only handle widget display in anywidget mode
838+
if opts.repr_mode == "anywidget":
839+
try:
840+
from bigframes import display
841+
842+
# Process blob columns if needed
843+
self._cached()
844+
df = self.copy()
845+
if bigframes.options.display.blob_display:
846+
blob_cols = [
847+
series_name
848+
for series_name, series in df.items()
849+
if series.dtype == bigframes.dtypes.OBJ_REF_DTYPE
850+
]
851+
for col in blob_cols:
852+
df[col] = df[col].blob._get_runtime(
853+
mode="R", with_metadata=True
854+
)
855+
856+
# Create and display the widget
857+
widget = display.TableWidget(df)
858+
widget_repr = widget._repr_mimebundle_(include=include, exclude=exclude)
859+
860+
# Use deferred repr for text/plain of anywidget display.
861+
# This avoids kicking off a query when the user is just
862+
# printing the last expression in a cell.
863+
widget_repr["text/plain"] = repr(self)
864+
widget_repr["text/html"] = self._repr_html_fallback()
865+
return widget_repr
866+
867+
except (AttributeError, ValueError, ImportError):
868+
# Fallback: let IPython use _repr_html_() instead
869+
warnings.warn(
870+
"Anywidget mode is not available. "
871+
"Please `pip install anywidget traitlets` or `pip install 'bigframes[anywidget]'` to use interactive tables. "
872+
f"Falling back to static HTML. Error: {traceback.format_exc()}"
873+
)
874+
# Don't return anything - let IPython fall back to _repr_html_()
875+
pass
876+
877+
return {"text/html": self._repr_html_fallback(), "text/plain": repr(self)}
878+
879+
def _repr_html_fallback(self) -> str:
831880
"""
832-
Returns an html string primarily for use by notebooks for displaying
833-
a representation of the DataFrame. Displays 20 rows by default since
834-
many notebooks are not configured for large tables.
881+
Generates a static HTML table as a fallback representation.
835882
"""
836883
opts = bigframes.options.display
837884
max_results = opts.max_rows
@@ -912,55 +959,6 @@ def obj_ref_rt_to_html(obj_ref_rt) -> str:
912959
html_string += f"[{row_count} rows x {column_count} columns in total]"
913960
return html_string
914961

915-
def _repr_mimebundle_(self, include=None, exclude=None):
916-
"""
917-
Custom display method for IPython/Jupyter environments.
918-
This is called by IPython's display system when the object is displayed.
919-
"""
920-
opts = bigframes.options.display
921-
922-
# Only handle widget display in anywidget mode
923-
if opts.repr_mode == "anywidget":
924-
try:
925-
from bigframes import display
926-
927-
# Process blob columns if needed
928-
self._cached()
929-
df = self.copy()
930-
if bigframes.options.display.blob_display:
931-
blob_cols = [
932-
series_name
933-
for series_name, series in df.items()
934-
if series.dtype == bigframes.dtypes.OBJ_REF_DTYPE
935-
]
936-
for col in blob_cols:
937-
df[col] = df[col].blob._get_runtime(
938-
mode="R", with_metadata=True
939-
)
940-
941-
# Create and display the widget
942-
widget = display.TableWidget(df)
943-
widget_repr = widget._repr_mimebundle_(include=include, exclude=exclude)
944-
945-
# Use deferred repr for text/plain of anywidget display.
946-
# This avoids kicking off a query when the user is just
947-
# printing the last expression in a cell.
948-
widget_repr["text/plain"] = repr(self)
949-
widget_repr["text/html"] = self._repr_html_()
950-
return widget_repr
951-
952-
except (AttributeError, ValueError, ImportError):
953-
# Fallback: let IPython use _repr_html_() instead
954-
warnings.warn(
955-
"Anywidget mode is not available. "
956-
"Please `pip install anywidget traitlets` or `pip install 'bigframes[anywidget]'` to use interactive tables. "
957-
f"Falling back to static HTML. Error: {traceback.format_exc()}"
958-
)
959-
# Don't return anything - let IPython fall back to _repr_html_()
960-
pass
961-
962-
return {"text/html": self._repr_html_(), "text/plain": repr(self)}
963-
964962
def __delitem__(self, key: str):
965963
df = self.drop(columns=[key])
966964
self._set_block(df._get_block())

0 commit comments

Comments
 (0)