added timing and history to webclient
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.00.1 (2012-08-29 18:14:21) rc4
|
Version 2.00.1 (2012-08-29 18:22:03) rc4
|
||||||
|
|||||||
@@ -7,13 +7,16 @@ web2py cookies and web2py forms. An example of usage is at the bottom.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
import time
|
||||||
import urllib
|
import urllib
|
||||||
import urllib2
|
import urllib2
|
||||||
|
|
||||||
|
|
||||||
class WebClient(object):
|
class WebClient(object):
|
||||||
regex = re.compile('\<input name\="_formkey" type\="hidden" value\="(?P<formkey>.+?)" \/\>\<input name\="_formname" type\="hidden" value\="(?P<formname>.+?)" \/\>')
|
regex = re.compile('\<input name\="_formkey" type\="hidden" value\="(?P<formkey>.+?)" \/\>\<input name\="_formname" type\="hidden" value\="(?P<formname>.+?)" \/\>')
|
||||||
|
|
||||||
def __init__(self,app=''):
|
def __init__(self,app=''):
|
||||||
|
self.history = []
|
||||||
self.app = app
|
self.app = app
|
||||||
self.cookies = {}
|
self.cookies = {}
|
||||||
|
|
||||||
@@ -21,9 +24,10 @@ class WebClient(object):
|
|||||||
return self.post(url,data=None,cookies=cookies,headers=headers)
|
return self.post(url,data=None,cookies=cookies,headers=headers)
|
||||||
|
|
||||||
def post(self,url,data=None,cookies=None,headers=None,auth=None):
|
def post(self,url,data=None,cookies=None,headers=None,auth=None):
|
||||||
if data and '_formname' in data:
|
|
||||||
self.get(url,cookies=None,headers=None,auth=None)
|
|
||||||
self.url = self.app+url
|
self.url = self.app+url
|
||||||
|
if data and '_formname' in data and self.history and \
|
||||||
|
self.history[-1][1]!=self.url:
|
||||||
|
self.get(url,cookies=None,headers=None,auth=None)
|
||||||
if cookies is None: cookies = self.cookies
|
if cookies is None: cookies = self.cookies
|
||||||
if auth:
|
if auth:
|
||||||
auth_handler = urllib2.HTTPBasicAuthHandler()
|
auth_handler = urllib2.HTTPBasicAuthHandler()
|
||||||
@@ -42,6 +46,7 @@ class WebClient(object):
|
|||||||
for key,value in headers_list:
|
for key,value in headers_list:
|
||||||
opener.addheaders.append((key,str(value)))
|
opener.addheaders.append((key,str(value)))
|
||||||
if data is not None:
|
if data is not None:
|
||||||
|
self.method = 'POST'
|
||||||
# if there is only one form, set _formname automatically
|
# if there is only one form, set _formname automatically
|
||||||
if not '_formname' in data and len(self.forms)==1:
|
if not '_formname' in data and len(self.forms)==1:
|
||||||
data['_formname'] = self.forms.keys()[0]
|
data['_formname'] = self.forms.keys()[0]
|
||||||
@@ -50,9 +55,14 @@ class WebClient(object):
|
|||||||
data['_formname'] in self.forms:
|
data['_formname'] in self.forms:
|
||||||
data['_formkey'] = self.forms[data['_formname']]
|
data['_formkey'] = self.forms[data['_formname']]
|
||||||
data = urllib.urlencode(data)
|
data = urllib.urlencode(data)
|
||||||
|
t0 = time.time()
|
||||||
self.request = opener.open(self.url,data)
|
self.request = opener.open(self.url,data)
|
||||||
|
self.time = time.time()-t0
|
||||||
else:
|
else:
|
||||||
|
self.method = 'GET'
|
||||||
|
t0 = time.time()
|
||||||
self.request = opener.open(self.url)
|
self.request = opener.open(self.url)
|
||||||
|
self.time = time.time()-t0
|
||||||
self.status = self.request.getcode()
|
self.status = self.request.getcode()
|
||||||
self.text = self.request.read()
|
self.text = self.request.read()
|
||||||
self.headers = dict(self.request.headers)
|
self.headers = dict(self.request.headers)
|
||||||
@@ -61,6 +71,7 @@ class WebClient(object):
|
|||||||
self.forms = {}
|
self.forms = {}
|
||||||
for match in WebClient.regex.finditer(self.text):
|
for match in WebClient.regex.finditer(self.text):
|
||||||
self.forms[match.group('formname')] = match.group('formkey')
|
self.forms[match.group('formname')] = match.group('formkey')
|
||||||
|
self.history.append((self.method,self.url,self.status,self.time))
|
||||||
|
|
||||||
def test_web2py_registration_and_login():
|
def test_web2py_registration_and_login():
|
||||||
session = WebClient('http://127.0.0.1:8000/welcome/default/')
|
session = WebClient('http://127.0.0.1:8000/welcome/default/')
|
||||||
@@ -88,6 +99,9 @@ def test_web2py_registration_and_login():
|
|||||||
# check we are always in the same session
|
# check we are always in the same session
|
||||||
assert session_id_welcome == session.cookies['session_id_welcome']
|
assert session_id_welcome == session.cookies['session_id_welcome']
|
||||||
|
|
||||||
|
for method, url, status, t in session.history:
|
||||||
|
print method, url, status, t
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test_web2py_registration_and_login()
|
test_web2py_registration_and_login()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user