From 78ea56b5e322746dbe49c51e93b5fd86574a6df7 Mon Sep 17 00:00:00 2001 From: AutomatedTester Date: Mon, 16 Jan 2012 12:06:31 +0000 Subject: [PATCH 1/9] initial commit of docs --- .gitignore | 2 + docs/api-objects.txt | 21 + docs/browsermobproxy-module.html | 164 +++++ docs/browsermobproxy-pysrc.html | 116 ++++ docs/browsermobproxy.client-module.html | 129 ++++ docs/browsermobproxy.client-pysrc.html | 236 +++++++ docs/browsermobproxy.client.Client-class.html | 607 ++++++++++++++++++ docs/browsermobproxy.server-module.html | 129 ++++ docs/browsermobproxy.server-pysrc.html | 181 ++++++ docs/browsermobproxy.server.Server-class.html | 380 +++++++++++ docs/class-tree.html | 113 ++++ docs/crarr.png | Bin 0 -> 340 bytes docs/epydoc.css | 322 ++++++++++ docs/epydoc.js | 293 +++++++++ docs/frames.html | 17 + docs/help.html | 268 ++++++++ docs/identifier-index.html | 260 ++++++++ docs/index.html | 17 + docs/module-tree.html | 110 ++++ docs/redirect.html | 38 ++ docs/toc-browsermobproxy-module.html | 32 + docs/toc-browsermobproxy.client-module.html | 31 + docs/toc-browsermobproxy.server-module.html | 31 + docs/toc-everything.html | 35 + docs/toc.html | 35 + index.html | 25 + stylesheets/style.css | 21 + 27 files changed, 3613 insertions(+) create mode 100644 .gitignore create mode 100644 docs/api-objects.txt create mode 100644 docs/browsermobproxy-module.html create mode 100644 docs/browsermobproxy-pysrc.html create mode 100644 docs/browsermobproxy.client-module.html create mode 100644 docs/browsermobproxy.client-pysrc.html create mode 100644 docs/browsermobproxy.client.Client-class.html create mode 100644 docs/browsermobproxy.server-module.html create mode 100644 docs/browsermobproxy.server-pysrc.html create mode 100644 docs/browsermobproxy.server.Server-class.html create mode 100644 docs/class-tree.html create mode 100644 docs/crarr.png create mode 100644 docs/epydoc.css create mode 100644 docs/epydoc.js create mode 100644 docs/frames.html create mode 100644 docs/help.html create mode 100644 docs/identifier-index.html create mode 100644 docs/index.html create mode 100644 docs/module-tree.html create mode 100644 docs/redirect.html create mode 100644 docs/toc-browsermobproxy-module.html create mode 100644 docs/toc-browsermobproxy.client-module.html create mode 100644 docs/toc-browsermobproxy.server-module.html create mode 100644 docs/toc-everything.html create mode 100644 docs/toc.html create mode 100644 index.html create mode 100644 stylesheets/style.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3819313 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.swp +*.swo diff --git a/docs/api-objects.txt b/docs/api-objects.txt new file mode 100644 index 0000000..521c89d --- /dev/null +++ b/docs/api-objects.txt @@ -0,0 +1,21 @@ +browsermobproxy browsermobproxy-module.html +browsermobproxy.client browsermobproxy.client-module.html +browsermobproxy.server browsermobproxy.server-module.html +browsermobproxy.client.Client browsermobproxy.client.Client-class.html +browsermobproxy.client.Client.new_har browsermobproxy.client.Client-class.html#new_har +browsermobproxy.client.Client.whitelist browsermobproxy.client.Client-class.html#whitelist +browsermobproxy.client.Client.close browsermobproxy.client.Client-class.html#close +browsermobproxy.client.Client.selenium_proxy browsermobproxy.client.Client-class.html#selenium_proxy +browsermobproxy.client.Client.__init__ browsermobproxy.client.Client-class.html#__init__ +browsermobproxy.client.Client.LIMITS browsermobproxy.client.Client-class.html#LIMITS +browsermobproxy.client.Client.har browsermobproxy.client.Client-class.html#har +browsermobproxy.client.Client.blacklist browsermobproxy.client.Client-class.html#blacklist +browsermobproxy.client.Client.new_page browsermobproxy.client.Client-class.html#new_page +browsermobproxy.client.Client.limits browsermobproxy.client.Client-class.html#limits +browsermobproxy.server.Server browsermobproxy.server.Server-class.html +browsermobproxy.server.Server.create_proxy browsermobproxy.server.Server-class.html#create_proxy +browsermobproxy.server.Server.url browsermobproxy.server.Server-class.html#url +browsermobproxy.server.Server._is_listening browsermobproxy.server.Server-class.html#_is_listening +browsermobproxy.server.Server.stop browsermobproxy.server.Server-class.html#stop +browsermobproxy.server.Server.start browsermobproxy.server.Server-class.html#start +browsermobproxy.server.Server.__init__ browsermobproxy.server.Server-class.html#__init__ diff --git a/docs/browsermobproxy-module.html b/docs/browsermobproxy-module.html new file mode 100644 index 0000000..696a83c --- /dev/null +++ b/docs/browsermobproxy-module.html @@ -0,0 +1,164 @@ + + + + + browsermobproxy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package browsermobproxy + + + + + + +
[hide private]
[frames] | no frames]
+
+ +

Package browsermobproxy

source code

+
+

Version: + 0.0.1 +

+
+ + + + + + +
+ + + + + +
Submodules[hide private]
+
+
+ +
+ + + + + + + + + + + + +
+ + + + + +
Variables[hide private]
+
+   + + Server +
+   + + Client +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/browsermobproxy-pysrc.html b/docs/browsermobproxy-pysrc.html new file mode 100644 index 0000000..4dbf9aa --- /dev/null +++ b/docs/browsermobproxy-pysrc.html @@ -0,0 +1,116 @@ + + + + + browsermobproxy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package browsermobproxy + + + + + + +
[hide private]
[frames] | no frames]
+
+

Source Code for Package browsermobproxy

+
+1  __version__ = '0.0.1' 
+2   
+3  from server import Server 
+4  from client import Client 
+5   
+6  __all__ = ['Server', 'Client', 'browsermobproxy'] 
+7   
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/browsermobproxy.client-module.html b/docs/browsermobproxy.client-module.html new file mode 100644 index 0000000..217374f --- /dev/null +++ b/docs/browsermobproxy.client-module.html @@ -0,0 +1,129 @@ + + + + + browsermobproxy.client + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package browsermobproxy :: + Module client + + + + + + +
[hide private]
[frames] | no frames]
+
+ +

Module client

source code

+ + + + + + + + + +
+ + + + + +
Classes[hide private]
+
+   + + Client +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/browsermobproxy.client-pysrc.html b/docs/browsermobproxy.client-pysrc.html new file mode 100644 index 0000000..3f4c21b --- /dev/null +++ b/docs/browsermobproxy.client-pysrc.html @@ -0,0 +1,236 @@ + + + + + browsermobproxy.client + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package browsermobproxy :: + Module client + + + + + + +
[hide private]
[frames] | no frames]
+
+

Source Code for Module browsermobproxy.client

+
+  1  from httplib2 import Http 
+  2  from urllib import urlencode 
+  3  import json 
+
4 + 5 -class Client(object): +
6 +
7 - def __init__(self, url): +
8 """ + 9 Initialises a new Client object + 10 :Args: + 11 - url: This is where the BrowserMob Proxy lives + 12 """ + 13 self.host = url + 14 h = Http() + 15 resp, content = h.request('%s/proxy' % self.host, 'POST', urlencode('')) + 16 jcontent = json.loads(content) + 17 self.port = jcontent['port'] + 18 url_parts = self.host.split(":") + 19 self.proxy = url_parts[0] + ":" + url_parts[1] + ":" + str(self.port) +
20 +
21 - def new_har(self, ref=None): +
22 """ + 23 This sets a new HAR to be recorded + 24 :Args: + 25 - ref: A reference for the HAR. Defaults to None + 26 """ + 27 h = Http() + 28 resp, content = h.request('%s/proxy/%s/har' % (self.host, self.port), + 29 'PUT', ref or '') +
30 +
31 - def new_page(self, ref): +
32 """ + 33 This sets a new page to be recorded + 34 :Args: + 35 - ref: A reference for the new page. Defaults to None + 36 """ + 37 h = Http() + 38 resp, content = h.request('%s/proxy/%s/har/pageRef' % (self.host, self.port), + 39 'PUT', ref or '') + 40 if content: + 41 return json.loads(content) +
42 + 43 @property +
44 - def har(self): +
45 """ + 46 Gets the HAR that has been recorded + 47 """ + 48 h = Http() + 49 resp, content = h.request('%s/proxy/%s/har' % (self.host, self.port), + 50 'GET') + 51 return json.loads(content) +
52 +
53 - def selenium_proxy(self): +
54 """ + 55 Returns a Selenium WebDriver Proxy class with details of the HTTP Proxy + 56 """ + 57 from selenium import webdriver + 58 return webdriver.Proxy({"httpProxy":self.proxy}) +
59 +
60 - def whitelist(self, regexp, status_code): +
61 """ + 62 Sets a list of URL patterns to whitelist + 63 :Args: + 64 - regex: a comma separated list of regular expressions + 65 - status_code: the HTTP status code to return for URLs that do not match the whitelist + 66 + 67 """ + 68 h = Http() + 69 resp, content = h.request('%s/proxy/%s/whitelist' % (self.host, self.port), + 70 'PUT', urlencode({ 'regex': regexp, 'status': status_code + 71 })) +
72 + 73 +
74 - def blacklist(self, regexp, status_code): +
75 """ + 76 Sets a list of URL patterns to blacklist + 77 :Args: + 78 - regex: a comma separated list of regular expressions + 79 - status_code: the HTTP status code to return for URLs that do not match the blacklist + 80 + 81 """ + 82 + 83 h = Http() + 84 resp, content = h.request('%s/proxy/%s/blacklist' % (self.host, self.port), + 85 'PUT', urlencode({ 'regex': regexp, 'status': status_code + 86 })) +
87 + 88 LIMITS = { + 89 'upstream_kbps' : 'upstreamKbps', + 90 'downstream_kbps' : 'downstreamKbps', + 91 'latency' : 'latency' + 92 } + 93 + 94 +
95 - def limits(self, options): +
96 """ + 97 Limit the bandwidth through the proxy. + 98 :Args: + 99 - options: A dictionary with all the details you want to set. +100 downstreamKbps - Sets the downstream kbps +101 upstreamKbps - Sets the upstream kbps +102 latency - Add the given latency to each HTTP request +103 """ +104 params = {} +105 +106 for (k, v) in options.items(): +107 if not self.LIMITS.has_key(k): +108 raise Exception('invalid key: %s' % k) +109 +110 params[self.LIMITS[k]] = int(v) +111 +112 if len(params.items()) == 0: +113 raise Exception("You need to specify one of the valid Keys") +114 +115 h = Http() +116 resp, content = h.request('%s/proxy/%s/limit' % (self.host, self.port), +117 'PUT', urlencode(params)) +
118 +
119 - def close(self): +
120 """ +121 shuts down the proxy and closes the port +122 """ +123 h = Http() +124 resp, content = h.request('%s/proxy/%s' % (self.host, self.port), +125 'DELETE' ) +
126 +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/browsermobproxy.client.Client-class.html b/docs/browsermobproxy.client.Client-class.html new file mode 100644 index 0000000..fc43b8e --- /dev/null +++ b/docs/browsermobproxy.client.Client-class.html @@ -0,0 +1,607 @@ + + + + + browsermobproxy.client.Client + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package browsermobproxy :: + Module client :: + Class Client + + + + + + +
[hide private]
[frames] | no frames]
+
+ +

Class Client

source code

+
+object --+
+         |
+        Client
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
Instance Methods[hide private]
+
+   + + + + + + +
__init__(self, + url)
+ Initialises a new Client object :Args:
+ source code + +
+ +
+   + + + + + + +
new_har(self, + ref=None)
+ This sets a new HAR to be recorded :Args:
+ source code + +
+ +
+   + + + + + + +
new_page(self, + ref)
+ This sets a new page to be recorded :Args:
+ source code + +
+ +
+   + + + + + + +
har(self)
+ Gets the HAR that has been recorded
+ source code + +
+ +
+   + + + + + + +
selenium_proxy(self)
+ Returns a Selenium WebDriver Proxy class with details of the HTTP + Proxy
+ source code + +
+ +
+   + + + + + + +
whitelist(self, + regexp, + status_code)
+ Sets a list of URL patterns to whitelist :Args:
+ source code + +
+ +
+   + + + + + + +
blacklist(self, + regexp, + status_code)
+ Sets a list of URL patterns to blacklist :Args:
+ source code + +
+ +
+   + + + + + + +
limits(self, + options)
+ Limit the bandwidth through the proxy.
+ source code + +
+ +
+   + + + + + + +
close(self)
+ shuts down the proxy and closes the port
+ source code + +
+ +
+

Inherited from object: + __delattr__, + __format__, + __getattribute__, + __hash__, + __new__, + __reduce__, + __reduce_ex__, + __repr__, + __setattr__, + __sizeof__, + __str__, + __subclasshook__ +

+
+ + + + + + + + + +
+ + + + + +
Class Variables[hide private]
+
+   + + LIMITS = {'upstream_kbps': 'upstreamKbps', 'downstream_kbps': ... +
+ + + + + + + + + +
+ + + + + +
Properties[hide private]
+
+

Inherited from object: + __class__ +

+
+ + + + + + +
+ + + + + +
Method Details[hide private]
+
+ +
+ +
+ + +
+

__init__(self, + url) +
(Constructor) +

+
source code  +
+ +

Initialises a new Client object :Args:

+
    +
  • + url: This is where the BrowserMob Proxy lives +
  • +
+
+
Overrides: + object.__init__ +
+
+
+
+ +
+ +
+ + +
+

new_har(self, + ref=None) +

+
source code  +
+ +

This sets a new HAR to be recorded :Args:

+
    +
  • + ref: A reference for the HAR. Defaults to None +
  • +
+
+
+
+
+ +
+ +
+ + +
+

new_page(self, + ref) +

+
source code  +
+ +

This sets a new page to be recorded :Args:

+
    +
  • + ref: A reference for the new page. Defaults to None +
  • +
+
+
+
+
+ +
+ +
+ + +
+

har(self) +

+
source code  +
+ +

Gets the HAR that has been recorded

+
+
Decorators:
+
    +
  • @property
  • +
+
+
+
+ +
+ +
+ + +
+

whitelist(self, + regexp, + status_code) +

+
source code  +
+ +

Sets a list of URL patterns to whitelist :Args:

+
    +
  • + regex: a comma separated list of regular expressions +
  • +
  • + status_code: the HTTP status code to return for URLs that do not + match the whitelist +
  • +
+
+
+
+
+ +
+ +
+ + +
+

blacklist(self, + regexp, + status_code) +

+
source code  +
+ +

Sets a list of URL patterns to blacklist :Args:

+
    +
  • + regex: a comma separated list of regular expressions +
  • +
  • + status_code: the HTTP status code to return for URLs that do not + match the blacklist +
  • +
+
+
+
+
+ +
+ +
+ + +
+

limits(self, + options) +

+
source code  +
+ +

Limit the bandwidth through the proxy. :Args:

+
    +
  • + options: A dictionary with all the details you want to set. + downstreamKbps - Sets the downstream kbps upstreamKbps - Sets the + upstream kbps latency - Add the given latency to each HTTP request +
  • +
+
+
+
+
+
+ + + + + + +
+ + + + + +
Class Variable Details[hide private]
+
+ +
+ +
+

LIMITS

+ +
+
+
+
Value:
+
+{'upstream_kbps': 'upstreamKbps', 'downstream_kbps': 'downstreamKbps',\
+ 'latency': 'latency'}
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/browsermobproxy.server-module.html b/docs/browsermobproxy.server-module.html new file mode 100644 index 0000000..8540363 --- /dev/null +++ b/docs/browsermobproxy.server-module.html @@ -0,0 +1,129 @@ + + + + + browsermobproxy.server + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package browsermobproxy :: + Module server + + + + + + +
[hide private]
[frames] | no frames]
+
+ +

Module server

source code

+ + + + + + + + + +
+ + + + + +
Classes[hide private]
+
+   + + Server +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/browsermobproxy.server-pysrc.html b/docs/browsermobproxy.server-pysrc.html new file mode 100644 index 0000000..9c8b043 --- /dev/null +++ b/docs/browsermobproxy.server-pysrc.html @@ -0,0 +1,181 @@ + + + + + browsermobproxy.server + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package browsermobproxy :: + Module server + + + + + + +
[hide private]
[frames] | no frames]
+
+

Source Code for Module browsermobproxy.server

+
+ 1  from subprocess import Popen, PIPE, STDOUT 
+ 2  import socket 
+ 3  import time 
+ 4   
+ 5  from client import Client 
+
6 + 7 + 8 -class Server(object): +
9 +
10 - def __init__(self, path, options={}): +
11 """ +12 Initialises a Server object +13 +14 :Args: +15 - path : Path to the browsermob proxy batch file +16 - options : Dictionary that can hold the port. More items will be added in the future. +17 This defaults to an empty dictionary +18 """ +19 self.path = path +20 self.port = options['port'] if options.has_key('port') else 8080 +21 self.command = ['sh', path, '--port=%s' % self.port] +
22 +
23 - def start(self): +
24 """ +25 This will start the browsermob proxy and then wait until it can interact with it +26 """ +27 self.process = Popen(self.command, stdout=PIPE, stderr=STDOUT) +28 count = 0 +29 while not self._is_listening(): +30 time.sleep(0.1) +31 count += 1 +32 if count == 30: +33 raise Exception("Can't connect to Browsermob-Proxy") +
34 +
35 - def stop(self): +
36 """ +37 This will stop the process running the proxy +38 """ +39 try: +40 if self.process: +41 self.process.kill() +42 self.process.wait() +43 except AttributeError: +44 # kill may not be available under windows environment +45 pass +
46 +47 @property +
48 - def url(self): +
49 """ +50 Gets the url that the proxy is running on. This is not the URL clients should connect to. +51 """ +52 return "http://localhost:%d" % self.port +
53 +54 @property +
55 - def create_proxy(self): +
56 """ +57 Gets a client class that allow to set all the proxy details that you may need to. +58 """ +59 client = Client(self.url) +60 return client +
61 +
62 - def _is_listening(self): +
63 try: +64 socket_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +65 socket_.settimeout(1) +66 socket_.connect(("localhost", self.port)) +67 socket_.close() +68 return True +69 except socket.error: +70 return False +
71 +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/browsermobproxy.server.Server-class.html b/docs/browsermobproxy.server.Server-class.html new file mode 100644 index 0000000..54b3889 --- /dev/null +++ b/docs/browsermobproxy.server.Server-class.html @@ -0,0 +1,380 @@ + + + + + browsermobproxy.server.Server + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package browsermobproxy :: + Module server :: + Class Server + + + + + + +
[hide private]
[frames] | no frames]
+
+ +

Class Server

source code

+
+object --+
+         |
+        Server
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
Instance Methods[hide private]
+
+   + + + + + + +
__init__(self, + path, + options={})
+ Initialises a Server object
+ source code + +
+ +
+   + + + + + + +
start(self)
+ This will start the browsermob proxy and then wait until it can + interact with it
+ source code + +
+ +
+   + + + + + + +
stop(self)
+ This will stop the process running the proxy
+ source code + +
+ +
+   + + + + + + +
url(self)
+ Gets the url that the proxy is running on.
+ source code + +
+ +
+   + + + + + + +
create_proxy(self)
+ Gets a client class that allow to set all the proxy details that you + may need to.
+ source code + +
+ +
+   + + + + + + +
_is_listening(self) + source code + +
+ +
+

Inherited from object: + __delattr__, + __format__, + __getattribute__, + __hash__, + __new__, + __reduce__, + __reduce_ex__, + __repr__, + __setattr__, + __sizeof__, + __str__, + __subclasshook__ +

+
+ + + + + + + + + +
+ + + + + +
Properties[hide private]
+
+

Inherited from object: + __class__ +

+
+ + + + + + +
+ + + + + +
Method Details[hide private]
+
+ +
+ +
+ + +
+

__init__(self, + path, + options={}) +
(Constructor) +

+
source code  +
+ +

Initialises a Server object

+

:Args:

+
    +
  • + path : Path to the browsermob proxy batch file +
  • +
  • + options : Dictionary that can hold the port. More items will be added + in the future. This defaults to an empty dictionary +
  • +
+
+
Overrides: + object.__init__ +
+
+
+
+ +
+ +
+ + +
+

url(self) +

+
source code  +
+ +

Gets the url that the proxy is running on. This is not the URL clients + should connect to.

+
+
Decorators:
+
    +
  • @property
  • +
+
+
+
+ +
+ +
+ + +
+

create_proxy(self) +

+
source code  +
+ +

Gets a client class that allow to set all the proxy details that you + may need to.

+
+
Decorators:
+
    +
  • @property
  • +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/class-tree.html b/docs/class-tree.html new file mode 100644 index 0000000..57ef2e3 --- /dev/null +++ b/docs/class-tree.html @@ -0,0 +1,113 @@ + + + + + Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  + + + + +
[hide private]
[frames] | no frames]
+
+
+ [ Module Hierarchy + | Class Hierarchy ] +

+

Class Hierarchy

+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/crarr.png b/docs/crarr.png new file mode 100644 index 0000000000000000000000000000000000000000..26b43c52433b71e72a9a478c52d446278335f0e4 GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^f?NMQuI$%1#8??M1uoZK z0}62#ctjR6FvuMOVaB`*rFK9;mUKs7M+SzC{oH>NS%G}l0G|-o|NsA=J-p%i`2!7U zCdJ_j4{u-SDsoA1U`TRixpVcz%O`iHHAYk?=&YaLkmD!Pp6~GW^M_S4D^grJKD>P~ zuPf!ku`N^TLavn`Edv_JSQ6wH%;50sMjDXg>*?YcQgJIe!GUqln>_|<+Os&OOUQS1 zY~Wzutud*iVS#|PHMc&?2WHoZpEo8l+6!Oc$x~=%U)469Gl^f?nq7UBw#1AXkrEde cmFKWBXcRFE*(?@T0vgQV>FVdQ&MBb@0LpZ4r2qf` literal 0 HcmV?d00001 diff --git a/docs/epydoc.css b/docs/epydoc.css new file mode 100644 index 0000000..86d4170 --- /dev/null +++ b/docs/epydoc.css @@ -0,0 +1,322 @@ + + +/* Epydoc CSS Stylesheet + * + * This stylesheet can be used to customize the appearance of epydoc's + * HTML output. + * + */ + +/* Default Colors & Styles + * - Set the default foreground & background color with 'body'; and + * link colors with 'a:link' and 'a:visited'. + * - Use bold for decision list terms. + * - The heading styles defined here are used for headings *within* + * docstring descriptions. All headings used by epydoc itself use + * either class='epydoc' or class='toc' (CSS styles for both + * defined below). + */ +body { background: #ffffff; color: #000000; } +p { margin-top: 0.5em; margin-bottom: 0.5em; } +a:link { color: #0000ff; } +a:visited { color: #204080; } +dt { font-weight: bold; } +h1 { font-size: +140%; font-style: italic; + font-weight: bold; } +h2 { font-size: +125%; font-style: italic; + font-weight: bold; } +h3 { font-size: +110%; font-style: italic; + font-weight: normal; } +code { font-size: 100%; } +/* N.B.: class, not pseudoclass */ +a.link { font-family: monospace; } + +/* Page Header & Footer + * - The standard page header consists of a navigation bar (with + * pointers to standard pages such as 'home' and 'trees'); a + * breadcrumbs list, which can be used to navigate to containing + * classes or modules; options links, to show/hide private + * variables and to show/hide frames; and a page title (using + *

). The page title may be followed by a link to the + * corresponding source code (using 'span.codelink'). + * - The footer consists of a navigation bar, a timestamp, and a + * pointer to epydoc's homepage. + */ +h1.epydoc { margin: 0; font-size: +140%; font-weight: bold; } +h2.epydoc { font-size: +130%; font-weight: bold; } +h3.epydoc { font-size: +115%; font-weight: bold; + margin-top: 0.2em; } +td h3.epydoc { font-size: +115%; font-weight: bold; + margin-bottom: 0; } +table.navbar { background: #a0c0ff; color: #000000; + border: 2px groove #c0d0d0; } +table.navbar table { color: #000000; } +th.navbar-select { background: #70b0ff; + color: #000000; } +table.navbar a { text-decoration: none; } +table.navbar a:link { color: #0000ff; } +table.navbar a:visited { color: #204080; } +span.breadcrumbs { font-size: 85%; font-weight: bold; } +span.options { font-size: 70%; } +span.codelink { font-size: 85%; } +td.footer { font-size: 85%; } + +/* Table Headers + * - Each summary table and details section begins with a 'header' + * row. This row contains a section title (marked by + * 'span.table-header') as well as a show/hide private link + * (marked by 'span.options', defined above). + * - Summary tables that contain user-defined groups mark those + * groups using 'group header' rows. + */ +td.table-header { background: #70b0ff; color: #000000; + border: 1px solid #608090; } +td.table-header table { color: #000000; } +td.table-header table a:link { color: #0000ff; } +td.table-header table a:visited { color: #204080; } +span.table-header { font-size: 120%; font-weight: bold; } +th.group-header { background: #c0e0f8; color: #000000; + text-align: left; font-style: italic; + font-size: 115%; + border: 1px solid #608090; } + +/* Summary Tables (functions, variables, etc) + * - Each object is described by a single row of the table with + * two cells. The left cell gives the object's type, and is + * marked with 'code.summary-type'. The right cell gives the + * object's name and a summary description. + * - CSS styles for the table's header and group headers are + * defined above, under 'Table Headers' + */ +table.summary { border-collapse: collapse; + background: #e8f0f8; color: #000000; + border: 1px solid #608090; + margin-bottom: 0.5em; } +td.summary { border: 1px solid #608090; } +code.summary-type { font-size: 85%; } +table.summary a:link { color: #0000ff; } +table.summary a:visited { color: #204080; } + + +/* Details Tables (functions, variables, etc) + * - Each object is described in its own div. + * - A single-row summary table w/ table-header is used as + * a header for each details section (CSS style for table-header + * is defined above, under 'Table Headers'). + */ +table.details { border-collapse: collapse; + background: #e8f0f8; color: #000000; + border: 1px solid #608090; + margin: .2em 0 0 0; } +table.details table { color: #000000; } +table.details a:link { color: #0000ff; } +table.details a:visited { color: #204080; } + +/* Fields */ +dl.fields { margin-left: 2em; margin-top: 1em; + margin-bottom: 1em; } +dl.fields dd ul { margin-left: 0em; padding-left: 0em; } +dl.fields dd ul li ul { margin-left: 2em; padding-left: 0em; } +div.fields { margin-left: 2em; } +div.fields p { margin-bottom: 0.5em; } + +/* Index tables (identifier index, term index, etc) + * - link-index is used for indices containing lists of links + * (namely, the identifier index & term index). + * - index-where is used in link indices for the text indicating + * the container/source for each link. + * - metadata-index is used for indices containing metadata + * extracted from fields (namely, the bug index & todo index). + */ +table.link-index { border-collapse: collapse; + background: #e8f0f8; color: #000000; + border: 1px solid #608090; } +td.link-index { border-width: 0px; } +table.link-index a:link { color: #0000ff; } +table.link-index a:visited { color: #204080; } +span.index-where { font-size: 70%; } +table.metadata-index { border-collapse: collapse; + background: #e8f0f8; color: #000000; + border: 1px solid #608090; + margin: .2em 0 0 0; } +td.metadata-index { border-width: 1px; border-style: solid; } +table.metadata-index a:link { color: #0000ff; } +table.metadata-index a:visited { color: #204080; } + +/* Function signatures + * - sig* is used for the signature in the details section. + * - .summary-sig* is used for the signature in the summary + * table, and when listing property accessor functions. + * */ +.sig-name { color: #006080; } +.sig-arg { color: #008060; } +.sig-default { color: #602000; } +.summary-sig { font-family: monospace; } +.summary-sig-name { color: #006080; font-weight: bold; } +table.summary a.summary-sig-name:link + { color: #006080; font-weight: bold; } +table.summary a.summary-sig-name:visited + { color: #006080; font-weight: bold; } +.summary-sig-arg { color: #006040; } +.summary-sig-default { color: #501800; } + +/* Subclass list + */ +ul.subclass-list { display: inline; } +ul.subclass-list li { display: inline; } + +/* To render variables, classes etc. like functions */ +table.summary .summary-name { color: #006080; font-weight: bold; + font-family: monospace; } +table.summary + a.summary-name:link { color: #006080; font-weight: bold; + font-family: monospace; } +table.summary + a.summary-name:visited { color: #006080; font-weight: bold; + font-family: monospace; } + +/* Variable values + * - In the 'variable details' sections, each varaible's value is + * listed in a 'pre.variable' box. The width of this box is + * restricted to 80 chars; if the value's repr is longer than + * this it will be wrapped, using a backslash marked with + * class 'variable-linewrap'. If the value's repr is longer + * than 3 lines, the rest will be ellided; and an ellipsis + * marker ('...' marked with 'variable-ellipsis') will be used. + * - If the value is a string, its quote marks will be marked + * with 'variable-quote'. + * - If the variable is a regexp, it is syntax-highlighted using + * the re* CSS classes. + */ +pre.variable { padding: .5em; margin: 0; + background: #dce4ec; color: #000000; + border: 1px solid #708890; } +.variable-linewrap { color: #604000; font-weight: bold; } +.variable-ellipsis { color: #604000; font-weight: bold; } +.variable-quote { color: #604000; font-weight: bold; } +.variable-group { color: #008000; font-weight: bold; } +.variable-op { color: #604000; font-weight: bold; } +.variable-string { color: #006030; } +.variable-unknown { color: #a00000; font-weight: bold; } +.re { color: #000000; } +.re-char { color: #006030; } +.re-op { color: #600000; } +.re-group { color: #003060; } +.re-ref { color: #404040; } + +/* Base tree + * - Used by class pages to display the base class hierarchy. + */ +pre.base-tree { font-size: 80%; margin: 0; } + +/* Frames-based table of contents headers + * - Consists of two frames: one for selecting modules; and + * the other listing the contents of the selected module. + * - h1.toc is used for each frame's heading + * - h2.toc is used for subheadings within each frame. + */ +h1.toc { text-align: center; font-size: 105%; + margin: 0; font-weight: bold; + padding: 0; } +h2.toc { font-size: 100%; font-weight: bold; + margin: 0.5em 0 0 -0.3em; } + +/* Syntax Highlighting for Source Code + * - doctest examples are displayed in a 'pre.py-doctest' block. + * If the example is in a details table entry, then it will use + * the colors specified by the 'table pre.py-doctest' line. + * - Source code listings are displayed in a 'pre.py-src' block. + * Each line is marked with 'span.py-line' (used to draw a line + * down the left margin, separating the code from the line + * numbers). Line numbers are displayed with 'span.py-lineno'. + * The expand/collapse block toggle button is displayed with + * 'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not + * modify the font size of the text.) + * - If a source code page is opened with an anchor, then the + * corresponding code block will be highlighted. The code + * block's header is highlighted with 'py-highlight-hdr'; and + * the code block's body is highlighted with 'py-highlight'. + * - The remaining py-* classes are used to perform syntax + * highlighting (py-string for string literals, py-name for names, + * etc.) + */ +pre.py-doctest { padding: .5em; margin: 1em; + background: #e8f0f8; color: #000000; + border: 1px solid #708890; } +table pre.py-doctest { background: #dce4ec; + color: #000000; } +pre.py-src { border: 2px solid #000000; + background: #f0f0f0; color: #000000; } +.py-line { border-left: 2px solid #000000; + margin-left: .2em; padding-left: .4em; } +.py-lineno { font-style: italic; font-size: 90%; + padding-left: .5em; } +a.py-toggle { text-decoration: none; } +div.py-highlight-hdr { border-top: 2px solid #000000; + border-bottom: 2px solid #000000; + background: #d8e8e8; } +div.py-highlight { border-bottom: 2px solid #000000; + background: #d0e0e0; } +.py-prompt { color: #005050; font-weight: bold;} +.py-more { color: #005050; font-weight: bold;} +.py-string { color: #006030; } +.py-comment { color: #003060; } +.py-keyword { color: #600000; } +.py-output { color: #404040; } +.py-name { color: #000050; } +.py-name:link { color: #000050 !important; } +.py-name:visited { color: #000050 !important; } +.py-number { color: #005000; } +.py-defname { color: #000060; font-weight: bold; } +.py-def-name { color: #000060; font-weight: bold; } +.py-base-class { color: #000060; } +.py-param { color: #000060; } +.py-docstring { color: #006030; } +.py-decorator { color: #804020; } +/* Use this if you don't want links to names underlined: */ +/*a.py-name { text-decoration: none; }*/ + +/* Graphs & Diagrams + * - These CSS styles are used for graphs & diagrams generated using + * Graphviz dot. 'img.graph-without-title' is used for bare + * diagrams (to remove the border created by making the image + * clickable). + */ +img.graph-without-title { border: none; } +img.graph-with-title { border: 1px solid #000000; } +span.graph-title { font-weight: bold; } +span.graph-caption { } + +/* General-purpose classes + * - 'p.indent-wrapped-lines' defines a paragraph whose first line + * is not indented, but whose subsequent lines are. + * - The 'nomargin-top' class is used to remove the top margin (e.g. + * from lists). The 'nomargin' class is used to remove both the + * top and bottom margin (but not the left or right margin -- + * for lists, that would cause the bullets to disappear.) + */ +p.indent-wrapped-lines { padding: 0 0 0 7em; text-indent: -7em; + margin: 0; } +.nomargin-top { margin-top: 0; } +.nomargin { margin-top: 0; margin-bottom: 0; } + +/* HTML Log */ +div.log-block { padding: 0; margin: .5em 0 .5em 0; + background: #e8f0f8; color: #000000; + border: 1px solid #000000; } +div.log-error { padding: .1em .3em .1em .3em; margin: 4px; + background: #ffb0b0; color: #000000; + border: 1px solid #000000; } +div.log-warning { padding: .1em .3em .1em .3em; margin: 4px; + background: #ffffb0; color: #000000; + border: 1px solid #000000; } +div.log-info { padding: .1em .3em .1em .3em; margin: 4px; + background: #b0ffb0; color: #000000; + border: 1px solid #000000; } +h2.log-hdr { background: #70b0ff; color: #000000; + margin: 0; padding: 0em 0.5em 0em 0.5em; + border-bottom: 1px solid #000000; font-size: 110%; } +p.log { font-weight: bold; margin: .5em 0 .5em 0; } +tr.opt-changed { color: #000000; font-weight: bold; } +tr.opt-default { color: #606060; } +pre.log { margin: 0; padding: 0; padding-left: 1em; } diff --git a/docs/epydoc.js b/docs/epydoc.js new file mode 100644 index 0000000..e787dbc --- /dev/null +++ b/docs/epydoc.js @@ -0,0 +1,293 @@ +function toggle_private() { + // Search for any private/public links on this page. Store + // their old text in "cmd," so we will know what action to + // take; and change their text to the opposite action. + var cmd = "?"; + var elts = document.getElementsByTagName("a"); + for(var i=0; i...
"; + elt.innerHTML = s; + } +} + +function toggle(id) { + elt = document.getElementById(id+"-toggle"); + if (elt.innerHTML == "-") + collapse(id); + else + expand(id); + return false; +} + +function highlight(id) { + var elt = document.getElementById(id+"-def"); + if (elt) elt.className = "py-highlight-hdr"; + var elt = document.getElementById(id+"-expanded"); + if (elt) elt.className = "py-highlight"; + var elt = document.getElementById(id+"-collapsed"); + if (elt) elt.className = "py-highlight"; +} + +function num_lines(s) { + var n = 1; + var pos = s.indexOf("\n"); + while ( pos > 0) { + n += 1; + pos = s.indexOf("\n", pos+1); + } + return n; +} + +// Collapse all blocks that mave more than `min_lines` lines. +function collapse_all(min_lines) { + var elts = document.getElementsByTagName("div"); + for (var i=0; i 0) + if (elt.id.substring(split, elt.id.length) == "-expanded") + if (num_lines(elt.innerHTML) > min_lines) + collapse(elt.id.substring(0, split)); + } +} + +function expandto(href) { + var start = href.indexOf("#")+1; + if (start != 0 && start != href.length) { + if (href.substring(start, href.length) != "-") { + collapse_all(4); + pos = href.indexOf(".", start); + while (pos != -1) { + var id = href.substring(start, pos); + expand(id); + pos = href.indexOf(".", pos+1); + } + var id = href.substring(start, href.length); + expand(id); + highlight(id); + } + } +} + +function kill_doclink(id) { + var parent = document.getElementById(id); + parent.removeChild(parent.childNodes.item(0)); +} +function auto_kill_doclink(ev) { + if (!ev) var ev = window.event; + if (!this.contains(ev.toElement)) { + var parent = document.getElementById(this.parentID); + parent.removeChild(parent.childNodes.item(0)); + } +} + +function doclink(id, name, targets_id) { + var elt = document.getElementById(id); + + // If we already opened the box, then destroy it. + // (This case should never occur, but leave it in just in case.) + if (elt.childNodes.length > 1) { + elt.removeChild(elt.childNodes.item(0)); + } + else { + // The outer box: relative + inline positioning. + var box1 = document.createElement("div"); + box1.style.position = "relative"; + box1.style.display = "inline"; + box1.style.top = 0; + box1.style.left = 0; + + // A shadow for fun + var shadow = document.createElement("div"); + shadow.style.position = "absolute"; + shadow.style.left = "-1.3em"; + shadow.style.top = "-1.3em"; + shadow.style.background = "#404040"; + + // The inner box: absolute positioning. + var box2 = document.createElement("div"); + box2.style.position = "relative"; + box2.style.border = "1px solid #a0a0a0"; + box2.style.left = "-.2em"; + box2.style.top = "-.2em"; + box2.style.background = "white"; + box2.style.padding = ".3em .4em .3em .4em"; + box2.style.fontStyle = "normal"; + box2.onmouseout=auto_kill_doclink; + box2.parentID = id; + + // Get the targets + var targets_elt = document.getElementById(targets_id); + var targets = targets_elt.getAttribute("targets"); + var links = ""; + target_list = targets.split(","); + for (var i=0; i" + + target[0] + ""; + } + + // Put it all together. + elt.insertBefore(box1, elt.childNodes.item(0)); + //box1.appendChild(box2); + box1.appendChild(shadow); + shadow.appendChild(box2); + box2.innerHTML = + "Which "+name+" do you want to see documentation for?" + + ""; + } + return false; +} + +function get_anchor() { + var href = location.href; + var start = href.indexOf("#")+1; + if ((start != 0) && (start != href.length)) + return href.substring(start, href.length); + } +function redirect_url(dottedName) { + // Scan through each element of the "pages" list, and check + // if "name" matches with any of them. + for (var i=0; i-m" or "-c"; + // extract the portion & compare it to dottedName. + var pagename = pages[i].substring(0, pages[i].length-2); + if (pagename == dottedName.substring(0,pagename.length)) { + + // We've found a page that matches `dottedName`; + // construct its URL, using leftover `dottedName` + // content to form an anchor. + var pagetype = pages[i].charAt(pages[i].length-1); + var url = pagename + ((pagetype=="m")?"-module.html": + "-class.html"); + if (dottedName.length > pagename.length) + url += "#" + dottedName.substring(pagename.length+1, + dottedName.length); + return url; + } + } + } diff --git a/docs/frames.html b/docs/frames.html new file mode 100644 index 0000000..2556081 --- /dev/null +++ b/docs/frames.html @@ -0,0 +1,17 @@ + + + + + API Documentation + + + + + + + + + diff --git a/docs/help.html b/docs/help.html new file mode 100644 index 0000000..b4ddb60 --- /dev/null +++ b/docs/help.html @@ -0,0 +1,268 @@ + + + + + Help + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  + + + + +
[hide private]
[frames] | no frames]
+
+ +

API Documentation

+ +

This document contains the API (Application Programming Interface) +documentation for this project. Documentation for the Python +objects defined by the project is divided into separate pages for each +package, module, and class. The API documentation also includes two +pages containing information about the project as a whole: a trees +page, and an index page.

+ +

Object Documentation

+ +

Each Package Documentation page contains:

+
    +
  • A description of the package.
  • +
  • A list of the modules and sub-packages contained by the + package.
  • +
  • A summary of the classes defined by the package.
  • +
  • A summary of the functions defined by the package.
  • +
  • A summary of the variables defined by the package.
  • +
  • A detailed description of each function defined by the + package.
  • +
  • A detailed description of each variable defined by the + package.
  • +
+ +

Each Module Documentation page contains:

+
    +
  • A description of the module.
  • +
  • A summary of the classes defined by the module.
  • +
  • A summary of the functions defined by the module.
  • +
  • A summary of the variables defined by the module.
  • +
  • A detailed description of each function defined by the + module.
  • +
  • A detailed description of each variable defined by the + module.
  • +
+ +

Each Class Documentation page contains:

+
    +
  • A class inheritance diagram.
  • +
  • A list of known subclasses.
  • +
  • A description of the class.
  • +
  • A summary of the methods defined by the class.
  • +
  • A summary of the instance variables defined by the class.
  • +
  • A summary of the class (static) variables defined by the + class.
  • +
  • A detailed description of each method defined by the + class.
  • +
  • A detailed description of each instance variable defined by the + class.
  • +
  • A detailed description of each class (static) variable defined + by the class.
  • +
+ +

Project Documentation

+ +

The Trees page contains the module and class hierarchies:

+
    +
  • The module hierarchy lists every package and module, with + modules grouped into packages. At the top level, and within each + package, modules and sub-packages are listed alphabetically.
  • +
  • The class hierarchy lists every class, grouped by base + class. If a class has more than one base class, then it will be + listed under each base class. At the top level, and under each base + class, classes are listed alphabetically.
  • +
+ +

The Index page contains indices of terms and + identifiers:

+
    +
  • The term index lists every term indexed by any object's + documentation. For each term, the index provides links to each + place where the term is indexed.
  • +
  • The identifier index lists the (short) name of every package, + module, class, method, function, variable, and parameter. For each + identifier, the index provides a short description, and a link to + its documentation.
  • +
+ +

The Table of Contents

+ +

The table of contents occupies the two frames on the left side of +the window. The upper-left frame displays the project +contents, and the lower-left frame displays the module +contents:

+ + + + + + + + + +
+ Project
Contents
...
+ API
Documentation
Frame


+
+ Module
Contents
 
...
  +

+ +

The project contents frame contains a list of all packages +and modules that are defined by the project. Clicking on an entry +will display its contents in the module contents frame. Clicking on a +special entry, labeled "Everything," will display the contents of +the entire project.

+ +

The module contents frame contains a list of every +submodule, class, type, exception, function, and variable defined by a +module or package. Clicking on an entry will display its +documentation in the API documentation frame. Clicking on the name of +the module, at the top of the frame, will display the documentation +for the module itself.

+ +

The "frames" and "no frames" buttons below the top +navigation bar can be used to control whether the table of contents is +displayed or not.

+ +

The Navigation Bar

+ +

A navigation bar is located at the top and bottom of every page. +It indicates what type of page you are currently viewing, and allows +you to go to related pages. The following table describes the labels +on the navigation bar. Note that not some labels (such as +[Parent]) are not displayed on all pages.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LabelHighlighted when...Links to...
[Parent](never highlighted) the parent of the current package
[Package]viewing a packagethe package containing the current object +
[Module]viewing a modulethe module containing the current object +
[Class]viewing a class the class containing the current object
[Trees]viewing the trees page the trees page
[Index]viewing the index page the index page
[Help]viewing the help page the help page
+ +

The "show private" and "hide private" buttons below +the top navigation bar can be used to control whether documentation +for private objects is displayed. Private objects are usually defined +as objects whose (short) names begin with a single underscore, but do +not end with an underscore. For example, "_x", +"__pprint", and "epydoc.epytext._tokenize" +are private objects; but "re.sub", +"__init__", and "type_" are not. However, +if a module defines the "__all__" variable, then its +contents are used to decide which objects are private.

+ +

A timestamp below the bottom navigation bar indicates when each +page was last updated.

+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/identifier-index.html b/docs/identifier-index.html new file mode 100644 index 0000000..bc4bc78 --- /dev/null +++ b/docs/identifier-index.html @@ -0,0 +1,260 @@ + + + + + Identifier Index + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  + + + + +
[hide private]
[frames] | no frames]
+
+ +
+

Identifier Index

+
+[ + A + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + _ +] +
+ + + + + + + + + + + + + + + + + + + +

B

+ + + + + + + + +

C

+ + + + + + + + + + + + +

H

+ + + + + + + + +

L

+ + + + + + + + +

N

+ + + + + + + + +

S

+ + + + + + + + + + + + +

U

+ + + + + + + + +

W

+ + + + + + + + +

_

+ + + + + + + + +
+

+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..2556081 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,17 @@ + + + + + API Documentation + + + + + + + + + diff --git a/docs/module-tree.html b/docs/module-tree.html new file mode 100644 index 0000000..b1b3365 --- /dev/null +++ b/docs/module-tree.html @@ -0,0 +1,110 @@ + + + + + Module Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  + + + + +
[hide private]
[frames] | no frames]
+
+
+ [ Module Hierarchy + | Class Hierarchy ] +

+

Module Hierarchy

+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/docs/redirect.html b/docs/redirect.html new file mode 100644 index 0000000..3674f1d --- /dev/null +++ b/docs/redirect.html @@ -0,0 +1,38 @@ +Epydoc Redirect Page + + + + + + + + +

Epydoc Auto-redirect page

+ +

When javascript is enabled, this page will redirect URLs of +the form redirect.html#dotted.name to the +documentation for the object with the given fully-qualified +dotted name.

+

 

+ + + + + diff --git a/docs/toc-browsermobproxy-module.html b/docs/toc-browsermobproxy-module.html new file mode 100644 index 0000000..ad8c4f8 --- /dev/null +++ b/docs/toc-browsermobproxy-module.html @@ -0,0 +1,32 @@ + + + + + browsermobproxy + + + + + +

Module browsermobproxy

+
+

Variables

+ Client
Server

+[hide private] + + + + diff --git a/docs/toc-browsermobproxy.client-module.html b/docs/toc-browsermobproxy.client-module.html new file mode 100644 index 0000000..82ea832 --- /dev/null +++ b/docs/toc-browsermobproxy.client-module.html @@ -0,0 +1,31 @@ + + + + + client + + + + + +

Module client

+
+

Classes

+ Client

+[hide private] + + + + diff --git a/docs/toc-browsermobproxy.server-module.html b/docs/toc-browsermobproxy.server-module.html new file mode 100644 index 0000000..731a9e4 --- /dev/null +++ b/docs/toc-browsermobproxy.server-module.html @@ -0,0 +1,31 @@ + + + + + server + + + + + +

Module server

+
+

Classes

+ Server

+[hide private] + + + + diff --git a/docs/toc-everything.html b/docs/toc-everything.html new file mode 100644 index 0000000..001f345 --- /dev/null +++ b/docs/toc-everything.html @@ -0,0 +1,35 @@ + + + + + Everything + + + + + +

Everything

+
+

All Classes

+ browsermobproxy.client.Client
browsermobproxy.server.Server

All Variables

+ browsermobproxy.Client
browsermobproxy.Server

+[hide private] + + + + diff --git a/docs/toc.html b/docs/toc.html new file mode 100644 index 0000000..8706e03 --- /dev/null +++ b/docs/toc.html @@ -0,0 +1,35 @@ + + + + + Table of Contents + + + + + +

Table of Contents

+
+ Everything +
+

Modules

+ browsermobproxy
browsermobproxy.client
browsermobproxy.server

+ [hide private] + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..a5d803e --- /dev/null +++ b/index.html @@ -0,0 +1,25 @@ + + + + Python Browsermob Proxy Library + + + +
 
+
+

Python Browsermob Proxy Library

+

+ This is the Python Library for interaction with the Browsermob Proxy. It allows us to create a proxy, set references and generate HAR representations. For more details read the Pydocs. Note that this will only work with Selenium 2.17 onwards. +

+ +

+

Releases

+

0.0.1

+
    +
  • Initial release
  • +
+

+
+ Fork me on GitHub + + diff --git a/stylesheets/style.css b/stylesheets/style.css new file mode 100644 index 0000000..f47c480 --- /dev/null +++ b/stylesheets/style.css @@ -0,0 +1,21 @@ +body { + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; + background: gray; + color: white; +} + +a { + color: #00B7FF; +} +.container { + margin: 0 auto; + width: 850px +} + +.background { + background: #CACACA url(data:image/jpg;base64,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); + display:block; + width:100%; + height:100px; + position: relative; + top:0px;} From 78b43d926083828f5ec93331159985b4e25ca7c4 Mon Sep 17 00:00:00 2001 From: AutomatedTester Date: Mon, 16 Jan 2012 20:55:24 +0000 Subject: [PATCH 2/9] added an example --- index.html | 22 ++++++++++++++++++++++ stylesheets/style.css | 13 +++++++++++++ 2 files changed, 35 insertions(+) diff --git a/index.html b/index.html index a5d803e..3d5e292 100644 --- a/index.html +++ b/index.html @@ -11,7 +11,29 @@

Python Browsermob Proxy Library

This is the Python Library for interaction with the Browsermob Proxy. It allows us to create a proxy, set references and generate HAR representations. For more details read the Pydocs. Note that this will only work with Selenium 2.17 onwards.

+

+

Example

+
+            
+                from browsermobproxy import Server
+                server = Server("path/to/browsermob-proxy")
+                server.start()
+                proxy = server.create_proxy
+
+                from selenium import webdriver
+                profile  = webdriver.FirefoxProfile()
+                profile.set_proxy(proxy.selenium_proxy())
+                driver = webdriver.Firefox(firefox_profile=profile)
 
+                proxy.new_har("google")
+                driver.get("http://www.google.co.uk")
+                proxy.har # returns a HAR JSON blob
+
+                proxy.stop()
+                driver.quit()
+            
+        
+

Releases

0.0.1

diff --git a/stylesheets/style.css b/stylesheets/style.css index f47c480..bbc82d3 100644 --- a/stylesheets/style.css +++ b/stylesheets/style.css @@ -12,6 +12,19 @@ a { width: 850px } +pre { + font: 12px monaco, monospace; + margin: 10px; + padding: 10px; + border: 1px solid #eee; + border-bottom-color: #ddd; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -webkit-box-shadow: inset 0 0 10px #eee; + -moz-box-shadow: inset 0 0 10px #eee; + overflow-x: auto; +} + .background { background: #CACACA url(data:image/jpg;base64,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); display:block; From 0ef15046173fa1ddde09690decb71f4b67ebe8ff Mon Sep 17 00:00:00 2001 From: AutomatedTester Date: Mon, 16 Jan 2012 21:22:50 +0000 Subject: [PATCH 3/9] fixed typo --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 3d5e292..0e06452 100644 --- a/index.html +++ b/index.html @@ -36,7 +36,7 @@

Example

Releases

-

0.0.1

+

0.0.1

  • Initial release
From 2ce0f00a322ed306331209901d99e048dc24ebfa Mon Sep 17 00:00:00 2001 From: AutomatedTester Date: Tue, 17 Jan 2012 20:06:47 +0000 Subject: [PATCH 4/9] fixed typo --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 0e06452..a563428 100644 --- a/index.html +++ b/index.html @@ -42,6 +42,6 @@

Releases

- Fork me on GitHub + Fork me on GitHub From 8e2d795115e7755f9b5d3a2ccb9efeac77e5f848 Mon Sep 17 00:00:00 2001 From: AutomatedTester Date: Thu, 29 Mar 2012 15:11:41 +0100 Subject: [PATCH 5/9] Updating release info --- index.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index a563428..62917ff 100644 --- a/index.html +++ b/index.html @@ -36,7 +36,12 @@

Example

Releases

-

0.0.1

+

0.1.0

+
    +
  • Remove HTTPLib2 and replace with Requests
  • +
  • Added support for setting headers in the proxy
  • +
+

0.0.1

  • Initial release
From 4473e2f9534677ce1605d50c1412fadccdcffb49 Mon Sep 17 00:00:00 2001 From: AutomatedTester Date: Thu, 21 Jun 2012 20:22:23 +0100 Subject: [PATCH 6/9] added changelog to site and changes to API --- index.html | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 62917ff..e3b68bd 100644 --- a/index.html +++ b/index.html @@ -18,7 +18,7 @@

Example

from browsermobproxy import Server server = Server("path/to/browsermob-proxy") server.start() - proxy = server.create_proxy + proxy = server.create_proxy() from selenium import webdriver profile = webdriver.FirefoxProfile() @@ -36,7 +36,25 @@

Example

Releases

-

0.1.0

+

0.2.0

+
    +
  • DELETE /proxy/:port/ +
  • /proxy/:port/limits +
  • /proxy/:port/blacklist +
  • /proxy/:port/whitelist +
  • fixing /proxy/:port/har/pageRef +
  • fixing /proxy/:port/har/pageRef +
  • fixing passing in a page ref as the name for the page in /proxy/:port/har +
  • tests around /proxy/:port/har and some cleanup of the implementation +
  • make /proxy/:port/headers work +
  • wrapping selenium_proxy with webdriver_proxy since the project is more than just webdriver +
  • extending the client to play nice with remote webdriver instances +
  • create_proxy sounds and feels like a method to me, let's make it so +
  • ensure the self.process exist, to reduce possibilities of AttributeError +
  • check the path before attempting to start the server +
  • wait longer than 3 seconds for the server to come up +
+

0.1.0

  • Remove HTTPLib2 and replace with Requests
  • Added support for setting headers in the proxy
  • From 4c7143660c087adb981d98acfe087f37835799da Mon Sep 17 00:00:00 2001 From: AutomatedTester Date: Fri, 31 Jan 2014 22:50:30 +0000 Subject: [PATCH 7/9] updating gitignore to ignore the python build dirs --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 3819313..7ef79eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ *.swp *.swo +browsermob_proxy.egg-info/ +browsermobproxy/ +dist/ From fb04d7caff97d6a33a712eca0bf30e4b0bd07bfe Mon Sep 17 00:00:00 2001 From: AutomatedTester Date: Fri, 31 Jan 2014 22:51:07 +0000 Subject: [PATCH 8/9] Updating changelog on page and updating link to RTD for docs --- index.html | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index e3b68bd..5f9cdf8 100644 --- a/index.html +++ b/index.html @@ -9,7 +9,7 @@

    Python Browsermob Proxy Library

    - This is the Python Library for interaction with the Browsermob Proxy. It allows us to create a proxy, set references and generate HAR representations. For more details read the Pydocs. Note that this will only work with Selenium 2.17 onwards. + This is the Python Library for interaction with the Browsermob Proxy. It allows us to create a proxy, set references and generate HAR representations. For more details read the docs. Note that this will only work with Selenium 2.17 onwards.

    Example

    @@ -36,7 +36,32 @@

    Example

    Releases

    -

    0.2.0

    +

    0.6.0

    +
      +
    • Added support for parameters in har creation +
    • Bug fixes for tests that are out of date +
    • Setup server constructor to look on path for location of browsermob-proxy executable. As well as looking for a file. Also added example code for using browsermob-proxy with chrome +
    • Fix project name +
    • adding docs +
    + +

    0.5.0

    +
      +
    • Allow proxying of ssl requests with selenium. +
    • Updating case for proxy type +
    + +

    0.4.0

    +
      +
    • Allow setting basic authentication +
    • Adding the ability to remap hosts which is available from BrowserMob Proxy Beta 7 +
    • Merge pull request #6 from lukeis/patch-2 +
    • Update readme.md +
    • initial commit of event listener to auto do record +
    • server.create_proxy is a function, should be called :) +
    • forgot to add the port +
    +

    0.2.0

    • DELETE /proxy/:port/
    • /proxy/:port/limits From 6bf46e532e197f7563d3244782753ea04faab479 Mon Sep 17 00:00:00 2001 From: AutomatedTester Date: Fri, 5 Jun 2015 14:38:17 +0100 Subject: [PATCH 9/9] Updating changelog for 0.7.0 --- index.html | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 5f9cdf8..78e8d1c 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,7 @@
       
      -
      +

      Python Browsermob Proxy Library

      This is the Python Library for interaction with the Browsermob Proxy. It allows us to create a proxy, set references and generate HAR representations. For more details read the docs. Note that this will only work with Selenium 2.17 onwards. @@ -36,7 +36,26 @@

      Example

      Releases

      -

      0.6.0

      + +

      0.7.0

      +
        +
      • Updating travis ci to use browsermob proxy 2.0 +
      • Support to use httpsProxy and httpProxy at proxy creation time +
      • Adding Python 3 support +
      • add sslProxy to Client.add_to_capabilities with tests +
      • Correct docstring for `wait_for_traffic_to_stop` +
      • Removing unused :Args: items +
      • Updating docstrings +
      • Correcting args and params for documentation +
      • updated docstrings for easier formatting on things like RTDs +
      • updated new_har() docstrings +
      • updated client documentation +
      • Added client and server docs +
      • updating version in docs +
      + + +

      0.6.0

      • Added support for parameters in har creation
      • Bug fixes for tests that are out of date