Skip to content

Commit 248c8ea

Browse files
deps: Remove direct ipywidgets requirement (#2416)
1 parent 2fc5bb1 commit 248c8ea

File tree

6 files changed

+18
-10
lines changed

6 files changed

+18
-10
lines changed

bigframes/formatting_helpers.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
import google.api_core.exceptions as api_core_exceptions
2626
import google.cloud.bigquery as bigquery
2727
import humanize
28-
import IPython
29-
import IPython.display as display
3028

3129
if TYPE_CHECKING:
30+
from IPython import display
31+
3232
import bigframes.core.events
3333

3434
GenericJob = Union[
@@ -160,6 +160,8 @@ def progress_callback(
160160
progress_bar = "notebook" if in_ipython() else "terminal"
161161

162162
if progress_bar == "notebook":
163+
import IPython.display as display
164+
163165
if (
164166
isinstance(event, bigframes.core.events.ExecutionStarted)
165167
or current_display is None
@@ -239,6 +241,8 @@ def wait_for_job(job: GenericJob, progress_bar: Optional[str] = None):
239241

240242
try:
241243
if progress_bar == "notebook":
244+
import IPython.display as display
245+
242246
display_id = str(random.random())
243247
loading_bar = display.HTML(get_base_job_loading_html(job))
244248
display.display(loading_bar, display_id=display_id)
@@ -607,4 +611,8 @@ def get_bytes_processed_string(val: Any):
607611

608612
def in_ipython():
609613
"""Return True iff we're in a colab-like IPython."""
614+
try:
615+
import IPython
616+
except (ImportError, NameError):
617+
return False
610618
return hasattr(IPython.get_ipython(), "kernel")

bigframes/operations/blob.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
from typing import cast, Literal, Optional, Union
1919
import warnings
2020

21-
import IPython.display as ipy_display
2221
import pandas as pd
2322
import requests
2423

@@ -241,6 +240,8 @@ def display(
241240
width (int or None, default None): width in pixels that the image/video are constrained to. If unset, use the global setting in bigframes.options.display.blob_display_width, otherwise image/video's original size or ratio is used. No-op for other content types.
242241
height (int or None, default None): height in pixels that the image/video are constrained to. If unset, use the global setting in bigframes.options.display.blob_display_height, otherwise image/video's original size or ratio is used. No-op for other content types.
243242
"""
243+
import IPython.display as ipy_display
244+
244245
width = width or bigframes.options.display.blob_display_width
245246
height = height or bigframes.options.display.blob_display_height
246247

setup.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
"requests >=2.27.1",
5656
"shapely >=1.8.5",
5757
"tabulate >=0.9",
58-
"ipywidgets >=7.7.1",
5958
"humanize >=4.6.0",
6059
"matplotlib >=3.7.1",
6160
"db-dtypes >=1.4.2",

testing/constraints-3.10.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ requests==2.32.3
1111
tornado==6.3.3
1212
absl-py==1.4.0
1313
debugpy==1.6.6
14-
ipywidgets==7.7.1
1514
matplotlib==3.7.1
1615
psutil==5.9.5
1716
seaborn==0.13.1

testing/constraints-3.9.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ requests==2.27.1
2222
scikit-learn==1.2.2
2323
shapely==1.8.5
2424
tabulate==0.9
25-
ipywidgets==7.7.1
2625
humanize==4.6.0
2726
matplotlib==3.7.1
2827
db-dtypes==1.4.2

tests/system/small/blob/test_io.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414

1515
from unittest import mock
1616

17-
import IPython.display
1817
import pandas as pd
18+
import pytest
1919

2020
import bigframes
2121
import bigframes.pandas as bpd
2222

23+
idisplay = pytest.importorskip("IPython.display")
24+
2325

2426
def test_blob_create_from_uri_str(
2527
bq_connection: str, session: bigframes.Session, images_uris
@@ -99,14 +101,14 @@ def test_blob_create_read_gbq_object_table(
99101

100102
def test_display_images(monkeypatch, images_mm_df: bpd.DataFrame):
101103
mock_display = mock.Mock()
102-
monkeypatch.setattr(IPython.display, "display", mock_display)
104+
monkeypatch.setattr(idisplay, "display", mock_display)
103105

104106
images_mm_df["blob_col"].blob.display()
105107

106108
for call in mock_display.call_args_list:
107109
args, _ = call
108110
arg = args[0]
109-
assert isinstance(arg, IPython.display.Image)
111+
assert isinstance(arg, idisplay.Image)
110112

111113

112114
def test_display_nulls(
@@ -117,7 +119,7 @@ def test_display_nulls(
117119
uri_series = bpd.Series([None, None, None], dtype="string", session=session)
118120
blob_series = uri_series.str.to_blob(connection=bq_connection)
119121
mock_display = mock.Mock()
120-
monkeypatch.setattr(IPython.display, "display", mock_display)
122+
monkeypatch.setattr(idisplay, "display", mock_display)
121123

122124
blob_series.blob.display()
123125

0 commit comments

Comments
 (0)