diff options
-rw-r--r-- | libpathod/rparse.py | 29 | ||||
-rw-r--r-- | libpathod/templates/docs_lang.html | 299 |
2 files changed, 180 insertions, 148 deletions
diff --git a/libpathod/rparse.py b/libpathod/rparse.py index f81bb1ed..bdce0dd7 100644 --- a/libpathod/rparse.py +++ b/libpathod/rparse.py @@ -96,12 +96,8 @@ DATATYPES = dict( ascii_uppercase = string.ascii_uppercase, digits = string.digits, hexdigits = string.hexdigits, - letters = string.letters, - lowercase = string.lowercase, octdigits = string.octdigits, - printable = string.printable, punctuation = string.punctuation, - uppercase = string.uppercase, whitespace = string.whitespace, ascii = string.printable, bytes = "".join(chr(i) for i in range(256)) @@ -288,6 +284,15 @@ NakedValue = pp.MatchFirst( ) +Offset = pp.MatchFirst( + [ + v_integer, + pp.Literal("r"), + pp.Literal("a") + ] + ) + + class ShortcutContentType: def __init__(self, value): self.value = value @@ -402,13 +407,7 @@ class PauseAt: ] ) e += pp.Literal(",").suppress() - e += pp.MatchFirst( - [ - v_integer, - pp.Literal("r"), - pp.Literal("a"), - ] - ) + e += Offset return e.setParseAction(lambda x: klass(*x)) def accept(self, settings, r): @@ -441,13 +440,7 @@ class InjectAt: @classmethod def expr(klass): e = pp.Literal("i").suppress() - e = e + pp.MatchFirst( - [ - v_integer, - pp.Literal("r"), - pp.Literal("a") - ] - ) + e += Offset e += pp.Literal(",").suppress() e += Value return e.setParseAction(lambda x: klass(*x)) diff --git a/libpathod/templates/docs_lang.html b/libpathod/templates/docs_lang.html index 66b2ca30..6f5f4748 100644 --- a/libpathod/templates/docs_lang.html +++ b/libpathod/templates/docs_lang.html @@ -9,6 +9,7 @@ </div> +<section id="specifying_responses"> <div class="page-header"> <h1>Responses</h1> </div> @@ -17,204 +18,242 @@ <pre class="example">code[MESSAGE]:[colon-separated list of features]</pre></p> - <table class="table table-bordered"> <tbody > <tr> <td> - hKEY=VALUE + h<a href="#valuespec">VALUE</a>=<a href="#valuespec">VALUE</a> </td> <td> - Set a header. Both KEY and VALUE are full <a href=#valuespec>Value Specifiers</a>. + Set a header. </td> </tr> <tr> <td> - bVALUE + b<a href="#valuespec">VALUE</a> </td> <td> - Set the body. VALUE is a <a href=#valuespec>Value - Specifier</a>. When the body is set, pathod will + Set the body. When the body is set, pathod will automatically set the appropriate Content-Length header. </td> </tr> <tr> <td> - cVALUE + c<a href="#valuespec">VALUE</a> </td> <td> - A shortcut for setting the Content-Type header. Equivalent to: - - <pre>h"Content-Type"=VALUE</pre> - + A shortcut for setting the Content-Type header. Equivalent to + h"Content-Type"=VALUE </td> </tr> <tr> <td> - iOFFSET,VALUE + i<a href="#offsetspec">OFFSET</a>,<a href="#valuespec">VALUE</a> </td> <td> - Inject the specified value at the offset. OFFSET can be an - integer, or "r" to generate a random offset or "a" for an - offset just after all data has been sent. + Inject the specified value at the offset. </td> </tr> <tr> <td> - lVALUE + l<a href="#valuespec">VALUE</a> </td> <td> - A shortcut for setting the Location header. Equivalent to: - - <pre>h"Location"=VALUE</pre> - + A shortcut for setting the Location header. Equivalent to + h"Location"=VALUE </td> </tr> - <tr> <td> - dOFFSET + d<a href="#offsetspec">OFFSET</a> </td> <td> - Disconnect after OFFSET bytes. The offset can also be "r", in which case pathod - will disconnect at a random point in the response. + Disconnect after OFFSET bytes. </td> </tr> <tr> <td> - pSECONDS,OFFSET + pSECONDS,<a href="#offsetspec">OFFSET</a> </td> <td> - Pause for SECONDS seconds after OFFSET bytes. SECONDS can also be "f" to pause - forever. OFFSET can also be "r" to generate a random offset, or "a" for an - offset just after all data has been sent. + Pause for SECONDS seconds after OFFSET bytes. SECONDS can + be an integer or "f" to pause forever. </td> </tr> </tbody> </table> +</section> -<div class="page-header"> - <h1>Requests</h1> -</div> - - -<div class="page-header"> - <h1>Executing specs from file</h1> -</div> - - <pre class="example">+./path/to/spec</pre> - - -<div class="page-header"> - <h1>Components</h1> -</div> - - <a id="valuespec"></a> - <h2>VALUEs</h2> - - <h3>Literals</h3> - - <p>Literal values are specified as a quoted strings: </p> - - <pre class="example">"foo"</pre> - - <p>Either single or double quotes are accepted, and quotes can be escaped with - backslashes within the string:</p> - - <pre class="example">'fo\'o'</pre> - - <p>Literal values can contain Python-style backslash escape sequences:</p> - - <pre class="example">'foo\r\nbar'</pre> - - - <h3>Files</h3> - - <p>You can load a value from a specified file path. To do so, you have to specify - a _staticdir_ option to pathod on the command-line, like so: </p> - - <pre class="example">pathod -d ~/myassets</pre> - - <p>All paths are relative paths under this directory. File loads are indicated by - starting the value specifier with the left angle bracket: - - <pre class="example"><my/path</pre></p> - - <p>The path value can also be a quoted string, with the same syntax as literals:</p> - - <pre class="example"><"my/path"</pre> - +<section id="specifying_requests"> + <div class="page-header"> + <h1>Requests</h1> + </div> +</section> - <h3>Generated values</h3> - <p>An @-symbol lead-in specifies that generated data should be used. There are two - components to a generator specification - a size, and a data type. By default - pathod assumes a data type of "bytes". </p> +<section id="specifying_requests"> + <div class="page-header"> + <h1>Executing specs from file</h1> + </div> - <p>Here's a value specifier for generating 100 bytes: - - <pre class="example">@100</pre></p> + <pre class="example">+./path/to/spec</pre> - <p>You can use standard suffixes to indicate larger values. Here, for instance, is - a specifier for generating 100 megabytes:</p> +</section> - <pre class="example">@100m</pre> +<section id="specifying_requests"> + <div class="page-header"> + <h1>Features</h1> + </div> - <p>Data is generated and served efficiently - if you really want to send a - terabyte of data to a client, pathod can do it. The supported suffixes are:</p> + <a id="offsetspec"></a> + <h2>OFFSET</h2> + <p>Offsets are calculated relative to the base message, before any + injections or other transforms are applied. They have 3 flavors:</p> - <table class="table table-bordered"> - <tbody > - <tr> - <td>b</td> <td>1024**0 (bytes)</td> - </tr> - <tr> - <td>k</td> <td>1024**1 (kilobytes)</td> - </tr> - <tr> - <td>m</td> <td>1024**2 (megabytes)</td> - </tr> - <tr> - <td>g</td> <td>1024**3 (gigabytes)</td> - </tr> - <tr> - <td>t</td> <td>1024**4 (terabytes)</td> - </tr> - </tbody> - </table> + <ul> + <li>An integer byte offset </li> + <li><b>r</b> for a random location</li> + <li><b>a</b> for the end of the message</li> + </ul> - <p>Data types are separated from the size specification by a comma. This - specification generates 100mb of ASCII:</p> + <a id="valuespec"></a> + <h2>VALUE</h2> - <pre class="example">@100m,ascii</pre> + <h3>Literals</h3> - <p>Supported data types are:</p> + <p>Literal values are specified as a quoted strings: </p> + <pre class="example">"foo"</pre> - <ul> - <li>ascii</li> - <li>ascii_letters</li> - <li>ascii_lowercase</li> - <li>ascii_uppercase</li> - <li>bytes</li> - <li>digits</li> - <li>hexdigits</li> - <li>letters</li> - <li>lowercase</li> - <li>octdigits</li> - <li>printable</li> - <li>punctuation</li> - <li>uppercase</li> - <li>whitespace</li> - </ul> + <p>Either single or double quotes are accepted, and quotes can be escaped with + backslashes within the string:</p> + <pre class="example">'fo\'o'</pre> + + <p>Literal values can contain Python-style backslash escape sequences:</p> + + <pre class="example">'foo\r\nbar'</pre> + + + <h3>Files</h3> + + <p>You can load a value from a specified file path. To do so, you have to specify + a _staticdir_ option to pathod on the command-line, like so: </p> + + <pre class="example">pathod -d ~/myassets</pre> + + <p>All paths are relative paths under this directory. File loads are indicated by + starting the value specifier with the left angle bracket: + + <pre class="example"><my/path</pre></p> + + <p>The path value can also be a quoted string, with the same syntax as literals:</p> + + <pre class="example"><"my/path"</pre> + + + <h3>Generated values</h3> + + <p>An @-symbol lead-in specifies that generated data should be used. There are two + components to a generator specification - a size, and a data type. By default + pathod assumes a data type of "bytes". </p> + + <p>Here's a value specifier for generating 100 bytes: + + <pre class="example">@100</pre></p> + + <p>You can use standard suffixes to indicate larger values. Here, for instance, is + a specifier for generating 100 megabytes:</p> + + <pre class="example">@100m</pre> + + <p>Data is generated and served efficiently - if you really want to send a + terabyte of data to a client, pathod can do it. The supported suffixes are:</p> + + + <table class="table table-bordered"> + <tbody > + <tr> + <td>b</td> <td>1024**0 (bytes)</td> + </tr> + <tr> + <td>k</td> <td>1024**1 (kilobytes)</td> + </tr> + <tr> + <td>m</td> <td>1024**2 (megabytes)</td> + </tr> + <tr> + <td>g</td> <td>1024**3 (gigabytes)</td> + </tr> + <tr> + <td>t</td> <td>1024**4 (terabytes)</td> + </tr> + </tbody> + </table> + + <p>Data types are separated from the size specification by a comma. This + specification generates 100mb of ASCII:</p> + + <pre class="example">@100m,ascii</pre> + + <p>Supported data types are:</p> + + <table class="table table-bordered"> + <tbody > + <tr> + <td>ascii</td> + <td>All ASCII characters</td> + </tr> + <tr> + <td>ascii_letters</td> + <td>A-Za-z</td> + </tr> + <tr> + <td>ascii_lowercase</td> + <td>a-z</td> + </tr> + <tr> + <td>ascii_uppercase</td> + <td>A-Z</td> + </tr> + <tr> + <td>bytes</td> + <td>All 256 byte values</td> + </tr> + <tr> + <td>digits</td> + <td>0-9</td> + </tr> + <tr> + <td>hexdigits</td> + <td>0-f</td> + </tr> + <tr> + <td>octdigits</td> + <td>0-8</td> + </tr> + <tr> + <td>punctuation</td> + <td> + <pre>!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~</pre> + </td> + </tr> + <tr> + <td>whitespace</td> + <td> + <pre>\t\n\x0b\x0c\r and space</pre> + </td> + </tr> + </tbody> + </table> </section> + {% endblock %} |