git.fiddlerwoaroof.com
Browse code

Added cookie support to proxy, changed from urllib to urllib2

Ed L authored on 06/06/2011 22:03:04
Showing 3 changed files
... ...
@@ -33,7 +33,8 @@
33 33
 #
34 34
 #
35 35
 import copy
36
-import urllib
36
+import cookielib
37
+import urllib2
37 38
 import urlparse
38 39
 import itertools
39 40
 import traceback
... ...
@@ -139,12 +140,19 @@ class JSONRPCProxy(object):
139 140
 		self.serviceURL, self._path = self._transformURL(host, path)
140 141
 		self.customize(self._eventhandler)
141 142
 
143
+		cj = cookielib.CookieJar()
144
+		self._opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
142 145
 
143 146
 
147
+
148
+	def _set_opener(self, opener):
149
+		self._opener  = opener
150
+		return self
151
+
144 152
 	def __getattr__(self, name):
145 153
 		if self._serviceName != None:
146 154
 			name = "%s.%s" % (self._serviceName, name)
147
-		return self.__class__(self.serviceURL, path=self._path, serviceName=name).customize(type(self._eventhandler))
155
+		return self.__class__(self.serviceURL, path=self._path, serviceName=name).customize(type(self._eventhandler))._set_opener(self._opener)
148 156
 
149 157
 
150 158
 	def _get_postdata(self, args=None, kwargs=None):
... ...
@@ -160,11 +168,15 @@ class JSONRPCProxy(object):
160 168
 		result.append('')
161 169
 		return '/'.join(result)
162 170
 
171
+	def _post(self, url, data):
172
+		return self._opener.open(url, data)
173
+
163 174
 	def __call__(self, *args, **kwargs):
164 175
 
165 176
 		url = self._get_url()
166 177
 		postdata = self._get_postdata(args, kwargs)
167
-		respdata = urllib.urlopen(url, postdata).read()
178
+		#respdata = urllib2.urlopen(url, postdata).read()
179
+		respdata = self._post(url, postdata).read()
168 180
 		resp = Response.from_dict(jsonrpc.jsonutil.decode(respdata))
169 181
 		resp = self._eventhandler.proc_response(resp)
170 182
 
... ...
@@ -191,7 +203,7 @@ class JSONRPCProxy(object):
191 203
 		if hasattr(methods, 'items'): methods = methods.items()
192 204
 		data = [ getattr(self, k)._get_postdata(*v) for k, v in methods ]
193 205
 		postdata = '[%s]' % ','.join(data)
194
-		respdata = urllib.urlopen(self._get_url(), postdata).read()
206
+		respdata = urllib2.urlopen(self._get_url(), postdata).read()
195 207
 		resp = Response.from_json(respdata)
196 208
 		try:
197 209
 			result = resp.get_result()
... ...
@@ -12,34 +12,6 @@ class TestJSONRPCProxy(unittest.TestCase):
12 12
 	def setUp(self):
13 13
 		self.proxy = jsonrpc.proxy.JSONRPCProxy('http://localhost:8007', path='aaa')
14 14
 
15
-	def test_eventhandler(self):
16
-		eventhandler = mock.MagicMock(spec=jsonrpc.proxy.ProxyEvents)
17
-		args = (1,2)
18
-		kwargs = {'a':1, 'b':2}
19
-
20
-		def get_params(self, args, kwargs):
21
-			print args, kwargs
22
-			return args, kwargs
23
-		eventhandler.get_params.side_effect = get_params
24
-
25
-		eventhandler.proc_response.side_effect = lambda _, data: data
26
-
27
-		self.proxy = jsonrpc.proxy.JSONRPCProxy.from_url('http://localhost:8007')
28
-		self.proxy.customize(lambda *a: eventhandler)
29
-		self.assertEqual(self.proxy._get_url(), 'http://localhost:8007/')
30
-
31
-		self.proxy.add(*args)
32
-		self.assertTrue(eventhandler.get_params.called)
33
-		eventhandler.get_params.assert_called_once_with( args, {} )
34
-		self.assertTrue(eventhandler.procresponse.called)
35
-
36
-		eventhandler.reset_mock()
37
-
38
-		self.proxy.add(**kwargs)
39
-		self.assertTrue(eventhandler.get_params.called)
40
-		eventhandler.get_params.assert_called_once_with( (), kwargs )
41
-		self.assertTrue(eventhandler.procresponse.called)
42
-
43 15
 
44 16
 	def test_url(self):
45 17
 		self.proxy = jsonrpc.proxy.JSONRPCProxy.from_url('http://localhost:8007')
... ...
@@ -1,6 +1,6 @@
1 1
 from distutils.core import setup
2 2
 
3
-VERSION = "0.99a"
3
+VERSION = "0.99a01"
4 4
 URLBASE = "https://github.com/NCMI/jsonrpc"
5 5
 URLMAP = {
6 6
 	"daily": "tarball/master"