code: def encode(self):
          
          if len(self.data) == 0:
              log.debug("Encoding an empty DAT packet")
          data = self.data
          if not isinstance(self.data, bytes):
              data = self.data.encode('ascii')
          fmt = b"!HH%ds" % len(data)
          self.buffer = struct.pack(fmt,
                                    self.opcode,
                                    self.blocknumber,
                                    data)
          return self
docs: Encode the DAT packet. This method populates self.buffer, and
          returns self for easy method chaining.