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: clients and servers. The project has three components:
- __pathod__, an pathological HTTP daemon. - __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. - __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. 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 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 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: 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 200:b@1m:p10,10:p20,10:d5000
Features ## Features
========
#### hKEY=VALUE #### 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. offset just after all data has been sent.
Value Specifiers
================
## Value Specifiers
There are three different flavours of value specification. There are three different flavours of value specification.
@ -240,7 +243,7 @@ Supported data types are:
bytes bytes
# API ## API
__pathod__ exposes a simple API, intended to make it possible to drive and __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. 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. A POST to this URL clears the log buffer.
# Installing # Installing
If you already have __pip__ on your system, installing __pathod__ and its If you already have __pip__ on your system, installing __pathod__ and its
@ -307,5 +313,6 @@ dependencies is dead simple:
pip install pathod pip install pathod
The project uses the __nose__ unit testing framework, which you can get here: 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