Permalink
Browse files

Add tree structure

But I should consider to use django-mptt ...
  • Loading branch information...
1 parent 6cd9aeb commit 9bf03e4f11519acd42f1b65d1243686a34d01489 @lambdalisue committed Mar 1, 2012
Showing with 5,133 additions and 4 deletions.
  1. +60 −0 .coverage/errors.html
  2. +67 −0 .coverage/excludes.html
  3. +269 −0 .coverage/index.html
  4. +196 −0 .coverage/modules/miniblog.blogs.forms.html
  5. +236 −0 .coverage/modules/miniblog.blogs.models.html
  6. +193 −0 .coverage/modules/miniblog.blogs.permissions.html
  7. +220 −0 .coverage/modules/miniblog.blogs.views.html
  8. +203 −0 .coverage/modules/permission.admin.html
  9. +177 −0 .coverage/modules/permission.admin.views.html
  10. +221 −0 .coverage/modules/permission.backends.authenticate_backend.html
  11. +244 −0 .coverage/modules/permission.backends.permission_backend.html
  12. +268 −0 .coverage/modules/permission.backends.role_backend.html
  13. +219 −0 .coverage/modules/permission.decorators.class_decorators.html
  14. +231 −0 .coverage/modules/permission.decorators.function_decorators.html
  15. +226 −0 .coverage/modules/permission.decorators.method_decorators.html
  16. +324 −0 .coverage/modules/permission.decorators.utils.html
  17. +223 −0 .coverage/modules/permission.exceptions.html
  18. +269 −0 .coverage/modules/permission.handlers.base.html
  19. +385 −0 .coverage/modules/permission.models.html
  20. +201 −0 .coverage/modules/permission.tests.test_app.models.html
  21. +248 −0 .coverage/modules/permission.utils.html
  22. +225 −0 .coverage/modules/permission.validation.html
  23. +2 −0 .gitignore
  24. BIN output.png
  25. +127 −0 permission/admin/__init__.py
  26. +8 −0 permission/admin/urls.py
  27. +22 −0 permission/admin/views.py
  28. +20 −2 permission/models.py
  29. +29 −0 permission/templates/admin/permission/role/change_list.html
  30. +14 −2 runtests.py
  31. +5 −0 tests/src/miniblog/settings.py
  32. +1 −0 tests/src/miniblog/urls.py
View
60 .coverage/errors.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report: error packages and modules</title>
+ <style type="text/css" media="screen">
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ #content-header
+ {
+ margin-left: 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 18px;
+ margin-bottom: 0;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #result-list
+ {
+ margin: 0 50px;
+ }
+
+ #result-list ul
+ {
+ padding-left: 13px;
+ list-style-position: inside;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div id="content-header">
+ <h1>Test Coverage Report: error packages and modules</h1><p>Generated: Thu 2012-03-01 10:29 CST</p></div>
+<div id="result-list">
+ <p> <code>django_coverage.utils.module_tools.find_or_load_module</code> had
+ problems importing these packages and modules:
+ </p>
+ <ul>
+ <li>permission.templates</li>
+ </ul>
+ Back to <a href="index.html">index</a>.
+</div>
+
+ </body>
+</html>
+
View
67 .coverage/excludes.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report: excluded packages and modules</title>
+ <style type="text/css" media="screen">
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ #content-header
+ {
+ margin-left: 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 18px;
+ margin-bottom: 0;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #result-list
+ {
+ margin: 0 50px;
+ }
+
+ #result-list ul
+ {
+ padding-left: 13px;
+ list-style-position: inside;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div id="content-header">
+ <h1>Test Coverage Report: excluded packages and modules</h1><p>Generated: Thu 2012-03-01 10:29 CST</p></div>
+<div id="result-list">
+ <p> These packages and modules were excluded from the coverage analysis in
+ <code>django.conf.settings.COVERAGE_MODULE_EXCLUDES</code> or they do
+ not contain any executable statements:
+ </p>
+ <ul>
+ <li>permission.__init__</li>
+<li>permission.admin.__init__</li>
+<li>permission.admin.urls</li>
+<li>permission.backends.__init__</li>
+<li>permission.decorators.__init__</li>
+<li>permission.handlers.__init__</li>
+<li>permission.tests</li>
+ </ul>
+ Back to <a href="index.html">index</a>.
+</div>
+
+ </body>
+</html>
+
View
269 .coverage/index.html
@@ -0,0 +1,269 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report</title>
+ <style type="text/css" media="screen">
+ a
+ {
+ color: #3d707a;
+ }
+
+ a:hover, a:active
+ {
+ color: #bf7d18;
+ }
+
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ tr:hover
+ {
+ background: #f5f5f5;
+ }
+
+ #content-header
+ {
+ margin-left: 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 18px;
+ margin-bottom: 0;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #result-list table
+ {
+ font-size: 13px;
+ background: white;
+ margin: 15px 50px;
+ width: 600px;
+ border-collapse: collapse;
+ text-align: right;
+ }
+
+ #result-list thead tr.last th,
+ th.statements
+ {
+ border-bottom: 1px solid #6d5e48;
+ }
+
+ th.statements
+ {
+ text-align: center;
+ }
+
+ #result-list th
+ {
+ padding: 3px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ color: #937F61;
+ }
+
+ #result-list td
+ {
+ border-bottom: 1px solid #e0e0e0;
+ color: #606060;
+ padding: 6px 12px;
+ }
+
+ #result-list tfoot td
+ {
+ color: #937F61;
+ font-weight: bold;
+ }
+
+ #result-list .normal
+ {
+ color: #609030;
+ }
+
+ #result-list .warning
+ {
+ color: #d0a000;
+ }
+
+ #result-list .critical
+ {
+ color: red;
+ }
+
+ #result-list .module-name
+ {
+ text-align: left;
+ }
+
+ .footer-link
+ {
+ margin-left: 62px;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div id="content-header">
+ <h1>Test Coverage Report</h1>
+ <p>Generated: Thu 2012-03-01 10:30 CST</p>
+</div>
+
+<div id="result-list">
+ <table>
+ <thead>
+ <tr>
+ <th>&nbsp;</th>
+ <th colspan="3" class="statements">Statements</th>
+ </tr>
+ <tr class="last">
+ <th class="module-name">Module</th>
+ <th>total</th>
+ <th>executed</th>
+ <th>excluded</th>
+ <th>% covered</th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="module-name">Total</td>
+ <td>498</td>
+ <td>319</td>
+ <td>73</td>
+ <td>75.1%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+ <tr>
+ <td class="module-name"><a href="modules/permission.admin.views.html">permission.admin.views</a></td>
+ <td>15</td>
+ <td>0</td>
+ <td>4</td>
+ <td class="critical">0.0%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.backends.authenticate_backend.html">permission.backends.authenticate_backend</a></td>
+ <td>22</td>
+ <td>11</td>
+ <td>3</td>
+ <td class="warning">57.9%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.backends.permission_backend.html">permission.backends.permission_backend</a></td>
+ <td>22</td>
+ <td>15</td>
+ <td>2</td>
+ <td class="normal">75.0%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.backends.role_backend.html">permission.backends.role_backend</a></td>
+ <td>61</td>
+ <td>35</td>
+ <td>4</td>
+ <td class="warning">61.4%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.decorators.class_decorators.html">permission.decorators.class_decorators</a></td>
+ <td>19</td>
+ <td>14</td>
+ <td>5</td>
+ <td class="normal">100.0%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.decorators.function_decorators.html">permission.decorators.function_decorators</a></td>
+ <td>28</td>
+ <td>18</td>
+ <td>9</td>
+ <td class="normal">94.7%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.decorators.method_decorators.html">permission.decorators.method_decorators</a></td>
+ <td>27</td>
+ <td>20</td>
+ <td>7</td>
+ <td class="normal">100.0%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.decorators.utils.html">permission.decorators.utils</a></td>
+ <td>94</td>
+ <td>68</td>
+ <td>12</td>
+ <td class="normal">82.9%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.exceptions.html">permission.exceptions</a></td>
+ <td>14</td>
+ <td>6</td>
+ <td>1</td>
+ <td class="critical">46.2%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.handlers.base.html">permission.handlers.base</a></td>
+ <td>33</td>
+ <td>19</td>
+ <td>3</td>
+ <td class="warning">63.3%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.models.html">permission.models</a></td>
+ <td>118</td>
+ <td>100</td>
+ <td>7</td>
+ <td class="normal">90.1%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.utils.html">permission.utils</a></td>
+ <td>30</td>
+ <td>5</td>
+ <td>11</td>
+ <td class="critical">26.3%</td>
+</tr>
+
+<tr>
+ <td class="module-name"><a href="modules/permission.validation.html">permission.validation</a></td>
+ <td>15</td>
+ <td>8</td>
+ <td>5</td>
+ <td class="normal">80.0%</td>
+</tr>
+
+ </tbody>
+ </table>
+</div>
+
+<div>
+ <a class="footer-link" href="excludes.html">
+ Excluded packages and modules
+ </a>
+</div>
+
+<div>
+ <a class="footer-link" href="errors.html">
+ Error packages and modules
+ </a>
+</div>
+
+ </body>
+</html>
+
View
196 .coverage/modules/miniblog.blogs.forms.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report: miniblog.blogs.forms</title>
+ <style type="text/css" media="screen">
+ a
+ {
+ color: #3d707a;
+ }
+
+ a:hover, a:active
+ {
+ color: #bf7d18;
+ }
+
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ .nav
+ {
+ font-size: 12px;
+ margin-left: 50px;
+ }
+
+ .ignored
+ {
+ color: #707070;
+ }
+
+ .executed
+ {
+ color: #3d9900;
+ }
+
+ .missed
+ {
+ color: red;
+ font-weight: bold;
+ }
+
+ .excluded
+ {
+ color: #6090f0;
+ font-weight: lighter;
+ }
+
+ #content-header
+ {
+ font-size: 12px;
+ padding: 18px 0 18px 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 16px;
+ margin: 10px 0 0 0;
+ color: #909090;
+ }
+
+ #module-name
+ {
+ color: #583707;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #content-header .normal
+ {
+ color: #609030;
+ }
+
+ #content-header .warning
+ {
+ color: #d0a000;
+ }
+
+ #content-header .critical
+ {
+ color: red;
+ }
+
+ #source-listing
+ {
+ margin-bottom: 24px;
+ }
+
+ #source-listing ol
+ {
+ padding: 0 0 0 50px;
+ width: 90%;
+ font-family: monospace;
+ list-style-position: outside;
+ }
+
+ #source-listing ol li
+ {
+ line-height: 18px;
+ font-size: small;
+ }
+
+ #source-listing ol code
+ {
+ padding: 0 .001em 0 0; /* Firefox doesn't render empty li's properly */
+ font-size: medium;
+ white-space: pre;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div class="nav">
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="miniblog.blogs.models.html">miniblog.blogs.models</a>
+</div>
+
+<div id="content-header">
+ <h1>
+ <span id="module-name">miniblog.blogs.forms</span>:
+ 8 total statements,
+ <span class="normal">100.0% covered</span>
+ </h1>
+ <p>Generated: Thu 2012-03-01 08:22 CST</p>
+ <p>Source file: /home/alisue/Dropbox/Codes/django-permission/tests/src/miniblog/blogs/forms.py</p>
+ <p>
+ Stats:
+ <span class="executed">5 executed</span>,
+ <span class="missed">0 missed</span>,
+ <span class="excluded">3 excluded</span>,
+ <span class="ignored">33 ignored</span>
+ </p>
+</div>
+
+<div id="source-listing">
+ <ol>
+ <li class="ignored"><code># vim: set fileencoding=utf-8 :</code></li>
+<li class="executed"><code>"""</code></li>
+<li class="ignored"><code>Mini blog forms</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>AUTHOR:</code></li>
+<li class="ignored"><code> lambdalisue[Ali su ae] (lambdalisue@hashnote.net)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>License:</code></li>
+<li class="ignored"><code> The MIT License (MIT)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Copyright (c) 2012 Alisue allright reserved.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Permission is hereby granted, free of charge, to any person obtaining a copy</code></li>
+<li class="ignored"><code> of this software and associated documentation files (the "Software"), to</code></li>
+<li class="ignored"><code> deal in the Software without restriction, including without limitation the</code></li>
+<li class="ignored"><code> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</code></li>
+<li class="ignored"><code> sell copies of the Software, and to permit persons to whom the Software is</code></li>
+<li class="ignored"><code> furnished to do so, subject to the following conditions:</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> The above copyright notice and this permission notice shall be included in</code></li>
+<li class="ignored"><code> all copies or substantial portions of the Software.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</code></li>
+<li class="ignored"><code> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</code></li>
+<li class="ignored"><code> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</code></li>
+<li class="ignored"><code> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</code></li>
+<li class="ignored"><code> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</code></li>
+<li class="ignored"><code> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</code></li>
+<li class="ignored"><code> IN THE SOFTWARE.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>"""</code></li>
+<li class="excluded"><code>from __future__ import with_statement</code></li>
+<li class="excluded"><code>from django import forms</code></li>
+<li class="ignored"><code></code></li>
+<li class="excluded"><code>from models import Entry</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class EntryForm(forms.ModelForm):</code></li>
+<li class="executed"><code> class Meta:</code></li>
+<li class="executed"><code> model = Entry</code></li>
+<li class="executed"><code> fields = ('title', 'body')</code></li>
+ </ol>
+</div>
+
+<div class="nav">
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="miniblog.blogs.models.html">miniblog.blogs.models</a>
+</div>
+
+ </body>
+</html>
+
View
236 .coverage/modules/miniblog.blogs.models.html
@@ -0,0 +1,236 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report: miniblog.blogs.models</title>
+ <style type="text/css" media="screen">
+ a
+ {
+ color: #3d707a;
+ }
+
+ a:hover, a:active
+ {
+ color: #bf7d18;
+ }
+
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ .nav
+ {
+ font-size: 12px;
+ margin-left: 50px;
+ }
+
+ .ignored
+ {
+ color: #707070;
+ }
+
+ .executed
+ {
+ color: #3d9900;
+ }
+
+ .missed
+ {
+ color: red;
+ font-weight: bold;
+ }
+
+ .excluded
+ {
+ color: #6090f0;
+ font-weight: lighter;
+ }
+
+ #content-header
+ {
+ font-size: 12px;
+ padding: 18px 0 18px 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 16px;
+ margin: 10px 0 0 0;
+ color: #909090;
+ }
+
+ #module-name
+ {
+ color: #583707;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #content-header .normal
+ {
+ color: #609030;
+ }
+
+ #content-header .warning
+ {
+ color: #d0a000;
+ }
+
+ #content-header .critical
+ {
+ color: red;
+ }
+
+ #source-listing
+ {
+ margin-bottom: 24px;
+ }
+
+ #source-listing ol
+ {
+ padding: 0 0 0 50px;
+ width: 90%;
+ font-family: monospace;
+ list-style-position: outside;
+ }
+
+ #source-listing ol li
+ {
+ line-height: 18px;
+ font-size: small;
+ }
+
+ #source-listing ol code
+ {
+ padding: 0 .001em 0 0; /* Firefox doesn't render empty li's properly */
+ font-size: medium;
+ white-space: pre;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div class="nav">
+ <a href="miniblog.blogs.forms.html">miniblog.blogs.forms</a> &lt;&lt;
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="miniblog.blogs.permissions.html">miniblog.blogs.permissions</a>
+</div>
+
+<div id="content-header">
+ <h1>
+ <span id="module-name">miniblog.blogs.models</span>:
+ 22 total statements,
+ <span class="normal">92.9% covered</span>
+ </h1>
+ <p>Generated: Thu 2012-03-01 08:22 CST</p>
+ <p>Source file: /home/alisue/Dropbox/Codes/django-permission/tests/src/miniblog/blogs/models.py</p>
+ <p>
+ Stats:
+ <span class="executed">13 executed</span>,
+ <span class="missed">1 missed</span>,
+ <span class="excluded">8 excluded</span>,
+ <span class="ignored">57 ignored</span>
+ </p>
+</div>
+
+<div id="source-listing">
+ <ol>
+ <li class="ignored"><code># vim: set fileencoding=utf-8 :</code></li>
+<li class="executed"><code>"""</code></li>
+<li class="ignored"><code>Mini blog models</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>AUTHOR:</code></li>
+<li class="ignored"><code> lambdalisue[Ali su ae] (lambdalisue@hashnote.net)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>License:</code></li>
+<li class="ignored"><code> The MIT License (MIT)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Copyright (c) 2012 Alisue allright reserved.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Permission is hereby granted, free of charge, to any person obtaining a copy</code></li>
+<li class="ignored"><code> of this software and associated documentation files (the "Software"), to</code></li>
+<li class="ignored"><code> deal in the Software without restriction, including without limitation the</code></li>
+<li class="ignored"><code> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</code></li>
+<li class="ignored"><code> sell copies of the Software, and to permit persons to whom the Software is</code></li>
+<li class="ignored"><code> furnished to do so, subject to the following conditions:</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> The above copyright notice and this permission notice shall be included in</code></li>
+<li class="ignored"><code> all copies or substantial portions of the Software.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</code></li>
+<li class="ignored"><code> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</code></li>
+<li class="ignored"><code> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</code></li>
+<li class="ignored"><code> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</code></li>
+<li class="ignored"><code> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</code></li>
+<li class="ignored"><code> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</code></li>
+<li class="ignored"><code> IN THE SOFTWARE.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>"""</code></li>
+<li class="excluded"><code>from __future__ import with_statement</code></li>
+<li class="excluded"><code>from django.db import models</code></li>
+<li class="excluded"><code>from django.utils.text import ugettext_lazy as _</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class EntryBase(models.Model):</code></li>
+<li class="ignored"><code> """A base abstract model of Entry"""</code></li>
+<li class="executed"><code> title = models.CharField(_('title'), max_length=50, unique=True)</code></li>
+<li class="executed"><code> body = models.TextField(_('body'))</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code> created_at = models.DateTimeField(_('date and time created'),</code></li>
+<li class="ignored"><code> auto_now_add=True)</code></li>
+<li class="executed"><code> updated_at = models.DateTimeField(_('date and time updated'),</code></li>
+<li class="ignored"><code> auto_now=True)</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code> class Meta:</code></li>
+<li class="executed"><code> abstract = True</code></li>
+<li class="ignored"><code></code></li>
+<li class="excluded"><code> def __unicode__(self):</code></li>
+<li class="excluded"><code> return self.title</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code> @models.permalink</code></li>
+<li class="excluded"><code> def get_absolute_url(self):</code></li>
+<li class="excluded"><code> return ('blogs-entry-detail', (), {'slug': self.title})</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code> def clean(self):</code></li>
+<li class="ignored"><code> """custom validation"""</code></li>
+<li class="excluded"><code> from django.core.exceptions import ValidationError</code></li>
+<li class="executed"><code> if self.title in ('create', 'update', 'delete'):</code></li>
+<li class="missed"><code> raise ValidationError(</code></li>
+<li class="ignored"><code> """The title cannot be 'create', 'update' or 'delete'""")</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class Entry(EntryBase):</code></li>
+<li class="ignored"><code> """mini blog entry model</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> &gt;&gt;&gt; entry = Entry()</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> # Attribute test</code></li>
+<li class="ignored"><code> &gt;&gt;&gt; assert hasattr(entry, 'title')</code></li>
+<li class="ignored"><code> &gt;&gt;&gt; assert hasattr(entry, 'body')</code></li>
+<li class="ignored"><code> &gt;&gt;&gt; assert hasattr(entry, 'created_at')</code></li>
+<li class="ignored"><code> &gt;&gt;&gt; assert hasattr(entry, 'updated_at')</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> # Function test</code></li>
+<li class="ignored"><code> &gt;&gt;&gt; assert callable(getattr(entry, '__unicode__'))</code></li>
+<li class="ignored"><code> &gt;&gt;&gt; assert callable(getattr(entry, 'get_absolute_url'))</code></li>
+<li class="ignored"><code> """</code></li>
+<li class="executed"><code> pass</code></li>
+<li class="ignored"><code></code></li>
+ </ol>
+</div>
+
+<div class="nav">
+ <a href="miniblog.blogs.forms.html">miniblog.blogs.forms</a> &lt;&lt;
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="miniblog.blogs.permissions.html">miniblog.blogs.permissions</a>
+</div>
+
+ </body>
+</html>
+
View
193 .coverage/modules/miniblog.blogs.permissions.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report: miniblog.blogs.permissions</title>
+ <style type="text/css" media="screen">
+ a
+ {
+ color: #3d707a;
+ }
+
+ a:hover, a:active
+ {
+ color: #bf7d18;
+ }
+
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ .nav
+ {
+ font-size: 12px;
+ margin-left: 50px;
+ }
+
+ .ignored
+ {
+ color: #707070;
+ }
+
+ .executed
+ {
+ color: #3d9900;
+ }
+
+ .missed
+ {
+ color: red;
+ font-weight: bold;
+ }
+
+ .excluded
+ {
+ color: #6090f0;
+ font-weight: lighter;
+ }
+
+ #content-header
+ {
+ font-size: 12px;
+ padding: 18px 0 18px 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 16px;
+ margin: 10px 0 0 0;
+ color: #909090;
+ }
+
+ #module-name
+ {
+ color: #583707;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #content-header .normal
+ {
+ color: #609030;
+ }
+
+ #content-header .warning
+ {
+ color: #d0a000;
+ }
+
+ #content-header .critical
+ {
+ color: red;
+ }
+
+ #source-listing
+ {
+ margin-bottom: 24px;
+ }
+
+ #source-listing ol
+ {
+ padding: 0 0 0 50px;
+ width: 90%;
+ font-family: monospace;
+ list-style-position: outside;
+ }
+
+ #source-listing ol li
+ {
+ line-height: 18px;
+ font-size: small;
+ }
+
+ #source-listing ol code
+ {
+ padding: 0 .001em 0 0; /* Firefox doesn't render empty li's properly */
+ font-size: medium;
+ white-space: pre;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div class="nav">
+ <a href="miniblog.blogs.models.html">miniblog.blogs.models</a> &lt;&lt;
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="miniblog.blogs.views.html">miniblog.blogs.views</a>
+</div>
+
+<div id="content-header">
+ <h1>
+ <span id="module-name">miniblog.blogs.permissions</span>:
+ 2 total statements,
+ <span class="normal">100.0% covered</span>
+ </h1>
+ <p>Generated: Thu 2012-03-01 08:22 CST</p>
+ <p>Source file: /home/alisue/Dropbox/Codes/django-permission/tests/src/miniblog/blogs/permissions.py</p>
+ <p>
+ Stats:
+ <span class="executed">1 executed</span>,
+ <span class="missed">0 missed</span>,
+ <span class="excluded">1 excluded</span>,
+ <span class="ignored">34 ignored</span>
+ </p>
+</div>
+
+<div id="source-listing">
+ <ol>
+ <li class="ignored"><code>#!/usr/bin/env python</code></li>
+<li class="ignored"><code># vim: set fileencoding=utf-8 :</code></li>
+<li class="executed"><code>"""</code></li>
+<li class="ignored"><code>short module explanation</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>AUTHOR:</code></li>
+<li class="ignored"><code> lambdalisue[Ali su ae] (lambdalisue@hashnote.net)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>License:</code></li>
+<li class="ignored"><code> The MIT License (MIT)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Copyright (c) 2012 Alisue allright reserved.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Permission is hereby granted, free of charge, to any person obtaining a copy</code></li>
+<li class="ignored"><code> of this software and associated documentation files (the "Software"), to</code></li>
+<li class="ignored"><code> deal in the Software without restriction, including without limitation the</code></li>
+<li class="ignored"><code> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</code></li>
+<li class="ignored"><code> sell copies of the Software, and to permit persons to whom the Software is</code></li>
+<li class="ignored"><code> furnished to do so, subject to the following conditions:</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> The above copyright notice and this permission notice shall be included in</code></li>
+<li class="ignored"><code> all copies or substantial portions of the Software.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</code></li>
+<li class="ignored"><code> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</code></li>
+<li class="ignored"><code> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</code></li>
+<li class="ignored"><code> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</code></li>
+<li class="ignored"><code> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</code></li>
+<li class="ignored"><code> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</code></li>
+<li class="ignored"><code> IN THE SOFTWARE.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>"""</code></li>
+<li class="excluded"><code>from __future__ import with_statement</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code></code></li>
+ </ol>
+</div>
+
+<div class="nav">
+ <a href="miniblog.blogs.models.html">miniblog.blogs.models</a> &lt;&lt;
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="miniblog.blogs.views.html">miniblog.blogs.views</a>
+</div>
+
+ </body>
+</html>
+
View
220 .coverage/modules/miniblog.blogs.views.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report: miniblog.blogs.views</title>
+ <style type="text/css" media="screen">
+ a
+ {
+ color: #3d707a;
+ }
+
+ a:hover, a:active
+ {
+ color: #bf7d18;
+ }
+
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ .nav
+ {
+ font-size: 12px;
+ margin-left: 50px;
+ }
+
+ .ignored
+ {
+ color: #707070;
+ }
+
+ .executed
+ {
+ color: #3d9900;
+ }
+
+ .missed
+ {
+ color: red;
+ font-weight: bold;
+ }
+
+ .excluded
+ {
+ color: #6090f0;
+ font-weight: lighter;
+ }
+
+ #content-header
+ {
+ font-size: 12px;
+ padding: 18px 0 18px 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 16px;
+ margin: 10px 0 0 0;
+ color: #909090;
+ }
+
+ #module-name
+ {
+ color: #583707;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #content-header .normal
+ {
+ color: #609030;
+ }
+
+ #content-header .warning
+ {
+ color: #d0a000;
+ }
+
+ #content-header .critical
+ {
+ color: red;
+ }
+
+ #source-listing
+ {
+ margin-bottom: 24px;
+ }
+
+ #source-listing ol
+ {
+ padding: 0 0 0 50px;
+ width: 90%;
+ font-family: monospace;
+ list-style-position: outside;
+ }
+
+ #source-listing ol li
+ {
+ line-height: 18px;
+ font-size: small;
+ }
+
+ #source-listing ol code
+ {
+ padding: 0 .001em 0 0; /* Firefox doesn't render empty li's properly */
+ font-size: medium;
+ white-space: pre;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div class="nav">
+ <a href="miniblog.blogs.permissions.html">miniblog.blogs.permissions</a> &lt;&lt;
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="permission.backends.authenticate_backend.html">permission.backends.authenticate_backend</a>
+</div>
+
+<div id="content-header">
+ <h1>
+ <span id="module-name">miniblog.blogs.views</span>:
+ 25 total statements,
+ <span class="normal">93.8% covered</span>
+ </h1>
+ <p>Generated: Thu 2012-03-01 08:22 CST</p>
+ <p>Source file: /home/alisue/Dropbox/Codes/django-permission/tests/src/miniblog/blogs/views.py</p>
+ <p>
+ Stats:
+ <span class="executed">15 executed</span>,
+ <span class="missed">1 missed</span>,
+ <span class="excluded">9 excluded</span>,
+ <span class="ignored">38 ignored</span>
+ </p>
+</div>
+
+<div id="source-listing">
+ <ol>
+ <li class="ignored"><code># vim: set fileencoding=utf-8 :</code></li>
+<li class="executed"><code>"""</code></li>
+<li class="ignored"><code>Mini blog views</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>AUTHOR:</code></li>
+<li class="ignored"><code> lambdalisue[Ali su ae] (lambdalisue@hashnote.net)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>License:</code></li>
+<li class="ignored"><code> The MIT License (MIT)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Copyright (c) 2012 Alisue allright reserved.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Permission is hereby granted, free of charge, to any person obtaining a copy</code></li>
+<li class="ignored"><code> of this software and associated documentation files (the "Software"), to</code></li>
+<li class="ignored"><code> deal in the Software without restriction, including without limitation the</code></li>
+<li class="ignored"><code> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</code></li>
+<li class="ignored"><code> sell copies of the Software, and to permit persons to whom the Software is</code></li>
+<li class="ignored"><code> furnished to do so, subject to the following conditions:</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> The above copyright notice and this permission notice shall be included in</code></li>
+<li class="ignored"><code> all copies or substantial portions of the Software.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</code></li>
+<li class="ignored"><code> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</code></li>
+<li class="ignored"><code> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</code></li>
+<li class="ignored"><code> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</code></li>
+<li class="ignored"><code> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</code></li>
+<li class="ignored"><code> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</code></li>
+<li class="ignored"><code> IN THE SOFTWARE.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>"""</code></li>
+<li class="excluded"><code>from __future__ import with_statement</code></li>
+<li class="excluded"><code>from django.views.generic import ListView</code></li>
+<li class="excluded"><code>from django.views.generic import DetailView</code></li>
+<li class="excluded"><code>from django.views.generic import CreateView</code></li>
+<li class="excluded"><code>from django.views.generic import UpdateView</code></li>
+<li class="excluded"><code>from django.views.generic import DeleteView</code></li>
+<li class="excluded"><code>from django.core.urlresolvers import reverse</code></li>
+<li class="ignored"><code></code></li>
+<li class="excluded"><code>from models import Entry</code></li>
+<li class="excluded"><code>from forms import EntryForm</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class EntryListView(ListView):</code></li>
+<li class="executed"><code> model = Entry</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class EntryDetailView(DetailView):</code></li>
+<li class="executed"><code> model = Entry</code></li>
+<li class="executed"><code> slug_field = 'title'</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class EntryCreateView(CreateView):</code></li>
+<li class="executed"><code> form_class = EntryForm</code></li>
+<li class="executed"><code> model = Entry</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class EntryUpdateView(UpdateView):</code></li>
+<li class="executed"><code> form_class = EntryForm</code></li>
+<li class="executed"><code> model = Entry</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class EntryDeleteView(DeleteView):</code></li>
+<li class="executed"><code> model = Entry</code></li>
+<li class="executed"><code> def get_success_url(self):</code></li>
+<li class="missed"><code> return reverse('blogs-entry-list')</code></li>
+<li class="ignored"><code></code></li>
+ </ol>
+</div>
+
+<div class="nav">
+ <a href="miniblog.blogs.permissions.html">miniblog.blogs.permissions</a> &lt;&lt;
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="permission.backends.authenticate_backend.html">permission.backends.authenticate_backend</a>
+</div>
+
+ </body>
+</html>
+
View
203 .coverage/modules/permission.admin.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report: permission.admin</title>
+ <style type="text/css" media="screen">
+ a
+ {
+ color: #3d707a;
+ }
+
+ a:hover, a:active
+ {
+ color: #bf7d18;
+ }
+
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ .nav
+ {
+ font-size: 12px;
+ margin-left: 50px;
+ }
+
+ .ignored
+ {
+ color: #707070;
+ }
+
+ .executed
+ {
+ color: #3d9900;
+ }
+
+ .missed
+ {
+ color: red;
+ font-weight: bold;
+ }
+
+ .excluded
+ {
+ color: #6090f0;
+ font-weight: lighter;
+ }
+
+ #content-header
+ {
+ font-size: 12px;
+ padding: 18px 0 18px 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 16px;
+ margin: 10px 0 0 0;
+ color: #909090;
+ }
+
+ #module-name
+ {
+ color: #583707;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #content-header .normal
+ {
+ color: #609030;
+ }
+
+ #content-header .warning
+ {
+ color: #d0a000;
+ }
+
+ #content-header .critical
+ {
+ color: red;
+ }
+
+ #source-listing
+ {
+ margin-bottom: 24px;
+ }
+
+ #source-listing ol
+ {
+ padding: 0 0 0 50px;
+ width: 90%;
+ font-family: monospace;
+ list-style-position: outside;
+ }
+
+ #source-listing ol li
+ {
+ line-height: 18px;
+ font-size: small;
+ }
+
+ #source-listing ol code
+ {
+ padding: 0 .001em 0 0; /* Firefox doesn't render empty li's properly */
+ font-size: medium;
+ white-space: pre;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div class="nav">
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="permission.backends.authenticate_backend.html">permission.backends.authenticate_backend</a>
+</div>
+
+<div id="content-header">
+ <h1>
+ <span id="module-name">permission.admin</span>:
+ 9 total statements,
+ <span class="critical">0.0% covered</span>
+ </h1>
+ <p>Generated: Thu 2012-03-01 09:53 CST</p>
+ <p>Source file: /home/alisue/Dropbox/Codes/django-permission/permission/admin.py</p>
+ <p>
+ Stats:
+ <span class="executed">0 executed</span>,
+ <span class="missed">5 missed</span>,
+ <span class="excluded">4 excluded</span>,
+ <span class="ignored">39 ignored</span>
+ </p>
+</div>
+
+<div id="source-listing">
+ <ol>
+ <li class="ignored"><code>#!/usr/bin/env python</code></li>
+<li class="ignored"><code># vim: set fileencoding=utf-8 :</code></li>
+<li class="missed"><code>"""</code></li>
+<li class="ignored"><code>short module explanation</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>AUTHOR:</code></li>
+<li class="ignored"><code> lambdalisue[Ali su ae] (lambdalisue@hashnote.net)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>License:</code></li>
+<li class="ignored"><code> The MIT License (MIT)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Copyright (c) 2012 Alisue allright reserved.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Permission is hereby granted, free of charge, to any person obtaining a copy</code></li>
+<li class="ignored"><code> of this software and associated documentation files (the "Software"), to</code></li>
+<li class="ignored"><code> deal in the Software without restriction, including without limitation the</code></li>
+<li class="ignored"><code> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</code></li>
+<li class="ignored"><code> sell copies of the Software, and to permit persons to whom the Software is</code></li>
+<li class="ignored"><code> furnished to do so, subject to the following conditions:</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> The above copyright notice and this permission notice shall be included in</code></li>
+<li class="ignored"><code> all copies or substantial portions of the Software.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</code></li>
+<li class="ignored"><code> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</code></li>
+<li class="ignored"><code> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</code></li>
+<li class="ignored"><code> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</code></li>
+<li class="ignored"><code> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</code></li>
+<li class="ignored"><code> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</code></li>
+<li class="ignored"><code> IN THE SOFTWARE.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>"""</code></li>
+<li class="excluded"><code>from __future__ import with_statement</code></li>
+<li class="excluded"><code>from django.contrib import admin</code></li>
+<li class="excluded"><code>from django.utils.translation import ugettext_lazy as _</code></li>
+<li class="ignored"><code></code></li>
+<li class="excluded"><code>from permission.models import Role</code></li>
+<li class="ignored"><code></code></li>
+<li class="missed"><code>class PermissionRoleAdmin(admin.ModelAdmin):</code></li>
+<li class="missed"><code> fieldsets = (</code></li>
+<li class="ignored"><code> (None, {'fields': ('name', 'codename', 'description')}),</code></li>
+<li class="ignored"><code> (_('Permissions'), {'fields': ('_permissions', '_subroles')}),</code></li>
+<li class="ignored"><code> (_('Users'), {'fields': ('_users',)}),</code></li>
+<li class="ignored"><code> )</code></li>
+<li class="missed"><code> filter_horizontal = ('_permissions', '_users')</code></li>
+<li class="ignored"><code></code></li>
+<li class="missed"><code>admin.site.register(Role, PermissionRoleAdmin)</code></li>
+ </ol>
+</div>
+
+<div class="nav">
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="permission.backends.authenticate_backend.html">permission.backends.authenticate_backend</a>
+</div>
+
+ </body>
+</html>
+
View
177 .coverage/modules/permission.admin.views.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report: permission.admin.views</title>
+ <style type="text/css" media="screen">
+ a
+ {
+ color: #3d707a;
+ }
+
+ a:hover, a:active
+ {
+ color: #bf7d18;
+ }
+
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ .nav
+ {
+ font-size: 12px;
+ margin-left: 50px;
+ }
+
+ .ignored
+ {
+ color: #707070;
+ }
+
+ .executed
+ {
+ color: #3d9900;
+ }
+
+ .missed
+ {
+ color: red;
+ font-weight: bold;
+ }
+
+ .excluded
+ {
+ color: #6090f0;
+ font-weight: lighter;
+ }
+
+ #content-header
+ {
+ font-size: 12px;
+ padding: 18px 0 18px 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 16px;
+ margin: 10px 0 0 0;
+ color: #909090;
+ }
+
+ #module-name
+ {
+ color: #583707;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #content-header .normal
+ {
+ color: #609030;
+ }
+
+ #content-header .warning
+ {
+ color: #d0a000;
+ }
+
+ #content-header .critical
+ {
+ color: red;
+ }
+
+ #source-listing
+ {
+ margin-bottom: 24px;
+ }
+
+ #source-listing ol
+ {
+ padding: 0 0 0 50px;
+ width: 90%;
+ font-family: monospace;
+ list-style-position: outside;
+ }
+
+ #source-listing ol li
+ {
+ line-height: 18px;
+ font-size: small;
+ }
+
+ #source-listing ol code
+ {
+ padding: 0 .001em 0 0; /* Firefox doesn't render empty li's properly */
+ font-size: medium;
+ white-space: pre;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div class="nav">
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="permission.backends.authenticate_backend.html">permission.backends.authenticate_backend</a>
+</div>
+
+<div id="content-header">
+ <h1>
+ <span id="module-name">permission.admin.views</span>:
+ 15 total statements,
+ <span class="critical">0.0% covered</span>
+ </h1>
+ <p>Generated: Thu 2012-03-01 10:30 CST</p>
+ <p>Source file: /home/alisue/Dropbox/Codes/django-permission/permission/admin/views.py</p>
+ <p>
+ Stats:
+ <span class="executed">0 executed</span>,
+ <span class="missed">11 missed</span>,
+ <span class="excluded">4 excluded</span>,
+ <span class="ignored">7 ignored</span>
+ </p>
+</div>
+
+<div id="source-listing">
+ <ol>
+ <li class="excluded"><code>from django.db import transaction</code></li>
+<li class="excluded"><code>from django.http import HttpResponseRedirect</code></li>
+<li class="excluded"><code>from django.contrib.contenttypes.models import ContentType</code></li>
+<li class="ignored"><code></code></li>
+<li class="excluded"><code>from . import PermissionRoleAdmin</code></li>
+<li class="missed"><code>@transaction.commit_on_success</code></li>
+<li class="ignored"><code>def admin_move_ordered_model(request, direction, model_type_id, model_id):</code></li>
+<li class="missed"><code> if direction == "up":</code></li>
+<li class="missed"><code> PermissionRoleAdmin.move_up(model_type_id, model_id)</code></li>
+<li class="ignored"><code> else:</code></li>
+<li class="missed"><code> PermissionRoleAdmin.move_down(model_type_id, model_id)</code></li>
+<li class="ignored"><code></code></li>
+<li class="missed"><code> ModelClass = ContentType.objects.get(id=model_type_id).model_class()</code></li>
+<li class="ignored"><code></code></li>
+<li class="missed"><code> app_label = ModelClass._meta.app_label</code></li>
+<li class="missed"><code> model_name = ModelClass.__name__.lower()</code></li>
+<li class="ignored"><code></code></li>
+<li class="missed"><code> redirect_url = request.META.get('HTTP_REFERER')</code></li>
+<li class="missed"><code> if redirect_url is None:</code></li>
+<li class="missed"><code> redirect_url = "/admin/%s/%s/" % (app_label, model_name)</code></li>
+<li class="ignored"><code></code></li>
+<li class="missed"><code> return HttpResponseRedirect(redirect_url)</code></li>
+ </ol>
+</div>
+
+<div class="nav">
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="permission.backends.authenticate_backend.html">permission.backends.authenticate_backend</a>
+</div>
+
+ </body>
+</html>
+
View
221 .coverage/modules/permission.backends.authenticate_backend.html
@@ -0,0 +1,221 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report: permission.backends.authenticate_backend</title>
+ <style type="text/css" media="screen">
+ a
+ {
+ color: #3d707a;
+ }
+
+ a:hover, a:active
+ {
+ color: #bf7d18;
+ }
+
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ .nav
+ {
+ font-size: 12px;
+ margin-left: 50px;
+ }
+
+ .ignored
+ {
+ color: #707070;
+ }
+
+ .executed
+ {
+ color: #3d9900;
+ }
+
+ .missed
+ {
+ color: red;
+ font-weight: bold;
+ }
+
+ .excluded
+ {
+ color: #6090f0;
+ font-weight: lighter;
+ }
+
+ #content-header
+ {
+ font-size: 12px;
+ padding: 18px 0 18px 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 16px;
+ margin: 10px 0 0 0;
+ color: #909090;
+ }
+
+ #module-name
+ {
+ color: #583707;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #content-header .normal
+ {
+ color: #609030;
+ }
+
+ #content-header .warning
+ {
+ color: #d0a000;
+ }
+
+ #content-header .critical
+ {
+ color: red;
+ }
+
+ #source-listing
+ {
+ margin-bottom: 24px;
+ }
+
+ #source-listing ol
+ {
+ padding: 0 0 0 50px;
+ width: 90%;
+ font-family: monospace;
+ list-style-position: outside;
+ }
+
+ #source-listing ol li
+ {
+ line-height: 18px;
+ font-size: small;
+ }
+
+ #source-listing ol code
+ {
+ padding: 0 .001em 0 0; /* Firefox doesn't render empty li's properly */
+ font-size: medium;
+ white-space: pre;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div class="nav">
+ <a href="permission.admin.views.html">permission.admin.views</a> &lt;&lt;
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="permission.backends.permission_backend.html">permission.backends.permission_backend</a>
+</div>
+
+<div id="content-header">
+ <h1>
+ <span id="module-name">permission.backends.authenticate_backend</span>:
+ 22 total statements,
+ <span class="warning">57.9% covered</span>
+ </h1>
+ <p>Generated: Thu 2012-03-01 10:30 CST</p>
+ <p>Source file: /home/alisue/Dropbox/Codes/django-permission/permission/backends/authenticate_backend.py</p>
+ <p>
+ Stats:
+ <span class="executed">11 executed</span>,
+ <span class="missed">8 missed</span>,
+ <span class="excluded">3 excluded</span>,
+ <span class="ignored">42 ignored</span>
+ </p>
+</div>
+
+<div id="source-listing">
+ <ol>
+ <li class="ignored"><code># vim: set fileencoding=utf-8 :</code></li>
+<li class="executed"><code>"""</code></li>
+<li class="ignored"><code>short module explanation</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>AUTHOR:</code></li>
+<li class="ignored"><code> lambdalisue[Ali su ae] (lambdalisue@hashnote.net)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>License:</code></li>
+<li class="ignored"><code> The MIT License (MIT)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Copyright (c) 2012 Alisue allright reserved.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Permission is hereby granted, free of charge, to any person obtaining a copy</code></li>
+<li class="ignored"><code> of this software and associated documentation files (the "Software"), to</code></li>
+<li class="ignored"><code> deal in the Software without restriction, including without limitation the</code></li>
+<li class="ignored"><code> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</code></li>
+<li class="ignored"><code> sell copies of the Software, and to permit persons to whom the Software is</code></li>
+<li class="ignored"><code> furnished to do so, subject to the following conditions:</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> The above copyright notice and this permission notice shall be included in</code></li>
+<li class="ignored"><code> all copies or substantial portions of the Software.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</code></li>
+<li class="ignored"><code> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</code></li>
+<li class="ignored"><code> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</code></li>
+<li class="ignored"><code> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</code></li>
+<li class="ignored"><code> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</code></li>
+<li class="ignored"><code> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</code></li>
+<li class="ignored"><code> IN THE SOFTWARE.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>"""</code></li>
+<li class="excluded"><code>from __future__ import with_statement</code></li>
+<li class="excluded"><code>from django.contrib.auth.backends import ModelBackend as AuthModelBackend</code></li>
+<li class="excluded"><code>from django.contrib.auth.backends import RemoteUserBackend as AuthRemoteUserBackend</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class ModelBackend(AuthModelBackend):</code></li>
+<li class="executed"><code> def get_group_permissions(self, user_obj, obj=None):</code></li>
+<li class="ignored"><code> """With django-permission, group permission is not available."""</code></li>
+<li class="missed"><code> return set()</code></li>
+<li class="executed"><code> def get_all_permissions(self, user_obj, obj=None):</code></li>
+<li class="ignored"><code> """with django-permission, user permission is not available."""</code></li>
+<li class="missed"><code> return set()</code></li>
+<li class="executed"><code> def has_perm(self, user_obj, perm, obj=None):</code></li>
+<li class="ignored"><code> """with django-permission, permission check is handled by PermissionBackend"""</code></li>
+<li class="missed"><code> return False</code></li>
+<li class="executed"><code> def has_module_perms(self, user_obj, app_label):</code></li>
+<li class="ignored"><code> """with django-permission, permission check is handled by PermissionBackend"""</code></li>
+<li class="missed"><code> return False</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class RemoteUserBackend(AuthRemoteUserBackend):</code></li>
+<li class="executed"><code> def get_group_permissions(self, user_obj, obj=None):</code></li>
+<li class="ignored"><code> """With django-permission, group permission is not available."""</code></li>
+<li class="missed"><code> return set()</code></li>
+<li class="executed"><code> def get_all_permissions(self, user_obj, obj=None):</code></li>
+<li class="ignored"><code> """with django-permission, user permission is not available."""</code></li>
+<li class="missed"><code> return set()</code></li>
+<li class="executed"><code> def has_perm(self, user_obj, perm, obj=None):</code></li>
+<li class="ignored"><code> """with django-permission, permission check is handled by PermissionBackend"""</code></li>
+<li class="missed"><code> return False</code></li>
+<li class="executed"><code> def has_module_perms(self, user_obj, app_label):</code></li>
+<li class="ignored"><code> """with django-permission, permission check is handled by PermissionBackend"""</code></li>
+<li class="missed"><code> return False</code></li>
+<li class="ignored"><code></code></li>
+ </ol>
+</div>
+
+<div class="nav">
+ <a href="permission.admin.views.html">permission.admin.views</a> &lt;&lt;
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="permission.backends.permission_backend.html">permission.backends.permission_backend</a>
+</div>
+
+ </body>
+</html>
+
View
244 .coverage/modules/permission.backends.permission_backend.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <title>Test coverage report: permission.backends.permission_backend</title>
+ <style type="text/css" media="screen">
+ a
+ {
+ color: #3d707a;
+ }
+
+ a:hover, a:active
+ {
+ color: #bf7d18;
+ }
+
+ body
+ {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ font-size: 13px;
+ }
+
+ .nav
+ {
+ font-size: 12px;
+ margin-left: 50px;
+ }
+
+ .ignored
+ {
+ color: #707070;
+ }
+
+ .executed
+ {
+ color: #3d9900;
+ }
+
+ .missed
+ {
+ color: red;
+ font-weight: bold;
+ }
+
+ .excluded
+ {
+ color: #6090f0;
+ font-weight: lighter;
+ }
+
+ #content-header
+ {
+ font-size: 12px;
+ padding: 18px 0 18px 50px;
+ }
+
+ #content-header h1
+ {
+ font-size: 16px;
+ margin: 10px 0 0 0;
+ color: #909090;
+ }
+
+ #module-name
+ {
+ color: #583707;
+ }
+
+ #content-header p
+ {
+ font-size: 13px;
+ margin: 0;
+ color: #909090;
+ }
+
+ #content-header .normal
+ {
+ color: #609030;
+ }
+
+ #content-header .warning
+ {
+ color: #d0a000;
+ }
+
+ #content-header .critical
+ {
+ color: red;
+ }
+
+ #source-listing
+ {
+ margin-bottom: 24px;
+ }
+
+ #source-listing ol
+ {
+ padding: 0 0 0 50px;
+ width: 90%;
+ font-family: monospace;
+ list-style-position: outside;
+ }
+
+ #source-listing ol li
+ {
+ line-height: 18px;
+ font-size: small;
+ }
+
+ #source-listing ol code
+ {
+ padding: 0 .001em 0 0; /* Firefox doesn't render empty li's properly */
+ font-size: medium;
+ white-space: pre;
+ }
+ </style>
+ </head>
+
+ <body>
+
+<div class="nav">
+ <a href="permission.backends.authenticate_backend.html">permission.backends.authenticate_backend</a> &lt;&lt;
+ <a href="../index.html">index</a>
+ &gt;&gt; <a href="permission.backends.role_backend.html">permission.backends.role_backend</a>
+</div>
+
+<div id="content-header">
+ <h1>
+ <span id="module-name">permission.backends.permission_backend</span>:
+ 22 total statements,
+ <span class="normal">75.0% covered</span>
+ </h1>
+ <p>Generated: Thu 2012-03-01 10:30 CST</p>
+ <p>Source file: /home/alisue/Dropbox/Codes/django-permission/permission/backends/permission_backend.py</p>
+ <p>
+ Stats:
+ <span class="executed">15 executed</span>,
+ <span class="missed">5 missed</span>,
+ <span class="excluded">2 excluded</span>,
+ <span class="ignored">65 ignored</span>
+ </p>
+</div>
+
+<div id="source-listing">
+ <ol>
+ <li class="ignored"><code># vim: set fileencoding=utf-8 :</code></li>
+<li class="executed"><code>"""</code></li>
+<li class="ignored"><code>Authentication backends for checking permissions</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>Method:</code></li>
+<li class="ignored"><code> get_permission_handler</code></li>
+<li class="ignored"><code> get permission handler of the model from registry</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>Class:</code></li>
+<li class="ignored"><code> PermissionBackend</code></li>
+<li class="ignored"><code> Authentication backend for checking permissions</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>AUTHOR:</code></li>
+<li class="ignored"><code> lambdalisue[Ali su ae] (lambdalisue@hashnote.net)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>License:</code></li>
+<li class="ignored"><code> The MIT License (MIT)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Copyright (c) 2012 Alisue allright reserved.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> Permission is hereby granted, free of charge, to any person obtaining a copy</code></li>
+<li class="ignored"><code> of this software and associated documentation files (the "Software"), to</code></li>
+<li class="ignored"><code> deal in the Software without restriction, including without limitation the</code></li>
+<li class="ignored"><code> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</code></li>
+<li class="ignored"><code> sell copies of the Software, and to permit persons to whom the Software is</code></li>
+<li class="ignored"><code> furnished to do so, subject to the following conditions:</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> The above copyright notice and this permission notice shall be included in</code></li>
+<li class="ignored"><code> all copies or substantial portions of the Software.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</code></li>
+<li class="ignored"><code> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</code></li>
+<li class="ignored"><code> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</code></li>
+<li class="ignored"><code> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</code></li>
+<li class="ignored"><code> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</code></li>
+<li class="ignored"><code> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS</code></li>
+<li class="ignored"><code> IN THE SOFTWARE.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code>"""</code></li>
+<li class="excluded"><code>from __future__ import with_statement</code></li>
+<li class="ignored"><code></code></li>
+<li class="excluded"><code>from permission.handlers import registry</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>__all__ = ('PermissionBackend',)</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code>class PermissionBackend(object):</code></li>
+<li class="ignored"><code> """Authentication backend for cheking permissions</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> This backend is used to check permissions. The permissions</code></li>
+<li class="ignored"><code> are handled with ``PermissionHandler`` which have to be registered in</code></li>
+<li class="ignored"><code> ``fluidpermission.handlers.registry`` before use.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> ``has_perm(user_obj, perm, obj=None)`` method of detected model's</code></li>
+<li class="ignored"><code> ``PermissionHandler`` will be used to cheking process.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> If no model was detected or no handler was registered, this backend</code></li>
+<li class="ignored"><code> does not touch that permission and return ``None`` to pass the permission</code></li>
+<li class="ignored"><code> checking process to downstream backends.</code></li>
+<li class="ignored"><code></code></li>
+<li class="ignored"><code> """</code></li>
+<li class="executed"><code> supports_object_permissions = True</code></li>
+<li class="executed"><code> supports_anonymous_user = True</code></li>
+<li class="executed"><code> supports_inactive_user = True</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code> def authenticate(self, username, password):</code></li>
+<li class="ignored"><code> """This backend is only for checking permission"""</code></li>
+<li class="executed"><code> return None</code></li>
+<li class="ignored"><code></code></li>
+<li class="executed"><code> def has_perm(self, user_obj, perm, obj=None):</code></li>
+<li class="ignored"><code> """check permission"""</code></li>
+<li class="ignored"><code> # get permission handlers fot this perm</code></li>
+<li class="executed"><code> handlers = registry.get_handlers(perm)</code></li>