Commit 929710d5 authored by Florian Fuchs's avatar Florian Fuchs

* added tests and view code (draft) for list members page

* added developer documentation
* added mock object helpers
* fixed some typos
parent a6eddba9
===========
Development
===========
Testing
=======
All test modules reside in the ``postorius/src/postorius/tests`` directory
and this is where you should put your own tests, too. To make the django test
runner find your tests, make sure to add them to the folder's ``__init__.py``:
::
from postorius.tests import test_utils
from postorius.tests.test_list_members import ListMembersViewTest
from postorius.tests.test_list_settings import ListSettingsViewTest
from postorius.tests.my_own_tests import MyOwnUnitTest
__test__ = {
"Test Utils": test_utils,
"List Members": ListMembersViewTest,
"List Settings": ListSettingsViewTest,
"My Own Test": MyOwnUnitTest,
}
``postorius.*`` imports in test modules
---------------------------------------
When writing unittests make sure that any ``postorius.*`` imports are made
at the test method level and not at the module level. Here's why:
The Postorius documentation (the one you are reading right now) imports some
doctest modules from the test package using Sphinx's autodoc extension. This is
a very nice feature, but in this scenario it has the nasty side effect of
breaking the build process if application code is imported as well (it will
fail to find an environment variable that Django needs to run). This can be
easily prevented by avoiding module level imports of postorius code in the test
modules.
Good:
::
from django.utils import unittest
from mock import patch
class SomeTest(unittest.TestCase):
def test_some_method(self):
from postorius.views import SomeViewClass
foo = 'bar'
Bad:
::
from django.utils import unittest
from mock import patch
from postorius.views import SomeViewClass
class SomeTest(unittest.TestCase):
def test_some_method(self):
foo = 'bar'
Mocking
-------
Postorius uses Michael Foord's ``mock`` library for mocking. There are some
shortcuts you can use to quickly create mock objects that behave a little bit like
objects retreived from mailman.client, like:
- Domains
- Mailing Lists
- Users
- Memberships
- Addresses
Mocking mailman.client objects
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: postorius.tests.test_utils
......@@ -8,5 +8,5 @@ Contents:
news.rst
setup.rst
using.rst
development.rst
......@@ -2,22 +2,22 @@
News / Changelog
================
Copyright (C) 1998-2012 by the Free Software Foundation, Inc.
Copyright (C) 2012 by the Free Software Foundation, Inc.
The postorius Django app provides a web user interface to
The Postorius Django app provides a web user interface to
access GNU Mailman.
postorius is free software: you can redistribute it and/or
Postorius is free software: you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, version 3 of the License.
postorius is distributed in the hope that it will be useful,
Postorius is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with postorius. If not, see <http://www.gnu.org/licenses/>.
along with Postorius. If not, see <http://www.gnu.org/licenses/>.
1.0 alpha 2
......@@ -29,6 +29,7 @@ along with postorius. If not, see <http://www.gnu.org/licenses/>.
* moderation: fixed typo in success message call
* installation documentation for Apache/mod_wsgi
* moved project files to separate branch
* show error message if connection to Mailman API fails
1.0 alpha 1 -- "Space Farm"
......
......@@ -50,7 +50,7 @@ or:
Latest dev version
------------------
If you want to keep up to date with the latest development version, you
If you want to always be up to date with the latest development version, you
should install Postorius using bazaar:
::
......@@ -68,6 +68,14 @@ You can always pull in the latest changes from the development branch:
$ bzr pull
$ cd ..
Make sure to keep mailman.client up to date as well:
::
$ cd mailman.client
$ bzr pull lp:mailman.client
$ cd ..
Setup your django project
=========================
......@@ -86,7 +94,7 @@ your preferred database. If you're OK with using sqlite, just change the path
in line 48 to the correct location.
.. note::
Detailed information on how to use different databse engines can be found
Detailed information on how to use different database engines can be found
in the `Django documentation`_.
.. _Django documentation: https://docs.djangoproject.com/en/1.4/ref/settings/#databases
......@@ -115,7 +123,7 @@ will act as an admin account for Postorius.
Running the development server
==============================
The quickest way to run postorius is to just start the development server:
The quickest way to run Postorius is to just start the development server:
::
......
=============
Writing tests
=============
.. automodule:: postorius.tests.test_utils
......@@ -79,11 +79,11 @@ div.sphinxsidebar input {
font-size: 1em;
}
div.sphinxsidebar #searchbox input[type="text"] {
div.sphinxsidebar input[type="text"] {
width: 170px;
}
div.sphinxsidebar #searchbox input[type="submit"] {
div.sphinxsidebar input[type="submit"] {
width: 30px;
}
......
This diff is collapsed.
......@@ -52,9 +52,20 @@
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
<a href="#T"><strong>T</strong></a>
<a href="#P"><strong>P</strong></a>
| <a href="#T"><strong>T</strong></a>
</div>
<h2 id="P">P</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="development.html#module-postorius.tests.test_utils">postorius.tests.test_utils (module)</a>
</dt>
</dl></td>
</tr></table>
<h2 id="T">T</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
......@@ -106,7 +117,7 @@
</div>
<div class="footer">
&copy; Copyright 2012, The Free Software Foundation.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
</div>
</body>
</html>
\ No newline at end of file
......@@ -57,7 +57,7 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="news.html">News / Changelog</a></li>
<li class="toctree-l1"><a class="reference internal" href="setup.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="using.html">Using the Django App - Developers Resource (outdated)</a></li>
<li class="toctree-l1"><a class="reference internal" href="development.html">Development</a></li>
</ul>
</div>
</div>
......@@ -110,7 +110,7 @@
</div>
<div class="footer">
&copy; Copyright 2012, The Free Software Foundation.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
</div>
</body>
</html>
\ No newline at end of file
......@@ -56,18 +56,18 @@
<div class="section" id="news-changelog">
<h1>News / Changelog<a class="headerlink" href="#news-changelog" title="Permalink to this headline"></a></h1>
<p>Copyright (C) 1998-2012 by the Free Software Foundation, Inc.</p>
<p>The postorius Django app provides a web user interface to
<p>Copyright (C) 2012 by the Free Software Foundation, Inc.</p>
<p>The Postorius Django app provides a web user interface to
access GNU Mailman.</p>
<p>postorius is free software: you can redistribute it and/or
<p>Postorius is free software: you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, version 3 of the License.</p>
<p>postorius is distributed in the hope that it will be useful,
<p>Postorius is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
General Public License for more details.</p>
<p>You should have received a copy of the GNU Lesser General Public License
along with postorius. If not, see &lt;<a class="reference external" href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;.</p>
along with Postorius. If not, see &lt;<a class="reference external" href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;.</p>
<div class="section" id="alpha-2">
<h2>1.0 alpha 2<a class="headerlink" href="#alpha-2" title="Permalink to this headline"></a></h2>
<p>(2012-XX-XX)</p>
......@@ -77,6 +77,7 @@ along with postorius. If not, see &lt;<a class="reference external" href="http:/
<li>moderation: fixed typo in success message call</li>
<li>installation documentation for Apache/mod_wsgi</li>
<li>moved project files to separate branch</li>
<li>show error message if connection to Mailman API fails</li>
</ul>
</div>
<div class="section" id="alpha-1-space-farm">
......@@ -166,7 +167,7 @@ Daniel Mizyrycki</li>
</div>
<div class="footer">
&copy; Copyright 2012, The Free Software Foundation.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
</div>
</body>
</html>
\ No newline at end of file
......@@ -53,20 +53,35 @@
<h1>Python Module Index</h1>
<div class="modindex-jumpbox">
<a href="#cap-p"><strong>p</strong></a> |
<a href="#cap-t"><strong>t</strong></a>
</div>
<table class="indextable modindextable" cellspacing="0" cellpadding="2">
<tr class="pcap"><td></td><td>&nbsp;</td><td></td></tr>
<tr class="cap" id="cap-p"><td></td><td>
<strong>p</strong></td><td></td></tr>
<tr>
<td><img src="_static/minus.png" class="toggler"
id="toggle-1" style="display: none" alt="-" /></td>
<td>
<tt class="xref">postorius</tt></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="development.html#module-postorius.tests.test_utils"><tt class="xref">postorius.tests.test_utils</tt></a></td><td>
<em></em></td></tr>
<tr class="pcap"><td></td><td>&nbsp;</td><td></td></tr>
<tr class="cap" id="cap-t"><td></td><td>
<strong>t</strong></td><td></td></tr>
<tr>
<td><img src="_static/minus.png" class="toggler"
id="toggle-1" style="display: none" alt="-" /></td>
id="toggle-2" style="display: none" alt="-" /></td>
<td>
<tt class="xref">tests</tt></td><td>
<em></em></td></tr>
<tr class="cg-1">
<tr class="cg-2">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="using.html#module-tests.tests"><tt class="xref">tests.tests</tt></a></td><td>
......@@ -110,7 +125,7 @@
</div>
<div class="footer">
&copy; Copyright 2012, The Free Software Foundation.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
</div>
</body>
</html>
\ No newline at end of file
......@@ -99,7 +99,7 @@
</div>
<div class="footer">
&copy; Copyright 2012, The Free Software Foundation.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
</div>
</body>
</html>
\ No newline at end of file
......@@ -26,7 +26,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="Postorius 1.0a2 documentation" href="index.html" />
<link rel="next" title="Using the Django App - Developers Resource (outdated)" href="using.html" />
<link rel="next" title="Development" href="development.html" />
<link rel="prev" title="News / Changelog" href="news.html" />
</head>
<body>
......@@ -40,7 +40,7 @@
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="using.html" title="Using the Django App - Developers Resource (outdated)"
<a href="development.html" title="Development"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="news.html" title="News / Changelog"
......@@ -87,7 +87,7 @@ PyPi:</p>
</div>
<div class="section" id="latest-dev-version">
<h3>Latest dev version<a class="headerlink" href="#latest-dev-version" title="Permalink to this headline"></a></h3>
<p>If you want to keep up to date with the latest development version, you
<p>If you want to always be up to date with the latest development version, you
should install Postorius using bazaar:</p>
<div class="highlight-python"><pre>$ bzr branch lp:postorius
$ cd postorius
......@@ -99,6 +99,11 @@ $ cd ..</pre>
$ bzr pull
$ cd ..</pre>
</div>
<p>Make sure to keep mailman.client up to date as well:</p>
<div class="highlight-python"><pre>$ cd mailman.client
$ bzr pull lp:mailman.client
$ cd ..</pre>
</div>
</div>
</div>
<div class="section" id="setup-your-django-project">
......@@ -113,7 +118,7 @@ your preferred database. If you&#8217;re OK with using sqlite, just change the p
in line 48 to the correct location.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Detailed information on how to use different databse engines can be found
<p class="last">Detailed information on how to use different database engines can be found
in the <a class="reference external" href="https://docs.djangoproject.com/en/1.4/ref/settings/#databases">Django documentation</a>.</p>
</div>
<p>Third, prepare the database:</p>
......@@ -132,7 +137,7 @@ Postorius</a>.</p>
</div>
<div class="section" id="running-the-development-server">
<h2>Running the development server<a class="headerlink" href="#running-the-development-server" title="Permalink to this headline"></a></h2>
<p>The quickest way to run postorius is to just start the development server:</p>
<p>The quickest way to run Postorius is to just start the development server:</p>
<div class="highlight-python"><pre>$ cd postorius_standalone
$ python manage.py runserver</pre>
</div>
......@@ -203,8 +208,8 @@ site directory. All you have to do is to change into the
<p class="topless"><a href="news.html"
title="previous chapter">News / Changelog</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="using.html"
title="next chapter">Using the Django App - Developers Resource (outdated)</a></p>
<p class="topless"><a href="development.html"
title="next chapter">Development</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/setup.txt"
......@@ -237,7 +242,7 @@ site directory. All you have to do is to change into the
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="using.html" title="Using the Django App - Developers Resource (outdated)"
<a href="development.html" title="Development"
>next</a> |</li>
<li class="right" >
<a href="news.html" title="News / Changelog"
......@@ -247,7 +252,7 @@ site directory. All you have to do is to change into the
</div>
<div class="footer">
&copy; Copyright 2012, The Free Software Foundation.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
</div>
</body>
</html>
\ No newline at end of file
<!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>Writing tests &mdash; Postorius 1.0a2 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.0a2',
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="Postorius 1.0a2 documentation" href="index.html" />
<link rel="next" title="Using the Django App - Developers Resource (outdated)" href="using.html" />
<link rel="prev" title="Installation" href="setup.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="using.html" title="Using the Django App - Developers Resource (outdated)"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="setup.html" title="Installation"
accesskey="P">previous</a> |</li>
<li><a href="index.html">Postorius 1.0a2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="module-postorius.tests.test_utils">
<span id="writing-tests"></span><h1>Writing tests<a class="headerlink" href="#module-postorius.tests.test_utils" title="Permalink to this headline"></a></h1>
<div class="section" id="mocking-mailman-client-objects">
<h2>Mocking mailman.client objects<a class="headerlink" href="#mocking-mailman-client-objects" title="Permalink to this headline"></a></h2>
<div class="section" id="mailing-lists">
<h3>Mailing Lists<a class="headerlink" href="#mailing-lists" title="Permalink to this headline"></a></h3>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">postorius.tests.utils</span> <span class="kn">import</span> <span class="o">*</span>
</pre></div>
</div>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">properties</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">fqdn_listname</span><span class="o">=</span><span class="s">&#39;testlist@example.org&#39;</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">mail_host</span><span class="o">=</span><span class="s">&#39;example.org&#39;</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">list_name</span><span class="o">=</span><span class="s">&#39;testlist&#39;</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">display_name</span><span class="o">=</span><span class="s">&#39;Test List&#39;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">mock_list</span> <span class="o">=</span> <span class="n">create_mock_list</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">mock_list</span><span class="o">.</span><span class="n">fqdn_listname</span>
<span class="go">testlist@example.org</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">mock_list</span><span class="o">.</span><span class="n">mail_host</span>
<span class="go">example.org</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">mock_list</span><span class="o">.</span><span class="n">list_name</span>
<span class="go">testlist</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">mock_list</span><span class="o">.</span><span class="n">display_name</span>
<span class="go">Test List</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">mock_list</span>
<span class="go">&lt;MagicMock name=&#39;List&#39; id=&#39;...&#39;&gt;</span>
</pre></div>
</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="#">Writing tests</a><ul>
<li><a class="reference internal" href="#mocking-mailman-client-objects">Mocking mailman.client objects</a><ul>
<li><a class="reference internal" href="#mailing-lists">Mailing Lists</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="setup.html"
title="previous chapter">Installation</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="using.html"
title="next chapter">Using the Django App - Developers Resource (outdated)</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/testing.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="using.html" title="Using the Django App - Developers Resource (outdated)"
>next</a> |</li>
<li class="right" >
<a href="setup.html" title="Installation"
>previous</a> |</li>
<li><a href="index.html">Postorius 1.0a2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2012, The Free Software Foundation.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
</div>
</body>
</html>
\ No newline at end of file
......@@ -406,7 +406,7 @@ We start by checking that the list is really there (for reference).</p>
</div>
<div class="footer">
&copy; Copyright 2012, The Free Software Foundation.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.2.
</div>
</body>
</html>
\ No newline at end of file
===========
Development
===========
Testing
=======
All test modules reside in the ``postorius/src/postorius/tests`` directory
and this is where you should put your own tests, too. To make the django test
runner find your tests, make sure to add them to the folder's ``__init__.py``:
::
from postorius.tests import test_utils
from postorius.tests.test_list_members import ListMembersViewTest
from postorius.tests.test_list_settings import ListSettingsViewTest
from postorius.tests.my_own_tests import MyOwnUnitTest
__test__ = {
"Test Utils": test_utils,
"List Members": ListMembersViewTest,
"List Settings": ListSettingsViewTest,
"My Own Test": MyOwnUnitTest,
}
``postorius.*`` imports in test modules
---------------------------------------
When writing unittests make sure that any ``postorius.*`` imports are made
at the test method level and not at the module level. Here's why:
The Postorius documentation (the one you are reading right now) imports some
doctest modules from the test package using Sphinx's autodoc extension. This is
a very nice feature, but in this scenario it has the nasty side effect of
breaking the build process if application code is imported as well (it will
fail to find an environment variable that Django needs to run). This can be
easily prevented by avoiding module level imports of postorius code in the test
modules.
Good:
::
from django.utils import unittest
from mock import patch
class SomeTest(unittest.TestCase):
def test_some_method(self):
from postorius.views import SomeViewClass
foo = 'bar'
Bad:
::
from django.utils import unittest
from mock import patch
from postorius.views import SomeViewClass
class SomeTest(unittest.TestCase):
def test_some_method(self):
foo = 'bar'
Mocking
-------
Postorius uses Michael Foord's ``mock`` library for mocking. There are some
shortcuts you can use to quickly create mock objects that behave a little bit like
objects retreived from mailman.client, like:
- Domains
- Mailing Lists
- Users
- Memberships
- Addresses
Mocking mailman.client objects
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: postorius.tests.test_utils
......@@ -8,5 +8,5 @@ Contents:
news.rst
setup.rst
using.rst
development.rst
......@@ -2,22 +2,22 @@
News / Changelog
================
Copyright (C) 1998-2012 by the Free Software Foundation, Inc.
Copyright (C) 2012 by the Free Software Foundation, Inc.
The postorius Django app provides a web user interface to
The Postorius Django app provides a web user interface to
access GNU Mailman.
postorius is free software: you can redistribute it and/or
Postorius is free software: you can redistribute it and/or