Skip to content

Commit 3a7f153

Browse files
committed
Improve index_name logic
Signed-off-by: Itay Dafna <[email protected]>
1 parent 748361d commit 3a7f153

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

ipydatagrid/datagrid.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -350,10 +350,8 @@ def __init__(self, dataframe, **kwargs):
350350
# set by the user.
351351
if "index_name" in kwargs:
352352
self._index_name = kwargs["index_name"]
353-
elif dataframe.index.name is not None:
354-
self._index_name = dataframe.index.name
355353
else:
356-
self._index_name = "key"
354+
self._index_name = None
357355

358356
self.data = dataframe
359357
super().__init__(**kwargs)
@@ -465,10 +463,29 @@ def data(self, dataframe):
465463
self.__dataframe_reference_columns = dataframe.columns
466464
dataframe = dataframe.copy()
467465

466+
# Primary key used
467+
index_key = self.get_dataframe_index(dataframe)
468+
468469
self._data = self.generate_data_object(
469-
dataframe, "ipydguuid", self._index_name
470+
dataframe, "ipydguuid", index_key
470471
)
471472

473+
def get_dataframe_index(self, dataframe):
474+
"""Returns a primary key to be used in ipydatagrid's
475+
view of the passed DataFrame"""
476+
477+
# Passed index_name takes highest priority
478+
if self._index_name is not None:
479+
return self._index_name
480+
481+
# Dataframe with names index used by default
482+
if dataframe.index.name is not None:
483+
return dataframe.index.name
484+
485+
# If no index_name param, nor named-index DataFrame
486+
# have been passed, revert to default "key"
487+
return "key"
488+
472489
def get_cell_value(self, column_name, primary_key_value):
473490
"""Gets the value for a single or multiple cells by column name and index name.
474491
@@ -629,9 +646,12 @@ def selected_cell_values(self):
629646
# Copy of the front-end data model
630647
view_data = self.get_visible_data()
631648

649+
# Get primary key from dataframe
650+
index_key = self.get_dataframe_index(view_data)
651+
632652
# Serielize to JSON table schema
633653
view_data_object = self.generate_data_object(
634-
view_data, "ipydguuid", self._index_name
654+
view_data, "ipydguuid", index_key
635655
)
636656

637657
return SelectionHelper(

0 commit comments

Comments
 (0)