@@ -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