[gen] Stop caching methods used as default values for gen field: it can lead to headaches.
This commit is contained in:
parent
d9a89f7ad5
commit
30dbcb7dc7
|
@ -570,7 +570,14 @@ class Field:
|
||||||
# self.default, of self.default() if it is a method.
|
# self.default, of self.default() if it is a method.
|
||||||
if callable(self.default):
|
if callable(self.default):
|
||||||
try:
|
try:
|
||||||
return self.callMethod(obj, self.default)
|
# Caching a default value can lead to problems. For example,
|
||||||
|
# the process of creating an object from another one, or
|
||||||
|
# from some data, sometimes consists in (a) creating an
|
||||||
|
# "empty" object, (b) initializing its values and
|
||||||
|
# (c) reindexing it. Default values are computed in (a),
|
||||||
|
# but it they depend on values set at (b), and are cached
|
||||||
|
# and indexed, (c) will get the wrong, cached value.
|
||||||
|
return self.callMethod(obj, self.default, cache=False)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
# Already logged. Here I do not raise the exception,
|
# Already logged. Here I do not raise the exception,
|
||||||
# because it can be raised as the result of reindexing
|
# because it can be raised as the result of reindexing
|
||||||
|
|
|
@ -94,6 +94,7 @@ input.buttonFixed { width:110px; padding: 0 0 0 10px }
|
||||||
.portletGroup { font-variant: small-caps; font-weight: bold; font-size: 110%;
|
.portletGroup { font-variant: small-caps; font-weight: bold; font-size: 110%;
|
||||||
margin: 0.1em 0 0.3em ; border-bottom: 1px dashed #c0c0c0 }
|
margin: 0.1em 0 0.3em ; border-bottom: 1px dashed #c0c0c0 }
|
||||||
.portletSearch { font-size: 90%; font-style: italic }
|
.portletSearch { font-size: 90%; font-style: italic }
|
||||||
|
.portletCurrent { font-weight: bold }
|
||||||
.inputSearch { height: 15px; width: 132px; margin: 3px 3px 2px 3px !important }
|
.inputSearch { height: 15px; width: 132px; margin: 3px 3px 2px 3px !important }
|
||||||
td.search { padding-top: 8px }
|
td.search { padding-top: 8px }
|
||||||
.content { padding: 9px; background-color: #fbfbfb }
|
.content { padding: 9px; background-color: #fbfbfb }
|
||||||
|
|
Loading…
Reference in a new issue