Я активно использую twisted.internet.defer
в своем пакете, я столкнулся с проблемой, которую я не могу решить, потратив на это 2 дня. Ниже приведен мой проблемный сценарий.Python Twisted Defer returnValue несовместим с dict
# all imports done and correct
class infrastructure: # line 1
@inlineCallbacks
def dict_service(self):
client = MyClient()
services = yield client.listServices() # line 5
ret = (dict(service.name, [cont.container_id for cont in service.instances]) for service in dockerServices)
returnValue(ret) # line 7
Я звоню своему клиенту, который возвращает мне список Услуг. listServices()
возвращение type twisted.internet.defer.ReturnValue
.
class myinterface:
# has infrastructure
def init:
data = dict(
container_services=self._infrastructure.dict_service(),
)
При выполнении этого я становлюсь ниже ошибки, которую я не могу понять. кто-то может помочь.
raise TypeError(repr(o) + \" is not JSON serializable\")\nexceptions.TypeError: <DeferredWithContext at 0x4bfbb48 current result: <twisted.python.failure.Failure <type 'exceptions.NameError'>>> is not JSON serializable\n"
Это потому, что упаковка dict
с returnValue
создает проблемы?
проверки и будет обновлять его. – chaosguru
У меня нет явно json.dumps. но общая стековая таблица выглядит так. – chaosguru
Что-то в вашей программе должно делать _something_ с JSON. Скрученная сама, конечно же, не пытается JSON сериализовать любые значения, которые вы получаете от встроенной функции inlineCallbacks. –