code: def format(self):
          
          if any(x not in (0, 1) for x in [self.fin, self.rsv1, self.rsv2, self.rsv3]):
              raise ValueError("not 0 or 1")
          if self.opcode not in ABNF.OPCODES:
              raise ValueError("Invalid OPCODE")
          length = len(self.data)
          if length >= ABNF.LENGTH_63:
              raise ValueError("data is too long")
  
          frame_header = chr(self.fin << 7
                             | self.rsv1 << 6 | self.rsv2 << 5 | self.rsv3 << 4
                             | self.opcode)
          if length < ABNF.LENGTH_7:
              frame_header += chr(self.mask << 7 | length)
              frame_header = six.b(frame_header)
          elif length < ABNF.LENGTH_16:
              frame_header += chr(self.mask << 7 | 0x7e)
              frame_header = six.b(frame_header)
              frame_header += struct.pack("!H", length)
          else:
              frame_header += chr(self.mask << 7 | 0x7f)
              frame_header = six.b(frame_header)
              frame_header += struct.pack("!Q", length)
  
          if not self.mask:
              return frame_header + self.data
          else:
              mask_key = self.get_mask_key(4)
              return frame_header + self._get_masked(mask_key)
docs: format this object to string(byte array) to send data to server.