summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJeong YunWon <jeong@youknowone.org>2017-01-27 23:29:59 +0900
committerMike Bayer <mike_mp@zzzcomputing.com>2017-01-30 12:59:54 -0500
commitf411cac35001e0d40a6217846d3df40f676a2d4d (patch)
tree8fea7df45be5e7099bd43ea9b1b932f40030d651 /lib
parent1c578a710f14568856dad6a1c0bad1269b4108c4 (diff)
downloadsqlalchemy-f411cac35001e0d40a6217846d3df40f676a2d4d.tar.gz
Fix nested index_property setter when there is no container value
Fixed bug in new :mod:`sqlalchemy.ext.indexable` extension where setting of a property that itself refers to another property would fail. Fixes: #3901 Change-Id: I203a66117e2399afee11a34f43f0e93adfc6d571
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/ext/indexable.py6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/sqlalchemy/ext/indexable.py b/lib/sqlalchemy/ext/indexable.py
index 8298a65a9..b1ce12923 100644
--- a/lib/sqlalchemy/ext/indexable.py
+++ b/lib/sqlalchemy/ext/indexable.py
@@ -227,6 +227,7 @@ The above query will render::
"""
from __future__ import absolute_import
+from sqlalchemy import inspect
from ..orm.attributes import flag_modified
from ..ext.hybrid import hybrid_property
@@ -318,13 +319,14 @@ class index_property(hybrid_property): # noqa
def fset(self, instance, value):
attr_name = self.attr_name
- column_value = getattr(instance, attr_name)
+ column_value = getattr(instance, attr_name, None)
if column_value is None:
column_value = self.datatype()
setattr(instance, attr_name, column_value)
column_value[self.index] = value
setattr(instance, attr_name, column_value)
- flag_modified(instance, attr_name)
+ if attr_name in inspect(instance).mapper.attrs:
+ flag_modified(instance, attr_name)
def fdel(self, instance):
attr_name = self.attr_name