Skip to content

Instantly share code, notes, and snippets.

@cdrini
Last active December 23, 2017 01:30
Show Gist options
  • Save cdrini/b93f021e83065ddaf1b9b0f83dafcf83 to your computer and use it in GitHub Desktop.
Save cdrini/b93f021e83065ddaf1b9b0f83dafcf83 to your computer and use it in GitHub Desktop.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="NONE,NOARCHIVE" />
<title>&lt;type &#39;exceptions.AttributeError&#39;&gt; at /</title>
<style type="text/css">
html * { padding:0; margin:0; }
body * { padding:10px 20px; }
body * * { padding:0; }
body { font:small sans-serif; }
body>div { border-bottom:1px solid #ddd; }
h1 { font-weight:normal; }
h2 { margin-bottom:.8em; }
h2 span { font-size:80%; color:#666; font-weight:normal; }
h3 { margin:1em 0 .5em 0; }
h4 { margin:0 0 .5em 0; font-weight: normal; }
table {
border:1px solid #ccc; border-collapse: collapse; background:white; }
tbody td, tbody th { vertical-align:top; padding:2px 3px; }
thead th {
padding:1px 6px 1px 3px; background:#fefefe; text-align:left;
font-weight:normal; font-size:11px; border:1px solid #ddd; }
tbody th { text-align:right; color:#666; padding-right:.5em; }
table.vars { margin:5px 0 2px 40px; }
table.vars td, table.req td { font-family:monospace; }
table td.code { width:100%;}
table td.code div { overflow:hidden; }
table.source th { color:#666; }
table.source td {
font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }
ul.traceback { list-style-type:none; }
ul.traceback li.frame { margin-bottom:1em; }
div.context { margin: 10px 0; }
div.context ol {
padding-left:30px; margin:0 10px; list-style-position: inside; }
div.context ol li {
font-family:monospace; white-space:pre; color:#666; cursor:pointer; }
div.context ol.context-line li { color:black; background-color:#ccc; }
div.context ol.context-line li span { float: right; }
div.commands { margin-left: 40px; }
div.commands a { color:black; text-decoration:none; }
#summary { background: #ffc; }
#summary h2 { font-weight: normal; color: #666; }
#explanation { background:#eee; }
#template, #template-not-exist { background:#f6f6f6; }
#template-not-exist ul { margin: 0 0 0 20px; }
#traceback { background:#eee; }
#requestinfo { background:#f6f6f6; padding-left:120px; }
#summary table { border:none; background:transparent; }
#requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }
#requestinfo h3 { margin-bottom:-1em; }
.error { background: #ffc; }
.specific { color:#cc3300; font-weight:bold; }
</style>
<script type="text/javascript">
//<!--
function getElementsByClassName(oElm, strTagName, strClassName){
// Written by Jonathan Snook, http://www.snook.ca/jon;
// Add-ons by Robert Nyman, http://www.robertnyman.com
var arrElements = (strTagName == "*" && document.all)? document.all :
oElm.getElementsByTagName(strTagName);
var arrReturnElements = new Array();
strClassName = strClassName.replace(/\-/g, "\-");
var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");
var oElement;
for(var i=0; i<arrElements.length; i++){
oElement = arrElements[i];
if(oRegExp.test(oElement.className)){
arrReturnElements.push(oElement);
}
}
return (arrReturnElements)
}
function hideAll(elems) {
for (var e = 0; e < elems.length; e++) {
elems[e].style.display = 'none';
}
}
window.onload = function() {
hideAll(getElementsByClassName(document, 'table', 'vars'));
hideAll(getElementsByClassName(document, 'ol', 'pre-context'));
hideAll(getElementsByClassName(document, 'ol', 'post-context'));
}
function toggle() {
for (var i = 0; i < arguments.length; i++) {
var e = document.getElementById(arguments[i]);
if (e) {
e.style.display = e.style.display == 'none' ? 'block' : 'none';
}
}
return false;
}
function varToggle(link, id) {
toggle('v' + id);
var s = link.getElementsByTagName('span')[0];
var uarr = String.fromCharCode(0x25b6);
var darr = String.fromCharCode(0x25bc);
s.innerHTML = s.innerHTML == uarr ? darr : uarr;
return false;
}
//-->
</script>
</head>
<body>
<div id="summary">
<h1>&lt;type &#39;exceptions.AttributeError&#39;&gt; at /</h1>
<h2>&#39;NoneType&#39; object has no attribute &#39;members&#39;</h2>
<table><tr>
<th>Python</th>
<td>/openlibrary/infogami/utils/features.py in get_members, line 63</td>
</tr><tr>
<th>Web</th>
<td>GET http://localhost:8080/</td>
</tr></table>
</div>
<div id="traceback">
<h2>Traceback <span>(innermost first)</span></h2>
<ul class="traceback">
<li class="frame">
<code>/openlibrary/infogami/utils/features.py</code> in <code>get_members</code>
<div class="context" id="c139787015232904">
<ol start="56" class="pre-context" id="pre139787015232904">
<li onclick="toggle('pre139787015232904', 'post139787015232904')"> </li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')">def filter_admin():</li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')"> return filter_usergroup(&quot;/usergroup/admin&quot;)</li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')"> </li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')">def filter_usergroup(usergroup):</li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')"> &quot;&quot;&quot;Returns true if the current user is member of the given usergroup.&quot;&quot;&quot;</li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')"> def get_members():</li>
</ol>
<ol start="63" class="context-line"><li onclick="toggle('pre139787015232904', 'post139787015232904')"> return [m.key for m in web.ctx.site.get(usergroup).members] <span>...</span></li></ol>
<ol start='64' class="post-context" id="post139787015232904">
<li onclick="toggle('pre139787015232904', 'post139787015232904')"> </li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')"> return context.user and context.user.key in get_members()</li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')"> </li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')">def filter_queryparam(name, value):</li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')"> &quot;&quot;&quot;Returns true if the current request has a queryparam with given name and value.&quot;&quot;&quot;</li>
<li onclick="toggle('pre139787015232904', 'post139787015232904')"> i = web.input(_method=&quot;GET&quot;)</li>
</ol>
</div>
<div class="commands">
<a href='#' onclick="return varToggle(this, '139787015232904')"><span>&#x25b6;</span> Local vars</a>
</div>
<table class="vars"
id="v139787015232904"
><thead><tr><th>Variable</th><th>Value</th></tr></thead>
<tbody>
<tr><td>usergroup</td><td class="code"><div>&#39;/usergroup/librarians&#39;</div></td></tr>
</tbody>
</table>
</li>
<li class="frame">
<code>/openlibrary/infogami/utils/features.py</code> in <code>filter_usergroup</code>
<div class="context" id="c139787015232832">
<ol start="58" class="pre-context" id="pre139787015232832">
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> return filter_usergroup(&quot;/usergroup/admin&quot;)</li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> </li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')">def filter_usergroup(usergroup):</li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> &quot;&quot;&quot;Returns true if the current user is member of the given usergroup.&quot;&quot;&quot;</li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> def get_members():</li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> return [m.key for m in web.ctx.site.get(usergroup).members]</li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> </li>
</ol>
<ol start="65" class="context-line"><li onclick="toggle('pre139787015232832', 'post139787015232832')"> return context.user and context.user.key in get_members() <span>...</span></li></ol>
<ol start='66' class="post-context" id="post139787015232832">
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> </li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')">def filter_queryparam(name, value):</li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> &quot;&quot;&quot;Returns true if the current request has a queryparam with given name and value.&quot;&quot;&quot;</li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> i = web.input(_method=&quot;GET&quot;)</li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> return i.get(name) == value</li>
<li onclick="toggle('pre139787015232832', 'post139787015232832')"> </li>
</ol>
</div>
<div class="commands">
<a href='#' onclick="return varToggle(this, '139787015232832')"><span>&#x25b6;</span> Local vars</a>
</div>
<table class="vars"
id="v139787015232832"
><thead><tr><th>Variable</th><th>Value</th></tr></thead>
<tbody>
<tr><td>get_members</td><td class="code"><div>&lt;function get_members at 0x7f22b416a2a8&gt;</div></td></tr>
<tr><td>usergroup</td><td class="code"><div>&#39;/usergroup/librarians&#39;</div></td></tr>
</tbody>
</table>
</li>
<li class="frame">
<code>/openlibrary/infogami/utils/features.py</code> in <code>call_filter</code>
<div class="context" id="c139787015231896">
<ol start="24" class="pre-context" id="pre139787015231896">
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> filter_name = spec.pop(&#39;filter&#39;, None)</li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> kwargs = spec</li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> else:</li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> filter_name = spec</li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> kwargs = {}</li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> </li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> if filter_name in filters:</li>
</ol>
<ol start="31" class="context-line"><li onclick="toggle('pre139787015231896', 'post139787015231896')"> return filters[filter_name](**kwargs) <span>...</span></li></ol>
<ol start='32' class="post-context" id="post139787015231896">
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> else:</li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> return False</li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> </li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')">def find_enabled_features():</li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> return set(f for f, spec in feature_flags.iteritems() if call_filter(spec))</li>
<li onclick="toggle('pre139787015231896', 'post139787015231896')"> </li>
</ol>
</div>
<div class="commands">
<a href='#' onclick="return varToggle(this, '139787015231896')"><span>&#x25b6;</span> Local vars</a>
</div>
<table class="vars"
id="v139787015231896"
><thead><tr><th>Variable</th><th>Value</th></tr></thead>
<tbody>
<tr><td>filter_name</td><td class="code"><div>&#39;usergroup&#39;</div></td></tr>
<tr><td>kwargs</td><td class="code"><div>{&#39;usergroup&#39;: &#39;/usergroup/librarians&#39;}</div></td></tr>
<tr><td>spec</td><td class="code"><div>{&#39;usergroup&#39;: &#39;/usergroup/librarians&#39;}</div></td></tr>
</tbody>
</table>
</li>
<li class="frame">
<code>/openlibrary/infogami/utils/features.py</code> in <code>&lt;genexpr&gt;</code>
<div class="context" id="c139787015233192">
<ol start="29" class="pre-context" id="pre139787015233192">
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> </li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> if filter_name in filters:</li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> return filters[filter_name](**kwargs)</li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> else:</li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> return False</li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> </li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')">def find_enabled_features():</li>
</ol>
<ol start="36" class="context-line"><li onclick="toggle('pre139787015233192', 'post139787015233192')"> return set(f for f, spec in feature_flags.iteritems() if call_filter(spec)) <span>...</span></li></ol>
<ol start='37' class="post-context" id="post139787015233192">
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> </li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')">def loadhook():</li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> features = find_enabled_features()</li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> web.ctx.features = features</li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> context.features = features</li>
<li onclick="toggle('pre139787015233192', 'post139787015233192')"> </li>
</ol>
</div>
<div class="commands">
<a href='#' onclick="return varToggle(this, '139787015233192')"><span>&#x25b6;</span> Local vars</a>
</div>
<table class="vars"
id="v139787015233192"
><thead><tr><th>Variable</th><th>Value</th></tr></thead>
<tbody>
<tr><td>.0</td><td class="code"><div>&lt;dictionary-itemiterator object at 0x7f22b4167208&gt;</div></td></tr>
<tr><td>f</td><td class="code"><div>&#39;merge-authors&#39;</div></td></tr>
<tr><td>spec</td><td class="code"><div>&lt;Storage {&#39;filter&#39;: &#39;usergroup&#39;, &#39;usergroup&#39;: &#39;/usergroup/librarians&#39;}&gt;</div></td></tr>
</tbody>
</table>
</li>
<li class="frame">
<code>/openlibrary/infogami/utils/features.py</code> in <code>find_enabled_features</code>
<div class="context" id="c139787015233048">
<ol start="29" class="pre-context" id="pre139787015233048">
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> </li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> if filter_name in filters:</li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> return filters[filter_name](**kwargs)</li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> else:</li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> return False</li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> </li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')">def find_enabled_features():</li>
</ol>
<ol start="36" class="context-line"><li onclick="toggle('pre139787015233048', 'post139787015233048')"> return set(f for f, spec in feature_flags.iteritems() if call_filter(spec)) <span>...</span></li></ol>
<ol start='37' class="post-context" id="post139787015233048">
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> </li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')">def loadhook():</li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> features = find_enabled_features()</li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> web.ctx.features = features</li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> context.features = features</li>
<li onclick="toggle('pre139787015233048', 'post139787015233048')"> </li>
</ol>
</div>
</li>
<li class="frame">
<code>/openlibrary/infogami/utils/features.py</code> in <code>loadhook</code>
<div class="context" id="c139787015232616">
<ol start="32" class="pre-context" id="pre139787015232616">
<li onclick="toggle('pre139787015232616', 'post139787015232616')"> else:</li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')"> return False</li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')"> </li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')">def find_enabled_features():</li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')"> return set(f for f, spec in feature_flags.iteritems() if call_filter(spec))</li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')"> </li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')">def loadhook():</li>
</ol>
<ol start="39" class="context-line"><li onclick="toggle('pre139787015232616', 'post139787015232616')"> features = find_enabled_features() <span>...</span></li></ol>
<ol start='40' class="post-context" id="post139787015232616">
<li onclick="toggle('pre139787015232616', 'post139787015232616')"> web.ctx.features = features</li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')"> context.features = features</li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')"> </li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')">def is_enabled(flag):</li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')"> &quot;&quot;&quot;Tests whether the given feature flag is enabled for this request.</li>
<li onclick="toggle('pre139787015232616', 'post139787015232616')"> &quot;&quot;&quot;</li>
</ol>
</div>
</li>
<li class="frame">
<code>/usr/local/lib/python2.7/dist-packages/web/application.py</code> in <code>processor</code>
<div class="context" id="c139787015232472">
<ol start="549" class="pre-context" id="pre139787015232472">
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> </li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> &gt;&gt;&gt; app = auto_application()</li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> &gt;&gt;&gt; def f(): &quot;something done before handling request&quot;</li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> ...</li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> &gt;&gt;&gt; app.add_processor(loadhook(f))</li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> &quot;&quot;&quot;</li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> def processor(handler):</li>
</ol>
<ol start="556" class="context-line"><li onclick="toggle('pre139787015232472', 'post139787015232472')"> h() <span>...</span></li></ol>
<ol start='557' class="post-context" id="post139787015232472">
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> return handler()</li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> </li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> return processor</li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> </li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')">def unloadhook(h):</li>
<li onclick="toggle('pre139787015232472', 'post139787015232472')"> &quot;&quot;&quot;</li>
</ol>
</div>
<div class="commands">
<a href='#' onclick="return varToggle(this, '139787015232472')"><span>&#x25b6;</span> Local vars</a>
</div>
<table class="vars"
id="v139787015232472"
><thead><tr><th>Variable</th><th>Value</th></tr></thead>
<tbody>
<tr><td>h</td><td class="code"><div>&lt;function loadhook at 0x7f22bb32ad70&gt;</div></td></tr>
<tr><td>handler</td><td class="code"><div>&lt;function &lt;lambda&gt; at 0x7f22b3860f50&gt;</div></td></tr>
</tbody>
</table>
</li>
<li class="frame">
<code>/usr/local/lib/python2.7/dist-packages/web/application.py</code> in <code>process</code>
<div class="context" id="c139787015231968">
<ol start="232" class="pre-context" id="pre139787015231968">
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> return self._delegate(fn, self.fvars, args)</li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> </li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> def handle_with_processors(self):</li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> def process(processors):</li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> try:</li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> if processors:</li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> p, processors = processors[0], processors[1:]</li>
</ol>
<ol start="239" class="context-line"><li onclick="toggle('pre139787015231968', 'post139787015231968')"> return p(lambda: process(processors)) <span>...</span></li></ol>
<ol start='240' class="post-context" id="post139787015231968">
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> else:</li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> return self.handle()</li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> except web.HTTPError:</li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> raise</li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> except (KeyboardInterrupt, SystemExit):</li>
<li onclick="toggle('pre139787015231968', 'post139787015231968')"> raise</li>
</ol>
</div>
<div class="commands">
<a href='#' onclick="return varToggle(this, '139787015231968')"><span>&#x25b6;</span> Local vars</a>
</div>
<table class="vars"
id="v139787015231968"
><thead><tr><th>Variable</th><th>Value</th></tr></thead>
<tbody>
<tr><td>p</td><td class="code"><div>&lt;function processor at 0x7f22bb02b398&gt;</div></td></tr>
<tr><td>process</td><td class="code"><div>&lt;function process at 0x7f22baf89398&gt;</div></td></tr>
<tr><td>processors</td><td class="code"><div>[&lt;openlibrary.core.processors.readableurls.ReadableUrlProcessor instance at 0x7f22baf19b48&gt;,
&lt;openlibrary.plugins.openlibrary.processors.ProfileProcessor instance at 0x7f22ba9646c8&gt;,
&lt;openlibrary.plugins.openlibrary.processors.CORSProcessor instance at 0x7f22ba964098&gt;,
&lt;function processor at 0x7f22bc57fc80&gt;,
&lt;function block_ip_processor at 0x7f22b7fffed8&gt;]</div></td></tr>
<tr><td>self</td><td class="code"><div>&lt;web.application.application instance at 0x7f22bb27fb48&gt;</div></td></tr>
</tbody>
</table>
</li>
</ul>
</div>
<div id="requestinfo">
<h2>Request information</h2>
<h3>INPUT</h3>
<table class="req"
><thead><tr><th>Variable</th><th>Value</th></tr></thead>
<tbody>
<tr><td>debug</td><td class="code"><div>&#39;true&#39;</div></td></tr>
</tbody>
</table>
<h3 id="cookie-info">COOKIES</h3>
<table class="req"
><thead><tr><th>Variable</th><th>Value</th></tr></thead>
<tbody>
<tr><td>Idea-a82c5257</td><td class="code"><div>&#39;afc3f6fc-1372-45fd-943e-9b12053bc81a&#39;</div></td></tr>
<tr><td>Pycharm-82a6de35</td><td class="code"><div>&#39;da72ac33-e431-4b03-b09c-80c7a5bfffc8&#39;</div></td></tr>
<tr><td>_ga</td><td class="code"><div>&#39;GA1.1.810146726.1508433544&#39;</div></td></tr>
<tr><td>_xsrf</td><td class="code"><div>&#39;2|90b4d400|c892155057e8dff107348a3406288918|1513481132&#39;</div></td></tr>
<tr><td>session</td><td class="code"><div>&#39;/people/openlibrary,2017-12-15T22:00:00,a48d3$fcea2bab056de34a1b7f0b9dc0a5a275&#39;</div></td></tr>
<tr><td>username-localhost-8888</td><td class="code"><div>&#39;2|1:0|10:1513485354|23:username-localhost-8888|44:ZjM2NzIwODM4NjBmNGNkMjlkZjMzYjI4NWI1ZDc1OWI=|370fc3468d2081542f8e23e0aa4afea91d7093adb1b05ca528ae5468cb33661a&#39;</div></td></tr>
</tbody>
</table>
<h3 id="meta-info">META</h3>
<table class="req"
><thead><tr><th>Variable</th><th>Value</th></tr></thead>
<tbody>
<tr><td>app_stack</td><td class="code"><div>[&lt;web.application.application instance at 0x7f22bb27fb48&gt;]</div></td></tr>
<tr><td>conn</td><td class="code"><div>&lt;openlibrary.plugins.openlibrary.connection.IAMiddleware instance at 0x7f22b7c83ab8&gt;</div></td></tr>
<tr><td>encoding</td><td class="code"><div>None</div></td></tr>
<tr><td>flash</td><td class="code"><div>[]</div></td></tr>
<tr><td>fullpath</td><td class="code"><div>u&#39;/?debug=true&#39;</div></td></tr>
<tr><td>headers</td><td class="code"><div>[]</div></td></tr>
<tr><td>home</td><td class="code"><div>u&#39;http://localhost:8080&#39;</div></td></tr>
<tr><td>homedomain</td><td class="code"><div>u&#39;http://localhost:8080&#39;</div></td></tr>
<tr><td>homepath</td><td class="code"><div>u&#39;&#39;</div></td></tr>
<tr><td>host</td><td class="code"><div>u&#39;localhost:8080&#39;</div></td></tr>
<tr><td>infobase_auth_token</td><td class="code"><div>&#39;/people/openlibrary,2017-12-15T22:00:00,a48d3$fcea2bab056de34a1b7f0b9dc0a5a275&#39;</div></td></tr>
<tr><td>infobase_localmode</td><td class="code"><div>True</div></td></tr>
<tr><td>infobase_method</td><td class="code"><div>&#39;GET&#39;</div></td></tr>
<tr><td>ip</td><td class="code"><div>u&#39;10.0.2.2&#39;</div></td></tr>
<tr><td>lang</td><td class="code"><div>&#39;en&#39;</div></td></tr>
<tr><td>method</td><td class="code"><div>u&#39;GET&#39;</div></td></tr>
<tr><td>output</td><td class="code"><div>u&#39;&#39;</div></td></tr>
<tr><td>path</td><td class="code"><div>u&#39;/&#39;</div></td></tr>
<tr><td>protocol</td><td class="code"><div>u&#39;http&#39;</div></td></tr>
<tr><td>queries</td><td class="code"><div>1</div></td></tr>
<tr><td>query</td><td class="code"><div>u&#39;?debug=true&#39;</div></td></tr>
<tr><td>querytime</td><td class="code"><div>0.0011839866638183594</div></td></tr>
<tr><td>realhome</td><td class="code"><div>u&#39;http://localhost:8080&#39;</div></td></tr>
<tr><td>site</td><td class="code"><div>&lt;infogami.infobase.client.Site instance at 0x7f22b7c833b0&gt;</div></td></tr>
<tr><td>stats</td><td class="code"><div>[&lt;Storage {&#39;t_end&#39;: 1513992327.287998, &#39;data&#39;: {&#39;path&#39;: &#39;/openlibrary.org/account/get_user&#39;, &#39;data&#39;: None, &#39;method&#39;: &#39;GET&#39;}, &#39;name&#39;: &#39;infobase&#39;, &#39;t_start&#39;: 1513992327.284487, &#39;time&#39;: 0.0035109519958496094}&gt;,
&lt;Storage {&#39;t_end&#39;: 1513992327.288912, &#39;data&#39;: {&#39;hit&#39;: True, &#39;key&#39;: &#39;/usergroup/admin&#39;}, &#39;name&#39;: &#39;memcache.get&#39;, &#39;t_start&#39;: 1513992327.288526, &#39;time&#39;: 0.0003859996795654297}&gt;,
&lt;Storage {&#39;t_end&#39;: 1513992327.289783, &#39;data&#39;: {&#39;hit&#39;: False, &#39;key&#39;: &#39;/usergroup/librarians&#39;}, &#39;name&#39;: &#39;memcache.get&#39;, &#39;t_start&#39;: 1513992327.289553, &#39;time&#39;: 0.0002300739288330078}&gt;,
&lt;Storage {&#39;t_end&#39;: 1513992327.291649, &#39;data&#39;: {&#39;path&#39;: &#39;/openlibrary.org/get&#39;, &#39;data&#39;: {&#39;key&#39;: &#39;/usergroup/librarians&#39;, &#39;revision&#39;: None}, &#39;method&#39;: &#39;GET&#39;, &#39;error&#39;: True}, &#39;name&#39;: &#39;infobase&#39;, &#39;t_start&#39;: 1513992327.289811, &#39;time&#39;: 0.0018382072448730469}&gt;]</div></td></tr>
<tr><td>status</td><td class="code"><div>&#39;200 OK&#39;</div></td></tr>
</tbody>
</table>
<h3 id="meta-info">ENVIRONMENT</h3>
<table class="req"
><thead><tr><th>Variable</th><th>Value</th></tr></thead>
<tbody>
<tr><td>CONTENT_LENGTH</td><td class="code"><div>&#39;&#39;</div></td></tr>
<tr><td>CONTENT_TYPE</td><td class="code"><div>&#39;&#39;</div></td></tr>
<tr><td>HTTP_ACCEPT</td><td class="code"><div>&#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8&#39;</div></td></tr>
<tr><td>HTTP_ACCEPT_ENCODING</td><td class="code"><div>&#39;gzip, deflate, br&#39;</div></td></tr>
<tr><td>HTTP_ACCEPT_LANGUAGE</td><td class="code"><div>&#39;en-GB,en-US;q=0.9,en;q=0.8&#39;</div></td></tr>
<tr><td>HTTP_CONNECTION</td><td class="code"><div>&#39;close&#39;</div></td></tr>
<tr><td>HTTP_COOKIE</td><td class="code"><div>&#39;Idea-a82c5257=afc3f6fc-1372-45fd-943e-9b12053bc81a; _ga=GA1.1.810146726.1508433544; Pycharm-82a6de35=da72ac33-e431-4b03-b09c-80c7a5bfffc8; session=&quot;/people/openlibrary%2C2017-12-15T22%3A00%3A00%2Ca48d3%24fcea2bab056de34a1b7f0b9dc0a5a275&quot;; _xsrf=2|90b4d400|c892155057e8dff107348a3406288918|1513481132; username-localhost-8888=&quot;2|1:0|10:1513485354|23:username-localhost-8888|44:ZjM2NzIwODM4NjBmNGNkMjlkZjMzYjI4NWI1ZDc1OWI=|370fc3468d2081542f8e23e0aa4afea91d7093adb1b05ca528ae5468cb33661a&quot;&#39;</div></td></tr>
<tr><td>HTTP_HOST</td><td class="code"><div>&#39;localhost:8080&#39;</div></td></tr>
<tr><td>HTTP_UPGRADE_INSECURE_REQUESTS</td><td class="code"><div>&#39;1&#39;</div></td></tr>
<tr><td>HTTP_USER_AGENT</td><td class="code"><div>&#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36&#39;</div></td></tr>
<tr><td>HTTP_X_FORWARDED_FOR</td><td class="code"><div>&#39;10.0.2.2&#39;</div></td></tr>
<tr><td>PATH_INFO</td><td class="code"><div>&#39;/&#39;</div></td></tr>
<tr><td>QUERY_STRING</td><td class="code"><div>&#39;debug=true&#39;</div></td></tr>
<tr><td>RAW_URI</td><td class="code"><div>&#39;/?debug=true&#39;</div></td></tr>
<tr><td>REMOTE_ADDR</td><td class="code"><div>&#39;10.0.2.2&#39;</div></td></tr>
<tr><td>REMOTE_PORT</td><td class="code"><div>&#39;80&#39;</div></td></tr>
<tr><td>REQUEST_METHOD</td><td class="code"><div>&#39;GET&#39;</div></td></tr>
<tr><td>SCRIPT_NAME</td><td class="code"><div>&#39;&#39;</div></td></tr>
<tr><td>SERVER_NAME</td><td class="code"><div>&#39;localhost&#39;</div></td></tr>
<tr><td>SERVER_PORT</td><td class="code"><div>&#39;8080&#39;</div></td></tr>
<tr><td>SERVER_PROTOCOL</td><td class="code"><div>&#39;HTTP/1.0&#39;</div></td></tr>
<tr><td>SERVER_SOFTWARE</td><td class="code"><div>&#39;gunicorn/0.13.4&#39;</div></td></tr>
<tr><td>gunicorn.socket</td><td class="code"><div>&lt;socket._socketobject object at 0x7f22b38f0130&gt;</div></td></tr>
<tr><td>wsgi.errors</td><td class="code"><div>&lt;open file &#39;&lt;stderr&gt;&#39;, mode &#39;w&#39; at 0x7f22be25e1e0&gt;</div></td></tr>
<tr><td>wsgi.file_wrapper</td><td class="code"><div>&lt;class gunicorn.http.wsgi.FileWrapper at 0x7f22bb33ec80&gt;</div></td></tr>
<tr><td>wsgi.input</td><td class="code"><div>&lt;gunicorn.http.body.Body object at 0x7f22baf5f210&gt;</div></td></tr>
<tr><td>wsgi.multiprocess</td><td class="code"><div>True</div></td></tr>
<tr><td>wsgi.multithread</td><td class="code"><div>False</div></td></tr>
<tr><td>wsgi.run_once</td><td class="code"><div>False</div></td></tr>
<tr><td>wsgi.url_scheme</td><td class="code"><div>&#39;http&#39;</div></td></tr>
<tr><td>wsgi.version</td><td class="code"><div>(1, 0)</div></td></tr>
</tbody>
</table>
</div>
<div id="explanation">
<p>
You're seeing this error because you have <code>web.config.debug</code>
set to <code>True</code>. Set that to <code>False</code> if you don't to see this.
</p>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment