From 0f1ac3d08bd3df47d4ffe261ca563aa674b926cb Mon Sep 17 00:00:00 2001 From: AlexejStukov Date: Thu, 11 Aug 2016 06:55:51 +0200 Subject: [PATCH] Fix member serialization in WebsocketBindingWithMembers (#292) * Fix member serialization in WebsocketBindingWithMembers * pep fixes * allow usage of 'dot'-notation in send_members * replace dots for dictionary * single quotes --- channels/binding/websockets.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/channels/binding/websockets.py b/channels/binding/websockets.py index 044f09c..e0d0d3d 100644 --- a/channels/binding/websockets.py +++ b/channels/binding/websockets.py @@ -147,10 +147,17 @@ class WebsocketBindingWithMembers(WebsocketBinding): def serialize_data(self, instance): data = super(WebsocketBindingWithMembers, self).serialize_data(instance) + member_data = {} for m in self.send_members: - member = getattr(instance, m) + member = instance + for s in m.split('.'): + member = getattr(member, s) if callable(member): - data[m] = self.encoder.encode(member()) + member_data[m.replace('.', '__')] = member() else: - data[m] = self.encoder.encode(member) + member_data[m.replace('.', '__')] = member + member_data = json.loads(self.encoder.encode(member_data)) + # the update never overwrites any value from data, + # because an object can't have two attributes with the same name + data.update(member_data) return data