@@ -29,7 +29,7 @@ def __init__(self, packet_type=EVENT, data=None, namespace=None, id=None,
2929 self .namespace = namespace
3030 self .id = id
3131 if self .uses_binary_events and \
32- (binary or (binary is None and self ._data_is_binary (
32+ (binary or (binary is None and self .data_is_binary (
3333 self .data ))):
3434 if self .packet_type == EVENT :
3535 self .packet_type = BINARY_EVENT
@@ -51,7 +51,7 @@ def encode(self):
5151 """
5252 encoded_packet = str (self .packet_type )
5353 if self .packet_type == BINARY_EVENT or self .packet_type == BINARY_ACK :
54- data , attachments = self ._deconstruct_binary (self .data )
54+ data , attachments = self .deconstruct_binary (self .data )
5555 encoded_packet += str (len (attachments )) + '-'
5656 else :
5757 data = self .data
@@ -119,61 +119,65 @@ def add_attachment(self, attachment):
119119 raise ValueError ('Unexpected binary attachment' )
120120 self .attachments .append (attachment )
121121 if self .attachment_count == len (self .attachments ):
122- self .reconstruct_binary (self .attachments )
122+ self .data = self . reconstruct_binary (self . data , self .attachments )
123123 return True
124124 return False
125125
126- def reconstruct_binary (self , attachments ):
126+ @classmethod
127+ def reconstruct_binary (cls , data , attachments ):
127128 """Reconstruct a decoded packet using the given list of binary
128129 attachments.
129130 """
130- self .data = self ._reconstruct_binary_internal (self .data ,
131- self .attachments )
131+ return cls ._reconstruct_binary_internal (data , attachments )
132132
133- def _reconstruct_binary_internal (self , data , attachments ):
133+ @classmethod
134+ def _reconstruct_binary_internal (cls , data , attachments ):
134135 if isinstance (data , list ):
135- return [self ._reconstruct_binary_internal (item , attachments )
136+ return [cls ._reconstruct_binary_internal (item , attachments )
136137 for item in data ]
137138 elif isinstance (data , dict ):
138139 if data .get ('_placeholder' ) and 'num' in data :
139140 return attachments [data ['num' ]]
140141 else :
141- return {key : self ._reconstruct_binary_internal (value ,
142- attachments )
142+ return {key : cls ._reconstruct_binary_internal (value ,
143+ attachments )
143144 for key , value in data .items ()}
144145 else :
145146 return data
146147
147- def _deconstruct_binary (self , data ):
148+ @classmethod
149+ def deconstruct_binary (cls , data ):
148150 """Extract binary components in the packet."""
149151 attachments = []
150- data = self ._deconstruct_binary_internal (data , attachments )
152+ data = cls ._deconstruct_binary_internal (data , attachments )
151153 return data , attachments
152154
153- def _deconstruct_binary_internal (self , data , attachments ):
155+ @classmethod
156+ def _deconstruct_binary_internal (cls , data , attachments ):
154157 if isinstance (data , bytes ):
155158 attachments .append (data )
156159 return {'_placeholder' : True , 'num' : len (attachments ) - 1 }
157160 elif isinstance (data , list ):
158- return [self ._deconstruct_binary_internal (item , attachments )
161+ return [cls ._deconstruct_binary_internal (item , attachments )
159162 for item in data ]
160163 elif isinstance (data , dict ):
161- return {key : self ._deconstruct_binary_internal (value , attachments )
164+ return {key : cls ._deconstruct_binary_internal (value , attachments )
162165 for key , value in data .items ()}
163166 else :
164167 return data
165168
166- def _data_is_binary (self , data ):
169+ @classmethod
170+ def data_is_binary (cls , data ):
167171 """Check if the data contains binary components."""
168172 if isinstance (data , bytes ):
169173 return True
170174 elif isinstance (data , list ):
171175 return functools .reduce (
172- lambda a , b : a or b , [self . _data_is_binary (item )
176+ lambda a , b : a or b , [cls . data_is_binary (item )
173177 for item in data ], False )
174178 elif isinstance (data , dict ):
175179 return functools .reduce (
176- lambda a , b : a or b , [self . _data_is_binary (item )
180+ lambda a , b : a or b , [cls . data_is_binary (item )
177181 for item in data .values ()],
178182 False )
179183 else :
0 commit comments