/usr/share/doc/mapproxy/html/development.html is in mapproxy-doc 1.9.0-3+deb9u1.
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 | <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Development — MapProxy 1.8.2a0 Docs</title>
<link rel="stylesheet" href="_static/basic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/bootstrap-3.3.6/css/bootstrap.min.css" type="text/css" />
<link rel="stylesheet" href="_static/bootstrap-3.3.6/css/bootstrap-theme.min.css" type="text/css" />
<link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" />
<link rel="stylesheet" href="_static/mapproxy.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.8.2a0',
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>
<script type="text/javascript" src="_static/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="_static/js/jquery-fix.js"></script>
<script type="text/javascript" src="_static/bootstrap-3.3.6/js/bootstrap.min.js"></script>
<script type="text/javascript" src="_static/bootstrap-sphinx.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="top" title="MapProxy 1.8.2a0 Docs" href="index.html" />
<link rel="next" title="MapProxy 2.0" href="mapproxy_2.html" />
<link rel="prev" title="Decorate Image" href="decorate_img.html" />
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'>
<meta name="apple-mobile-web-app-capable" content="yes">
</head>
<body role="document">
<div id="navbar" class="navbar navbar-default ">
<div class="container">
<div class="navbar-header">
<!-- .btn-navbar is used as the toggle for collapsed navbar content -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="index.html" class="pull-left"><img src="_static/logo.png" height="50">
</a>
<a class="navbar-brand" href="index.html">
<span>
MapProxy</span>
<span>1.8.2a0</span>
</a>
</div>
<div class="collapse navbar-collapse nav-collapse">
<form class="navbar-form navbar-right" action="search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search" />
</div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-3">
<div id="sidebar" class="bs-sidenav" role="complementary"><ul class="current">
<li class="toctree-l1"><a class="reference internal" href="install.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_windows.html">Installation on Windows</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_osgeo4w.html">Installation on OSGeo4W</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="services.html">Services</a></li>
<li class="toctree-l1"><a class="reference internal" href="sources.html">Sources</a></li>
<li class="toctree-l1"><a class="reference internal" href="caches.html">Caches</a></li>
<li class="toctree-l1"><a class="reference internal" href="seed.html">Seeding</a></li>
<li class="toctree-l1"><a class="reference internal" href="coverages.html">Coverages</a></li>
<li class="toctree-l1"><a class="reference internal" href="mapproxy_util.html">mapproxy-util</a></li>
<li class="toctree-l1"><a class="reference internal" href="mapproxy_util_autoconfig.html">mapproxy-util autoconfig</a></li>
<li class="toctree-l1"><a class="reference internal" href="deployment.html">Deployment</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration_examples.html">Configuration examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="inspire.html">INSPIRE View Service</a></li>
<li class="toctree-l1"><a class="reference internal" href="labeling.html">WMS Labeling</a></li>
<li class="toctree-l1"><a class="reference internal" href="auth.html">Authentication and Authorization</a></li>
<li class="toctree-l1"><a class="reference internal" href="decorate_img.html">Decorate Image</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Development</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#source">Source</a></li>
<li class="toctree-l2"><a class="reference internal" href="#documentation">Documentation</a></li>
<li class="toctree-l2"><a class="reference internal" href="#issue-tracker">Issue Tracker</a></li>
<li class="toctree-l2"><a class="reference internal" href="#tests">Tests</a></li>
<li class="toctree-l2"><a class="reference internal" href="#communication">Communication</a></li>
<li class="toctree-l2"><a class="reference internal" href="#tips-on-development">Tips on development</a></li>
<li class="toctree-l2"><a class="reference internal" href="#coding-style-guide">Coding Style Guide</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="mapproxy_2.html">MapProxy 2.0</a></li>
</ul>
</div>
</div>
<div class="col-md-8">
<div class="section" id="development">
<h1>Development<a class="headerlink" href="#development" title="Permalink to this headline">¶</a></h1>
<p>You want to improve MapProxy, found a bug and want to fix it? Great! This document points you to some helpful information.</p>
<div class="section" id="source">
<h2>Source<a class="headerlink" href="#source" title="Permalink to this headline">¶</a></h2>
<p>Releases are available from the <a class="reference external" href="http://pypi.python.org/pypi/MapProxy">PyPI project page of MapProxy</a>. There is also <a class="reference external" href="http://pypi.python.org/packages/source/M/MapProxy/">an archive of all releases</a>.</p>
<p>MapProxy uses <a class="reference external" href="http://git-scm.com/">Git</a> as a source control management tool. If you are new to distributed SCMs or Git we recommend to read <a class="reference external" href="http://git-scm.com/book">Pro Git</a>.</p>
<p>The main (authoritative) repository is hosted at <a class="reference external" href="http://github.com/mapproxy/mapproxy">http://github.com/mapproxy/mapproxy</a></p>
<p>To get a copy of the repository call:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">git</span> <span class="n">clone</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">github</span><span class="o">.</span><span class="n">com</span><span class="o">/</span><span class="n">mapproxy</span><span class="o">/</span><span class="n">mapproxy</span>
</pre></div>
</div>
<p>If you want to contribute a patch, please consider <a class="reference external" href="http://help.github.com/fork-a-repo/">creating a “fork”</a> instead. This makes life easier for all of us.</p>
</div>
<div class="section" id="documentation">
<h2>Documentation<a class="headerlink" href="#documentation" title="Permalink to this headline">¶</a></h2>
<p>This is the documentation you are reading right now. The raw files can be found in <code class="docutils literal"><span class="pre">doc/</span></code>. The HTML version user documentation is build with <a class="reference external" href="http://sphinx.pocoo.org/">Sphinx</a>. To rebuild this documentation install Sphinx with <code class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">sphinx</span> <span class="pre">sphinx-bootstrap-theme</span></code> and call <code class="docutils literal"><span class="pre">python</span> <span class="pre">setup.py</span> <span class="pre">build_sphinx</span></code>. The output appears in <code class="docutils literal"><span class="pre">build/sphinx/html</span></code>. The latest documentation can be found at <code class="docutils literal"><span class="pre">http://mapproxy.org/docs/lates/</span></code>.</p>
</div>
<div class="section" id="issue-tracker">
<h2>Issue Tracker<a class="headerlink" href="#issue-tracker" title="Permalink to this headline">¶</a></h2>
<p>We are using <a class="reference external" href="https://github.com/mapproxy/mapproxy/issues">the issue tracker at GitHub</a> to manage all bug reports, enhancements and new feature requests for MapProxy. Go ahead and <a class="reference external" href="https://github.com/mapproxy/mapproxy/issues/new">create new tickets</a>. Feel free to post to the <a class="reference internal" href="#mailing-list">mailing list</a> first, if you are not sure if you really found a bug or if a feature request is in the scope of MapProxy.</p>
</div>
<div class="section" id="tests">
<h2>Tests<a class="headerlink" href="#tests" title="Permalink to this headline">¶</a></h2>
<p>MapProxy contains lots of automatic tests. If you don’t count in the <code class="docutils literal"><span class="pre">mapproxy-seed</span></code>-tool and the WSGI application, the test coverage is around 95%. We want to keep this number high, so all new developments should include some tests.</p>
<p>MapProxy uses <a class="reference external" href="http://somethingaboutorange.com/mrl/projects/nose/">Nose</a> as a test loader and runner. To install Nose and all further test dependencies call:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="o">-</span><span class="n">r</span> <span class="n">requirements</span><span class="o">-</span><span class="n">tests</span><span class="o">.</span><span class="n">txt</span>
</pre></div>
</div>
<p>To run the actual tests call:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">nosetests</span>
</pre></div>
</div>
<div class="section" id="available-tests">
<h3>Available tests<a class="headerlink" href="#available-tests" title="Permalink to this headline">¶</a></h3>
<p>We distinguish between doctests, unit, system tests.</p>
<div class="section" id="doctests">
<h4>Doctests<a class="headerlink" href="#doctests" title="Permalink to this headline">¶</a></h4>
<p><a class="reference external" href="http://docs.python.org/library/doctest.html">Doctest</a> are embedded into the source documentation and are great for documenting small independent functions or methods. You will find lots of doctest in the <code class="docutils literal"><span class="pre">mapproxy.core.srs</span></code> module.</p>
</div>
<div class="section" id="unit-tests">
<h4>Unit tests<a class="headerlink" href="#unit-tests" title="Permalink to this headline">¶</a></h4>
<p>Tests that are a little bit more complex, eg. that need some setup or state, are put into <code class="docutils literal"><span class="pre">mapproxy.tests.unit</span></code>. To be recognized as a test all functions and classes should be prefixed with <code class="docutils literal"><span class="pre">test_</span></code> or <code class="docutils literal"><span class="pre">Test</span></code>. Refer to the existing tests for examples.</p>
</div>
<div class="section" id="system-tests">
<h4>System tests<a class="headerlink" href="#system-tests" title="Permalink to this headline">¶</a></h4>
<p>We have some tests that will start the whole MapProxy application, issues requests and does some assertions on the responses. All XML responses will be validated against the schemas in this tests. These test are located in <code class="docutils literal"><span class="pre">mapproxy.tests.system</span></code>.</p>
</div>
</div>
</div>
<div class="section" id="communication">
<h2>Communication<a class="headerlink" href="#communication" title="Permalink to this headline">¶</a></h2>
<div class="section" id="mailing-list">
<h3>Mailing list<a class="headerlink" href="#mailing-list" title="Permalink to this headline">¶</a></h3>
<p>The preferred medium for all MapProxy related discussions is our mailing list <a class="reference external" href="mailto:mapproxy%40lists.osgeo.org">mapproxy<span>@</span>lists<span>.</span>osgeo<span>.</span>org</a> You must <a class="reference external" href="http://lists.osgeo.org/mailman/listinfo/mapproxy">subscribe</a> to the list before you can write. The archive is <a class="reference external" href="http://lists.osgeo.org/pipermail/mapproxy/">available here</a>.</p>
</div>
<div class="section" id="irc">
<h3>IRC<a class="headerlink" href="#irc" title="Permalink to this headline">¶</a></h3>
<p>There is also a channel on <a class="reference external" href="http://freenode.net/">Freenode</a>: <code class="docutils literal"><span class="pre">#mapproxy</span></code>. It is a quiet place but you might find someone during business hours (central european time).</p>
</div>
</div>
<div class="section" id="tips-on-development">
<h2>Tips on development<a class="headerlink" href="#tips-on-development" title="Permalink to this headline">¶</a></h2>
<p>You are using <cite>virtualenv</cite> as described in <a class="reference internal" href="install.html"><span class="doc">Installation</span></a>, right?</p>
<p>Before you start hacking on MapProxy you should install it in development-mode. In the root directory of MapProxy call <code class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">-e</span> <span class="pre">./</span></code>. Instead of installing and thus copying MapProxy into your <cite>virtualenv</cite>, this will just link to your source directory. If you now start MapProxy, the source from your MapProxy directory will be used. Any change you do in the code will be available if you restart MapProxy. If you use the <code class="docutils literal"><span class="pre">mapproxy-util</span> <span class="pre">serve-develop</span></code> command, any change in the source will issue a reload of the MapProxy server.</p>
</div>
<div class="section" id="coding-style-guide">
<h2>Coding Style Guide<a class="headerlink" href="#coding-style-guide" title="Permalink to this headline">¶</a></h2>
<p>MapProxy generally follows the <a class="reference external" href="http://www.python.org/dev/peps/pep-0008/">Style Guide for Python Code</a>. With the only exception that we permit a line width of about 90 characters.</p>
</div>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="container">
<p class="pull-right">
<a href="#">Back to top</a>
</p>
<p>
© Copyright Oliver Tonnhofer, Omniscale, <a href="http://mapproxy.org/about">Legal</a>
<br/>
Last updated on 2018-01-07
<br/>
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.9.
</p>
</div>
</footer>
</body>
</html>
|