duongthienz commited on
Commit
9ffbef1
·
verified ·
1 Parent(s): c6614e2

Update state.py

Browse files
Files changed (1) hide show
  1. state.py +10 -7
state.py CHANGED
@@ -163,6 +163,8 @@ def enforceGlobalRenameExclusivity(changed_idx):
163
 
164
  Called by the sidebar multiselect on_change so that picking a speaker for
165
  one name automatically unassigns it from any previously-holding name.
 
 
166
  """
167
  changed_tokens = set(st.session_state.globalRenames[changed_idx]["speakers"])
168
  for idx, entry in enumerate(st.session_state.globalRenames):
@@ -171,7 +173,7 @@ def enforceGlobalRenameExclusivity(changed_idx):
171
  new_speakers = [t for t in entry["speakers"] if t not in changed_tokens]
172
  if new_speakers != entry["speakers"]:
173
  entry["speakers"] = new_speakers
174
- st.session_state[_global_rename_key(idx)] = new_speakers
175
  applyGlobalRenames()
176
 
177
 
@@ -207,12 +209,13 @@ def apply_inline_rename(currFile, raw_sp, new_name):
207
 
208
  # Always remove this token from every existing entry first so it can't
209
  # be claimed by more than one name at the same time.
210
- for entry in st.session_state.globalRenames:
 
 
 
211
  if token in entry["speakers"]:
212
  entry["speakers"].remove(token)
213
- # Keep the widget key in sync
214
- idx = st.session_state.globalRenames.index(entry)
215
- st.session_state[_global_rename_key(idx)] = list(entry["speakers"])
216
 
217
  if new_name:
218
  # Write into speakerRenames immediately
@@ -221,12 +224,12 @@ def apply_inline_rename(currFile, raw_sp, new_name):
221
  for idx, entry in enumerate(st.session_state.globalRenames):
222
  if entry["name"] == new_name:
223
  entry["speakers"].append(token)
224
- st.session_state[_global_rename_key(idx)] = list(entry["speakers"])
225
  return
226
  # No existing entry — create a new one
227
  idx = len(st.session_state.globalRenames)
228
  st.session_state.globalRenames.append({"name": new_name, "speakers": [token]})
229
- st.session_state[_global_rename_key(idx)] = [token]
230
  else:
231
  # Empty name — clear the rename for this speaker (token already removed above)
232
  st.session_state.speakerRenames.setdefault(currFile, {}).pop(raw_sp, None)
 
163
 
164
  Called by the sidebar multiselect on_change so that picking a speaker for
165
  one name automatically unassigns it from any previously-holding name.
166
+ We pop (not overwrite) stale widget keys to avoid the Streamlit
167
+ "cannot modify after instantiation" error.
168
  """
169
  changed_tokens = set(st.session_state.globalRenames[changed_idx]["speakers"])
170
  for idx, entry in enumerate(st.session_state.globalRenames):
 
173
  new_speakers = [t for t in entry["speakers"] if t not in changed_tokens]
174
  if new_speakers != entry["speakers"]:
175
  entry["speakers"] = new_speakers
176
+ st.session_state.pop(_global_rename_key(idx), None)
177
  applyGlobalRenames()
178
 
179
 
 
209
 
210
  # Always remove this token from every existing entry first so it can't
211
  # be claimed by more than one name at the same time.
212
+ # We delete the widget key (rather than overwriting it) to avoid the
213
+ # Streamlit "cannot modify after widget is instantiated" error — the
214
+ # render loop will reseed it from globalRenames data on the next rerun.
215
+ for idx, entry in enumerate(st.session_state.globalRenames):
216
  if token in entry["speakers"]:
217
  entry["speakers"].remove(token)
218
+ st.session_state.pop(_global_rename_key(idx), None)
 
 
219
 
220
  if new_name:
221
  # Write into speakerRenames immediately
 
224
  for idx, entry in enumerate(st.session_state.globalRenames):
225
  if entry["name"] == new_name:
226
  entry["speakers"].append(token)
227
+ st.session_state.pop(_global_rename_key(idx), None)
228
  return
229
  # No existing entry — create a new one
230
  idx = len(st.session_state.globalRenames)
231
  st.session_state.globalRenames.append({"name": new_name, "speakers": [token]})
232
+ # Don't pre-set the widget key here — render loop will seed it
233
  else:
234
  # Empty name — clear the rename for this speaker (token already removed above)
235
  st.session_state.speakerRenames.setdefault(currFile, {}).pop(raw_sp, None)