QNetworkReply вызывает segfault

Я пытаюсь написать какой-нибудь API-клиент для приложения на основе PyQt4. И, следуя этой документации, я написал этот код:

from PyQt4 import QtCore, QtNetwork


class API(QtCore.QObject):
    def processResponse(self, response):
        print 'response'
        response.deleteLater()

    def processError(self, error):
        print 'error'

    def authenticate(self, authUrl, login, password):
        manager = QtNetwork.QNetworkAccessManager()
        request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl))
        reply = manager.get(request)
        reply.error.connect(self.processError)
        reply.finished.connect(self.processResponse)
        return reply

    def authenticate2(self, authUrl, login, password):
        manager = QtNetwork.QNetworkAccessManager()
        request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl))
        self.reply = manager.get(request)
        self.reply.error.connect(self.processError)
        self.reply.finished.connect(self.processResponse)
        return self.reply


p = API()
z = p.authenticate('http://dev.dentv.ru/edda/v1/token/', 'test', 'test')
print z
print z.isFinished()

Первая проблема - ни один из сигналов (processResponse, processError) вызывается (даже если я объявляю соединение с self.connect(.., SIGNAL(..), ..)). Вторая проблема заключается в том, что этот код вызывает ошибку в последней строке, когда я звоню isFinished метод. Если я вызываю этот метод внутри метода API, он работает правильно.

Я думал, что причина в том, что reply объект собирают мусор или как-то удаляют, поэтому я написал вторую версию authenticate метод с явным reply привязка к переменной объекта. Это также вызывает segfault.

В чем проблема с моим кодом?

1 ответ

Решение

Я идиот:(

Проблема была решена путем связывания manager переменная объекта, а не reply, Менеджер был мусор (или что-то в этом роде).

Другие вопросы по тегам