It now needs bytes so this
signature = hashlib.md5("%s%s" % (hashlib.md5("%s%s" % (data, self.private_key)).hexdigest(), self.private_key)).hexdigest()
should be
signature = hashlib.md5((hashlib.md5((data+ self.private_key).encode()).hexdigest()+self.private_key).encode()).hexdigest()