Documentation skeleton.

This commit is contained in:
Aldo Cortesi 2012-06-24 10:18:20 +12:00
parent e236d7746a
commit 3bc7f4e1cd
11 changed files with 618 additions and 9 deletions

View File

@ -3,9 +3,12 @@ __pathod__ is a collection of pathological tools for testing and torturing HTTP
clients and servers. The project has three components:
- __pathod__, an pathological HTTP daemon.
- __pathoc__, a fiendishly perverse HTTP client.
- __pathoc__, a perverse HTTP client.
- __libpathod.test__, an API for easily using __pathod__ and __pathoc__ in unit tests.
# pathod
At __pathod__'s heart is a tiny, terse language for crafting HTTP responses.
The simplest way to use __pathod__ is to fire up the daemon, and specify the
response behaviour you want using this language in the request URL. Here's a
@ -31,8 +34,7 @@ various other goodies. Try it by visiting the server root:
Specifying Responses
====================
## Specifying Responses
The general form of a response is as follows:
@ -117,8 +119,8 @@ once at 10 bytes and once at 20, then disconnects at 5000:
200:b@1m:p10,10:p20,10:d5000
Features
========
## Features
#### hKEY=VALUE
@ -158,8 +160,9 @@ forever. OFFSET can also be "r" to generate a random offset, or "a" for an
offset just after all data has been sent.
Value Specifiers
================
## Value Specifiers
There are three different flavours of value specification.
@ -240,7 +243,7 @@ Supported data types are:
bytes
# API
## API
__pathod__ exposes a simple API, intended to make it possible to drive and
inspect the daemon remotely for use in unit testing and the like.
@ -299,6 +302,9 @@ interface.
A POST to this URL clears the log buffer.
# Installing
If you already have __pip__ on your system, installing __pathod__ and its
@ -307,5 +313,6 @@ dependencies is dead simple:
pip install pathod
The project uses the __nose__ unit testing framework, which you can get here:
FIXME

9
doc-src/01-bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

4
doc-src/01-jquery-1.7.2.min.js vendored Normal file

File diff suppressed because one or more lines are too long

6
doc-src/02-bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

343
doc-src/03-blogstyle.css Normal file
View File

@ -0,0 +1,343 @@
#rsstable {
margin-top: 15px;
padding: 0px;
}
#rsstable td {
border: 0px;
margin: 0px;
padding: 0px;
font-size: 11px;
color: #000000;
padding-right: 4px;
}
.post {
padding: 0px;
}
.posthead {
margin-bottom: 15px;
}
/* title */
.posthead h1 {
font-size: 2.4em !important;
margin: 0 0 0.2em 0;
}
/* date */
.posthead h2 {
font-size: 1.0em;
color: #999;
margin: 0 0 -0.25em 0;
font-weight: normal;
margin-bottom 5px;
}
.posthead a {
color: #3F8ED8;
text-decoration: none;
}
.posthead a:hover {
text-decoration: underline;
}
sup {
vertical-align: text-top;
padding: 2px;
}
.postbody p {
line-height: 1.4em;
margin: 1em 0;
}
.postbody a {
color: #3F8ED8;
text-decoration: underline;
}
.postbody {
margin-bottom: 10px;
border-bottom: 1px solid #CCCCCC;
}
.postbody pre {
font-size: 0.8em;
}
.footnotes {
font-size: 0.9em;
margin: 1em 0;
}
.footnotes hr {
color: #ffffff;
background-color: #ffffff;
border: #ffffff;
}
#twitter_div {
margin-left: 0px;
margin-bottom: 10px;
}
#twitter_update_list {
margin-left: 0px;
}
#twitter_update_list li {
list-style-image:none;
list-style-position:outside;
list-style-type:none;
margin-bottom: 20px;
}
.archive a {
color: #437095;
text-decoration: none;
}
.archive a:hover {
color: #000;
text-decoration: underline;
}
.archive li {
list-style-image:none;
list-style-position:outside;
list-style-type:none;
}
.archive h1 {
font-size: 1.8em;
}
.archive .archive-post {
font-size: 1.5em;
}
.archive .archive-date {
font-size: 1.0em;
margin-left: 15px;
}
.highlight pre {
border-bottom: 1px solid #CCCCCC;
border-top: 1px solid #CCCCCC;
padding: 10px;
background: #F8F8F8 none repeat scroll 0% 0%;
margin-bottom: 10px;
overflow: auto;
}
.output {
border-bottom: 1px solid #CCCCCC;
border-top: 1px solid #CCCCCC;
padding: 10px;
background: #F8F8F8 none repeat scroll 0% 0%;
margin-bottom: 10px;
overflow: auto;
}
#ft {
color: #aaa;
border-top: 1px solid #aaa;
clear: both;
margin: 0 0 2em 0;
font-size: 0.8em;
letter-spacing: 0.5px;
}
.imggrid td {
border: 0px;
padding: 1px;
margin: 0px;
line-height: 0%;
}
.postimage img {
padding: 10px;
}
.spacertable {
width: 100%;
margin: 0px;
padding: 0px;
}
.spacertable td {
border: 0px;
text-align: center;
}
.layouttable {
width: 100%;
margin: 0px;
padding: 0px;
}
.layouttable td {
border: 0px;
text-align: left;
vertical-align: top;
}
blockquote {
background: url(start_quote.png) top left no-repeat;
padding-left: 30px;
padding-right: 30px;
font-size: 1.1em;
}
.subtitle {
width: 60%;
font-style: italic;
}
.equation {
margin-left: 30px;
font-weight: bold;
font-size: 1.5em;
}
.recent a {
color: #437095;
text-decoration: none;
}
.recent a:hover {
color: #000;
text-decoration: underline;
}
#yui-main .recent ul li {
list-style-image:none;
list-style-position:outside;
list-style-type:none;
margin: 5px;
}
#yui-main .recent h1 {
font-size: 1.4em;
margin-top: 20px;
padding: 0;
margin: 0;
}
.recent .recent-post {
font-size: 1.0em;
}
.recent .recent-date {
font-size: 0.8em;
margin-left: 15px;
}
.links_block {
margin-left: 35px;
}
.links_block li {
list-style-type:none;
}
.links_title {
padding: 0px;
margin: 0px;
}
.links_title a p {
margin: 0px !important;
}
.links_body {
padding: 0px;
margin: 0px;
margin-left: 20px;
font-style: italic;
}
.links_body p {
margin: 5px !important;
}
.terminal {
color: #fff;
background: #000;
padding: 20px;
}
.frontpage h2 {
margin: 0.2em 0;
}
.frontpage h3 {
margin: 0.2em 0;
}
.frontpage p {
margin: 0.2em 0 !important;
}
.postlist {
padding: 0;
margin: 0;
}
.postlist li {
list-style-type: none;
}
.postlist a {
color: #303030;
border-bottom: 1px dotted #303030;
text-decoration: none;
}
.postlist img {
float: left;
margin-right: 5px;
margin-bottom: 5px;
clear: both;
}
.postlist a:hover {
color: #3F8ED8;
border-bottom: 1px dotted #3F8ED8;
text-decoration: none;
}
.postlist td {
border: 0px;
padding: 5px;
}
#contact {
margin-left: 0px;
}
#contact li {
list-style: none;
margin: 5px 0 !important;
}
.projtable {
width: 100%;
margin: 0px;
padding: 0px;
}
.projtable td {
padding-left: 0px;
vertical-align: top;
border: 0px;
padding-top: 0px;
}
.projtable th {
padding-left: 0px;
vertical-align: top;
border: 0px;
text-align: left;
padding-top: 0px;
}
.hidden {
display: none;
}

120
doc-src/04-syntax.css Normal file
View File

@ -0,0 +1,120 @@
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #808080 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
.grokdoc { background: #f8f8f8; }
.grokdoc .c { color: #408080; font-style: italic } /* Comment */
.grokdoc .err { border: 1px solid #FF0000 } /* Error */
.grokdoc .k { color: #008000; font-weight: bold } /* Keyword */
.grokdoc .o { color: #666666 } /* Operator */
.grokdoc .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.grokdoc .cp { color: #BC7A00 } /* Comment.Preproc */
.grokdoc .c1 { color: #408080; font-style: italic } /* Comment.Single */
.grokdoc .cs { color: #408080; font-style: italic } /* Comment.Special */
.grokdoc .gd { color: #A00000 } /* Generic.Deleted */
.grokdoc .ge { font-style: italic } /* Generic.Emph */
.grokdoc .gr { color: #FF0000 } /* Generic.Error */
.grokdoc .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.grokdoc .gi { color: #00A000 } /* Generic.Inserted */
.grokdoc .go { color: #808080 } /* Generic.Output */
.grokdoc .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.grokdoc .gs { font-weight: bold } /* Generic.Strong */
.grokdoc .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.grokdoc .gt { color: #0040D0 } /* Generic.Traceback */
.grokdoc .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.grokdoc .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.grokdoc .kp { color: #008000 } /* Keyword.Pseudo */
.grokdoc .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.grokdoc .kt { color: #B00040 } /* Keyword.Type */
.grokdoc .m { color: #666666 } /* Literal.Number */
.grokdoc .s { color: #BA2121 } /* Literal.String */
.grokdoc .na { color: #7D9029 } /* Name.Attribute */
.grokdoc .nb { color: #008000 } /* Name.Builtin */
.grokdoc .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.grokdoc .no { color: #880000 } /* Name.Constant */
.grokdoc .nd { color: #AA22FF } /* Name.Decorator */
.grokdoc .ni { color: #999999; font-weight: bold } /* Name.Entity */
.grokdoc .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.grokdoc .nf { color: #0000FF } /* Name.Function */
.grokdoc .nl { color: #A0A000 } /* Name.Label */
.grokdoc .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.grokdoc .nt { color: #008000; font-weight: bold } /* Name.Tag */
.grokdoc .nv { color: #19177C } /* Name.Variable */
.grokdoc .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.grokdoc .w { color: #bbbbbb } /* Text.Whitespace */
.grokdoc .mf { color: #666666 } /* Literal.Number.Float */
.grokdoc .mh { color: #666666 } /* Literal.Number.Hex */
.grokdoc .mi { color: #666666 } /* Literal.Number.Integer */
.grokdoc .mo { color: #666666 } /* Literal.Number.Oct */
.grokdoc .sb { color: #BA2121 } /* Literal.String.Backtick */
.grokdoc .sc { color: #BA2121 } /* Literal.String.Char */
.grokdoc .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.grokdoc .s2 { color: #BA2121 } /* Literal.String.Double */
.grokdoc .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.grokdoc .sh { color: #BA2121 } /* Literal.String.Heredoc */
.grokdoc .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.grokdoc .sx { color: #008000 } /* Literal.String.Other */
.grokdoc .sr { color: #BB6688 } /* Literal.String.Regex */
.grokdoc .s1 { color: #BA2121 } /* Literal.String.Single */
.grokdoc .ss { color: #19177C } /* Literal.String.Symbol */
.grokdoc .bp { color: #008000 } /* Name.Builtin.Pseudo */
.grokdoc .vc { color: #19177C } /* Name.Variable.Class */
.grokdoc .vg { color: #19177C } /* Name.Variable.Global */
.grokdoc .vi { color: #19177C } /* Name.Variable.Instance */
.grokdoc .il { color: #666666 } /* Literal.Number.Integer.Long */

66
doc-src/_layout_full.html Normal file
View File

@ -0,0 +1,66 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>@!pageTitle!@</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
$!header!$
<style type="text/css">
body {
padding-top: 60px;
padding-bottom: 40px;
}
</style>
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="@!top!@/index.html">pathod</a>
<div class="nav-collapse">
<ul class="nav">
<li $!'class=active' if section=="index" else ""!$><a href="@!top!@/index.html">overview</a></li>
<li
$!'class="dropdown active"' if section=="docs" else 'class="dropdown"'!$>
<a class="dropdown-toggle" data-toggle="dropdown" href="@!top!@/docs.html">
docs
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="@!top!@/index.html">pathod</a></li>
<li><a href="@!top!@/index.html">pathoc</a></li>
<li><a href="@!top!@/index.html">libpathod.test</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="span12">
$!body!$
</div>
</div>
<hr>
<footer>
<p>&copy; Aldo Cortesi 2012</p>
</footer>
</div>
</body>
</html>

5
doc-src/docs.html Normal file
View File

@ -0,0 +1,5 @@
Test.

31
doc-src/index.html Normal file
View File

@ -0,0 +1,31 @@
<div class="hero-unit">
<h1>Tools for testing and torturing HTTP clients, servers and proxies.</h1>
</div>
<div class="row">
<div class="span4">
<div class="well">
<h1> pathod </h1>
A pathological web daemon.
</div>
</div>
<div class="span4">
<div class="well">
<h1> pathoc </h1>
A perverse HTTP client.
</div>
</div>
<div class="span4">
<div class="well">
<h1> libpathod.test </h1>
Use pathod and pathoc in your unit tests.
</div>
</div>
</div>

18
doc-src/index.py Normal file
View File

@ -0,0 +1,18 @@
from countershape import widgets, layout, html, blog, markup, sitemap
from countershape.doc import *
ns.foot = "Copyright 2012 Aldo Cortesi"
this.markup = markup.Markdown(extras=dict(footnotes=True))
this.layout = layout.FileLayout("_layout_full.html")
this.titlePrefix = ""
this.site_url = "http://corte.si"
pages = [
Page("index.html", "overview", namespace=dict(section="index")),
Page("docs.html", "docs", namespace=dict(section="docs")),
sitemap.Sitemap("sitemap.xml")
]
ns.sidebar = widgets.SiblingPageIndex(
pages[0],
depth=1,
divclass="sidebarmenu"
)

BIN
doc-src/start_quote.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B