Я пытаюсь отправить словарь Python {"1": ["2", 3, 4]}
. Сервер и клиент как здесь , используется только TSocket.TServerSocket(unix_socket="socket")
и
TSocket.TSocket(unix_socket="socket")
соответственно. Функция возвращает словарь с именем get_stats()
.
Файл stats.thrift
struct Stat{
1: required string login
2: required i32 connections}
service Stats{
map<string,list<Stat>> get_stats()}
код генерации thrift --gen py stats.thrift
Но при вызове функции я получаю сообщение об ошибке на стороне сервера:
ERROR:root:'str' object has no attribute 'write'
Traceback (most recent call last):
*more text*
File "gen-py/stats/Stats.py", line 189, in write
iter15.write(oprot)
AttributeError: 'str' object has no attribute 'write'
Функция write()
def write(self, oprot):
if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
return
oprot.writeStructBegin('get_stats_result')
if self.success is not None:
oprot.writeFieldBegin('success', TType.MAP, 0)
oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.success))
for kiter13,viter14 in self.success.items():
oprot.writeString(kiter13)
oprot.writeListBegin(TType.STRUCT, len(viter14))
for iter15 in viter14:
iter15.write(oprot)
oprot.writeListEnd()
oprot.writeMapEnd()
oprot.writeFieldEnd()
oprot.writeFieldStop()
oprot.writeStructEnd()
почему бережливый код:
for iter15 in viter14:
iter15.write(oprot)
Вопросы:
Почему вызывается метод write()
для типа str
?
Где я не прав?
В stats.thrift
?
В коде сервера или клиента?
В thrift --gen
команда?