Saya sedang mengembangkan API dengan Flask dan flask_restful dan CLI yang cocok untuk proyek yang sedang saya kerjakan dan sekarang menghadapi sesuatu yang tidak dapat saya singkirkan. Di sisi API, ketika saya mendapatkan permintaan pada titik akhir tertentu, saya menggunakan pustaka PrettyTable untuk membangun meja berwarna di terminal. Saya sedang membangun tabel sebagai berikut:

t = PrettyTable([ Color.CGREEN2 + 'Username' + Color.CEND,
                  Color.CGREEN2 + 'Dataset'  + Color.CEND,
                  Color.CGREEN2 + 'Files' + Color.CEND])
for ds in db.getAllDatasets( username ):
  t.add_row(  [username, ds.dataset, len(ds.files)] )
return t.__str__()

Saya telah mencoba mengembalikan objek t , tetapi tidak dapat serial JSON. Dengan memanggil metode __str__ saya berhasil mengembalikannya, tetapi tidak dapat mencetak output dengan benar di terminal saya. Kode yang saya gunakan untuk itu adalah:

try:
  r = requests.post(url='http://my-server:my-port/my-endpoint', data=data)
  print (str(r.text))
except requests.exceptions.ConnectionError:
  MSG_ERROR (self, "Failed to connect to LPS Cluster.")

Dan output yang saya dapatkan adalah:

"+----------+---------+-------+\n| \u001b[92mUsername\u001b[0m | \u001b[92mDataset\u001b[0m | \u001b[92mFiles\u001b[0m |\n+----------+---------+-------+\n+----------+---------+-------+"

Ada kemungkinan untuk melihat bahwa karakter berada di tempat yang tepat dan seharusnya berfungsi, tetapi ternyata tidak.

Saya kira itu mungkin ada hubungannya dengan tanda kutip itu di awal dan di akhir string, tapi saya tidak yakin dan tidak tahu harus berbuat apa.

Bisakah kalian membantu saya melakukannya dengan benar?

2
Gabriel Milan 28 Februari 2020, 20:08

1 menjawab

Jawaban Terbaik

Nah, saya menemukan cara untuk memperbaikinya. Di sisi API, saya mengubah respons menjadi JSON dengan melakukan:

return jsonify(
    error_code=HTTPStatus.OK,
    message=t.get_string()
)

Bukannya return t.__str__() saya sebelumnya.

Setelah itu, di CLI, saya melakukan:

print (r.json()['message'])

Dan itu bekerja seperti pesona!

Terimakasih semuanya.

1
Gabriel Milan 28 Februari 2020, 18:31