Словарь Python со списком, как описать это в экономном коде заглушки? - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь отправить словарь 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 команда?

1 Ответ

1 голос
/ 15 марта 2012

Похоже, проблема в коде возврата вашего обработчика.Вы, вероятно, ставите строковое значение вместо списка.Вы можете разместить свой код обработчика?

...