Wed, 17 Jun 2020 20:18:54 +0200
Checked the reported security related issue reports generated by the new security checker.
4258
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
7360
9190402e4505
Updated copyright for 2020.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7253
diff
changeset
|
3 | # Copyright (c) 2015 - 2020 Detlev Offenbach <detlev@die-offenbachs.de> |
4258
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a xmlrpc client for Qt. |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
7192
a22eee00b052
Started removing runtime support for Python2 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
10 | |
a22eee00b052
Started removing runtime support for Python2 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
11 | import xmlrpc.client as xmlrpc |
4258
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | from PyQt5.QtCore import QObject, QUrl, QByteArray |
7253
50dbe65a1334
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
14 | from PyQt5.QtNetwork import ( |
50dbe65a1334
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
15 | QNetworkAccessManager, QNetworkRequest, QNetworkReply |
50dbe65a1334
Continued to resolve code style issue M841.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7229
diff
changeset
|
16 | ) |
4258
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | from E5Network.E5NetworkProxyFactory import proxyAuthenticationRequired |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | try: |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | from E5Network.E5SslErrorHandler import E5SslErrorHandler |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | SSL_AVAILABLE = True |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | except ImportError: |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | SSL_AVAILABLE = False |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | class E5XmlRpcClient(QObject): |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | Class implementing a xmlrpc client for Qt. |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | def __init__(self, url, parent=None): |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | Constructor |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | @param url xmlrpc handler URL (string or QUrl) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | @param parent parent object (QObject) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | super(E5XmlRpcClient, self).__init__(parent) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | # attributes for the network objects |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | self.__networkManager = QNetworkAccessManager(self) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | self.__networkManager.proxyAuthenticationRequired.connect( |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | proxyAuthenticationRequired) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | self.__networkManager.finished.connect(self.__replyFinished) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | if SSL_AVAILABLE: |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | self.__sslErrorHandler = E5SslErrorHandler(self) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | self.__networkManager.sslErrors.connect(self.__sslErrors) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | self.__callmap = {} |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | self.__request = QNetworkRequest(QUrl(url)) |
4326
e52318f11812
Change code to make eric compatible to PyQt 5.5 (QByteArry issue).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4258
diff
changeset
|
51 | self.__request.setRawHeader(b"User-Agent", b"E5XmlRpcClient/1.0") |
4258
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | self.__request.setHeader(QNetworkRequest.ContentTypeHeader, "text/xml") |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | def setUrl(self, url): |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | Public slot to set the xmlrpc handler URL. |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | @param url xmlrpc handler URL (string or QUrl) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | url = QUrl(url) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | if url.isValid(): |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | self.__request.setUrl(url) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | def call(self, method, args, responseCallback, errorCallback): |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | Public method to call the remote server. |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | @param method name of the remote method to be called (string) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | @param args tuple of method arguments (tuple) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | @param responseCallback method to be called with the returned |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | result as a tuple (function) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | @param errorCallback method to be called in case of an error |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | with error code and error string (function) |
7628
f904d0eef264
Checked the reported security related issue reports generated by the new security checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
74 | @exception TypeError raised to indicate an illegal 'args' parameter |
f904d0eef264
Checked the reported security related issue reports generated by the new security checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
75 | type |
4258
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | """ |
7628
f904d0eef264
Checked the reported security related issue reports generated by the new security checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
77 | if not isinstance(args, tuple): |
f904d0eef264
Checked the reported security related issue reports generated by the new security checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
78 | raise TypeError("argument 'args' must be tuple") |
4258
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | data = xmlrpc.dumps(args, method).encode("utf-8") |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | reply = self.__networkManager.post( |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | self.__request, QByteArray(data)) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | self.__callmap[reply] = (responseCallback, errorCallback) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | def abort(self): |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | Public method to abort all calls. |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | for reply in list(self.__callmap): |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | if reply.isRunning(): |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | reply.abort() |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | def __sslErrors(self, reply, errors): |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | Private slot to handle SSL errors. |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | @param reply reference to the reply object (QNetworkReply) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | @param errors list of SSL errors (list of QSslError) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | ignored = self.__sslErrorHandler.sslErrorsReply(reply, errors)[0] |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | if ignored == E5SslErrorHandler.NotIgnored and reply in self.__callmap: |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | self.__callmap[reply][1](xmlrpc.TRANSPORT_ERROR, self.tr( |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | "SSL Error")) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | def __replyFinished(self, reply): |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | Private slot handling the receipt of a reply. |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | @param reply reference to the finished reply (QNetworkReply) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | """ |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | if reply not in self.__callmap: |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | return |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | if reply.error() != QNetworkReply.NoError: |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | self.__callmap[reply][1](xmlrpc.TRANSPORT_ERROR, |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | reply.errorString()) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | else: |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | data = bytes(reply.readAll()).decode("utf-8") |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | try: |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | data = xmlrpc.loads(data)[0] |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121 | self.__callmap[reply][0](data) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | except xmlrpc.Fault as fault: |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | self.__callmap[reply][1](fault.faultCode, fault.faultString) |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125 | reply.deleteLater() |
d141e2bb94cc
Added a Qt based xmlrpc client.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126 | del self.__callmap[reply] |