Skip to content

Commit eea0a87

Browse files
committed
refactor: replace magic strings for col categories with a private Enum
1 parent 03eba5e commit eea0a87

File tree

4 files changed

+489
-21
lines changed

4 files changed

+489
-21
lines changed

bigframes/display/_flatten.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class _ColumnClassification:
9090

9191

9292
@dataclasses.dataclass(frozen=True)
93-
class FlattenArrayOfStructsResult:
93+
class _FlattenArrayOfStructsResult:
9494
"""The result of flattening array-of-struct columns.
9595
9696
Attributes:
@@ -105,7 +105,7 @@ class FlattenArrayOfStructsResult:
105105

106106

107107
@dataclasses.dataclass(frozen=True)
108-
class FlattenStructsResult:
108+
class _FlattenStructsResult:
109109
"""The result of flattening struct columns.
110110
111111
Attributes:
@@ -249,7 +249,7 @@ def _flatten_array_of_struct_columns(
249249
array_of_struct_columns: tuple[str, ...],
250250
array_columns: tuple[str, ...],
251251
nested_originated_columns: frozenset[str],
252-
) -> FlattenArrayOfStructsResult:
252+
) -> _FlattenArrayOfStructsResult:
253253
"""Flatten ARRAY of STRUCT columns into separate ARRAY columns for each field.
254254
255255
Args:
@@ -259,7 +259,7 @@ def _flatten_array_of_struct_columns(
259259
nested_originated_columns: Columns tracked as originating from nested data.
260260
261261
Returns:
262-
A FlattenArrayOfStructsResult containing the updated DataFrame and columns.
262+
A _FlattenArrayOfStructsResult containing the updated DataFrame and columns.
263263
"""
264264
result_df = dataframe.copy()
265265
current_array_columns = list(array_columns)
@@ -288,7 +288,7 @@ def _flatten_array_of_struct_columns(
288288
current_array_columns.remove(col_name)
289289
current_array_columns.extend(new_cols_df.columns.tolist())
290290

291-
return FlattenArrayOfStructsResult(
291+
return _FlattenArrayOfStructsResult(
292292
dataframe=result_df,
293293
array_columns=tuple(current_array_columns),
294294
nested_originated_columns=frozenset(current_nested_columns),
@@ -347,7 +347,7 @@ def _replace_column_in_df(
347347

348348

349349
@dataclasses.dataclass(frozen=True)
350-
class ExplodeResult:
350+
class _ExplodeResult:
351351
"""The result of exploding array columns.
352352
353353
Attributes:
@@ -363,7 +363,7 @@ class ExplodeResult:
363363

364364
def _explode_array_columns(
365365
dataframe: pd.DataFrame, array_columns: list[str]
366-
) -> ExplodeResult:
366+
) -> _ExplodeResult:
367367
"""Explode array columns into new rows.
368368
369369
This function performs the "flattening" of 1D arrays by exploding them.
@@ -375,17 +375,17 @@ def _explode_array_columns(
375375
array_columns: List of array columns to explode.
376376
377377
Returns:
378-
An ExplodeResult containing the new DataFrame and row metadata.
378+
An _ExplodeResult containing the new DataFrame and row metadata.
379379
"""
380380
if not array_columns:
381-
return ExplodeResult(dataframe, [], set())
381+
return _ExplodeResult(dataframe, [], set())
382382

383383
work_df, non_array_columns, index_names = _prepare_explosion_dataframe(
384384
dataframe, array_columns
385385
)
386386

387387
if work_df.empty:
388-
return ExplodeResult(dataframe, [], set())
388+
return _ExplodeResult(dataframe, [], set())
389389

390390
table = pa.Table.from_pandas(work_df)
391391
arrays = [table.column(col).combine_chunks() for col in array_columns]
@@ -399,7 +399,7 @@ def _explode_array_columns(
399399
lengths.append(row_lengths)
400400

401401
if not lengths:
402-
return ExplodeResult(dataframe, [], set())
402+
return _ExplodeResult(dataframe, [], set())
403403

404404
max_lens = lengths[0] if len(lengths) == 1 else pc.max_element_wise(*lengths)
405405
max_lens = max_lens.cast(pa.int64())
@@ -411,7 +411,7 @@ def _explode_array_columns(
411411
empty_df = pd.DataFrame(columns=dataframe.columns)
412412
if index_names:
413413
empty_df = empty_df.set_index(index_names)
414-
return ExplodeResult(empty_df, [], set())
414+
return _ExplodeResult(empty_df, [], set())
415415

416416
# parent_indices maps each result row to its original row index.
417417
dummy_values = pa.nulls(total_rows, type=pa.null())
@@ -474,7 +474,7 @@ def _explode_array_columns(
474474
if index_names:
475475
result_df = result_df.set_index(index_names)
476476

477-
return ExplodeResult(result_df, row_labels, continuation_rows)
477+
return _ExplodeResult(result_df, row_labels, continuation_rows)
478478

479479

480480
def _prepare_explosion_dataframe(
@@ -518,7 +518,7 @@ def _flatten_struct_columns(
518518
struct_columns: tuple[str, ...],
519519
clear_on_continuation_cols: tuple[str, ...],
520520
nested_originated_columns: frozenset[str],
521-
) -> FlattenStructsResult:
521+
) -> _FlattenStructsResult:
522522
"""Flatten regular STRUCT columns into separate columns.
523523
524524
Args:
@@ -528,10 +528,10 @@ def _flatten_struct_columns(
528528
nested_originated_columns: Columns tracked as originating from nested data.
529529
530530
Returns:
531-
A FlattenStructsResult containing the updated DataFrame and columns.
531+
A _FlattenStructsResult containing the updated DataFrame and columns.
532532
"""
533533
if not struct_columns:
534-
return FlattenStructsResult(
534+
return _FlattenStructsResult(
535535
dataframe=dataframe.copy(),
536536
clear_on_continuation_cols=clear_on_continuation_cols,
537537
nested_originated_columns=nested_originated_columns,
@@ -568,7 +568,7 @@ def _flatten_struct_columns(
568568

569569
result_df.index = dataframe.index
570570

571-
return FlattenStructsResult(
571+
return _FlattenStructsResult(
572572
dataframe=result_df,
573573
clear_on_continuation_cols=tuple(current_clear_cols),
574574
nested_originated_columns=frozenset(current_nested_cols),

bigframes/display/table_widget.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,27 @@ function render({ model, el }) {
170170
model.save_changes();
171171
}
172172

173+
let isHeightInitialized = false;
174+
173175
function handleTableHTMLChange() {
174176
tableContainer.innerHTML = model.get(ModelProperty.TABLE_HTML);
175177

178+
// After the first render, dynamically set the container height to fit the
179+
// initial page (usually 10 rows) and then lock it.
180+
setTimeout(() => {
181+
if (!isHeightInitialized) {
182+
const table = tableContainer.querySelector('table');
183+
if (table) {
184+
const tableHeight = table.offsetHeight;
185+
// Add a small buffer(e.g. 2px) for borders to avoid scrollbars.
186+
if (tableHeight > 0) {
187+
tableContainer.style.height = `${tableHeight + 2}px`;
188+
isHeightInitialized = true;
189+
}
190+
}
191+
}
192+
}, 0);
193+
176194
const sortableColumns = model.get(ModelProperty.ORDERABLE_COLUMNS);
177195
const currentSortContext = model.get(ModelProperty.SORT_CONTEXT) || [];
178196

0 commit comments

Comments
 (0)