aboutsummaryrefslogtreecommitdiffstats
path: root/toys/brhute
diff options
context:
space:
mode:
Diffstat (limited to 'toys/brhute')
-rw-r--r--toys/brhute/brhute.py104
-rw-r--r--toys/brhute/brhute_multitprocessing_broken.py121
-rw-r--r--toys/brhute/brhute_threaded.py75
-rw-r--r--toys/brhute/brhute_twisted.py75
-rw-r--r--toys/brhute/contrib/httplib_pipelining_orig.py99
-rw-r--r--toys/brhute/grbrute.py90
-rw-r--r--toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt1023
-rw-r--r--toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt1023
-rw-r--r--toys/brhute/grequests.py182
-rw-r--r--toys/brhute/httplib_pipelining.py96
-rw-r--r--toys/brhute/pphidden.py29
-rw-r--r--toys/brhute/pphidden_async.py83
-rw-r--r--toys/brhute/threaded_resolver.py302
-rw-r--r--toys/brhute/twisted_http.py26
-rw-r--r--toys/brhute/twisted_http_persistent.py39
-rw-r--r--toys/brhute/twisted_http_simultaneous.py39
16 files changed, 3406 insertions, 0 deletions
diff --git a/toys/brhute/brhute.py b/toys/brhute/brhute.py
new file mode 100644
index 0000000..851d742
--- /dev/null
+++ b/toys/brhute/brhute.py
@@ -0,0 +1,104 @@
+from collections import deque
+import time
+import asyncore
+from asynhttp import http_evented # in brhute repository
+import asyncdns # sudo pip install asyncdns
+import warnings
+
+# grbrute - asynchronous URL fetcher based on asyhttp
+# Uses multiple simultaneous connections and multiple requests per connections
+# 2013, Laurent Ghigonis <laurent@p1sec.com>
+
+# Python grequests ressources :
+# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous
+# https://github.com/kennethreitz/grequests/issues/13
+# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e
+# https://gist.github.com/ibrahima/3153647 - request_queue.py
+# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus
+
+# XXX multiple processes, autodetect and repartir connections
+# DNS resolving with asyncdns
+
+class Brhute_connection:
+ def __init__(self, url_iter, ip, port, req_per_connection, cb_response,
+ interval=0, verbose=False):
+ self.url_iter = url_iter
+ self.ip = ip
+ self.port = port
+ self.req_per_connection = req_per_connection
+ self.cb_response_user = cb_response
+ self.interval = interval
+ self.verbose = verbose
+ self.ongoing = 0
+ self.hev = http_evented.http_evented((ip, port), onConnected=self._connected)
+
+ def get(self, host, url):
+ if self.verbose:
+ print "XXX Brhute_connection.get"
+ headers = {'Host': host}
+ body = None
+ self.hev.make_HTTP_request("GET", url, body, headers,
+ self._cb_response)
+ self.ongoing += 1
+
+ def _connected(self):
+ self._send()
+
+ def _send(self):
+ while self.ongoing < self.req_per_connection:
+ # get an URL to send
+ try:
+ (host, url) = next(self.url_iter)
+ except StopIteration, e:
+ return
+ if self.verbose:
+ print "[-] %s" % url
+ # send the url
+ self.get(host, url)
+
+ def _cb_response(self, response):
+ self.ongoing -= 1
+ if self.cb_response_user:
+ self.cb_response_user(response)
+ self._send()
+ time.sleep(self.interval)
+
+class Brhute_ip:
+ """ Fetch URLs from one IP
+ url_iter is the iterator that provides the URLs.
+ cb_response should return True for the processing to continue, and False
+ to terminate.
+ If you want to integrate it in a gevent driven program, use block=False"""
+ def __init__(self, url_iter, ip, port=80, cb_response=None,
+ nb_connections=3, req_per_connection=10, interval=0,
+ verbose=False, block=True):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't expect this to work")
+ self.url_iter = url_iter
+ self.ip = ip
+ self.port = port
+ self.cb_response_user = cb_response
+ self.nb_connections = nb_connections
+ self.req_per_connection = req_per_connection
+ self.interval = interval
+ self.verbose = verbose
+
+ self.conns = deque()
+ for i in range(nb_connections):
+ self.conns.append(Brhute_connection(url_iter, ip, port,
+ req_per_connection, cb_response, interval,
+ verbose))
+ if block:
+ asyncore.loop()
+
+class Brhute_multi_ip:
+ """Fetch URLs from multiple IPs pointing to the same content"""
+ def __init__(self):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't excpect this to work")
+
+class Brhute:
+ """Fetch URLs"""
+ def __init__(self):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't excpect this to work")
diff --git a/toys/brhute/brhute_multitprocessing_broken.py b/toys/brhute/brhute_multitprocessing_broken.py
new file mode 100644
index 0000000..fb7f19d
--- /dev/null
+++ b/toys/brhute/brhute_multitprocessing_broken.py
@@ -0,0 +1,121 @@
+from collections import deque
+import time
+import threading
+import Queue
+import asyncore
+from asynhttp import http_evented # in brhute repository
+import asyncdns # sudo pip install asyncdns
+import warnings
+
+# grbrute - asynchronous URL fetcher based on asyhttp
+# Uses multiple simultaneous connections and multiple requests per connections
+# 2013, Laurent Ghigonis <laurent@p1sec.com>
+
+# Python grequests ressources :
+# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous
+# https://github.com/kennethreitz/grequests/issues/13
+# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e
+# https://gist.github.com/ibrahima/3153647 - request_queue.py
+# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus
+
+# XXX multiple processes, autodetect and repartir connections
+# DNS resolving with asyncdns
+
+class Brhute_connection():
+ def __init__(self, queue, ip, port, req_per_connection, cb_response,
+ interval=0, verbose=False):
+ self.queue = queue
+ self.ip = ip
+ self.port = port
+ self.req_per_connection = req_per_connection
+ self.cb_response_user = cb_response
+ self.interval = interval
+ self.verbose = verbose
+ self.ongoing = 0
+ self.hev = http_evented.http_evented((ip, port), onConnected=self._connected)
+ asyncore.loop()
+
+ def get(self, host, url):
+ if self.verbose:
+ print "XXX Brhute_connection.get"
+ headers = {'Host': host}
+ body = None
+ self.hev.make_HTTP_request("GET", url, body, headers,
+ self._cb_response)
+ self.ongoing += 1
+
+ def _connected(self):
+ self._send()
+
+ def _send(self):
+ if self.ongoing == self.req_per_connection:
+ return
+ # get an URL to send
+ try:
+ print "XXX queue get"
+ try:
+ host, url = self.queue.get(False)
+ except Queue.Empty:
+ return
+ except StopIteration, e:
+ return
+ if self.verbose:
+ print "[-] %s" % url
+ # send the url
+ self.get(host, url)
+ self.queue.task_done()
+
+ def _cb_response(self, response):
+ self.ongoing -= 1
+ if self.cb_response_user:
+ self.cb_response_user(response)
+ self._send()
+ time.sleep(self.interval)
+
+class Brhute_ip:
+ """ Fetch URLs from one IP
+ url_iter is the iterator that provides the URLs.
+ cb_response should return True for the processing to continue, and False
+ to terminate.
+ If you want to integrate it in a gevent driven program, use block=False"""
+ def __init__(self, url_iter, ip, port=80, cb_response=None,
+ nb_connections=3, req_per_connection=10, interval=0,
+ verbose=False, block=True):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't expect this to work")
+ self.url_iter = url_iter
+ self.ip = ip
+ self.port = port
+ self.cb_response_user = cb_response
+ self.nb_connections = nb_connections
+ self.req_per_connection = req_per_connection
+ self.interval = interval
+ self.verbose = verbose
+ queue = multiprocessing.JoinableQueue()
+
+ self.conns = deque()
+ for i in range(nb_connections):
+ p = multiprocessing.Process(target=self._proc,
+ args=(queue, ip, port,
+ req_per_connection, cb_response,
+ interval, verbose))
+ p.start()
+ self.conns.append(p)
+ for host, url in url_iter:
+ queue.put((host, url))
+ time.sleep(60) # XXX
+
+ def _proc(self, queue, ip, port, req_per_connection, cb_response, interval, verbose):
+ Brhute_connection(queue, ip, port, req_per_connection, cb_response, interval, verbose)
+
+class Brhute_multi_ip:
+ """Fetch URLs from multiple IPs pointing to the same content"""
+ def __init__(self):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't excpect this to work")
+
+class Brhute:
+ """Fetch URLs"""
+ def __init__(self):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't excpect this to work")
diff --git a/toys/brhute/brhute_threaded.py b/toys/brhute/brhute_threaded.py
new file mode 100644
index 0000000..22ab2bb
--- /dev/null
+++ b/toys/brhute/brhute_threaded.py
@@ -0,0 +1,75 @@
+from collections import deque
+import time
+import httplib_pipelining
+import threading
+import threaded_resolver
+import Queue
+import warnings
+
+# grbrute - asynchronous URL fetcher using threads and HTTP pipelining
+# Makes multiple simultaneous connections and multiple requests per connections
+# 2013, Laurent Ghigonis <laurent@p1sec.com>
+
+# XXX multiple processes, autodetect and repartir connections
+# DNS resolving with asyncdns
+
+class Brhute_connection(threading.Thread):
+ def __init__(self, ip, port, queue, req_per_connection, cb_response,
+ interval=0, verbose=False):
+ threading.Thread.__init__(self)
+ self.queue = queue
+ self.ip = ip
+ self.port = port
+ self.req_per_connection = req_per_connection
+ self.cb_response_user = cb_response
+ self.interval = interval
+ self.verbose = verbose
+
+ def run(self):
+ conn = httplib_pipelining.HTTP_pipeline(self.ip, self.queue, self.cb_response_user)
+ conn.run()
+
+class Brhute_ip:
+ """ Fetch URLs from one IP
+ url_iter is the iterator that provides the URLs.
+ cb_response should return True for the processing to continue, and False
+ to terminate.
+ If you want to integrate it in a gevent driven program, use block=False"""
+ def __init__(self, url_iter, ip, port=80, cb_response=None,
+ nb_connections=3, req_per_connection=10, interval=0,
+ verbose=False, block=True):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't expect this to work")
+ self.url_iter = url_iter
+ self.ip = ip
+ self.port = port
+ self.cb_response_user = cb_response
+ self.nb_connections = nb_connections
+ self.req_per_connection = req_per_connection
+ self.interval = interval
+ self.verbose = verbose
+
+ queue = Queue.Queue()
+
+ for i in range(nb_connections):
+ c = Brhute_connection(ip, port, queue,
+ req_per_connection, cb_response,
+ interval, verbose)
+ c.setDaemon(True)
+ c.start()
+
+ for host, url in url_iter:
+ queue.put(url)
+ queue.join()
+
+class Brhute_multi_ip:
+ """Fetch URLs from multiple IPs pointing to the same content"""
+ def __init__(self):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't excpect this to work")
+
+class Brhute:
+ """Fetch URLs"""
+ def __init__(self):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't excpect this to work")
diff --git a/toys/brhute/brhute_twisted.py b/toys/brhute/brhute_twisted.py
new file mode 100644
index 0000000..22ab2bb
--- /dev/null
+++ b/toys/brhute/brhute_twisted.py
@@ -0,0 +1,75 @@
+from collections import deque
+import time
+import httplib_pipelining
+import threading
+import threaded_resolver
+import Queue
+import warnings
+
+# grbrute - asynchronous URL fetcher using threads and HTTP pipelining
+# Makes multiple simultaneous connections and multiple requests per connections
+# 2013, Laurent Ghigonis <laurent@p1sec.com>
+
+# XXX multiple processes, autodetect and repartir connections
+# DNS resolving with asyncdns
+
+class Brhute_connection(threading.Thread):
+ def __init__(self, ip, port, queue, req_per_connection, cb_response,
+ interval=0, verbose=False):
+ threading.Thread.__init__(self)
+ self.queue = queue
+ self.ip = ip
+ self.port = port
+ self.req_per_connection = req_per_connection
+ self.cb_response_user = cb_response
+ self.interval = interval
+ self.verbose = verbose
+
+ def run(self):
+ conn = httplib_pipelining.HTTP_pipeline(self.ip, self.queue, self.cb_response_user)
+ conn.run()
+
+class Brhute_ip:
+ """ Fetch URLs from one IP
+ url_iter is the iterator that provides the URLs.
+ cb_response should return True for the processing to continue, and False
+ to terminate.
+ If you want to integrate it in a gevent driven program, use block=False"""
+ def __init__(self, url_iter, ip, port=80, cb_response=None,
+ nb_connections=3, req_per_connection=10, interval=0,
+ verbose=False, block=True):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't expect this to work")
+ self.url_iter = url_iter
+ self.ip = ip
+ self.port = port
+ self.cb_response_user = cb_response
+ self.nb_connections = nb_connections
+ self.req_per_connection = req_per_connection
+ self.interval = interval
+ self.verbose = verbose
+
+ queue = Queue.Queue()
+
+ for i in range(nb_connections):
+ c = Brhute_connection(ip, port, queue,
+ req_per_connection, cb_response,
+ interval, verbose)
+ c.setDaemon(True)
+ c.start()
+
+ for host, url in url_iter:
+ queue.put(url)
+ queue.join()
+
+class Brhute_multi_ip:
+ """Fetch URLs from multiple IPs pointing to the same content"""
+ def __init__(self):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't excpect this to work")
+
+class Brhute:
+ """Fetch URLs"""
+ def __init__(self):
+ warnings.warn("XXX WARNING: WORK IN PROGRESS")
+ warnings.warn("XXX WARNING: Don't excpect this to work")
diff --git a/toys/brhute/contrib/httplib_pipelining_orig.py b/toys/brhute/contrib/httplib_pipelining_orig.py
new file mode 100644
index 0000000..75e9aad
--- /dev/null
+++ b/toys/brhute/contrib/httplib_pipelining_orig.py
@@ -0,0 +1,99 @@
+## {{{ http://code.activestate.com/recipes/576673/ (r5)
+from httplib import HTTPConnection, _CS_IDLE
+import urlparse
+
+def pipeline(domain,pages,max_out_bound=4,debuglevel=0):
+ pagecount = len(pages)
+ conn = HTTPConnection(domain)
+ conn.set_debuglevel(debuglevel)
+ respobjs = [None]*pagecount
+ finished = [False]*pagecount
+ data = [None]*pagecount
+ headers = {'Host':domain,'Content-Length':0,'Connection':'Keep-Alive'}
+
+ while not all(finished):
+ # Send
+ out_bound = 0
+ for i,page in enumerate(pages):
+ if out_bound >= max_out_bound:
+ break
+ elif page and not finished[i] and respobjs[i] is None:
+ if debuglevel > 0:
+ print 'Sending request for %r...' % (page,)
+ conn._HTTPConnection__state = _CS_IDLE # FU private variable!
+ conn.request("GET", page, None, headers)
+ respobjs[i] = conn.response_class(conn.sock, strict=conn.strict, method=conn._method)
+ out_bound += 1
+ # Try to read a response
+ for i,resp in enumerate(respobjs):
+ if resp is None:
+ continue
+ if debuglevel > 0:
+ print 'Retrieving %r...' % (pages[i],)
+ out_bound -= 1
+ skip_read = False
+ resp.begin()
+ if debuglevel > 0:
+ print ' %d %s' % (resp.status, resp.reason)
+ if 200 <= resp.status < 300:
+ # Ok
+ data[i] = resp.read()
+ cookie = resp.getheader('Set-Cookie')
+ if cookie is not None:
+ headers['Cookie'] = cookie
+ skip_read = True
+ finished[i] = True
+ respobjs[i] = None
+ elif 300 <= resp.status < 400:
+ # Redirect
+ loc = resp.getheader('Location')
+ respobjs[i] = None
+ parsed = loc and urlparse.urlparse(loc)
+ if not parsed:
+ # Missing or empty location header
+ data[i] = (resp.status, resp.reason)
+ finished[i] = True
+ elif parsed.netloc != '' and parsed.netloc != host:
+ # Redirect to another host
+ data[i] = (resp.status, resp.reason, loc)
+ finished[i] = True
+ else:
+ path = urlparse.urlunparse(parsed._replace(scheme='',netloc='',fragment=''))
+ if debuglevel > 0:
+ print ' Updated %r to %r' % (pages[i],path)
+ pages[i] = path
+ elif resp.status >= 400:
+ # Failed
+ data[i] = (resp.status, resp.reason)
+ finished[i] = True
+ respobjs[i] = None
+ if resp.will_close:
+ # Connection (will be) closed, need to resend
+ conn.close()
+ if debuglevel > 0:
+ print ' Connection closed'
+ for j,f in enumerate(finished):
+ if not f and respobj[j] is not None:
+ if debuglevel > 0:
+ print ' Discarding out-bound request for %r' % (pages[j],)
+ respobj[j] = None
+ break
+ elif not skip_read:
+ resp.read() # read any data
+ if any(not f and respobjs[j] is None for j,f in enumerate(finished)):
+ # Send another pending request
+ break
+ else:
+ break # All respobjs are None?
+ return data
+
+if __name__ == '__main__':
+ domain = 'en.wikipedia.org'
+ pages = ('/wiki/HTTP_pipelining', '/wiki/HTTP', '/wiki/HTTP_persistent_connection')
+ data = pipeline(domain,pages,max_out_bound=2,debuglevel=1)
+ for i,page in enumerate(data):
+ print
+ print '==== Page %r ====' % (pages[i],)
+ print page[:512]
+## end of http://code.activestate.com/recipes/576673/ }}}
+
diff --git a/toys/brhute/grbrute.py b/toys/brhute/grbrute.py
new file mode 100644
index 0000000..fbdc8bc
--- /dev/null
+++ b/toys/brhute/grbrute.py
@@ -0,0 +1,90 @@
+import requests
+import grequests
+import gevent
+from collections import deque
+import time
+import warnings
+
+# grbrute - asynchronous URL fetcher based on grequests
+# Uses multiple simultaneous connections and reuses them (HTTP/1.1)
+# 2013, Laurent Ghigonis <laurent@p1sec.com>
+
+# XXX urllib3 and therefore requests do not support pipelining ...
+
+# Python grequests ressources :
+# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous
+# https://github.com/kennethreitz/grequests/issues/13
+# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e
+# https://gist.github.com/ibrahima/3153647 - request_queue.py
+# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus
+
+class SessionQueue:
+ def __init__(self, pool, cb_response):
+ self.pool = pool
+ self.cb_response = cb_response
+ self.session = requests.Session()
+ self.ongoing = 0
+
+ def add(self, url):
+ req = grequests.get(url, session=self.session,
+ hooks = {'response' : self._cb_response_session})
+ grequests.send(req, self.pool, exception_handler=self._cb_exception)
+ self.ongoing += 1
+
+ def _cb_response_session(self, res, verify=None, cert=None, proxies=None, timeout=None, stream=None):
+ self.ongoing -= 1
+ if self.cb_response(res) is False:
+ self.pool.kill()
+
+ def _cb_exception(self, req, e):
+ print "ERROR: sending of %s failed, retrying :\n%s" % (req.url, e)
+ grequests.send(req, self.pool, exception_handler=self._cb_exception)
+
+class Grbrute:
+ """ url_iter is the iterator that provides the URLs.
+ cb_response should return True for the processing to continue, and False
+ to terminate.
+ If you want to integrate it in a gevent driven program, use block=False"""
+ def __init__(self, url_iter, cb_response=None,
+ nb_sessions=3, req_per_session=10, sleep=0,
+ verbose=False, block=True):
+ self.url_iter = url_iter
+ self.cb_response_user = cb_response
+ self.nb_sessions = nb_sessions
+ self.req_per_session = req_per_session
+ self.sleep = sleep
+ self.verbose = verbose
+ self.pool = grequests.Pool()
+ self.sessions = deque()
+ self.ongoing_total = 0
+ for i in range(nb_sessions):
+ self.sessions.append(SessionQueue(self.pool, self._cb_response))
+ self._send()
+ if block:
+ self.pool.join()
+
+ def _send(self):
+ while self.ongoing_total < self.nb_sessions * self.req_per_session:
+ # get an URL to send
+ try:
+ url = next(self.url_iter)
+ except StopIteration, e:
+ return
+ if self.verbose:
+ print "[-] %s" % url
+ # select a session that has room to send
+ while self.sessions[0].ongoing == self.req_per_session:
+ self.sessions.rotate(1)
+ # send URL using selected sessions
+ self.sessions[0].add(url)
+ self.ongoing_total += 1
+ self.sessions.rotate(1)
+
+ def _cb_response(self, res):
+ self.ongoing_total -= 1
+ cont = True
+ if self.cb_response_user:
+ cont = self.cb_response_user(res)
+ self._send()
+ time.sleep(self.sleep)
+ return cont
diff --git a/toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt b/toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt
new file mode 100644
index 0000000..cf85bda
--- /dev/null
+++ b/toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt
@@ -0,0 +1,1023 @@
+ ncalls tottime percall cumtime percall filename:lineno(function)
+ 2/1 0.001 0.000 3.165 3.165 <string>:1(<module>)
+ 1 0.000 0.000 0.000 0.000 <string>:1(ParseResult)
+ 1 0.000 0.000 0.000 0.000 <string>:1(SplitResult)
+ 1 0.000 0.000 0.000 0.000 <string>:1(Url)
+ 612 0.003 0.000 0.004 0.000 <string>:1(fileno)
+ 2210 0.008 0.000 0.013 0.000 <string>:8(__new__)
+ 1 0.001 0.001 0.017 0.017 Cookie.py:206(<module>)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:232(CookieError)
+ 257 0.001 0.000 0.001 0.000 Cookie.py:308(<genexpr>)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:403(Morsel)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:549(BaseCookie)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:665(SimpleCookie)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:679(SerialCookie)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:705(SmartCookie)
+ 1 0.001 0.001 0.002 0.002 Queue.py:1(<module>)
+ 320 0.007 0.000 0.016 0.000 Queue.py:107(put)
+ 1 0.000 0.000 0.000 0.000 Queue.py:13(Full)
+ 320 0.005 0.000 0.015 0.000 Queue.py:150(get)
+ 1 0.000 0.000 0.000 0.000 Queue.py:17(Queue)
+ 1 0.000 0.000 0.000 0.000 Queue.py:212(PriorityQueue)
+ 3 0.000 0.000 0.000 0.000 Queue.py:22(__init__)
+ 1 0.000 0.000 0.000 0.000 Queue.py:231(LifoQueue)
+ 3 0.000 0.000 0.000 0.000 Queue.py:234(_init)
+ 640 0.002 0.000 0.003 0.000 Queue.py:237(_qsize)
+ 320 0.001 0.000 0.002 0.000 Queue.py:240(_put)
+ 320 0.001 0.000 0.002 0.000 Queue.py:243(_get)
+ 1 0.000 0.000 0.000 0.000 Queue.py:9(Empty)
+ 1 0.000 0.000 0.000 0.000 StringIO.py:30(<module>)
+ 1 0.000 0.000 0.000 0.000 StringIO.py:42(StringIO)
+ 643 0.001 0.000 0.001 0.000 UserDict.py:17(__getitem__)
+ 4492 0.015 0.000 0.021 0.000 UserDict.py:57(get)
+ 5132 0.008 0.000 0.008 0.000 UserDict.py:69(__contains__)
+ 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:12(<module>)
+ 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:49(LWPCookieJar)
+ 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:1(<module>)
+ 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:8(MozillaCookieJar)
+ 1 0.000 0.000 0.000 0.000 __future__.py:48(<module>)
+ 1 0.000 0.000 0.000 0.000 __future__.py:74(_Feature)
+ 7 0.000 0.000 0.000 0.000 __future__.py:75(__init__)
+ 3 0.001 0.000 0.166 0.055 __init__.py:1(<module>)
+ 1 0.000 0.000 0.000 0.000 __init__.py:1001(Logger)
+ 8 0.000 0.000 0.000 0.000 __init__.py:1016(__init__)
+ 290 0.001 0.000 0.009 0.000 __init__.py:1034(debug)
+ 3 0.000 0.000 0.000 0.000 __init__.py:104(CFunctionType)
+ 30 0.000 0.000 0.002 0.000 __init__.py:1046(info)
+ 2 0.000 0.000 0.000 0.000 __init__.py:1185(addHandler)
+ 320 0.008 0.000 0.008 0.000 __init__.py:1230(getEffectiveLevel)
+ 320 0.002 0.000 0.010 0.000 __init__.py:1244(isEnabledFor)
+ 1 0.000 0.000 0.000 0.000 __init__.py:1252(RootLogger)
+ 1 0.000 0.000 0.000 0.000 __init__.py:1258(__init__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:1266(LoggerAdapter)
+ 7 0.000 0.000 0.003 0.000 __init__.py:1420(getLogger)
+ 14 0.000 0.000 0.000 0.000 __init__.py:147(_check_size)
+ 1 0.000 0.000 0.000 0.000 __init__.py:159(py_object)
+ 1 0.000 0.000 0.000 0.000 __init__.py:168(c_short)
+ 1 0.000 0.000 0.000 0.000 __init__.py:172(c_ushort)
+ 1 0.000 0.000 0.000 0.000 __init__.py:176(c_long)
+ 1 0.000 0.000 0.000 0.000 __init__.py:18(<module>)
+ 1 0.000 0.000 0.000 0.000 __init__.py:180(c_ulong)
+ 1 0.000 0.000 0.000 0.000 __init__.py:189(c_int)
+ 1 0.000 0.000 0.000 0.000 __init__.py:193(c_uint)
+ 9 0.000 0.000 0.000 0.000 __init__.py:194(_acquireLock)
+ 1 0.000 0.000 0.000 0.000 __init__.py:197(c_float)
+ 1 0.000 0.000 0.000 0.000 __init__.py:201(c_double)
+ 9 0.000 0.000 0.000 0.000 __init__.py:203(_releaseLock)
+ 1 0.000 0.000 0.000 0.000 __init__.py:205(c_longdouble)
+ 1 0.000 0.000 0.000 0.000 __init__.py:214(LogRecord)
+ 1 0.000 0.000 0.000 0.000 __init__.py:226(c_ubyte)
+ 1 0.000 0.000 0.000 0.000 __init__.py:233(c_byte)
+ 1 0.000 0.000 0.000 0.000 __init__.py:238(c_char)
+ 1 0.003 0.003 0.005 0.005 __init__.py:24(<module>)
+ 1 0.000 0.000 0.000 0.000 __init__.py:243(c_char_p)
+ 1 0.000 0.000 0.000 0.000 __init__.py:255(c_void_p)
+ 1 0.000 0.000 0.000 0.000 __init__.py:260(c_bool)
+ 1 0.000 0.000 0.000 0.000 __init__.py:275(c_wchar_p)
+ 1 0.000 0.000 0.000 0.000 __init__.py:278(c_wchar)
+ 1 0.000 0.000 0.000 0.000 __init__.py:320(CDLL)
+ 1 0.000 0.000 0.000 0.000 __init__.py:324(Formatter)
+ 3 0.000 0.000 0.001 0.000 __init__.py:337(__init__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:34(NullHandler)
+ 3 0.000 0.000 0.000 0.000 __init__.py:347(_FuncPtr)
+ 4 0.000 0.000 0.000 0.000 __init__.py:363(__getattr__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:368(__init__)
+ 4 0.000 0.000 0.000 0.000 __init__.py:370(__getitem__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:376(PyDLL)
+ 1 0.004 0.004 0.006 0.006 __init__.py:4(<module>)
+ 1 0.000 0.000 0.000 0.000 __init__.py:416(LibraryLoader)
+ 2 0.000 0.000 0.000 0.000 __init__.py:417(__init__)
+ 1 0.001 0.001 0.371 0.371 __init__.py:42(<module>)
+ 1 0.000 0.000 0.000 0.000 __init__.py:462(BufferingFormatter)
+ 3 0.000 0.000 0.000 0.000 __init__.py:480(PYFUNCTYPE)
+ 3 0.000 0.000 0.000 0.000 __init__.py:481(CFunctionType)
+ 5 0.000 0.000 0.000 0.000 __init__.py:49(normalize_encoding)
+ 1 0.006 0.006 0.009 0.009 __init__.py:5(<module>)
+ 1 0.000 0.000 0.000 0.000 __init__.py:504(Filter)
+ 1 0.000 0.000 0.000 0.000 __init__.py:541(Filterer)
+ 10 0.000 0.000 0.000 0.000 __init__.py:546(__init__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:588(Handler)
+ 2 0.000 0.000 0.000 0.000 __init__.py:597(__init__)
+ 2 0.000 0.000 0.000 0.000 __init__.py:614(createLock)
+ 1 0.000 0.000 0.000 0.000 __init__.py:67(NullHandler)
+ 1 0.000 0.000 0.000 0.000 __init__.py:7(CertificateError)
+ 2 0.000 0.000 0.017 0.008 __init__.py:71(search_function)
+ 1 0.000 0.000 0.000 0.000 __init__.py:739(StreamHandler)
+ 3 0.000 0.000 0.000 0.000 __init__.py:78(CFUNCTYPE)
+ 1 0.000 0.000 0.000 0.000 __init__.py:806(FileHandler)
+ 1 0.000 0.000 0.000 0.000 __init__.py:866(PlaceHolder)
+ 3 0.000 0.000 0.000 0.000 __init__.py:872(__init__)
+ 10 0.000 0.000 0.000 0.000 __init__.py:879(append)
+ 1 0.001 0.001 0.165 0.165 __init__.py:9(<module>)
+ 1 0.000 0.000 0.000 0.000 __init__.py:913(Manager)
+ 1 0.000 0.000 0.000 0.000 __init__.py:918(__init__)
+ 7 0.000 0.000 0.003 0.000 __init__.py:927(getLogger)
+ 7 0.002 0.000 0.003 0.000 __init__.py:959(_fixupParents)
+ 1 0.001 0.001 0.036 0.036 __init__.py:98(<module>)
+ 2 0.000 0.000 0.000 0.000 __init__.py:983(_fixupChildren)
+ 1 0.000 0.000 0.000 0.000 _abcoll.py:127(__subclasshook__)
+ 1 0.000 0.000 0.000 0.000 _abcoll.py:24(_hasattr)
+ 2 0.000 0.000 0.000 0.000 _abcoll.py:26(<genexpr>)
+ 320 0.002 0.000 0.021 0.000 _abcoll.py:334(get)
+ 1 0.000 0.000 0.000 0.000 _collections.py:22(RecentlyUsedContainer)
+ 6 0.000 0.000 0.000 0.000 _collections.py:38(__init__)
+ 320 0.005 0.000 0.019 0.000 _collections.py:45(__getitem__)
+ 3 0.000 0.000 0.000 0.000 _collections.py:52(__setitem__)
+ 1 0.000 0.000 0.001 0.001 _collections.py:7(<module>)
+ 1 0.000 0.000 0.000 0.000 _endian.py:22(_swapped_meta)
+ 1 0.000 0.000 0.000 0.000 _endian.py:4(<module>)
+ 1 0.000 0.000 0.000 0.000 _endian.py:45(BigEndianStructure)
+ 320 0.002 0.000 0.002 0.000 abc.py:125(__instancecheck__)
+ 1 0.000 0.000 0.000 0.000 abc.py:145(__subclasscheck__)
+ 16 0.001 0.000 0.003 0.000 abc.py:83(__new__)
+ 16 0.000 0.000 0.001 0.000 abc.py:86(<genexpr>)
+ 290 0.014 0.000 0.198 0.001 adapters.py:105(build_response)
+ 320 0.007 0.000 0.069 0.000 adapters.py:133(get_connection)
+ 320 0.004 0.000 0.020 0.000 adapters.py:154(request_url)
+ 320 0.004 0.000 0.011 0.000 adapters.py:169(add_headers)
+ 320/1 0.016 0.000 3.136 3.136 adapters.py:188(send)
+ 1 0.000 0.000 0.000 0.000 adapters.py:32(BaseAdapter)
+ 6 0.000 0.000 0.000 0.000 adapters.py:35(__init__)
+ 1 0.000 0.000 0.000 0.000 adapters.py:45(HTTPAdapter)
+ 6 0.000 0.000 0.001 0.000 adapters.py:49(__init__)
+ 6 0.000 0.000 0.001 0.000 adapters.py:70(init_poolmanager)
+ 320 0.002 0.000 0.003 0.000 adapters.py:77(cert_verify)
+ 1 0.000 0.000 0.000 0.000 adapters.py:9(<module>)
+ 1 0.000 0.000 0.003 0.003 api.py:12(<module>)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1008(_HelpAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1010(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1027(_VersionAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1052(_SubParsersAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1054(_ChoicesPseudoAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1124(FileType)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1167(Namespace)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1174(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1188(_ActionsContainer)
+ 3 0.000 0.000 0.002 0.001 argparse.py:1190(__init__)
+ 13 0.000 0.000 0.000 0.000 argparse.py:122(_callable)
+ 34 0.000 0.000 0.000 0.000 argparse.py:1242(register)
+ 13 0.000 0.000 0.000 0.000 argparse.py:1246(_registry_get)
+ 5 0.000 0.000 0.001 0.000 argparse.py:1271(add_argument)
+ 2 0.000 0.000 0.000 0.000 argparse.py:1311(add_argument_group)
+ 5 0.000 0.000 0.000 0.000 argparse.py:1321(_add_action)
+ 3 0.000 0.000 0.000 0.000 argparse.py:1385(_get_positional_kwargs)
+ 2 0.000 0.000 0.000 0.000 argparse.py:1401(_get_optional_kwargs)
+ 5 0.000 0.000 0.000 0.000 argparse.py:1436(_pop_action_class)
+ 3 0.000 0.000 0.000 0.000 argparse.py:1440(_get_handler)
+ 5 0.000 0.000 0.000 0.000 argparse.py:1449(_check_conflict)
+ 1 0.000 0.000 0.000 0.000 argparse.py:147(_AttributeHolder)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1485(_ArgumentGroup)
+ 2 0.000 0.000 0.000 0.000 argparse.py:1487(__init__)
+ 5 0.000 0.000 0.000 0.000 argparse.py:1508(_add_action)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1518(_MutuallyExclusiveGroup)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1538(ArgumentParser)
+ 1 0.000 0.000 0.005 0.005 argparse.py:1556(__init__)
+ 5 0.000 0.000 0.000 0.000 argparse.py:1677(_add_action)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1689(_get_positional_actions)
+ 1 0.000 0.000 0.002 0.002 argparse.py:1697(parse_args)
+ 1 0.000 0.000 0.002 0.002 argparse.py:1704(parse_known_args)
+ 1 0.000 0.000 0.002 0.002 argparse.py:1735(_parse_known_args)
+ 3 0.000 0.000 0.000 0.000 argparse.py:1782(take_action)
+ 1 0.000 0.000 0.000 0.000 argparse.py:182(HelpFormatter)
+ 1 0.000 0.000 0.002 0.002 argparse.py:1880(consume_positionals)
+ 1 0.000 0.000 0.002 0.002 argparse.py:2021(_match_arguments_partial)
+ 3 0.000 0.000 0.000 0.000 argparse.py:2037(_parse_optional)
+ 3 0.000 0.000 0.000 0.000 argparse.py:2138(_get_nargs_pattern)
+ 3 0.000 0.000 0.000 0.000 argparse.py:2182(_get_values)
+ 3 0.000 0.000 0.000 0.000 argparse.py:2231(_get_value)
+ 3 0.000 0.000 0.000 0.000 argparse.py:2256(_check_value)
+ 1 0.000 0.000 0.000 0.000 argparse.py:230(_Section)
+ 1 0.000 0.000 0.000 0.000 argparse.py:656(RawDescriptionHelpFormatter)
+ 1 0.000 0.000 0.000 0.000 argparse.py:667(RawTextHelpFormatter)
+ 1 0.000 0.000 0.000 0.000 argparse.py:678(ArgumentDefaultsHelpFormatter)
+ 1 0.000 0.000 0.000 0.000 argparse.py:712(ArgumentError)
+ 1 0.000 0.000 0.000 0.000 argparse.py:732(ArgumentTypeError)
+ 1 0.000 0.000 0.000 0.000 argparse.py:741(Action)
+ 1 0.003 0.003 0.006 0.006 argparse.py:76(<module>)
+ 5 0.000 0.000 0.000 0.000 argparse.py:792(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:832(_StoreAction)
+ 3 0.000 0.000 0.000 0.000 argparse.py:834(__init__)
+ 3 0.000 0.000 0.000 0.000 argparse.py:863(__call__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:867(_StoreConstAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:869(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:890(_StoreTrueAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:892(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:907(_StoreFalseAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:924(_AppendAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:961(_AppendConstAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:987(_CountAction)
+ 1 0.000 0.000 0.000 0.000 ascii.py:13(Codec)
+ 1 0.000 0.000 0.000 0.000 ascii.py:20(IncrementalEncoder)
+ 1 0.000 0.000 0.000 0.000 ascii.py:24(IncrementalDecoder)
+ 1 0.000 0.000 0.000 0.000 ascii.py:28(StreamWriter)
+ 1 0.000 0.000 0.000 0.000 ascii.py:31(StreamReader)
+ 1 0.000 0.000 0.000 0.000 ascii.py:34(StreamConverter)
+ 1 0.000 0.000 0.000 0.000 ascii.py:41(getregentry)
+ 1 0.000 0.000 0.000 0.000 ascii.py:8(<module>)
+ 1 0.000 0.000 0.000 0.000 atexit.py:37(register)
+ 1 0.000 0.000 0.000 0.000 atexit.py:6(<module>)
+ 1 0.000 0.000 0.000 0.000 auth.py:33(AuthBase)
+ 1 0.000 0.000 0.000 0.000 auth.py:40(HTTPBasicAuth)
+ 1 0.000 0.000 0.000 0.000 auth.py:51(HTTPProxyAuth)
+ 1 0.000 0.000 0.000 0.000 auth.py:58(HTTPDigestAuth)
+ 1 0.000 0.000 0.001 0.001 auth.py:8(<module>)
+ 1 0.001 0.001 0.001 0.001 base64.py:3(<module>)
+ 1 0.000 0.000 0.000 0.000 bisect.py:1(<module>)
+ 1 0.000 0.000 0.000 0.000 calendar.py:126(Calendar)
+ 1 0.000 0.000 0.000 0.000 calendar.py:132(__init__)
+ 1 0.000 0.000 0.000 0.000 calendar.py:138(setfirstweekday)
+ 1 0.000 0.000 0.000 0.000 calendar.py:21(IllegalMonthError)
+ 1 0.000 0.000 0.000 0.000 calendar.py:255(TextCalendar)
+ 1 0.000 0.000 0.000 0.000 calendar.py:28(IllegalWeekdayError)
+ 1 0.000 0.000 0.000 0.000 calendar.py:372(HTMLCalendar)
+ 1 0.000 0.000 0.000 0.000 calendar.py:47(_localized_month)
+ 1 0.000 0.000 0.000 0.000 calendar.py:484(TimeEncoding)
+ 1 0.000 0.000 0.000 0.000 calendar.py:496(LocaleTextCalendar)
+ 2 0.000 0.000 0.000 0.000 calendar.py:52(__init__)
+ 1 0.000 0.000 0.000 0.000 calendar.py:531(LocaleHTMLCalendar)
+ 1 0.002 0.002 0.002 0.002 calendar.py:6(<module>)
+ 1 0.000 0.000 0.000 0.000 calendar.py:66(_localized_day)
+ 2 0.000 0.000 0.000 0.000 calendar.py:71(__init__)
+ 1 0.000 0.000 0.000 0.000 certs.py:13(<module>)
+ 1 0.000 0.000 0.000 0.000 certs.py:18(where)
+ 1 0.012 0.012 0.044 0.044 cgi.py:16(<module>)
+ 869 0.006 0.000 0.009 0.000 cgi.py:292(_parseparam)
+ 290 0.009 0.000 0.019 0.000 cgi.py:304(parse_header)
+ 1 0.000 0.000 0.000 0.000 cgi.py:328(MiniFieldStorage)
+ 1 0.000 0.000 0.000 0.000 cgi.py:353(FieldStorage)
+ 1 0.000 0.000 0.000 0.000 cgi.py:775(FormContentDict)
+ 1 0.000 0.000 0.000 0.000 cgi.py:795(SvFormContentDict)
+ 1 0.000 0.000 0.000 0.000 cgi.py:829(InterpFormContentDict)
+ 1 0.000 0.000 0.000 0.000 cgi.py:857(FormContent)
+ 2 0.000 0.000 0.000 0.000 codecs.py:77(__new__)
+ 1 0.001 0.001 0.001 0.001 collections.py:1(<module>)
+ 3 0.004 0.001 0.005 0.002 collections.py:13(namedtuple)
+ 145 0.000 0.000 0.000 0.000 collections.py:43(<genexpr>)
+ 21 0.000 0.000 0.000 0.000 collections.py:60(<genexpr>)
+ 21 0.000 0.000 0.000 0.000 collections.py:61(<genexpr>)
+ 1 0.007 0.007 0.285 0.285 compat.py:5(<module>)
+ 1 0.000 0.000 0.000 0.000 connectionpool.py:112(ConnectionPool)
+ 3 0.000 0.000 0.000 0.000 connectionpool.py:121(__init__)
+ 1 0.000 0.000 0.000 0.000 connectionpool.py:130(HTTPConnectionPool)
+ 3 0.000 0.000 0.002 0.001 connectionpool.py:171(__init__)
+ 30 0.001 0.000 0.003 0.000 connectionpool.py:189(_new_conn)
+ 320 0.010 0.000 0.041 0.000 connectionpool.py:200(_get_conn)
+ 290 0.002 0.000 0.017 0.000 connectionpool.py:233(_put_conn)
+ 320/1 0.016 0.000 3.136 3.136 connectionpool.py:261(_make_request)
+ 320/1 0.019 0.000 3.136 3.136 connectionpool.py:325(urlopen)
+ 1 0.000 0.000 0.000 0.000 connectionpool.py:497(HTTPSConnectionPool)
+ 1 0.007 0.007 0.162 0.162 connectionpool.py:7(<module>)
+ 1 0.000 0.000 0.000 0.000 connectionpool.py:74(VerifiedHTTPSConnection)
+ 2060 0.015 0.000 0.037 0.000 cookielib.py:1175(vals_sorted_by_key)
+ 2060 0.007 0.000 0.044 0.000 cookielib.py:1180(deepvalues)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:1199(Absent)
+ 1 0.000 0.000 0.002 0.002 cookielib.py:1201(CookieJar)
+ 1208 0.021 0.000 0.058 0.000 cookielib.py:1217(__init__)
+ 320 0.002 0.000 0.002 0.000 cookielib.py:1246(_cookies_for_request)
+ 320 0.002 0.000 0.004 0.000 cookielib.py:1253(_cookie_attrs)
+ 320 0.012 0.000 0.051 0.000 cookielib.py:1312(add_cookie_header)
+ 290 0.004 0.000 0.035 0.000 cookielib.py:1555(make_cookies)
+ 290 0.009 0.000 0.057 0.000 cookielib.py:1635(extract_cookies)
+ 320 0.005 0.000 0.022 0.000 cookielib.py:1691(clear_expired_cookies)
+ 2060 0.008 0.000 0.008 0.000 cookielib.py:1710(__iter__)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:1731(LoadError)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:1733(FileCookieJar)
+ 1 0.003 0.003 0.053 0.053 cookielib.py:26(<module>)
+ 610 0.001 0.000 0.001 0.000 cookielib.py:43(_debug)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:707(Cookie)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:805(CookiePolicy)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:838(DefaultCookiePolicy)
+ 1208 0.007 0.000 0.007 0.000 cookielib.py:848(__init__)
+ 320 0.005 0.000 0.091 0.000 cookies.py:108(get_cookie_header)
+ 1 0.000 0.000 0.000 0.000 cookies.py:131(CookieConflictError)
+ 1 0.000 0.000 0.000 0.000 cookies.py:136(RequestsCookieJar)
+ 1 0.000 0.000 0.000 0.000 cookies.py:20(MockRequest)
+ 1740 0.016 0.000 0.069 0.000 cookies.py:257(update)
+ 320 0.002 0.000 0.042 0.000 cookies.py:309(copy)
+ 610 0.008 0.000 0.065 0.000 cookies.py:32(__init__)
+ 888 0.015 0.000 0.055 0.000 cookies.py:374(cookiejar_from_dict)
+ 320 0.000 0.000 0.000 0.000 cookies.py:65(get_new_headers)
+ 1 0.000 0.000 0.001 0.001 cookies.py:7(<module>)
+ 1 0.000 0.000 0.000 0.000 cookies.py:73(MockResponse)
+ 290 0.001 0.000 0.001 0.000 cookies.py:80(__init__)
+ 580 0.001 0.000 0.001 0.000 cookies.py:87(info)
+ 290 0.005 0.000 0.094 0.000 cookies.py:94(extract_cookies_to_jar)
+ 1 0.001 0.001 0.031 0.031 decoder.py:2(<module>)
+ 1 0.000 0.000 0.007 0.007 decoder.py:244(JSONDecoder)
+ 1 0.000 0.000 0.000 0.000 decoder.py:276(__init__)
+ 1 0.000 0.000 0.000 0.000 dns.py:27(DNSError)
+ 30/1 0.000 0.000 0.000 0.000 dns.py:46(resolve_ipv4)
+ 1 0.000 0.000 0.000 0.000 dns.py:7(<module>)
+ 1 0.000 0.000 0.000 0.000 encoder.py:119(__init__)
+ 1 0.000 0.000 0.004 0.004 encoder.py:2(<module>)
+ 1 0.000 0.000 0.000 0.000 encoder.py:87(JSONEncoder)
+ 1 0.001 0.001 0.001 0.001 exceptions.py:10(<module>)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:10(HTTPError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:12(RequestException)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:15(PoolError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:17(HTTPError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:26(ConnectionError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:26(SSLError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:30(SSLError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:31(DecodeError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:34(Timeout)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:38(MaxRetryError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:38(URLRequired)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:42(TooManyRedirects)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:46(MissingSchema)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:50(InvalidSchema)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:54(HostChangedError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:54(InvalidURL)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:65(TimeoutError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:70(EmptyPoolError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:75(ClosedPoolError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:80(LocationParseError)
+ 1 0.001 0.001 0.001 0.001 exceptions.py:9(<module>)
+ 1 0.005 0.005 0.133 0.133 filepost.py:7(<module>)
+ 652 0.010 0.000 0.021 0.000 genericpath.py:15(exists)
+ 6 0.000 0.000 0.001 0.000 gettext.py:130(_expand_lang)
+ 3 0.000 0.000 0.002 0.001 gettext.py:421(find)
+ 3 0.000 0.000 0.002 0.001 gettext.py:461(translation)
+ 3 0.001 0.000 0.002 0.001 gettext.py:527(dgettext)
+ 3 0.000 0.000 0.002 0.001 gettext.py:565(gettext)
+ 1 0.001 0.001 0.401 0.401 grbrute.py:1(<module>)
+ 1 0.000 0.000 0.000 0.000 grbrute.py:20(SessionQueue)
+ 3 0.000 0.000 0.002 0.001 grbrute.py:21(__init__)
+ 320 0.007 0.000 0.061 0.000 grbrute.py:27(add)
+ 290/1 0.013 0.000 3.133 3.133 grbrute.py:33(_cb_response_session)
+ 1 0.000 0.000 0.000 0.000 grbrute.py:42(Grbrute)
+ 2/1 0.000 0.000 3.163 3.163 grbrute.py:47(__init__)
+ 291 0.010 0.000 0.082 0.000 grbrute.py:65(_send)
+ 290/1 0.010 0.000 3.133 3.133 grbrute.py:82(_cb_response)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:114(SuccessGreenletLink)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:127(FailureGreenletLink)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:140(Greenlet)
+ 320 0.008 0.000 0.009 0.000 greenlet.py:146(__init__)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:16(SpawnedLink)
+ 933 0.002 0.000 0.002 0.000 greenlet.py:160(ready)
+ 320 0.001 0.000 0.001 0.000 greenlet.py:164(successful)
+ 55 0.011 0.000 89.067 1.619 greenlet.py:202(throw)
+ 320 0.001 0.000 0.001 0.000 greenlet.py:23(__init__)
+ 320 0.003 0.000 0.003 0.000 greenlet.py:236(start)
+ 60 0.000 0.000 0.000 0.000 greenlet.py:284(kill)
+ 1 0.001 0.001 0.003 0.003 greenlet.py:3(<module>)
+ 320 0.001 0.000 0.002 0.000 greenlet.py:30(__hash__)
+ 320 0.006 0.000 0.006 0.000 greenlet.py:361(_report_result)
+ 320/1 0.018 0.000 3.158 3.158 greenlet.py:384(run)
+ 933 0.007 0.000 0.014 0.000 greenlet.py:400(rawlink)
+ 320 0.004 0.000 0.011 0.000 greenlet.py:411(link)
+ 320 0.001 0.000 0.012 0.000 greenlet.py:455(link_exception)
+ 320 0.007 0.000 0.018 0.000 greenlet.py:459(_notify_links)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:47(SuccessSpawnedLink)
+ 55 0.001 0.000 89.072 1.619 greenlet.py:475(_kill)
+ 7 0.006 0.001 3.174 0.453 greenlet.py:480(joinall)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:540(LinkedExited)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:544(LinkedCompleted)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:555(LinkedKilled)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:568(LinkedFailed)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:59(FailureSpawnedLink)
+ 320 0.001 0.000 0.002 0.000 greenlet.py:66(__call__)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:71(GreenletLink)
+ 320 0.004 0.000 0.050 0.000 grequests.py:112(send)
+ 1 0.004 0.004 0.029 0.029 grequests.py:14(<module>)
+ 1 0.000 0.000 0.000 0.000 grequests.py:69(AsyncRequest)
+ 320 0.003 0.000 0.004 0.000 grequests.py:78(__init__)
+ 320/1 0.016 0.000 3.137 3.137 grequests.py:97(send)
+ 1 0.000 0.000 0.000 0.000 gzip.py:35(GzipFile)
+ 1 0.000 0.000 0.000 0.000 gzip.py:4(<module>)
+ 10 0.000 0.000 0.000 0.000 hashlib.py:109(<lambda>)
+ 1 0.001 0.001 0.001 0.001 hashlib.py:55(<module>)
+ 1 0.001 0.001 0.001 0.001 heapq.py:31(<module>)
+ 1 0.000 0.000 0.000 0.000 hooks.py:14(<module>)
+ 918 0.002 0.000 0.002 0.000 hooks.py:20(default_hooks)
+ 290/1 0.010 0.000 3.135 3.135 hooks.py:29(dispatch_hook)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1004(HTTP)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1098(HTTPSConnection)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1120(HTTPS)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1153(HTTPException)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1158(NotConnected)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1161(InvalidURL)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1164(UnknownProtocol)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1169(UnknownTransferEncoding)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1172(UnimplementedFileMode)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1175(IncompleteRead)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1189(ImproperConnectionState)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1192(CannotSendRequest)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1195(CannotSendHeader)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1198(ResponseNotReady)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1201(BadStatusLine)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1209(LineAndFileWrapper)
+ 1 0.000 0.000 0.000 0.000 httplib.py:214(HTTPMessage)
+ 1742 0.008 0.000 0.010 0.000 httplib.py:216(addheader)
+ 290 0.065 0.000 0.924 0.003 httplib.py:230(readheaders)
+ 1 0.000 0.000 0.000 0.000 httplib.py:319(HTTPResponse)
+ 320 0.004 0.000 0.024 0.000 httplib.py:329(__init__)
+ 320/1 0.011 0.000 3.136 3.136 httplib.py:347(_read_status)
+ 320/1 0.027 0.000 3.136 3.136 httplib.py:384(begin)
+ 290 0.002 0.000 0.007 0.000 httplib.py:467(_check_close)
+ 580 0.005 0.000 0.010 0.000 httplib.py:497(close)
+ 875 0.001 0.000 0.001 0.000 httplib.py:502(isclosed)
+ 585/537 0.005 0.000 0.033 0.000 httplib.py:513(read)
+ 290 0.004 0.000 0.006 0.000 httplib.py:631(getheaders)
+ 1 0.000 0.000 0.000 0.000 httplib.py:638(HTTPConnection)
+ 30 0.000 0.000 0.000 0.000 httplib.py:649(__init__)
+ 1 0.002 0.002 0.002 0.002 httplib.py:67(<module>)
+ 30 0.000 0.000 0.000 0.000 httplib.py:678(_set_hostport)
+ 30/1 0.000 0.000 0.000 0.000 httplib.py:717(connect)
+ 320/291 0.006 0.000 0.033 0.000 httplib.py:735(send)
+ 1600 0.005 0.000 0.006 0.000 httplib.py:765(_output)
+ 320/291 0.004 0.000 0.037 0.000 httplib.py:772(_send_output)
+ 320 0.015 0.000 0.023 0.000 httplib.py:782(putrequest)
+ 1280 0.007 0.000 0.011 0.000 httplib.py:889(putheader)
+ 320/291 0.003 0.000 0.180 0.001 httplib.py:900(endheaders)
+ 320/291 0.002 0.000 0.224 0.001 httplib.py:910(request)
+ 320/291 0.011 0.000 0.223 0.001 httplib.py:922(_send_request)
+ 320/1 0.016 0.000 3.136 3.136 httplib.py:956(getresponse)
+ 1064 0.003 0.000 0.003 0.000 hub.py:115(get_hub)
+ 1 0.000 0.000 0.000 0.000 hub.py:132(Hub)
+ 1 0.000 0.000 0.000 0.000 hub.py:138(__init__)
+ 693/2 0.025 0.000 0.000 0.000 hub.py:142(switch)
+ 1 0.000 0.000 0.000 0.000 hub.py:200(DispatchExit)
+ 1 0.000 0.000 0.000 0.000 hub.py:207(Waiter)
+ 106 0.000 0.000 0.000 0.000 hub.py:243(__init__)
+ 105 0.002 0.000 0.004 0.000 hub.py:270(switch)
+ 30 0.001 0.000 0.006 0.000 hub.py:282(switch_args)
+ 51/21 0.002 0.000 0.001 0.000 hub.py:296(get)
+ 1 0.000 0.000 0.001 0.001 hub.py:3(<module>)
+ 1 0.000 0.000 0.000 0.000 hub.py:317(_NONE)
+ 290/1 0.010 0.000 0.000 0.000 hub.py:61(sleep)
+ 1 0.000 0.000 0.000 0.000 hub.py:95(signal)
+ 1 0.000 0.000 0.000 0.000 idna.py:146(Codec)
+ 320 0.009 0.000 0.026 0.000 idna.py:147(encode)
+ 1 0.000 0.000 0.000 0.000 idna.py:197(IncrementalEncoder)
+ 1 0.000 0.000 0.000 0.000 idna.py:231(IncrementalDecoder)
+ 1 0.000 0.000 0.000 0.000 idna.py:271(StreamWriter)
+ 1 0.000 0.000 0.000 0.000 idna.py:274(StreamReader)
+ 1 0.000 0.000 0.000 0.000 idna.py:279(getregentry)
+ 1 0.001 0.001 0.016 0.016 idna.py:3(<module>)
+ 960 0.005 0.000 0.009 0.000 idna.py:62(ToASCII)
+ 1 0.000 0.000 0.000 0.000 io.py:1032(BufferedWriter)
+ 1 0.000 0.000 0.000 0.000 io.py:1121(BufferedRWPair)
+ 1 0.000 0.000 0.000 0.000 io.py:1187(BufferedRandom)
+ 1 0.000 0.000 0.000 0.000 io.py:1255(TextIOBase)
+ 1 0.000 0.000 0.000 0.000 io.py:1303(IncrementalNewlineDecoder)
+ 1 0.000 0.000 0.000 0.000 io.py:1379(TextIOWrapper)
+ 1 0.000 0.000 0.000 0.000 io.py:1880(StringIO)
+ 1 0.000 0.000 0.000 0.000 io.py:267(_DocDescriptor)
+ 1 0.000 0.000 0.000 0.000 io.py:276(OpenWrapper)
+ 1 0.000 0.000 0.000 0.000 io.py:290(UnsupportedOperation)
+ 1 0.000 0.000 0.000 0.000 io.py:294(IOBase)
+ 1 0.003 0.003 0.005 0.005 io.py:35(<module>)
+ 1 0.000 0.000 0.000 0.000 io.py:566(RawIOBase)
+ 1 0.000 0.000 0.000 0.000 io.py:621(FileIO)
+ 1 0.000 0.000 0.000 0.000 io.py:643(BufferedIOBase)
+ 1 0.000 0.000 0.000 0.000 io.py:715(_BufferedIOMixin)
+ 1 0.000 0.000 0.000 0.000 io.py:72(BlockingIOError)
+ 1 0.000 0.000 0.000 0.000 io.py:789(_BytesIO)
+ 1 0.000 0.000 0.000 0.000 io.py:900(BytesIO)
+ 1 0.000 0.000 0.000 0.000 io.py:907(BufferedReader)
+ 1 0.000 0.000 0.000 0.000 keyword.py:11(<module>)
+ 6 0.000 0.000 0.000 0.000 locale.py:316(normalize)
+ 1 0.004 0.004 0.009 0.009 mimetools.py:1(<module>)
+ 1 0.000 0.000 0.000 0.000 mimetools.py:20(Message)
+ 290 0.012 0.000 0.966 0.003 mimetools.py:24(__init__)
+ 290 0.007 0.000 0.014 0.000 mimetools.py:33(parsetype)
+ 290 0.007 0.000 0.009 0.000 mimetools.py:50(parseplist)
+ 1 0.000 0.000 0.002 0.002 mimetypes.py:23(<module>)
+ 1 0.002 0.002 0.002 0.002 mimetypes.py:324(_default_mime_types)
+ 1 0.000 0.000 0.000 0.000 mimetypes.py:50(MimeTypes)
+ 1 0.000 0.000 0.000 0.000 models.py:135(RequestHooksMixin)
+ 320 0.004 0.000 0.011 0.000 models.py:136(register_hook)
+ 1 0.000 0.000 0.000 0.000 models.py:156(Request)
+ 320 0.006 0.000 0.007 0.000 models.py:179(__init__)
+ 320 0.012 0.000 0.364 0.001 models.py:214(prepare)
+ 1 0.000 0.000 0.000 0.000 models.py:233(PreparedRequest)
+ 595 0.003 0.000 0.005 0.000 models.py:252(__init__)
+ 320 0.001 0.000 0.002 0.000 models.py:267(prepare_method)
+ 320 0.017 0.000 0.154 0.000 models.py:273(prepare_url)
+ 320 0.010 0.000 0.020 0.000 models.py:323(prepare_headers)
+ 1280 0.006 0.000 0.010 0.000 models.py:327(<genexpr>)
+ 320 0.006 0.000 0.020 0.000 models.py:332(prepare_body)
+ 1 0.000 0.000 0.000 0.000 models.py:36(RequestEncodingMixin)
+ 320 0.004 0.000 0.008 0.000 models.py:37(path_url)
+ 320 0.002 0.000 0.003 0.000 models.py:389(prepare_content_length)
+ 320 0.005 0.000 0.019 0.000 models.py:401(prepare_auth)
+ 320 0.007 0.000 0.121 0.000 models.py:423(prepare_cookies)
+ 320 0.003 0.000 0.016 0.000 models.py:436(prepare_hooks)
+ 1 0.000 0.000 0.000 0.000 models.py:442(Response)
+ 290 0.010 0.000 0.026 0.000 models.py:447(__init__)
+ 290 0.003 0.000 0.010 0.000 models.py:515(iter_content)
+ 585/537 0.004 0.000 0.250 0.000 models.py:526(generate)
+ 290/266 0.004 0.000 0.169 0.001 models.py:567(content)
+ 320 0.005 0.000 0.020 0.000 models.py:58(_encode_params)
+ 1 0.001 0.001 0.003 0.003 models.py:8(<module>)
+ 1 0.000 0.000 0.000 0.000 monkey.py:17(patch_time)
+ 1 0.000 0.000 0.000 0.000 monkey.py:3(<module>)
+ 1 0.001 0.001 0.016 0.016 monkey.py:44(patch_socket)
+ 1 0.000 0.000 0.000 0.000 monkey.py:61(patch_dns)
+ 1 0.000 0.000 0.000 0.000 monkey.py:68(patch_ssl)
+ 1 0.000 0.000 0.000 0.000 monkey.py:8(patch_os)
+ 1 0.000 0.000 0.016 0.016 monkey.py:95(patch_all)
+ 1 0.001 0.001 0.001 0.001 netrc.py:1(<module>)
+ 1 0.000 0.000 0.000 0.000 netrc.py:10(NetrcParseError)
+ 1 0.000 0.000 0.000 0.000 netrc.py:22(netrc)
+ 640 0.005 0.000 0.007 0.000 ordered_dict.py:117(keys)
+ 1280 0.006 0.000 0.009 0.000 ordered_dict.py:125(items)
+ 1926 0.047 0.000 0.075 0.000 ordered_dict.py:143(update)
+ 1 0.000 0.000 0.000 0.000 ordered_dict.py:17(OrderedDict)
+ 320 0.004 0.000 0.010 0.000 ordered_dict.py:178(pop)
+ 640 0.005 0.000 0.044 0.000 ordered_dict.py:221(copy)
+ 1926 0.045 0.000 0.122 0.000 ordered_dict.py:29(__init__)
+ 1600 0.022 0.000 0.022 0.000 ordered_dict.py:45(__setitem__)
+ 317 0.005 0.000 0.006 0.000 ordered_dict.py:55(__delitem__)
+ 1 0.000 0.000 0.000 0.000 ordered_dict.py:6(<module>)
+ 4480 0.008 0.000 0.008 0.000 ordered_dict.py:64(__iter__)
+ 1 0.000 0.000 0.000 0.000 os.py:35(_get_exports_list)
+ 1 0.000 0.000 0.000 0.000 os.py:747(urandom)
+ 1 0.000 0.000 0.029 0.029 platform.py:10(<module>)
+ 1 0.000 0.000 0.005 0.005 platform.py:1007(_syscmd_uname)
+ 7 0.000 0.000 0.005 0.001 platform.py:1151(uname)
+ 4 0.000 0.000 0.005 0.001 platform.py:1288(system)
+ 3 0.000 0.000 0.000 0.000 platform.py:1307(release)
+ 6 0.000 0.000 0.000 0.000 platform.py:1364(_sys_version)
+ 3 0.000 0.000 0.000 0.000 platform.py:1467(python_implementation)
+ 3 0.000 0.000 0.000 0.000 platform.py:1479(python_version)
+ 1 0.000 0.000 0.000 0.000 platform.py:390(_popen)
+ 1 0.000 0.000 0.000 0.000 pool.py:11(GreenletSet)
+ 1 0.000 0.000 0.000 0.000 pool.py:172(Pool)
+ 1 0.000 0.000 0.000 0.000 pool.py:174(__init__)
+ 1 0.000 0.000 0.000 0.000 pool.py:18(__init__)
+ 320 0.002 0.000 0.020 0.000 pool.py:189(start)
+ 320 0.005 0.000 0.033 0.000 pool.py:196(spawn)
+ 320 0.002 0.000 0.005 0.000 pool.py:201(discard)
+ 1 0.000 0.000 0.001 0.001 pool.py:208(kill)
+ 1 0.000 0.000 0.000 0.000 pool.py:220(pass_value)
+ 1 0.000 0.000 0.000 0.000 pool.py:3(<module>)
+ 320 0.003 0.000 0.014 0.000 pool.py:43(add)
+ 320 0.002 0.000 0.003 0.000 pool.py:47(discard)
+ 2/1 0.000 0.000 3.163 3.163 pool.py:76(join)
+ 1 0.000 0.000 0.001 0.001 pool.py:88(kill)
+ 320 0.004 0.000 0.051 0.000 poolmanager.py:104(connection_from_url)
+ 1 0.000 0.000 0.000 0.000 poolmanager.py:147(ProxyManager)
+ 1 0.000 0.000 0.000 0.000 poolmanager.py:27(PoolManager)
+ 6 0.000 0.000 0.001 0.000 poolmanager.py:55(__init__)
+ 3 0.000 0.000 0.002 0.001 poolmanager.py:61(_new_pool)
+ 1 0.000 0.000 0.002 0.002 poolmanager.py:7(<module>)
+ 320 0.003 0.000 0.026 0.000 poolmanager.py:81(connection_from_host)
+ 1 0.000 0.000 0.000 0.000 posixpath.py:109(basename)
+ 1 0.000 0.000 0.000 0.000 posixpath.py:117(dirname)
+ 640 0.012 0.000 0.019 0.000 posixpath.py:248(expanduser)
+ 1 0.000 0.000 0.000 0.000 posixpath.py:42(normcase)
+ 13 0.000 0.000 0.000 0.000 posixpath.py:59(join)
+ 2/1 0.003 0.002 3.163 3.163 pphidden_async.py:1(<module>)
+ 320 0.009 0.000 0.009 0.000 pphidden_async.py:19(next)
+ 290 0.010 0.000 0.010 0.000 pphidden_async.py:29(cb_response)
+ 1 0.000 0.000 0.000 0.000 pphidden_async.py:7(Pp_url)
+ 1 0.000 0.000 0.000 0.000 pphidden_async.py:8(__init__)
+ 1 0.000 0.000 0.000 0.000 pprint.py:35(<module>)
+ 1 0.000 0.000 0.000 0.000 pprint.py:81(PrettyPrinter)
+ 293 0.002 0.000 0.007 0.000 queue.py:147(get)
+ 1 0.001 0.001 0.001 0.001 queue.py:16(<module>)
+ 20 0.001 0.000 0.003 0.000 queue.py:193(_unlock)
+ 293 0.001 0.000 0.001 0.000 queue.py:229(_schedule_unlock)
+ 1 0.000 0.000 0.000 0.000 queue.py:235(ItemWaiter)
+ 1 0.000 0.000 0.000 0.000 queue.py:243(PriorityQueue)
+ 1 0.000 0.000 0.000 0.000 queue.py:259(LifoQueue)
+ 1 0.000 0.000 0.000 0.000 queue.py:272(JoinableQueue)
+ 1 0.000 0.000 0.000 0.000 queue.py:31(Queue)
+ 7 0.000 0.000 0.000 0.000 queue.py:41(__init__)
+ 7 0.000 0.000 0.000 0.000 queue.py:53(_init)
+ 293 0.001 0.000 0.001 0.000 queue.py:56(_get)
+ 293 0.001 0.000 0.001 0.000 queue.py:59(_put)
+ 334 0.002 0.000 0.003 0.000 queue.py:80(qsize)
+ 293 0.002 0.000 0.004 0.000 queue.py:95(put)
+ 1 0.001 0.001 0.001 0.001 random.py:40(<module>)
+ 1 0.000 0.000 0.000 0.000 random.py:643(WichmannHill)
+ 1 0.000 0.000 0.000 0.000 random.py:71(Random)
+ 1 0.000 0.000 0.000 0.000 random.py:793(SystemRandom)
+ 1 0.000 0.000 0.000 0.000 random.py:90(__init__)
+ 1 0.000 0.000 0.000 0.000 random.py:99(seed)
+ 1 0.000 0.000 0.002 0.002 re.py:134(match)
+ 2 0.000 0.000 0.102 0.051 re.py:139(search)
+ 54 0.000 0.000 0.125 0.002 re.py:188(compile)
+ 2 0.000 0.000 0.000 0.000 re.py:206(escape)
+ 57 0.002 0.000 0.136 0.002 re.py:229(_compile)
+ 1 0.000 0.000 0.000 0.000 request.py:18(RequestMethods)
+ 9 0.000 0.000 0.000 0.000 request.py:50(__init__)
+ 1 0.000 0.000 0.133 0.133 request.py:7(<module>)
+ 585/537 0.015 0.000 0.246 0.000 response.py:112(read)
+ 290 0.017 0.000 0.035 0.000 response.py:176(from_httplib)
+ 1 0.000 0.000 0.000 0.000 response.py:32(HTTPResponse)
+ 290 0.006 0.000 0.008 0.000 response.py:60(__init__)
+ 1 0.002 0.002 0.003 0.003 response.py:7(<module>)
+ 580 0.004 0.000 0.021 0.000 response.py:96(release_conn)
+ 1742 0.016 0.000 0.022 0.000 rfc822.py:197(isheader)
+ 2032 0.003 0.000 0.003 0.000 rfc822.py:209(islast)
+ 2032 0.003 0.000 0.003 0.000 rfc822.py:219(iscomment)
+ 580 0.018 0.000 0.028 0.000 rfc822.py:228(getallmatchingheaders)
+ 1740 0.010 0.000 0.014 0.000 rfc822.py:285(getheader)
+ 580 0.003 0.000 0.031 0.000 rfc822.py:295(getheaders)
+ 290 0.001 0.000 0.002 0.000 rfc822.py:454(items)
+ 1 0.000 0.000 0.000 0.000 rfc822.py:496(AddrlistClass)
+ 1 0.000 0.000 0.000 0.000 rfc822.py:71(<module>)
+ 1 0.000 0.000 0.000 0.000 rfc822.py:770(AddressList)
+ 1 0.000 0.000 0.000 0.000 rfc822.py:85(Message)
+ 290 0.002 0.000 0.926 0.003 rfc822.py:88(__init__)
+ 1 0.000 0.000 0.000 0.000 scanner.py:17(Scanner)
+ 2 0.000 0.000 0.023 0.011 scanner.py:18(__init__)
+ 1 0.000 0.000 0.000 0.000 scanner.py:3(<module>)
+ 5 0.000 0.000 0.000 0.000 scanner.py:64(pattern)
+ 5 0.000 0.000 0.006 0.001 scanner.py:65(decorator)
+ 1 0.001 0.001 0.002 0.002 sessions.py:10(<module>)
+ 1 0.000 0.000 0.000 0.000 sessions.py:170(Session)
+ 3 0.000 0.000 0.002 0.001 sessions.py:188(__init__)
+ 320/1 0.012 0.000 3.137 3.137 sessions.py:241(request)
+ 2560 0.021 0.000 0.201 0.000 sessions.py:36(merge_kwargs)
+ 320/1 0.021 0.000 3.136 3.136 sessions.py:430(send)
+ 320 0.002 0.000 0.004 0.000 sessions.py:485(get_adapter)
+ 6 0.000 0.000 0.000 0.000 sessions.py:500(mount)
+ 320 0.002 0.000 0.006 0.000 sessions.py:59(get_original_key)
+ 1 0.000 0.000 0.000 0.000 sessions.py:81(SessionRedirectMixin)
+ 275 0.009 0.000 0.055 0.000 sessions.py:82(resolve_redirects)
+ 1 0.000 0.000 0.000 0.000 shlex.py:2(<module>)
+ 1 0.000 0.000 0.000 0.000 shlex.py:21(shlex)
+ 1 0.001 0.001 0.002 0.002 six.py:1(<module>)
+ 1 0.000 0.000 0.000 0.000 six.py:106(MovedAttribute)
+ 9 0.000 0.000 0.000 0.000 six.py:108(__init__)
+ 1 0.000 0.000 0.000 0.000 six.py:126(_resolve)
+ 1 0.000 0.000 0.000 0.000 six.py:132(_MovedItems)
+ 1 0.000 0.000 0.000 0.000 six.py:247(Iterator)
+ 1 0.000 0.000 0.000 0.000 six.py:317(exec_)
+ 1 0.000 0.000 0.000 0.000 six.py:53(X)
+ 1 0.000 0.000 0.000 0.000 six.py:54(__len__)
+ 4 0.000 0.000 0.000 0.000 six.py:67(_add_doc)
+ 1 0.000 0.000 0.000 0.000 six.py:72(_import_module)
+ 1 0.000 0.000 0.000 0.000 six.py:78(_LazyDescr)
+ 40 0.000 0.000 0.000 0.000 six.py:80(__init__)
+ 1 0.000 0.000 0.000 0.000 six.py:83(__get__)
+ 1 0.000 0.000 0.000 0.000 six.py:91(MovedModule)
+ 31 0.000 0.000 0.000 0.000 six.py:93(__init__)
+ 322 0.008 0.000 0.025 0.000 socket.py:128(_wait_helper)
+ 322/1 0.004 0.000 0.000 0.000 socket.py:136(wait_read)
+ 30/1 0.000 0.000 0.000 0.000 socket.py:154(wait_readwrite)
+ 1 0.000 0.000 0.000 0.000 socket.py:164(_closedsocket)
+ 1 0.004 0.004 0.004 0.004 socket.py:176(_socketobject)
+ 1 0.000 0.000 0.000 0.000 socket.py:186(_closedsocket)
+ 1 0.001 0.001 0.001 0.001 socket.py:199(socket)
+ 350 0.004 0.000 0.008 0.000 socket.py:201(__init__)
+ 1 0.000 0.000 0.000 0.000 socket.py:226(_fileobject)
+ 320 0.003 0.000 0.004 0.000 socket.py:237(__init__)
+ 610 0.004 0.000 0.005 0.000 socket.py:267(close)
+ 30/1 0.087 0.003 0.000 0.000 socket.py:269(connect)
+ 320 0.001 0.000 0.002 0.000 socket.py:276(__del__)
+ 320 0.001 0.000 0.001 0.000 socket.py:283(flush)
+ 320 0.006 0.000 0.013 0.000 socket.py:315(dup)
+ 1 0.005 0.005 0.015 0.015 socket.py:32(<module>)
+ 320 0.003 0.000 0.020 0.000 socket.py:321(makefile)
+ 74636/1 0.330 0.000 3.136 3.136 socket.py:324(recv)
+ 295/271 0.011 0.000 0.019 0.000 socket.py:333(read)
+ 320 0.002 0.000 0.021 0.000 socket.py:365(send)
+ 320 0.006 0.000 0.028 0.000 socket.py:382(sendall)
+ 2352/1 0.327 0.000 3.136 3.136 socket.py:403(readline)
+ 350 0.001 0.000 0.001 0.000 socket.py:422(settimeout)
+ 1 0.004 0.004 0.008 0.008 socket.py:44(<module>)
+ 30/1 0.001 0.000 0.000 0.000 socket.py:534(create_connection)
+ 30 0.000 0.000 0.000 0.000 socket.py:579(gethostbyname)
+ 30/1 0.002 0.000 0.013 0.013 socket.py:603(getaddrinfo)
+ 179 0.003 0.000 0.028 0.000 sre_compile.py:184(_compile_charset)
+ 179 0.010 0.000 0.024 0.000 sre_compile.py:213(_optimize_charset)
+ 318 0.000 0.000 0.000 0.000 sre_compile.py:24(_identityfunction)
+ 17 0.003 0.000 0.003 0.000 sre_compile.py:264(_mk_bitmap)
+ 2 0.007 0.003 0.012 0.006 sre_compile.py:307(_optimize_unicode)
+ 175 0.001 0.000 0.002 0.000 sre_compile.py:360(_simple)
+ 55 0.002 0.000 0.019 0.000 sre_compile.py:367(_compile_info)
+ 422/55 0.016 0.000 0.048 0.001 sre_compile.py:38(_compile)
+ 108 0.001 0.000 0.001 0.000 sre_compile.py:480(isstring)
+ 55 0.001 0.000 0.067 0.001 sre_compile.py:486(_code)
+ 55 0.001 0.000 0.140 0.003 sre_compile.py:501(compile)
+ 20 0.000 0.000 0.000 0.000 sre_compile.py:57(fixup)
+ 847 0.007 0.000 0.007 0.000 sre_parse.py:132(__len__)
+ 4 0.000 0.000 0.000 0.000 sre_parse.py:134(__delitem__)
+ 1866 0.007 0.000 0.011 0.000 sre_parse.py:136(__getitem__)
+ 185 0.000 0.000 0.000 0.000 sre_parse.py:140(__setitem__)
+ 860 0.002 0.000 0.003 0.000 sre_parse.py:144(append)
+ 596/230 0.007 0.000 0.008 0.000 sre_parse.py:146(getwidth)
+ 64 0.000 0.000 0.001 0.000 sre_parse.py:184(__init__)
+ 2619 0.012 0.000 0.016 0.000 sre_parse.py:188(__next)
+ 1255 0.002 0.000 0.004 0.000 sre_parse.py:201(match)
+ 2257 0.009 0.000 0.023 0.000 sre_parse.py:207(get)
+ 11 0.000 0.000 0.000 0.000 sre_parse.py:211(tell)
+ 3 0.000 0.000 0.000 0.000 sre_parse.py:213(seek)
+ 12 0.000 0.000 0.000 0.000 sre_parse.py:216(isident)
+ 4 0.000 0.000 0.000 0.000 sre_parse.py:222(isname)
+ 130 0.001 0.000 0.001 0.000 sre_parse.py:231(_class_escape)
+ 147 0.001 0.000 0.001 0.000 sre_parse.py:263(_escape)
+ 184/64 0.003 0.000 0.073 0.001 sre_parse.py:307(_parse_sub)
+ 223/67 0.021 0.000 0.072 0.001 sre_parse.py:385(_parse)
+ 64/63 0.012 0.000 0.087 0.001 sre_parse.py:669(parse)
+ 66 0.000 0.000 0.000 0.000 sre_parse.py:73(__init__)
+ 90 0.000 0.000 0.000 0.000 sre_parse.py:78(opengroup)
+ 90 0.000 0.000 0.000 0.000 sre_parse.py:89(closegroup)
+ 1 0.000 0.000 0.000 0.000 sre_parse.py:91(checkgroup)
+ 441 0.002 0.000 0.002 0.000 sre_parse.py:96(__init__)
+ 1 0.000 0.000 0.001 0.001 ssl.py:13(<module>)
+ 1 0.001 0.001 0.002 0.002 ssl.py:56(<module>)
+ 1 0.001 0.001 0.001 0.001 ssl.py:58(SSLSocket)
+ 1 0.000 0.000 0.000 0.000 ssl.py:83(SSLSocket)
+ 1 0.001 0.001 0.001 0.001 status_codes.py:3(<module>)
+ 1 0.000 0.000 0.000 0.000 string.py:220(lower)
+ 1 0.000 0.000 0.000 0.000 string.py:248(strip)
+ 1 0.000 0.000 0.000 0.000 string.py:281(split)
+ 20 0.000 0.000 0.000 0.000 string.py:364(rfind)
+ 1 0.000 0.000 0.000 0.000 stringprep.py:6(<module>)
+ 1 0.000 0.000 0.000 0.000 structures.py:15(IteratorProxy)
+ 1 0.000 0.000 0.000 0.000 structures.py:36(CaseInsensitiveDict)
+ 1755 0.020 0.000 0.039 0.000 structures.py:42(lower_keys)
+ 3312 0.011 0.000 0.014 0.000 structures.py:45(<genexpr>)
+ 1465 0.011 0.000 0.051 0.000 structures.py:60(__contains__)
+ 290 0.003 0.000 0.008 0.000 structures.py:63(__getitem__)
+ 580 0.004 0.000 0.037 0.000 structures.py:68(get)
+ 1 0.000 0.000 0.000 0.000 structures.py:75(LookupDict)
+ 1 0.000 0.000 0.000 0.000 structures.py:78(__init__)
+ 1 0.000 0.000 0.000 0.000 structures.py:9(<module>)
+ 1 0.000 0.000 0.000 0.000 tempfile.py:107(_RandomNameSequence)
+ 1 0.003 0.003 0.005 0.005 tempfile.py:18(<module>)
+ 1 0.000 0.000 0.000 0.000 tempfile.py:357(_TemporaryFileWrapper)
+ 1 0.000 0.000 0.000 0.000 tempfile.py:483(SpooledTemporaryFile)
+ 1 0.001 0.001 0.002 0.002 threading.py:1(<module>)
+ 1211 0.011 0.000 0.016 0.000 threading.py:101(__init__)
+ 939 0.012 0.000 0.018 0.000 threading.py:116(acquire)
+ 939 0.009 0.000 0.013 0.000 threading.py:136(release)
+ 11 0.000 0.000 0.000 0.000 threading.py:176(Condition)
+ 1 0.000 0.000 0.000 0.000 threading.py:179(_Condition)
+ 11 0.000 0.000 0.000 0.000 threading.py:181(__init__)
+ 641 0.003 0.000 0.005 0.000 threading.py:221(_is_owned)
+ 641 0.005 0.000 0.011 0.000 threading.py:272(notify)
+ 1 0.000 0.000 0.000 0.000 threading.py:290(notifyAll)
+ 1 0.000 0.000 0.000 0.000 threading.py:299(_Semaphore)
+ 1 0.000 0.000 0.000 0.000 threading.py:347(_BoundedSemaphore)
+ 1 0.000 0.000 0.000 0.000 threading.py:359(Event)
+ 1 0.000 0.000 0.000 0.000 threading.py:362(_Event)
+ 1 0.000 0.000 0.000 0.000 threading.py:366(__init__)
+ 1 0.000 0.000 0.000 0.000 threading.py:376(set)
+ 1 0.000 0.000 0.000 0.000 threading.py:414(Thread)
+ 1 0.000 0.000 0.000 0.000 threading.py:426(__init__)
+ 1 0.000 0.000 0.000 0.000 threading.py:510(_set_ident)
+ 1 0.000 0.000 0.000 0.000 threading.py:57(_Verbose)
+ 1224 0.003 0.000 0.003 0.000 threading.py:59(__init__)
+ 2519 0.005 0.000 0.005 0.000 threading.py:64(_note)
+ 1 0.000 0.000 0.000 0.000 threading.py:713(_Timer)
+ 1 0.000 0.000 0.000 0.000 threading.py:742(_MainThread)
+ 1 0.000 0.000 0.000 0.000 threading.py:744(__init__)
+ 1 0.000 0.000 0.000 0.000 threading.py:752(_set_daemon)
+ 1 0.000 0.000 0.000 0.000 threading.py:783(_DummyThread)
+ 1211 0.015 0.000 0.031 0.000 threading.py:96(RLock)
+ 1 0.000 0.000 0.000 0.000 threading.py:99(_RLock)
+ 30 0.000 0.000 0.001 0.000 timeout.py:100(start_new)
+ 30 0.000 0.000 0.000 0.000 timeout.py:120(pending)
+ 30 0.000 0.000 0.000 0.000 timeout.py:128(cancel)
+ 1 0.000 0.000 0.000 0.000 timeout.py:14(<module>)
+ 1 0.000 0.000 0.000 0.000 timeout.py:32(Timeout)
+ 30 0.000 0.000 0.000 0.000 timeout.py:85(__init__)
+ 30 0.000 0.000 0.000 0.000 timeout.py:90(start)
+ 1 0.000 0.000 0.000 0.000 traceback.py:1(<module>)
+ 1 0.000 0.000 0.000 0.000 urllib.py:109(ContentTooShortError)
+ 1 0.000 0.000 0.000 0.000 urllib.py:115(URLopener)
+ 485 0.002 0.000 0.002 0.000 urllib.py:1168(<genexpr>)
+ 320 0.005 0.000 0.013 0.000 urllib.py:1193(quote)
+ 320 0.005 0.000 0.007 0.000 urllib.py:1234(urlencode)
+ 1 0.004 0.004 0.024 0.024 urllib.py:23(<module>)
+ 1 0.000 0.000 0.000 0.000 urllib.py:615(FancyURLopener)
+ 1 0.000 0.000 0.000 0.000 urllib.py:845(ftpwrapper)
+ 1 0.000 0.000 0.000 0.000 urllib.py:923(addbase)
+ 1 0.000 0.000 0.000 0.000 urllib.py:952(addclosehook)
+ 1 0.000 0.000 0.000 0.000 urllib.py:967(addinfo)
+ 1 0.000 0.000 0.000 0.000 urllib.py:977(addinfourl)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1035(HTTPDigestAuthHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1053(ProxyDigestAuthHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1065(AbstractHTTPHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1167(HTTPHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1175(HTTPSHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1182(HTTPCookieProcessor)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1200(UnknownHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1258(FileHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1310(FTPHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:136(URLError)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1369(CacheFTPHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:149(HTTPError)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:187(Request)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:297(OpenerDirector)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:480(BaseHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:499(HTTPErrorProcessor)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:516(HTTPDefaultErrorHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:520(HTTPRedirectHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:686(ProxyHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:729(HTTPPasswordMgr)
+ 1 0.001 0.001 0.007 0.007 urllib2.py:76(<module>)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:793(HTTPPasswordMgrWithDefaultRealm)
+ 1 0.000 0.000 0.004 0.004 urllib2.py:803(AbstractBasicAuthHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:857(HTTPBasicAuthHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:867(ProxyBasicAuthHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:895(AbstractDigestAuthHandler)
+ 1 0.000 0.000 0.000 0.000 urlparse.py:107(SplitResult)
+ 1 0.000 0.000 0.000 0.000 urlparse.py:115(ParseResult)
+ 2210 0.021 0.000 0.122 0.000 urlparse.py:123(urlparse)
+ 930 0.017 0.000 0.027 0.000 urlparse.py:146(_splitnetloc)
+ 2530 0.043 0.000 0.091 0.000 urlparse.py:154(urlsplit)
+ 320 0.001 0.000 0.003 0.000 urlparse.py:198(urlunparse)
+ 320 0.002 0.000 0.002 0.000 urlparse.py:208(urlunsplit)
+ 1 0.002 0.002 0.008 0.008 urlparse.py:26(<module>)
+ 485 0.002 0.000 0.002 0.000 urlparse.py:303(<genexpr>)
+ 46 0.000 0.000 0.002 0.000 urlparse.py:59(clear_cache)
+ 1 0.000 0.000 0.000 0.000 urlparse.py:64(ResultMixin)
+ 320 0.001 0.000 0.001 0.000 urlparse.py:67(username)
+ 320 0.001 0.000 0.001 0.000 urlparse.py:77(password)
+ 610 0.003 0.000 0.008 0.000 utf_8.py:15(decode)
+ 2 0.001 0.000 0.112 0.056 util.py:182(_findSoname_ldconfig)
+ 1 0.000 0.000 0.000 0.000 util.py:2(<module>)
+ 2 0.000 0.000 0.112 0.056 util.py:206(find_library)
+ 290 0.004 0.000 0.012 0.000 util.py:235(is_connection_dropped)
+ 1 0.000 0.000 0.000 0.000 util.py:37(Url)
+ 1 0.000 0.000 0.000 0.000 util.py:4(<module>)
+ 1 0.000 0.000 0.000 0.000 util.py:4(wrap_errors)
+ 320 0.003 0.000 0.005 0.000 util.py:44(__new__)
+ 1 0.000 0.000 0.000 0.000 util.py:50(lazy_property)
+ 1 0.000 0.000 0.000 0.000 util.py:53(__init__)
+ 320 0.008 0.000 0.009 0.000 util.py:63(split_first)
+ 1 0.002 0.002 0.007 0.007 util.py:8(<module>)
+ 320 0.006 0.000 0.021 0.000 util.py:96(parse_url)
+ 1 0.004 0.004 0.363 0.363 utils.py:10(<module>)
+ 320 0.004 0.000 0.006 0.000 utils.py:118(to_key_val_list)
+ 290 0.004 0.000 0.056 0.000 utils.py:270(get_encoding_from_headers)
+ 290 0.002 0.000 0.007 0.000 utils.py:381(stream_untransfer)
+ 320 0.003 0.000 0.006 0.000 utils.py:397(unquote_unreserved)
+ 320 0.002 0.000 0.022 0.000 utils.py:415(requote_uri)
+ 320 0.011 0.000 0.050 0.000 utils.py:427(get_environ_proxies)
+ 320 0.002 0.000 0.005 0.000 utils.py:43(super_len)
+ 1920 0.018 0.000 0.039 0.000 utils.py:438(<lambda>)
+ 3 0.000 0.000 0.000 0.000 utils.py:462(default_user_agent)
+ 3 0.000 0.000 0.000 0.000 utils.py:493(default_headers)
+ 320 0.007 0.000 0.056 0.000 utils.py:52(get_netrc_auth)
+ 960 0.006 0.000 0.028 0.000 utils.py:56(<genexpr>)
+ 640 0.005 0.000 0.014 0.000 utils.py:584(get_auth_from_url)
+ 1280 0.019 0.000 0.106 0.000 utils.py:95(from_key_val_list)
+ 4 0.000 0.000 0.000 0.000 uuid.py:101(__init__)
+ 1 0.001 0.001 0.120 0.120 uuid.py:45(<module>)
+ 1 0.000 0.000 0.000 0.000 uuid.py:53(UUID)
+ 2 0.000 0.000 0.000 0.000 warnings.py:14(warnpy3k)
+ 3 0.000 0.000 0.000 0.000 warnings.py:324(__init__)
+ 3 0.000 0.000 0.000 0.000 warnings.py:345(__enter__)
+ 3 0.000 0.000 0.000 0.000 warnings.py:361(__exit__)
+ 2 0.000 0.000 0.004 0.002 warnings.py:45(filterwarnings)
+ 11 0.002 0.000 0.017 0.002 {__import__}
+ 1 0.000 0.000 0.000 0.000 {_codecs.lookup}
+ 610 0.004 0.000 0.004 0.000 {_codecs.utf_8_decode}
+ 2 0.000 0.000 0.000 0.000 {_ctypes.POINTER}
+ 3 0.000 0.000 0.000 0.000 {_ctypes.dlopen}
+ 1 0.000 0.000 0.000 0.000 {_ctypes.set_conversion_mode}
+ 38 0.000 0.000 0.000 0.000 {_ctypes.sizeof}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_md5}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha1}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha224}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha256}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha384}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha512}
+ 350 0.000 0.000 0.000 0.000 {_socket.getdefaulttimeout}
+ 30 0.000 0.000 0.000 0.000 {_socket.inet_ntop}
+ 55 0.000 0.000 0.000 0.000 {_sre.compile}
+ 161 0.000 0.000 0.000 0.000 {_sre.getlower}
+ 20 0.000 0.000 0.000 0.000 {_struct.calcsize}
+ 341 0.001 0.000 0.001 0.000 {all}
+ 322 0.000 0.000 0.001 0.000 {any}
+ 1 0.000 0.000 0.000 0.000 {binascii.hexlify}
+ 323 0.001 0.000 0.001 0.000 {built-in method __enter__}
+ 3478 0.009 0.000 0.009 0.000 {built-in method __new__ of type object at 0x82f680}
+ 2222 0.006 0.000 0.006 0.000 {built-in method acquire}
+ 320 0.001 0.000 0.001 0.000 {built-in method fromkeys}
+ 2 0.000 0.000 0.000 0.000 {built-in method groups}
+ 2 0.000 0.000 0.000 0.000 {built-in method group}
+ 65 0.000 0.000 0.000 0.000 {built-in method match}
+ 290 0.002 0.000 0.002 0.000 {built-in method poll}
+ 290 0.003 0.000 0.005 0.000 {built-in method register}
+ 1581 0.002 0.000 0.002 0.000 {built-in method release}
+ 2 0.093 0.046 0.093 0.046 {built-in method search}
+ 320 0.005 0.000 0.005 0.000 {built-in method split}
+ 610 0.006 0.000 0.006 0.000 {built-in method utcnow}
+ 2967 0.004 0.000 0.004 0.000 {cStringIO.StringIO}
+ 1253 0.001 0.000 0.001 0.000 {callable}
+ 1768 0.002 0.000 0.002 0.000 {chr}
+ 1 0.000 0.000 0.000 0.000 {delattr}
+ 2 0.000 0.000 0.000 0.000 {dir}
+ 2/1 0.001 0.001 3.163 3.163 {execfile}
+ 2 0.000 0.000 0.000 0.000 {filter}
+ 1 0.000 0.000 0.000 0.000 {function seed at 0x1d496e0}
+ 3602 0.011 0.000 0.011 0.000 {getattr}
+ 1 0.000 0.000 0.000 0.000 {gevent.core.dns_init}
+ 30 0.009 0.000 0.009 0.000 {gevent.core.dns_resolve_ipv4}
+ 693 0.001 0.000 0.001 0.000 {gevent.core.set_exc_info}
+ 247 0.000 0.000 0.000 0.000 {globals}
+ 1759 0.002 0.000 0.002 0.000 {greenlet.getcurrent}
+ 6832 0.024 0.000 0.024 0.000 {hasattr}
+ 320 0.000 0.000 0.000 0.000 {hash}
+14669/14668 0.045 0.000 0.047 0.000 {isinstance}
+ 2 0.000 0.000 0.000 0.000 {issubclass}
+ 1 0.000 0.000 0.000 0.000 {iter}
+23634/23408 0.025 0.000 0.026 0.000 {len}
+ 4 0.000 0.000 0.000 0.000 {locals}
+ 2383 0.022 0.000 0.022 0.000 {map}
+ 1 0.000 0.000 0.000 0.000 {math.exp}
+ 2 0.000 0.000 0.000 0.000 {math.log}
+ 1 0.000 0.000 0.000 0.000 {math.sqrt}
+ 360 0.001 0.000 0.001 0.000 {max}
+ 21 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects}
+ 1359 0.008 0.000 0.010 0.000 {method 'add' of 'set' objects}
+ 296 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects}
+ 86128 0.102 0.000 0.102 0.000 {method 'append' of 'list' objects}
+ 367 0.001 0.000 0.001 0.000 {method 'cancel' of 'gevent.core.event' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'clear' of 'collections.deque' objects}
+ 46 0.001 0.000 0.001 0.000 {method 'clear' of 'dict' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'close' of 'file' objects}
+ 60 0.002 0.000 0.002 0.000 {method 'connect_ex' of '_socket.socket' objects}
+ 275 0.001 0.000 0.001 0.000 {method 'copy' of 'dict' objects}
+ 4 0.000 0.000 0.000 0.000 {method 'count' of 'list' objects}
+ 289 0.001 0.000 0.001 0.000 {method 'count' of 'str' objects}
+ 610 0.004 0.000 0.012 0.000 {method 'decode' of 'str' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
+ 661 0.001 0.000 0.001 0.000 {method 'discard' of 'set' objects}
+ 1281 0.006 0.000 0.007 0.000 {method 'encode' of 'str' objects}
+2240/1280 0.010 0.000 0.048 0.000 {method 'encode' of 'unicode' objects}
+ 37 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects}
+ 358 0.001 0.000 0.001 0.000 {method 'extend' of 'list' objects}
+ 642 0.001 0.000 0.001 0.000 {method 'fileno' of '_socket.socket' objects}
+ 6668 0.011 0.000 0.011 0.000 {method 'find' of 'str' objects}
+ 1280 0.005 0.000 0.005 0.000 {method 'find' of 'unicode' objects}
+ 672 0.003 0.000 0.003 0.000 {method 'format' of 'str' objects}
+ 13613 0.018 0.000 0.018 0.000 {method 'get' of 'dict' objects}
+ 60 0.000 0.000 0.000 0.000 {method 'getsockopt' of '_socket.socket' objects}
+ 2 0.000 0.000 0.000 0.000 {method 'getvalue' of 'cStringIO.StringO' objects}
+ 578 0.001 0.000 0.001 0.000 {method 'index' of 'str' objects}
+ 5 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects}
+ 124 0.000 0.000 0.000 0.000 {method 'isalnum' of 'str' objects}
+ 21 0.000 0.000 0.000 0.000 {method 'isdigit' of 'str' objects}
+ 3484 0.003 0.000 0.003 0.000 {method 'isspace' of 'str' objects}
+ 254 0.000 0.000 0.000 0.000 {method 'isupper' of 'str' objects}
+ 3890 0.007 0.000 0.007 0.000 {method 'items' of 'dict' objects}
+ 320 0.000 0.000 0.000 0.000 {method 'iteritems' of 'dict' objects}
+5134/4702 0.023 0.000 0.173 0.000 {method 'join' of 'str' objects}
+ 2992 0.004 0.000 0.004 0.000 {method 'keys' of 'dict' objects}
+ 18014 0.028 0.000 0.028 0.000 {method 'lower' of 'str' objects}
+ 320 0.001 0.000 0.001 0.000 {method 'lower' of 'unicode' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects}
+ 2280 0.003 0.000 0.003 0.000 {method 'pop' of 'dict' objects}
+ 320 0.001 0.000 0.001 0.000 {method 'pop' of 'list' objects}
+ 954 0.001 0.000 0.001 0.000 {method 'pop' of 'set' objects}
+ 293 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects}
+ 2352 0.003 0.000 0.003 0.000 {method 'read' of 'cStringIO.StringO' objects}
+ 3 0.010 0.003 0.010 0.003 {method 'read' of 'file' objects}
+ 74928 0.248 0.000 0.248 0.000 {method 'recv' of '_socket.socket' objects}
+ 90 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects}
+ 32 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects}
+ 6 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects}
+ 22 0.000 0.000 0.000 0.000 {method 'rfind' of 'str' objects}
+ 592 0.002 0.000 0.002 0.000 {method 'rotate' of 'collections.deque' objects}
+ 641 0.001 0.000 0.001 0.000 {method 'rstrip' of 'str' objects}
+ 4999 0.010 0.000 0.010 0.000 {method 'seek' of 'cStringIO.StringO' objects}
+ 320 0.019 0.000 0.019 0.000 {method 'send' of '_socket.socket' objects}
+ 350 0.001 0.000 0.001 0.000 {method 'setblocking' of '_socket.socket' objects}
+ 1864 0.005 0.000 0.005 0.000 {method 'setdefault' of 'dict' objects}
+ 2 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects}
+ 2381 0.005 0.000 0.005 0.000 {method 'sort' of 'list' objects}
+ 1237 0.004 0.000 0.004 0.000 {method 'split' of 'str' objects}
+ 2657 0.006 0.000 0.006 0.000 {method 'startswith' of 'str' objects}
+ 4930 0.007 0.000 0.007 0.000 {method 'strip' of 'str' objects}
+ 372 0.014 0.000 0.019 0.000 {method 'switch' of 'greenlet.greenlet' objects}
+ 2647 0.005 0.000 0.005 0.000 {method 'tell' of 'cStringIO.StringO' objects}
+ 2 0.000 0.000 0.000 0.000 {method 'tolist' of 'array.array' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'toordinal' of 'datetime.date' objects}
+ 2 0.000 0.000 0.000 0.000 {method 'tostring' of 'array.array' objects}
+ 5 0.000 0.000 0.000 0.000 {method 'translate' of 'str' objects}
+ 640 0.002 0.000 0.002 0.000 {method 'update' of 'dict' objects}
+ 2671 0.004 0.000 0.004 0.000 {method 'upper' of 'str' objects}
+ 4 0.000 0.000 0.000 0.000 {method 'write' of 'cStringIO.StringO' objects}
+ 1837 0.004 0.000 0.004 0.000 {min}
+ 320 0.002 0.000 0.010 0.000 {next}
+ 743 0.001 0.000 0.001 0.000 {ord}
+ 1 0.000 0.000 0.000 0.000 {posix.close}
+ 1 0.000 0.000 0.000 0.000 {posix.open}
+ 3 0.003 0.001 0.003 0.001 {posix.popen}
+ 1 0.000 0.000 0.000 0.000 {posix.read}
+ 652 0.012 0.000 0.012 0.000 {posix.stat}
+ 3 0.000 0.000 0.000 0.000 {posix.uname}
+ 664 0.002 0.000 0.002 0.000 {range}
+ 3 0.000 0.000 0.000 0.000 {repr}
+ 290 0.000 0.000 0.000 0.000 {select.poll}
+ 274 0.001 0.000 0.001 0.000 {setattr}
+ 4 0.000 0.000 0.000 0.000 {sys._getframe}
+ 1015 0.004 0.000 0.004 0.000 {sys.exc_clear}
+ 693 0.002 0.000 0.002 0.000 {sys.exc_info}
+ 1225 0.002 0.000 0.002 0.000 {thread.allocate_lock}
+ 1880 0.002 0.000 0.002 0.000 {thread.get_ident}
+ 931 0.002 0.000 0.002 0.000 {time.time}
+ 1 0.000 0.000 0.000 0.000 {zip}
+
+
diff --git a/toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt b/toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt
new file mode 100644
index 0000000..414c74d
--- /dev/null
+++ b/toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt
@@ -0,0 +1,1023 @@
+ ncalls tottime percall cumtime percall filename:lineno(function)
+ 55 0.001 0.000 89.072 1.619 greenlet.py:475(_kill)
+ 55 0.011 0.000 89.067 1.619 greenlet.py:202(throw)
+ 7 0.006 0.001 3.174 0.453 greenlet.py:480(joinall)
+ 2/1 0.001 0.000 3.165 3.165 <string>:1(<module>)
+ 2/1 0.003 0.002 3.163 3.163 pphidden_async.py:1(<module>)
+ 2/1 0.000 0.000 3.163 3.163 pool.py:76(join)
+ 2/1 0.000 0.000 3.163 3.163 grbrute.py:47(__init__)
+ 2/1 0.001 0.001 3.163 3.163 {execfile}
+ 320/1 0.018 0.000 3.158 3.158 greenlet.py:384(run)
+ 320/1 0.012 0.000 3.137 3.137 sessions.py:241(request)
+ 320/1 0.016 0.000 3.137 3.137 grequests.py:97(send)
+ 2352/1 0.327 0.000 3.136 3.136 socket.py:403(readline)
+ 74636/1 0.330 0.000 3.136 3.136 socket.py:324(recv)
+ 320/1 0.021 0.000 3.136 3.136 sessions.py:430(send)
+ 320/1 0.016 0.000 3.136 3.136 httplib.py:956(getresponse)
+ 320/1 0.027 0.000 3.136 3.136 httplib.py:384(begin)
+ 320/1 0.011 0.000 3.136 3.136 httplib.py:347(_read_status)
+ 320/1 0.019 0.000 3.136 3.136 connectionpool.py:325(urlopen)
+ 320/1 0.016 0.000 3.136 3.136 connectionpool.py:261(_make_request)
+ 320/1 0.016 0.000 3.136 3.136 adapters.py:188(send)
+ 290/1 0.010 0.000 3.135 3.135 hooks.py:29(dispatch_hook)
+ 290/1 0.010 0.000 3.133 3.133 grbrute.py:82(_cb_response)
+ 290/1 0.013 0.000 3.133 3.133 grbrute.py:33(_cb_response_session)
+ 290 0.012 0.000 0.966 0.003 mimetools.py:24(__init__)
+ 290 0.002 0.000 0.926 0.003 rfc822.py:88(__init__)
+ 290 0.065 0.000 0.924 0.003 httplib.py:230(readheaders)
+ 1 0.001 0.001 0.401 0.401 grbrute.py:1(<module>)
+ 1 0.001 0.001 0.371 0.371 __init__.py:42(<module>)
+ 320 0.012 0.000 0.364 0.001 models.py:214(prepare)
+ 1 0.004 0.004 0.363 0.363 utils.py:10(<module>)
+ 1 0.007 0.007 0.285 0.285 compat.py:5(<module>)
+ 585/537 0.004 0.000 0.250 0.000 models.py:526(generate)
+ 74928 0.248 0.000 0.248 0.000 {method 'recv' of '_socket.socket' objects}
+ 585/537 0.015 0.000 0.246 0.000 response.py:112(read)
+ 320/291 0.002 0.000 0.224 0.001 httplib.py:910(request)
+ 320/291 0.011 0.000 0.223 0.001 httplib.py:922(_send_request)
+ 2560 0.021 0.000 0.201 0.000 sessions.py:36(merge_kwargs)
+ 290 0.014 0.000 0.198 0.001 adapters.py:105(build_response)
+ 320/291 0.003 0.000 0.180 0.001 httplib.py:900(endheaders)
+5134/4702 0.023 0.000 0.173 0.000 {method 'join' of 'str' objects}
+ 290/266 0.004 0.000 0.169 0.001 models.py:567(content)
+ 3 0.001 0.000 0.166 0.055 __init__.py:1(<module>)
+ 1 0.001 0.001 0.165 0.165 __init__.py:9(<module>)
+ 1 0.007 0.007 0.162 0.162 connectionpool.py:7(<module>)
+ 320 0.017 0.000 0.154 0.000 models.py:273(prepare_url)
+ 55 0.001 0.000 0.140 0.003 sre_compile.py:501(compile)
+ 57 0.002 0.000 0.136 0.002 re.py:229(_compile)
+ 1 0.000 0.000 0.133 0.133 request.py:7(<module>)
+ 1 0.005 0.005 0.133 0.133 filepost.py:7(<module>)
+ 54 0.000 0.000 0.125 0.002 re.py:188(compile)
+ 2210 0.021 0.000 0.122 0.000 urlparse.py:123(urlparse)
+ 1926 0.045 0.000 0.122 0.000 ordered_dict.py:29(__init__)
+ 320 0.007 0.000 0.121 0.000 models.py:423(prepare_cookies)
+ 1 0.001 0.001 0.120 0.120 uuid.py:45(<module>)
+ 2 0.000 0.000 0.112 0.056 util.py:206(find_library)
+ 2 0.001 0.000 0.112 0.056 util.py:182(_findSoname_ldconfig)
+ 1280 0.019 0.000 0.106 0.000 utils.py:95(from_key_val_list)
+ 2 0.000 0.000 0.102 0.051 re.py:139(search)
+ 86128 0.102 0.000 0.102 0.000 {method 'append' of 'list' objects}
+ 290 0.005 0.000 0.094 0.000 cookies.py:94(extract_cookies_to_jar)
+ 2 0.093 0.046 0.093 0.046 {built-in method search}
+ 2530 0.043 0.000 0.091 0.000 urlparse.py:154(urlsplit)
+ 320 0.005 0.000 0.091 0.000 cookies.py:108(get_cookie_header)
+ 64/63 0.012 0.000 0.087 0.001 sre_parse.py:669(parse)
+ 291 0.010 0.000 0.082 0.000 grbrute.py:65(_send)
+ 1926 0.047 0.000 0.075 0.000 ordered_dict.py:143(update)
+ 184/64 0.003 0.000 0.073 0.001 sre_parse.py:307(_parse_sub)
+ 223/67 0.021 0.000 0.072 0.001 sre_parse.py:385(_parse)
+ 1740 0.016 0.000 0.069 0.000 cookies.py:257(update)
+ 320 0.007 0.000 0.069 0.000 adapters.py:133(get_connection)
+ 55 0.001 0.000 0.067 0.001 sre_compile.py:486(_code)
+ 610 0.008 0.000 0.065 0.000 cookies.py:32(__init__)
+ 320 0.007 0.000 0.061 0.000 grbrute.py:27(add)
+ 1208 0.021 0.000 0.058 0.000 cookielib.py:1217(__init__)
+ 290 0.009 0.000 0.057 0.000 cookielib.py:1635(extract_cookies)
+ 320 0.007 0.000 0.056 0.000 utils.py:52(get_netrc_auth)
+ 290 0.004 0.000 0.056 0.000 utils.py:270(get_encoding_from_headers)
+ 275 0.009 0.000 0.055 0.000 sessions.py:82(resolve_redirects)
+ 888 0.015 0.000 0.055 0.000 cookies.py:374(cookiejar_from_dict)
+ 1 0.003 0.003 0.053 0.053 cookielib.py:26(<module>)
+ 1465 0.011 0.000 0.051 0.000 structures.py:60(__contains__)
+ 320 0.004 0.000 0.051 0.000 poolmanager.py:104(connection_from_url)
+ 320 0.012 0.000 0.051 0.000 cookielib.py:1312(add_cookie_header)
+ 320 0.011 0.000 0.050 0.000 utils.py:427(get_environ_proxies)
+ 320 0.004 0.000 0.050 0.000 grequests.py:112(send)
+ 422/55 0.016 0.000 0.048 0.001 sre_compile.py:38(_compile)
+2240/1280 0.010 0.000 0.048 0.000 {method 'encode' of 'unicode' objects}
+14669/14668 0.045 0.000 0.047 0.000 {isinstance}
+ 1 0.012 0.012 0.044 0.044 cgi.py:16(<module>)
+ 640 0.005 0.000 0.044 0.000 ordered_dict.py:221(copy)
+ 2060 0.007 0.000 0.044 0.000 cookielib.py:1180(deepvalues)
+ 320 0.002 0.000 0.042 0.000 cookies.py:309(copy)
+ 320 0.010 0.000 0.041 0.000 connectionpool.py:200(_get_conn)
+ 1920 0.018 0.000 0.039 0.000 utils.py:438(<lambda>)
+ 1755 0.020 0.000 0.039 0.000 structures.py:42(lower_keys)
+ 580 0.004 0.000 0.037 0.000 structures.py:68(get)
+ 320/291 0.004 0.000 0.037 0.000 httplib.py:772(_send_output)
+ 2060 0.015 0.000 0.037 0.000 cookielib.py:1175(vals_sorted_by_key)
+ 1 0.001 0.001 0.036 0.036 __init__.py:98(<module>)
+ 290 0.017 0.000 0.035 0.000 response.py:176(from_httplib)
+ 290 0.004 0.000 0.035 0.000 cookielib.py:1555(make_cookies)
+ 320 0.005 0.000 0.033 0.000 pool.py:196(spawn)
+ 320/291 0.006 0.000 0.033 0.000 httplib.py:735(send)
+ 585/537 0.005 0.000 0.033 0.000 httplib.py:513(read)
+ 1 0.001 0.001 0.031 0.031 decoder.py:2(<module>)
+ 1211 0.015 0.000 0.031 0.000 threading.py:96(RLock)
+ 580 0.003 0.000 0.031 0.000 rfc822.py:295(getheaders)
+ 1 0.000 0.000 0.029 0.029 platform.py:10(<module>)
+ 1 0.004 0.004 0.029 0.029 grequests.py:14(<module>)
+ 960 0.006 0.000 0.028 0.000 utils.py:56(<genexpr>)
+ 179 0.003 0.000 0.028 0.000 sre_compile.py:184(_compile_charset)
+ 320 0.006 0.000 0.028 0.000 socket.py:382(sendall)
+ 580 0.018 0.000 0.028 0.000 rfc822.py:228(getallmatchingheaders)
+ 18014 0.028 0.000 0.028 0.000 {method 'lower' of 'str' objects}
+ 930 0.017 0.000 0.027 0.000 urlparse.py:146(_splitnetloc)
+ 320 0.003 0.000 0.026 0.000 poolmanager.py:81(connection_from_host)
+ 290 0.010 0.000 0.026 0.000 models.py:447(__init__)
+23634/23408 0.025 0.000 0.026 0.000 {len}
+ 320 0.009 0.000 0.026 0.000 idna.py:147(encode)
+ 322 0.008 0.000 0.025 0.000 socket.py:128(_wait_helper)
+ 1 0.004 0.004 0.024 0.024 urllib.py:23(<module>)
+ 179 0.010 0.000 0.024 0.000 sre_compile.py:213(_optimize_charset)
+ 320 0.004 0.000 0.024 0.000 httplib.py:329(__init__)
+ 6832 0.024 0.000 0.024 0.000 {hasattr}
+ 2 0.000 0.000 0.023 0.011 scanner.py:18(__init__)
+ 2257 0.009 0.000 0.023 0.000 sre_parse.py:207(get)
+ 320 0.015 0.000 0.023 0.000 httplib.py:782(putrequest)
+ 320 0.002 0.000 0.022 0.000 utils.py:415(requote_uri)
+ 1742 0.016 0.000 0.022 0.000 rfc822.py:197(isheader)
+ 1600 0.022 0.000 0.022 0.000 ordered_dict.py:45(__setitem__)
+ 2383 0.022 0.000 0.022 0.000 {map}
+ 320 0.005 0.000 0.022 0.000 cookielib.py:1691(clear_expired_cookies)
+ 320 0.006 0.000 0.021 0.000 util.py:96(parse_url)
+ 4492 0.015 0.000 0.021 0.000 UserDict.py:57(get)
+ 320 0.002 0.000 0.021 0.000 socket.py:365(send)
+ 580 0.004 0.000 0.021 0.000 response.py:96(release_conn)
+ 652 0.010 0.000 0.021 0.000 genericpath.py:15(exists)
+ 320 0.002 0.000 0.021 0.000 _abcoll.py:334(get)
+ 320 0.003 0.000 0.020 0.000 socket.py:321(makefile)
+ 320 0.002 0.000 0.020 0.000 pool.py:189(start)
+ 320 0.005 0.000 0.020 0.000 models.py:58(_encode_params)
+ 320 0.006 0.000 0.020 0.000 models.py:332(prepare_body)
+ 320 0.010 0.000 0.020 0.000 models.py:323(prepare_headers)
+ 320 0.004 0.000 0.020 0.000 adapters.py:154(request_url)
+ 55 0.002 0.000 0.019 0.000 sre_compile.py:367(_compile_info)
+ 295/271 0.011 0.000 0.019 0.000 socket.py:333(read)
+ 640 0.012 0.000 0.019 0.000 posixpath.py:248(expanduser)
+ 320 0.005 0.000 0.019 0.000 models.py:401(prepare_auth)
+ 372 0.014 0.000 0.019 0.000 {method 'switch' of 'greenlet.greenlet' objects}
+ 320 0.019 0.000 0.019 0.000 {method 'send' of '_socket.socket' objects}
+ 320 0.005 0.000 0.019 0.000 _collections.py:45(__getitem__)
+ 290 0.009 0.000 0.019 0.000 cgi.py:304(parse_header)
+ 939 0.012 0.000 0.018 0.000 threading.py:116(acquire)
+ 13613 0.018 0.000 0.018 0.000 {method 'get' of 'dict' objects}
+ 320 0.007 0.000 0.018 0.000 greenlet.py:459(_notify_links)
+ 1 0.001 0.001 0.017 0.017 Cookie.py:206(<module>)
+ 2 0.000 0.000 0.017 0.008 __init__.py:71(search_function)
+ 11 0.002 0.000 0.017 0.002 {__import__}
+ 290 0.002 0.000 0.017 0.000 connectionpool.py:233(_put_conn)
+ 1 0.000 0.000 0.016 0.016 monkey.py:95(patch_all)
+ 1 0.001 0.001 0.016 0.016 monkey.py:44(patch_socket)
+ 1 0.001 0.001 0.016 0.016 idna.py:3(<module>)
+ 1211 0.011 0.000 0.016 0.000 threading.py:101(__init__)
+ 2619 0.012 0.000 0.016 0.000 sre_parse.py:188(__next)
+ 320 0.007 0.000 0.016 0.000 Queue.py:107(put)
+ 320 0.003 0.000 0.016 0.000 models.py:436(prepare_hooks)
+ 1 0.005 0.005 0.015 0.015 socket.py:32(<module>)
+ 320 0.005 0.000 0.015 0.000 Queue.py:150(get)
+ 640 0.005 0.000 0.014 0.000 utils.py:584(get_auth_from_url)
+ 3312 0.011 0.000 0.014 0.000 structures.py:45(<genexpr>)
+ 1740 0.010 0.000 0.014 0.000 rfc822.py:285(getheader)
+ 320 0.003 0.000 0.014 0.000 pool.py:43(add)
+ 290 0.007 0.000 0.014 0.000 mimetools.py:33(parsetype)
+ 933 0.007 0.000 0.014 0.000 greenlet.py:400(rawlink)
+ 30/1 0.002 0.000 0.013 0.013 socket.py:603(getaddrinfo)
+ 320 0.005 0.000 0.013 0.000 urllib.py:1193(quote)
+ 939 0.009 0.000 0.013 0.000 threading.py:136(release)
+ 2210 0.008 0.000 0.013 0.000 <string>:8(__new__)
+ 320 0.006 0.000 0.013 0.000 socket.py:315(dup)
+ 2 0.007 0.003 0.012 0.006 sre_compile.py:307(_optimize_unicode)
+ 290 0.004 0.000 0.012 0.000 util.py:235(is_connection_dropped)
+ 652 0.012 0.000 0.012 0.000 {posix.stat}
+ 610 0.004 0.000 0.012 0.000 {method 'decode' of 'str' objects}
+ 320 0.001 0.000 0.012 0.000 greenlet.py:455(link_exception)
+ 641 0.005 0.000 0.011 0.000 threading.py:272(notify)
+ 1866 0.007 0.000 0.011 0.000 sre_parse.py:136(__getitem__)
+ 320 0.004 0.000 0.011 0.000 models.py:136(register_hook)
+ 6668 0.011 0.000 0.011 0.000 {method 'find' of 'str' objects}
+ 1280 0.007 0.000 0.011 0.000 httplib.py:889(putheader)
+ 320 0.004 0.000 0.011 0.000 greenlet.py:411(link)
+ 3602 0.011 0.000 0.011 0.000 {getattr}
+ 320 0.004 0.000 0.011 0.000 adapters.py:169(add_headers)
+ 3 0.010 0.003 0.010 0.003 {method 'read' of 'file' objects}
+ 290 0.010 0.000 0.010 0.000 pphidden_async.py:29(cb_response)
+ 320 0.004 0.000 0.010 0.000 ordered_dict.py:178(pop)
+ 320 0.002 0.000 0.010 0.000 {next}
+ 290 0.003 0.000 0.010 0.000 models.py:515(iter_content)
+ 1280 0.006 0.000 0.010 0.000 models.py:327(<genexpr>)
+ 4999 0.010 0.000 0.010 0.000 {method 'seek' of 'cStringIO.StringO' objects}
+ 1359 0.008 0.000 0.010 0.000 {method 'add' of 'set' objects}
+ 320 0.002 0.000 0.010 0.000 __init__.py:1244(isEnabledFor)
+ 580 0.005 0.000 0.010 0.000 httplib.py:497(close)
+ 1742 0.008 0.000 0.010 0.000 httplib.py:216(addheader)
+ 1 0.004 0.004 0.009 0.009 mimetools.py:1(<module>)
+ 1 0.006 0.006 0.009 0.009 __init__.py:5(<module>)
+ 320 0.008 0.000 0.009 0.000 util.py:63(split_first)
+ 320 0.009 0.000 0.009 0.000 pphidden_async.py:19(next)
+ 1280 0.006 0.000 0.009 0.000 ordered_dict.py:125(items)
+ 290 0.007 0.000 0.009 0.000 mimetools.py:50(parseplist)
+ 290 0.001 0.000 0.009 0.000 __init__.py:1034(debug)
+ 960 0.005 0.000 0.009 0.000 idna.py:62(ToASCII)
+ 320 0.008 0.000 0.009 0.000 greenlet.py:146(__init__)
+ 30 0.009 0.000 0.009 0.000 {gevent.core.dns_resolve_ipv4}
+ 869 0.006 0.000 0.009 0.000 cgi.py:292(_parseparam)
+ 3478 0.009 0.000 0.009 0.000 {built-in method __new__ of type object at 0x82f680}
+ 1 0.002 0.002 0.008 0.008 urlparse.py:26(<module>)
+ 1 0.004 0.004 0.008 0.008 socket.py:44(<module>)
+ 610 0.003 0.000 0.008 0.000 utf_8.py:15(decode)
+ 5132 0.008 0.000 0.008 0.000 UserDict.py:69(__contains__)
+ 290 0.003 0.000 0.008 0.000 structures.py:63(__getitem__)
+ 596/230 0.007 0.000 0.008 0.000 sre_parse.py:146(getwidth)
+ 350 0.004 0.000 0.008 0.000 socket.py:201(__init__)
+ 290 0.006 0.000 0.008 0.000 response.py:60(__init__)
+ 4480 0.008 0.000 0.008 0.000 ordered_dict.py:64(__iter__)
+ 320 0.004 0.000 0.008 0.000 models.py:37(path_url)
+ 320 0.008 0.000 0.008 0.000 __init__.py:1230(getEffectiveLevel)
+ 2060 0.008 0.000 0.008 0.000 cookielib.py:1710(__iter__)
+ 1 0.002 0.002 0.007 0.007 util.py:8(<module>)
+ 1 0.001 0.001 0.007 0.007 urllib2.py:76(<module>)
+ 1 0.000 0.000 0.007 0.007 decoder.py:244(JSONDecoder)
+ 290 0.002 0.000 0.007 0.000 utils.py:381(stream_untransfer)
+ 320 0.005 0.000 0.007 0.000 urllib.py:1234(urlencode)
+ 847 0.007 0.000 0.007 0.000 sre_parse.py:132(__len__)
+ 293 0.002 0.000 0.007 0.000 queue.py:147(get)
+ 640 0.005 0.000 0.007 0.000 ordered_dict.py:117(keys)
+ 320 0.006 0.000 0.007 0.000 models.py:179(__init__)
+ 4930 0.007 0.000 0.007 0.000 {method 'strip' of 'str' objects}
+ 3890 0.007 0.000 0.007 0.000 {method 'items' of 'dict' objects}
+ 1281 0.006 0.000 0.007 0.000 {method 'encode' of 'str' objects}
+ 290 0.002 0.000 0.007 0.000 httplib.py:467(_check_close)
+ 1208 0.007 0.000 0.007 0.000 cookielib.py:848(__init__)
+ 1 0.004 0.004 0.006 0.006 __init__.py:4(<module>)
+ 1 0.003 0.003 0.006 0.006 argparse.py:76(<module>)
+ 5 0.000 0.000 0.006 0.001 scanner.py:65(decorator)
+ 320 0.003 0.000 0.006 0.000 utils.py:397(unquote_unreserved)
+ 320 0.004 0.000 0.006 0.000 utils.py:118(to_key_val_list)
+ 320 0.002 0.000 0.006 0.000 sessions.py:59(get_original_key)
+ 317 0.005 0.000 0.006 0.000 ordered_dict.py:55(__delitem__)
+ 2657 0.006 0.000 0.006 0.000 {method 'startswith' of 'str' objects}
+ 30 0.001 0.000 0.006 0.000 hub.py:282(switch_args)
+ 1600 0.005 0.000 0.006 0.000 httplib.py:765(_output)
+ 290 0.004 0.000 0.006 0.000 httplib.py:631(getheaders)
+ 320 0.006 0.000 0.006 0.000 greenlet.py:361(_report_result)
+ 610 0.006 0.000 0.006 0.000 {built-in method utcnow}
+ 2222 0.006 0.000 0.006 0.000 {built-in method acquire}
+ 1 0.003 0.003 0.005 0.005 tempfile.py:18(<module>)
+ 1 0.000 0.000 0.005 0.005 platform.py:1007(_syscmd_uname)
+ 1 0.003 0.003 0.005 0.005 io.py:35(<module>)
+ 1 0.003 0.003 0.005 0.005 __init__.py:24(<module>)
+ 1 0.000 0.000 0.005 0.005 argparse.py:1556(__init__)
+ 3 0.004 0.001 0.005 0.002 collections.py:13(namedtuple)
+ 4 0.000 0.000 0.005 0.001 platform.py:1288(system)
+ 7 0.000 0.000 0.005 0.001 platform.py:1151(uname)
+ 320 0.002 0.000 0.005 0.000 utils.py:43(super_len)
+ 320 0.003 0.000 0.005 0.000 util.py:44(__new__)
+ 2519 0.005 0.000 0.005 0.000 threading.py:64(_note)
+ 641 0.003 0.000 0.005 0.000 threading.py:221(_is_owned)
+ 610 0.004 0.000 0.005 0.000 socket.py:267(close)
+ 320 0.002 0.000 0.005 0.000 pool.py:201(discard)
+ 595 0.003 0.000 0.005 0.000 models.py:252(__init__)
+ 2647 0.005 0.000 0.005 0.000 {method 'tell' of 'cStringIO.StringO' objects}
+ 2381 0.005 0.000 0.005 0.000 {method 'sort' of 'list' objects}
+ 1864 0.005 0.000 0.005 0.000 {method 'setdefault' of 'dict' objects}
+ 1280 0.005 0.000 0.005 0.000 {method 'find' of 'unicode' objects}
+ 320 0.005 0.000 0.005 0.000 {built-in method split}
+ 290 0.003 0.000 0.005 0.000 {built-in method register}
+ 1 0.000 0.000 0.004 0.004 urllib2.py:803(AbstractBasicAuthHandler)
+ 1 0.004 0.004 0.004 0.004 socket.py:176(_socketobject)
+ 1 0.000 0.000 0.004 0.004 encoder.py:2(<module>)
+ 2 0.000 0.000 0.004 0.002 warnings.py:45(filterwarnings)
+ 1015 0.004 0.000 0.004 0.000 {sys.exc_clear}
+ 612 0.003 0.000 0.004 0.000 <string>:1(fileno)
+ 1255 0.002 0.000 0.004 0.000 sre_parse.py:201(match)
+ 320 0.003 0.000 0.004 0.000 socket.py:237(__init__)
+ 320 0.002 0.000 0.004 0.000 sessions.py:485(get_adapter)
+ 293 0.002 0.000 0.004 0.000 queue.py:95(put)
+ 1837 0.004 0.000 0.004 0.000 {min}
+ 2671 0.004 0.000 0.004 0.000 {method 'upper' of 'str' objects}
+ 1237 0.004 0.000 0.004 0.000 {method 'split' of 'str' objects}
+ 2992 0.004 0.000 0.004 0.000 {method 'keys' of 'dict' objects}
+ 105 0.002 0.000 0.004 0.000 hub.py:270(switch)
+ 320 0.003 0.000 0.004 0.000 grequests.py:78(__init__)
+ 2967 0.004 0.000 0.004 0.000 {cStringIO.StringIO}
+ 320 0.002 0.000 0.004 0.000 cookielib.py:1253(_cookie_attrs)
+ 610 0.004 0.000 0.004 0.000 {_codecs.utf_8_decode}
+ 1 0.002 0.002 0.003 0.003 response.py:7(<module>)
+ 1 0.001 0.001 0.003 0.003 models.py:8(<module>)
+ 1 0.001 0.001 0.003 0.003 greenlet.py:3(<module>)
+ 1 0.000 0.000 0.003 0.003 api.py:12(<module>)
+ 3 0.003 0.001 0.003 0.001 {posix.popen}
+ 320 0.001 0.000 0.003 0.000 urlparse.py:198(urlunparse)
+ 1224 0.003 0.000 0.003 0.000 threading.py:59(__init__)
+ 860 0.002 0.000 0.003 0.000 sre_parse.py:144(append)
+ 17 0.003 0.000 0.003 0.000 sre_compile.py:264(_mk_bitmap)
+ 2032 0.003 0.000 0.003 0.000 rfc822.py:219(iscomment)
+ 2032 0.003 0.000 0.003 0.000 rfc822.py:209(islast)
+ 334 0.002 0.000 0.003 0.000 queue.py:80(qsize)
+ 640 0.002 0.000 0.003 0.000 Queue.py:237(_qsize)
+ 20 0.001 0.000 0.003 0.000 queue.py:193(_unlock)
+ 320 0.002 0.000 0.003 0.000 pool.py:47(discard)
+ 320 0.002 0.000 0.003 0.000 models.py:389(prepare_content_length)
+ 2352 0.003 0.000 0.003 0.000 {method 'read' of 'cStringIO.StringO' objects}
+ 2280 0.003 0.000 0.003 0.000 {method 'pop' of 'dict' objects}
+ 3484 0.003 0.000 0.003 0.000 {method 'isspace' of 'str' objects}
+ 672 0.003 0.000 0.003 0.000 {method 'format' of 'str' objects}
+ 7 0.002 0.000 0.003 0.000 __init__.py:959(_fixupParents)
+ 7 0.000 0.000 0.003 0.000 __init__.py:927(getLogger)
+ 7 0.000 0.000 0.003 0.000 __init__.py:1420(getLogger)
+ 1064 0.003 0.000 0.003 0.000 hub.py:115(get_hub)
+ 320 0.003 0.000 0.003 0.000 greenlet.py:236(start)
+ 30 0.001 0.000 0.003 0.000 connectionpool.py:189(_new_conn)
+ 320 0.002 0.000 0.003 0.000 adapters.py:77(cert_verify)
+ 16 0.001 0.000 0.003 0.000 abc.py:83(__new__)
+ 1 0.001 0.001 0.002 0.002 threading.py:1(<module>)
+ 1 0.001 0.001 0.002 0.002 ssl.py:56(<module>)
+ 1 0.001 0.001 0.002 0.002 six.py:1(<module>)
+ 1 0.001 0.001 0.002 0.002 sessions.py:10(<module>)
+ 1 0.000 0.000 0.002 0.002 re.py:134(match)
+ 1 0.001 0.001 0.002 0.002 Queue.py:1(<module>)
+ 1 0.000 0.000 0.002 0.002 poolmanager.py:7(<module>)
+ 1 0.002 0.002 0.002 0.002 mimetypes.py:324(_default_mime_types)
+ 1 0.000 0.000 0.002 0.002 mimetypes.py:23(<module>)
+ 1 0.002 0.002 0.002 0.002 httplib.py:67(<module>)
+ 1 0.000 0.000 0.002 0.002 cookielib.py:1201(CookieJar)
+ 1 0.002 0.002 0.002 0.002 calendar.py:6(<module>)
+ 1 0.000 0.000 0.002 0.002 argparse.py:2021(_match_arguments_partial)
+ 1 0.000 0.000 0.002 0.002 argparse.py:1880(consume_positionals)
+ 1 0.000 0.000 0.002 0.002 argparse.py:1735(_parse_known_args)
+ 1 0.000 0.000 0.002 0.002 argparse.py:1704(parse_known_args)
+ 1 0.000 0.000 0.002 0.002 argparse.py:1697(parse_args)
+ 3 0.000 0.000 0.002 0.001 sessions.py:188(__init__)
+ 3 0.000 0.000 0.002 0.001 poolmanager.py:61(_new_pool)
+ 3 0.000 0.000 0.002 0.001 grbrute.py:21(__init__)
+ 3 0.000 0.000 0.002 0.001 gettext.py:565(gettext)
+ 3 0.001 0.000 0.002 0.001 gettext.py:527(dgettext)
+ 3 0.000 0.000 0.002 0.001 gettext.py:461(translation)
+ 3 0.000 0.000 0.002 0.001 gettext.py:421(find)
+ 3 0.000 0.000 0.002 0.001 connectionpool.py:171(__init__)
+ 3 0.000 0.000 0.002 0.001 argparse.py:1190(__init__)
+ 46 0.000 0.000 0.002 0.000 urlparse.py:59(clear_cache)
+ 485 0.002 0.000 0.002 0.000 urlparse.py:303(<genexpr>)
+ 320 0.002 0.000 0.002 0.000 urlparse.py:208(urlunsplit)
+ 485 0.002 0.000 0.002 0.000 urllib.py:1168(<genexpr>)
+ 931 0.002 0.000 0.002 0.000 {time.time}
+ 1880 0.002 0.000 0.002 0.000 {thread.get_ident}
+ 1225 0.002 0.000 0.002 0.000 {thread.allocate_lock}
+ 693 0.002 0.000 0.002 0.000 {sys.exc_info}
+ 441 0.002 0.000 0.002 0.000 sre_parse.py:96(__init__)
+ 175 0.001 0.000 0.002 0.000 sre_compile.py:360(_simple)
+ 320 0.001 0.000 0.002 0.000 socket.py:276(__del__)
+ 290 0.001 0.000 0.002 0.000 rfc822.py:454(items)
+ 664 0.002 0.000 0.002 0.000 {range}
+ 320 0.001 0.000 0.002 0.000 Queue.py:243(_get)
+ 320 0.001 0.000 0.002 0.000 Queue.py:240(_put)
+ 320 0.001 0.000 0.002 0.000 models.py:267(prepare_method)
+ 640 0.002 0.000 0.002 0.000 {method 'update' of 'dict' objects}
+ 592 0.002 0.000 0.002 0.000 {method 'rotate' of 'collections.deque' objects}
+ 60 0.002 0.000 0.002 0.000 {method 'connect_ex' of '_socket.socket' objects}
+ 30 0.000 0.000 0.002 0.000 __init__.py:1046(info)
+ 918 0.002 0.000 0.002 0.000 hooks.py:20(default_hooks)
+ 320 0.001 0.000 0.002 0.000 greenlet.py:66(__call__)
+ 320 0.001 0.000 0.002 0.000 greenlet.py:30(__hash__)
+ 933 0.002 0.000 0.002 0.000 greenlet.py:160(ready)
+ 1759 0.002 0.000 0.002 0.000 {greenlet.getcurrent}
+ 320 0.002 0.000 0.002 0.000 cookielib.py:1246(_cookies_for_request)
+ 1768 0.002 0.000 0.002 0.000 {chr}
+ 1581 0.002 0.000 0.002 0.000 {built-in method release}
+ 290 0.002 0.000 0.002 0.000 {built-in method poll}
+ 320 0.002 0.000 0.002 0.000 abc.py:125(__instancecheck__)
+ 1 0.001 0.001 0.001 0.001 status_codes.py:3(<module>)
+ 1 0.001 0.001 0.001 0.001 ssl.py:58(SSLSocket)
+ 1 0.000 0.000 0.001 0.001 ssl.py:13(<module>)
+ 1 0.001 0.001 0.001 0.001 socket.py:199(socket)
+ 1 0.001 0.001 0.001 0.001 random.py:40(<module>)
+ 1 0.001 0.001 0.001 0.001 queue.py:16(<module>)
+ 1 0.000 0.000 0.001 0.001 pool.py:88(kill)
+ 1 0.000 0.000 0.001 0.001 pool.py:208(kill)
+ 1 0.001 0.001 0.001 0.001 netrc.py:1(<module>)
+ 1 0.000 0.000 0.001 0.001 hub.py:3(<module>)
+ 1 0.001 0.001 0.001 0.001 heapq.py:31(<module>)
+ 1 0.001 0.001 0.001 0.001 hashlib.py:55(<module>)
+ 1 0.001 0.001 0.001 0.001 exceptions.py:9(<module>)
+ 1 0.001 0.001 0.001 0.001 exceptions.py:10(<module>)
+ 1 0.000 0.000 0.001 0.001 cookies.py:7(<module>)
+ 1 0.000 0.000 0.001 0.001 _collections.py:7(<module>)
+ 1 0.001 0.001 0.001 0.001 collections.py:1(<module>)
+ 1 0.001 0.001 0.001 0.001 base64.py:3(<module>)
+ 1 0.000 0.000 0.001 0.001 auth.py:8(<module>)
+ 643 0.001 0.000 0.001 0.000 UserDict.py:17(__getitem__)
+ 320 0.001 0.000 0.001 0.000 urlparse.py:77(password)
+ 320 0.001 0.000 0.001 0.000 urlparse.py:67(username)
+ 30 0.000 0.000 0.001 0.000 timeout.py:100(start_new)
+ 147 0.001 0.000 0.001 0.000 sre_parse.py:263(_escape)
+ 130 0.001 0.000 0.001 0.000 sre_parse.py:231(_class_escape)
+ 64 0.000 0.000 0.001 0.000 sre_parse.py:184(__init__)
+ 108 0.001 0.000 0.001 0.000 sre_compile.py:480(isstring)
+ 350 0.001 0.000 0.001 0.000 socket.py:422(settimeout)
+ 320 0.001 0.000 0.001 0.000 socket.py:283(flush)
+ 274 0.001 0.000 0.001 0.000 {setattr}
+ 293 0.001 0.000 0.001 0.000 queue.py:59(_put)
+ 293 0.001 0.000 0.001 0.000 queue.py:56(_get)
+ 293 0.001 0.000 0.001 0.000 queue.py:229(_schedule_unlock)
+ 6 0.000 0.000 0.001 0.000 poolmanager.py:55(__init__)
+ 743 0.001 0.000 0.001 0.000 {ord}
+ 350 0.001 0.000 0.001 0.000 {method 'setblocking' of '_socket.socket' objects}
+ 641 0.001 0.000 0.001 0.000 {method 'rstrip' of 'str' objects}
+ 954 0.001 0.000 0.001 0.000 {method 'pop' of 'set' objects}
+ 320 0.001 0.000 0.001 0.000 {method 'pop' of 'list' objects}
+ 320 0.001 0.000 0.001 0.000 {method 'lower' of 'unicode' objects}
+ 578 0.001 0.000 0.001 0.000 {method 'index' of 'str' objects}
+ 642 0.001 0.000 0.001 0.000 {method 'fileno' of '_socket.socket' objects}
+ 358 0.001 0.000 0.001 0.000 {method 'extend' of 'list' objects}
+ 661 0.001 0.000 0.001 0.000 {method 'discard' of 'set' objects}
+ 289 0.001 0.000 0.001 0.000 {method 'count' of 'str' objects}
+ 275 0.001 0.000 0.001 0.000 {method 'copy' of 'dict' objects}
+ 46 0.001 0.000 0.001 0.000 {method 'clear' of 'dict' objects}
+ 367 0.001 0.000 0.001 0.000 {method 'cancel' of 'gevent.core.event' objects}
+ 360 0.001 0.000 0.001 0.000 {max}
+ 3 0.000 0.000 0.001 0.000 __init__.py:337(__init__)
+ 51/21 0.002 0.000 0.001 0.000 hub.py:296(get)
+ 875 0.001 0.000 0.001 0.000 httplib.py:502(isclosed)
+ 320 0.001 0.000 0.001 0.000 greenlet.py:23(__init__)
+ 320 0.001 0.000 0.001 0.000 greenlet.py:164(successful)
+ 693 0.001 0.000 0.001 0.000 {gevent.core.set_exc_info}
+ 6 0.000 0.000 0.001 0.000 gettext.py:130(_expand_lang)
+ 580 0.001 0.000 0.001 0.000 cookies.py:87(info)
+ 290 0.001 0.000 0.001 0.000 cookies.py:80(__init__)
+ 257 0.001 0.000 0.001 0.000 Cookie.py:308(<genexpr>)
+ 610 0.001 0.000 0.001 0.000 cookielib.py:43(_debug)
+ 1253 0.001 0.000 0.001 0.000 {callable}
+ 320 0.001 0.000 0.001 0.000 {built-in method fromkeys}
+ 323 0.001 0.000 0.001 0.000 {built-in method __enter__}
+ 5 0.000 0.000 0.001 0.000 argparse.py:1271(add_argument)
+ 322 0.000 0.000 0.001 0.000 {any}
+ 341 0.001 0.000 0.001 0.000 {all}
+ 6 0.000 0.000 0.001 0.000 adapters.py:70(init_poolmanager)
+ 6 0.000 0.000 0.001 0.000 adapters.py:49(__init__)
+ 16 0.000 0.000 0.001 0.000 abc.py:86(<genexpr>)
+ 1 0.000 0.000 0.000 0.000 {zip}
+ 3 0.000 0.000 0.000 0.000 warnings.py:361(__exit__)
+ 3 0.000 0.000 0.000 0.000 warnings.py:345(__enter__)
+ 3 0.000 0.000 0.000 0.000 warnings.py:324(__init__)
+ 2 0.000 0.000 0.000 0.000 warnings.py:14(warnpy3k)
+ 1 0.000 0.000 0.000 0.000 uuid.py:53(UUID)
+ 4 0.000 0.000 0.000 0.000 uuid.py:101(__init__)
+ 3 0.000 0.000 0.000 0.000 utils.py:493(default_headers)
+ 3 0.000 0.000 0.000 0.000 utils.py:462(default_user_agent)
+ 1 0.000 0.000 0.000 0.000 util.py:53(__init__)
+ 1 0.000 0.000 0.000 0.000 util.py:50(lazy_property)
+ 1 0.000 0.000 0.000 0.000 util.py:4(wrap_errors)
+ 1 0.000 0.000 0.000 0.000 util.py:4(<module>)
+ 1 0.000 0.000 0.000 0.000 util.py:37(Url)
+ 1 0.000 0.000 0.000 0.000 util.py:2(<module>)
+ 1 0.000 0.000 0.000 0.000 urlparse.py:64(ResultMixin)
+ 1 0.000 0.000 0.000 0.000 urlparse.py:115(ParseResult)
+ 1 0.000 0.000 0.000 0.000 urlparse.py:107(SplitResult)
+ 1 0.000 0.000 0.000 0.000 urllib.py:977(addinfourl)
+ 1 0.000 0.000 0.000 0.000 urllib.py:967(addinfo)
+ 1 0.000 0.000 0.000 0.000 urllib.py:952(addclosehook)
+ 1 0.000 0.000 0.000 0.000 urllib.py:923(addbase)
+ 1 0.000 0.000 0.000 0.000 urllib.py:845(ftpwrapper)
+ 1 0.000 0.000 0.000 0.000 urllib.py:615(FancyURLopener)
+ 1 0.000 0.000 0.000 0.000 urllib.py:115(URLopener)
+ 1 0.000 0.000 0.000 0.000 urllib.py:109(ContentTooShortError)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:895(AbstractDigestAuthHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:867(ProxyBasicAuthHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:857(HTTPBasicAuthHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:793(HTTPPasswordMgrWithDefaultRealm)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:729(HTTPPasswordMgr)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:686(ProxyHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:520(HTTPRedirectHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:516(HTTPDefaultErrorHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:499(HTTPErrorProcessor)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:480(BaseHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:297(OpenerDirector)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:187(Request)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:149(HTTPError)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:136(URLError)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1369(CacheFTPHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1310(FTPHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1258(FileHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1200(UnknownHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1182(HTTPCookieProcessor)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1175(HTTPSHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1167(HTTPHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1065(AbstractHTTPHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1053(ProxyDigestAuthHandler)
+ 1 0.000 0.000 0.000 0.000 urllib2.py:1035(HTTPDigestAuthHandler)
+ 1 0.000 0.000 0.000 0.000 traceback.py:1(<module>)
+ 30 0.000 0.000 0.000 0.000 timeout.py:90(start)
+ 30 0.000 0.000 0.000 0.000 timeout.py:85(__init__)
+ 1 0.000 0.000 0.000 0.000 timeout.py:32(Timeout)
+ 1 0.000 0.000 0.000 0.000 timeout.py:14(<module>)
+ 30 0.000 0.000 0.000 0.000 timeout.py:128(cancel)
+ 30 0.000 0.000 0.000 0.000 timeout.py:120(pending)
+ 1 0.000 0.000 0.000 0.000 threading.py:99(_RLock)
+ 1 0.000 0.000 0.000 0.000 threading.py:783(_DummyThread)
+ 1 0.000 0.000 0.000 0.000 threading.py:752(_set_daemon)
+ 1 0.000 0.000 0.000 0.000 threading.py:744(__init__)
+ 1 0.000 0.000 0.000 0.000 threading.py:742(_MainThread)
+ 1 0.000 0.000 0.000 0.000 threading.py:713(_Timer)
+ 1 0.000 0.000 0.000 0.000 threading.py:57(_Verbose)
+ 1 0.000 0.000 0.000 0.000 threading.py:510(_set_ident)
+ 1 0.000 0.000 0.000 0.000 threading.py:426(__init__)
+ 1 0.000 0.000 0.000 0.000 threading.py:414(Thread)
+ 1 0.000 0.000 0.000 0.000 threading.py:376(set)
+ 1 0.000 0.000 0.000 0.000 threading.py:366(__init__)
+ 1 0.000 0.000 0.000 0.000 threading.py:362(_Event)
+ 1 0.000 0.000 0.000 0.000 threading.py:359(Event)
+ 1 0.000 0.000 0.000 0.000 threading.py:347(_BoundedSemaphore)
+ 1 0.000 0.000 0.000 0.000 threading.py:299(_Semaphore)
+ 1 0.000 0.000 0.000 0.000 threading.py:290(notifyAll)
+ 11 0.000 0.000 0.000 0.000 threading.py:181(__init__)
+ 1 0.000 0.000 0.000 0.000 threading.py:179(_Condition)
+ 11 0.000 0.000 0.000 0.000 threading.py:176(Condition)
+ 1 0.000 0.000 0.000 0.000 tempfile.py:483(SpooledTemporaryFile)
+ 1 0.000 0.000 0.000 0.000 tempfile.py:357(_TemporaryFileWrapper)
+ 1 0.000 0.000 0.000 0.000 tempfile.py:107(_RandomNameSequence)
+ 4 0.000 0.000 0.000 0.000 {sys._getframe}
+ 1 0.000 0.000 0.000 0.000 structures.py:9(<module>)
+ 1 0.000 0.000 0.000 0.000 structures.py:78(__init__)
+ 1 0.000 0.000 0.000 0.000 structures.py:75(LookupDict)
+ 1 0.000 0.000 0.000 0.000 structures.py:36(CaseInsensitiveDict)
+ 1 0.000 0.000 0.000 0.000 structures.py:15(IteratorProxy)
+ 20 0.000 0.000 0.000 0.000 {_struct.calcsize}
+ 20 0.000 0.000 0.000 0.000 string.py:364(rfind)
+ 1 0.000 0.000 0.000 0.000 string.py:281(split)
+ 1 0.000 0.000 0.000 0.000 string.py:248(strip)
+ 1 0.000 0.000 0.000 0.000 string.py:220(lower)
+ 1 0.000 0.000 0.000 0.000 stringprep.py:6(<module>)
+ 1 0.000 0.000 0.000 0.000 StringIO.py:42(StringIO)
+ 1 0.000 0.000 0.000 0.000 StringIO.py:30(<module>)
+ 1 0.000 0.000 0.000 0.000 <string>:1(Url)
+ 1 0.000 0.000 0.000 0.000 <string>:1(SplitResult)
+ 1 0.000 0.000 0.000 0.000 <string>:1(ParseResult)
+ 1 0.000 0.000 0.000 0.000 ssl.py:83(SSLSocket)
+ 1 0.000 0.000 0.000 0.000 sre_parse.py:91(checkgroup)
+ 90 0.000 0.000 0.000 0.000 sre_parse.py:89(closegroup)
+ 90 0.000 0.000 0.000 0.000 sre_parse.py:78(opengroup)
+ 66 0.000 0.000 0.000 0.000 sre_parse.py:73(__init__)
+ 4 0.000 0.000 0.000 0.000 sre_parse.py:222(isname)
+ 12 0.000 0.000 0.000 0.000 sre_parse.py:216(isident)
+ 3 0.000 0.000 0.000 0.000 sre_parse.py:213(seek)
+ 11 0.000 0.000 0.000 0.000 sre_parse.py:211(tell)
+ 185 0.000 0.000 0.000 0.000 sre_parse.py:140(__setitem__)
+ 4 0.000 0.000 0.000 0.000 sre_parse.py:134(__delitem__)
+ 161 0.000 0.000 0.000 0.000 {_sre.getlower}
+ 20 0.000 0.000 0.000 0.000 sre_compile.py:57(fixup)
+ 318 0.000 0.000 0.000 0.000 sre_compile.py:24(_identityfunction)
+ 55 0.000 0.000 0.000 0.000 {_sre.compile}
+ 30 0.000 0.000 0.000 0.000 socket.py:579(gethostbyname)
+ 30/1 0.001 0.000 0.000 0.000 socket.py:534(create_connection)
+ 30/1 0.087 0.003 0.000 0.000 socket.py:269(connect)
+ 1 0.000 0.000 0.000 0.000 socket.py:226(_fileobject)
+ 1 0.000 0.000 0.000 0.000 socket.py:186(_closedsocket)
+ 1 0.000 0.000 0.000 0.000 socket.py:164(_closedsocket)
+ 30/1 0.000 0.000 0.000 0.000 socket.py:154(wait_readwrite)
+ 322/1 0.004 0.000 0.000 0.000 socket.py:136(wait_read)
+ 30 0.000 0.000 0.000 0.000 {_socket.inet_ntop}
+ 350 0.000 0.000 0.000 0.000 {_socket.getdefaulttimeout}
+ 31 0.000 0.000 0.000 0.000 six.py:93(__init__)
+ 1 0.000 0.000 0.000 0.000 six.py:91(MovedModule)
+ 1 0.000 0.000 0.000 0.000 six.py:83(__get__)
+ 40 0.000 0.000 0.000 0.000 six.py:80(__init__)
+ 1 0.000 0.000 0.000 0.000 six.py:78(_LazyDescr)
+ 1 0.000 0.000 0.000 0.000 six.py:72(_import_module)
+ 4 0.000 0.000 0.000 0.000 six.py:67(_add_doc)
+ 1 0.000 0.000 0.000 0.000 six.py:54(__len__)
+ 1 0.000 0.000 0.000 0.000 six.py:53(X)
+ 1 0.000 0.000 0.000 0.000 six.py:317(exec_)
+ 1 0.000 0.000 0.000 0.000 six.py:247(Iterator)
+ 1 0.000 0.000 0.000 0.000 six.py:132(_MovedItems)
+ 1 0.000 0.000 0.000 0.000 six.py:126(_resolve)
+ 9 0.000 0.000 0.000 0.000 six.py:108(__init__)
+ 1 0.000 0.000 0.000 0.000 six.py:106(MovedAttribute)
+ 1 0.000 0.000 0.000 0.000 shlex.py:2(<module>)
+ 1 0.000 0.000 0.000 0.000 shlex.py:21(shlex)
+ 1 0.000 0.000 0.000 0.000 sessions.py:81(SessionRedirectMixin)
+ 6 0.000 0.000 0.000 0.000 sessions.py:500(mount)
+ 1 0.000 0.000 0.000 0.000 sessions.py:170(Session)
+ 290 0.000 0.000 0.000 0.000 {select.poll}
+ 5 0.000 0.000 0.000 0.000 scanner.py:64(pattern)
+ 1 0.000 0.000 0.000 0.000 scanner.py:3(<module>)
+ 1 0.000 0.000 0.000 0.000 scanner.py:17(Scanner)
+ 1 0.000 0.000 0.000 0.000 rfc822.py:85(Message)
+ 1 0.000 0.000 0.000 0.000 rfc822.py:770(AddressList)
+ 1 0.000 0.000 0.000 0.000 rfc822.py:71(<module>)
+ 1 0.000 0.000 0.000 0.000 rfc822.py:496(AddrlistClass)
+ 1 0.000 0.000 0.000 0.000 response.py:32(HTTPResponse)
+ 9 0.000 0.000 0.000 0.000 request.py:50(__init__)
+ 1 0.000 0.000 0.000 0.000 request.py:18(RequestMethods)
+ 2 0.000 0.000 0.000 0.000 re.py:206(escape)
+ 3 0.000 0.000 0.000 0.000 {repr}
+ 1 0.000 0.000 0.000 0.000 random.py:99(seed)
+ 1 0.000 0.000 0.000 0.000 random.py:90(__init__)
+ 1 0.000 0.000 0.000 0.000 random.py:793(SystemRandom)
+ 1 0.000 0.000 0.000 0.000 random.py:71(Random)
+ 1 0.000 0.000 0.000 0.000 random.py:643(WichmannHill)
+ 1 0.000 0.000 0.000 0.000 Queue.py:9(Empty)
+ 7 0.000 0.000 0.000 0.000 queue.py:53(_init)
+ 7 0.000 0.000 0.000 0.000 queue.py:41(__init__)
+ 1 0.000 0.000 0.000 0.000 queue.py:31(Queue)
+ 1 0.000 0.000 0.000 0.000 queue.py:272(JoinableQueue)
+ 1 0.000 0.000 0.000 0.000 queue.py:259(LifoQueue)
+ 1 0.000 0.000 0.000 0.000 queue.py:243(PriorityQueue)
+ 1 0.000 0.000 0.000 0.000 queue.py:235(ItemWaiter)
+ 3 0.000 0.000 0.000 0.000 Queue.py:234(_init)
+ 1 0.000 0.000 0.000 0.000 Queue.py:231(LifoQueue)
+ 3 0.000 0.000 0.000 0.000 Queue.py:22(__init__)
+ 1 0.000 0.000 0.000 0.000 Queue.py:212(PriorityQueue)
+ 1 0.000 0.000 0.000 0.000 Queue.py:17(Queue)
+ 1 0.000 0.000 0.000 0.000 Queue.py:13(Full)
+ 1 0.000 0.000 0.000 0.000 pprint.py:81(PrettyPrinter)
+ 1 0.000 0.000 0.000 0.000 pprint.py:35(<module>)
+ 1 0.000 0.000 0.000 0.000 pphidden_async.py:8(__init__)
+ 1 0.000 0.000 0.000 0.000 pphidden_async.py:7(Pp_url)
+ 3 0.000 0.000 0.000 0.000 {posix.uname}
+ 1 0.000 0.000 0.000 0.000 {posix.read}
+ 13 0.000 0.000 0.000 0.000 posixpath.py:59(join)
+ 1 0.000 0.000 0.000 0.000 posixpath.py:42(normcase)
+ 1 0.000 0.000 0.000 0.000 posixpath.py:117(dirname)
+ 1 0.000 0.000 0.000 0.000 posixpath.py:109(basename)
+ 1 0.000 0.000 0.000 0.000 {posix.open}
+ 1 0.000 0.000 0.000 0.000 {posix.close}
+ 1 0.000 0.000 0.000 0.000 pool.py:3(<module>)
+ 1 0.000 0.000 0.000 0.000 pool.py:220(pass_value)
+ 1 0.000 0.000 0.000 0.000 pool.py:18(__init__)
+ 1 0.000 0.000 0.000 0.000 pool.py:174(__init__)
+ 1 0.000 0.000 0.000 0.000 pool.py:172(Pool)
+ 1 0.000 0.000 0.000 0.000 pool.py:11(GreenletSet)
+ 1 0.000 0.000 0.000 0.000 poolmanager.py:27(PoolManager)
+ 1 0.000 0.000 0.000 0.000 poolmanager.py:147(ProxyManager)
+ 1 0.000 0.000 0.000 0.000 platform.py:390(_popen)
+ 3 0.000 0.000 0.000 0.000 platform.py:1479(python_version)
+ 3 0.000 0.000 0.000 0.000 platform.py:1467(python_implementation)
+ 6 0.000 0.000 0.000 0.000 platform.py:1364(_sys_version)
+ 3 0.000 0.000 0.000 0.000 platform.py:1307(release)
+ 1 0.000 0.000 0.000 0.000 os.py:747(urandom)
+ 1 0.000 0.000 0.000 0.000 os.py:35(_get_exports_list)
+ 1 0.000 0.000 0.000 0.000 ordered_dict.py:6(<module>)
+ 1 0.000 0.000 0.000 0.000 ordered_dict.py:17(OrderedDict)
+ 1 0.000 0.000 0.000 0.000 netrc.py:22(netrc)
+ 1 0.000 0.000 0.000 0.000 netrc.py:10(NetrcParseError)
+ 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:8(MozillaCookieJar)
+ 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:1(<module>)
+ 1 0.000 0.000 0.000 0.000 monkey.py:8(patch_os)
+ 1 0.000 0.000 0.000 0.000 monkey.py:68(patch_ssl)
+ 1 0.000 0.000 0.000 0.000 monkey.py:61(patch_dns)
+ 1 0.000 0.000 0.000 0.000 monkey.py:3(<module>)
+ 1 0.000 0.000 0.000 0.000 monkey.py:17(patch_time)
+ 1 0.000 0.000 0.000 0.000 models.py:442(Response)
+ 1 0.000 0.000 0.000 0.000 models.py:36(RequestEncodingMixin)
+ 1 0.000 0.000 0.000 0.000 models.py:233(PreparedRequest)
+ 1 0.000 0.000 0.000 0.000 models.py:156(Request)
+ 1 0.000 0.000 0.000 0.000 models.py:135(RequestHooksMixin)
+ 1 0.000 0.000 0.000 0.000 mimetypes.py:50(MimeTypes)
+ 1 0.000 0.000 0.000 0.000 mimetools.py:20(Message)
+ 4 0.000 0.000 0.000 0.000 {method 'write' of 'cStringIO.StringO' objects}
+ 5 0.000 0.000 0.000 0.000 {method 'translate' of 'str' objects}
+ 2 0.000 0.000 0.000 0.000 {method 'tostring' of 'array.array' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'toordinal' of 'datetime.date' objects}
+ 2 0.000 0.000 0.000 0.000 {method 'tolist' of 'array.array' objects}
+ 2 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects}
+ 22 0.000 0.000 0.000 0.000 {method 'rfind' of 'str' objects}
+ 6 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects}
+ 32 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects}
+ 90 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects}
+ 293 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects}
+ 320 0.000 0.000 0.000 0.000 {method 'iteritems' of 'dict' objects}
+ 254 0.000 0.000 0.000 0.000 {method 'isupper' of 'str' objects}
+ 21 0.000 0.000 0.000 0.000 {method 'isdigit' of 'str' objects}
+ 124 0.000 0.000 0.000 0.000 {method 'isalnum' of 'str' objects}
+ 5 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects}
+ 2 0.000 0.000 0.000 0.000 {method 'getvalue' of 'cStringIO.StringO' objects}
+ 60 0.000 0.000 0.000 0.000 {method 'getsockopt' of '_socket.socket' objects}
+ 37 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
+ 4 0.000 0.000 0.000 0.000 {method 'count' of 'list' objects}
+ 21 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'close' of 'file' objects}
+ 1 0.000 0.000 0.000 0.000 {method 'clear' of 'collections.deque' objects}
+ 296 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects}
+ 1 0.000 0.000 0.000 0.000 {math.sqrt}
+ 2 0.000 0.000 0.000 0.000 {math.log}
+ 1 0.000 0.000 0.000 0.000 {math.exp}
+ 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:49(LWPCookieJar)
+ 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:12(<module>)
+ 4 0.000 0.000 0.000 0.000 {locals}
+ 6 0.000 0.000 0.000 0.000 locale.py:316(normalize)
+ 1 0.000 0.000 0.000 0.000 keyword.py:11(<module>)
+ 1 0.000 0.000 0.000 0.000 {iter}
+ 2 0.000 0.000 0.000 0.000 {issubclass}
+ 1 0.000 0.000 0.000 0.000 io.py:907(BufferedReader)
+ 1 0.000 0.000 0.000 0.000 io.py:900(BytesIO)
+ 1 0.000 0.000 0.000 0.000 io.py:789(_BytesIO)
+ 1 0.000 0.000 0.000 0.000 io.py:72(BlockingIOError)
+ 1 0.000 0.000 0.000 0.000 io.py:715(_BufferedIOMixin)
+ 1 0.000 0.000 0.000 0.000 io.py:643(BufferedIOBase)
+ 1 0.000 0.000 0.000 0.000 io.py:621(FileIO)
+ 1 0.000 0.000 0.000 0.000 io.py:566(RawIOBase)
+ 1 0.000 0.000 0.000 0.000 io.py:294(IOBase)
+ 1 0.000 0.000 0.000 0.000 io.py:290(UnsupportedOperation)
+ 1 0.000 0.000 0.000 0.000 io.py:276(OpenWrapper)
+ 1 0.000 0.000 0.000 0.000 io.py:267(_DocDescriptor)
+ 1 0.000 0.000 0.000 0.000 io.py:1880(StringIO)
+ 1 0.000 0.000 0.000 0.000 io.py:1379(TextIOWrapper)
+ 1 0.000 0.000 0.000 0.000 io.py:1303(IncrementalNewlineDecoder)
+ 1 0.000 0.000 0.000 0.000 io.py:1255(TextIOBase)
+ 1 0.000 0.000 0.000 0.000 io.py:1187(BufferedRandom)
+ 1 0.000 0.000 0.000 0.000 io.py:1121(BufferedRWPair)
+ 1 0.000 0.000 0.000 0.000 io.py:1032(BufferedWriter)
+ 2 0.000 0.000 0.000 0.000 __init__.py:983(_fixupChildren)
+ 1 0.000 0.000 0.000 0.000 __init__.py:918(__init__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:913(Manager)
+ 10 0.000 0.000 0.000 0.000 __init__.py:879(append)
+ 3 0.000 0.000 0.000 0.000 __init__.py:872(__init__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:866(PlaceHolder)
+ 1 0.000 0.000 0.000 0.000 __init__.py:806(FileHandler)
+ 1 0.000 0.000 0.000 0.000 __init__.py:7(CertificateError)
+ 3 0.000 0.000 0.000 0.000 __init__.py:78(CFUNCTYPE)
+ 1 0.000 0.000 0.000 0.000 __init__.py:739(StreamHandler)
+ 1 0.000 0.000 0.000 0.000 __init__.py:67(NullHandler)
+ 2 0.000 0.000 0.000 0.000 __init__.py:614(createLock)
+ 2 0.000 0.000 0.000 0.000 __init__.py:597(__init__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:588(Handler)
+ 10 0.000 0.000 0.000 0.000 __init__.py:546(__init__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:541(Filterer)
+ 1 0.000 0.000 0.000 0.000 __init__.py:504(Filter)
+ 5 0.000 0.000 0.000 0.000 __init__.py:49(normalize_encoding)
+ 3 0.000 0.000 0.000 0.000 __init__.py:481(CFunctionType)
+ 3 0.000 0.000 0.000 0.000 __init__.py:480(PYFUNCTYPE)
+ 1 0.000 0.000 0.000 0.000 __init__.py:462(BufferingFormatter)
+ 2 0.000 0.000 0.000 0.000 __init__.py:417(__init__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:416(LibraryLoader)
+ 1 0.000 0.000 0.000 0.000 __init__.py:376(PyDLL)
+ 4 0.000 0.000 0.000 0.000 __init__.py:370(__getitem__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:368(__init__)
+ 4 0.000 0.000 0.000 0.000 __init__.py:363(__getattr__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:34(NullHandler)
+ 3 0.000 0.000 0.000 0.000 __init__.py:347(_FuncPtr)
+ 1 0.000 0.000 0.000 0.000 __init__.py:324(Formatter)
+ 1 0.000 0.000 0.000 0.000 __init__.py:320(CDLL)
+ 1 0.000 0.000 0.000 0.000 __init__.py:278(c_wchar)
+ 1 0.000 0.000 0.000 0.000 __init__.py:275(c_wchar_p)
+ 1 0.000 0.000 0.000 0.000 __init__.py:260(c_bool)
+ 1 0.000 0.000 0.000 0.000 __init__.py:255(c_void_p)
+ 1 0.000 0.000 0.000 0.000 __init__.py:243(c_char_p)
+ 1 0.000 0.000 0.000 0.000 __init__.py:238(c_char)
+ 1 0.000 0.000 0.000 0.000 __init__.py:233(c_byte)
+ 1 0.000 0.000 0.000 0.000 __init__.py:226(c_ubyte)
+ 1 0.000 0.000 0.000 0.000 __init__.py:214(LogRecord)
+ 1 0.000 0.000 0.000 0.000 __init__.py:205(c_longdouble)
+ 9 0.000 0.000 0.000 0.000 __init__.py:203(_releaseLock)
+ 1 0.000 0.000 0.000 0.000 __init__.py:201(c_double)
+ 1 0.000 0.000 0.000 0.000 __init__.py:197(c_float)
+ 9 0.000 0.000 0.000 0.000 __init__.py:194(_acquireLock)
+ 1 0.000 0.000 0.000 0.000 __init__.py:193(c_uint)
+ 1 0.000 0.000 0.000 0.000 __init__.py:18(<module>)
+ 1 0.000 0.000 0.000 0.000 __init__.py:189(c_int)
+ 1 0.000 0.000 0.000 0.000 __init__.py:180(c_ulong)
+ 1 0.000 0.000 0.000 0.000 __init__.py:176(c_long)
+ 1 0.000 0.000 0.000 0.000 __init__.py:172(c_ushort)
+ 1 0.000 0.000 0.000 0.000 __init__.py:168(c_short)
+ 1 0.000 0.000 0.000 0.000 __init__.py:159(py_object)
+ 14 0.000 0.000 0.000 0.000 __init__.py:147(_check_size)
+ 1 0.000 0.000 0.000 0.000 __init__.py:1266(LoggerAdapter)
+ 1 0.000 0.000 0.000 0.000 __init__.py:1258(__init__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:1252(RootLogger)
+ 2 0.000 0.000 0.000 0.000 __init__.py:1185(addHandler)
+ 3 0.000 0.000 0.000 0.000 __init__.py:104(CFunctionType)
+ 8 0.000 0.000 0.000 0.000 __init__.py:1016(__init__)
+ 1 0.000 0.000 0.000 0.000 __init__.py:1001(Logger)
+ 1 0.000 0.000 0.000 0.000 idna.py:279(getregentry)
+ 1 0.000 0.000 0.000 0.000 idna.py:274(StreamReader)
+ 1 0.000 0.000 0.000 0.000 idna.py:271(StreamWriter)
+ 1 0.000 0.000 0.000 0.000 idna.py:231(IncrementalDecoder)
+ 1 0.000 0.000 0.000 0.000 idna.py:197(IncrementalEncoder)
+ 1 0.000 0.000 0.000 0.000 idna.py:146(Codec)
+ 1 0.000 0.000 0.000 0.000 hub.py:95(signal)
+ 290/1 0.010 0.000 0.000 0.000 hub.py:61(sleep)
+ 1 0.000 0.000 0.000 0.000 hub.py:317(_NONE)
+ 106 0.000 0.000 0.000 0.000 hub.py:243(__init__)
+ 1 0.000 0.000 0.000 0.000 hub.py:207(Waiter)
+ 1 0.000 0.000 0.000 0.000 hub.py:200(DispatchExit)
+ 693/2 0.025 0.000 0.000 0.000 hub.py:142(switch)
+ 1 0.000 0.000 0.000 0.000 hub.py:138(__init__)
+ 1 0.000 0.000 0.000 0.000 hub.py:132(Hub)
+ 30/1 0.000 0.000 0.000 0.000 httplib.py:717(connect)
+ 30 0.000 0.000 0.000 0.000 httplib.py:678(_set_hostport)
+ 30 0.000 0.000 0.000 0.000 httplib.py:649(__init__)
+ 1 0.000 0.000 0.000 0.000 httplib.py:638(HTTPConnection)
+ 1 0.000 0.000 0.000 0.000 httplib.py:319(HTTPResponse)
+ 1 0.000 0.000 0.000 0.000 httplib.py:214(HTTPMessage)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1209(LineAndFileWrapper)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1201(BadStatusLine)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1198(ResponseNotReady)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1195(CannotSendHeader)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1192(CannotSendRequest)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1189(ImproperConnectionState)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1175(IncompleteRead)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1172(UnimplementedFileMode)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1169(UnknownTransferEncoding)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1164(UnknownProtocol)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1161(InvalidURL)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1158(NotConnected)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1153(HTTPException)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1120(HTTPS)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1098(HTTPSConnection)
+ 1 0.000 0.000 0.000 0.000 httplib.py:1004(HTTP)
+ 1 0.000 0.000 0.000 0.000 hooks.py:14(<module>)
+ 10 0.000 0.000 0.000 0.000 hashlib.py:109(<lambda>)
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha512}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha384}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha256}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha224}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha1}
+ 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_md5}
+ 320 0.000 0.000 0.000 0.000 {hash}
+ 1 0.000 0.000 0.000 0.000 gzip.py:4(<module>)
+ 1 0.000 0.000 0.000 0.000 gzip.py:35(GzipFile)
+ 1 0.000 0.000 0.000 0.000 grequests.py:69(AsyncRequest)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:71(GreenletLink)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:59(FailureSpawnedLink)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:568(LinkedFailed)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:555(LinkedKilled)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:544(LinkedCompleted)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:540(LinkedExited)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:47(SuccessSpawnedLink)
+ 60 0.000 0.000 0.000 0.000 greenlet.py:284(kill)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:16(SpawnedLink)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:140(Greenlet)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:127(FailureGreenletLink)
+ 1 0.000 0.000 0.000 0.000 greenlet.py:114(SuccessGreenletLink)
+ 1 0.000 0.000 0.000 0.000 grbrute.py:42(Grbrute)
+ 1 0.000 0.000 0.000 0.000 grbrute.py:20(SessionQueue)
+ 247 0.000 0.000 0.000 0.000 {globals}
+ 1 0.000 0.000 0.000 0.000 {gevent.core.dns_init}
+ 7 0.000 0.000 0.000 0.000 __future__.py:75(__init__)
+ 1 0.000 0.000 0.000 0.000 __future__.py:74(_Feature)
+ 1 0.000 0.000 0.000 0.000 __future__.py:48(<module>)
+ 1 0.000 0.000 0.000 0.000 {function seed at 0x1d496e0}
+ 2 0.000 0.000 0.000 0.000 {filter}
+ 1 0.000 0.000 0.000 0.000 exceptions.py:80(LocationParseError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:75(ClosedPoolError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:70(EmptyPoolError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:65(TimeoutError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:54(InvalidURL)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:54(HostChangedError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:50(InvalidSchema)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:46(MissingSchema)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:42(TooManyRedirects)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:38(URLRequired)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:38(MaxRetryError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:34(Timeout)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:31(DecodeError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:30(SSLError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:26(SSLError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:26(ConnectionError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:17(HTTPError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:15(PoolError)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:12(RequestException)
+ 1 0.000 0.000 0.000 0.000 exceptions.py:10(HTTPError)
+ 1 0.000 0.000 0.000 0.000 _endian.py:4(<module>)
+ 1 0.000 0.000 0.000 0.000 _endian.py:45(BigEndianStructure)
+ 1 0.000 0.000 0.000 0.000 _endian.py:22(_swapped_meta)
+ 1 0.000 0.000 0.000 0.000 encoder.py:87(JSONEncoder)
+ 1 0.000 0.000 0.000 0.000 encoder.py:119(__init__)
+ 1 0.000 0.000 0.000 0.000 dns.py:7(<module>)
+ 30/1 0.000 0.000 0.000 0.000 dns.py:46(resolve_ipv4)
+ 1 0.000 0.000 0.000 0.000 dns.py:27(DNSError)
+ 2 0.000 0.000 0.000 0.000 {dir}
+ 1 0.000 0.000 0.000 0.000 {delattr}
+ 1 0.000 0.000 0.000 0.000 decoder.py:276(__init__)
+ 38 0.000 0.000 0.000 0.000 {_ctypes.sizeof}
+ 1 0.000 0.000 0.000 0.000 {_ctypes.set_conversion_mode}
+ 2 0.000 0.000 0.000 0.000 {_ctypes.POINTER}
+ 3 0.000 0.000 0.000 0.000 {_ctypes.dlopen}
+ 1 0.000 0.000 0.000 0.000 cookies.py:73(MockResponse)
+ 320 0.000 0.000 0.000 0.000 cookies.py:65(get_new_headers)
+ 1 0.000 0.000 0.000 0.000 cookies.py:20(MockRequest)
+ 1 0.000 0.000 0.000 0.000 cookies.py:136(RequestsCookieJar)
+ 1 0.000 0.000 0.000 0.000 cookies.py:131(CookieConflictError)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:705(SmartCookie)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:679(SerialCookie)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:665(SimpleCookie)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:549(BaseCookie)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:403(Morsel)
+ 1 0.000 0.000 0.000 0.000 Cookie.py:232(CookieError)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:838(DefaultCookiePolicy)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:805(CookiePolicy)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:707(Cookie)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:1733(FileCookieJar)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:1731(LoadError)
+ 1 0.000 0.000 0.000 0.000 cookielib.py:1199(Absent)
+ 1 0.000 0.000 0.000 0.000 connectionpool.py:74(VerifiedHTTPSConnection)
+ 1 0.000 0.000 0.000 0.000 connectionpool.py:497(HTTPSConnectionPool)
+ 1 0.000 0.000 0.000 0.000 connectionpool.py:130(HTTPConnectionPool)
+ 3 0.000 0.000 0.000 0.000 connectionpool.py:121(__init__)
+ 1 0.000 0.000 0.000 0.000 connectionpool.py:112(ConnectionPool)
+ 21 0.000 0.000 0.000 0.000 collections.py:61(<genexpr>)
+ 21 0.000 0.000 0.000 0.000 collections.py:60(<genexpr>)
+ 3 0.000 0.000 0.000 0.000 _collections.py:52(__setitem__)
+ 145 0.000 0.000 0.000 0.000 collections.py:43(<genexpr>)
+ 6 0.000 0.000 0.000 0.000 _collections.py:38(__init__)
+ 1 0.000 0.000 0.000 0.000 _collections.py:22(RecentlyUsedContainer)
+ 2 0.000 0.000 0.000 0.000 codecs.py:77(__new__)
+ 1 0.000 0.000 0.000 0.000 {_codecs.lookup}
+ 1 0.000 0.000 0.000 0.000 cgi.py:857(FormContent)
+ 1 0.000 0.000 0.000 0.000 cgi.py:829(InterpFormContentDict)
+ 1 0.000 0.000 0.000 0.000 cgi.py:795(SvFormContentDict)
+ 1 0.000 0.000 0.000 0.000 cgi.py:775(FormContentDict)
+ 1 0.000 0.000 0.000 0.000 cgi.py:353(FieldStorage)
+ 1 0.000 0.000 0.000 0.000 cgi.py:328(MiniFieldStorage)
+ 1 0.000 0.000 0.000 0.000 certs.py:18(where)
+ 1 0.000 0.000 0.000 0.000 certs.py:13(<module>)
+ 2 0.000 0.000 0.000 0.000 calendar.py:71(__init__)
+ 1 0.000 0.000 0.000 0.000 calendar.py:66(_localized_day)
+ 1 0.000 0.000 0.000 0.000 calendar.py:531(LocaleHTMLCalendar)
+ 2 0.000 0.000 0.000 0.000 calendar.py:52(__init__)
+ 1 0.000 0.000 0.000 0.000 calendar.py:496(LocaleTextCalendar)
+ 1 0.000 0.000 0.000 0.000 calendar.py:484(TimeEncoding)
+ 1 0.000 0.000 0.000 0.000 calendar.py:47(_localized_month)
+ 1 0.000 0.000 0.000 0.000 calendar.py:372(HTMLCalendar)
+ 1 0.000 0.000 0.000 0.000 calendar.py:28(IllegalWeekdayError)
+ 1 0.000 0.000 0.000 0.000 calendar.py:255(TextCalendar)
+ 1 0.000 0.000 0.000 0.000 calendar.py:21(IllegalMonthError)
+ 1 0.000 0.000 0.000 0.000 calendar.py:138(setfirstweekday)
+ 1 0.000 0.000 0.000 0.000 calendar.py:132(__init__)
+ 1 0.000 0.000 0.000 0.000 calendar.py:126(Calendar)
+ 65 0.000 0.000 0.000 0.000 {built-in method match}
+ 2 0.000 0.000 0.000 0.000 {built-in method groups}
+ 2 0.000 0.000 0.000 0.000 {built-in method group}
+ 1 0.000 0.000 0.000 0.000 bisect.py:1(<module>)
+ 1 0.000 0.000 0.000 0.000 {binascii.hexlify}
+ 1 0.000 0.000 0.000 0.000 auth.py:58(HTTPDigestAuth)
+ 1 0.000 0.000 0.000 0.000 auth.py:51(HTTPProxyAuth)
+ 1 0.000 0.000 0.000 0.000 auth.py:40(HTTPBasicAuth)
+ 1 0.000 0.000 0.000 0.000 auth.py:33(AuthBase)
+ 1 0.000 0.000 0.000 0.000 atexit.py:6(<module>)
+ 1 0.000 0.000 0.000 0.000 atexit.py:37(register)
+ 1 0.000 0.000 0.000 0.000 ascii.py:8(<module>)
+ 1 0.000 0.000 0.000 0.000 ascii.py:41(getregentry)
+ 1 0.000 0.000 0.000 0.000 ascii.py:34(StreamConverter)
+ 1 0.000 0.000 0.000 0.000 ascii.py:31(StreamReader)
+ 1 0.000 0.000 0.000 0.000 ascii.py:28(StreamWriter)
+ 1 0.000 0.000 0.000 0.000 ascii.py:24(IncrementalDecoder)
+ 1 0.000 0.000 0.000 0.000 ascii.py:20(IncrementalEncoder)
+ 1 0.000 0.000 0.000 0.000 ascii.py:13(Codec)
+ 1 0.000 0.000 0.000 0.000 argparse.py:987(_CountAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:961(_AppendConstAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:924(_AppendAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:907(_StoreFalseAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:892(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:890(_StoreTrueAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:869(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:867(_StoreConstAction)
+ 3 0.000 0.000 0.000 0.000 argparse.py:863(__call__)
+ 3 0.000 0.000 0.000 0.000 argparse.py:834(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:832(_StoreAction)
+ 5 0.000 0.000 0.000 0.000 argparse.py:792(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:741(Action)
+ 1 0.000 0.000 0.000 0.000 argparse.py:732(ArgumentTypeError)
+ 1 0.000 0.000 0.000 0.000 argparse.py:712(ArgumentError)
+ 1 0.000 0.000 0.000 0.000 argparse.py:678(ArgumentDefaultsHelpFormatter)
+ 1 0.000 0.000 0.000 0.000 argparse.py:667(RawTextHelpFormatter)
+ 1 0.000 0.000 0.000 0.000 argparse.py:656(RawDescriptionHelpFormatter)
+ 1 0.000 0.000 0.000 0.000 argparse.py:230(_Section)
+ 3 0.000 0.000 0.000 0.000 argparse.py:2256(_check_value)
+ 3 0.000 0.000 0.000 0.000 argparse.py:2231(_get_value)
+ 3 0.000 0.000 0.000 0.000 argparse.py:2182(_get_values)
+ 3 0.000 0.000 0.000 0.000 argparse.py:2138(_get_nargs_pattern)
+ 3 0.000 0.000 0.000 0.000 argparse.py:2037(_parse_optional)
+ 1 0.000 0.000 0.000 0.000 argparse.py:182(HelpFormatter)
+ 3 0.000 0.000 0.000 0.000 argparse.py:1782(take_action)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1689(_get_positional_actions)
+ 5 0.000 0.000 0.000 0.000 argparse.py:1677(_add_action)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1538(ArgumentParser)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1518(_MutuallyExclusiveGroup)
+ 5 0.000 0.000 0.000 0.000 argparse.py:1508(_add_action)
+ 2 0.000 0.000 0.000 0.000 argparse.py:1487(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1485(_ArgumentGroup)
+ 1 0.000 0.000 0.000 0.000 argparse.py:147(_AttributeHolder)
+ 5 0.000 0.000 0.000 0.000 argparse.py:1449(_check_conflict)
+ 3 0.000 0.000 0.000 0.000 argparse.py:1440(_get_handler)
+ 5 0.000 0.000 0.000 0.000 argparse.py:1436(_pop_action_class)
+ 2 0.000 0.000 0.000 0.000 argparse.py:1401(_get_optional_kwargs)
+ 3 0.000 0.000 0.000 0.000 argparse.py:1385(_get_positional_kwargs)
+ 5 0.000 0.000 0.000 0.000 argparse.py:1321(_add_action)
+ 2 0.000 0.000 0.000 0.000 argparse.py:1311(add_argument_group)
+ 13 0.000 0.000 0.000 0.000 argparse.py:1246(_registry_get)
+ 34 0.000 0.000 0.000 0.000 argparse.py:1242(register)
+ 13 0.000 0.000 0.000 0.000 argparse.py:122(_callable)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1188(_ActionsContainer)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1174(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1167(Namespace)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1124(FileType)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1054(_ChoicesPseudoAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1052(_SubParsersAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1027(_VersionAction)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1010(__init__)
+ 1 0.000 0.000 0.000 0.000 argparse.py:1008(_HelpAction)
+ 1 0.000 0.000 0.000 0.000 adapters.py:9(<module>)
+ 1 0.000 0.000 0.000 0.000 adapters.py:45(HTTPAdapter)
+ 6 0.000 0.000 0.000 0.000 adapters.py:35(__init__)
+ 1 0.000 0.000 0.000 0.000 adapters.py:32(BaseAdapter)
+ 1 0.000 0.000 0.000 0.000 abc.py:145(__subclasscheck__)
+ 2 0.000 0.000 0.000 0.000 _abcoll.py:26(<genexpr>)
+ 1 0.000 0.000 0.000 0.000 _abcoll.py:24(_hasattr)
+ 1 0.000 0.000 0.000 0.000 _abcoll.py:127(__subclasshook__)
+
+
diff --git a/toys/brhute/grequests.py b/toys/brhute/grequests.py
new file mode 100644
index 0000000..b10f0d4
--- /dev/null
+++ b/toys/brhute/grequests.py
@@ -0,0 +1,182 @@
+# -*- coding: utf-8 -*-
+
+# Laurent's version of grequests.py :
+# Merged https://github.com/kennethreitz/grequests/pull/22/files
+# in recent grequest branch, to have working exception_handler
+
+"""
+grequests
+~~~~~~~~~
+
+This module contains an asynchronous replica of ``requests.api``, powered
+by gevent. All API methods return a ``Request`` instance (as opposed to
+``Response``). A list of requests can be sent with ``map()``.
+"""
+from functools import partial
+
+try:
+ import gevent
+ from gevent import monkey as curious_george
+ from gevent.pool import Pool
+except ImportError:
+ raise RuntimeError('Gevent is required for grequests.')
+
+# Monkey-patch.
+curious_george.patch_all(thread=False, select=False)
+
+from requests import Session
+
+def _greenlet_report_error(self, exc_info):
+ import sys
+ import traceback
+
+ exception = exc_info[1]
+ if isinstance(exception, gevent.greenlet.GreenletExit):
+ self._report_result(exception)
+ return
+ exc_handler = False
+ for lnk in self._links:
+ if isinstance(lnk, gevent.greenlet.FailureSpawnedLink):
+ exc_handler = True
+ break
+ if not exc_handler:
+ try:
+ traceback.print_exception(*exc_info)
+ except:
+ pass
+ self._exception = exception
+ if self._links and self._notifier is None:
+ self._notifier = gevent.greenlet.core.active_event(self._notify_links)
+ ## Only print errors
+ if not exc_handler:
+ info = str(self) + ' failed with '
+ try:
+ info += self._exception.__class__.__name__
+ except Exception:
+ info += str(self._exception) or repr(self._exception)
+ sys.stderr.write(info + '\n\n')
+
+
+## Patch the greenlet error reporting
+gevent.greenlet.Greenlet._report_error = _greenlet_report_error
+
+__all__ = (
+ 'map', 'imap',
+ 'get', 'options', 'head', 'post', 'put', 'patch', 'delete', 'request'
+)
+
+
+class AsyncRequest(object):
+ """ Asynchronous request.
+
+ Accept same parameters as ``Session.request`` and some additional:
+
+ :param session: Session which will do request
+ :param callback: Callback called on response.
+ Same as passing ``hooks={'response': callback}``
+ """
+ def __init__(self, method, url, **kwargs):
+ #: Request method
+ self.method = method
+ #: URL to request
+ self.url = url
+ #: Associated ``Session``
+ self.session = kwargs.pop('session', None)
+ if self.session is None:
+ self.session = Session()
+
+ callback = kwargs.pop('callback', None)
+ if callback:
+ kwargs['hooks'] = {'response': callback}
+
+ #: The rest arguments for ``Session.request``
+ self.kwargs = kwargs
+ #: Resulting ``Response``
+ self.response = None
+
+ def send(self, **kwargs):
+ """
+ Prepares request based on parameter passed to constructor and optional ``kwargs```.
+ Then sends request and saves response to :attr:`response`
+
+ :returns: ``Response``
+ """
+ merged_kwargs = {}
+ merged_kwargs.update(self.kwargs)
+ merged_kwargs.update(kwargs)
+ self.response = self.session.request(self.method,
+ self.url, **merged_kwargs)
+ return self.response
+
+
+def send(r, pool=None, stream=False, exception_handler=None):
+ """Sends the request object using the specified pool. If a pool isn't
+ specified this method blocks. Pools are useful because you can specify size
+ and can hence limit concurrency."""
+ if pool != None:
+ p = pool.spawn
+ else:
+ p = gevent.spawn
+
+ if exception_handler:
+ glet = p(r.send, stream=stream)
+
+ def eh_wrapper(g):
+ return exception_handler(r,g.exception)
+
+ glet.link_exception(eh_wrapper)
+ else:
+ glet = p(r.send, stream=stream)
+
+ return glet
+
+
+# Shortcuts for creating AsyncRequest with appropriate HTTP method
+get = partial(AsyncRequest, 'GET')
+options = partial(AsyncRequest, 'OPTIONS')
+head = partial(AsyncRequest, 'HEAD')
+post = partial(AsyncRequest, 'POST')
+put = partial(AsyncRequest, 'PUT')
+patch = partial(AsyncRequest, 'PATCH')
+delete = partial(AsyncRequest, 'DELETE')
+
+# synonym
+def request(method, url, **kwargs):
+ return AsyncRequest(method, url, **kwargs)
+
+
+def map(requests, stream=False, size=None, exception_handler=None):
+ """Concurrently converts a list of Requests to Responses.
+
+ :param requests: a collection of Request objects.
+ :param stream: If True, the content will not be downloaded immediately.
+ :param size: Specifies the number of requests to make at a time. If None, no throttling occurs.
+ """
+
+ requests = list(requests)
+
+ pool = Pool(size) if size else None
+ jobs = [send(r, pool, stream=stream, exception_handler=exception_handler) for r in requests]
+ gevent.joinall(jobs)
+
+ return [r.response for r in requests]
+
+
+def imap(requests, stream=False, size=2, exception_handler=None):
+ """Concurrently converts a generator object of Requests to
+ a generator of Responses.
+
+ :param requests: a generator of Request objects.
+ :param stream: If True, the content will not be downloaded immediately.
+ :param size: Specifies the number of requests to make at a time. default is 2
+ """
+
+ pool = Pool(size)
+
+ def send(r):
+ return r.send(stream=stream, exception_handler=exception_handler)
+
+ for r in pool.imap_unordered(send, requests):
+ yield r
+
+ pool.join()
diff --git a/toys/brhute/httplib_pipelining.py b/toys/brhute/httplib_pipelining.py
new file mode 100644
index 0000000..5f5ac4e
--- /dev/null
+++ b/toys/brhute/httplib_pipelining.py
@@ -0,0 +1,96 @@
+# Based on "python-http-pipelining" by Markus J @ ActiveState Code / Recipes
+# http://code.activestate.com/recipes/576673-python-http-pipelining/
+# Rewrote by: 2013 Laurent Ghigonis <laurent@p1sec.com>
+
+from httplib import HTTPConnection, _CS_IDLE
+import urlparse
+
+class HTTP_pipeline():
+ def __init__(self, domain, queue, cb_response,
+ max_out_bound=4, debuglevel=0):
+ print "XXX HTTP_pipeline.__init__"
+ self.queue = queue
+ self.cb_response = cb_response
+ self.max_out_bound = max_out_bound
+ self.debuglevel = debuglevel
+ self.conn = HTTPConnection(domain)
+ self.conn.set_debuglevel(debuglevel)
+ self.respobjs = list()
+ self.data = list()
+ self.headers = {'Host':domain,
+ 'Content-Length':0,
+ 'Connection':'Keep-Alive'}
+
+ def run(self):
+ print "XXX HTTP_pipeline.run"
+ while True:
+ # Send
+ out_bound = 0
+ while out_bound < self.max_out_bound:
+ page = self.queue.get()
+ if self.debuglevel > 0:
+ print 'Sending request for %r...' % (page,)
+ self.conn._HTTPConnection__state = _CS_IDLE # FU private variable!
+ self.conn.request("GET", page, None, self.headers)
+ res = self.conn.response_class(self.conn.sock, strict=self.conn.strict, method=self.conn._method)
+ self.respobjs.append(res)
+ self.data.append(None)
+ out_bound += 1
+ # Try to read a response
+ for i,resp in enumerate(self.respobjs):
+ if resp is None:
+ continue
+ if self.debuglevel > 0:
+ print 'Retrieving %r...' % (resp)
+ out_bound -= 1
+ skip_read = False
+ resp.begin()
+ if self.debuglevel > 0:
+ print ' %d %s' % (resp.status, resp.reason)
+ if 200 <= resp.status < 300:
+ # Ok
+ data = resp.read()
+ cookie = resp.getheader('Set-Cookie')
+ if cookie is not None:
+ self.headers['Cookie'] = cookie
+ skip_read = True
+ self.respobjs.remove(resp)
+ self.cb_response(resp, data)
+ elif 300 <= resp.status < 400:
+ # Redirect
+ loc = resp.getheader('Location')
+ parsed = loc and urlparse.urlparse(loc)
+ if not parsed:
+ # Missing or empty location header
+ data = (resp.status, resp.reason)
+ elif parsed.netloc != '' and parsed.netloc != host:
+ # Redirect to another host
+ data = (resp.status, resp.reason, loc)
+ else:
+ # Redirect URL
+ path = urlparse.urlunparse(parsed._replace(scheme='',netloc='',fragment=''))
+ #print ' Updated %r to %r' % (pages[i],path)
+ #pages[i] = path
+ data = (resp.status, resp.reason, path)
+ self.respobjs.remove(resp)
+ self.cb_response(resp, data)
+ elif resp.status >= 400:
+ # Failed
+ data = (resp.status, resp.reason)
+ self.respobjs.remove(resp)
+ self.cb_response(resp, data)
+ if resp.will_close:
+ # Connection (will be) closed, need to resend
+ self.conn.close()
+ if self.debuglevel > 0:
+ print ' Connection closed'
+ # XXX reconnect
+ # XXX resend
+ break
+ elif not skip_read:
+ resp.read() # read any data
+ if any(r is None for r in enumerate(self.respobjs)):
+ # Send another pending request
+ break
+ else:
+ break # All respobjs are None?
diff --git a/toys/brhute/pphidden.py b/toys/brhute/pphidden.py
new file mode 100644
index 0000000..cef18e2
--- /dev/null
+++ b/toys/brhute/pphidden.py
@@ -0,0 +1,29 @@
+import requests
+import time
+import sys
+
+# http://www.pointerpointer.com/gridPositions.json
+
+BASE_URL="http://www.pointerpointer.com/images"
+
+image = int(sys.argv[1])
+sx = int(sys.argv[2])
+sy = int(sys.argv[3])
+
+print ">>> Looking for image %d <<<" % image
+print ">>>> starting x=%d y=%d <<<<" % (sx, sy)
+
+s = requests.Session()
+
+for x in range(sx, 2000):
+ for y in range(sy, 2000):
+ url = "%s/N%04d_%d_%d.jpg" % (BASE_URL, image, x, y)
+ sys.stdout.write("[-] %s: " % url)
+ sys.stdout.flush()
+ r = s.get(url)
+ print r.status_code
+ if r.status_code != 404:
+ print "[*] found !"
+ sys.exit(0)
+ # time.sleep(0.2)
+sys.exit(1)
diff --git a/toys/brhute/pphidden_async.py b/toys/brhute/pphidden_async.py
new file mode 100644
index 0000000..463364f
--- /dev/null
+++ b/toys/brhute/pphidden_async.py
@@ -0,0 +1,83 @@
+import sys
+import argparse
+import grbrute
+import brhute_threaded
+
+# http://www.pointerpointer.com/gridPositions.json
+
+class Pp_url:
+ def __init__(self, image, x, y, max_x=100, max_y=100):
+ self.host = "www.pointerpointer.com"
+ self.base_url = "/images"
+ self.image = image
+ self.x = x
+ self.y = y
+ self.max_x = max_x
+ self.max_y = max_y
+ print ">>> Looking for image %d <<<" % image
+ print ">>>> starting x=%d y=%d <<<<" % (x, y)
+ def __iter__(self):
+ return self
+ def next(self):
+ url = "%s/N%04d_%d_%d.jpg" % (self.base_url, self.image, self.x, self.y)
+ self.y += 1
+ if self.y > self.max_y:
+ self.x += 1
+ self.y = 0
+ if self.x > self.max_x:
+ raise StopIteration
+ return (self.host, url)
+
+def cb_response_grbrute(res):
+ global found
+ if not found:
+ print "[-] %s : %d" % (res.url, res.status_code)
+ if res.status_code != 404:
+ found = res.url
+ return False
+ return True
+
+def cb_response_brhute(res):
+ global found
+ if not found:
+ print "res: %s" % res
+ #if res.status_code != 404:
+ # found = res.url
+ # return False
+ #return True
+
+parser = argparse.ArgumentParser(description='pphidden_async',
+ epilog="Example: %s 73 0 0" % sys.argv[0])
+parser.add_argument('image', action="store", type=int,
+ help="Image number")
+parser.add_argument('start_x', action="store", type=int,
+ help="Start at coordinate X=")
+parser.add_argument('start_y', action="store", type=int,
+ help="Start at coordinate Y=")
+parser.add_argument('-b', action="store", dest="backend", default="gbrute",
+ help="Backend, can be gbrute (default) or brhute (work in progress)")
+parser.add_argument('-v', action="store_true", dest="verbose", default=False,
+ help="verbose")
+args = parser.parse_args()
+
+found = None
+
+if args.backend == "gbrute":
+ url_iter = Pp_url(args.image, args.start_x, args.start_y)
+ grbrute.Grbrute(url_iter, cb_response_grbrute, verbose=args.verbose)
+elif args.backend == "brhute":
+ url_iter = Pp_url(args.image, args.start_x, args.start_y)
+ #brhute_threaded.Brhute_ip(url_iter, "207.171.163.203", # Amazon
+ # cb_response=cb_response_brhute, verbose=args.verbose)
+ #brhute.Brhute_ip(url_iter, "173.194.34.14", # Google
+ # cb_response=cb_response_brhute, verbose=args.verbose)
+ brhute_threaded.Brhute_ip(url_iter, "www.pointerpointer.com", # Amazon
+ cb_response=cb_response_brhute, verbose=args.verbose)
+else:
+ print "Error: Unknown backend specified"
+ sys.exit(1)
+
+if found is False:
+ print "[*] not found"
+ sys.exit(1)
+print "[*] found: %s" % found
diff --git a/toys/brhute/threaded_resolver.py b/toys/brhute/threaded_resolver.py
new file mode 100644
index 0000000..a2d347b
--- /dev/null
+++ b/toys/brhute/threaded_resolver.py
@@ -0,0 +1,302 @@
+# From pyxmpp2 resolver.py
+# Made standalone by laurent
+# https://raw.github.com/Jajcus/pyxmpp2/master/pyxmpp2/resolver.py
+
+# (C) Copyright 2003-2011 Jacek Konieczny <jajcus@jajcus.net>
+# (C) Copyright 2013 Laurent Ghigonis <laurent@p1sec.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License Version
+# 2.1 as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+"""DNS resolever with SRV record support.
+
+Normative reference:
+ - `RFC 1035 <http://www.ietf.org/rfc/rfc1035.txt>`__
+ - `RFC 2782 <http://www.ietf.org/rfc/rfc2782.txt>`__
+"""
+
+import socket
+import random
+import logging
+import threading
+import Queue
+
+import dns.resolver
+import dns.name
+import dns.exception
+
+DEFAULT_SETTINGS = {"ipv4": True, "ipv6": False, "prefer_ipv6": False}
+
+def is_ipv6_available():
+ """Check if IPv6 is available.
+
+ :Return: `True` when an IPv6 socket can be created.
+ """
+ try:
+ socket.socket(socket.AF_INET6).close()
+ except (socket.error, AttributeError):
+ return False
+ return True
+
+def is_ipv4_available():
+ """Check if IPv4 is available.
+
+ :Return: `True` when an IPv4 socket can be created.
+ """
+ try:
+ socket.socket(socket.AF_INET).close()
+ except socket.error:
+ return False
+ return True
+
+def shuffle_srv(records):
+ """Randomly reorder SRV records using their weights.
+
+ :Parameters:
+ - `records`: SRV records to shuffle.
+ :Types:
+ - `records`: sequence of :dns:`dns.rdtypes.IN.SRV`
+
+ :return: reordered records.
+ :returntype: `list` of :dns:`dns.rdtypes.IN.SRV`"""
+ if not records:
+ return []
+ ret = []
+ while len(records) > 1:
+ weight_sum = 0
+ for rrecord in records:
+ weight_sum += rrecord.weight + 0.1
+ thres = random.random() * weight_sum
+ weight_sum = 0
+ for rrecord in records:
+ weight_sum += rrecord.weight + 0.1
+ if thres < weight_sum:
+ records.remove(rrecord)
+ ret.append(rrecord)
+ break
+ ret.append(records[0])
+ return ret
+
+def reorder_srv(records):
+ """Reorder SRV records using their priorities and weights.
+
+ :Parameters:
+ - `records`: SRV records to shuffle.
+ :Types:
+ - `records`: `list` of :dns:`dns.rdtypes.IN.SRV`
+
+ :return: reordered records.
+ :returntype: `list` of :dns:`dns.rdtypes.IN.SRV`"""
+ records = list(records)
+ records.sort()
+ ret = []
+ tmp = []
+ for rrecord in records:
+ if not tmp or rrecord.priority == tmp[0].priority:
+ tmp.append(rrecord)
+ continue
+ ret += shuffle_srv(tmp)
+ tmp = [rrecord]
+ if tmp:
+ ret += shuffle_srv(tmp)
+ return ret
+
+class BlockingResolver():
+ """Blocking resolver using the DNSPython package.
+
+ Both `resolve_srv` and `resolve_address` will block until the
+ lookup completes or fail and then call the callback immediately.
+ """
+ def __init__(self, settings = None):
+ if settings:
+ self.settings = settings
+ else:
+ self.settings = DEFAULT_SETTINGS
+
+ def resolve_srv(self, domain, service, protocol, callback):
+ """Start looking up an SRV record for `service` at `domain`.
+
+ `callback` will be called with a properly sorted list of (hostname,
+ port) pairs on success. The list will be empty on error and it will
+ contain only (".", 0) when the service is explicitely disabled.
+
+ :Parameters:
+ - `domain`: domain name to look up
+ - `service`: service name e.g. 'xmpp-client'
+ - `protocol`: protocol name, e.g. 'tcp'
+ - `callback`: a function to be called with a list of received
+ addresses
+ :Types:
+ - `domain`: `unicode`
+ - `service`: `unicode`
+ - `protocol`: `unicode`
+ - `callback`: function accepting a single argument
+ """
+ if isinstance(domain, unicode):
+ domain = domain.encode("idna").decode("us-ascii")
+ domain = "_{0}._{1}.{2}".format(service, protocol, domain)
+ try:
+ records = dns.resolver.query(domain, 'SRV')
+ except dns.exception.DNSException, err:
+ logger.warning("Could not resolve {0!r}: {1}"
+ .format(domain, err.__class__.__name__))
+ callback([])
+ return
+ if not records:
+ callback([])
+ return
+
+ result = []
+ for record in reorder_srv(records):
+ hostname = record.target.to_text()
+ if hostname in (".", ""):
+ continue
+ result.append((hostname, record.port))
+
+ if not result:
+ callback([(".", 0)])
+ else:
+ callback(result)
+ return
+
+ def resolve_address(self, hostname, callback, allow_cname = True):
+ """Start looking up an A or AAAA record.
+
+ `callback` will be called with a list of (family, address) tuples
+ (each holiding socket.AF_* and IPv4 or IPv6 address literal) on
+ success. The list will be empty on error.
+
+ :Parameters:
+ - `hostname`: the host name to look up
+ - `callback`: a function to be called with a list of received
+ addresses
+ - `allow_cname`: `True` if CNAMEs should be followed
+ :Types:
+ - `hostname`: `unicode`
+ - `callback`: function accepting a single argument
+ - `allow_cname`: `bool`
+ """
+ if isinstance(hostname, unicode):
+ hostname = hostname.encode("idna").decode("us-ascii")
+ rtypes = []
+ if self.settings["ipv6"]:
+ rtypes.append(("AAAA", socket.AF_INET6))
+ if self.settings["ipv4"]:
+ rtypes.append(("A", socket.AF_INET))
+ if not self.settings["prefer_ipv6"]:
+ rtypes.reverse()
+ exception = None
+ result = []
+ for rtype, rfamily in rtypes:
+ try:
+ try:
+ records = dns.resolver.query(hostname, rtype)
+ except dns.exception.DNSException:
+ records = dns.resolver.query(hostname + ".", rtype)
+ except dns.exception.DNSException, err:
+ exception = err
+ continue
+ if not allow_cname and records.rrset.name != dns.name.from_text(
+ hostname):
+ logger.warning("Unexpected CNAME record found for {0!r}"
+ .format(hostname))
+ continue
+ if records:
+ for record in records:
+ result.append((rfamily, record.to_text()))
+
+ if not result and exception:
+ logger.warning("Could not resolve {0!r}: {1}".format(hostname,
+ exception.__class__.__name__))
+ callback(result)
+
+class ThreadedResolver():
+ """Base class for threaded resolvers.
+
+ Starts worker threads, each running a blocking resolver implementation
+ and communicates with them to provide non-blocking asynchronous API.
+ """
+ def __init__(self, settings = None, max_threads = 1):
+ if settings:
+ self.settings = settings
+ else:
+ self.settings = DEFAULT_SETTINGS
+ self.threads = []
+ self.queue = Queue.Queue()
+ self.lock = threading.RLock()
+ self.max_threads = max_threads
+ self.last_thread_n = 0
+
+def _make_resolver(self):
+ """Threaded resolver implementation using the DNSPython
+ :dns:`dns.resolver` module.
+ """
+ return BlockingResolver(self.settings)
+
+ def stop(self):
+ """Stop the resolver threads.
+ """
+ with self.lock:
+ for dummy in self.threads:
+ self.queue.put(None)
+
+ def _start_thread(self):
+ """Start a new working thread unless the maximum number of threads
+ has been reached or the request queue is empty.
+ """
+ with self.lock:
+ if self.threads and self.queue.empty():
+ return
+ if len(self.threads) >= self.max_threads:
+ return
+ thread_n = self.last_thread_n + 1
+ self.last_thread_n = thread_n
+ thread = threading.Thread(target = self._run,
+ name = "{0!r} #{1}".format(self, thread_n),
+ args = (thread_n,))
+ self.threads.append(thread)
+ thread.daemon = True
+ thread.start()
+
+ def resolve_address(self, hostname, callback, allow_cname = True):
+ request = ("resolve_address", (hostname, callback, allow_cname))
+ self._start_thread()
+ self.queue.put(request)
+
+ def resolve_srv(self, domain, service, protocol, callback):
+ request = ("resolve_srv", (domain, service, protocol, callback))
+ self._start_thread()
+ self.queue.put(request)
+
+ def _run(self, thread_n):
+ """The thread function."""
+ try:
+ logger.debug("{0!r}: entering thread #{1}"
+ .format(self, thread_n))
+ resolver = self._make_resolver()
+ while True:
+ request = self.queue.get()
+ if request is None:
+ break
+ method, args = request
+ logger.debug(" calling {0!r}.{1}{2!r}"
+ .format(resolver, method, args))
+ getattr(resolver, method)(*args) # pylint: disable=W0142
+ self.queue.task_done()
+ logger.debug("{0!r}: leaving thread #{1}"
+ .format(self, thread_n))
+ finally:
+ self.threads.remove(threading.currentThread())
+
+# vi: sts=4 et sw=4
diff --git a/toys/brhute/twisted_http.py b/toys/brhute/twisted_http.py
new file mode 100644
index 0000000..805c78a
--- /dev/null
+++ b/toys/brhute/twisted_http.py
@@ -0,0 +1,26 @@
+from twisted.web import client
+from twisted.internet import reactor, defer
+
+urls = [
+ 'http://www.python.org',
+ 'http://stackoverflow.com',
+ 'http://www.twistedmatrix.com',
+ 'http://www.google.com',
+ 'http://www.google.com/toto',
+ 'http://www.google.com/titi',
+ 'http://www.google.com/tata',
+ 'http://launchpad.net',
+ 'http://github.com',
+ 'http://bitbucket.org',
+]
+
+def finish(results):
+ for result in results:
+ print 'GOT PAGE', len(result), 'bytes'
+ reactor.stop()
+
+factory = client.HTTPClientFactory()
+waiting = [client.getPage(url, factory) for url in urls]
+defer.gatherResults(waiting).addCallback(finish)
+
+reactor.run()
diff --git a/toys/brhute/twisted_http_persistent.py b/toys/brhute/twisted_http_persistent.py
new file mode 100644
index 0000000..333bcb3
--- /dev/null
+++ b/toys/brhute/twisted_http_persistent.py
@@ -0,0 +1,39 @@
+from twisted.internet import reactor
+from twisted.internet.defer import Deferred, DeferredList
+from twisted.internet.protocol import Protocol
+from twisted.web.client import Agent, HTTPConnectionPool
+
+class IgnoreBody(Protocol):
+ def __init__(self, deferred):
+ self.deferred = deferred
+
+ def dataReceived(self, bytes):
+ pass
+
+ def connectionLost(self, reason):
+ self.deferred.callback(None)
+
+
+def cbRequest(response):
+ print 'Response code:', response.code
+ finished = Deferred()
+ response.deliverBody(IgnoreBody(finished))
+ return finished
+
+pool = HTTPConnectionPool(reactor)
+agent = Agent(reactor, pool=pool)
+
+def requestGet(url):
+ d = agent.request('GET', url)
+ d.addCallback(cbRequest)
+ return d
+
+# Two requests to the same host:
+d = requestGet('http://google.com/titi').addCallback(
+ lambda ign: requestGet("http://google.com/tata"))
+def cbShutdown(ignored):
+ reactor.stop()
+d.addCallback(cbShutdown)
+
+reactor.run()
+
diff --git a/toys/brhute/twisted_http_simultaneous.py b/toys/brhute/twisted_http_simultaneous.py
new file mode 100644
index 0000000..b9de196
--- /dev/null
+++ b/toys/brhute/twisted_http_simultaneous.py
@@ -0,0 +1,39 @@
+from twisted.internet import reactor
+from twisted.internet.defer import Deferred, DeferredList
+from twisted.internet.protocol import Protocol
+from twisted.web.client import Agent, HTTPConnectionPool
+
+class IgnoreBody(Protocol):
+ def __init__(self, deferred):
+ self.deferred = deferred
+
+ def dataReceived(self, bytes):
+ pass
+
+ def connectionLost(self, reason):
+ self.deferred.callback(None)
+
+
+def cbRequest(response):
+ print 'Response code:', response.code
+ finished = Deferred()
+ response.deliverBody(IgnoreBody(finished))
+ return finished
+
+pool = HTTPConnectionPool(reactor, persistent=True)
+pool.maxPersistentPerHost = 1
+agent = Agent(reactor, pool=pool)
+
+def requestGet(url):
+ d = agent.request('GET', url)
+ d.addCallback(cbRequest)
+ return d
+
+# Two requests to the same host:
+requestGet('http://google.com/titi')
+requestGet("http://google.com/tata")
+requestGet("http://google.com/toto")
+requestGet("http://google.com/tralala")
+
+reactor.run()
+