[Checkins] SVN: z3c.json/trunk/ Refactor BasicAuthTransport to reuse as much as possible from Transport
Adam Groszer
agroszer at gmail.com
Sun Aug 29 13:07:26 EDT 2010
Log message for revision 115996:
Refactor BasicAuthTransport to reuse as much as possible from Transport
that enables to do a simple SafeBasicAuthTransport
Changed:
U z3c.json/trunk/CHANGES.txt
U z3c.json/trunk/buildout.cfg
U z3c.json/trunk/src/z3c/json/tests.py
U z3c.json/trunk/src/z3c/json/transport.py
-=-
Modified: z3c.json/trunk/CHANGES.txt
===================================================================
--- z3c.json/trunk/CHANGES.txt 2010-08-29 16:23:40 UTC (rev 115995)
+++ z3c.json/trunk/CHANGES.txt 2010-08-29 17:07:26 UTC (rev 115996)
@@ -5,7 +5,8 @@
0.5.3dev (unreleased)
---------------------
-- ...
+- Refactor BasicAuthTransport to reuse as much as possible from Transport
+ that enables to do a simple SafeBasicAuthTransport
0.5.2 (2009-02-24)
Modified: z3c.json/trunk/buildout.cfg
===================================================================
--- z3c.json/trunk/buildout.cfg 2010-08-29 16:23:40 UTC (rev 115995)
+++ z3c.json/trunk/buildout.cfg 2010-08-29 17:07:26 UTC (rev 115996)
@@ -1,11 +1,16 @@
[buildout]
develop = .
-parts = test checker coverage
+parts = test checker coverage coverage-test
[test]
recipe = zc.recipe.testrunner
eggs = z3c.json [test]
+[coverage-test]
+recipe = zc.recipe.testrunner
+eggs = ${test:eggs}
+defaults = ['--coverage', '../../coverage']
+
[checker]
recipe = lovely.recipe:importchecker
path = src/z3c/json
Modified: z3c.json/trunk/src/z3c/json/tests.py
===================================================================
--- z3c.json/trunk/src/z3c/json/tests.py 2010-08-29 16:23:40 UTC (rev 115995)
+++ z3c.json/trunk/src/z3c/json/tests.py 2010-08-29 17:07:26 UTC (rev 115996)
@@ -38,6 +38,7 @@
from z3c.json.exceptions import ResponseError, ProtocolError
from z3c.json.proxy import JSONRPCProxy
+from z3c.json.transport import BasicAuthTransport
def spaceless(aString):
@@ -546,6 +547,8 @@
global last_request_body
last_request_body = body
+ global last_request_headers
+ last_request_headers = self.headers
global next_response_body
global next_response_status
@@ -596,6 +599,10 @@
global last_request_body
return last_request_body
+def get_last_headers():
+ global last_request_headers
+ return last_request_headers
+
def serve_requests(server):
global json_test_server_stop
while not json_test_server_stop:
@@ -668,6 +675,46 @@
else:
self.fail("ResponseError expected")
+ def testSimpleBasicAuth(self):
+ transport = BasicAuthTransport('user','passwd')
+
+ proxy = JSONRPCProxy('http://localhost:%d/' % self.TEST_PORT,
+ transport=transport)
+ set_next_response_json(True, "jsonrpc")
+ y = proxy.hello()
+ self.assertEqual(y, True)
+
+ x = get_last_request()
+ self.assertEqual(x,
+ """{"params":[],"jsonrpc":"2.0","method":"hello","id":"jsonrpc"}""")
+ x = get_last_headers()
+ self.assertEqual(x['authorization'],
+ 'Basic dXNlcjpwYXNzd2Q=')
+
+ set_next_response_json(123, "jsonrpc")
+ y = proxy.greeting(u'Jessy')
+ self.assertEqual(y, 123)
+
+ x = get_last_request()
+ self.assertEqual(x,
+ """{"params":["Jessy"],"jsonrpc":"2.0","method":"greeting","id":"jsonrpc"}""")
+
+ set_next_response('blabla')
+ try:
+ y = proxy.hello()
+ except ResponseError:
+ pass
+ else:
+ self.fail("ResponseError expected")
+
+ set_next_response('{blabla}')
+ try:
+ y = proxy.hello()
+ except ResponseError:
+ pass
+ else:
+ self.fail("ResponseError expected")
+
dataToTest = [
{'response_json': True,
'call_method': 'hello',
Modified: z3c.json/trunk/src/z3c/json/transport.py
===================================================================
--- z3c.json/trunk/src/z3c/json/transport.py 2010-08-29 16:23:40 UTC (rev 115995)
+++ z3c.json/trunk/src/z3c/json/transport.py 2010-08-29 17:07:26 UTC (rev 115996)
@@ -228,35 +228,14 @@
self.password=password
self.verbose=verbose
- def request(self, host, handler, request_body, verbose=0):
- # issue JSON-RPC request
-
- self.verbose = verbose
-
- h = httplib.HTTP(host)
- h.putrequest("POST", handler)
-
- # required by HTTP/1.1
- h.putheader("Host", host)
-
- # required by JSON-RPC
- h.putheader("User-Agent", self.user_agent)
- h.putheader("Content-Type", "application/json")
- h.putheader("Content-Length", str(len(request_body)))
-
- # basic auth
+ def send_content(self, connection, request_body):
+ # send basic auth
if self.username is not None and self.password is not None:
- h.putheader("AUTHORIZATION", "Basic %s" %
+ connection.putheader("AUTHORIZATION", "Basic %s" %
base64.encodestring("%s:%s" % (self.username, self.password)
).replace("\012", ""))
- h.endheaders()
- if request_body:
- h.send(request_body)
+ Transport.send_content(self, connection, request_body)
- errcode, errmsg, headers = h.getreply()
-
- if errcode != 200:
- raise ProtocolError(host + handler, errcode, errmsg, headers)
-
- return self.parse_response(h.getfile())
+class SafeBasicAuthTransport(SafeTransport, BasicAuthTransport):
+ """Basic AUTH through HTTPS"""
\ No newline at end of file
More information about the checkins
mailing list