Skip to content

Commit 1245614

Browse files
committed
Change iteration through the sets, so that you don't remove something in mid-iteration.
git-svn-id: https://src.springframework.org/svn/se-springpython-py/trunk/springpython@534 ce8fead1-4192-4296-8608-a705134b927f
1 parent b3e7618 commit 1245614

1 file changed

Lines changed: 38 additions & 18 deletions

File tree

src/springpython/config/__init__.py

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -199,13 +199,34 @@ def __init__(self, name, value):
199199
self.logger = logging.getLogger("springpython.config.SetDef")
200200

201201
def _replace_refs_with_actuals(self, obj, container):
202+
self.logger.debug("Replacing refs with actuals...")
203+
self.logger.debug("set before changes = %s" % self.value)
204+
new_set = set()
202205
for item in self.value:
203206
if hasattr(item, "ref"):
204-
self.value.remove(item)
205-
self.value.add(container.get_object(item.ref))
207+
self.logger.debug("Item !!!%s!!! is a ref, trying to replace with actual object !!!%s!!!" % (item, item.ref))
208+
#self.value.remove(item)
209+
#self.value.add(container.get_object(item.ref))
210+
newly_fetched_value = container.get_object(item.ref)
211+
new_set.add(newly_fetched_value)
212+
self.logger.debug("Item !!!%s!!! was removed, and newly fetched value !!!%s!!! was added." % (item, newly_fetched_value))
213+
#new_set.add(container.get_object(item.ref))
206214
else:
207-
self.value.remove(item)
208-
self.value.add(self.scan_value(container, item))
215+
self.logger.debug("Item !!!%s!!! is NOT a ref, trying to replace with scanned value" % item)
216+
#self.value.remove(item)
217+
#self.value.add(self.scan_value(container, item))
218+
newly_scanned_value = self.scan_value(container, item)
219+
new_set.add(newly_scanned_value)
220+
self.logger.debug("Item !!!%s!!! was removed, and newly scanned value !!!%s!!! was added." % (item, newly_scanned_value))
221+
#new_set.add(self.scan_value(container, item))
222+
#self.value = new_set
223+
self.logger.debug("set after changes = %s" % new_set)
224+
#return self.value
225+
try:
226+
setattr(obj, self.name, new_set)
227+
except AttributeError:
228+
pass
229+
return new_set
209230

210231
class FrozenSetDef(ValueDef):
211232
"""Handles behavior for a frozen-set-based value."""
@@ -215,12 +236,12 @@ def __init__(self, name, value):
215236

216237
def _replace_refs_with_actuals(self, obj, container):
217238
self.logger.debug("Replacing refs with actuals...")
218-
new_set = set(self.value)
219-
self.logger.debug("Just created new set %s using value %s" % (new_set, self.value))
220-
for item in new_set:
239+
self.logger.debug("set before changes = %s" % self.value)
240+
new_set = set()
241+
for item in self.value:
221242
if hasattr(item, "ref"):
222243
self.logger.debug("Item <<<%s>>> is a ref, trying to replace with actual object <<<%s>>>" % (item, item.ref))
223-
new_set.remove(item)
244+
#new_set.remove(item)
224245
#debug begin
225246
newly_fetched_value = container.get_object(item.ref)
226247
new_set.add(newly_fetched_value)
@@ -229,24 +250,23 @@ def _replace_refs_with_actuals(self, obj, container):
229250
#new_set.add(container.get_object(item.ref))
230251
else:
231252
self.logger.debug("Item <<<%s>>> is NOT a ref, trying to replace with scanned value" % item)
232-
new_set.remove(item)
253+
#new_set.remove(item)
233254
#debug begin
234255
newly_scanned_value = self.scan_value(container, item)
235256
new_set.add(newly_scanned_value)
236257
self.logger.debug("Item <<<%s>>> was removed, and newly scanned value <<<%s>>> was added." % (item, newly_scanned_value))
237258
#debug end
238259
#new_set.add(self.scan_value(container, item))
239-
self.logger.debug("Newly built set = %s" % new_set)
240-
frozen_set = frozenset(new_set)
241-
self.logger.debug("Newly frozen set = %s" % frozen_set)
260+
#self.logger.debug("Newly built set = %s" % new_set)
261+
#self.value = frozenset(new_set)
262+
new_frozen_set = frozenset(new_set)
263+
self.logger.debug("set after changes = %s" % new_frozen_set)
264+
#return self.value
242265
try:
243-
self.logger.debug("Trying to overwrite %s's %s with %s" % (obj, self.name, frozen_set))
244-
setattr(obj, self.name, frozen_set)
245-
except AttributeError, e:
246-
self.logger.debug("AttributeError: %s" % e)
266+
setattr(obj, self.name, new_frozen_set)
267+
except AttributeError:
247268
pass
248-
self.logger.debug("Returning frozenset %s" % frozen_set)
249-
return frozen_set
269+
return new_frozen_set
250270

251271
class Config(object):
252272
"""

0 commit comments

Comments
 (0)