From fc9eb80c8491e1f8fae80ef88e2e2a59eb2ee2a6 Mon Sep 17 00:00:00 2001 From: messense Date: Thu, 14 May 2015 17:08:33 +0800 Subject: [PATCH] Fix FieldDescriptor default value bug. Close #49. --- tests/test_replies.py | 10 ++++++++++ wechatpy/fields.py | 6 ++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/test_replies.py b/tests/test_replies.py index be0502bf..6a473181 100644 --- a/tests/test_replies.py +++ b/tests/test_replies.py @@ -102,3 +102,13 @@ def test_music_reply_properties(self): self.assertEqual('test', reply.description) self.assertEqual('http://www.qq.com', reply.music_url) self.assertTrue(reply.hq_music_url is None) + + def test_multi_article_reply(self): + from wechatpy.replies import ArticlesReply + + article = {'title': 'test', 'url': 'http://www.qq.com'} + + r1 = ArticlesReply() + r1.add_article(article) + r2 = ArticlesReply() + self.assertTrue(r1.render() != r2.render()) diff --git a/wechatpy/fields.py b/wechatpy/fields.py index 71e6cdbd..db4535bc 100644 --- a/wechatpy/fields.py +++ b/wechatpy/fields.py @@ -10,6 +10,8 @@ """ from __future__ import absolute_import, unicode_literals import base64 +import copy + import six from wechatpy.utils import to_text, to_binary, ObjectDict @@ -25,8 +27,8 @@ def __get__(self, instance, instance_type=None): if instance is not None: value = instance._data.get(self.attr_name) if value is None: - instance._data[self.attr_name] = self.field.default - value = self.field.default + value = copy.deepcopy(self.field.default) + instance._data[self.attr_name] = value if isinstance(value, dict): value = ObjectDict(value) if value and not isinstance(value, (dict, list, tuple)) and \