/usr/share/doc/python-paver/html/pavement.html is in python-paver 1.2.1-1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pavement.py in depth — Paver 1.2.1 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.2.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="Paver 1.2.1 documentation" href="index.html" />
<link rel="next" title="The Paver Standard Library" href="paverstdlib.html" />
<link rel="prev" title="Getting Started with Paver" href="getting_started.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="paverstdlib.html" title="The Paver Standard Library"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="getting_started.html" title="Getting Started with Paver"
accesskey="P">previous</a> |</li>
<li><a href="index.html">Paver 1.2.1 documentation</a> »</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="pavement-py-in-depth">
<span id="pavement"></span><h1>pavement.py in depth<a class="headerlink" href="#pavement-py-in-depth" title="Permalink to this headline">¶</a></h1>
<p>Paver is meant to be a hybrid declarative/imperative system for getting stuff done.
You declare things via the options in pavement.py. And, in fact, many projects
can get away with nothing but options in pavement.py. Consider, for example,
an early version of Paver’s own pavement file:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">paver.easy</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">import</span> <span class="nn">paver.doctools</span>
<span class="n">options</span><span class="p">(</span>
<span class="n">setup</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s">'paver'</span><span class="p">,</span>
<span class="n">version</span><span class="o">=</span><span class="s">"0.3"</span><span class="p">,</span>
<span class="n">description</span><span class="o">=</span><span class="s">'Python build tool'</span><span class="p">,</span>
<span class="n">author</span><span class="o">=</span><span class="s">'Kevin Dangoor'</span><span class="p">,</span>
<span class="n">author_email</span><span class="o">=</span><span class="s">'dangoor+paver@gmail.com'</span><span class="p">,</span>
<span class="c">#url='',</span>
<span class="n">packages</span><span class="o">=</span><span class="p">[</span><span class="s">'paver'</span><span class="p">],</span>
<span class="n">package_data</span><span class="o">=</span><span class="n">setuputils</span><span class="o">.</span><span class="n">find_package_data</span><span class="p">(</span><span class="s">"paver"</span><span class="p">,</span> <span class="n">package</span><span class="o">=</span><span class="s">"paver"</span><span class="p">,</span>
<span class="n">only_in_packages</span><span class="o">=</span><span class="bp">False</span><span class="p">),</span>
<span class="n">install_requires</span><span class="o">=</span><span class="p">[],</span>
<span class="n">test_suite</span><span class="o">=</span><span class="s">'nose.collector'</span><span class="p">,</span>
<span class="n">zip_safe</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
<span class="n">entry_points</span><span class="o">=</span><span class="s">"""</span>
<span class="s"> [console_scripts]</span>
<span class="s"> paver = paver.command:main</span>
<span class="s"> """</span><span class="p">,</span>
<span class="p">),</span>
<span class="n">sphinx</span><span class="o">=</span><span class="n">Bunch</span><span class="p">(</span>
<span class="n">builddir</span><span class="o">=</span><span class="s">"build"</span><span class="p">,</span>
<span class="n">sourcedir</span><span class="o">=</span><span class="s">"source"</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="nd">@task</span>
<span class="nd">@needs</span><span class="p">(</span><span class="s">'paver.doctools.html'</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">html</span><span class="p">():</span>
<span class="sd">"""Build Paver's documentation and install it into paver/docs"""</span>
<span class="n">builtdocs</span> <span class="o">=</span> <span class="n">path</span><span class="p">(</span><span class="s">"docs"</span><span class="p">)</span> <span class="o">/</span> <span class="n">options</span><span class="o">.</span><span class="n">sphinx</span><span class="o">.</span><span class="n">builddir</span> <span class="o">/</span> <span class="s">"html"</span>
<span class="n">destdir</span> <span class="o">=</span> <span class="n">path</span><span class="p">(</span><span class="s">"paver"</span><span class="p">)</span> <span class="o">/</span> <span class="s">"docs"</span>
<span class="n">destdir</span><span class="o">.</span><span class="n">rmtree</span><span class="p">()</span>
<span class="n">builtdocs</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">destdir</span><span class="p">)</span>
</pre></div>
</div>
<p>This file has both declarative and imperative aspects. The options define
enough information for distutils, setuptools and Sphinx to do their
respective jobs. This would function just fine without requiring you
to define any tasks.</p>
<p>However, for Paver’s ‘paverdoc’ built-in task to work, we need
Sphinx’s generated HTML to end up inside of Paver’s package tree.
So, we override the html task to move the generated files.</p>
<div class="section" id="defining-tasks">
<h2>Defining Tasks<a class="headerlink" href="#defining-tasks" title="Permalink to this headline">¶</a></h2>
<p>Tasks are just simple functions. You designate a function as being a
task by using the @task decorator.</p>
<p>You can also specify that a task depends on another task running
first with the @needs decorator. A given task will only run once
as a dependency for other tasks.</p>
</div>
<div class="section" id="manually-calling-tasks">
<h2>Manually Calling Tasks<a class="headerlink" href="#manually-calling-tasks" title="Permalink to this headline">¶</a></h2>
<p>Sometimes, you need to do something <cite>before</cite> running another task, so
the @needs decorator doesn’t quite do the job.</p>
<p>Of course, tasks are just Python functions. So, you can just call the
other task like a function!</p>
</div>
<div class="section" id="how-task-names-work">
<h2>How Task Names Work<a class="headerlink" href="#how-task-names-work" title="Permalink to this headline">¶</a></h2>
<p>Tasks have both a long name and a short name. The short name is just
the name of the function. The long name is the fully qualified Python
name for the function object.</p>
<p>For example, the Sphinx support includes a task function called “html”.
That task’s long name is “paver.doctools.html”.</p>
<p>If you <tt class="docutils literal"><span class="pre">`import</span> <span class="pre">paver.doctools`</span></tt> in your pavement.py, you’ll be able
to use either name to refer to that task.</p>
<p>Tasks that you define in your pavement are always available by their
short names. Tasks defined elsewhere are available by their short names
unless there is a conflict where two tasks are trying to use the same
short name.</p>
<p>Tasks are always available unambiguously via their long names.</p>
</div>
<div class="section" id="task-parameters">
<h2>Task Parameters<a class="headerlink" href="#task-parameters" title="Permalink to this headline">¶</a></h2>
<p>Tasks don’t have to take any parameters. However, Paver allows you to work
in a fairly clean, globals-free manner(*). Generally speaking, the easiest way
to work with paver is to just do <tt class="docutils literal"><span class="pre">from</span> <span class="pre">paver.easy</span> <span class="pre">import</span> <span class="pre">*</span></tt>, but if you
don’t like having so much in your namespace, you can have any attribute
from tasks.environment sent into your function. For example:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
<span class="k">def</span> <span class="nf">my_task</span><span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">info</span><span class="p">):</span>
<span class="c"># this task will get the options and the "info" logging function</span>
<span class="c"># sent in</span>
<span class="k">pass</span>
</pre></div>
</div>
<p>(*): well, there <em>is</em> one global: tasks.environment.</p>
</div>
<div class="section" id="command-line-arguments">
<h2>Command Line Arguments<a class="headerlink" href="#command-line-arguments" title="Permalink to this headline">¶</a></h2>
<p>Tasks can specify that they accept command line arguments, via three
other decorators. The <tt class="docutils literal"><span class="pre">@consume_args</span></tt> decorator tells Paver that <em>all</em>
command line arguments following this task’s name should be passed to the
task. If you’d like specifying a number of consumed arguments, let use
<tt class="docutils literal"><span class="pre">@consume_nargs</span></tt>. This later is similar by default to the previous,
but alos accept as an <tt class="docutils literal"><span class="pre">int</span></tt> argument the number of command line arguments
the decorated task will consume.
You can either look up the arguments in <tt class="docutils literal"><span class="pre">options.args</span></tt>, or just
specify args as a parameter to your function. For example, Paver’s “help”
task is declared like this:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
<span class="nd">@consume_args</span>
<span class="k">def</span> <span class="nf">help</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">help_function</span><span class="p">):</span>
<span class="k">pass</span>
<span class="nd">@task</span>
<span class="nd">@consume_nargs</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">mytask</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
<span class="k">pass</span>
</pre></div>
</div>
<p>The “args” parameter is just an attribute on tasks.environment (as is
help_function), so it is passed in using the same rules described in the
previous section.</p>
<div class="versionadded">
<p><span>New in version 1.1.0: </span><tt class="docutils literal"><span class="pre">@consume_nargs</span></tt> decorator superseeds <tt class="docutils literal"><span class="pre">@consume_args</span></tt>,
and optionally accepts an <tt class="docutils literal"><span class="pre">int</span></tt> as argument: the number of command line
argument the decorated task will consume.</p>
</div>
<p>More generally, you’re not trying to consume all of the remainder of the
command line but to just accept certain specific arguments. That’s what
the cmdopts decorator is for:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
<span class="nd">@cmdopts</span><span class="p">([</span>
<span class="p">(</span><span class="s">'username='</span><span class="p">,</span> <span class="s">'u'</span><span class="p">,</span> <span class="s">'Username to use when logging in to the servers'</span><span class="p">)</span>
<span class="p">])</span>
<span class="k">def</span> <span class="nf">deploy</span><span class="p">(</span><span class="n">options</span><span class="p">):</span>
<span class="k">pass</span>
</pre></div>
</div>
<p>@cmdopts takes a list of tuples, each with long option name, short option name
and help text. If there’s an “=” after the long option name, that means
that the option takes a parameter. Otherwise, the option is assumed to be
boolean. The command line options set in this manner are all added to
the <tt class="docutils literal"><span class="pre">options</span></tt> under a namespace matching the name of the task. In the
case above, options.deploy.username would be set if the user ran
paver deploy -u my-user-name. Note that an equivalent command line would be
paver deploy.username=my-user-name deploy</p>
<p>For fine-tuning, you may add <tt class="docutils literal"><span class="pre">optparse.Option</span></tt> instances:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="nd">@tasks.task</span>
<span class="nd">@tasks.cmdopts</span><span class="p">([</span>
<span class="n">make_option</span><span class="p">(</span><span class="s">"-f"</span><span class="p">,</span> <span class="s">"--foo"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">"foo"</span><span class="p">)</span>
<span class="p">])</span>
<span class="k">def</span> <span class="nf">foo_instead_of_spam_and_eggs</span><span class="p">(</span><span class="n">options</span><span class="p">):</span>
<span class="k">pass</span>
</pre></div>
</div>
<p>You may share <tt class="docutils literal"><span class="pre">@cmdopts</span></tt> between tasks. To do that and to avoid confusion,
You have to add share_with argument:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
<span class="nd">@cmdopts</span><span class="p">([</span>
<span class="p">(</span><span class="s">'username='</span><span class="p">,</span> <span class="s">'u'</span><span class="p">,</span> <span class="s">'Username to use when logging in to the servers'</span><span class="p">)</span>
<span class="p">])</span>
<span class="k">def</span> <span class="nf">deploy_to_linux</span><span class="p">(</span><span class="n">options</span><span class="p">):</span>
<span class="k">pass</span>
<span class="nd">@task</span>
<span class="nd">@needs</span><span class="p">([</span><span class="s">'deploy_to_linux'</span><span class="p">])</span>
<span class="nd">@cmdopts</span><span class="p">([</span>
<span class="p">(</span><span class="s">'username='</span><span class="p">,</span> <span class="s">'u'</span><span class="p">,</span> <span class="s">'Username to use when logging in to the servers'</span><span class="p">)</span>
<span class="p">],</span> <span class="n">share_with</span><span class="o">=</span><span class="p">[</span><span class="s">'deploy_to_linux'</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">deploy</span><span class="p">(</span><span class="n">options</span><span class="p">):</span>
<span class="k">pass</span>
</pre></div>
</div>
<p>For sharing, following must be fullfilled:</p>
<ul class="simple">
<li>Both long and short option names must be same</li>
<li><tt class="docutils literal"><span class="pre">share_with</span></tt> argument must be specified on top-level task</li>
</ul>
<p>Otherwise, <tt class="docutils literal"><span class="pre">PavementError</span></tt> is raised.</p>
</div>
<div class="section" id="hiding-tasks">
<h2>Hiding tasks<a class="headerlink" href="#hiding-tasks" title="Permalink to this headline">¶</a></h2>
<p>Some tasks may only exist as a shared dependency between other tasks and may not
make sense to be called directly.</p>
<p>There is no way to provide that, however you can hide them from <tt class="docutils literal"><span class="pre">paver</span> <span class="pre">help</span></tt>
to reduce noise. Just decorate function with <tt class="docutils literal"><span class="pre">@no_help</span></tt> decorator:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
<span class="nd">@no_help</span>
<span class="k">def</span> <span class="nf">hidden_dependency</span><span class="p">():</span>
<span class="k">pass</span>
</pre></div>
</div>
<p>Of course, this should not be used usually. If task is not to be called at all,
why not just make them a g’old function?</p>
</div>
<div class="section" id="more-complex-dependencies">
<h2>More complex dependencies<a class="headerlink" href="#more-complex-dependencies" title="Permalink to this headline">¶</a></h2>
<p><tt class="docutils literal"><span class="pre">@needs</span></tt> might not cover all your needs. For example, depending on argument
or environment, you might decide to call an appropriate task in the middle of
another one.</p>
<p>There are two key options for fixing that:</p>
<ol class="arabic">
<li><p class="first"><tt class="docutils literal"><span class="pre">@might_call</span></tt> decorator, which indicates that task might invoke <tt class="docutils literal"><span class="pre">call_task</span></tt> on one or more of the specified tasks. This allows you to provide command line options to task that might be called (it is inserted in dependency chain):</p>
<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
<span class="nd">@cmdopts</span><span class="p">([</span>
<span class="p">(</span><span class="s">'username='</span><span class="p">,</span> <span class="s">'u'</span><span class="p">,</span> <span class="s">'Whom to greet'</span><span class="p">)</span>
<span class="p">],</span> <span class="n">share_with</span><span class="o">=</span><span class="p">[</span><span class="s">'deploy_to_linux'</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">say_hello</span><span class="p">(</span><span class="n">options</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="s">"username"</span><span class="p">):</span>
<span class="k">print</span> <span class="s">'SPAM'</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">print</span> <span class="s">'Hello, my dear user </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">options</span><span class="o">.</span><span class="n">username</span>
<span class="nd">@task</span>
<span class="nd">@might_call</span><span class="p">(</span><span class="s">'say_hello'</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">greet_user</span><span class="p">(</span><span class="n">options</span><span class="p">):</span>
<span class="n">setup_environment</span><span class="p">()</span>
<span class="n">call_task</span><span class="p">(</span><span class="s">'say_hello'</span><span class="p">)</span>
<span class="n">do_cleanup</span><span class="p">()</span>
</pre></div>
</div>
</li>
<li><p class="first">Providing options and arguments to another tasks directly.
Options are provided with final assigned value:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
<span class="nd">@cmdopts</span><span class="p">([</span>
<span class="p">(</span><span class="s">'long-username='</span><span class="p">,</span> <span class="s">'u'</span><span class="p">,</span> <span class="s">'Whom to greet'</span><span class="p">)</span>
<span class="p">],</span> <span class="n">share_with</span><span class="o">=</span><span class="p">[</span><span class="s">'deploy_to_linux'</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">say_hello</span><span class="p">(</span><span class="n">options</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="s">"username"</span><span class="p">):</span>
<span class="k">print</span> <span class="s">'SPAM'</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">print</span> <span class="s">'Hello, my dear user </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">options</span><span class="o">.</span><span class="n">long_username</span>
<span class="nd">@task</span>
<span class="k">def</span> <span class="nf">greet_user</span><span class="p">(</span><span class="n">options</span><span class="p">):</span>
<span class="n">call_task</span><span class="p">(</span><span class="s">'say_hello'</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="p">{</span>
<span class="s">'long_username'</span> <span class="p">:</span> <span class="s">'Kitty'</span>
<span class="p">})</span>
</pre></div>
</div>
</li>
</ol>
<p>Console arguments (args) should be passed as in console:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
<span class="nd">@consume_args</span>
<span class="k">def</span> <span class="nf">say_hello</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
<span class="k">print</span> <span class="s">'Hello to ALL the users: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="s">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
<span class="nd">@task</span>
<span class="k">def</span> <span class="nf">greet_user</span><span class="p">(</span><span class="n">options</span><span class="p">):</span>
<span class="n">call_task</span><span class="p">(</span><span class="s">'say_hello'</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
<span class="s">'Arthur Pewtey'</span><span class="p">,</span>
<span class="s">'The Reverend Arthur Belling'</span><span class="p">,</span>
<span class="p">])</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">pavement.py in depth</a><ul>
<li><a class="reference internal" href="#defining-tasks">Defining Tasks</a></li>
<li><a class="reference internal" href="#manually-calling-tasks">Manually Calling Tasks</a></li>
<li><a class="reference internal" href="#how-task-names-work">How Task Names Work</a></li>
<li><a class="reference internal" href="#task-parameters">Task Parameters</a></li>
<li><a class="reference internal" href="#command-line-arguments">Command Line Arguments</a></li>
<li><a class="reference internal" href="#hiding-tasks">Hiding tasks</a></li>
<li><a class="reference internal" href="#more-complex-dependencies">More complex dependencies</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="getting_started.html"
title="previous chapter">Getting Started with Paver</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="paverstdlib.html"
title="next chapter">The Paver Standard Library</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/pavement.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="paverstdlib.html" title="The Paver Standard Library"
>next</a> |</li>
<li class="right" >
<a href="getting_started.html" title="Getting Started with Paver"
>previous</a> |</li>
<li><a href="index.html">Paver 1.2.1 documentation</a> »</li>
</ul>
</div>
<div class="footer">
© Copyright 2008, SitePen, Inc..
Last updated on Jun 02, 2013.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>
</html>
|