Skip to content

Commit 055a4f2

Browse files
committed
Add parameter to allow users to specify index name, set default to 'key'
Signed-off-by: Itay Dafna <[email protected]>
1 parent 4c91259 commit 055a4f2

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

ipydatagrid/datagrid.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,9 @@ class DataGrid(DOMWidget):
243243
The keys (strings) indicate the styling property
244244
The values (css color properties or Vega Expression) indicate the values
245245
See below for all supported styling properties
246+
index_name : str (default: "key")
247+
String to specify the index column name. **Only set when the grid
248+
is constructed and is not an observable traitlet**
246249
247250
Accessors (not observable traitlets)
248251
---------
@@ -330,6 +333,13 @@ class DataGrid(DOMWidget):
330333
grid_style = Dict(allow_none=True).tag(sync=True, **widget_serialization)
331334

332335
def __init__(self, dataframe, **kwargs):
336+
# Setting default index name if not explicitly
337+
# set by the user.
338+
if "index_name" in kwargs:
339+
self._index_name = kwargs["index_name"]
340+
else:
341+
self._index_name = "key"
342+
333343
self.data = dataframe
334344
super().__init__(**kwargs)
335345
self._cell_click_handlers = CallbackDispatcher()
@@ -376,23 +386,23 @@ def data(self):
376386
return final_df
377387

378388
@staticmethod
379-
def generate_data_object(dataframe, guid_key="ipydguuid"):
389+
def generate_data_object(dataframe, guid_key="ipydguuid", index_name="key"):
380390
dataframe[guid_key] = pd.RangeIndex(0, dataframe.shape[0])
381391

382392
# Renaming default index name from 'index' to 'id' on
383393
# single index DataFrames. This allows users to use
384394
# 'index' as a column name. If 'id' exists, we add _x
385395
# suffix to id, where { x | 0 <= x <= inf }
386396
if not isinstance(dataframe.index, pd.MultiIndex):
387-
if "id" in dataframe.columns:
397+
if index_name in dataframe.columns:
388398
index = 0
389-
new_index_name = f"id_{index}"
399+
new_index_name = f"{index_name}_{index}"
390400
while new_index_name in dataframe.columns:
391401
index += 1
392-
new_index_name = f"id_{index}"
402+
new_index_name = f"{index_name}_{index}"
393403
dataframe = dataframe.rename_axis(new_index_name)
394404
else:
395-
dataframe = dataframe.rename_axis("id")
405+
dataframe = dataframe.rename_axis(index_name)
396406

397407
schema = pd.io.json.build_table_schema(dataframe)
398408
reset_index_dataframe = dataframe.reset_index()
@@ -440,7 +450,9 @@ def data(self, dataframe):
440450
self.__dataframe_reference_columns = dataframe.columns
441451
dataframe = dataframe.copy()
442452

443-
self._data = self.generate_data_object(dataframe, "ipydguuid")
453+
self._data = self.generate_data_object(
454+
dataframe, "ipydguuid", self._index_name
455+
)
444456

445457
def get_cell_value(self, column_name, primary_key_value):
446458
"""Gets the value for a single or multiple cells by column name and index name.
@@ -603,7 +615,9 @@ def selected_cell_values(self):
603615
view_data = self.get_visible_data()
604616

605617
# Serielize to JSON table schema
606-
view_data_object = self.generate_data_object(view_data, "ipydguuid")
618+
view_data_object = self.generate_data_object(
619+
view_data, "ipydguuid", self._index_name
620+
)
607621

608622
return SelectionHelper(
609623
view_data_object, self.selections, self.selection_mode

0 commit comments

Comments
 (0)