pywry.grid¶
Configuration models for AG Grid integration.
Grid Options¶
pywry.grid.GridOptions
¶
Bases: AGGridModel
AG Grid options following the official API.
This mirrors AG Grid's GridOptions interface. Includes sensible defaults that make the grid powerful out-of-the-box.
See: https://www.ag-grid.com/javascript-data-grid/grid-options/
Attributes¶
column_defs
class-attribute
instance-attribute
¶
default_col_def
class-attribute
instance-attribute
¶
row_data
class-attribute
instance-attribute
¶
row_model_type
class-attribute
instance-attribute
¶
row_selection
class-attribute
instance-attribute
¶
cell_selection
class-attribute
instance-attribute
¶
dom_layout
class-attribute
instance-attribute
¶
pagination_page_size
class-attribute
instance-attribute
¶
pagination_page_size_selector
class-attribute
instance-attribute
¶
pagination_page_size_selector: list[int] | bool = Field(default_factory=lambda: [25, 50, 100, 250, 500], alias='paginationPageSizeSelector')
group_display_type
class-attribute
instance-attribute
¶
row_group_panel_show
class-attribute
instance-attribute
¶
group_default_expanded
class-attribute
instance-attribute
¶
cache_block_size
class-attribute
instance-attribute
¶
max_concurrent_datasource_requests
class-attribute
instance-attribute
¶
infinite_initial_row_count
class-attribute
instance-attribute
¶
single_click_edit
class-attribute
instance-attribute
¶
undo_redo_cell_editing
class-attribute
instance-attribute
¶
undo_redo_cell_editing_limit
class-attribute
instance-attribute
¶
copy_headers_to_clipboard
class-attribute
instance-attribute
¶
animate_rows
class-attribute
instance-attribute
¶
enable_cell_span
class-attribute
instance-attribute
¶
model_config
class-attribute
instance-attribute
¶
Functions¶
to_dict
¶
Convert to dict for JSON serialization to AG Grid.
Handles conditional inclusion based on row model type.
Column Definition¶
pywry.grid.ColDef
¶
Bases: AGGridModel
AG Grid Column Definition.
See: https://www.ag-grid.com/javascript-data-grid/column-definitions/
Use snake_case in Python, serializes to camelCase for AG Grid.
Example: ColDef(field="name", header_name="Full Name", min_width=100) # Serializes to: {"field": "name", "headerName": "Full Name", "minWidth": 100}
Attributes¶
header_name
class-attribute
instance-attribute
¶
header_tooltip
class-attribute
instance-attribute
¶
min_width
class-attribute
instance-attribute
¶
max_width
class-attribute
instance-attribute
¶
cell_data_type
class-attribute
instance-attribute
¶
value_getter
class-attribute
instance-attribute
¶
value_formatter
class-attribute
instance-attribute
¶
value_setter
class-attribute
instance-attribute
¶
cell_renderer
class-attribute
instance-attribute
¶
cell_class
class-attribute
instance-attribute
¶
cell_style
class-attribute
instance-attribute
¶
auto_height
class-attribute
instance-attribute
¶
wrap_text
class-attribute
instance-attribute
¶
row_group
class-attribute
instance-attribute
¶
enable_row_group
class-attribute
instance-attribute
¶
agg_func
class-attribute
instance-attribute
¶
span_rows
class-attribute
instance-attribute
¶
lock_position
class-attribute
instance-attribute
¶
lock_pinned
class-attribute
instance-attribute
¶
lock_visible
class-attribute
instance-attribute
¶
model_config
class-attribute
instance-attribute
¶
Functions¶
validate_positive_width
classmethod
¶
Validate width values are positive if set.
to_dict
¶
Convert to dict with camelCase keys, excluding None values.
Explicitly maps field names to aliases.
Column Group Definition¶
pywry.grid.ColGroupDef
¶
Bases: AGGridModel
AG Grid Column Group Definition.
See: https://www.ag-grid.com/javascript-data-grid/column-groups/
Attributes¶
children
class-attribute
instance-attribute
¶
children: list[ColDef | ColGroupDef] = Field(default_factory=list)
group_id
class-attribute
instance-attribute
¶
marry_children
class-attribute
instance-attribute
¶
open_by_default
class-attribute
instance-attribute
¶
model_config
class-attribute
instance-attribute
¶
Functions¶
Default Column Definition¶
pywry.grid.DefaultColDef
¶
Bases: AGGridModel
Default column definition applied to all columns.
These defaults make the grid useful out-of-the-box.
Attributes¶
floating_filter
class-attribute
instance-attribute
¶
enable_row_group
class-attribute
instance-attribute
¶
enable_pivot
class-attribute
instance-attribute
¶
enable_value
class-attribute
instance-attribute
¶
model_config
class-attribute
instance-attribute
¶
Functions¶
to_dict
¶
Convert to dict with camelCase keys, excluding None values.
Explicitly maps field names to aliases.
Row Selection¶
pywry.grid.RowSelection
¶
Bases: AGGridModel
AG Grid Row Selection configuration.
See: https://www.ag-grid.com/javascript-data-grid/row-selection-multi-row/
enableClickSelection options: - False: Only checkboxes select rows - 'enableDeselection': Ctrl+click to deselect only - 'enableSelection': Click to select only - True: Click to select, Ctrl+click to deselect (default)
Attributes¶
header_checkbox
class-attribute
instance-attribute
¶
enable_click_selection
class-attribute
instance-attribute
¶
hide_disabled_checkboxes
class-attribute
instance-attribute
¶
model_config
class-attribute
instance-attribute
¶
Functions¶
to_dict
¶
Convert to dict with camelCase keys, excluding None values.
Explicitly maps field names to aliases.
Utility Functions¶
pywry.grid.build_grid_config
¶
build_grid_config(data: Any, *, column_defs: list[dict[str, Any] | ColDef] | None = None, grid_options: dict[str, Any] | None = None, row_model_type: RowModelType = 'clientSide', theme: Literal['dark', 'light'] = 'dark', aggrid_theme: Literal['quartz', 'alpine', 'balham', 'material'] = 'alpine', grid_id: str | None = None, pagination: bool | None = None, pagination_page_size: int = 100, cache_block_size: int = 500, row_selection: RowSelection | dict[str, Any] | bool = False, enable_cell_span: bool | None = None) -> GridConfig
Build complete grid configuration from data.
This is the main entry point. Creates a fully-configured grid with sensible defaults that work great out-of-the-box.
Features enabled by default: - Multi-row selection with checkboxes - Sortable, filterable, resizable columns - Floating filter row - Row grouping with drag panel - Cell text selection - Undo/redo for edits - Copy with headers
| PARAMETER | DESCRIPTION |
|---|---|
data
|
Input data (DataFrame, list, dict).
TYPE:
|
column_defs
|
Custom column definitions. Can be dicts or ColDef objects.
TYPE:
|
grid_options
|
Additional AG Grid options to merge.
TYPE:
|
row_model_type
|
'clientSide' (default), 'infinite', 'serverSide', or 'viewport'.
TYPE:
|
theme
|
'dark' or 'light'.
TYPE:
|
aggrid_theme
|
AG Grid theme: 'quartz', 'alpine', 'balham', 'material'.
TYPE:
|
grid_id
|
Custom grid ID (auto-generated if None).
TYPE:
|
pagination
|
Enable pagination.
TYPE:
|
pagination_page_size
|
Rows per page.
TYPE:
|
cache_block_size
|
Block size for infinite row model.
TYPE:
|
row_selection
|
Row selection config. True = multiRow with checkboxes. False = disabled. Or pass RowSelection/dict for custom.
TYPE:
|
enable_cell_span
|
Enable row spanning for index columns. None (default) = auto-detect from MultiIndex rows. True = force enable. False = force disable.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
GridConfig
|
Complete configuration with options and context. |
pywry.grid.to_js_grid_config
¶
to_js_grid_config(config: GridConfig) -> dict[str, Any]
Convert GridConfig to JSON-serializable dict for JS.
Used by anywidget backend which passes config as JSON.
pywry.grid.normalize_data
¶
normalize_data(data: Any) -> GridData
Convert various data formats to normalized GridData.
Handles: - pandas DataFrame (including MultiIndex columns and rows) - list of dicts: [{'a': 1}, {'a': 2}] - dict of lists: {'a': [1, 2], 'b': [3, 4]} - single dict: {'a': 1, 'b': 2}
For pandas MultiIndex: - MultiIndex columns → column_groups for AG Grid ColGroupDef - MultiIndex rows → flattened to regular columns (can use for row spanning)
pywry.grid.build_column_defs
¶
build_column_defs(columns: list[str], column_defs: list[dict[str, Any] | ColDef] | None = None, column_groups: list[dict[str, Any]] | None = None, index_columns: list[str] | None = None, enable_cell_span: bool = False, column_types: dict[str, str] | None = None) -> list[dict[str, Any]]
Build AG Grid column definitions.
If column_defs is provided, use it. Otherwise auto-generate from column names. Supports column groups from MultiIndex and special handling for index columns.
| PARAMETER | DESCRIPTION |
|---|---|
columns
|
Column names from the data.
TYPE:
|
column_defs
|
Custom column definitions (overrides auto-generation).
TYPE:
|
column_groups
|
Column group structure from MultiIndex columns.
TYPE:
|
index_columns
|
Index columns that were flattened from MultiIndex rows.
TYPE:
|
enable_cell_span
|
If True, index columns get spanRows=True for automatic row spanning.
TYPE:
|
column_types
|
Detected column types from pandas dtypes (e.g., {'timestamp': 'dateString'}).
TYPE:
|
pywry.grid.build_grid_html
¶
build_grid_html(config: GridConfig) -> str
Generate the HTML/JS snippet for the AG Grid.
Grid Model¶
pywry.grid.AGGridModel
¶
Bases: BaseModel
Base model for AG Grid objects with camelCase serialization.
Grid Context¶
pywry.grid.PyWryGridContext
¶
Bases: BaseModel
PyWry-specific context for grid rendering.
This contains metadata that PyWry needs but AG Grid doesn't care about. Kept separate from GridOptions to maintain clean API boundaries.
Grid Config¶
pywry.grid.GridConfig
¶
Bases: BaseModel
Combined configuration: AG Grid options + PyWry context.
This is what rendering functions receive. It cleanly separates: - options: What AG Grid needs (follows their API) - context: What PyWry needs (grid_id, theme, etc.)