Commit 3d4bb4b5 by Tom Christie

Ensure action kwargs properly handdled. Refs #940.

parent 6d2ca75d
/*
* jQuery Hotkeys Plugin
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Based upon the plugin by Tzury Bar Yochay:
* http://github.com/tzuryby/hotkeys
*
* Original idea by:
* Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
*/
(function(jQuery){
jQuery.hotkeys = {
version: "0.8",
specialKeys: {
8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause",
20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home",
37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del",
96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7",
104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/",
112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8",
120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta"
},
shiftNums: {
"`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&",
"8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<",
".": ">", "/": "?", "\\": "|"
}
};
function keyHandler( handleObj ) {
// Only care when a possible input has been specified
if ( typeof handleObj.data !== "string" ) {
return;
}
var origHandler = handleObj.handler,
keys = handleObj.data.toLowerCase().split(" ");
handleObj.handler = function( event ) {
// Don't fire in text-accepting inputs that we didn't directly bind to
if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) ||
event.target.type === "text") ) {
return;
}
// Keypress represents characters, not special keys
var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ],
character = String.fromCharCode( event.which ).toLowerCase(),
key, modif = "", possible = {};
// check combinations (alt|ctrl|shift+anything)
if ( event.altKey && special !== "alt" ) {
modif += "alt+";
}
if ( event.ctrlKey && special !== "ctrl" ) {
modif += "ctrl+";
}
// TODO: Need to make sure this works consistently across platforms
if ( event.metaKey && !event.ctrlKey && special !== "meta" ) {
modif += "meta+";
}
if ( event.shiftKey && special !== "shift" ) {
modif += "shift+";
}
if ( special ) {
possible[ modif + special ] = true;
} else {
possible[ modif + character ] = true;
possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true;
// "$" can be triggered as "Shift+4" or "Shift+$" or just "$"
if ( modif === "shift+" ) {
possible[ jQuery.hotkeys.shiftNums[ character ] ] = true;
}
}
for ( var i = 0, l = keys.length; i < l; i++ ) {
if ( possible[ keys[i] ] ) {
return origHandler.apply( this, arguments );
}
}
};
}
jQuery.each([ "keydown", "keyup", "keypress" ], function() {
jQuery.event.special[ this ] = { add: keyHandler };
});
})( jQuery );
/* Copyright (c) 2010
* @author Laurence Wheway
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*
* @version 1.2.0
*/
(function($) {
jQuery.extend({
isOnScreen: function(box, container) {
//ensure numbers come in as intgers (not strings) and remove 'px' is it's there
for(var i in box){box[i] = parseFloat(box[i])};
for(var i in container){container[i] = parseFloat(container[i])};
if(!container){
container = {
left: $(window).scrollLeft(),
top: $(window).scrollTop(),
width: $(window).width(),
height: $(window).height()
}
}
if( box.left+box.width-container.left > 0 &&
box.left < container.width+container.left &&
box.top+box.height-container.top > 0 &&
box.top < container.height+container.top
) return true;
return false;
}
})
jQuery.fn.isOnScreen = function (container) {
for(var i in container){container[i] = parseFloat(container[i])};
if(!container){
container = {
left: $(window).scrollLeft(),
top: $(window).scrollTop(),
width: $(window).width(),
height: $(window).height()
}
}
if( $(this).offset().left+$(this).width()-container.left > 0 &&
$(this).offset().left < container.width+container.left &&
$(this).offset().top+$(this).height()-container.top > 0 &&
$(this).offset().top < container.height+container.top
) return true;
return false;
}
})(jQuery);
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for rest_framework/__init__: 100%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>rest_framework/__init__</b> :
<span class='pc_cov'>100%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
4 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>4 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>0 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='stm run hide_run'><a href='#n1'>1</a></p>
<p id='n2' class='pln'><a href='#n2'>2</a></p>
<p id='n3' class='stm run hide_run'><a href='#n3'>3</a></p>
<p id='n4' class='pln'><a href='#n4'>4</a></p>
<p id='n5' class='pln'><a href='#n5'>5</a></p>
<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p>
<p id='n7' class='pln'><a href='#n7'>7</a></p>
<p id='n8' class='pln'><a href='#n8'>8</a></p>
<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='stm run hide_run'><span class='nam'>__version__</span> <span class='op'>=</span> <span class='str'>&#39;2.3.5&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t2' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3' class='stm run hide_run'><span class='nam'>VERSION</span> <span class='op'>=</span> <span class='nam'>__version__</span>&nbsp; <span class='com'># synonym</span><span class='strut'>&nbsp;</span></p>
<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t5' class='pln'><span class='com'># Header encoding (see RFC5987)</span><span class='strut'>&nbsp;</span></p>
<p id='t6' class='stm run hide_run'><span class='nam'>HTTP_HEADER_ENCODING</span> <span class='op'>=</span> <span class='str'>&#39;iso-8859-1&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t7' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t8' class='pln'><span class='com'># Default datetime input and output formats</span><span class='strut'>&nbsp;</span></p>
<p id='t9' class='stm run hide_run'><span class='nam'>ISO_8601</span> <span class='op'>=</span> <span class='str'>&#39;iso-8601&#39;</span><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for rest_framework/authtoken/__init__: 100%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>rest_framework/authtoken/__init__</b> :
<span class='pc_cov'>100%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
0 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>0 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>0 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
</td>
<td class='text' valign='top'>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for rest_framework/authtoken/serializers: 88%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>rest_framework/authtoken/serializers</b> :
<span class='pc_cov'>88%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
17 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>15 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>2 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='stm run hide_run'><a href='#n1'>1</a></p>
<p id='n2' class='stm run hide_run'><a href='#n2'>2</a></p>
<p id='n3' class='pln'><a href='#n3'>3</a></p>
<p id='n4' class='pln'><a href='#n4'>4</a></p>
<p id='n5' class='stm run hide_run'><a href='#n5'>5</a></p>
<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p>
<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p>
<p id='n8' class='pln'><a href='#n8'>8</a></p>
<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p>
<p id='n10' class='stm run hide_run'><a href='#n10'>10</a></p>
<p id='n11' class='stm run hide_run'><a href='#n11'>11</a></p>
<p id='n12' class='pln'><a href='#n12'>12</a></p>
<p id='n13' class='stm run hide_run'><a href='#n13'>13</a></p>
<p id='n14' class='stm run hide_run'><a href='#n14'>14</a></p>
<p id='n15' class='pln'><a href='#n15'>15</a></p>
<p id='n16' class='stm run hide_run'><a href='#n16'>16</a></p>
<p id='n17' class='stm run hide_run'><a href='#n17'>17</a></p>
<p id='n18' class='stm mis'><a href='#n18'>18</a></p>
<p id='n19' class='stm run hide_run'><a href='#n19'>19</a></p>
<p id='n20' class='stm run hide_run'><a href='#n20'>20</a></p>
<p id='n21' class='pln'><a href='#n21'>21</a></p>
<p id='n22' class='stm run hide_run'><a href='#n22'>22</a></p>
<p id='n23' class='pln'><a href='#n23'>23</a></p>
<p id='n24' class='stm mis'><a href='#n24'>24</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>django</span><span class='op'>.</span><span class='nam'>contrib</span><span class='op'>.</span><span class='nam'>auth</span> <span class='key'>import</span> <span class='nam'>authenticate</span><span class='strut'>&nbsp;</span></p>
<p id='t2' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>rest_framework</span> <span class='key'>import</span> <span class='nam'>serializers</span><span class='strut'>&nbsp;</span></p>
<p id='t3' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t5' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>AuthTokenSerializer</span><span class='op'>(</span><span class='nam'>serializers</span><span class='op'>.</span><span class='nam'>Serializer</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t6' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>serializers</span><span class='op'>.</span><span class='nam'>CharField</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t7' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>serializers</span><span class='op'>.</span><span class='nam'>CharField</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t8' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t9' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>validate</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>attrs</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t10' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>username</span> <span class='op'>=</span> <span class='nam'>attrs</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;username&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t11' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>password</span> <span class='op'>=</span> <span class='nam'>attrs</span><span class='op'>.</span><span class='nam'>get</span><span class='op'>(</span><span class='str'>&#39;password&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t12' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t13' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>username</span> <span class='key'>and</span> <span class='nam'>password</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t14' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>user</span> <span class='op'>=</span> <span class='nam'>authenticate</span><span class='op'>(</span><span class='nam'>username</span><span class='op'>=</span><span class='nam'>username</span><span class='op'>,</span> <span class='nam'>password</span><span class='op'>=</span><span class='nam'>password</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t15' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t16' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>user</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t17' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>user</span><span class='op'>.</span><span class='nam'>is_active</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t18' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>serializers</span><span class='op'>.</span><span class='nam'>ValidationError</span><span class='op'>(</span><span class='str'>&#39;User account is disabled.&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t19' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>attrs</span><span class='op'>[</span><span class='str'>&#39;user&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>user</span><span class='strut'>&nbsp;</span></p>
<p id='t20' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>attrs</span><span class='strut'>&nbsp;</span></p>
<p id='t21' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t22' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>serializers</span><span class='op'>.</span><span class='nam'>ValidationError</span><span class='op'>(</span><span class='str'>&#39;Unable to login with provided credentials.&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t23' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t24' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>serializers</span><span class='op'>.</span><span class='nam'>ValidationError</span><span class='op'>(</span><span class='str'>&#39;Must include &quot;username&quot; and &quot;password&quot;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for rest_framework/models: 100%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>rest_framework/models</b> :
<span class='pc_cov'>100%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
0 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>0 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>0 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='pln'><a href='#n1'>1</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='pln'><span class='com'># Just to keep things like ./manage.py test happy</span><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for rest_framework/reverse: 75%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>rest_framework/reverse</b> :
<span class='pc_cov'>75%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
12 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>9 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>3 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='pln'><a href='#n1'>1</a></p>
<p id='n2' class='pln'><a href='#n2'>2</a></p>
<p id='n3' class='pln'><a href='#n3'>3</a></p>
<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p>
<p id='n5' class='stm run hide_run'><a href='#n5'>5</a></p>
<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p>
<p id='n7' class='pln'><a href='#n7'>7</a></p>
<p id='n8' class='pln'><a href='#n8'>8</a></p>
<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p>
<p id='n10' class='pln'><a href='#n10'>10</a></p>
<p id='n11' class='pln'><a href='#n11'>11</a></p>
<p id='n12' class='pln'><a href='#n12'>12</a></p>
<p id='n13' class='pln'><a href='#n13'>13</a></p>
<p id='n14' class='stm run hide_run'><a href='#n14'>14</a></p>
<p id='n15' class='stm mis'><a href='#n15'>15</a></p>
<p id='n16' class='stm mis'><a href='#n16'>16</a></p>
<p id='n17' class='stm run hide_run'><a href='#n17'>17</a></p>
<p id='n18' class='stm run hide_run'><a href='#n18'>18</a></p>
<p id='n19' class='stm run hide_run'><a href='#n19'>19</a></p>
<p id='n20' class='stm mis'><a href='#n20'>20</a></p>
<p id='n21' class='pln'><a href='#n21'>21</a></p>
<p id='n22' class='pln'><a href='#n22'>22</a></p>
<p id='n23' class='stm run hide_run'><a href='#n23'>23</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2' class='pln'><span class='str'>Provide reverse functions that return fully qualified URLs</span><span class='strut'>&nbsp;</span></p>
<p id='t3' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t4' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>__future__</span> <span class='key'>import</span> <span class='nam'>unicode_literals</span><span class='strut'>&nbsp;</span></p>
<p id='t5' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>django</span><span class='op'>.</span><span class='nam'>core</span><span class='op'>.</span><span class='nam'>urlresolvers</span> <span class='key'>import</span> <span class='nam'>reverse</span> <span class='key'>as</span> <span class='nam'>django_reverse</span><span class='strut'>&nbsp;</span></p>
<p id='t6' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>django</span><span class='op'>.</span><span class='nam'>utils</span><span class='op'>.</span><span class='nam'>functional</span> <span class='key'>import</span> <span class='nam'>lazy</span><span class='strut'>&nbsp;</span></p>
<p id='t7' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t8' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t9' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>reverse</span><span class='op'>(</span><span class='nam'>viewname</span><span class='op'>,</span> <span class='nam'>args</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>kwargs</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>request</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>format</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>extra</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t10' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t11' class='pln'><span class='str'>&nbsp; &nbsp; Same as `django.core.urlresolvers.reverse`, but optionally takes a request</span><span class='strut'>&nbsp;</span></p>
<p id='t12' class='pln'><span class='str'>&nbsp; &nbsp; and returns a fully qualified URL, using the request to get the base URL.</span><span class='strut'>&nbsp;</span></p>
<p id='t13' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t14' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>format</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t15' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>kwargs</span> <span class='op'>=</span> <span class='nam'>kwargs</span> <span class='key'>or</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t16' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>kwargs</span><span class='op'>[</span><span class='str'>&#39;format&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>format</span><span class='strut'>&nbsp;</span></p>
<p id='t17' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>url</span> <span class='op'>=</span> <span class='nam'>django_reverse</span><span class='op'>(</span><span class='nam'>viewname</span><span class='op'>,</span> <span class='nam'>args</span><span class='op'>=</span><span class='nam'>args</span><span class='op'>,</span> <span class='nam'>kwargs</span><span class='op'>=</span><span class='nam'>kwargs</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>extra</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t18' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>request</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t19' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>request</span><span class='op'>.</span><span class='nam'>build_absolute_uri</span><span class='op'>(</span><span class='nam'>url</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t20' class='stm mis'>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>url</span><span class='strut'>&nbsp;</span></p>
<p id='t21' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t22' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t23' class='stm run hide_run'><span class='nam'>reverse_lazy</span> <span class='op'>=</span> <span class='nam'>lazy</span><span class='op'>(</span><span class='nam'>reverse</span><span class='op'>,</span> <span class='nam'>str</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for rest_framework/urls: 100%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>rest_framework/urls</b> :
<span class='pc_cov'>100%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
4 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>4 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>0 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='pln'><a href='#n1'>1</a></p>
<p id='n2' class='pln'><a href='#n2'>2</a></p>
<p id='n3' class='pln'><a href='#n3'>3</a></p>
<p id='n4' class='pln'><a href='#n4'>4</a></p>
<p id='n5' class='pln'><a href='#n5'>5</a></p>
<p id='n6' class='pln'><a href='#n6'>6</a></p>
<p id='n7' class='pln'><a href='#n7'>7</a></p>
<p id='n8' class='pln'><a href='#n8'>8</a></p>
<p id='n9' class='pln'><a href='#n9'>9</a></p>
<p id='n10' class='pln'><a href='#n10'>10</a></p>
<p id='n11' class='pln'><a href='#n11'>11</a></p>
<p id='n12' class='pln'><a href='#n12'>12</a></p>
<p id='n13' class='pln'><a href='#n13'>13</a></p>
<p id='n14' class='pln'><a href='#n14'>14</a></p>
<p id='n15' class='stm run hide_run'><a href='#n15'>15</a></p>
<p id='n16' class='stm run hide_run'><a href='#n16'>16</a></p>
<p id='n17' class='pln'><a href='#n17'>17</a></p>
<p id='n18' class='pln'><a href='#n18'>18</a></p>
<p id='n19' class='stm run hide_run'><a href='#n19'>19</a></p>
<p id='n20' class='pln'><a href='#n20'>20</a></p>
<p id='n21' class='stm run hide_run'><a href='#n21'>21</a></p>
<p id='n22' class='pln'><a href='#n22'>22</a></p>
<p id='n23' class='pln'><a href='#n23'>23</a></p>
<p id='n24' class='pln'><a href='#n24'>24</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2' class='pln'><span class='str'>Login and logout views for the browsable API.</span><span class='strut'>&nbsp;</span></p>
<p id='t3' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t4' class='pln'><span class='str'>Add these to your root URLconf if you&#39;re using the browsable API and</span><span class='strut'>&nbsp;</span></p>
<p id='t5' class='pln'><span class='str'>your API requires authentication.</span><span class='strut'>&nbsp;</span></p>
<p id='t6' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t7' class='pln'><span class='str'>The urls must be namespaced as &#39;rest_framework&#39;, and you should make sure</span><span class='strut'>&nbsp;</span></p>
<p id='t8' class='pln'><span class='str'>your authentication settings include `SessionAuthentication`.</span><span class='strut'>&nbsp;</span></p>
<p id='t9' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t10' class='pln'><span class='str'>&nbsp; &nbsp; urlpatterns = patterns(&#39;&#39;,</span><span class='strut'>&nbsp;</span></p>
<p id='t11' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; ...</span><span class='strut'>&nbsp;</span></p>
<p id='t12' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; url(r&#39;^auth&#39;, include(&#39;rest_framework.urls&#39;, namespace=&#39;rest_framework&#39;))</span><span class='strut'>&nbsp;</span></p>
<p id='t13' class='pln'><span class='str'>&nbsp; &nbsp; )</span><span class='strut'>&nbsp;</span></p>
<p id='t14' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t15' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>__future__</span> <span class='key'>import</span> <span class='nam'>unicode_literals</span><span class='strut'>&nbsp;</span></p>
<p id='t16' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>rest_framework</span><span class='op'>.</span><span class='nam'>compat</span> <span class='key'>import</span> <span class='nam'>patterns</span><span class='op'>,</span> <span class='nam'>url</span><span class='strut'>&nbsp;</span></p>
<p id='t17' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t18' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t19' class='stm run hide_run'><span class='nam'>template_name</span> <span class='op'>=</span> <span class='op'>{</span><span class='str'>&#39;template_name&#39;</span><span class='op'>:</span> <span class='str'>&#39;rest_framework/login.html&#39;</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t20' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t21' class='stm run hide_run'><span class='nam'>urlpatterns</span> <span class='op'>=</span> <span class='nam'>patterns</span><span class='op'>(</span><span class='str'>&#39;django.contrib.auth.views&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t22' class='pln'>&nbsp; &nbsp; <span class='nam'>url</span><span class='op'>(</span><span class='str'>r&#39;^login/$&#39;</span><span class='op'>,</span> <span class='str'>&#39;login&#39;</span><span class='op'>,</span> <span class='nam'>template_name</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>=</span><span class='str'>&#39;login&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t23' class='pln'>&nbsp; &nbsp; <span class='nam'>url</span><span class='op'>(</span><span class='str'>r&#39;^logout/$&#39;</span><span class='op'>,</span> <span class='str'>&#39;logout&#39;</span><span class='op'>,</span> <span class='nam'>template_name</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>=</span><span class='str'>&#39;logout&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t24' class='pln'><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for rest_framework/utils/__init__: 100%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>rest_framework/utils/__init__</b> :
<span class='pc_cov'>100%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
0 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>0 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>0 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
</td>
<td class='text' valign='top'>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
/* CSS styles for Coverage. */
/* Page-wide styles */
html, body, h1, h2, h3, p, td, th {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-weight: inherit;
font-style: inherit;
font-size: 100%;
font-family: inherit;
vertical-align: baseline;
}
/* Set baseline grid to 16 pt. */
body {
font-family: georgia, serif;
font-size: 1em;
}
html>body {
font-size: 16px;
}
/* Set base font size to 12/16 */
p {
font-size: .75em; /* 12/16 */
line-height: 1.3333em; /* 16/12 */
}
table {
border-collapse: collapse;
}
a.nav {
text-decoration: none;
color: inherit;
}
a.nav:hover {
text-decoration: underline;
color: inherit;
}
/* Page structure */
#header {
background: #f8f8f8;
width: 100%;
border-bottom: 1px solid #eee;
}
#source {
padding: 1em;
font-family: "courier new", monospace;
}
#indexfile #footer {
margin: 1em 3em;
}
#pyfile #footer {
margin: 1em 1em;
}
#footer .content {
padding: 0;
font-size: 85%;
font-family: verdana, sans-serif;
color: #666666;
font-style: italic;
}
#index {
margin: 1em 0 0 3em;
}
/* Header styles */
#header .content {
padding: 1em 3em;
}
h1 {
font-size: 1.25em;
}
h2.stats {
margin-top: .5em;
font-size: 1em;
}
.stats span {
border: 1px solid;
padding: .1em .25em;
margin: 0 .1em;
cursor: pointer;
border-color: #999 #ccc #ccc #999;
}
.stats span.hide_run, .stats span.hide_exc,
.stats span.hide_mis, .stats span.hide_par,
.stats span.par.hide_run.hide_par {
border-color: #ccc #999 #999 #ccc;
}
.stats span.par.hide_run {
border-color: #999 #ccc #ccc #999;
}
/* Help panel */
#keyboard_icon {
float: right;
cursor: pointer;
}
.help_panel {
position: absolute;
background: #ffc;
padding: .5em;
border: 1px solid #883;
display: none;
}
#indexfile .help_panel {
width: 20em; height: 4em;
}
#pyfile .help_panel {
width: 16em; height: 8em;
}
.help_panel .legend {
font-style: italic;
margin-bottom: 1em;
}
#panel_icon {
float: right;
cursor: pointer;
}
.keyhelp {
margin: .75em;
}
.keyhelp .key {
border: 1px solid black;
border-color: #888 #333 #333 #888;
padding: .1em .35em;
font-family: monospace;
font-weight: bold;
background: #eee;
}
/* Source file styles */
.linenos p {
text-align: right;
margin: 0;
padding: 0 .5em;
color: #999999;
font-family: verdana, sans-serif;
font-size: .625em; /* 10/16 */
line-height: 1.6em; /* 16/10 */
}
.linenos p.highlight {
background: #ffdd00;
}
.linenos p a {
text-decoration: none;
color: #999999;
}
.linenos p a:hover {
text-decoration: underline;
color: #999999;
}
td.text {
width: 100%;
}
.text p {
margin: 0;
padding: 0 0 0 .5em;
border-left: 2px solid #ffffff;
white-space: nowrap;
}
.text p.mis {
background: #ffdddd;
border-left: 2px solid #ff0000;
}
.text p.run, .text p.run.hide_par {
background: #ddffdd;
border-left: 2px solid #00ff00;
}
.text p.exc {
background: #eeeeee;
border-left: 2px solid #808080;
}
.text p.par, .text p.par.hide_run {
background: #ffffaa;
border-left: 2px solid #eeee99;
}
.text p.hide_run, .text p.hide_exc, .text p.hide_mis, .text p.hide_par,
.text p.hide_run.hide_par {
background: inherit;
}
.text span.annotate {
font-family: georgia;
font-style: italic;
color: #666;
float: right;
padding-right: .5em;
}
.text p.hide_par span.annotate {
display: none;
}
/* Syntax coloring */
.text .com {
color: green;
font-style: italic;
line-height: 1px;
}
.text .key {
font-weight: bold;
line-height: 1px;
}
.text .str {
color: #000080;
}
/* index styles */
#index td, #index th {
text-align: right;
width: 5em;
padding: .25em .5em;
border-bottom: 1px solid #eee;
}
#index th {
font-style: italic;
color: #333;
border-bottom: 1px solid #ccc;
cursor: pointer;
}
#index th:hover {
background: #eee;
border-bottom: 1px solid #999;
}
#index td.left, #index th.left {
padding-left: 0;
}
#index td.right, #index th.right {
padding-right: 0;
}
#index th.headerSortDown, #index th.headerSortUp {
border-bottom: 1px solid #000;
}
#index td.name, #index th.name {
text-align: left;
width: auto;
}
#index td.name a {
text-decoration: none;
color: #000;
}
#index td.name a:hover {
text-decoration: underline;
color: #000;
}
#index tr.total {
}
#index tr.total td {
font-weight: bold;
border-top: 1px solid #ccc;
border-bottom: none;
}
#index tr.file:hover {
background: #eeeeee;
}
...@@ -2,7 +2,7 @@ from __future__ import unicode_literals ...@@ -2,7 +2,7 @@ from __future__ import unicode_literals
from django.db import models from django.db import models
from django.test import TestCase from django.test import TestCase
from django.test.client import RequestFactory from django.test.client import RequestFactory
from rest_framework import serializers, viewsets from rest_framework import serializers, viewsets, permissions
from rest_framework.compat import include, patterns, url from rest_framework.compat import include, patterns, url
from rest_framework.decorators import link, action from rest_framework.decorators import link, action
from rest_framework.response import Response from rest_framework.response import Response
...@@ -120,7 +120,7 @@ class TestCustomLookupFields(TestCase): ...@@ -120,7 +120,7 @@ class TestCustomLookupFields(TestCase):
) )
class TestTrailingSlash(TestCase): class TestTrailingSlashIncluded(TestCase):
def setUp(self): def setUp(self):
class NoteViewSet(viewsets.ModelViewSet): class NoteViewSet(viewsets.ModelViewSet):
model = RouterTestModel model = RouterTestModel
...@@ -135,7 +135,7 @@ class TestTrailingSlash(TestCase): ...@@ -135,7 +135,7 @@ class TestTrailingSlash(TestCase):
self.assertEqual(expected[idx], self.urls[idx].regex.pattern) self.assertEqual(expected[idx], self.urls[idx].regex.pattern)
class TestTrailingSlash(TestCase): class TestTrailingSlashRemoved(TestCase):
def setUp(self): def setUp(self):
class NoteViewSet(viewsets.ModelViewSet): class NoteViewSet(viewsets.ModelViewSet):
model = RouterTestModel model = RouterTestModel
...@@ -149,6 +149,7 @@ class TestTrailingSlash(TestCase): ...@@ -149,6 +149,7 @@ class TestTrailingSlash(TestCase):
for idx in range(len(expected)): for idx in range(len(expected)):
self.assertEqual(expected[idx], self.urls[idx].regex.pattern) self.assertEqual(expected[idx], self.urls[idx].regex.pattern)
class TestNameableRoot(TestCase): class TestNameableRoot(TestCase):
def setUp(self): def setUp(self):
class NoteViewSet(viewsets.ModelViewSet): class NoteViewSet(viewsets.ModelViewSet):
...@@ -162,3 +163,31 @@ class TestNameableRoot(TestCase): ...@@ -162,3 +163,31 @@ class TestNameableRoot(TestCase):
expected = 'nameable-root' expected = 'nameable-root'
self.assertEqual(expected, self.urls[0].name) self.assertEqual(expected, self.urls[0].name)
class TestActionKeywordArgs(TestCase):
"""
Ensure keyword arguments passed in the `@action` decorator
are properly handled. Refs #940.
"""
def setUp(self):
class TestViewSet(viewsets.ModelViewSet):
permission_classes = []
@action(permission_classes=[permissions.AllowAny])
def custom(self, request, *args, **kwargs):
return Response({
'permission_classes': self.permission_classes
})
self.router = SimpleRouter()
self.router.register(r'test', TestViewSet, base_name='test')
self.view = self.router.urls[-1].callback
def test_action_kwargs(self):
request = factory.post('/test/0/custom/')
response = self.view(request)
self.assertEqual(
response.data,
{'permission_classes': [permissions.AllowAny]}
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment