Skip to content

Commit e2a6985

Browse files
Improve handling of potentially missing columns
1 parent 0d81e24 commit e2a6985

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

stage5.3_fuller_application/pycasa/ui/image_folder_view.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@
1919
'ISOSpeedRatings', 'SceneType'
2020
]
2121

22+
YEAR_KEY = "__year__"
23+
24+
DATETIME_COL = "DateTime"
25+
26+
MAKE_COL = 'Make'
27+
2228

2329
class ImageFolderView(ModelView):
2430
""" ModelView for an image folder object.
@@ -30,6 +36,10 @@ class ImageFolderView(ModelView):
3036
# Filters widgets
3137
view_filter_controls = Bool
3238

39+
# Copy of the model's data, with filtering columns added if missing
40+
all_data = Instance(pd.DataFrame)
41+
42+
# Filtered dataframe based on filtering widgets
3343
filtered_data = Instance(pd.DataFrame)
3444

3545
year_mask = Instance(pd.Series)
@@ -82,21 +92,22 @@ def traits_view(self):
8292
@observe("scan")
8393
def scan_for_faces(self, event):
8494
self.model.compute_num_faces()
95+
self.all_data = self.model.data.copy()
8596

8697
@observe("selected_years")
8798
def update_years(self, event):
88-
self.year_mask = self.model.data['Year'].isin(self.selected_years)
99+
self.year_mask = self.all_data[YEAR_KEY].isin(self.selected_years)
89100

90101
@observe("selected_make")
91102
def update_make(self, event):
92103
if self.selected_make == "All":
93104
self.make_mask = pd.Series([True] * len(self.model.data))
94105
else:
95-
self.make_mask = self.model.data['Make'] == self.selected_make
106+
self.make_mask = self.all_data[MAKE_COL] == self.selected_make
96107

97-
@observe("year_mask, make_mask")
108+
@observe("year_mask, make_mask, all_data")
98109
def update_filtered_data(self, event):
99-
self.filtered_data = self.model.data[self.year_mask & self.make_mask]
110+
self.filtered_data = self.all_data[self.year_mask & self.make_mask]
100111

101112
# Initialization methods --------------------------------------------------
102113

@@ -106,15 +117,25 @@ def _make_mask_default(self):
106117
def _year_mask_default(self):
107118
return pd.Series(np.ones(len(self.model.data), dtype=bool))
108119

120+
def _all_data_default(self):
121+
data = self.model.data.copy()
122+
if DATETIME_COL not in data.columns:
123+
data[DATETIME_COL] = np.nan
124+
125+
if MAKE_COL not in data.columns:
126+
data[MAKE_COL] = np.nan
127+
128+
return data
129+
109130
def _filtered_data_default(self):
110-
return self.model.data
131+
return self.all_data
111132

112133
def _all_years_default(self):
113134
def parse_year(x):
114135
return x.split(":")[0] if isinstance(x, str) else "unknown"
115136

116-
self.model.data['Year'] = self.model.data['DateTime'].apply(parse_year)
117-
return sorted(self.model.data['Year'].unique().tolist())
137+
self.all_data[YEAR_KEY] = self.all_data['DateTime'].apply(parse_year)
138+
return sorted(self.all_data[YEAR_KEY].unique().tolist())
118139

119140

120141
if __name__ == '__main__':

0 commit comments

Comments
 (0)