· 4 years ago · Apr 19, 2021, 12:54 PM
1<html lang="en">
2<head>
3 <meta http-equiv="content-type" content="text/html; charset=utf-8">
4 <meta name="robots" content="NONE,NOARCHIVE">
5 <title>RuntimeError
6 at /backlink/keyword-difficulty/</title>
7 <style type="text/css">
8 html * { padding:0; margin:0; }
9 body * { padding:10px 20px; }
10 body * * { padding:0; }
11 body { font:small sans-serif; background-color:#fff; color:#000; }
12 body>div { border-bottom:1px solid #ddd; }
13 h1 { font-weight:normal; }
14 h2 { margin-bottom:.8em; }
15 h3 { margin:1em 0 .5em 0; }
16 h4 { margin:0 0 .5em 0; font-weight: normal; }
17 code, pre { font-size: 100%; white-space: pre-wrap; }
18 table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }
19 tbody td, tbody th { vertical-align:top; padding:2px 3px; }
20 thead th {
21 padding:1px 6px 1px 3px; background:#fefefe; text-align:left;
22 font-weight:normal; font-size:11px; border:1px solid #ddd;
23 }
24 tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }
25 table.vars { margin:5px 0 2px 40px; }
26 table.vars td, table.req td { font-family:monospace; }
27 table td.code { width:100%; }
28 table td.code pre { overflow:hidden; }
29 table.source th { color:#666; }
30 table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }
31 ul.traceback { list-style-type:none; color: #222; }
32 ul.traceback li.frame { padding-bottom:1em; color:#4f4f4f; }
33 ul.traceback li.user { background-color:#e0e0e0; color:#000 }
34 div.context { padding:10px 0; overflow:hidden; }
35 div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }
36 div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; padding-left: 2px; }
37 div.context ol li pre { display:inline; }
38 div.context ol.context-line li { color:#464646; background-color:#dfdfdf; padding: 3px 2px; }
39 div.context ol.context-line li span { position:absolute; right:32px; }
40 .user div.context ol.context-line li { background-color:#bbb; color:#000; }
41 .user div.context ol li { color:#666; }
42 div.commands { margin-left: 40px; }
43 div.commands a { color:#555; text-decoration:none; }
44 .user div.commands a { color: black; }
45 #summary { background: #ffc; }
46 #summary h2 { font-weight: normal; color: #666; }
47 #explanation { background:#eee; }
48 #template, #template-not-exist { background:#f6f6f6; }
49 #template-not-exist ul { margin: 0 0 10px 20px; }
50 #template-not-exist .postmortem-section { margin-bottom: 3px; }
51 #unicode-hint { background:#eee; }
52 #traceback { background:#eee; }
53 #requestinfo { background:#f6f6f6; padding-left:120px; }
54 #summary table { border:none; background:transparent; }
55 #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }
56 #requestinfo h3 { margin-bottom:-1em; }
57 .error { background: #ffc; }
58 .specific { color:#cc3300; font-weight:bold; }
59 h2 span.commands { font-size:.7em; font-weight:normal; }
60 span.commands a:link {color:#5E5694;}
61 pre.exception_value { font-family: sans-serif; color: #575757; font-size: 1.5em; margin: 10px 0 10px 0; }
62 .append-bottom { margin-bottom: 10px; }
63 .fname { user-select: all; }
64 </style>
65
66 <script>
67 function hideAll(elems) {
68 for (var e = 0; e < elems.length; e++) {
69 elems[e].style.display = 'none';
70 }
71 }
72 window.onload = function() {
73 hideAll(document.querySelectorAll('table.vars'));
74 hideAll(document.querySelectorAll('ol.pre-context'));
75 hideAll(document.querySelectorAll('ol.post-context'));
76 hideAll(document.querySelectorAll('div.pastebin'));
77 }
78 function toggle() {
79 for (var i = 0; i < arguments.length; i++) {
80 var e = document.getElementById(arguments[i]);
81 if (e) {
82 e.style.display = e.style.display == 'none' ? 'block': 'none';
83 }
84 }
85 return false;
86 }
87 function varToggle(link, id) {
88 toggle('v' + id);
89 var s = link.getElementsByTagName('span')[0];
90 var uarr = String.fromCharCode(0x25b6);
91 var darr = String.fromCharCode(0x25bc);
92 s.textContent = s.textContent == uarr ? darr : uarr;
93 return false;
94 }
95 function switchPastebinFriendly(link) {
96 s1 = "Switch to copy-and-paste view";
97 s2 = "Switch back to interactive view";
98 link.textContent = link.textContent.trim() == s1 ? s2: s1;
99 toggle('browserTraceback', 'pastebinTraceback');
100 return false;
101 }
102 </script>
103
104</head>
105<body>
106<div id="summary">
107 <h1>RuntimeError
108 at /backlink/keyword-difficulty/</h1>
109 <pre class="exception_value">There is no current event loop in thread 'ThreadPoolExecutor-0_0'.</pre>
110 <table class="meta">
111
112 <tr>
113 <th>Request Method:</th>
114 <td>GET</td>
115 </tr>
116 <tr>
117 <th>Request URL:</th>
118 <td>https://backlink.searchatlas.com/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com</td>
119 </tr>
120
121 <tr>
122 <th>Django Version:</th>
123 <td>3.2</td>
124 </tr>
125
126 <tr>
127 <th>Exception Type:</th>
128 <td>RuntimeError</td>
129 </tr>
130
131
132 <tr>
133 <th>Exception Value:</th>
134 <td><pre>There is no current event loop in thread 'ThreadPoolExecutor-0_0'.</pre></td>
135 </tr>
136
137
138 <tr>
139 <th>Exception Location:</th>
140 <td><span class="fname">/usr/local/lib/python3.8/asyncio/events.py</span>, line 639, in get_event_loop</td>
141 </tr>
142
143 <tr>
144 <th>Python Executable:</th>
145 <td>/usr/local/bin/python</td>
146 </tr>
147 <tr>
148 <th>Python Version:</th>
149 <td>3.8.9</td>
150 </tr>
151 <tr>
152 <th>Python Path:</th>
153 <td><pre>['/usr/src/app',
154 '/usr/local/bin',
155 '/usr/src/app',
156 '/usr/local/lib/python38.zip',
157 '/usr/local/lib/python3.8',
158 '/usr/local/lib/python3.8/lib-dynload',
159 '/usr/local/lib/python3.8/site-packages']</pre></td>
160 </tr>
161 <tr>
162 <th>Server time:</th>
163 <td>Mon, 19 Apr 2021 12:44:42 +0000</td>
164 </tr>
165 </table>
166</div>
167
168
169
170
171<div id="traceback">
172 <h2>Traceback <span class="commands"><a href="#" onclick="return switchPastebinFriendly(this);">
173 Switch to copy-and-paste view</a></span>
174 </h2>
175 <div id="browserTraceback">
176 <ul class="traceback">
177
178
179 <li class="frame django">
180
181 <code class="fname">/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py</code>, line 47, in inner
182
183
184
185 <div class="context" id="c140202312592704">
186
187 <ol start="40" class="pre-context" id="pre140202312592704">
188
189 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> response = await sync_to_async(response_for_exception, thread_sensitive=False)(request, exc)</pre></li>
190
191 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> return response</pre></li>
192
193 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> return inner</pre></li>
194
195 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> else:</pre></li>
196
197 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> @wraps(get_response)</pre></li>
198
199 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> def inner(request):</pre></li>
200
201 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> try:</pre></li>
202
203 </ol>
204
205 <ol start="47" class="context-line">
206 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> response = get_response(request)</pre> <span>â¦</span></li>
207 </ol>
208
209 <ol start='48' class="post-context" id="post140202312592704">
210
211 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> except Exception as exc:</pre></li>
212
213 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> response = response_for_exception(request, exc)</pre></li>
214
215 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> return response</pre></li>
216
217 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre> return inner</pre></li>
218
219 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre></pre></li>
220
221 <li onclick="toggle('pre140202312592704', 'post140202312592704')"><pre></pre></li>
222
223 </ol>
224
225 </div>
226
227
228
229 <div class="commands">
230
231 <a href="#" onclick="return varToggle(this, '140202312592704')"><span>▶</span> Local vars</a>
232
233 </div>
234 <table class="vars" id="v140202312592704">
235 <thead>
236 <tr>
237 <th>Variable</th>
238 <th>Value</th>
239 </tr>
240 </thead>
241 <tbody>
242
243 <tr>
244 <td>exc</td>
245 <td class="code"><pre>RuntimeError("There is no current event loop in thread 'ThreadPoolExecutor-0_0'.")</pre></td>
246 </tr>
247
248 <tr>
249 <td>get_response</td>
250 <td class="code"><pre><bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x7f837e237970>></pre></td>
251 </tr>
252
253 <tr>
254 <td>request</td>
255 <td class="code"><pre><WSGIRequest: GET '/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'></pre></td>
256 </tr>
257
258 </tbody>
259 </table>
260
261 </li>
262
263
264 <li class="frame django">
265
266 <code class="fname">/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py</code>, line 181, in _get_response
267
268
269
270 <div class="context" id="c140202312593216">
271
272 <ol start="174" class="pre-context" id="pre140202312593216">
273
274 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre></pre></li>
275
276 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> if response is None:</pre></li>
277
278 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> wrapped_callback = self.make_view_atomic(callback)</pre></li>
279
280 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> # If it is an asynchronous view, run it in a subthread.</pre></li>
281
282 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> if asyncio.iscoroutinefunction(wrapped_callback):</pre></li>
283
284 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> wrapped_callback = async_to_sync(wrapped_callback)</pre></li>
285
286 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> try:</pre></li>
287
288 </ol>
289
290 <ol start="181" class="context-line">
291 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> response = wrapped_callback(request, *callback_args, **callback_kwargs)</pre> <span>â¦</span></li>
292 </ol>
293
294 <ol start='182' class="post-context" id="post140202312593216">
295
296 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> except Exception as e:</pre></li>
297
298 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> response = self.process_exception_by_middleware(e, request)</pre></li>
299
300 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> if response is None:</pre></li>
301
302 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> raise</pre></li>
303
304 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre></pre></li>
305
306 <li onclick="toggle('pre140202312593216', 'post140202312593216')"><pre> # Complain if the view returned None (a common error).</pre></li>
307
308 </ol>
309
310 </div>
311
312
313
314 <div class="commands">
315
316 <a href="#" onclick="return varToggle(this, '140202312593216')"><span>▶</span> Local vars</a>
317
318 </div>
319 <table class="vars" id="v140202312593216">
320 <thead>
321 <tr>
322 <th>Variable</th>
323 <th>Value</th>
324 </tr>
325 </thead>
326 <tbody>
327
328 <tr>
329 <td>callback</td>
330 <td class="code"><pre><function KeywordDifficultyAPIView at 0x7f83668918b0></pre></td>
331 </tr>
332
333 <tr>
334 <td>callback_args</td>
335 <td class="code"><pre>()</pre></td>
336 </tr>
337
338 <tr>
339 <td>callback_kwargs</td>
340 <td class="code"><pre>{}</pre></td>
341 </tr>
342
343 <tr>
344 <td>middleware_method</td>
345 <td class="code"><pre><function CsrfViewMiddleware.process_view at 0x7f83673f3ee0></pre></td>
346 </tr>
347
348 <tr>
349 <td>request</td>
350 <td class="code"><pre><WSGIRequest: GET '/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'></pre></td>
351 </tr>
352
353 <tr>
354 <td>response</td>
355 <td class="code"><pre>None</pre></td>
356 </tr>
357
358 <tr>
359 <td>self</td>
360 <td class="code"><pre><django.core.handlers.wsgi.WSGIHandler object at 0x7f837e237970></pre></td>
361 </tr>
362
363 <tr>
364 <td>wrapped_callback</td>
365 <td class="code"><pre><function KeywordDifficultyAPIView at 0x7f83668918b0></pre></td>
366 </tr>
367
368 </tbody>
369 </table>
370
371 </li>
372
373
374 <li class="frame django">
375
376 <code class="fname">/usr/local/lib/python3.8/site-packages/django/views/decorators/csrf.py</code>, line 54, in wrapped_view
377
378
379
380 <div class="context" id="c140202312591872">
381
382 <ol start="47" class="pre-context" id="pre140202312591872">
383
384 <li onclick="toggle('pre140202312591872', 'post140202312591872')"><pre></pre></li>
385
386 <li onclick="toggle('pre140202312591872', 'post140202312591872')"><pre></pre></li>
387
388 <li onclick="toggle('pre140202312591872', 'post140202312591872')"><pre>def csrf_exempt(view_func):</pre></li>
389
390 <li onclick="toggle('pre140202312591872', 'post140202312591872')"><pre> """Mark a view function as being exempt from the CSRF view protection."""</pre></li>
391
392 <li onclick="toggle('pre140202312591872', 'post140202312591872')"><pre> # view_func.csrf_exempt = True would also work, but decorators are nicer</pre></li>
393
394 <li onclick="toggle('pre140202312591872', 'post140202312591872')"><pre> # if they don't have side effects, so return a new function.</pre></li>
395
396 <li onclick="toggle('pre140202312591872', 'post140202312591872')"><pre> def wrapped_view(*args, **kwargs):</pre></li>
397
398 </ol>
399
400 <ol start="54" class="context-line">
401 <li onclick="toggle('pre140202312591872', 'post140202312591872')"><pre> return view_func(*args, **kwargs)</pre> <span>â¦</span></li>
402 </ol>
403
404 <ol start='55' class="post-context" id="post140202312591872">
405
406 <li onclick="toggle('pre140202312591872', 'post140202312591872')"><pre> wrapped_view.csrf_exempt = True</pre></li>
407
408 <li onclick="toggle('pre140202312591872', 'post140202312591872')"><pre> return wraps(view_func)(wrapped_view)</pre></li>
409
410 </ol>
411
412 </div>
413
414
415
416 <div class="commands">
417
418 <a href="#" onclick="return varToggle(this, '140202312591872')"><span>▶</span> Local vars</a>
419
420 </div>
421 <table class="vars" id="v140202312591872">
422 <thead>
423 <tr>
424 <th>Variable</th>
425 <th>Value</th>
426 </tr>
427 </thead>
428 <tbody>
429
430 <tr>
431 <td>args</td>
432 <td class="code"><pre>(<WSGIRequest: GET '/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>,)</pre></td>
433 </tr>
434
435 <tr>
436 <td>kwargs</td>
437 <td class="code"><pre>{}</pre></td>
438 </tr>
439
440 <tr>
441 <td>view_func</td>
442 <td class="code"><pre><function KeywordDifficultyAPIView at 0x7f8366891820></pre></td>
443 </tr>
444
445 </tbody>
446 </table>
447
448 </li>
449
450
451 <li class="frame django">
452
453 <code class="fname">/usr/local/lib/python3.8/site-packages/django/views/generic/base.py</code>, line 70, in view
454
455
456
457 <div class="context" id="c140202312592960">
458
459 <ol start="63" class="pre-context" id="pre140202312592960">
460
461 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> self = cls(**initkwargs)</pre></li>
462
463 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> self.setup(request, *args, **kwargs)</pre></li>
464
465 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> if not hasattr(self, 'request'):</pre></li>
466
467 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> raise AttributeError(</pre></li>
468
469 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> "%s instance has no 'request' attribute. Did you override "</pre></li>
470
471 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> "setup() and forget to call super()?" % cls.__name__</pre></li>
472
473 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> )</pre></li>
474
475 </ol>
476
477 <ol start="70" class="context-line">
478 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> return self.dispatch(request, *args, **kwargs)</pre> <span>â¦</span></li>
479 </ol>
480
481 <ol start='71' class="post-context" id="post140202312592960">
482
483 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> view.view_class = cls</pre></li>
484
485 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> view.view_initkwargs = initkwargs</pre></li>
486
487 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre></pre></li>
488
489 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> # take name and docstring from class</pre></li>
490
491 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre> update_wrapper(view, cls, updated=())</pre></li>
492
493 <li onclick="toggle('pre140202312592960', 'post140202312592960')"><pre></pre></li>
494
495 </ol>
496
497 </div>
498
499
500
501 <div class="commands">
502
503 <a href="#" onclick="return varToggle(this, '140202312592960')"><span>▶</span> Local vars</a>
504
505 </div>
506 <table class="vars" id="v140202312592960">
507 <thead>
508 <tr>
509 <th>Variable</th>
510 <th>Value</th>
511 </tr>
512 </thead>
513 <tbody>
514
515 <tr>
516 <td>args</td>
517 <td class="code"><pre>()</pre></td>
518 </tr>
519
520 <tr>
521 <td>cls</td>
522 <td class="code"><pre><class 'backlink.api.v1.views.KeywordDifficultyAPIView'></pre></td>
523 </tr>
524
525 <tr>
526 <td>initkwargs</td>
527 <td class="code"><pre>{}</pre></td>
528 </tr>
529
530 <tr>
531 <td>kwargs</td>
532 <td class="code"><pre>{}</pre></td>
533 </tr>
534
535 <tr>
536 <td>request</td>
537 <td class="code"><pre><WSGIRequest: GET '/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'></pre></td>
538 </tr>
539
540 <tr>
541 <td>self</td>
542 <td class="code"><pre><backlink.api.v1.views.KeywordDifficultyAPIView object at 0x7f83651966d0></pre></td>
543 </tr>
544
545 </tbody>
546 </table>
547
548 </li>
549
550
551 <li class="frame user">
552
553 <code class="fname">/usr/local/lib/python3.8/site-packages/rest_framework/views.py</code>, line 509, in dispatch
554
555
556
557 <div class="context" id="c140202312592896">
558
559 <ol start="502" class="pre-context" id="pre140202312592896">
560
561 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre> self.http_method_not_allowed)</pre></li>
562
563 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre> else:</pre></li>
564
565 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre> handler = self.http_method_not_allowed</pre></li>
566
567 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre></pre></li>
568
569 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre> response = handler(request, *args, **kwargs)</pre></li>
570
571 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre></pre></li>
572
573 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre> except Exception as exc:</pre></li>
574
575 </ol>
576
577 <ol start="509" class="context-line">
578 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre> response = self.handle_exception(exc)</pre> <span>â¦</span></li>
579 </ol>
580
581 <ol start='510' class="post-context" id="post140202312592896">
582
583 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre></pre></li>
584
585 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre> self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>
586
587 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre> return self.response</pre></li>
588
589 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre></pre></li>
590
591 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre> def options(self, request, *args, **kwargs):</pre></li>
592
593 <li onclick="toggle('pre140202312592896', 'post140202312592896')"><pre> """</pre></li>
594
595 </ol>
596
597 </div>
598
599
600
601 <div class="commands">
602
603 <a href="#" onclick="return varToggle(this, '140202312592896')"><span>▶</span> Local vars</a>
604
605 </div>
606 <table class="vars" id="v140202312592896">
607 <thead>
608 <tr>
609 <th>Variable</th>
610 <th>Value</th>
611 </tr>
612 </thead>
613 <tbody>
614
615 <tr>
616 <td>args</td>
617 <td class="code"><pre>()</pre></td>
618 </tr>
619
620 <tr>
621 <td>handler</td>
622 <td class="code"><pre><bound method KeywordDifficultyAPIView.get of <backlink.api.v1.views.KeywordDifficultyAPIView object at 0x7f83651966d0>></pre></td>
623 </tr>
624
625 <tr>
626 <td>kwargs</td>
627 <td class="code"><pre>{}</pre></td>
628 </tr>
629
630 <tr>
631 <td>request</td>
632 <td class="code"><pre><rest_framework.request.Request: GET '/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'></pre></td>
633 </tr>
634
635 <tr>
636 <td>self</td>
637 <td class="code"><pre><backlink.api.v1.views.KeywordDifficultyAPIView object at 0x7f83651966d0></pre></td>
638 </tr>
639
640 </tbody>
641 </table>
642
643 </li>
644
645
646 <li class="frame user">
647
648 <code class="fname">/usr/local/lib/python3.8/site-packages/rest_framework/views.py</code>, line 469, in handle_exception
649
650
651
652 <div class="context" id="c140202312592320">
653
654 <ol start="462" class="pre-context" id="pre140202312592320">
655
656 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre></pre></li>
657
658 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre> exception_handler = self.get_exception_handler()</pre></li>
659
660 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre></pre></li>
661
662 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre> context = self.get_exception_handler_context()</pre></li>
663
664 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre> response = exception_handler(exc, context)</pre></li>
665
666 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre></pre></li>
667
668 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre> if response is None:</pre></li>
669
670 </ol>
671
672 <ol start="469" class="context-line">
673 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre> self.raise_uncaught_exception(exc)</pre> <span>â¦</span></li>
674 </ol>
675
676 <ol start='470' class="post-context" id="post140202312592320">
677
678 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre></pre></li>
679
680 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre> response.exception = True</pre></li>
681
682 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre> return response</pre></li>
683
684 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre></pre></li>
685
686 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre> def raise_uncaught_exception(self, exc):</pre></li>
687
688 <li onclick="toggle('pre140202312592320', 'post140202312592320')"><pre> if settings.DEBUG:</pre></li>
689
690 </ol>
691
692 </div>
693
694
695
696 <div class="commands">
697
698 <a href="#" onclick="return varToggle(this, '140202312592320')"><span>▶</span> Local vars</a>
699
700 </div>
701 <table class="vars" id="v140202312592320">
702 <thead>
703 <tr>
704 <th>Variable</th>
705 <th>Value</th>
706 </tr>
707 </thead>
708 <tbody>
709
710 <tr>
711 <td>context</td>
712 <td class="code"><pre>{'args': (),
713 'kwargs': {},
714 'request': <rest_framework.request.Request: GET '/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>,
715 'view': <backlink.api.v1.views.KeywordDifficultyAPIView object at 0x7f83651966d0>}</pre></td>
716 </tr>
717
718 <tr>
719 <td>exc</td>
720 <td class="code"><pre>RuntimeError("There is no current event loop in thread 'ThreadPoolExecutor-0_0'.")</pre></td>
721 </tr>
722
723 <tr>
724 <td>exception_handler</td>
725 <td class="code"><pre><function exception_handler at 0x7f8366d113a0></pre></td>
726 </tr>
727
728 <tr>
729 <td>response</td>
730 <td class="code"><pre>None</pre></td>
731 </tr>
732
733 <tr>
734 <td>self</td>
735 <td class="code"><pre><backlink.api.v1.views.KeywordDifficultyAPIView object at 0x7f83651966d0></pre></td>
736 </tr>
737
738 </tbody>
739 </table>
740
741 </li>
742
743
744 <li class="frame user">
745
746 <code class="fname">/usr/local/lib/python3.8/site-packages/rest_framework/views.py</code>, line 480, in raise_uncaught_exception
747
748
749
750 <div class="context" id="c140202312455040">
751
752 <ol start="473" class="pre-context" id="pre140202312455040">
753
754 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre></pre></li>
755
756 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> def raise_uncaught_exception(self, exc):</pre></li>
757
758 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> if settings.DEBUG:</pre></li>
759
760 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> request = self.request</pre></li>
761
762 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> renderer_format = getattr(request.accepted_renderer, 'format')</pre></li>
763
764 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> use_plaintext_traceback = renderer_format not in ('html', 'api', 'admin')</pre></li>
765
766 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> request.force_plaintext_errors(use_plaintext_traceback)</pre></li>
767
768 </ol>
769
770 <ol start="480" class="context-line">
771 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> raise exc</pre> <span>â¦</span></li>
772 </ol>
773
774 <ol start='481' class="post-context" id="post140202312455040">
775
776 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre></pre></li>
777
778 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> # Note: Views are made CSRF exempt from within `as_view` as to prevent</pre></li>
779
780 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> # accidental removal of this exemption in cases where `dispatch` needs to</pre></li>
781
782 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> # be overridden.</pre></li>
783
784 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> def dispatch(self, request, *args, **kwargs):</pre></li>
785
786 <li onclick="toggle('pre140202312455040', 'post140202312455040')"><pre> """</pre></li>
787
788 </ol>
789
790 </div>
791
792
793
794 <div class="commands">
795
796 <a href="#" onclick="return varToggle(this, '140202312455040')"><span>▶</span> Local vars</a>
797
798 </div>
799 <table class="vars" id="v140202312455040">
800 <thead>
801 <tr>
802 <th>Variable</th>
803 <th>Value</th>
804 </tr>
805 </thead>
806 <tbody>
807
808 <tr>
809 <td>exc</td>
810 <td class="code"><pre>RuntimeError("There is no current event loop in thread 'ThreadPoolExecutor-0_0'.")</pre></td>
811 </tr>
812
813 <tr>
814 <td>renderer_format</td>
815 <td class="code"><pre>'json'</pre></td>
816 </tr>
817
818 <tr>
819 <td>request</td>
820 <td class="code"><pre><rest_framework.request.Request: GET '/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'></pre></td>
821 </tr>
822
823 <tr>
824 <td>self</td>
825 <td class="code"><pre><backlink.api.v1.views.KeywordDifficultyAPIView object at 0x7f83651966d0></pre></td>
826 </tr>
827
828 <tr>
829 <td>use_plaintext_traceback</td>
830 <td class="code"><pre>True</pre></td>
831 </tr>
832
833 </tbody>
834 </table>
835
836 </li>
837
838
839 <li class="frame user">
840
841 <code class="fname">/usr/local/lib/python3.8/site-packages/rest_framework/views.py</code>, line 506, in dispatch
842
843
844
845 <div class="context" id="c140202312455104">
846
847 <ol start="499" class="pre-context" id="pre140202312455104">
848
849 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> # Get the appropriate handler method</pre></li>
850
851 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> if request.method.lower() in self.http_method_names:</pre></li>
852
853 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> handler = getattr(self, request.method.lower(),</pre></li>
854
855 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> self.http_method_not_allowed)</pre></li>
856
857 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> else:</pre></li>
858
859 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> handler = self.http_method_not_allowed</pre></li>
860
861 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre></pre></li>
862
863 </ol>
864
865 <ol start="506" class="context-line">
866 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> response = handler(request, *args, **kwargs)</pre> <span>â¦</span></li>
867 </ol>
868
869 <ol start='507' class="post-context" id="post140202312455104">
870
871 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre></pre></li>
872
873 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> except Exception as exc:</pre></li>
874
875 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> response = self.handle_exception(exc)</pre></li>
876
877 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre></pre></li>
878
879 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>
880
881 <li onclick="toggle('pre140202312455104', 'post140202312455104')"><pre> return self.response</pre></li>
882
883 </ol>
884
885 </div>
886
887
888
889 <div class="commands">
890
891 <a href="#" onclick="return varToggle(this, '140202312455104')"><span>▶</span> Local vars</a>
892
893 </div>
894 <table class="vars" id="v140202312455104">
895 <thead>
896 <tr>
897 <th>Variable</th>
898 <th>Value</th>
899 </tr>
900 </thead>
901 <tbody>
902
903 <tr>
904 <td>args</td>
905 <td class="code"><pre>()</pre></td>
906 </tr>
907
908 <tr>
909 <td>handler</td>
910 <td class="code"><pre><bound method KeywordDifficultyAPIView.get of <backlink.api.v1.views.KeywordDifficultyAPIView object at 0x7f83651966d0>></pre></td>
911 </tr>
912
913 <tr>
914 <td>kwargs</td>
915 <td class="code"><pre>{}</pre></td>
916 </tr>
917
918 <tr>
919 <td>request</td>
920 <td class="code"><pre><rest_framework.request.Request: GET '/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'></pre></td>
921 </tr>
922
923 <tr>
924 <td>self</td>
925 <td class="code"><pre><backlink.api.v1.views.KeywordDifficultyAPIView object at 0x7f83651966d0></pre></td>
926 </tr>
927
928 </tbody>
929 </table>
930
931 </li>
932
933
934 <li class="frame user">
935
936 <code class="fname">/usr/src/app/backlink/api/v1/views.py</code>, line 247, in get
937
938
939
940 <div class="context" id="c140202312454912">
941
942 <ol start="240" class="pre-context" id="pre140202312454912">
943
944 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> stopwatch_instance.click('GET WEBSITES')</pre></li>
945
946 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> website_urls = request.GET.getlist("websites")</pre></li>
947
948 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> stopwatch_instance.click('GET WEBSITES')</pre></li>
949
950 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> if not website_urls:</pre></li>
951
952 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> error_message = f"Invalid website_urls received: {website_urls}"</pre></li>
953
954 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> raise serializers.ValidationError(error_message)</pre></li>
955
956 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> stopwatch_instance.click('WEBSITES GET_OR_CREATE')</pre></li>
957
958 </ol>
959
960 <ol start="247" class="context-line">
961 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> websites = Website.objects.get_or_create_from_urls(urls=website_urls)</pre> <span>â¦</span></li>
962 </ol>
963
964 <ol start='248' class="post-context" id="post140202312454912">
965
966 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> stopwatch_instance.click('WEBSITES GET_OR_CREATE')</pre></li>
967
968 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> stopwatch_instance.click('WEBSITES GET WEBSITE DATA FOR EACH')</pre></li>
969
970 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> website_ids = [website.id for website in websites]</pre></li>
971
972 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> websites_qs = Website.objects.filter(pk__in=website_ids)</pre></li>
973
974 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> websites_specs = get_website_data(websites_qs=websites_qs)</pre></li>
975
976 <li onclick="toggle('pre140202312454912', 'post140202312454912')"><pre> stopwatch_instance.click('WEBSITES GET WEBSITE DATA FOR EACH')</pre></li>
977
978 </ol>
979
980 </div>
981
982
983
984 <div class="commands">
985
986 <a href="#" onclick="return varToggle(this, '140202312454912')"><span>▶</span> Local vars</a>
987
988 </div>
989 <table class="vars" id="v140202312454912">
990 <thead>
991 <tr>
992 <th>Variable</th>
993 <th>Value</th>
994 </tr>
995 </thead>
996 <tbody>
997
998 <tr>
999 <td>kwargs</td>
1000 <td class="code"><pre>{}</pre></td>
1001 </tr>
1002
1003 <tr>
1004 <td>request</td>
1005 <td class="code"><pre><rest_framework.request.Request: GET '/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'></pre></td>
1006 </tr>
1007
1008 <tr>
1009 <td>self</td>
1010 <td class="code"><pre><backlink.api.v1.views.KeywordDifficultyAPIView object at 0x7f83651966d0></pre></td>
1011 </tr>
1012
1013 <tr>
1014 <td>stopwatch_instance</td>
1015 <td class="code"><pre><utils.profiling.Stopwatch object at 0x7f8365d536d0></pre></td>
1016 </tr>
1017
1018 <tr>
1019 <td>website_urls</td>
1020 <td class="code"><pre>['atcarlsbarbershop.com',
1021 'floydsbarbershop.com',
1022 'barbershopbags.com',
1023 'parkersbarbershop.com',
1024 'finleysbarbershop.com',
1025 'barbershopbar.com',
1026 'garrettsbarbershop.com',
1027 'beardsleysbarbershop.com',
1028 'barbershop.org',
1029 'bensbarbershop.com']</pre></td>
1030 </tr>
1031
1032 </tbody>
1033 </table>
1034
1035 </li>
1036
1037
1038 <li class="frame user">
1039
1040 <code class="fname">/usr/src/app/backlink/models.py</code>, line 110, in get_or_create_from_urls
1041
1042
1043
1044 <div class="context" id="c140202312455552">
1045
1046 <ol start="103" class="pre-context" id="pre140202312455552">
1047
1048 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre> )</pre></li>
1049
1050 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre> task_list.append(future)</pre></li>
1051
1052 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre></pre></li>
1053
1054 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre> return await asyncio.gather(*task_list)</pre></li>
1055
1056 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre></pre></li>
1057
1058 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre> def get_or_create_from_urls(self, urls: Iterable[str], run_async=True):</pre></li>
1059
1060 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre> if run_async:</pre></li>
1061
1062 </ol>
1063
1064 <ol start="110" class="context-line">
1065 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre> return asyncio.run(</pre> <span>â¦</span></li>
1066 </ol>
1067
1068 <ol start='111' class="post-context" id="post140202312455552">
1069
1070 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre> self._gather_async_results_from_get_or_create_from_url(urls),</pre></li>
1071
1072 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre> debug=bool(settings.DEBUG))</pre></li>
1073
1074 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre> else:</pre></li>
1075
1076 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre> return [self.get_or_create_from_url(url, run_async) for url in urls]</pre></li>
1077
1078 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre></pre></li>
1079
1080 <li onclick="toggle('pre140202312455552', 'post140202312455552')"><pre></pre></li>
1081
1082 </ol>
1083
1084 </div>
1085
1086
1087
1088 <div class="commands">
1089
1090 <a href="#" onclick="return varToggle(this, '140202312455552')"><span>▶</span> Local vars</a>
1091
1092 </div>
1093 <table class="vars" id="v140202312455552">
1094 <thead>
1095 <tr>
1096 <th>Variable</th>
1097 <th>Value</th>
1098 </tr>
1099 </thead>
1100 <tbody>
1101
1102 <tr>
1103 <td>run_async</td>
1104 <td class="code"><pre>True</pre></td>
1105 </tr>
1106
1107 <tr>
1108 <td>self</td>
1109 <td class="code"><pre><backlink.models.WebsiteManager object at 0x7f8367796a90></pre></td>
1110 </tr>
1111
1112 <tr>
1113 <td>urls</td>
1114 <td class="code"><pre>['atcarlsbarbershop.com',
1115 'floydsbarbershop.com',
1116 'barbershopbags.com',
1117 'parkersbarbershop.com',
1118 'finleysbarbershop.com',
1119 'barbershopbar.com',
1120 'garrettsbarbershop.com',
1121 'beardsleysbarbershop.com',
1122 'barbershop.org',
1123 'bensbarbershop.com']</pre></td>
1124 </tr>
1125
1126 </tbody>
1127 </table>
1128
1129 </li>
1130
1131
1132 <li class="frame user">
1133
1134 <code class="fname">/usr/local/lib/python3.8/asyncio/runners.py</code>, line 44, in run
1135
1136
1137
1138 <div class="context" id="c140202312592576">
1139
1140 <ol start="37" class="pre-context" id="pre140202312592576">
1141
1142 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> raise ValueError("a coroutine was expected, got {!r}".format(main))</pre></li>
1143
1144 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre></pre></li>
1145
1146 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> loop = events.new_event_loop()</pre></li>
1147
1148 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> try:</pre></li>
1149
1150 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> events.set_event_loop(loop)</pre></li>
1151
1152 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> if debug is not None:</pre></li>
1153
1154 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> loop.set_debug(debug)</pre></li>
1155
1156 </ol>
1157
1158 <ol start="44" class="context-line">
1159 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> return loop.run_until_complete(main)</pre> <span>â¦</span></li>
1160 </ol>
1161
1162 <ol start='45' class="post-context" id="post140202312592576">
1163
1164 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> finally:</pre></li>
1165
1166 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> try:</pre></li>
1167
1168 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> _cancel_all_tasks(loop)</pre></li>
1169
1170 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> loop.run_until_complete(loop.shutdown_asyncgens())</pre></li>
1171
1172 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> finally:</pre></li>
1173
1174 <li onclick="toggle('pre140202312592576', 'post140202312592576')"><pre> events.set_event_loop(None)</pre></li>
1175
1176 </ol>
1177
1178 </div>
1179
1180
1181
1182 <div class="commands">
1183
1184 <a href="#" onclick="return varToggle(this, '140202312592576')"><span>▶</span> Local vars</a>
1185
1186 </div>
1187 <table class="vars" id="v140202312592576">
1188 <thead>
1189 <tr>
1190 <th>Variable</th>
1191 <th>Value</th>
1192 </tr>
1193 </thead>
1194 <tbody>
1195
1196 <tr>
1197 <td>debug</td>
1198 <td class="code"><pre>True</pre></td>
1199 </tr>
1200
1201 <tr>
1202 <td>loop</td>
1203 <td class="code"><pre><_UnixSelectorEventLoop running=False closed=True debug=True></pre></td>
1204 </tr>
1205
1206 <tr>
1207 <td>main</td>
1208 <td class="code"><pre><coroutine object WebsiteManager._gather_async_results_from_get_or_create_from_url at 0x7f83652b32c0></pre></td>
1209 </tr>
1210
1211 </tbody>
1212 </table>
1213
1214 </li>
1215
1216
1217 <li class="frame user">
1218
1219 <code class="fname">/usr/local/lib/python3.8/asyncio/base_events.py</code>, line 616, in run_until_complete
1220
1221
1222
1223 <div class="context" id="c140202314769344">
1224
1225 <ol start="609" class="pre-context" id="pre140202314769344">
1226
1227 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> future.exception()</pre></li>
1228
1229 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> raise</pre></li>
1230
1231 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> finally:</pre></li>
1232
1233 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> future.remove_done_callback(_run_until_complete_cb)</pre></li>
1234
1235 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> if not future.done():</pre></li>
1236
1237 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> raise RuntimeError('Event loop stopped before Future completed.')</pre></li>
1238
1239 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre></pre></li>
1240
1241 </ol>
1242
1243 <ol start="616" class="context-line">
1244 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> return future.result()</pre> <span>â¦</span></li>
1245 </ol>
1246
1247 <ol start='617' class="post-context" id="post140202314769344">
1248
1249 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre></pre></li>
1250
1251 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> def stop(self):</pre></li>
1252
1253 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> """Stop running the event loop.</pre></li>
1254
1255 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre></pre></li>
1256
1257 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> Every callback already scheduled will still run. This simply informs</pre></li>
1258
1259 <li onclick="toggle('pre140202314769344', 'post140202314769344')"><pre> run_forever to stop looping after a complete iteration.</pre></li>
1260
1261 </ol>
1262
1263 </div>
1264
1265
1266
1267 <div class="commands">
1268
1269 <a href="#" onclick="return varToggle(this, '140202314769344')"><span>▶</span> Local vars</a>
1270
1271 </div>
1272 <table class="vars" id="v140202314769344">
1273 <thead>
1274 <tr>
1275 <th>Variable</th>
1276 <th>Value</th>
1277 </tr>
1278 </thead>
1279 <tbody>
1280
1281 <tr>
1282 <td>future</td>
1283 <td class="code"><pre><Task finished name='Task-25' coro=<WebsiteManager._gather_async_results_from_get_or_create_from_url() done, defined at /usr/src/app/backlink/models.py:95> exception=RuntimeError("There is no current event loop in thread 'ThreadPoolExecutor-0_0'.") created at /usr/local/lib/python3.8/asyncio/base_events.py:595></pre></td>
1284 </tr>
1285
1286 <tr>
1287 <td>new_task</td>
1288 <td class="code"><pre>True</pre></td>
1289 </tr>
1290
1291 <tr>
1292 <td>self</td>
1293 <td class="code"><pre><_UnixSelectorEventLoop running=False closed=True debug=True></pre></td>
1294 </tr>
1295
1296 </tbody>
1297 </table>
1298
1299 </li>
1300
1301
1302 <li class="frame user">
1303
1304 <code class="fname">/usr/src/app/backlink/models.py</code>, line 106, in _gather_async_results_from_get_or_create_from_url
1305
1306
1307
1308 <div class="context" id="c140202312590080">
1309
1310 <ol start="99" class="pre-context" id="pre140202312590080">
1311
1312 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre></pre></li>
1313
1314 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> for url in urls:</pre></li>
1315
1316 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> future = asyncio.create_task(</pre></li>
1317
1318 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> get_or_create_from_url_async(url, run_async=True)</pre></li>
1319
1320 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> )</pre></li>
1321
1322 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> task_list.append(future)</pre></li>
1323
1324 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre></pre></li>
1325
1326 </ol>
1327
1328 <ol start="106" class="context-line">
1329 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> return await asyncio.gather(*task_list)</pre> <span>â¦</span></li>
1330 </ol>
1331
1332 <ol start='107' class="post-context" id="post140202312590080">
1333
1334 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre></pre></li>
1335
1336 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> def get_or_create_from_urls(self, urls: Iterable[str], run_async=True):</pre></li>
1337
1338 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> if run_async:</pre></li>
1339
1340 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> return asyncio.run(</pre></li>
1341
1342 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> self._gather_async_results_from_get_or_create_from_url(urls),</pre></li>
1343
1344 <li onclick="toggle('pre140202312590080', 'post140202312590080')"><pre> debug=bool(settings.DEBUG))</pre></li>
1345
1346 </ol>
1347
1348 </div>
1349
1350
1351
1352 <div class="commands">
1353
1354 <a href="#" onclick="return varToggle(this, '140202312590080')"><span>▶</span> Local vars</a>
1355
1356 </div>
1357 <table class="vars" id="v140202312590080">
1358 <thead>
1359 <tr>
1360 <th>Variable</th>
1361 <th>Value</th>
1362 </tr>
1363 </thead>
1364 <tbody>
1365
1366 <tr>
1367 <td>future</td>
1368 <td class="code"><pre><Task cancelled name='Task-35' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> created at /usr/local/lib/python3.8/asyncio/tasks.py:382></pre></td>
1369 </tr>
1370
1371 <tr>
1372 <td>get_or_create_from_url_async</td>
1373 <td class="code"><pre><asgiref.sync.SyncToAsync object at 0x7f83650b62e0></pre></td>
1374 </tr>
1375
1376 <tr>
1377 <td>self</td>
1378 <td class="code"><pre><backlink.models.WebsiteManager object at 0x7f8367796a90></pre></td>
1379 </tr>
1380
1381 <tr>
1382 <td>task_list</td>
1383 <td class="code"><pre>[<Task finished name='Task-26' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> result=<Website: atc... -> None rows> created at /usr/local/lib/python3.8/asyncio/tasks.py:382>,
1384 <Task finished name='Task-27' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> result=<Website: flo... -> None rows> created at /usr/local/lib/python3.8/asyncio/tasks.py:382>,
1385 <Task finished name='Task-28' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> result=<Website: bar... -> None rows> created at /usr/local/lib/python3.8/asyncio/tasks.py:382>,
1386 <Task finished name='Task-29' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> result=<Website: par... -> None rows> created at /usr/local/lib/python3.8/asyncio/tasks.py:382>,
1387 <Task finished name='Task-30' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> exception=RuntimeError("There is no current event loop in thread 'ThreadPoolExecutor-0_0'.") created at /usr/local/lib/python3.8/asyncio/tasks.py:382>,
1388 <Task cancelled name='Task-31' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> created at /usr/local/lib/python3.8/asyncio/tasks.py:382>,
1389 <Task cancelled name='Task-32' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> created at /usr/local/lib/python3.8/asyncio/tasks.py:382>,
1390 <Task cancelled name='Task-33' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> created at /usr/local/lib/python3.8/asyncio/tasks.py:382>,
1391 <Task cancelled name='Task-34' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> created at /usr/local/lib/python3.8/asyncio/tasks.py:382>,
1392 <Task cancelled name='Task-35' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> created at /usr/local/lib/python3.8/asyncio/tasks.py:382>]</pre></td>
1393 </tr>
1394
1395 <tr>
1396 <td>url</td>
1397 <td class="code"><pre>'bensbarbershop.com'</pre></td>
1398 </tr>
1399
1400 <tr>
1401 <td>urls</td>
1402 <td class="code"><pre>['atcarlsbarbershop.com',
1403 'floydsbarbershop.com',
1404 'barbershopbags.com',
1405 'parkersbarbershop.com',
1406 'finleysbarbershop.com',
1407 'barbershopbar.com',
1408 'garrettsbarbershop.com',
1409 'beardsleysbarbershop.com',
1410 'barbershop.org',
1411 'bensbarbershop.com']</pre></td>
1412 </tr>
1413
1414 </tbody>
1415 </table>
1416
1417 </li>
1418
1419
1420 <li class="frame user">
1421
1422 <code class="fname">/usr/local/lib/python3.8/site-packages/asgiref/sync.py</code>, line 423, in __call__
1423
1424
1425
1426 <div class="context" id="c140202312591552">
1427
1428 <ol start="416" class="pre-context" id="pre140202312591552">
1429
1430 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> self.get_current_task(),</pre></li>
1431
1432 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> sys.exc_info(),</pre></li>
1433
1434 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> func,</pre></li>
1435
1436 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> *args,</pre></li>
1437
1438 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> **kwargs,</pre></li>
1439
1440 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> ),</pre></li>
1441
1442 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> )</pre></li>
1443
1444 </ol>
1445
1446 <ol start="423" class="context-line">
1447 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> ret = await asyncio.wait_for(future, timeout=None)</pre> <span>â¦</span></li>
1448 </ol>
1449
1450 <ol start='424' class="post-context" id="post140202312591552">
1451
1452 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre></pre></li>
1453
1454 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> if contextvars is not None:</pre></li>
1455
1456 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> _restore_context(context)</pre></li>
1457
1458 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre></pre></li>
1459
1460 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre> return ret</pre></li>
1461
1462 <li onclick="toggle('pre140202312591552', 'post140202312591552')"><pre></pre></li>
1463
1464 </ol>
1465
1466 </div>
1467
1468
1469
1470 <div class="commands">
1471
1472 <a href="#" onclick="return varToggle(this, '140202312591552')"><span>▶</span> Local vars</a>
1473
1474 </div>
1475 <table class="vars" id="v140202312591552">
1476 <thead>
1477 <tr>
1478 <th>Variable</th>
1479 <th>Value</th>
1480 </tr>
1481 </thead>
1482 <tbody>
1483
1484 <tr>
1485 <td>args</td>
1486 <td class="code"><pre>(functools.partial(<function WebsiteManager._get_or_create_from_url_base_method at 0x7f8367807ee0>, 'finleysbarbershop.com', run_async=True),)</pre></td>
1487 </tr>
1488
1489 <tr>
1490 <td>child</td>
1491 <td class="code"><pre>functools.partial(<function WebsiteManager._get_or_create_from_url_base_method at 0x7f8367807ee0>, 'finleysbarbershop.com', run_async=True)</pre></td>
1492 </tr>
1493
1494 <tr>
1495 <td>context</td>
1496 <td class="code"><pre><Context object at 0x7f83652be240></pre></td>
1497 </tr>
1498
1499 <tr>
1500 <td>executor</td>
1501 <td class="code"><pre><concurrent.futures.thread.ThreadPoolExecutor object at 0x7f837eeed9d0></pre></td>
1502 </tr>
1503
1504 <tr>
1505 <td>func</td>
1506 <td class="code"><pre><built-in method run of Context object at 0x7f83652be240></pre></td>
1507 </tr>
1508
1509 <tr>
1510 <td>future</td>
1511 <td class="code"><pre><Future finished exception=RuntimeError("There is no current event loop in thread 'ThreadPoolExecutor-0_0'.") created at /usr/local/lib/python3.8/asyncio/base_events.py:422></pre></td>
1512 </tr>
1513
1514 <tr>
1515 <td>kwargs</td>
1516 <td class="code"><pre>{}</pre></td>
1517 </tr>
1518
1519 <tr>
1520 <td>loop</td>
1521 <td class="code"><pre><_UnixSelectorEventLoop running=False closed=True debug=True></pre></td>
1522 </tr>
1523
1524 <tr>
1525 <td>self</td>
1526 <td class="code"><pre><asgiref.sync.SyncToAsync object at 0x7f83650b62e0></pre></td>
1527 </tr>
1528
1529 </tbody>
1530 </table>
1531
1532 </li>
1533
1534
1535 <li class="frame user">
1536
1537 <code class="fname">/usr/local/lib/python3.8/asyncio/tasks.py</code>, line 455, in wait_for
1538
1539
1540
1541 <div class="context" id="c140202312592832">
1542
1543 <ol start="448" class="pre-context" id="pre140202312592832">
1544
1545 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> loop = events.get_running_loop()</pre></li>
1546
1547 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> else:</pre></li>
1548
1549 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> warnings.warn("The loop argument is deprecated since Python 3.8, "</pre></li>
1550
1551 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> "and scheduled for removal in Python 3.10.",</pre></li>
1552
1553 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> DeprecationWarning, stacklevel=2)</pre></li>
1554
1555 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre></pre></li>
1556
1557 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> if timeout is None:</pre></li>
1558
1559 </ol>
1560
1561 <ol start="455" class="context-line">
1562 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> return await fut</pre> <span>â¦</span></li>
1563 </ol>
1564
1565 <ol start='456' class="post-context" id="post140202312592832">
1566
1567 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre></pre></li>
1568
1569 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> if timeout <= 0:</pre></li>
1570
1571 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> fut = ensure_future(fut, loop=loop)</pre></li>
1572
1573 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre></pre></li>
1574
1575 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> if fut.done():</pre></li>
1576
1577 <li onclick="toggle('pre140202312592832', 'post140202312592832')"><pre> return fut.result()</pre></li>
1578
1579 </ol>
1580
1581 </div>
1582
1583
1584
1585 <div class="commands">
1586
1587 <a href="#" onclick="return varToggle(this, '140202312592832')"><span>▶</span> Local vars</a>
1588
1589 </div>
1590 <table class="vars" id="v140202312592832">
1591 <thead>
1592 <tr>
1593 <th>Variable</th>
1594 <th>Value</th>
1595 </tr>
1596 </thead>
1597 <tbody>
1598
1599 <tr>
1600 <td>fut</td>
1601 <td class="code"><pre><Future finished exception=RuntimeError("There is no current event loop in thread 'ThreadPoolExecutor-0_0'.") created at /usr/local/lib/python3.8/asyncio/base_events.py:422></pre></td>
1602 </tr>
1603
1604 <tr>
1605 <td>loop</td>
1606 <td class="code"><pre><_UnixSelectorEventLoop running=False closed=True debug=True></pre></td>
1607 </tr>
1608
1609 <tr>
1610 <td>timeout</td>
1611 <td class="code"><pre>None</pre></td>
1612 </tr>
1613
1614 </tbody>
1615 </table>
1616
1617 </li>
1618
1619
1620 <li class="frame user">
1621
1622 <code class="fname">/usr/local/lib/python3.8/concurrent/futures/thread.py</code>, line 57, in run
1623
1624
1625
1626 <div class="context" id="c140202312591168">
1627
1628 <ol start="50" class="pre-context" id="pre140202312591168">
1629
1630 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> self.kwargs = kwargs</pre></li>
1631
1632 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre></pre></li>
1633
1634 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> def run(self):</pre></li>
1635
1636 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> if not self.future.set_running_or_notify_cancel():</pre></li>
1637
1638 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> return</pre></li>
1639
1640 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre></pre></li>
1641
1642 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> try:</pre></li>
1643
1644 </ol>
1645
1646 <ol start="57" class="context-line">
1647 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> result = self.fn(*self.args, **self.kwargs)</pre> <span>â¦</span></li>
1648 </ol>
1649
1650 <ol start='58' class="post-context" id="post140202312591168">
1651
1652 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> except BaseException as exc:</pre></li>
1653
1654 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> self.future.set_exception(exc)</pre></li>
1655
1656 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> # Break a reference cycle with the exception 'exc'</pre></li>
1657
1658 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> self = None</pre></li>
1659
1660 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> else:</pre></li>
1661
1662 <li onclick="toggle('pre140202312591168', 'post140202312591168')"><pre> self.future.set_result(result)</pre></li>
1663
1664 </ol>
1665
1666 </div>
1667
1668
1669
1670 <div class="commands">
1671
1672 <a href="#" onclick="return varToggle(this, '140202312591168')"><span>▶</span> Local vars</a>
1673
1674 </div>
1675 <table class="vars" id="v140202312591168">
1676 <thead>
1677 <tr>
1678 <th>Variable</th>
1679 <th>Value</th>
1680 </tr>
1681 </thead>
1682 <tbody>
1683
1684 <tr>
1685 <td>self</td>
1686 <td class="code"><pre>None</pre></td>
1687 </tr>
1688
1689 </tbody>
1690 </table>
1691
1692 </li>
1693
1694
1695 <li class="frame user">
1696
1697 <code class="fname">/usr/local/lib/python3.8/site-packages/asgiref/sync.py</code>, line 462, in thread_handler
1698
1699
1700
1701 <div class="context" id="c140202312590720">
1702
1703 <ol start="455" class="pre-context" id="pre140202312590720">
1704
1705 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> # after raising it so exc_info is correctly populated.</pre></li>
1706
1707 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> if exc_info[1]:</pre></li>
1708
1709 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> try:</pre></li>
1710
1711 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> raise exc_info[1]</pre></li>
1712
1713 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> except BaseException:</pre></li>
1714
1715 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> return func(*args, **kwargs)</pre></li>
1716
1717 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> else:</pre></li>
1718
1719 </ol>
1720
1721 <ol start="462" class="context-line">
1722 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> return func(*args, **kwargs)</pre> <span>â¦</span></li>
1723 </ol>
1724
1725 <ol start='463' class="post-context" id="post140202312590720">
1726
1727 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> finally:</pre></li>
1728
1729 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> # Only delete the launch_map parent if we set it, otherwise it is</pre></li>
1730
1731 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> # from someone else.</pre></li>
1732
1733 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> if parent_set:</pre></li>
1734
1735 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre> del self.launch_map[current_thread]</pre></li>
1736
1737 <li onclick="toggle('pre140202312590720', 'post140202312590720')"><pre></pre></li>
1738
1739 </ol>
1740
1741 </div>
1742
1743
1744
1745 <div class="commands">
1746
1747 <a href="#" onclick="return varToggle(this, '140202312590720')"><span>▶</span> Local vars</a>
1748
1749 </div>
1750 <table class="vars" id="v140202312590720">
1751 <thead>
1752 <tr>
1753 <th>Variable</th>
1754 <th>Value</th>
1755 </tr>
1756 </thead>
1757 <tbody>
1758
1759 <tr>
1760 <td>args</td>
1761 <td class="code"><pre>(functools.partial(<function WebsiteManager._get_or_create_from_url_base_method at 0x7f8367807ee0>, 'finleysbarbershop.com', run_async=True),)</pre></td>
1762 </tr>
1763
1764 <tr>
1765 <td>current_thread</td>
1766 <td class="code"><pre><Thread(ThreadPoolExecutor-0_0, started daemon 140202335196928)></pre></td>
1767 </tr>
1768
1769 <tr>
1770 <td>exc_info</td>
1771 <td class="code"><pre>(None, None, None)</pre></td>
1772 </tr>
1773
1774 <tr>
1775 <td>func</td>
1776 <td class="code"><pre><built-in method run of Context object at 0x7f83652be240></pre></td>
1777 </tr>
1778
1779 <tr>
1780 <td>kwargs</td>
1781 <td class="code"><pre>{}</pre></td>
1782 </tr>
1783
1784 <tr>
1785 <td>loop</td>
1786 <td class="code"><pre><_UnixSelectorEventLoop running=False closed=True debug=True></pre></td>
1787 </tr>
1788
1789 <tr>
1790 <td>parent_set</td>
1791 <td class="code"><pre>True</pre></td>
1792 </tr>
1793
1794 <tr>
1795 <td>self</td>
1796 <td class="code"><pre><asgiref.sync.SyncToAsync object at 0x7f83650b62e0></pre></td>
1797 </tr>
1798
1799 <tr>
1800 <td>source_task</td>
1801 <td class="code"><pre><Task finished name='Task-30' coro=<SyncToAsync.__call__() done, defined at /usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> exception=RuntimeError("There is no current event loop in thread 'ThreadPoolExecutor-0_0'.") created at /usr/local/lib/python3.8/asyncio/tasks.py:382></pre></td>
1802 </tr>
1803
1804 </tbody>
1805 </table>
1806
1807 </li>
1808
1809
1810 <li class="frame user">
1811
1812 <code class="fname">/usr/src/app/backlink/models.py</code>, line 84, in _get_or_create_from_url_base_method
1813
1814
1815
1816 <div class="context" id="c140202312589760">
1817
1818 <ol start="77" class="pre-context" id="pre140202312589760">
1819
1820 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> tld=data['tld'],</pre></li>
1821
1822 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> defaults=dict(url=url, title=data['title'])</pre></li>
1823
1824 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> )</pre></li>
1825
1826 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> stopwatch_instance.click('GET OR CREATE')</pre></li>
1827
1828 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> stopwatch_instance.click('CALLBACKS')</pre></li>
1829
1830 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> if was_created:</pre></li>
1831
1832 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> logger.debug(f'Created new Website for URL: {url}.')</pre></li>
1833
1834 </ol>
1835
1836 <ol start="84" class="context-line">
1837 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> website.on_created(run_async)</pre> <span>â¦</span></li>
1838 </ol>
1839
1840 <ol start='85' class="post-context" id="post140202312589760">
1841
1842 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> else:</pre></li>
1843
1844 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> logger.debug(f'Existing website: {url} id: {website.id}')</pre></li>
1845
1846 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> stopwatch_instance.click('CALLBACKS')</pre></li>
1847
1848 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> stopwatch_instance.log_overall_time()</pre></li>
1849
1850 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre> return website</pre></li>
1851
1852 <li onclick="toggle('pre140202312589760', 'post140202312589760')"><pre></pre></li>
1853
1854 </ol>
1855
1856 </div>
1857
1858
1859
1860 <div class="commands">
1861
1862 <a href="#" onclick="return varToggle(this, '140202312589760')"><span>▶</span> Local vars</a>
1863
1864 </div>
1865 <table class="vars" id="v140202312589760">
1866 <thead>
1867 <tr>
1868 <th>Variable</th>
1869 <th>Value</th>
1870 </tr>
1871 </thead>
1872 <tbody>
1873
1874 <tr>
1875 <td>data</td>
1876 <td class="code"><pre>{'domain': 'finleysbarbershop.com',
1877 'hostname': 'finleysbarbershop.com',
1878 'title': 'finleysbarbershop',
1879 'tld': 'com'}</pre></td>
1880 </tr>
1881
1882 <tr>
1883 <td>run_async</td>
1884 <td class="code"><pre>True</pre></td>
1885 </tr>
1886
1887 <tr>
1888 <td>stopwatch_instance</td>
1889 <td class="code"><pre><utils.profiling.Stopwatch object at 0x7f8365bcd5b0></pre></td>
1890 </tr>
1891
1892 <tr>
1893 <td>url</td>
1894 <td class="code"><pre>'finleysbarbershop.com'</pre></td>
1895 </tr>
1896
1897 <tr>
1898 <td>was_created</td>
1899 <td class="code"><pre>True</pre></td>
1900 </tr>
1901
1902 <tr>
1903 <td>website</td>
1904 <td class="code"><pre><Website: finleysbarbershop.com | ahrefsbacklinks:None -> None rows | majesticbacklinks:None -> None rows | urldownload:None -> None rows | urlclassify:None -> None rows | toxicity:None -> None rows></pre></td>
1905 </tr>
1906
1907 </tbody>
1908 </table>
1909
1910 </li>
1911
1912
1913 <li class="frame user">
1914
1915 <code class="fname">/usr/src/app/backlink/models.py</code>, line 287, in on_created
1916
1917
1918
1919 <div class="context" id="c140202312590208">
1920
1921 <ol start="280" class="pre-context" id="pre140202312590208">
1922
1923 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> """</pre></li>
1924
1925 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> This method gets called after a new Website gets created</pre></li>
1926
1927 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> """</pre></li>
1928
1929 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> stopwatch_instance = Stopwatch('Website.on_created')</pre></li>
1930
1931 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> self.pull_ahrefs_backlinks(run_async=run_async)</pre></li>
1932
1933 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> self.pull_majestic_backlinks(run_async=run_async)</pre></li>
1934
1935 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> stopwatch_instance.click('pull_website_stats_ahrefs')</pre></li>
1936
1937 </ol>
1938
1939 <ol start="287" class="context-line">
1940 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> self.pull_website_stats_ahrefs()</pre> <span>â¦</span></li>
1941 </ol>
1942
1943 <ol start='288' class="post-context" id="post140202312590208">
1944
1945 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> stopwatch_instance.click('pull_website_stats_ahrefs')</pre></li>
1946
1947 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> stopwatch_instance.click('pull_screenshot')</pre></li>
1948
1949 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> self._call_task('pull_screenshot', self, run_async)</pre></li>
1950
1951 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> stopwatch_instance.click('pull_screenshot')</pre></li>
1952
1953 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> stopwatch_instance.log_overall_time()</pre></li>
1954
1955 <li onclick="toggle('pre140202312590208', 'post140202312590208')"><pre> # START - Celery Task Management Methods</pre></li>
1956
1957 </ol>
1958
1959 </div>
1960
1961
1962
1963 <div class="commands">
1964
1965 <a href="#" onclick="return varToggle(this, '140202312590208')"><span>▶</span> Local vars</a>
1966
1967 </div>
1968 <table class="vars" id="v140202312590208">
1969 <thead>
1970 <tr>
1971 <th>Variable</th>
1972 <th>Value</th>
1973 </tr>
1974 </thead>
1975 <tbody>
1976
1977 <tr>
1978 <td>run_async</td>
1979 <td class="code"><pre>True</pre></td>
1980 </tr>
1981
1982 <tr>
1983 <td>self</td>
1984 <td class="code"><pre><Website: finleysbarbershop.com | ahrefsbacklinks:None -> None rows | majesticbacklinks:None -> None rows | urldownload:None -> None rows | urlclassify:None -> None rows | toxicity:None -> None rows></pre></td>
1985 </tr>
1986
1987 <tr>
1988 <td>stopwatch_instance</td>
1989 <td class="code"><pre><utils.profiling.Stopwatch object at 0x7f83650b83d0></pre></td>
1990 </tr>
1991
1992 </tbody>
1993 </table>
1994
1995 </li>
1996
1997
1998 <li class="frame user">
1999
2000 <code class="fname">/usr/src/app/backlink/models.py</code>, line 235, in pull_website_stats_ahrefs
2001
2002
2003
2004 <div class="context" id="c140202312590848">
2005
2006 <ol start="228" class="pre-context" id="pre140202312590848">
2007
2008 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> 4) ahrefs_refdomain_count</pre></li>
2009
2010 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> 5) ahrefs_website_stats_updated_at</pre></li>
2011
2012 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> """</pre></li>
2013
2014 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> from vendor.ahrefs.api import update_website_stats</pre></li>
2015
2016 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> if self.ahrefs_website_stats_updated_at and self.ahrefs_website_stats_updated_at > timezone.now() - datetime.timedelta(days=30):</pre></li>
2017
2018 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> logger.info('Skipping update, data has been updated within the last 30 days...')</pre></li>
2019
2020 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> return</pre></li>
2021
2022 </ol>
2023
2024 <ol start="235" class="context-line">
2025 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> update_website_stats(self)</pre> <span>â¦</span></li>
2026 </ol>
2027
2028 <ol start='236' class="post-context" id="post140202312590848">
2029
2030 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre></pre></li>
2031
2032 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> def pull_majestic_backlinks(self, run_async=False, force=False):</pre></li>
2033
2034 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> """</pre></li>
2035
2036 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> The main method used to pull Majestic backlinks for a Website</pre></li>
2037
2038 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> """</pre></li>
2039
2040 <li onclick="toggle('pre140202312590848', 'post140202312590848')"><pre> if not self.should_process_majestic_backlinks:</pre></li>
2041
2042 </ol>
2043
2044 </div>
2045
2046
2047
2048 <div class="commands">
2049
2050 <a href="#" onclick="return varToggle(this, '140202312590848')"><span>▶</span> Local vars</a>
2051
2052 </div>
2053 <table class="vars" id="v140202312590848">
2054 <thead>
2055 <tr>
2056 <th>Variable</th>
2057 <th>Value</th>
2058 </tr>
2059 </thead>
2060 <tbody>
2061
2062 <tr>
2063 <td>self</td>
2064 <td class="code"><pre><Website: finleysbarbershop.com | ahrefsbacklinks:None -> None rows | majesticbacklinks:None -> None rows | urldownload:None -> None rows | urlclassify:None -> None rows | toxicity:None -> None rows></pre></td>
2065 </tr>
2066
2067 <tr>
2068 <td>update_website_stats</td>
2069 <td class="code"><pre><function update_website_stats at 0x7f8368b558b0></pre></td>
2070 </tr>
2071
2072 </tbody>
2073 </table>
2074
2075 </li>
2076
2077
2078 <li class="frame user">
2079
2080 <code class="fname">/usr/src/app/vendor/ahrefs/api.py</code>, line 54, in update_website_stats
2081
2082
2083
2084 <div class="context" id="c140202312591104">
2085
2086 <ol start="47" class="pre-context" id="pre140202312591104">
2087
2088 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> Performs 2 API calls to get this data.</pre></li>
2089
2090 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> """</pre></li>
2091
2092 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> stopwatch_instance = Stopwatch('ahrefs.api.update_website_stats')</pre></li>
2093
2094 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> stopwatch_instance.click('FETCH DATA')</pre></li>
2095
2096 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> hostname = website_obj.hostname</pre></li>
2097
2098 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> api = APIClient()</pre></li>
2099
2100 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> logger.info(f"Fetching data for {hostname} from ahrefs vendor")</pre></li>
2101
2102 </ol>
2103
2104 <ol start="54" class="context-line">
2105 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> response = {**api.get_positions_metrics(hostname, run_async=not settings.TEST_MODE),</pre> <span>â¦</span></li>
2106 </ol>
2107
2108 <ol start='55' class="post-context" id="post140202312591104">
2109
2110 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> **api.get_pages_extended_for_url(hostname, run_async=not settings.TEST_MODE),</pre></li>
2111
2112 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> **api.get_dr_and_ur_for_url(hostname, run_async=not settings.TEST_MODE)}</pre></li>
2113
2114 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> stopwatch_instance.click('FETCH DATA')</pre></li>
2115
2116 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> stopwatch_instance.click('SAVE NEW DATA')</pre></li>
2117
2118 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre></pre></li>
2119
2120 <li onclick="toggle('pre140202312591104', 'post140202312591104')"><pre> internal_to_external = {</pre></li>
2121
2122 </ol>
2123
2124 </div>
2125
2126
2127
2128 <div class="commands">
2129
2130 <a href="#" onclick="return varToggle(this, '140202312591104')"><span>▶</span> Local vars</a>
2131
2132 </div>
2133 <table class="vars" id="v140202312591104">
2134 <thead>
2135 <tr>
2136 <th>Variable</th>
2137 <th>Value</th>
2138 </tr>
2139 </thead>
2140 <tbody>
2141
2142 <tr>
2143 <td>api</td>
2144 <td class="code"><pre><vendor.ahrefs.api.APIClient object at 0x7f8365bcdd60></pre></td>
2145 </tr>
2146
2147 <tr>
2148 <td>hostname</td>
2149 <td class="code"><pre>'finleysbarbershop.com'</pre></td>
2150 </tr>
2151
2152 <tr>
2153 <td>stopwatch_instance</td>
2154 <td class="code"><pre><utils.profiling.Stopwatch object at 0x7f8365073e50></pre></td>
2155 </tr>
2156
2157 <tr>
2158 <td>website_obj</td>
2159 <td class="code"><pre><Website: finleysbarbershop.com | ahrefsbacklinks:None -> None rows | majesticbacklinks:None -> None rows | urldownload:None -> None rows | urlclassify:None -> None rows | toxicity:None -> None rows></pre></td>
2160 </tr>
2161
2162 </tbody>
2163 </table>
2164
2165 </li>
2166
2167
2168 <li class="frame user">
2169
2170 <code class="fname">/usr/src/app/vendor/ahrefs/api.py</code>, line 276, in get_positions_metrics
2171
2172
2173
2174 <div class="context" id="c140202312590976">
2175
2176 <ol start="269" class="pre-context" id="pre140202312590976">
2177
2178 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> 'from': 'positions_metrics',</pre></li>
2179
2180 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> 'mode': 'subdomains',</pre></li>
2181
2182 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> 'limit': limit,</pre></li>
2183
2184 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> 'target': target,</pre></li>
2185
2186 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> 'output': 'json',</pre></li>
2187
2188 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> 'token': self.get_token(),</pre></li>
2189
2190 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> }</pre></li>
2191
2192 </ol>
2193
2194 <ol start="276" class="context-line">
2195 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> response = self.get(params, run_async=run_async)['metrics']</pre> <span>â¦</span></li>
2196 </ol>
2197
2198 <ol start='277' class="post-context" id="post140202312590976">
2199
2200 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> logger.info(f"Position_metris {response}")</pre></li>
2201
2202 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> return response</pre></li>
2203
2204 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre></pre></li>
2205
2206 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre></pre></li>
2207
2208 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre>async def fetch(url, params, session):</pre></li>
2209
2210 <li onclick="toggle('pre140202312590976', 'post140202312590976')"><pre> while True:</pre></li>
2211
2212 </ol>
2213
2214 </div>
2215
2216
2217
2218 <div class="commands">
2219
2220 <a href="#" onclick="return varToggle(this, '140202312590976')"><span>▶</span> Local vars</a>
2221
2222 </div>
2223 <table class="vars" id="v140202312590976">
2224 <thead>
2225 <tr>
2226 <th>Variable</th>
2227 <th>Value</th>
2228 </tr>
2229 </thead>
2230 <tbody>
2231
2232 <tr>
2233 <td>limit</td>
2234 <td class="code"><pre>1000</pre></td>
2235 </tr>
2236
2237 <tr>
2238 <td>params</td>
2239 <td class="code"><pre>{'from': 'positions_metrics',
2240 'limit': 1000,
2241 'mode': 'subdomains',
2242 'output': 'json',
2243 'target': 'finleysbarbershop.com',
2244 'token': '_VdtvfJ_POoce00XymccszGiO-0ltyC4g7ctpF8H'}</pre></td>
2245 </tr>
2246
2247 <tr>
2248 <td>run_async</td>
2249 <td class="code"><pre>True</pre></td>
2250 </tr>
2251
2252 <tr>
2253 <td>self</td>
2254 <td class="code"><pre><vendor.ahrefs.api.APIClient object at 0x7f8365bcdd60></pre></td>
2255 </tr>
2256
2257 <tr>
2258 <td>target</td>
2259 <td class="code"><pre>'finleysbarbershop.com'</pre></td>
2260 </tr>
2261
2262 </tbody>
2263 </table>
2264
2265 </li>
2266
2267
2268 <li class="frame user">
2269
2270 <code class="fname">/usr/src/app/vendor/ahrefs/api.py</code>, line 107, in get
2271
2272
2273
2274 <div class="context" id="c140202315240000">
2275
2276 <ol start="100" class="pre-context" id="pre140202315240000">
2277
2278 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> self.do_async = do_async</pre></li>
2279
2280 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> self.tasks = tasks</pre></li>
2281
2282 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre></pre></li>
2283
2284 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> def get(self, params: dict, run_async=False):</pre></li>
2285
2286 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> if not self.do_async:</pre></li>
2287
2288 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> # Asyncio based (different kind of async)</pre></li>
2289
2290 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> if run_async:</pre></li>
2291
2292 </ol>
2293
2294 <ol start="107" class="context-line">
2295 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> loop = asyncio.get_event_loop()</pre> <span>â¦</span></li>
2296 </ol>
2297
2298 <ol start='108' class="post-context" id="post140202315240000">
2299
2300 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> return loop.run_until_complete(self.get_async(params))</pre></li>
2301
2302 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> return self.get_sync(params)</pre></li>
2303
2304 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> else:</pre></li>
2305
2306 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> logger.info('Added queued async task from {}'.format(params['from']))</pre></li>
2307
2308 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre> self.tasks.append(params)</pre></li>
2309
2310 <li onclick="toggle('pre140202315240000', 'post140202315240000')"><pre></pre></li>
2311
2312 </ol>
2313
2314 </div>
2315
2316
2317
2318 <div class="commands">
2319
2320 <a href="#" onclick="return varToggle(this, '140202315240000')"><span>▶</span> Local vars</a>
2321
2322 </div>
2323 <table class="vars" id="v140202315240000">
2324 <thead>
2325 <tr>
2326 <th>Variable</th>
2327 <th>Value</th>
2328 </tr>
2329 </thead>
2330 <tbody>
2331
2332 <tr>
2333 <td>params</td>
2334 <td class="code"><pre>{'from': 'positions_metrics',
2335 'limit': 1000,
2336 'mode': 'subdomains',
2337 'output': 'json',
2338 'target': 'finleysbarbershop.com',
2339 'token': '_VdtvfJ_POoce00XymccszGiO-0ltyC4g7ctpF8H'}</pre></td>
2340 </tr>
2341
2342 <tr>
2343 <td>run_async</td>
2344 <td class="code"><pre>True</pre></td>
2345 </tr>
2346
2347 <tr>
2348 <td>self</td>
2349 <td class="code"><pre><vendor.ahrefs.api.APIClient object at 0x7f8365bcdd60></pre></td>
2350 </tr>
2351
2352 </tbody>
2353 </table>
2354
2355 </li>
2356
2357
2358 <li class="frame user">
2359
2360 <code class="fname">/usr/local/lib/python3.8/asyncio/events.py</code>, line 639, in get_event_loop
2361
2362
2363
2364 <div class="context" id="c140202314750592">
2365
2366 <ol start="632" class="pre-context" id="pre140202314750592">
2367
2368 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> """</pre></li>
2369
2370 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> if (self._local._loop is None and</pre></li>
2371
2372 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> not self._local._set_called and</pre></li>
2373
2374 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> isinstance(threading.current_thread(), threading._MainThread)):</pre></li>
2375
2376 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> self.set_event_loop(self.new_event_loop())</pre></li>
2377
2378 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre></pre></li>
2379
2380 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> if self._local._loop is None:</pre></li>
2381
2382 </ol>
2383
2384 <ol start="639" class="context-line">
2385 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> raise RuntimeError('There is no current event loop in thread %r.'</pre> <span>â¦</span></li>
2386 </ol>
2387
2388 <ol start='640' class="post-context" id="post140202314750592">
2389
2390 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> % threading.current_thread().name)</pre></li>
2391
2392 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre></pre></li>
2393
2394 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> return self._local._loop</pre></li>
2395
2396 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre></pre></li>
2397
2398 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> def set_event_loop(self, loop):</pre></li>
2399
2400 <li onclick="toggle('pre140202314750592', 'post140202314750592')"><pre> """Set the event loop."""</pre></li>
2401
2402 </ol>
2403
2404 </div>
2405
2406
2407
2408 <div class="commands">
2409
2410 <a href="#" onclick="return varToggle(this, '140202314750592')"><span>▶</span> Local vars</a>
2411
2412 </div>
2413 <table class="vars" id="v140202314750592">
2414 <thead>
2415 <tr>
2416 <th>Variable</th>
2417 <th>Value</th>
2418 </tr>
2419 </thead>
2420 <tbody>
2421
2422 <tr>
2423 <td>self</td>
2424 <td class="code"><pre><asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f83668b9070></pre></td>
2425 </tr>
2426
2427 </tbody>
2428 </table>
2429
2430 </li>
2431
2432 </ul>
2433 </div>
2434 <form action="https://dpaste.com/" name="pasteform" id="pasteform" method="post">
2435
2436 <div id="pastebinTraceback" class="pastebin">
2437 <input type="hidden" name="language" value="PythonConsole">
2438 <input type="hidden" name="title"
2439 value="RuntimeError at /backlink/keyword-difficulty/">
2440 <input type="hidden" name="source" value="Django Dpaste Agent">
2441 <input type="hidden" name="poster" value="Django">
2442 <textarea name="content" id="traceback_area" cols="140" rows="25">
2443Environment:
2444
2445
2446Request Method: GET
2447Request URL: https://backlink.searchatlas.com/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com
2448
2449Django Version: 3.2
2450Python Version: 3.8.9
2451Installed Applications:
2452['django.contrib.admin',
2453 'django.contrib.auth',
2454 'django.contrib.contenttypes',
2455 'django.contrib.sessions',
2456 'django.contrib.messages',
2457 'django.contrib.staticfiles',
2458 'django.contrib.humanize',
2459 'backlink.apps.BacklinkConfig',
2460 'rest_framework',
2461 'rest_framework_api_key',
2462 'django_extensions',
2463 'django_celery_beat',
2464 'django_celery_results',
2465 'django_json_widget',
2466 'django_object_actions',
2467 'drf_yasg',
2468 'sslserver',
2469 'debug_toolbar']
2470Installed Middleware:
2471['debug_toolbar.middleware.DebugToolbarMiddleware',
2472 'django.middleware.security.SecurityMiddleware',
2473 'django.contrib.sessions.middleware.SessionMiddleware',
2474 'corsheaders.middleware.CorsMiddleware',
2475 'django.middleware.common.CommonMiddleware',
2476 'django.middleware.csrf.CsrfViewMiddleware',
2477 'django.contrib.auth.middleware.AuthenticationMiddleware',
2478 'django.contrib.messages.middleware.MessageMiddleware',
2479 'django.middleware.clickjacking.XFrameOptionsMiddleware']
2480
2481
2482
2483Traceback (most recent call last):
2484 File "/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
2485 response = get_response(request)
2486 File "/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
2487 response = wrapped_callback(request, *callback_args, **callback_kwargs)
2488 File "/usr/local/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
2489 return view_func(*args, **kwargs)
2490 File "/usr/local/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
2491 return self.dispatch(request, *args, **kwargs)
2492 File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch
2493 response = self.handle_exception(exc)
2494 File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception
2495 self.raise_uncaught_exception(exc)
2496 File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
2497 raise exc
2498 File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 506, in dispatch
2499 response = handler(request, *args, **kwargs)
2500 File "/usr/src/app/backlink/api/v1/views.py", line 247, in get
2501 websites = Website.objects.get_or_create_from_urls(urls=website_urls)
2502 File "/usr/src/app/backlink/models.py", line 110, in get_or_create_from_urls
2503 return asyncio.run(
2504 File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run
2505 return loop.run_until_complete(main)
2506 File "/usr/local/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
2507 return future.result()
2508 File "/usr/src/app/backlink/models.py", line 106, in _gather_async_results_from_get_or_create_from_url
2509 return await asyncio.gather(*task_list)
2510 File "/usr/local/lib/python3.8/site-packages/asgiref/sync.py", line 423, in __call__
2511 ret = await asyncio.wait_for(future, timeout=None)
2512 File "/usr/local/lib/python3.8/asyncio/tasks.py", line 455, in wait_for
2513 return await fut
2514 File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 57, in run
2515 result = self.fn(*self.args, **self.kwargs)
2516 File "/usr/local/lib/python3.8/site-packages/asgiref/sync.py", line 462, in thread_handler
2517 return func(*args, **kwargs)
2518 File "/usr/src/app/backlink/models.py", line 84, in _get_or_create_from_url_base_method
2519 website.on_created(run_async)
2520 File "/usr/src/app/backlink/models.py", line 287, in on_created
2521 self.pull_website_stats_ahrefs()
2522 File "/usr/src/app/backlink/models.py", line 235, in pull_website_stats_ahrefs
2523 update_website_stats(self)
2524 File "/usr/src/app/vendor/ahrefs/api.py", line 54, in update_website_stats
2525 response = {**api.get_positions_metrics(hostname, run_async=not settings.TEST_MODE),
2526 File "/usr/src/app/vendor/ahrefs/api.py", line 276, in get_positions_metrics
2527 response = self.get(params, run_async=run_async)['metrics']
2528 File "/usr/src/app/vendor/ahrefs/api.py", line 107, in get
2529 loop = asyncio.get_event_loop()
2530 File "/usr/local/lib/python3.8/asyncio/events.py", line 639, in get_event_loop
2531 raise RuntimeError('There is no current event loop in thread %r.'
2532
2533Exception Type: RuntimeError at /backlink/keyword-difficulty/
2534Exception Value: There is no current event loop in thread 'ThreadPoolExecutor-0_0'.
2535</textarea>
2536 <br><br>
2537 <input type="submit" value="Share this traceback on a public website">
2538 </div>
2539</form>
2540</div>
2541
2542
2543
2544<div id="requestinfo">
2545 <h2>Request information</h2>
2546
2547
2548
2549 <h3 id="user-info">USER</h3>
2550 <p>1</p>
2551
2552
2553 <h3 id="get-info">GET</h3>
2554
2555 <table class="req">
2556 <thead>
2557 <tr>
2558 <th>Variable</th>
2559 <th>Value</th>
2560 </tr>
2561 </thead>
2562 <tbody>
2563
2564 <tr>
2565 <td>websites</td>
2566 <td class="code"><pre>'bensbarbershop.com'</pre></td>
2567 </tr>
2568
2569 </tbody>
2570 </table>
2571
2572
2573 <h3 id="post-info">POST</h3>
2574
2575 <p>No POST data</p>
2576
2577 <h3 id="files-info">FILES</h3>
2578
2579 <p>No FILES data</p>
2580
2581
2582
2583 <h3 id="cookie-info">COOKIES</h3>
2584
2585 <p>No cookie data</p>
2586
2587
2588 <h3 id="meta-info">META</h3>
2589 <table class="req">
2590 <thead>
2591 <tr>
2592 <th>Variable</th>
2593 <th>Value</th>
2594 </tr>
2595 </thead>
2596 <tbody>
2597
2598 <tr>
2599 <td>HTTP_ACCEPT</td>
2600 <td class="code"><pre>'*/*'</pre></td>
2601 </tr>
2602
2603 <tr>
2604 <td>HTTP_ACCEPT_ENCODING</td>
2605 <td class="code"><pre>'gzip'</pre></td>
2606 </tr>
2607
2608 <tr>
2609 <td>HTTP_AUTHORIZATION</td>
2610 <td class="code"><pre>('Bearer '
2611 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoic2xpZGluZyIsImV4cCI6MTYxOTI2NDk2MCwianRpIjoiNjllMDliNmRiYTAyNDMwOGFlYjU1N2M1MTFmMDg3MjgiLCJyZWZyZXNoX2V4cCI6MTYxOTI2NDk2MCwidXNlcl9pZCI6MSwiY3VzdG9tZXIiOnsiaWQiOjQzOSwidGVhbV9pZHMiOlsxNzk1MSwxNzU5OSwxNzU5OCwxNzUwMywxNzM3NywxNzAxNSwxNjYxMSwxNjU5NiwxNjQzMCwxMjkxNiw2MTQsMjI4LDFdLCJpc19zdWJzY3JpYmVyIjpmYWxzZX19.1HyD2TgtFlleqDE3nyi4mCKaGjN1N0rnnzd7plgfLGA')</pre></td>
2612 </tr>
2613
2614 <tr>
2615 <td>HTTP_CDN_LOOP</td>
2616 <td class="code"><pre>'cloudflare'</pre></td>
2617 </tr>
2618
2619 <tr>
2620 <td>HTTP_CF_CONNECTING_IP</td>
2621 <td class="code"><pre>'24.135.194.235'</pre></td>
2622 </tr>
2623
2624 <tr>
2625 <td>HTTP_CF_IPCOUNTRY</td>
2626 <td class="code"><pre>'RS'</pre></td>
2627 </tr>
2628
2629 <tr>
2630 <td>HTTP_CF_RAY</td>
2631 <td class="code"><pre>'642639cc2d0f1fa2-AMS'</pre></td>
2632 </tr>
2633
2634 <tr>
2635 <td>HTTP_CF_REQUEST_ID</td>
2636 <td class="code"><pre>'098bc2739a00001fa2a1060000000001'</pre></td>
2637 </tr>
2638
2639 <tr>
2640 <td>HTTP_CF_VISITOR</td>
2641 <td class="code"><pre>'{"scheme":"https"}'</pre></td>
2642 </tr>
2643
2644 <tr>
2645 <td>HTTP_HOST</td>
2646 <td class="code"><pre>'backlink.searchatlas.com'</pre></td>
2647 </tr>
2648
2649 <tr>
2650 <td>HTTP_USER_AGENT</td>
2651 <td class="code"><pre>'python-requests/2.25.0'</pre></td>
2652 </tr>
2653
2654 <tr>
2655 <td>HTTP_X_FORWARDED_FOR</td>
2656 <td class="code"><pre>'24.135.194.235, 10.142.0.76'</pre></td>
2657 </tr>
2658
2659 <tr>
2660 <td>HTTP_X_FORWARDED_HOST</td>
2661 <td class="code"><pre>'backlink.searchatlas.com'</pre></td>
2662 </tr>
2663
2664 <tr>
2665 <td>HTTP_X_FORWARDED_PORT</td>
2666 <td class="code"><pre>'443'</pre></td>
2667 </tr>
2668
2669 <tr>
2670 <td>HTTP_X_FORWARDED_PROTO</td>
2671 <td class="code"><pre>'https'</pre></td>
2672 </tr>
2673
2674 <tr>
2675 <td>HTTP_X_ORIGINAL_FORWARDED_FOR</td>
2676 <td class="code"><pre>'24.135.194.235'</pre></td>
2677 </tr>
2678
2679 <tr>
2680 <td>HTTP_X_REAL_IP</td>
2681 <td class="code"><pre>'24.135.194.235'</pre></td>
2682 </tr>
2683
2684 <tr>
2685 <td>HTTP_X_REQUEST_ID</td>
2686 <td class="code"><pre>'7703a22f4003647b1c32264aded70de8'</pre></td>
2687 </tr>
2688
2689 <tr>
2690 <td>HTTP_X_SCHEME</td>
2691 <td class="code"><pre>'https'</pre></td>
2692 </tr>
2693
2694 <tr>
2695 <td>PATH_INFO</td>
2696 <td class="code"><pre>'/backlink/keyword-difficulty/'</pre></td>
2697 </tr>
2698
2699 <tr>
2700 <td>QUERY_STRING</td>
2701 <td class="code"><pre>'websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'</pre></td>
2702 </tr>
2703
2704 <tr>
2705 <td>RAW_URI</td>
2706 <td class="code"><pre>'/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'</pre></td>
2707 </tr>
2708
2709 <tr>
2710 <td>REMOTE_ADDR</td>
2711 <td class="code"><pre>'10.24.5.30'</pre></td>
2712 </tr>
2713
2714 <tr>
2715 <td>REMOTE_PORT</td>
2716 <td class="code"><pre>'41258'</pre></td>
2717 </tr>
2718
2719 <tr>
2720 <td>REQUEST_METHOD</td>
2721 <td class="code"><pre>'GET'</pre></td>
2722 </tr>
2723
2724 <tr>
2725 <td>SCRIPT_NAME</td>
2726 <td class="code"><pre>''</pre></td>
2727 </tr>
2728
2729 <tr>
2730 <td>SERVER_NAME</td>
2731 <td class="code"><pre>'0.0.0.0'</pre></td>
2732 </tr>
2733
2734 <tr>
2735 <td>SERVER_PORT</td>
2736 <td class="code"><pre>'8000'</pre></td>
2737 </tr>
2738
2739 <tr>
2740 <td>SERVER_PROTOCOL</td>
2741 <td class="code"><pre>'HTTP/1.1'</pre></td>
2742 </tr>
2743
2744 <tr>
2745 <td>SERVER_SOFTWARE</td>
2746 <td class="code"><pre>'gunicorn/20.0.4'</pre></td>
2747 </tr>
2748
2749 <tr>
2750 <td>gunicorn.socket</td>
2751 <td class="code"><pre><socket.socket fd=11, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('10.24.2.38', 8000), raddr=('10.24.5.30', 41258)></pre></td>
2752 </tr>
2753
2754 <tr>
2755 <td>wsgi.errors</td>
2756 <td class="code"><pre><gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f836518bc70></pre></td>
2757 </tr>
2758
2759 <tr>
2760 <td>wsgi.file_wrapper</td>
2761 <td class="code"><pre><class 'gunicorn.http.wsgi.FileWrapper'></pre></td>
2762 </tr>
2763
2764 <tr>
2765 <td>wsgi.input</td>
2766 <td class="code"><pre><gunicorn.http.body.Body object at 0x7f83650bb310></pre></td>
2767 </tr>
2768
2769 <tr>
2770 <td>wsgi.input_terminated</td>
2771 <td class="code"><pre>True</pre></td>
2772 </tr>
2773
2774 <tr>
2775 <td>wsgi.multiprocess</td>
2776 <td class="code"><pre>True</pre></td>
2777 </tr>
2778
2779 <tr>
2780 <td>wsgi.multithread</td>
2781 <td class="code"><pre>False</pre></td>
2782 </tr>
2783
2784 <tr>
2785 <td>wsgi.run_once</td>
2786 <td class="code"><pre>False</pre></td>
2787 </tr>
2788
2789 <tr>
2790 <td>wsgi.url_scheme</td>
2791 <td class="code"><pre>'http'</pre></td>
2792 </tr>
2793
2794 <tr>
2795 <td>wsgi.version</td>
2796 <td class="code"><pre>(1, 0)</pre></td>
2797 </tr>
2798
2799 </tbody>
2800 </table>
2801
2802
2803 <h3 id="settings-info">Settings</h3>
2804 <h4>Using settings module <code>app.settings</code></h4>
2805 <table class="req">
2806 <thead>
2807 <tr>
2808 <th>Setting</th>
2809 <th>Value</th>
2810 </tr>
2811 </thead>
2812 <tbody>
2813
2814 <tr>
2815 <td>ABSOLUTE_URL_OVERRIDES</td>
2816 <td class="code"><pre>{}</pre></td>
2817 </tr>
2818
2819 <tr>
2820 <td>ADMINS</td>
2821 <td class="code"><pre>[]</pre></td>
2822 </tr>
2823
2824 <tr>
2825 <td>ALLOWED_HOSTS</td>
2826 <td class="code"><pre>['backlink.searchatlas.com',
2827 'backlinkapp-backlinkapp-production.backlinkapp-production.svc.cluster.local',
2828 'backlink-staging.searchatlas.com',
2829 'backlink.linkgraph.io']</pre></td>
2830 </tr>
2831
2832 <tr>
2833 <td>APPEND_SLASH</td>
2834 <td class="code"><pre>True</pre></td>
2835 </tr>
2836
2837 <tr>
2838 <td>AUTHENTICATION_BACKENDS</td>
2839 <td class="code"><pre>['django.contrib.auth.backends.ModelBackend']</pre></td>
2840 </tr>
2841
2842 <tr>
2843 <td>AUTH_PASSWORD_VALIDATORS</td>
2844 <td class="code"><pre>'********************'</pre></td>
2845 </tr>
2846
2847 <tr>
2848 <td>AUTH_USER_MODEL</td>
2849 <td class="code"><pre>'backlink.user'</pre></td>
2850 </tr>
2851
2852 <tr>
2853 <td>BACKLINK_ENVIRONMENT</td>
2854 <td class="code"><pre>'production'</pre></td>
2855 </tr>
2856
2857 <tr>
2858 <td>BACKLINK_WAREHOUSE_URL</td>
2859 <td class="code"><pre>'clickhouse://backlink:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3e5c58075b5f0e065d060d0809085b580e5c5d09090a0b5a0f0f0b065d5f0a0a5f7e5d52575d5556514b4d5b135c5f5d5552575055105d52575d5556514b4d5b">[email protected]</a>/backlink_data'</pre></td>
2860 </tr>
2861
2862 <tr>
2863 <td>BASE_DIR</td>
2864 <td class="code"><pre>'/usr/src/app'</pre></td>
2865 </tr>
2866
2867 <tr>
2868 <td>CACHES</td>
2869 <td class="code"><pre>{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}</pre></td>
2870 </tr>
2871
2872 <tr>
2873 <td>CACHE_MIDDLEWARE_ALIAS</td>
2874 <td class="code"><pre>'default'</pre></td>
2875 </tr>
2876
2877 <tr>
2878 <td>CACHE_MIDDLEWARE_KEY_PREFIX</td>
2879 <td class="code"><pre>'********************'</pre></td>
2880 </tr>
2881
2882 <tr>
2883 <td>CACHE_MIDDLEWARE_SECONDS</td>
2884 <td class="code"><pre>600</pre></td>
2885 </tr>
2886
2887 <tr>
2888 <td>CELERY_ACCEPT_CONTENT</td>
2889 <td class="code"><pre>['application/json']</pre></td>
2890 </tr>
2891
2892 <tr>
2893 <td>CELERY_ALWAYS_EAGER</td>
2894 <td class="code"><pre>False</pre></td>
2895 </tr>
2896
2897 <tr>
2898 <td>CELERY_BEAT_SCHEDULE</td>
2899 <td class="code"><pre>{'periodically-get-subscription-info': {'schedule': <crontab: 0 15 * * * (m/h/d/dM/MY)>,
2900 'task': 'backlink.tasks.periodically_get_subscription_info'},
2901 'periodically-populate-backlink-toxicity-data': {'schedule': <crontab: 0 * * * * (m/h/d/dM/MY)>,
2902 'task': 'backlink.tasks.periodically_populate_backlink_toxicity_data'}}</pre></td>
2903 </tr>
2904
2905 <tr>
2906 <td>CELERY_BROKER_URL</td>
2907 <td class="code"><pre>'redis://redis-backlinkapp-production-master:6379'</pre></td>
2908 </tr>
2909
2910 <tr>
2911 <td>CELERY_RESULT_BACKEND</td>
2912 <td class="code"><pre>'django-db'</pre></td>
2913 </tr>
2914
2915 <tr>
2916 <td>CELERY_RESULT_SERIALIZER</td>
2917 <td class="code"><pre>'json'</pre></td>
2918 </tr>
2919
2920 <tr>
2921 <td>CELERY_TASK_SERIALIZER</td>
2922 <td class="code"><pre>'json'</pre></td>
2923 </tr>
2924
2925 <tr>
2926 <td>CELERY_TIMEZONE</td>
2927 <td class="code"><pre>'UTC'</pre></td>
2928 </tr>
2929
2930 <tr>
2931 <td>CH_CLUSTER_NAME</td>
2932 <td class="code"><pre>'cluster'</pre></td>
2933 </tr>
2934
2935 <tr>
2936 <td>CLICKHOUSE_WAREHOUSE_SETTINGS</td>
2937 <td class="code"><pre>{'cluster_name': 'cluster',
2938 'is_cluster': True,
2939 'url': 'clickhouse://backlink:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="583a3e613d3968603b606b6e6f6e3d3e683a3b6f6f6c6d3c69696d603b396c6c39183b34313b3330372d2b3d753a393b3334313633763b34313b3330372d2b3d">[email protected]</a>/backlink_data'}</pre></td>
2940 </tr>
2941
2942 <tr>
2943 <td>CORE_APPS</td>
2944 <td class="code"><pre>['backlink.apps.BacklinkConfig']</pre></td>
2945 </tr>
2946
2947 <tr>
2948 <td>CORS_ALLOW_CREDENTIALS</td>
2949 <td class="code"><pre>True</pre></td>
2950 </tr>
2951
2952 <tr>
2953 <td>CORS_ORIGIN_WHITELIST</td>
2954 <td class="code"><pre>['https://dashboard.linkgraph.io', 'http://localhost:3000']</pre></td>
2955 </tr>
2956
2957 <tr>
2958 <td>CSRF_COOKIE_AGE</td>
2959 <td class="code"><pre>31449600</pre></td>
2960 </tr>
2961
2962 <tr>
2963 <td>CSRF_COOKIE_DOMAIN</td>
2964 <td class="code"><pre>None</pre></td>
2965 </tr>
2966
2967 <tr>
2968 <td>CSRF_COOKIE_HTTPONLY</td>
2969 <td class="code"><pre>False</pre></td>
2970 </tr>
2971
2972 <tr>
2973 <td>CSRF_COOKIE_NAME</td>
2974 <td class="code"><pre>'csrftoken'</pre></td>
2975 </tr>
2976
2977 <tr>
2978 <td>CSRF_COOKIE_PATH</td>
2979 <td class="code"><pre>'/'</pre></td>
2980 </tr>
2981
2982 <tr>
2983 <td>CSRF_COOKIE_SAMESITE</td>
2984 <td class="code"><pre>'Lax'</pre></td>
2985 </tr>
2986
2987 <tr>
2988 <td>CSRF_COOKIE_SECURE</td>
2989 <td class="code"><pre>False</pre></td>
2990 </tr>
2991
2992 <tr>
2993 <td>CSRF_FAILURE_VIEW</td>
2994 <td class="code"><pre>'django.views.csrf.csrf_failure'</pre></td>
2995 </tr>
2996
2997 <tr>
2998 <td>CSRF_HEADER_NAME</td>
2999 <td class="code"><pre>'HTTP_X_CSRFTOKEN'</pre></td>
3000 </tr>
3001
3002 <tr>
3003 <td>CSRF_TRUSTED_ORIGINS</td>
3004 <td class="code"><pre>[]</pre></td>
3005 </tr>
3006
3007 <tr>
3008 <td>CSRF_USE_SESSIONS</td>
3009 <td class="code"><pre>False</pre></td>
3010 </tr>
3011
3012 <tr>
3013 <td>DATABASES</td>
3014 <td class="code"><pre>{'default': {'ATOMIC_REQUESTS': False,
3015 'AUTOCOMMIT': True,
3016 'CONN_MAX_AGE': 0,
3017 'ENGINE': 'django.db.backends.postgresql',
3018 'HOST': 'domainprospector-prod-db.cloudsql-proxy',
3019 'NAME': 'backlinkapp_db',
3020 'OPTIONS': {},
3021 'PASSWORD': '********************',
3022 'PORT': '5432',
3023 'TEST': {'CHARSET': None,
3024 'COLLATION': None,
3025 'MIGRATE': True,
3026 'MIRROR': None,
3027 'NAME': None},
3028 'TIME_ZONE': None,
3029 'USER': 'backlinkapp'}}</pre></td>
3030 </tr>
3031
3032 <tr>
3033 <td>DATABASE_ROUTERS</td>
3034 <td class="code"><pre>[]</pre></td>
3035 </tr>
3036
3037 <tr>
3038 <td>DATA_UPLOAD_MAX_MEMORY_SIZE</td>
3039 <td class="code"><pre>2621440</pre></td>
3040 </tr>
3041
3042 <tr>
3043 <td>DATA_UPLOAD_MAX_NUMBER_FIELDS</td>
3044 <td class="code"><pre>1000</pre></td>
3045 </tr>
3046
3047 <tr>
3048 <td>DATETIME_FORMAT</td>
3049 <td class="code"><pre>'N j, Y, P'</pre></td>
3050 </tr>
3051
3052 <tr>
3053 <td>DATETIME_INPUT_FORMATS</td>
3054 <td class="code"><pre>['%Y-%m-%d %H:%M:%S',
3055 '%Y-%m-%d %H:%M:%S.%f',
3056 '%Y-%m-%d %H:%M',
3057 '%m/%d/%Y %H:%M:%S',
3058 '%m/%d/%Y %H:%M:%S.%f',
3059 '%m/%d/%Y %H:%M',
3060 '%m/%d/%y %H:%M:%S',
3061 '%m/%d/%y %H:%M:%S.%f',
3062 '%m/%d/%y %H:%M']</pre></td>
3063 </tr>
3064
3065 <tr>
3066 <td>DATE_FORMAT</td>
3067 <td class="code"><pre>'N j, Y'</pre></td>
3068 </tr>
3069
3070 <tr>
3071 <td>DATE_INPUT_FORMATS</td>
3072 <td class="code"><pre>['%Y-%m-%d',
3073 '%m/%d/%Y',
3074 '%m/%d/%y',
3075 '%b %d %Y',
3076 '%b %d, %Y',
3077 '%d %b %Y',
3078 '%d %b, %Y',
3079 '%B %d %Y',
3080 '%B %d, %Y',
3081 '%d %B %Y',
3082 '%d %B, %Y']</pre></td>
3083 </tr>
3084
3085 <tr>
3086 <td>DB_ENGINE</td>
3087 <td class="code"><pre>'django.db.backends.postgresql'</pre></td>
3088 </tr>
3089
3090 <tr>
3091 <td>DB_HOST</td>
3092 <td class="code"><pre>'domainprospector-prod-db.cloudsql-proxy'</pre></td>
3093 </tr>
3094
3095 <tr>
3096 <td>DB_NAME</td>
3097 <td class="code"><pre>'backlinkapp_db'</pre></td>
3098 </tr>
3099
3100 <tr>
3101 <td>DB_PORT</td>
3102 <td class="code"><pre>'5432'</pre></td>
3103 </tr>
3104
3105 <tr>
3106 <td>DB_PW</td>
3107 <td class="code"><pre>'61gh25edt6'</pre></td>
3108 </tr>
3109
3110 <tr>
3111 <td>DB_USER</td>
3112 <td class="code"><pre>'backlinkapp'</pre></td>
3113 </tr>
3114
3115 <tr>
3116 <td>DEBUG</td>
3117 <td class="code"><pre>1</pre></td>
3118 </tr>
3119
3120 <tr>
3121 <td>DEBUG_PROPAGATE_EXCEPTIONS</td>
3122 <td class="code"><pre>False</pre></td>
3123 </tr>
3124
3125 <tr>
3126 <td>DEBUG_TOOLBAR_CONFIG</td>
3127 <td class="code"><pre>{'SHOW_TOOLBAR_CALLBACK': <function <lambda> at 0x7f837e23dd30>}</pre></td>
3128 </tr>
3129
3130 <tr>
3131 <td>DECIMAL_SEPARATOR</td>
3132 <td class="code"><pre>'.'</pre></td>
3133 </tr>
3134
3135 <tr>
3136 <td>DEFAULT_AUTO_FIELD</td>
3137 <td class="code"><pre>'django.db.models.AutoField'</pre></td>
3138 </tr>
3139
3140 <tr>
3141 <td>DEFAULT_CHARSET</td>
3142 <td class="code"><pre>'utf-8'</pre></td>
3143 </tr>
3144
3145 <tr>
3146 <td>DEFAULT_EXCEPTION_REPORTER</td>
3147 <td class="code"><pre>'django.views.debug.ExceptionReporter'</pre></td>
3148 </tr>
3149
3150 <tr>
3151 <td>DEFAULT_EXCEPTION_REPORTER_FILTER</td>
3152 <td class="code"><pre>'django.views.debug.SafeExceptionReporterFilter'</pre></td>
3153 </tr>
3154
3155 <tr>
3156 <td>DEFAULT_FILE_STORAGE</td>
3157 <td class="code"><pre>'storages.backends.gcloud.GoogleCloudStorage'</pre></td>
3158 </tr>
3159
3160 <tr>
3161 <td>DEFAULT_FROM_EMAIL</td>
3162 <td class="code"><pre>'<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="790e1c1b14180a0d1c0b3915161a181511160a0d">[email protected]</a>'</pre></td>
3163 </tr>
3164
3165 <tr>
3166 <td>DEFAULT_HASHING_ALGORITHM</td>
3167 <td class="code"><pre>'sha256'</pre></td>
3168 </tr>
3169
3170 <tr>
3171 <td>DEFAULT_INDEX_TABLESPACE</td>
3172 <td class="code"><pre>''</pre></td>
3173 </tr>
3174
3175 <tr>
3176 <td>DEFAULT_TABLESPACE</td>
3177 <td class="code"><pre>''</pre></td>
3178 </tr>
3179
3180 <tr>
3181 <td>DISALLOWED_USER_AGENTS</td>
3182 <td class="code"><pre>[]</pre></td>
3183 </tr>
3184
3185 <tr>
3186 <td>DJANGO_APPS</td>
3187 <td class="code"><pre>['django.contrib.admin',
3188 'django.contrib.auth',
3189 'django.contrib.contenttypes',
3190 'django.contrib.sessions',
3191 'django.contrib.messages',
3192 'django.contrib.staticfiles',
3193 'django.contrib.humanize']</pre></td>
3194 </tr>
3195
3196 <tr>
3197 <td>EMAIL_BACKEND</td>
3198 <td class="code"><pre>'django.core.mail.backends.smtp.EmailBackend'</pre></td>
3199 </tr>
3200
3201 <tr>
3202 <td>EMAIL_HOST</td>
3203 <td class="code"><pre>'localhost'</pre></td>
3204 </tr>
3205
3206 <tr>
3207 <td>EMAIL_HOST_PASSWORD</td>
3208 <td class="code"><pre>'********************'</pre></td>
3209 </tr>
3210
3211 <tr>
3212 <td>EMAIL_HOST_USER</td>
3213 <td class="code"><pre>''</pre></td>
3214 </tr>
3215
3216 <tr>
3217 <td>EMAIL_PORT</td>
3218 <td class="code"><pre>25</pre></td>
3219 </tr>
3220
3221 <tr>
3222 <td>EMAIL_SSL_CERTFILE</td>
3223 <td class="code"><pre>None</pre></td>
3224 </tr>
3225
3226 <tr>
3227 <td>EMAIL_SSL_KEYFILE</td>
3228 <td class="code"><pre>'********************'</pre></td>
3229 </tr>
3230
3231 <tr>
3232 <td>EMAIL_SUBJECT_PREFIX</td>
3233 <td class="code"><pre>'[Django] '</pre></td>
3234 </tr>
3235
3236 <tr>
3237 <td>EMAIL_TIMEOUT</td>
3238 <td class="code"><pre>None</pre></td>
3239 </tr>
3240
3241 <tr>
3242 <td>EMAIL_USE_LOCALTIME</td>
3243 <td class="code"><pre>False</pre></td>
3244 </tr>
3245
3246 <tr>
3247 <td>EMAIL_USE_SSL</td>
3248 <td class="code"><pre>False</pre></td>
3249 </tr>
3250
3251 <tr>
3252 <td>EMAIL_USE_TLS</td>
3253 <td class="code"><pre>False</pre></td>
3254 </tr>
3255
3256 <tr>
3257 <td>ENABLE_CELERY_PERIODIC_TASKS</td>
3258 <td class="code"><pre>1</pre></td>
3259 </tr>
3260
3261 <tr>
3262 <td>ENV</td>
3263 <td class="code"><pre>'PROD_'</pre></td>
3264 </tr>
3265
3266 <tr>
3267 <td>FILE_UPLOAD_DIRECTORY_PERMISSIONS</td>
3268 <td class="code"><pre>None</pre></td>
3269 </tr>
3270
3271 <tr>
3272 <td>FILE_UPLOAD_HANDLERS</td>
3273 <td class="code"><pre>['django.core.files.uploadhandler.MemoryFileUploadHandler',
3274 'django.core.files.uploadhandler.TemporaryFileUploadHandler']</pre></td>
3275 </tr>
3276
3277 <tr>
3278 <td>FILE_UPLOAD_MAX_MEMORY_SIZE</td>
3279 <td class="code"><pre>2621440</pre></td>
3280 </tr>
3281
3282 <tr>
3283 <td>FILE_UPLOAD_PERMISSIONS</td>
3284 <td class="code"><pre>420</pre></td>
3285 </tr>
3286
3287 <tr>
3288 <td>FILE_UPLOAD_TEMP_DIR</td>
3289 <td class="code"><pre>None</pre></td>
3290 </tr>
3291
3292 <tr>
3293 <td>FIRST_DAY_OF_WEEK</td>
3294 <td class="code"><pre>0</pre></td>
3295 </tr>
3296
3297 <tr>
3298 <td>FIXTURE_DIRS</td>
3299 <td class="code"><pre>[]</pre></td>
3300 </tr>
3301
3302 <tr>
3303 <td>FORCE_SCRIPT_NAME</td>
3304 <td class="code"><pre>None</pre></td>
3305 </tr>
3306
3307 <tr>
3308 <td>FORMAT_MODULE_PATH</td>
3309 <td class="code"><pre>None</pre></td>
3310 </tr>
3311
3312 <tr>
3313 <td>FORM_RENDERER</td>
3314 <td class="code"><pre>'django.forms.renderers.DjangoTemplates'</pre></td>
3315 </tr>
3316
3317 <tr>
3318 <td>GS_BUCKET_NAME</td>
3319 <td class="code"><pre>'backlink-tool-screenshots'</pre></td>
3320 </tr>
3321
3322 <tr>
3323 <td>GS_CREDENTIALS</td>
3324 <td class="code"><pre><google.oauth2.service_account.Credentials object at 0x7f837e6c86a0></pre></td>
3325 </tr>
3326
3327 <tr>
3328 <td>HOST</td>
3329 <td class="code"><pre>'backlink.searchatlas.com'</pre></td>
3330 </tr>
3331
3332 <tr>
3333 <td>IGNORABLE_404_URLS</td>
3334 <td class="code"><pre>[]</pre></td>
3335 </tr>
3336
3337 <tr>
3338 <td>INSTALLED_APPS</td>
3339 <td class="code"><pre>['django.contrib.admin',
3340 'django.contrib.auth',
3341 'django.contrib.contenttypes',
3342 'django.contrib.sessions',
3343 'django.contrib.messages',
3344 'django.contrib.staticfiles',
3345 'django.contrib.humanize',
3346 'backlink.apps.BacklinkConfig',
3347 'rest_framework',
3348 'rest_framework_api_key',
3349 'django_extensions',
3350 'django_celery_beat',
3351 'django_celery_results',
3352 'django_json_widget',
3353 'django_object_actions',
3354 'drf_yasg',
3355 'sslserver',
3356 'debug_toolbar']</pre></td>
3357 </tr>
3358
3359 <tr>
3360 <td>INTERNAL_IPS</td>
3361 <td class="code"><pre>['127.0.0.1']</pre></td>
3362 </tr>
3363
3364 <tr>
3365 <td>LANGUAGES</td>
3366 <td class="code"><pre>[('af', 'Afrikaans'),
3367 ('ar', 'Arabic'),
3368 ('ar-dz', 'Algerian Arabic'),
3369 ('ast', 'Asturian'),
3370 ('az', 'Azerbaijani'),
3371 ('bg', 'Bulgarian'),
3372 ('be', 'Belarusian'),
3373 ('bn', 'Bengali'),
3374 ('br', 'Breton'),
3375 ('bs', 'Bosnian'),
3376 ('ca', 'Catalan'),
3377 ('cs', 'Czech'),
3378 ('cy', 'Welsh'),
3379 ('da', 'Danish'),
3380 ('de', 'German'),
3381 ('dsb', 'Lower Sorbian'),
3382 ('el', 'Greek'),
3383 ('en', 'English'),
3384 ('en-au', 'Australian English'),
3385 ('en-gb', 'British English'),
3386 ('eo', 'Esperanto'),
3387 ('es', 'Spanish'),
3388 ('es-ar', 'Argentinian Spanish'),
3389 ('es-co', 'Colombian Spanish'),
3390 ('es-mx', 'Mexican Spanish'),
3391 ('es-ni', 'Nicaraguan Spanish'),
3392 ('es-ve', 'Venezuelan Spanish'),
3393 ('et', 'Estonian'),
3394 ('eu', 'Basque'),
3395 ('fa', 'Persian'),
3396 ('fi', 'Finnish'),
3397 ('fr', 'French'),
3398 ('fy', 'Frisian'),
3399 ('ga', 'Irish'),
3400 ('gd', 'Scottish Gaelic'),
3401 ('gl', 'Galician'),
3402 ('he', 'Hebrew'),
3403 ('hi', 'Hindi'),
3404 ('hr', 'Croatian'),
3405 ('hsb', 'Upper Sorbian'),
3406 ('hu', 'Hungarian'),
3407 ('hy', 'Armenian'),
3408 ('ia', 'Interlingua'),
3409 ('id', 'Indonesian'),
3410 ('ig', 'Igbo'),
3411 ('io', 'Ido'),
3412 ('is', 'Icelandic'),
3413 ('it', 'Italian'),
3414 ('ja', 'Japanese'),
3415 ('ka', 'Georgian'),
3416 ('kab', 'Kabyle'),
3417 ('kk', 'Kazakh'),
3418 ('km', 'Khmer'),
3419 ('kn', 'Kannada'),
3420 ('ko', 'Korean'),
3421 ('ky', 'Kyrgyz'),
3422 ('lb', 'Luxembourgish'),
3423 ('lt', 'Lithuanian'),
3424 ('lv', 'Latvian'),
3425 ('mk', 'Macedonian'),
3426 ('ml', 'Malayalam'),
3427 ('mn', 'Mongolian'),
3428 ('mr', 'Marathi'),
3429 ('my', 'Burmese'),
3430 ('nb', 'Norwegian Bokmål'),
3431 ('ne', 'Nepali'),
3432 ('nl', 'Dutch'),
3433 ('nn', 'Norwegian Nynorsk'),
3434 ('os', 'Ossetic'),
3435 ('pa', 'Punjabi'),
3436 ('pl', 'Polish'),
3437 ('pt', 'Portuguese'),
3438 ('pt-br', 'Brazilian Portuguese'),
3439 ('ro', 'Romanian'),
3440 ('ru', 'Russian'),
3441 ('sk', 'Slovak'),
3442 ('sl', 'Slovenian'),
3443 ('sq', 'Albanian'),
3444 ('sr', 'Serbian'),
3445 ('sr-latn', 'Serbian Latin'),
3446 ('sv', 'Swedish'),
3447 ('sw', 'Swahili'),
3448 ('ta', 'Tamil'),
3449 ('te', 'Telugu'),
3450 ('tg', 'Tajik'),
3451 ('th', 'Thai'),
3452 ('tk', 'Turkmen'),
3453 ('tr', 'Turkish'),
3454 ('tt', 'Tatar'),
3455 ('udm', 'Udmurt'),
3456 ('uk', 'Ukrainian'),
3457 ('ur', 'Urdu'),
3458 ('uz', 'Uzbek'),
3459 ('vi', 'Vietnamese'),
3460 ('zh-hans', 'Simplified Chinese'),
3461 ('zh-hant', 'Traditional Chinese')]</pre></td>
3462 </tr>
3463
3464 <tr>
3465 <td>LANGUAGES_BIDI</td>
3466 <td class="code"><pre>['he', 'ar', 'ar-dz', 'fa', 'ur']</pre></td>
3467 </tr>
3468
3469 <tr>
3470 <td>LANGUAGE_CODE</td>
3471 <td class="code"><pre>'en-us'</pre></td>
3472 </tr>
3473
3474 <tr>
3475 <td>LANGUAGE_COOKIE_AGE</td>
3476 <td class="code"><pre>None</pre></td>
3477 </tr>
3478
3479 <tr>
3480 <td>LANGUAGE_COOKIE_DOMAIN</td>
3481 <td class="code"><pre>None</pre></td>
3482 </tr>
3483
3484 <tr>
3485 <td>LANGUAGE_COOKIE_HTTPONLY</td>
3486 <td class="code"><pre>False</pre></td>
3487 </tr>
3488
3489 <tr>
3490 <td>LANGUAGE_COOKIE_NAME</td>
3491 <td class="code"><pre>'django_language'</pre></td>
3492 </tr>
3493
3494 <tr>
3495 <td>LANGUAGE_COOKIE_PATH</td>
3496 <td class="code"><pre>'/'</pre></td>
3497 </tr>
3498
3499 <tr>
3500 <td>LANGUAGE_COOKIE_SAMESITE</td>
3501 <td class="code"><pre>None</pre></td>
3502 </tr>
3503
3504 <tr>
3505 <td>LANGUAGE_COOKIE_SECURE</td>
3506 <td class="code"><pre>False</pre></td>
3507 </tr>
3508
3509 <tr>
3510 <td>LINKGRAPHIO_EMAIL_CONNECTION</td>
3511 <td class="code"><pre>{'host': 'email-smtp.us-east-1.amazonaws.com',
3512 'password': '********************',
3513 'port': 587,
3514 'sender': '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cba9aaa8a0a7a2a5a08ba7a2a5a0acb9aabba3e5a2a4">[email protected]</a>',
3515 'use_tls': True,
3516 'username': ''}</pre></td>
3517 </tr>
3518
3519 <tr>
3520 <td>LOCALE_PATHS</td>
3521 <td class="code"><pre>[]</pre></td>
3522 </tr>
3523
3524 <tr>
3525 <td>LOGGING</td>
3526 <td class="code"><pre>{'disable_existing_loggers': False,
3527 'formatters': {'timestamp': {'format': '{asctime} {levelname} {module} '
3528 '{message}',
3529 'style': '{'}},
3530 'handlers': {'console': {'class': 'logging.StreamHandler',
3531 'formatter': 'timestamp'}},
3532 'root': {'handlers': ['console'], 'level': 'DEBUG'},
3533 'version': 1}</pre></td>
3534 </tr>
3535
3536 <tr>
3537 <td>LOGGING_CONFIG</td>
3538 <td class="code"><pre>'logging.config.dictConfig'</pre></td>
3539 </tr>
3540
3541 <tr>
3542 <td>LOGIN_REDIRECT_URL</td>
3543 <td class="code"><pre>'/accounts/profile/'</pre></td>
3544 </tr>
3545
3546 <tr>
3547 <td>LOGIN_URL</td>
3548 <td class="code"><pre>'/accounts/login/'</pre></td>
3549 </tr>
3550
3551 <tr>
3552 <td>LOGOUT_REDIRECT_URL</td>
3553 <td class="code"><pre>None</pre></td>
3554 </tr>
3555
3556 <tr>
3557 <td>MAIL_NOTIFICATIONS_ENABLED</td>
3558 <td class="code"><pre>False</pre></td>
3559 </tr>
3560
3561 <tr>
3562 <td>MANAGERS</td>
3563 <td class="code"><pre>[]</pre></td>
3564 </tr>
3565
3566 <tr>
3567 <td>MEDIA_ROOT</td>
3568 <td class="code"><pre>'/usr/src/app/media'</pre></td>
3569 </tr>
3570
3571 <tr>
3572 <td>MEDIA_URL</td>
3573 <td class="code"><pre>'/media/'</pre></td>
3574 </tr>
3575
3576 <tr>
3577 <td>MESSAGE_STORAGE</td>
3578 <td class="code"><pre>'django.contrib.messages.storage.fallback.FallbackStorage'</pre></td>
3579 </tr>
3580
3581 <tr>
3582 <td>MIDDLEWARE</td>
3583 <td class="code"><pre>['debug_toolbar.middleware.DebugToolbarMiddleware',
3584 'django.middleware.security.SecurityMiddleware',
3585 'django.contrib.sessions.middleware.SessionMiddleware',
3586 'corsheaders.middleware.CorsMiddleware',
3587 'django.middleware.common.CommonMiddleware',
3588 'django.middleware.csrf.CsrfViewMiddleware',
3589 'django.contrib.auth.middleware.AuthenticationMiddleware',
3590 'django.contrib.messages.middleware.MessageMiddleware',
3591 'django.middleware.clickjacking.XFrameOptionsMiddleware']</pre></td>
3592 </tr>
3593
3594 <tr>
3595 <td>MIGRATION_MODULES</td>
3596 <td class="code"><pre>{}</pre></td>
3597 </tr>
3598
3599 <tr>
3600 <td>MONTH_DAY_FORMAT</td>
3601 <td class="code"><pre>'F j'</pre></td>
3602 </tr>
3603
3604 <tr>
3605 <td>NUMBER_GROUPING</td>
3606 <td class="code"><pre>0</pre></td>
3607 </tr>
3608
3609 <tr>
3610 <td>PASSWORD_HASHERS</td>
3611 <td class="code"><pre>'********************'</pre></td>
3612 </tr>
3613
3614 <tr>
3615 <td>PASSWORD_RESET_TIMEOUT</td>
3616 <td class="code"><pre>'********************'</pre></td>
3617 </tr>
3618
3619 <tr>
3620 <td>PASSWORD_RESET_TIMEOUT_DAYS</td>
3621 <td class="code"><pre>'********************'</pre></td>
3622 </tr>
3623
3624 <tr>
3625 <td>PREPEND_WWW</td>
3626 <td class="code"><pre>False</pre></td>
3627 </tr>
3628
3629 <tr>
3630 <td>REST_FRAMEWORK</td>
3631 <td class="code"><pre>{'DEFAULT_AUTHENTICATION_CLASSES': (),
3632 'DEFAULT_PERMISSION_CLASSES': (),
3633 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
3634 'STRICT_JSON': False}</pre></td>
3635 </tr>
3636
3637 <tr>
3638 <td>ROOT_URLCONF</td>
3639 <td class="code"><pre>'app.urls'</pre></td>
3640 </tr>
3641
3642 <tr>
3643 <td>SECRET_KEY</td>
3644 <td class="code"><pre>'********************'</pre></td>
3645 </tr>
3646
3647 <tr>
3648 <td>SECURE_BROWSER_XSS_FILTER</td>
3649 <td class="code"><pre>False</pre></td>
3650 </tr>
3651
3652 <tr>
3653 <td>SECURE_CONTENT_TYPE_NOSNIFF</td>
3654 <td class="code"><pre>True</pre></td>
3655 </tr>
3656
3657 <tr>
3658 <td>SECURE_HSTS_INCLUDE_SUBDOMAINS</td>
3659 <td class="code"><pre>False</pre></td>
3660 </tr>
3661
3662 <tr>
3663 <td>SECURE_HSTS_PRELOAD</td>
3664 <td class="code"><pre>False</pre></td>
3665 </tr>
3666
3667 <tr>
3668 <td>SECURE_HSTS_SECONDS</td>
3669 <td class="code"><pre>0</pre></td>
3670 </tr>
3671
3672 <tr>
3673 <td>SECURE_PROXY_SSL_HEADER</td>
3674 <td class="code"><pre>('HTTP_X_FORWARDED_PROTO', 'https')</pre></td>
3675 </tr>
3676
3677 <tr>
3678 <td>SECURE_REDIRECT_EXEMPT</td>
3679 <td class="code"><pre>[]</pre></td>
3680 </tr>
3681
3682 <tr>
3683 <td>SECURE_REFERRER_POLICY</td>
3684 <td class="code"><pre>'same-origin'</pre></td>
3685 </tr>
3686
3687 <tr>
3688 <td>SECURE_SSL_HOST</td>
3689 <td class="code"><pre>None</pre></td>
3690 </tr>
3691
3692 <tr>
3693 <td>SECURE_SSL_REDIRECT</td>
3694 <td class="code"><pre>False</pre></td>
3695 </tr>
3696
3697 <tr>
3698 <td>SERVER_EMAIL</td>
3699 <td class="code"><pre>'<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="21534e4e55614d4e42404d494e5255">[email protected]</a>'</pre></td>
3700 </tr>
3701
3702 <tr>
3703 <td>SESSION_CACHE_ALIAS</td>
3704 <td class="code"><pre>'default'</pre></td>
3705 </tr>
3706
3707 <tr>
3708 <td>SESSION_COOKIE_AGE</td>
3709 <td class="code"><pre>1209600</pre></td>
3710 </tr>
3711
3712 <tr>
3713 <td>SESSION_COOKIE_DOMAIN</td>
3714 <td class="code"><pre>None</pre></td>
3715 </tr>
3716
3717 <tr>
3718 <td>SESSION_COOKIE_HTTPONLY</td>
3719 <td class="code"><pre>True</pre></td>
3720 </tr>
3721
3722 <tr>
3723 <td>SESSION_COOKIE_NAME</td>
3724 <td class="code"><pre>'sessionid'</pre></td>
3725 </tr>
3726
3727 <tr>
3728 <td>SESSION_COOKIE_PATH</td>
3729 <td class="code"><pre>'/'</pre></td>
3730 </tr>
3731
3732 <tr>
3733 <td>SESSION_COOKIE_SAMESITE</td>
3734 <td class="code"><pre>None</pre></td>
3735 </tr>
3736
3737 <tr>
3738 <td>SESSION_COOKIE_SECURE</td>
3739 <td class="code"><pre>False</pre></td>
3740 </tr>
3741
3742 <tr>
3743 <td>SESSION_ENGINE</td>
3744 <td class="code"><pre>'django.contrib.sessions.backends.db'</pre></td>
3745 </tr>
3746
3747 <tr>
3748 <td>SESSION_EXPIRE_AT_BROWSER_CLOSE</td>
3749 <td class="code"><pre>False</pre></td>
3750 </tr>
3751
3752 <tr>
3753 <td>SESSION_FILE_PATH</td>
3754 <td class="code"><pre>None</pre></td>
3755 </tr>
3756
3757 <tr>
3758 <td>SESSION_SAVE_EVERY_REQUEST</td>
3759 <td class="code"><pre>False</pre></td>
3760 </tr>
3761
3762 <tr>
3763 <td>SESSION_SERIALIZER</td>
3764 <td class="code"><pre>'django.contrib.sessions.serializers.JSONSerializer'</pre></td>
3765 </tr>
3766
3767 <tr>
3768 <td>SETTINGS_MODULE</td>
3769 <td class="code"><pre>'app.settings'</pre></td>
3770 </tr>
3771
3772 <tr>
3773 <td>SHORT_DATETIME_FORMAT</td>
3774 <td class="code"><pre>'m/d/Y P'</pre></td>
3775 </tr>
3776
3777 <tr>
3778 <td>SHORT_DATE_FORMAT</td>
3779 <td class="code"><pre>'m/d/Y'</pre></td>
3780 </tr>
3781
3782 <tr>
3783 <td>SIGNING_BACKEND</td>
3784 <td class="code"><pre>'django.core.signing.TimestampSigner'</pre></td>
3785 </tr>
3786
3787 <tr>
3788 <td>SILENCED_SYSTEM_CHECKS</td>
3789 <td class="code"><pre>[]</pre></td>
3790 </tr>
3791
3792 <tr>
3793 <td>SIMPLE_JWT</td>
3794 <td class="code"><pre>{'ALGORITHM': 'HS256',
3795 'AUTH_HEADER_TYPES': ['Bearer'],
3796 'AUTH_TOKEN_CLASSES': '********************',
3797 'COOKIE_KEY': '********************',
3798 'QUERYPARAM_KEY': '********************',
3799 'SIGNING_KEY': '********************',
3800 'VERIFYING_KEY': '********************'}</pre></td>
3801 </tr>
3802
3803 <tr>
3804 <td>SLACK_MIGHTYSCRIBES_API_TOKEN</td>
3805 <td class="code"><pre>'********************'</pre></td>
3806 </tr>
3807
3808 <tr>
3809 <td>SLACK_MOONROCK_API_TOKEN</td>
3810 <td class="code"><pre>'********************'</pre></td>
3811 </tr>
3812
3813 <tr>
3814 <td>SLACK_SEARCHATLAS_API_TOKEN</td>
3815 <td class="code"><pre>'********************'</pre></td>
3816 </tr>
3817
3818 <tr>
3819 <td>SLACK_SEL_WEBHOOK</td>
3820 <td class="code"><pre>'https://hooks.slack.com/services/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'</pre></td>
3821 </tr>
3822
3823 <tr>
3824 <td>SLACK_WELLAUTHORED_API_TOKEN</td>
3825 <td class="code"><pre>'********************'</pre></td>
3826 </tr>
3827
3828 <tr>
3829 <td>STATICFILES_DIRS</td>
3830 <td class="code"><pre>('/usr/src/app/static/',)</pre></td>
3831 </tr>
3832
3833 <tr>
3834 <td>STATICFILES_FINDERS</td>
3835 <td class="code"><pre>('django.contrib.staticfiles.finders.FileSystemFinder',
3836 'django.contrib.staticfiles.finders.AppDirectoriesFinder')</pre></td>
3837 </tr>
3838
3839 <tr>
3840 <td>STATICFILES_STORAGE</td>
3841 <td class="code"><pre>'django.contrib.staticfiles.storage.StaticFilesStorage'</pre></td>
3842 </tr>
3843
3844 <tr>
3845 <td>STATIC_ROOT</td>
3846 <td class="code"><pre>'/usr/src/app/_static'</pre></td>
3847 </tr>
3848
3849 <tr>
3850 <td>STATIC_SOURCE</td>
3851 <td class="code"><pre>'/usr/src/app/static/'</pre></td>
3852 </tr>
3853
3854 <tr>
3855 <td>STATIC_URL</td>
3856 <td class="code"><pre>'/static/'</pre></td>
3857 </tr>
3858
3859 <tr>
3860 <td>TEMPLATES</td>
3861 <td class="code"><pre>[{'APP_DIRS': True,
3862 'BACKEND': 'django.template.backends.django.DjangoTemplates',
3863 'DIRS': ['templates/'],
3864 'OPTIONS': {'context_processors': ['django.template.context_processors.debug',
3865 'django.template.context_processors.request',
3866 'django.contrib.auth.context_processors.auth',
3867 'django.contrib.messages.context_processors.messages']}}]</pre></td>
3868 </tr>
3869
3870 <tr>
3871 <td>TEST_MODE</td>
3872 <td class="code"><pre>False</pre></td>
3873 </tr>
3874
3875 <tr>
3876 <td>TEST_NON_SERIALIZED_APPS</td>
3877 <td class="code"><pre>[]</pre></td>
3878 </tr>
3879
3880 <tr>
3881 <td>TEST_RUNNER</td>
3882 <td class="code"><pre>'backlink.tests.runner.LinkGraphTestRunner'</pre></td>
3883 </tr>
3884
3885 <tr>
3886 <td>THIRD_PARTY_APPS</td>
3887 <td class="code"><pre>['rest_framework',
3888 'rest_framework_api_key',
3889 'django_extensions',
3890 'django_celery_beat',
3891 'django_celery_results',
3892 'django_json_widget',
3893 'django_object_actions',
3894 'drf_yasg']</pre></td>
3895 </tr>
3896
3897 <tr>
3898 <td>THOUSAND_SEPARATOR</td>
3899 <td class="code"><pre>','</pre></td>
3900 </tr>
3901
3902 <tr>
3903 <td>TIME_FORMAT</td>
3904 <td class="code"><pre>'P'</pre></td>
3905 </tr>
3906
3907 <tr>
3908 <td>TIME_INPUT_FORMATS</td>
3909 <td class="code"><pre>['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']</pre></td>
3910 </tr>
3911
3912 <tr>
3913 <td>TIME_ZONE</td>
3914 <td class="code"><pre>'UTC'</pre></td>
3915 </tr>
3916
3917 <tr>
3918 <td>TOXICITY_INPUT_BUCKET</td>
3919 <td class="code"><pre>'backlink-toxicity-automl-tables-staging'</pre></td>
3920 </tr>
3921
3922 <tr>
3923 <td>TOXICITY_MODEL_DISPLAY_NAME</td>
3924 <td class="code"><pre>'backlink_toxicity_20210317080419'</pre></td>
3925 </tr>
3926
3927 <tr>
3928 <td>TOXICITY_OUTPUT_BUCKET</td>
3929 <td class="code"><pre>'backlink-toxicity-predictions'</pre></td>
3930 </tr>
3931
3932 <tr>
3933 <td>TOXICITY_PROJECT</td>
3934 <td class="code"><pre>'backlink-toxicity'</pre></td>
3935 </tr>
3936
3937 <tr>
3938 <td>TOXICITY_REGION</td>
3939 <td class="code"><pre>'us-central1'</pre></td>
3940 </tr>
3941
3942 <tr>
3943 <td>TOXICITY_SERVICE_ACCOUNT</td>
3944 <td class="code"><pre>'vendor/google/credentials/backlink-toxicity-ade825466bb8.json'</pre></td>
3945 </tr>
3946
3947 <tr>
3948 <td>USE_I18N</td>
3949 <td class="code"><pre>True</pre></td>
3950 </tr>
3951
3952 <tr>
3953 <td>USE_L10N</td>
3954 <td class="code"><pre>True</pre></td>
3955 </tr>
3956
3957 <tr>
3958 <td>USE_PRODUCTION_DBS</td>
3959 <td class="code"><pre>1</pre></td>
3960 </tr>
3961
3962 <tr>
3963 <td>USE_THOUSAND_SEPARATOR</td>
3964 <td class="code"><pre>False</pre></td>
3965 </tr>
3966
3967 <tr>
3968 <td>USE_TZ</td>
3969 <td class="code"><pre>True</pre></td>
3970 </tr>
3971
3972 <tr>
3973 <td>USE_X_FORWARDED_HOST</td>
3974 <td class="code"><pre>False</pre></td>
3975 </tr>
3976
3977 <tr>
3978 <td>USE_X_FORWARDED_PORT</td>
3979 <td class="code"><pre>False</pre></td>
3980 </tr>
3981
3982 <tr>
3983 <td>WSGI_APPLICATION</td>
3984 <td class="code"><pre>'app.wsgi.application'</pre></td>
3985 </tr>
3986
3987 <tr>
3988 <td>X_FRAME_OPTIONS</td>
3989 <td class="code"><pre>'DENY'</pre></td>
3990 </tr>
3991
3992 <tr>
3993 <td>YEAR_MONTH_FORMAT</td>
3994 <td class="code"><pre>'F Y'</pre></td>
3995 </tr>
3996
3997 </tbody>
3998 </table>
3999
4000</div>
4001
4002 <div id="explanation">
4003 <p>
4004 Youâre seeing this error because you have <code>DEBUG = True</code> in your
4005 Django settings file. Change that to <code>False</code>, and Django will
4006 display a standard page generated by the handler for this status code.
4007 </p>
4008 </div>
4009
4010
4011
4012<link rel="stylesheet" href="/static/debug_toolbar/css/print.css" media="print">
4013<link rel="stylesheet" href="/static/debug_toolbar/css/toolbar.css">
4014
4015
4016<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script type="module" src="/static/debug_toolbar/js/toolbar.js" async></script>
4017
4018<div id="djDebug" class="djdt-hidden" dir="ltr"
4019
4020 data-default-show="true"
4021 >
4022 <div class="djdt-hidden" id="djDebugToolbar">
4023 <ul id="djDebugPanelList">
4024 <li><a id="djHideToolBarButton" href="#" title="Hide toolbar">Hide »</a></li>
4025
4026
4027
4028<li id="djdt-HistoryPanel" class="djDebugPanelButton">
4029 <input type="checkbox" data-cookie="djdtHistoryPanel" checked title="Disable for next and successive requests">
4030
4031 <a href="#" title="History" class="HistoryPanel">
4032
4033 History
4034
4035
4036 <br><small>/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com</small>
4037
4038
4039
4040 </a>
4041
4042</li>
4043
4044
4045
4046
4047<li id="djdt-VersionsPanel" class="djDebugPanelButton">
4048 <input type="checkbox" data-cookie="djdtVersionsPanel" checked title="Disable for next and successive requests">
4049
4050 <a href="#" title="Versions" class="VersionsPanel">
4051
4052 Versions
4053
4054
4055 <br><small>Django 3.2</small>
4056
4057
4058
4059 </a>
4060
4061</li>
4062
4063
4064
4065
4066<li id="djdt-TimerPanel" class="djDebugPanelButton">
4067 <input type="checkbox" data-cookie="djdtTimerPanel" checked title="Disable for next and successive requests">
4068
4069 <a href="#" title="Time" class="TimerPanel">
4070
4071 Time
4072
4073
4074 <br><small>CPU: 175.87ms (203.73ms)</small>
4075
4076
4077
4078 </a>
4079
4080</li>
4081
4082
4083
4084
4085<li id="djdt-SettingsPanel" class="djDebugPanelButton">
4086 <input type="checkbox" data-cookie="djdtSettingsPanel" checked title="Disable for next and successive requests">
4087
4088 <a href="#" title="Settings from app.settings" class="SettingsPanel">
4089
4090 Settings
4091
4092
4093
4094
4095
4096
4097 </a>
4098
4099</li>
4100
4101
4102
4103
4104<li id="djdt-HeadersPanel" class="djDebugPanelButton">
4105 <input type="checkbox" data-cookie="djdtHeadersPanel" checked title="Disable for next and successive requests">
4106
4107 <a href="#" title="Headers" class="HeadersPanel">
4108
4109 Headers
4110
4111
4112
4113
4114
4115
4116 </a>
4117
4118</li>
4119
4120
4121
4122
4123<li id="djdt-RequestPanel" class="djDebugPanelButton">
4124 <input type="checkbox" data-cookie="djdtRequestPanel" checked title="Disable for next and successive requests">
4125
4126 <a href="#" title="Request" class="RequestPanel">
4127
4128 Request
4129
4130
4131 <br><small>KeywordDifficultyAPIView</small>
4132
4133
4134
4135 </a>
4136
4137</li>
4138
4139
4140
4141
4142<li id="djdt-SQLPanel" class="djDebugPanelButton">
4143 <input type="checkbox" data-cookie="djdtSQLPanel" checked title="Disable for next and successive requests">
4144
4145 <a href="#" title="SQL queries from 1 connection" class="SQLPanel">
4146
4147 SQL
4148
4149
4150 <br><small>1 query in 3.27ms</small>
4151
4152
4153
4154 </a>
4155
4156</li>
4157
4158
4159
4160
4161<li id="djdt-StaticFilesPanel" class="djDebugPanelButton">
4162 <input type="checkbox" data-cookie="djdtStaticFilesPanel" checked title="Disable for next and successive requests">
4163
4164 <a href="#" title="Static files (198 found, 0 used)" class="StaticFilesPanel">
4165
4166 Static files
4167
4168
4169 <br><small>0 files used</small>
4170
4171
4172
4173 </a>
4174
4175</li>
4176
4177
4178
4179
4180<li id="djdt-TemplatesPanel" class="djDebugPanelButton">
4181 <input type="checkbox" data-cookie="djdtTemplatesPanel" checked title="Disable for next and successive requests">
4182
4183 <a href="#" title="Templates (1 rendered)" class="TemplatesPanel">
4184
4185 Templates
4186
4187
4188
4189
4190
4191
4192 </a>
4193
4194</li>
4195
4196
4197
4198
4199<li id="djdt-CachePanel" class="djDebugPanelButton">
4200 <input type="checkbox" data-cookie="djdtCachePanel" checked title="Disable for next and successive requests">
4201
4202 <a href="#" title="Cache calls from 1 backend" class="CachePanel">
4203
4204 Cache
4205
4206
4207 <br><small>0 calls in 0.00ms</small>
4208
4209
4210
4211 </a>
4212
4213</li>
4214
4215
4216
4217
4218<li id="djdt-SignalsPanel" class="djDebugPanelButton">
4219 <input type="checkbox" data-cookie="djdtSignalsPanel" checked title="Disable for next and successive requests">
4220
4221 <a href="#" title="Signals" class="SignalsPanel">
4222
4223 Signals
4224
4225
4226 <br><small>47 receivers of 15 signals</small>
4227
4228
4229
4230 </a>
4231
4232</li>
4233
4234
4235
4236
4237<li id="djdt-LoggingPanel" class="djDebugPanelButton">
4238 <input type="checkbox" data-cookie="djdtLoggingPanel" checked title="Disable for next and successive requests">
4239
4240 <a href="#" title="Log messages" class="LoggingPanel">
4241
4242 Logging
4243
4244
4245 <br><small>12 messages</small>
4246
4247
4248
4249 </a>
4250
4251</li>
4252
4253
4254
4255
4256<li id="djdt-RedirectsPanel" class="djDebugPanelButton">
4257 <input type="checkbox" data-cookie="djdtRedirectsPanel" title="Enable for next and successive requests">
4258
4259 <div class="djdt-contentless djdt-disabled">
4260
4261 Intercept redirects
4262
4263
4264 </div>
4265
4266</li>
4267
4268
4269
4270
4271<li id="djdt-ProfilingPanel" class="djDebugPanelButton">
4272 <input type="checkbox" data-cookie="djdtProfilingPanel" title="Enable for next and successive requests">
4273
4274 <div class="djdt-contentless djdt-disabled">
4275
4276 Profiling
4277
4278
4279 </div>
4280
4281</li>
4282
4283
4284 </ul>
4285 </div>
4286 <div class="djdt-hidden" id="djDebugToolbarHandle">
4287 <div title="Show toolbar" id="djShowToolBarButton">
4288 <span id="djShowToolBarD">D</span><span id="djShowToolBarJ">J</span>DT
4289 </div>
4290 </div>
4291
4292
4293
4294
4295
4296 <div id="HistoryPanel" class="djdt-panelContent djdt-hidden">
4297 <div class="djDebugPanelTitle">
4298 <button type="button" class="djDebugClose">Ã</button>
4299 <h3>History</h3>
4300 </div>
4301 <div class="djDebugPanelContent">
4302
4303 <div class="djdt-scroll">
4304<form method="get" action="/__debug__/history_refresh/">
4305 <input type="hidden" name="store_id" id="id_store_id"><input type="hidden" name="hash" value="4994b801b49bc7bd89d5805db140898871c95a14" id="id_hash">
4306 <button class="refreshHistory">Refresh</button>
4307</form>
4308<table style="max-height:100%;">
4309 <thead>
4310 <tr>
4311 <th>Time</th>
4312 <th>Method</th>
4313 <th>Path</th>
4314 <th>Request Variables</th>
4315 <th>Action</th>
4316 </tr>
4317 </thead>
4318 <tbody id="djdtHistoryRequests">
4319
4320 </tbody>
4321</table>
4322</div>
4323
4324 </div>
4325 </div>
4326
4327
4328
4329
4330
4331
4332 <div id="VersionsPanel" class="djdt-panelContent djdt-hidden">
4333 <div class="djDebugPanelTitle">
4334 <button type="button" class="djDebugClose">Ã</button>
4335 <h3>Versions</h3>
4336 </div>
4337 <div class="djDebugPanelContent">
4338
4339 <div class="djdt-scroll">
4340<table>
4341 <colgroup>
4342 <col class="djdt-width-20">
4343 <col class="djdt-width-20">
4344 <col>
4345 </colgroup>
4346 <thead>
4347 <tr>
4348 <th>Package</th>
4349 <th>Name</th>
4350 <th>Version</th>
4351 </tr>
4352 </thead>
4353 <tbody>
4354
4355 <tr>
4356 <td>Django</td>
4357 <td></td>
4358 <td>3.2</td>
4359 </tr>
4360
4361 <tr>
4362 <td>Python</td>
4363 <td></td>
4364 <td>3.8.9</td>
4365 </tr>
4366
4367 <tr>
4368 <td>debug_toolbar</td>
4369 <td>Debug Toolbar</td>
4370 <td>3.2</td>
4371 </tr>
4372
4373 <tr>
4374 <td>django_celery_beat</td>
4375 <td>Periodic Tasks</td>
4376 <td>2.2.0</td>
4377 </tr>
4378
4379 <tr>
4380 <td>django_celery_results</td>
4381 <td>Celery Results</td>
4382 <td>2.0.0</td>
4383 </tr>
4384
4385 <tr>
4386 <td>django_extensions</td>
4387 <td>Django Extensions</td>
4388 <td>3.1.2</td>
4389 </tr>
4390
4391 <tr>
4392 <td>django_json_widget</td>
4393 <td>Django_Json_Widget</td>
4394 <td>1.0.1</td>
4395 </tr>
4396
4397 <tr>
4398 <td>django_object_actions</td>
4399 <td>Django_Object_Actions</td>
4400 <td>3.0.2</td>
4401 </tr>
4402
4403 <tr>
4404 <td>drf_yasg</td>
4405 <td>Drf_Yasg</td>
4406 <td>1.20.0</td>
4407 </tr>
4408
4409 <tr>
4410 <td>rest_framework</td>
4411 <td>Django REST framework</td>
4412 <td>3.12.4</td>
4413 </tr>
4414
4415 <tr>
4416 <td>rest_framework_api_key</td>
4417 <td>API Key Permissions</td>
4418 <td>2.0.0</td>
4419 </tr>
4420
4421 <tr>
4422 <td>sslserver</td>
4423 <td>Sslserver</td>
4424 <td>0.22</td>
4425 </tr>
4426
4427 </tbody>
4428</table>
4429</div>
4430
4431 </div>
4432 </div>
4433
4434
4435
4436
4437
4438
4439 <div id="TimerPanel" class="djdt-panelContent djdt-hidden">
4440 <div class="djDebugPanelTitle">
4441 <button type="button" class="djDebugClose">Ã</button>
4442 <h3>Time</h3>
4443 </div>
4444 <div class="djDebugPanelContent">
4445
4446 <div class="djdt-scroll">
4447<h4>Resource usage</h4>
4448<table>
4449 <colgroup>
4450 <col class="djdt-width-20">
4451 <col>
4452 </colgroup>
4453 <thead>
4454 <tr>
4455 <th>Resource</th>
4456 <th>Value</th>
4457 </tr>
4458 </thead>
4459 <tbody>
4460
4461 <tr>
4462 <td>User CPU time</td>
4463 <td>168.647 msec</td>
4464 </tr>
4465
4466 <tr>
4467 <td>System CPU time</td>
4468 <td>7.222 msec</td>
4469 </tr>
4470
4471 <tr>
4472 <td>Total CPU time</td>
4473 <td>175.869 msec</td>
4474 </tr>
4475
4476 <tr>
4477 <td>Elapsed time</td>
4478 <td>203.728 msec</td>
4479 </tr>
4480
4481 <tr>
4482 <td>Context switches</td>
4483 <td>203 voluntary, 56 involuntary</td>
4484 </tr>
4485
4486 </tbody>
4487</table>
4488
4489<!-- This hidden div is populated and displayed by code in toolbar.timer.js -->
4490<div id="djDebugBrowserTiming" class="djdt-hidden">
4491 <h4>Browser timing</h4>
4492 <table>
4493 <colgroup>
4494 <col class="djdt-width-20">
4495 <col class="djdt-width-60">
4496 <col class="djdt-width-20">
4497 </colgroup>
4498 <thead>
4499 <tr>
4500 <th>Timing attribute</th>
4501 <th>Timeline</th>
4502 <th>Milliseconds since navigation start (+length)</th>
4503 </tr>
4504 </thead>
4505 <tbody id="djDebugBrowserTimingTableBody">
4506 </tbody>
4507 </table>
4508</div>
4509</div>
4510
4511 </div>
4512 </div>
4513
4514
4515
4516
4517
4518
4519 <div id="SettingsPanel" class="djdt-panelContent djdt-hidden">
4520 <div class="djDebugPanelTitle">
4521 <button type="button" class="djDebugClose">Ã</button>
4522 <h3>Settings from app.settings</h3>
4523 </div>
4524 <div class="djDebugPanelContent">
4525
4526 <div class="djdt-scroll">
4527<table>
4528 <thead>
4529 <tr>
4530 <th>Setting</th>
4531 <th>Value</th>
4532 </tr>
4533 </thead>
4534 <tbody>
4535
4536 <tr>
4537 <td>ABSOLUTE_URL_OVERRIDES</td>
4538 <td><code>{}</code></td>
4539 </tr>
4540
4541 <tr>
4542 <td>ADMINS</td>
4543 <td><code>[]</code></td>
4544 </tr>
4545
4546 <tr>
4547 <td>ALLOWED_HOSTS</td>
4548 <td><code>['backlink.searchatlas.com',
4549 'backlinkapp-backlinkapp-production.backlinkapp-production.svc.cluster.local',
4550 'backlink-staging.searchatlas.com',
4551 'backlink.linkgraph.io']</code></td>
4552 </tr>
4553
4554 <tr>
4555 <td>APPEND_SLASH</td>
4556 <td><code>True</code></td>
4557 </tr>
4558
4559 <tr>
4560 <td>AUTHENTICATION_BACKENDS</td>
4561 <td><code>['django.contrib.auth.backends.ModelBackend']</code></td>
4562 </tr>
4563
4564 <tr>
4565 <td>AUTH_PASSWORD_VALIDATORS</td>
4566 <td><code>'********************'</code></td>
4567 </tr>
4568
4569 <tr>
4570 <td>AUTH_USER_MODEL</td>
4571 <td><code>'backlink.user'</code></td>
4572 </tr>
4573
4574 <tr>
4575 <td>BACKLINK_ENVIRONMENT</td>
4576 <td><code>'production'</code></td>
4577 </tr>
4578
4579 <tr>
4580 <td>BACKLINK_WAREHOUSE_URL</td>
4581 <td><code>'clickhouse://backlink:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ec8e8ad5898ddcd48fd4dfdadbda898adc8e8fdbdbd8d988ddddd9d48f8dd8d88dac8f80858f878483999f89c18e8d8f8780858287c28f80858f878483999f89">[email protected]</a>/backlink_data'</code></td>
4582 </tr>
4583
4584 <tr>
4585 <td>BASE_DIR</td>
4586 <td><code>'/usr/src/app'</code></td>
4587 </tr>
4588
4589 <tr>
4590 <td>CACHES</td>
4591 <td><code>{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}</code></td>
4592 </tr>
4593
4594 <tr>
4595 <td>CACHE_MIDDLEWARE_ALIAS</td>
4596 <td><code>'default'</code></td>
4597 </tr>
4598
4599 <tr>
4600 <td>CACHE_MIDDLEWARE_KEY_PREFIX</td>
4601 <td><code>'********************'</code></td>
4602 </tr>
4603
4604 <tr>
4605 <td>CACHE_MIDDLEWARE_SECONDS</td>
4606 <td><code>600</code></td>
4607 </tr>
4608
4609 <tr>
4610 <td>CELERY_ACCEPT_CONTENT</td>
4611 <td><code>['application/json']</code></td>
4612 </tr>
4613
4614 <tr>
4615 <td>CELERY_ALWAYS_EAGER</td>
4616 <td><code>False</code></td>
4617 </tr>
4618
4619 <tr>
4620 <td>CELERY_BEAT_SCHEDULE</td>
4621 <td><code>{'periodically-get-subscription-info': {'schedule': <crontab: 0 15 * * * (m/h/d/dM/MY)>,
4622 'task': 'backlink.tasks.periodically_get_subscription_info'},
4623 'periodically-populate-backlink-toxicity-data': {'schedule': <crontab: 0 * * * * (m/h/d/dM/MY)>,
4624 'task': 'backlink.tasks.periodically_populate_backlink_toxicity_data'}}</code></td>
4625 </tr>
4626
4627 <tr>
4628 <td>CELERY_BROKER_URL</td>
4629 <td><code>'redis://redis-backlinkapp-production-master:6379'</code></td>
4630 </tr>
4631
4632 <tr>
4633 <td>CELERY_RESULT_BACKEND</td>
4634 <td><code>'django-db'</code></td>
4635 </tr>
4636
4637 <tr>
4638 <td>CELERY_RESULT_SERIALIZER</td>
4639 <td><code>'json'</code></td>
4640 </tr>
4641
4642 <tr>
4643 <td>CELERY_TASK_SERIALIZER</td>
4644 <td><code>'json'</code></td>
4645 </tr>
4646
4647 <tr>
4648 <td>CELERY_TIMEZONE</td>
4649 <td><code>'UTC'</code></td>
4650 </tr>
4651
4652 <tr>
4653 <td>CH_CLUSTER_NAME</td>
4654 <td><code>'cluster'</code></td>
4655 </tr>
4656
4657 <tr>
4658 <td>CLICKHOUSE_WAREHOUSE_SETTINGS</td>
4659 <td><code>{'cluster_name': 'cluster',
4660 'is_cluster': True,
4661 'url': 'clickhouse://backlink:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e98b8fd08c88d9d18ad1dadfdedf8c8fd98b8adededddc8dd8d8dcd18a88dddd88a98a85808a8281869c9a8cc48b888a8285808782c78a85808a8281869c9a8c">[email protected]</a>/backlink_data'}</code></td>
4662 </tr>
4663
4664 <tr>
4665 <td>CORE_APPS</td>
4666 <td><code>['backlink.apps.BacklinkConfig']</code></td>
4667 </tr>
4668
4669 <tr>
4670 <td>CORS_ALLOW_CREDENTIALS</td>
4671 <td><code>True</code></td>
4672 </tr>
4673
4674 <tr>
4675 <td>CORS_ORIGIN_WHITELIST</td>
4676 <td><code>['https://dashboard.linkgraph.io', 'http://localhost:3000']</code></td>
4677 </tr>
4678
4679 <tr>
4680 <td>CSRF_COOKIE_AGE</td>
4681 <td><code>31449600</code></td>
4682 </tr>
4683
4684 <tr>
4685 <td>CSRF_COOKIE_DOMAIN</td>
4686 <td><code>None</code></td>
4687 </tr>
4688
4689 <tr>
4690 <td>CSRF_COOKIE_HTTPONLY</td>
4691 <td><code>False</code></td>
4692 </tr>
4693
4694 <tr>
4695 <td>CSRF_COOKIE_NAME</td>
4696 <td><code>'csrftoken'</code></td>
4697 </tr>
4698
4699 <tr>
4700 <td>CSRF_COOKIE_PATH</td>
4701 <td><code>'/'</code></td>
4702 </tr>
4703
4704 <tr>
4705 <td>CSRF_COOKIE_SAMESITE</td>
4706 <td><code>'Lax'</code></td>
4707 </tr>
4708
4709 <tr>
4710 <td>CSRF_COOKIE_SECURE</td>
4711 <td><code>False</code></td>
4712 </tr>
4713
4714 <tr>
4715 <td>CSRF_FAILURE_VIEW</td>
4716 <td><code>'django.views.csrf.csrf_failure'</code></td>
4717 </tr>
4718
4719 <tr>
4720 <td>CSRF_HEADER_NAME</td>
4721 <td><code>'HTTP_X_CSRFTOKEN'</code></td>
4722 </tr>
4723
4724 <tr>
4725 <td>CSRF_TRUSTED_ORIGINS</td>
4726 <td><code>[]</code></td>
4727 </tr>
4728
4729 <tr>
4730 <td>CSRF_USE_SESSIONS</td>
4731 <td><code>False</code></td>
4732 </tr>
4733
4734 <tr>
4735 <td>DATABASES</td>
4736 <td><code>{'default': {'ATOMIC_REQUESTS': False,
4737 'AUTOCOMMIT': True,
4738 'CONN_MAX_AGE': 0,
4739 'ENGINE': 'django.db.backends.postgresql',
4740 'HOST': 'domainprospector-prod-db.cloudsql-proxy',
4741 'NAME': 'backlinkapp_db',
4742 'OPTIONS': {},
4743 'PASSWORD': '********************',
4744 'PORT': '5432',
4745 'TEST': {'CHARSET': None,
4746 'COLLATION': None,
4747 'MIGRATE': True,
4748 'MIRROR': None,
4749 'NAME': None},
4750 'TIME_ZONE': None,
4751 'USER': 'backlinkapp'}}</code></td>
4752 </tr>
4753
4754 <tr>
4755 <td>DATABASE_ROUTERS</td>
4756 <td><code>[]</code></td>
4757 </tr>
4758
4759 <tr>
4760 <td>DATA_UPLOAD_MAX_MEMORY_SIZE</td>
4761 <td><code>2621440</code></td>
4762 </tr>
4763
4764 <tr>
4765 <td>DATA_UPLOAD_MAX_NUMBER_FIELDS</td>
4766 <td><code>1000</code></td>
4767 </tr>
4768
4769 <tr>
4770 <td>DATETIME_FORMAT</td>
4771 <td><code>'N j, Y, P'</code></td>
4772 </tr>
4773
4774 <tr>
4775 <td>DATETIME_INPUT_FORMATS</td>
4776 <td><code>['%Y-%m-%d %H:%M:%S',
4777 '%Y-%m-%d %H:%M:%S.%f',
4778 '%Y-%m-%d %H:%M',
4779 '%m/%d/%Y %H:%M:%S',
4780 '%m/%d/%Y %H:%M:%S.%f',
4781 '%m/%d/%Y %H:%M',
4782 '%m/%d/%y %H:%M:%S',
4783 '%m/%d/%y %H:%M:%S.%f',
4784 '%m/%d/%y %H:%M']</code></td>
4785 </tr>
4786
4787 <tr>
4788 <td>DATE_FORMAT</td>
4789 <td><code>'N j, Y'</code></td>
4790 </tr>
4791
4792 <tr>
4793 <td>DATE_INPUT_FORMATS</td>
4794 <td><code>['%Y-%m-%d',
4795 '%m/%d/%Y',
4796 '%m/%d/%y',
4797 '%b %d %Y',
4798 '%b %d, %Y',
4799 '%d %b %Y',
4800 '%d %b, %Y',
4801 '%B %d %Y',
4802 '%B %d, %Y',
4803 '%d %B %Y',
4804 '%d %B, %Y']</code></td>
4805 </tr>
4806
4807 <tr>
4808 <td>DB_ENGINE</td>
4809 <td><code>'django.db.backends.postgresql'</code></td>
4810 </tr>
4811
4812 <tr>
4813 <td>DB_HOST</td>
4814 <td><code>'domainprospector-prod-db.cloudsql-proxy'</code></td>
4815 </tr>
4816
4817 <tr>
4818 <td>DB_NAME</td>
4819 <td><code>'backlinkapp_db'</code></td>
4820 </tr>
4821
4822 <tr>
4823 <td>DB_PORT</td>
4824 <td><code>'5432'</code></td>
4825 </tr>
4826
4827 <tr>
4828 <td>DB_PW</td>
4829 <td><code>'61gh25edt6'</code></td>
4830 </tr>
4831
4832 <tr>
4833 <td>DB_USER</td>
4834 <td><code>'backlinkapp'</code></td>
4835 </tr>
4836
4837 <tr>
4838 <td>DEBUG</td>
4839 <td><code>1</code></td>
4840 </tr>
4841
4842 <tr>
4843 <td>DEBUG_PROPAGATE_EXCEPTIONS</td>
4844 <td><code>False</code></td>
4845 </tr>
4846
4847 <tr>
4848 <td>DEBUG_TOOLBAR_CONFIG</td>
4849 <td><code>{'SHOW_TOOLBAR_CALLBACK': <function <lambda> at 0x7f837e23dd30>}</code></td>
4850 </tr>
4851
4852 <tr>
4853 <td>DECIMAL_SEPARATOR</td>
4854 <td><code>'.'</code></td>
4855 </tr>
4856
4857 <tr>
4858 <td>DEFAULT_AUTO_FIELD</td>
4859 <td><code>'django.db.models.AutoField'</code></td>
4860 </tr>
4861
4862 <tr>
4863 <td>DEFAULT_CHARSET</td>
4864 <td><code>'utf-8'</code></td>
4865 </tr>
4866
4867 <tr>
4868 <td>DEFAULT_EXCEPTION_REPORTER</td>
4869 <td><code>'django.views.debug.ExceptionReporter'</code></td>
4870 </tr>
4871
4872 <tr>
4873 <td>DEFAULT_EXCEPTION_REPORTER_FILTER</td>
4874 <td><code>'django.views.debug.SafeExceptionReporterFilter'</code></td>
4875 </tr>
4876
4877 <tr>
4878 <td>DEFAULT_FILE_STORAGE</td>
4879 <td><code>'storages.backends.gcloud.GoogleCloudStorage'</code></td>
4880 </tr>
4881
4882 <tr>
4883 <td>DEFAULT_FROM_EMAIL</td>
4884 <td><code>'<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0c7b696e616d7f78697e4c60636f6d6064637f78">[email protected]</a>'</code></td>
4885 </tr>
4886
4887 <tr>
4888 <td>DEFAULT_HASHING_ALGORITHM</td>
4889 <td><code>'sha256'</code></td>
4890 </tr>
4891
4892 <tr>
4893 <td>DEFAULT_INDEX_TABLESPACE</td>
4894 <td><code>''</code></td>
4895 </tr>
4896
4897 <tr>
4898 <td>DEFAULT_TABLESPACE</td>
4899 <td><code>''</code></td>
4900 </tr>
4901
4902 <tr>
4903 <td>DISALLOWED_USER_AGENTS</td>
4904 <td><code>[]</code></td>
4905 </tr>
4906
4907 <tr>
4908 <td>DJANGO_APPS</td>
4909 <td><code>['django.contrib.admin',
4910 'django.contrib.auth',
4911 'django.contrib.contenttypes',
4912 'django.contrib.sessions',
4913 'django.contrib.messages',
4914 'django.contrib.staticfiles',
4915 'django.contrib.humanize']</code></td>
4916 </tr>
4917
4918 <tr>
4919 <td>EMAIL_BACKEND</td>
4920 <td><code>'django.core.mail.backends.smtp.EmailBackend'</code></td>
4921 </tr>
4922
4923 <tr>
4924 <td>EMAIL_HOST</td>
4925 <td><code>'localhost'</code></td>
4926 </tr>
4927
4928 <tr>
4929 <td>EMAIL_HOST_PASSWORD</td>
4930 <td><code>'********************'</code></td>
4931 </tr>
4932
4933 <tr>
4934 <td>EMAIL_HOST_USER</td>
4935 <td><code>''</code></td>
4936 </tr>
4937
4938 <tr>
4939 <td>EMAIL_PORT</td>
4940 <td><code>25</code></td>
4941 </tr>
4942
4943 <tr>
4944 <td>EMAIL_SSL_CERTFILE</td>
4945 <td><code>None</code></td>
4946 </tr>
4947
4948 <tr>
4949 <td>EMAIL_SSL_KEYFILE</td>
4950 <td><code>'********************'</code></td>
4951 </tr>
4952
4953 <tr>
4954 <td>EMAIL_SUBJECT_PREFIX</td>
4955 <td><code>'[Django] '</code></td>
4956 </tr>
4957
4958 <tr>
4959 <td>EMAIL_TIMEOUT</td>
4960 <td><code>None</code></td>
4961 </tr>
4962
4963 <tr>
4964 <td>EMAIL_USE_LOCALTIME</td>
4965 <td><code>False</code></td>
4966 </tr>
4967
4968 <tr>
4969 <td>EMAIL_USE_SSL</td>
4970 <td><code>False</code></td>
4971 </tr>
4972
4973 <tr>
4974 <td>EMAIL_USE_TLS</td>
4975 <td><code>False</code></td>
4976 </tr>
4977
4978 <tr>
4979 <td>ENABLE_CELERY_PERIODIC_TASKS</td>
4980 <td><code>1</code></td>
4981 </tr>
4982
4983 <tr>
4984 <td>ENV</td>
4985 <td><code>'PROD_'</code></td>
4986 </tr>
4987
4988 <tr>
4989 <td>FILE_UPLOAD_DIRECTORY_PERMISSIONS</td>
4990 <td><code>None</code></td>
4991 </tr>
4992
4993 <tr>
4994 <td>FILE_UPLOAD_HANDLERS</td>
4995 <td><code>['django.core.files.uploadhandler.MemoryFileUploadHandler',
4996 'django.core.files.uploadhandler.TemporaryFileUploadHandler']</code></td>
4997 </tr>
4998
4999 <tr>
5000 <td>FILE_UPLOAD_MAX_MEMORY_SIZE</td>
5001 <td><code>2621440</code></td>
5002 </tr>
5003
5004 <tr>
5005 <td>FILE_UPLOAD_PERMISSIONS</td>
5006 <td><code>420</code></td>
5007 </tr>
5008
5009 <tr>
5010 <td>FILE_UPLOAD_TEMP_DIR</td>
5011 <td><code>None</code></td>
5012 </tr>
5013
5014 <tr>
5015 <td>FIRST_DAY_OF_WEEK</td>
5016 <td><code>0</code></td>
5017 </tr>
5018
5019 <tr>
5020 <td>FIXTURE_DIRS</td>
5021 <td><code>[]</code></td>
5022 </tr>
5023
5024 <tr>
5025 <td>FORCE_SCRIPT_NAME</td>
5026 <td><code>None</code></td>
5027 </tr>
5028
5029 <tr>
5030 <td>FORMAT_MODULE_PATH</td>
5031 <td><code>None</code></td>
5032 </tr>
5033
5034 <tr>
5035 <td>FORM_RENDERER</td>
5036 <td><code>'django.forms.renderers.DjangoTemplates'</code></td>
5037 </tr>
5038
5039 <tr>
5040 <td>GS_BUCKET_NAME</td>
5041 <td><code>'backlink-tool-screenshots'</code></td>
5042 </tr>
5043
5044 <tr>
5045 <td>GS_CREDENTIALS</td>
5046 <td><code><google.oauth2.service_account.Credentials object at 0x7f837e6c86a0></code></td>
5047 </tr>
5048
5049 <tr>
5050 <td>HOST</td>
5051 <td><code>'backlink.searchatlas.com'</code></td>
5052 </tr>
5053
5054 <tr>
5055 <td>IGNORABLE_404_URLS</td>
5056 <td><code>[]</code></td>
5057 </tr>
5058
5059 <tr>
5060 <td>INSTALLED_APPS</td>
5061 <td><code>['django.contrib.admin',
5062 'django.contrib.auth',
5063 'django.contrib.contenttypes',
5064 'django.contrib.sessions',
5065 'django.contrib.messages',
5066 'django.contrib.staticfiles',
5067 'django.contrib.humanize',
5068 'backlink.apps.BacklinkConfig',
5069 'rest_framework',
5070 'rest_framework_api_key',
5071 'django_extensions',
5072 'django_celery_beat',
5073 'django_celery_results',
5074 'django_json_widget',
5075 'django_object_actions',
5076 'drf_yasg',
5077 'sslserver',
5078 'debug_toolbar']</code></td>
5079 </tr>
5080
5081 <tr>
5082 <td>INTERNAL_IPS</td>
5083 <td><code>['127.0.0.1']</code></td>
5084 </tr>
5085
5086 <tr>
5087 <td>LANGUAGES</td>
5088 <td><code>[('af', 'Afrikaans'),
5089 ('ar', 'Arabic'),
5090 ('ar-dz', 'Algerian Arabic'),
5091 ('ast', 'Asturian'),
5092 ('az', 'Azerbaijani'),
5093 ('bg', 'Bulgarian'),
5094 ('be', 'Belarusian'),
5095 ('bn', 'Bengali'),
5096 ('br', 'Breton'),
5097 ('bs', 'Bosnian'),
5098 ('ca', 'Catalan'),
5099 ('cs', 'Czech'),
5100 ('cy', 'Welsh'),
5101 ('da', 'Danish'),
5102 ('de', 'German'),
5103 ('dsb', 'Lower Sorbian'),
5104 ('el', 'Greek'),
5105 ('en', 'English'),
5106 ('en-au', 'Australian English'),
5107 ('en-gb', 'British English'),
5108 ('eo', 'Esperanto'),
5109 ('es', 'Spanish'),
5110 ('es-ar', 'Argentinian Spanish'),
5111 ('es-co', 'Colombian Spanish'),
5112 ('es-mx', 'Mexican Spanish'),
5113 ('es-ni', 'Nicaraguan Spanish'),
5114 ('es-ve', 'Venezuelan Spanish'),
5115 ('et', 'Estonian'),
5116 ('eu', 'Basque'),
5117 ('fa', 'Persian'),
5118 ('fi', 'Finnish'),
5119 ('fr', 'French'),
5120 ('fy', 'Frisian'),
5121 ('ga', 'Irish'),
5122 ('gd', 'Scottish Gaelic'),
5123 ('gl', 'Galician'),
5124 ('he', 'Hebrew'),
5125 ('hi', 'Hindi'),
5126 ('hr', 'Croatian'),
5127 ('hsb', 'Upper Sorbian'),
5128 ('hu', 'Hungarian'),
5129 ('hy', 'Armenian'),
5130 ('ia', 'Interlingua'),
5131 ('id', 'Indonesian'),
5132 ('ig', 'Igbo'),
5133 ('io', 'Ido'),
5134 ('is', 'Icelandic'),
5135 ('it', 'Italian'),
5136 ('ja', 'Japanese'),
5137 ('ka', 'Georgian'),
5138 ('kab', 'Kabyle'),
5139 ('kk', 'Kazakh'),
5140 ('km', 'Khmer'),
5141 ('kn', 'Kannada'),
5142 ('ko', 'Korean'),
5143 ('ky', 'Kyrgyz'),
5144 ('lb', 'Luxembourgish'),
5145 ('lt', 'Lithuanian'),
5146 ('lv', 'Latvian'),
5147 ('mk', 'Macedonian'),
5148 ('ml', 'Malayalam'),
5149 ('mn', 'Mongolian'),
5150 ('mr', 'Marathi'),
5151 ('my', 'Burmese'),
5152 ('nb', 'Norwegian Bokmål'),
5153 ('ne', 'Nepali'),
5154 ('nl', 'Dutch'),
5155 ('nn', 'Norwegian Nynorsk'),
5156 ('os', 'Ossetic'),
5157 ('pa', 'Punjabi'),
5158 ('pl', 'Polish'),
5159 ('pt', 'Portuguese'),
5160 ('pt-br', 'Brazilian Portuguese'),
5161 ('ro', 'Romanian'),
5162 ('ru', 'Russian'),
5163 ('sk', 'Slovak'),
5164 ('sl', 'Slovenian'),
5165 ('sq', 'Albanian'),
5166 ('sr', 'Serbian'),
5167 ('sr-latn', 'Serbian Latin'),
5168 ('sv', 'Swedish'),
5169 ('sw', 'Swahili'),
5170 ('ta', 'Tamil'),
5171 ('te', 'Telugu'),
5172 ('tg', 'Tajik'),
5173 ('th', 'Thai'),
5174 ('tk', 'Turkmen'),
5175 ('tr', 'Turkish'),
5176 ('tt', 'Tatar'),
5177 ('udm', 'Udmurt'),
5178 ('uk', 'Ukrainian'),
5179 ('ur', 'Urdu'),
5180 ('uz', 'Uzbek'),
5181 ('vi', 'Vietnamese'),
5182 ('zh-hans', 'Simplified Chinese'),
5183 ('zh-hant', 'Traditional Chinese')]</code></td>
5184 </tr>
5185
5186 <tr>
5187 <td>LANGUAGES_BIDI</td>
5188 <td><code>['he', 'ar', 'ar-dz', 'fa', 'ur']</code></td>
5189 </tr>
5190
5191 <tr>
5192 <td>LANGUAGE_CODE</td>
5193 <td><code>'en-us'</code></td>
5194 </tr>
5195
5196 <tr>
5197 <td>LANGUAGE_COOKIE_AGE</td>
5198 <td><code>None</code></td>
5199 </tr>
5200
5201 <tr>
5202 <td>LANGUAGE_COOKIE_DOMAIN</td>
5203 <td><code>None</code></td>
5204 </tr>
5205
5206 <tr>
5207 <td>LANGUAGE_COOKIE_HTTPONLY</td>
5208 <td><code>False</code></td>
5209 </tr>
5210
5211 <tr>
5212 <td>LANGUAGE_COOKIE_NAME</td>
5213 <td><code>'django_language'</code></td>
5214 </tr>
5215
5216 <tr>
5217 <td>LANGUAGE_COOKIE_PATH</td>
5218 <td><code>'/'</code></td>
5219 </tr>
5220
5221 <tr>
5222 <td>LANGUAGE_COOKIE_SAMESITE</td>
5223 <td><code>None</code></td>
5224 </tr>
5225
5226 <tr>
5227 <td>LANGUAGE_COOKIE_SECURE</td>
5228 <td><code>False</code></td>
5229 </tr>
5230
5231 <tr>
5232 <td>LINKGRAPHIO_EMAIL_CONNECTION</td>
5233 <td><code>{'host': 'email-smtp.us-east-1.amazonaws.com',
5234 'password': '********************',
5235 'port': 587,
5236 'sender': '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bad8dbd9d1d6d3d4d1fad6d3d4d1ddc8dbcad294d3d5">[email protected]</a>',
5237 'use_tls': True,
5238 'username': ''}</code></td>
5239 </tr>
5240
5241 <tr>
5242 <td>LOCALE_PATHS</td>
5243 <td><code>[]</code></td>
5244 </tr>
5245
5246 <tr>
5247 <td>LOGGING</td>
5248 <td><code>{'disable_existing_loggers': False,
5249 'formatters': {'timestamp': {'format': '{asctime} {levelname} {module} '
5250 '{message}',
5251 'style': '{'}},
5252 'handlers': {'console': {'class': 'logging.StreamHandler',
5253 'formatter': 'timestamp'}},
5254 'root': {'handlers': ['console'], 'level': 'DEBUG'},
5255 'version': 1}</code></td>
5256 </tr>
5257
5258 <tr>
5259 <td>LOGGING_CONFIG</td>
5260 <td><code>'logging.config.dictConfig'</code></td>
5261 </tr>
5262
5263 <tr>
5264 <td>LOGIN_REDIRECT_URL</td>
5265 <td><code>'/accounts/profile/'</code></td>
5266 </tr>
5267
5268 <tr>
5269 <td>LOGIN_URL</td>
5270 <td><code>'/accounts/login/'</code></td>
5271 </tr>
5272
5273 <tr>
5274 <td>LOGOUT_REDIRECT_URL</td>
5275 <td><code>None</code></td>
5276 </tr>
5277
5278 <tr>
5279 <td>MAIL_NOTIFICATIONS_ENABLED</td>
5280 <td><code>False</code></td>
5281 </tr>
5282
5283 <tr>
5284 <td>MANAGERS</td>
5285 <td><code>[]</code></td>
5286 </tr>
5287
5288 <tr>
5289 <td>MEDIA_ROOT</td>
5290 <td><code>'/usr/src/app/media'</code></td>
5291 </tr>
5292
5293 <tr>
5294 <td>MEDIA_URL</td>
5295 <td><code>'/media/'</code></td>
5296 </tr>
5297
5298 <tr>
5299 <td>MESSAGE_STORAGE</td>
5300 <td><code>'django.contrib.messages.storage.fallback.FallbackStorage'</code></td>
5301 </tr>
5302
5303 <tr>
5304 <td>MIDDLEWARE</td>
5305 <td><code>['debug_toolbar.middleware.DebugToolbarMiddleware',
5306 'django.middleware.security.SecurityMiddleware',
5307 'django.contrib.sessions.middleware.SessionMiddleware',
5308 'corsheaders.middleware.CorsMiddleware',
5309 'django.middleware.common.CommonMiddleware',
5310 'django.middleware.csrf.CsrfViewMiddleware',
5311 'django.contrib.auth.middleware.AuthenticationMiddleware',
5312 'django.contrib.messages.middleware.MessageMiddleware',
5313 'django.middleware.clickjacking.XFrameOptionsMiddleware']</code></td>
5314 </tr>
5315
5316 <tr>
5317 <td>MIGRATION_MODULES</td>
5318 <td><code>{}</code></td>
5319 </tr>
5320
5321 <tr>
5322 <td>MONTH_DAY_FORMAT</td>
5323 <td><code>'F j'</code></td>
5324 </tr>
5325
5326 <tr>
5327 <td>NUMBER_GROUPING</td>
5328 <td><code>0</code></td>
5329 </tr>
5330
5331 <tr>
5332 <td>PASSWORD_HASHERS</td>
5333 <td><code>'********************'</code></td>
5334 </tr>
5335
5336 <tr>
5337 <td>PASSWORD_RESET_TIMEOUT</td>
5338 <td><code>'********************'</code></td>
5339 </tr>
5340
5341 <tr>
5342 <td>PASSWORD_RESET_TIMEOUT_DAYS</td>
5343 <td><code>'********************'</code></td>
5344 </tr>
5345
5346 <tr>
5347 <td>PREPEND_WWW</td>
5348 <td><code>False</code></td>
5349 </tr>
5350
5351 <tr>
5352 <td>REST_FRAMEWORK</td>
5353 <td><code>{'DEFAULT_AUTHENTICATION_CLASSES': (),
5354 'DEFAULT_PERMISSION_CLASSES': (),
5355 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
5356 'STRICT_JSON': False}</code></td>
5357 </tr>
5358
5359 <tr>
5360 <td>ROOT_URLCONF</td>
5361 <td><code>'app.urls'</code></td>
5362 </tr>
5363
5364 <tr>
5365 <td>SECRET_KEY</td>
5366 <td><code>'********************'</code></td>
5367 </tr>
5368
5369 <tr>
5370 <td>SECURE_BROWSER_XSS_FILTER</td>
5371 <td><code>False</code></td>
5372 </tr>
5373
5374 <tr>
5375 <td>SECURE_CONTENT_TYPE_NOSNIFF</td>
5376 <td><code>True</code></td>
5377 </tr>
5378
5379 <tr>
5380 <td>SECURE_HSTS_INCLUDE_SUBDOMAINS</td>
5381 <td><code>False</code></td>
5382 </tr>
5383
5384 <tr>
5385 <td>SECURE_HSTS_PRELOAD</td>
5386 <td><code>False</code></td>
5387 </tr>
5388
5389 <tr>
5390 <td>SECURE_HSTS_SECONDS</td>
5391 <td><code>0</code></td>
5392 </tr>
5393
5394 <tr>
5395 <td>SECURE_PROXY_SSL_HEADER</td>
5396 <td><code>('HTTP_X_FORWARDED_PROTO', 'https')</code></td>
5397 </tr>
5398
5399 <tr>
5400 <td>SECURE_REDIRECT_EXEMPT</td>
5401 <td><code>[]</code></td>
5402 </tr>
5403
5404 <tr>
5405 <td>SECURE_REFERRER_POLICY</td>
5406 <td><code>'same-origin'</code></td>
5407 </tr>
5408
5409 <tr>
5410 <td>SECURE_SSL_HOST</td>
5411 <td><code>None</code></td>
5412 </tr>
5413
5414 <tr>
5415 <td>SECURE_SSL_REDIRECT</td>
5416 <td><code>False</code></td>
5417 </tr>
5418
5419 <tr>
5420 <td>SERVER_EMAIL</td>
5421 <td><code>'<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="daa8b5b5ae9ab6b5b9bbb6b2b5a9ae">[email protected]</a>'</code></td>
5422 </tr>
5423
5424 <tr>
5425 <td>SESSION_CACHE_ALIAS</td>
5426 <td><code>'default'</code></td>
5427 </tr>
5428
5429 <tr>
5430 <td>SESSION_COOKIE_AGE</td>
5431 <td><code>1209600</code></td>
5432 </tr>
5433
5434 <tr>
5435 <td>SESSION_COOKIE_DOMAIN</td>
5436 <td><code>None</code></td>
5437 </tr>
5438
5439 <tr>
5440 <td>SESSION_COOKIE_HTTPONLY</td>
5441 <td><code>True</code></td>
5442 </tr>
5443
5444 <tr>
5445 <td>SESSION_COOKIE_NAME</td>
5446 <td><code>'sessionid'</code></td>
5447 </tr>
5448
5449 <tr>
5450 <td>SESSION_COOKIE_PATH</td>
5451 <td><code>'/'</code></td>
5452 </tr>
5453
5454 <tr>
5455 <td>SESSION_COOKIE_SAMESITE</td>
5456 <td><code>None</code></td>
5457 </tr>
5458
5459 <tr>
5460 <td>SESSION_COOKIE_SECURE</td>
5461 <td><code>False</code></td>
5462 </tr>
5463
5464 <tr>
5465 <td>SESSION_ENGINE</td>
5466 <td><code>'django.contrib.sessions.backends.db'</code></td>
5467 </tr>
5468
5469 <tr>
5470 <td>SESSION_EXPIRE_AT_BROWSER_CLOSE</td>
5471 <td><code>False</code></td>
5472 </tr>
5473
5474 <tr>
5475 <td>SESSION_FILE_PATH</td>
5476 <td><code>None</code></td>
5477 </tr>
5478
5479 <tr>
5480 <td>SESSION_SAVE_EVERY_REQUEST</td>
5481 <td><code>False</code></td>
5482 </tr>
5483
5484 <tr>
5485 <td>SESSION_SERIALIZER</td>
5486 <td><code>'django.contrib.sessions.serializers.JSONSerializer'</code></td>
5487 </tr>
5488
5489 <tr>
5490 <td>SETTINGS_MODULE</td>
5491 <td><code>'app.settings'</code></td>
5492 </tr>
5493
5494 <tr>
5495 <td>SHORT_DATETIME_FORMAT</td>
5496 <td><code>'m/d/Y P'</code></td>
5497 </tr>
5498
5499 <tr>
5500 <td>SHORT_DATE_FORMAT</td>
5501 <td><code>'m/d/Y'</code></td>
5502 </tr>
5503
5504 <tr>
5505 <td>SIGNING_BACKEND</td>
5506 <td><code>'django.core.signing.TimestampSigner'</code></td>
5507 </tr>
5508
5509 <tr>
5510 <td>SILENCED_SYSTEM_CHECKS</td>
5511 <td><code>[]</code></td>
5512 </tr>
5513
5514 <tr>
5515 <td>SIMPLE_JWT</td>
5516 <td><code>{'ALGORITHM': 'HS256',
5517 'AUTH_HEADER_TYPES': ['Bearer'],
5518 'AUTH_TOKEN_CLASSES': '********************',
5519 'COOKIE_KEY': '********************',
5520 'QUERYPARAM_KEY': '********************',
5521 'SIGNING_KEY': '********************',
5522 'VERIFYING_KEY': '********************'}</code></td>
5523 </tr>
5524
5525 <tr>
5526 <td>SLACK_MIGHTYSCRIBES_API_TOKEN</td>
5527 <td><code>'********************'</code></td>
5528 </tr>
5529
5530 <tr>
5531 <td>SLACK_MOONROCK_API_TOKEN</td>
5532 <td><code>'********************'</code></td>
5533 </tr>
5534
5535 <tr>
5536 <td>SLACK_SEARCHATLAS_API_TOKEN</td>
5537 <td><code>'********************'</code></td>
5538 </tr>
5539
5540 <tr>
5541 <td>SLACK_SEL_WEBHOOK</td>
5542 <td><code>'https://hooks.slack.com/services/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'</code></td>
5543 </tr>
5544
5545 <tr>
5546 <td>SLACK_WELLAUTHORED_API_TOKEN</td>
5547 <td><code>'********************'</code></td>
5548 </tr>
5549
5550 <tr>
5551 <td>STATICFILES_DIRS</td>
5552 <td><code>('/usr/src/app/static/',)</code></td>
5553 </tr>
5554
5555 <tr>
5556 <td>STATICFILES_FINDERS</td>
5557 <td><code>('django.contrib.staticfiles.finders.FileSystemFinder',
5558 'django.contrib.staticfiles.finders.AppDirectoriesFinder')</code></td>
5559 </tr>
5560
5561 <tr>
5562 <td>STATICFILES_STORAGE</td>
5563 <td><code>'django.contrib.staticfiles.storage.StaticFilesStorage'</code></td>
5564 </tr>
5565
5566 <tr>
5567 <td>STATIC_ROOT</td>
5568 <td><code>'/usr/src/app/_static'</code></td>
5569 </tr>
5570
5571 <tr>
5572 <td>STATIC_SOURCE</td>
5573 <td><code>'/usr/src/app/static/'</code></td>
5574 </tr>
5575
5576 <tr>
5577 <td>STATIC_URL</td>
5578 <td><code>'/static/'</code></td>
5579 </tr>
5580
5581 <tr>
5582 <td>TEMPLATES</td>
5583 <td><code>[{'APP_DIRS': True,
5584 'BACKEND': 'django.template.backends.django.DjangoTemplates',
5585 'DIRS': ['templates/'],
5586 'OPTIONS': {'context_processors': ['django.template.context_processors.debug',
5587 'django.template.context_processors.request',
5588 'django.contrib.auth.context_processors.auth',
5589 'django.contrib.messages.context_processors.messages']}}]</code></td>
5590 </tr>
5591
5592 <tr>
5593 <td>TEST_MODE</td>
5594 <td><code>False</code></td>
5595 </tr>
5596
5597 <tr>
5598 <td>TEST_NON_SERIALIZED_APPS</td>
5599 <td><code>[]</code></td>
5600 </tr>
5601
5602 <tr>
5603 <td>TEST_RUNNER</td>
5604 <td><code>'backlink.tests.runner.LinkGraphTestRunner'</code></td>
5605 </tr>
5606
5607 <tr>
5608 <td>THIRD_PARTY_APPS</td>
5609 <td><code>['rest_framework',
5610 'rest_framework_api_key',
5611 'django_extensions',
5612 'django_celery_beat',
5613 'django_celery_results',
5614 'django_json_widget',
5615 'django_object_actions',
5616 'drf_yasg']</code></td>
5617 </tr>
5618
5619 <tr>
5620 <td>THOUSAND_SEPARATOR</td>
5621 <td><code>','</code></td>
5622 </tr>
5623
5624 <tr>
5625 <td>TIME_FORMAT</td>
5626 <td><code>'P'</code></td>
5627 </tr>
5628
5629 <tr>
5630 <td>TIME_INPUT_FORMATS</td>
5631 <td><code>['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']</code></td>
5632 </tr>
5633
5634 <tr>
5635 <td>TIME_ZONE</td>
5636 <td><code>'UTC'</code></td>
5637 </tr>
5638
5639 <tr>
5640 <td>TOXICITY_INPUT_BUCKET</td>
5641 <td><code>'backlink-toxicity-automl-tables-staging'</code></td>
5642 </tr>
5643
5644 <tr>
5645 <td>TOXICITY_MODEL_DISPLAY_NAME</td>
5646 <td><code>'backlink_toxicity_20210317080419'</code></td>
5647 </tr>
5648
5649 <tr>
5650 <td>TOXICITY_OUTPUT_BUCKET</td>
5651 <td><code>'backlink-toxicity-predictions'</code></td>
5652 </tr>
5653
5654 <tr>
5655 <td>TOXICITY_PROJECT</td>
5656 <td><code>'backlink-toxicity'</code></td>
5657 </tr>
5658
5659 <tr>
5660 <td>TOXICITY_REGION</td>
5661 <td><code>'us-central1'</code></td>
5662 </tr>
5663
5664 <tr>
5665 <td>TOXICITY_SERVICE_ACCOUNT</td>
5666 <td><code>'vendor/google/credentials/backlink-toxicity-ade825466bb8.json'</code></td>
5667 </tr>
5668
5669 <tr>
5670 <td>USE_I18N</td>
5671 <td><code>True</code></td>
5672 </tr>
5673
5674 <tr>
5675 <td>USE_L10N</td>
5676 <td><code>True</code></td>
5677 </tr>
5678
5679 <tr>
5680 <td>USE_PRODUCTION_DBS</td>
5681 <td><code>1</code></td>
5682 </tr>
5683
5684 <tr>
5685 <td>USE_THOUSAND_SEPARATOR</td>
5686 <td><code>False</code></td>
5687 </tr>
5688
5689 <tr>
5690 <td>USE_TZ</td>
5691 <td><code>True</code></td>
5692 </tr>
5693
5694 <tr>
5695 <td>USE_X_FORWARDED_HOST</td>
5696 <td><code>False</code></td>
5697 </tr>
5698
5699 <tr>
5700 <td>USE_X_FORWARDED_PORT</td>
5701 <td><code>False</code></td>
5702 </tr>
5703
5704 <tr>
5705 <td>WSGI_APPLICATION</td>
5706 <td><code>'app.wsgi.application'</code></td>
5707 </tr>
5708
5709 <tr>
5710 <td>X_FRAME_OPTIONS</td>
5711 <td><code>'DENY'</code></td>
5712 </tr>
5713
5714 <tr>
5715 <td>YEAR_MONTH_FORMAT</td>
5716 <td><code>'F Y'</code></td>
5717 </tr>
5718
5719 </tbody>
5720</table>
5721</div>
5722
5723 </div>
5724 </div>
5725
5726
5727
5728
5729
5730
5731 <div id="HeadersPanel" class="djdt-panelContent djdt-hidden">
5732 <div class="djDebugPanelTitle">
5733 <button type="button" class="djDebugClose">Ã</button>
5734 <h3>Headers</h3>
5735 </div>
5736 <div class="djDebugPanelContent">
5737
5738 <div class="djdt-scroll">
5739
5740<h4>Request headers</h4>
5741
5742<table>
5743 <thead>
5744 <tr>
5745 <th>Key</th>
5746 <th>Value</th>
5747 </tr>
5748 </thead>
5749 <tbody>
5750
5751 <tr>
5752 <td>Accept</td>
5753 <td>*/*</td>
5754 </tr>
5755
5756 <tr>
5757 <td>Accept-Encoding</td>
5758 <td>gzip</td>
5759 </tr>
5760
5761 <tr>
5762 <td>Authorization</td>
5763 <td>Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoic2xpZGluZyIsImV4cCI6MTYxOTI2NDk2MCwianRpIjoiNjllMDliNmRiYTAyNDMwOGFlYjU1N2M1MTFmMDg3MjgiLCJyZWZyZXNoX2V4cCI6MTYxOTI2NDk2MCwidXNlcl9pZCI6MSwiY3VzdG9tZXIiOnsiaWQiOjQzOSwidGVhbV9pZHMiOlsxNzk1MSwxNzU5OSwxNzU5OCwxNzUwMywxNzM3NywxNzAxNSwxNjYxMSwxNjU5NiwxNjQzMCwxMjkxNiw2MTQsMjI4LDFdLCJpc19zdWJzY3JpYmVyIjpmYWxzZX19.1HyD2TgtFlleqDE3nyi4mCKaGjN1N0rnnzd7plgfLGA</td>
5764 </tr>
5765
5766 <tr>
5767 <td>Cdn-Loop</td>
5768 <td>cloudflare</td>
5769 </tr>
5770
5771 <tr>
5772 <td>Cf-Connecting-Ip</td>
5773 <td>24.135.194.235</td>
5774 </tr>
5775
5776 <tr>
5777 <td>Cf-Ipcountry</td>
5778 <td>RS</td>
5779 </tr>
5780
5781 <tr>
5782 <td>Cf-Ray</td>
5783 <td>642639cc2d0f1fa2-AMS</td>
5784 </tr>
5785
5786 <tr>
5787 <td>Cf-Request-Id</td>
5788 <td>098bc2739a00001fa2a1060000000001</td>
5789 </tr>
5790
5791 <tr>
5792 <td>Cf-Visitor</td>
5793 <td>{"scheme":"https"}</td>
5794 </tr>
5795
5796 <tr>
5797 <td>Host</td>
5798 <td>backlink.searchatlas.com</td>
5799 </tr>
5800
5801 <tr>
5802 <td>User-Agent</td>
5803 <td>python-requests/2.25.0</td>
5804 </tr>
5805
5806 <tr>
5807 <td>X-Forwarded-For</td>
5808 <td>24.135.194.235, 10.142.0.76</td>
5809 </tr>
5810
5811 <tr>
5812 <td>X-Forwarded-Host</td>
5813 <td>backlink.searchatlas.com</td>
5814 </tr>
5815
5816 <tr>
5817 <td>X-Forwarded-Port</td>
5818 <td>443</td>
5819 </tr>
5820
5821 <tr>
5822 <td>X-Forwarded-Proto</td>
5823 <td>https</td>
5824 </tr>
5825
5826 <tr>
5827 <td>X-Original-Forwarded-For</td>
5828 <td>24.135.194.235</td>
5829 </tr>
5830
5831 <tr>
5832 <td>X-Real-Ip</td>
5833 <td>24.135.194.235</td>
5834 </tr>
5835
5836 <tr>
5837 <td>X-Request-Id</td>
5838 <td>7703a22f4003647b1c32264aded70de8</td>
5839 </tr>
5840
5841 <tr>
5842 <td>X-Scheme</td>
5843 <td>https</td>
5844 </tr>
5845
5846 </tbody>
5847</table>
5848
5849<h4>Response headers</h4>
5850
5851<table>
5852 <thead>
5853 <tr>
5854 <th>Key</th>
5855 <th>Value</th>
5856 </tr>
5857 </thead>
5858 <tbody>
5859
5860 <tr>
5861 <td>Content-Length</td>
5862 <td>169103</td>
5863 </tr>
5864
5865 <tr>
5866 <td>Content-Type</td>
5867 <td>text/html</td>
5868 </tr>
5869
5870 <tr>
5871 <td>Referrer-Policy</td>
5872 <td>same-origin</td>
5873 </tr>
5874
5875 <tr>
5876 <td>Vary</td>
5877 <td>Origin, Cookie</td>
5878 </tr>
5879
5880 <tr>
5881 <td>X-Content-Type-Options</td>
5882 <td>nosniff</td>
5883 </tr>
5884
5885 <tr>
5886 <td>X-Frame-Options</td>
5887 <td>DENY</td>
5888 </tr>
5889
5890 </tbody>
5891</table>
5892
5893<h4>WSGI environ</h4>
5894
5895<p>Since the WSGI environ inherits the environment of the server, only a significant subset is shown below.</p>
5896
5897<table>
5898 <thead>
5899 <tr>
5900 <th>Key</th>
5901 <th>Value</th>
5902 </tr>
5903 </thead>
5904 <tbody>
5905
5906 <tr>
5907 <td>PATH_INFO</td>
5908 <td>/backlink/keyword-difficulty/</td>
5909 </tr>
5910
5911 <tr>
5912 <td>QUERY_STRING</td>
5913 <td>websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com</td>
5914 </tr>
5915
5916 <tr>
5917 <td>REMOTE_ADDR</td>
5918 <td>10.24.5.30</td>
5919 </tr>
5920
5921 <tr>
5922 <td>REQUEST_METHOD</td>
5923 <td>GET</td>
5924 </tr>
5925
5926 <tr>
5927 <td>SCRIPT_NAME</td>
5928 <td></td>
5929 </tr>
5930
5931 <tr>
5932 <td>SERVER_NAME</td>
5933 <td>0.0.0.0</td>
5934 </tr>
5935
5936 <tr>
5937 <td>SERVER_PORT</td>
5938 <td>8000</td>
5939 </tr>
5940
5941 <tr>
5942 <td>SERVER_PROTOCOL</td>
5943 <td>HTTP/1.1</td>
5944 </tr>
5945
5946 <tr>
5947 <td>SERVER_SOFTWARE</td>
5948 <td>gunicorn/20.0.4</td>
5949 </tr>
5950
5951 </tbody>
5952</table>
5953</div>
5954
5955 </div>
5956 </div>
5957
5958
5959
5960
5961
5962
5963 <div id="RequestPanel" class="djdt-panelContent djdt-hidden">
5964 <div class="djDebugPanelTitle">
5965 <button type="button" class="djDebugClose">Ã</button>
5966 <h3>Request</h3>
5967 </div>
5968 <div class="djDebugPanelContent">
5969
5970 <div class="djdt-scroll">
5971
5972<h4>View information</h4>
5973<table>
5974 <thead>
5975 <tr>
5976 <th>View function</th>
5977 <th>Arguments</th>
5978 <th>Keyword arguments</th>
5979 <th>URL name</th>
5980 </tr>
5981 </thead>
5982 <tbody>
5983 <tr>
5984 <td><code>backlink.api.v1.views.KeywordDifficultyAPIView</code></td>
5985 <td><code>()</code></td>
5986 <td><code>{}</code></td>
5987 <td><code>keyword-difficulty</code></td>
5988 </tr>
5989 </tbody>
5990</table>
5991
5992
5993 <h4>No cookies</h4>
5994
5995
5996
5997 <h4>Session data</h4>
5998
5999
6000<table>
6001 <colgroup>
6002 <col class="djdt-width-20">
6003 <col>
6004 </colgroup>
6005 <thead>
6006 <tr>
6007 <th>Variable</th>
6008 <th>Value</th>
6009 </tr>
6010 </thead>
6011 <tbody>
6012
6013 <tr>
6014 <td><code>'jwt_token'</code></td>
6015 <td><code>'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoic2xpZGluZyIsImV4cCI6MTYxOTI2NDk2MCwianRpIjoiNjllMDliNmRiYTAyNDMwOGFlYjU1N2M1MTFmMDg3MjgiLCJyZWZyZXNoX2V4cCI6MTYxOTI2NDk2MCwidXNlcl9pZCI6MSwiY3VzdG9tZXIiOnsiaWQiOjQzOSwidGVhbV9pZHMiOlsxNzk1MSwxNzU5OSwxNzU5OCwxNzUwMywxNzM3NywxNzAxNSwxNjYxMSwxNjU5NiwxNjQzMCwxMjkxNiw2MTQsMjI4LDFdLCJpc19zdWJzY3JpYmVyIjpmYWxzZX19.1HyD2TgtFlleqDE3nyi4mCKaGjN1N0rnnzd7plgfLGA'</code></td>
6016 </tr>
6017
6018 </tbody>
6019</table>
6020
6021
6022
6023
6024 <h4>GET data</h4>
6025
6026
6027<table>
6028 <colgroup>
6029 <col class="djdt-width-20">
6030 <col>
6031 </colgroup>
6032 <thead>
6033 <tr>
6034 <th>Variable</th>
6035 <th>Value</th>
6036 </tr>
6037 </thead>
6038 <tbody>
6039
6040 <tr>
6041 <td><code>'websites'</code></td>
6042 <td><code>'bensbarbershop.com'</code></td>
6043 </tr>
6044
6045 </tbody>
6046</table>
6047
6048
6049
6050
6051 <h4>No POST data</h4>
6052
6053</div>
6054
6055 </div>
6056 </div>
6057
6058
6059
6060
6061
6062
6063 <div id="SQLPanel" class="djdt-panelContent djdt-hidden">
6064 <div class="djDebugPanelTitle">
6065 <button type="button" class="djDebugClose">Ã</button>
6066 <h3>SQL queries from 1 connection</h3>
6067 </div>
6068 <div class="djDebugPanelContent">
6069
6070 <div class="djdt-scroll">
6071<ul>
6072
6073 <li>
6074 <strong><span class="djdt-color" style="background-color:rgb(256, 0, 0)"></span> default</strong>
6075 3.27 ms (1 query
6076 )
6077 </li>
6078
6079</ul>
6080
6081
6082 <table>
6083 <colgroup>
6084 <col>
6085 <col>
6086 <col>
6087 <col class="djdt-width-30">
6088 <col>
6089 <col>
6090 </colgroup>
6091 <thead>
6092 <tr>
6093 <th></th>
6094 <th colspan="2">Query</th>
6095 <th>Timeline</th>
6096 <th>Time (ms)</th>
6097 <th>Action</th>
6098 </tr>
6099 </thead>
6100 <tbody>
6101
6102 <tr class="" id="sqlMain_1">
6103 <td><span class="djdt-color" style="background-color:rgb(256, 0, 0)"></span></td>
6104 <td class="djdt-toggle">
6105 <button type="button" class="djToggleSwitch" data-toggle-name="sqlMain" data-toggle-id="1">+</button>
6106 </td>
6107 <td>
6108 <div class="djDebugSql"><span class="djDebugCollapsed djdt-hidden"><strong>SELECT</strong> "backlink_user"."id", <br/> "backlink_user"."password", <br/> "backlink_user"."last_login", <br/> "backlink_user"."is_superuser", <br/> "backlink_user"."username", <br/> "backlink_user"."first_name", <br/> "backlink_user"."last_name", <br/> "backlink_user"."email", <br/> "backlink_user"."is_staff", <br/> "backlink_user"."is_active", <br/> "backlink_user"."date_joined", <br/> "backlink_user"."last_login_at", <br/> "backlink_user"."last_ip", <br/> "backlink_user"."login_count", <br/> "backlink_user"."created_at" <strong><br/> FROM</strong> "backlink_user" <strong><br/> WHERE</strong> ("backlink_user"."id" = 1 <strong>AND</strong> "backlink_user"."username" = '1') <strong><br/> LIMIT</strong> 21</span><span class="djDebugUncollapsed"><strong>SELECT</strong> ••• <strong>FROM</strong> "backlink_user" <strong>WHERE</strong> ("backlink_user"."id" = 1 <strong>AND</strong> "backlink_user"."username" = '1') <strong>LIMIT</strong> 21</span></div>
6109
6110
6111 </td>
6112 <td>
6113 <svg class="djDebugLineChart" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 100 5" preserveAspectRatio="none" aria-label="100.0%">
6114 <rect x="0" y="0" height="5" width="100.0" fill="#800000" />
6115
6116
6117 </svg>
6118 </td>
6119 <td class="djdt-time">
6120 3.27
6121 </td>
6122 <td class="djdt-actions">
6123
6124
6125 <form method="post">
6126 <input type="hidden" name="sql" value="SELECT "backlink_user"."id", "backlink_user"."password", "backlink_user"."last_login", "backlink_user"."is_superuser", "backlink_user"."username", "backlink_user"."first_name", "backlink_user"."last_name", "backlink_user"."email", "backlink_user"."is_staff", "backlink_user"."is_active", "backlink_user"."date_joined", "backlink_user"."last_login_at", "backlink_user"."last_ip", "backlink_user"."login_count", "backlink_user"."created_at" FROM "backlink_user" WHERE ("backlink_user"."id" = 1 AND "backlink_user"."username" = '1') LIMIT 21"><input type="hidden" name="raw_sql" value="SELECT "backlink_user"."id", "backlink_user"."password", "backlink_user"."last_login", "backlink_user"."is_superuser", "backlink_user"."username", "backlink_user"."first_name", "backlink_user"."last_name", "backlink_user"."email", "backlink_user"."is_staff", "backlink_user"."is_active", "backlink_user"."date_joined", "backlink_user"."last_login_at", "backlink_user"."last_ip", "backlink_user"."login_count", "backlink_user"."created_at" FROM "backlink_user" WHERE ("backlink_user"."id" = %s AND "backlink_user"."username" = %s) LIMIT 21"><input type="hidden" name="params" value="[1, "1"]"><input type="hidden" name="alias" value="default"><input type="hidden" name="duration" value="3.270864486694336"><input type="hidden" name="hash" value="adb67028b0d17bb0adf2de33bfcd71d657d47330">
6127 <button formaction="/__debug__/sql_select/" class="remoteCall">Sel</button>
6128 <button formaction="/__debug__/sql_explain/" class="remoteCall">Expl</button>
6129
6130 </form>
6131
6132
6133 </td>
6134 </tr>
6135 <tr class="djUnselected djToggleDetails_1" id="sqlDetails_1">
6136 <td colspan="2"></td>
6137 <td colspan="4">
6138 <div class="djSQLDetailsDiv">
6139 <p><strong>Connection:</strong> default</p>
6140
6141
6142
6143 <pre class="djdt-stack"><span class="djdt-path">/usr/local/bin/</span><span class="djdt-file">gunicorn</span> in <span class="djdt-func"><module></span>(<span class="djdt-lineno">8</span>)
6144 <span class="djdt-code">sys.exit(run())</span>
6145
6146<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/app/</span><span class="djdt-file">wsgiapp.py</span> in <span class="djdt-func">run</span>(<span class="djdt-lineno">58</span>)
6147 <span class="djdt-code">WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()</span>
6148
6149<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/app/</span><span class="djdt-file">base.py</span> in <span class="djdt-func">run</span>(<span class="djdt-lineno">228</span>)
6150 <span class="djdt-code">super().run()</span>
6151
6152<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/app/</span><span class="djdt-file">base.py</span> in <span class="djdt-func">run</span>(<span class="djdt-lineno">72</span>)
6153 <span class="djdt-code">Arbiter(self).run()</span>
6154
6155<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/</span><span class="djdt-file">arbiter.py</span> in <span class="djdt-func">run</span>(<span class="djdt-lineno">202</span>)
6156 <span class="djdt-code">self.manage_workers()</span>
6157
6158<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/</span><span class="djdt-file">arbiter.py</span> in <span class="djdt-func">manage_workers</span>(<span class="djdt-lineno">545</span>)
6159 <span class="djdt-code">self.spawn_workers()</span>
6160
6161<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/</span><span class="djdt-file">arbiter.py</span> in <span class="djdt-func">spawn_workers</span>(<span class="djdt-lineno">616</span>)
6162 <span class="djdt-code">self.spawn_worker()</span>
6163
6164<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/</span><span class="djdt-file">arbiter.py</span> in <span class="djdt-func">spawn_worker</span>(<span class="djdt-lineno">583</span>)
6165 <span class="djdt-code">worker.init_process()</span>
6166
6167<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/workers/</span><span class="djdt-file">base.py</span> in <span class="djdt-func">init_process</span>(<span class="djdt-lineno">140</span>)
6168 <span class="djdt-code">self.run()</span>
6169
6170<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/workers/</span><span class="djdt-file">sync.py</span> in <span class="djdt-func">run</span>(<span class="djdt-lineno">123</span>)
6171 <span class="djdt-code">self.run_for_one(timeout)</span>
6172
6173<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/workers/</span><span class="djdt-file">sync.py</span> in <span class="djdt-func">run_for_one</span>(<span class="djdt-lineno">67</span>)
6174 <span class="djdt-code">self.accept(listener)</span>
6175
6176<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/workers/</span><span class="djdt-file">sync.py</span> in <span class="djdt-func">accept</span>(<span class="djdt-lineno">29</span>)
6177 <span class="djdt-code">self.handle(listener, client, addr)</span>
6178
6179<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/workers/</span><span class="djdt-file">sync.py</span> in <span class="djdt-func">handle</span>(<span class="djdt-lineno">134</span>)
6180 <span class="djdt-code">self.handle_request(listener, req, client, addr)</span>
6181
6182<span class="djdt-path">/usr/local/lib/python3.8/site-packages/gunicorn/workers/</span><span class="djdt-file">sync.py</span> in <span class="djdt-func">handle_request</span>(<span class="djdt-lineno">175</span>)
6183 <span class="djdt-code">respiter = self.wsgi(environ, resp.start_response)</span>
6184
6185<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">__init__.py</span> in <span class="djdt-func">sentry_patched_wsgi_handler</span>(<span class="djdt-lineno">118</span>)
6186 <span class="djdt-code">return SentryWsgiMiddleware(bound_old_app)(environ, start_response)</span>
6187
6188<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/</span><span class="djdt-file">wsgi.py</span> in <span class="djdt-func">__call__</span>(<span class="djdt-lineno">122</span>)
6189 <span class="djdt-code">rv = self.app(</span>
6190
6191<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">__init__.py</span> in <span class="djdt-func">sentry_patched_get_response</span>(<span class="djdt-lineno">152</span>)
6192 <span class="djdt-code">return old_get_response(self, request)</span>
6193
6194<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">__call__</span>(<span class="djdt-lineno">129</span>)
6195 <span class="djdt-code">return f(*args, **kwargs)</span>
6196
6197<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">sentry_wrapped_method</span>(<span class="djdt-lineno">90</span>)
6198 <span class="djdt-code">return old_method(*args, **kwargs)</span>
6199
6200<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">__call__</span>(<span class="djdt-lineno">129</span>)
6201 <span class="djdt-code">return f(*args, **kwargs)</span>
6202
6203<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">sentry_wrapped_method</span>(<span class="djdt-lineno">90</span>)
6204 <span class="djdt-code">return old_method(*args, **kwargs)</span>
6205
6206<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">__call__</span>(<span class="djdt-lineno">129</span>)
6207 <span class="djdt-code">return f(*args, **kwargs)</span>
6208
6209<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">sentry_wrapped_method</span>(<span class="djdt-lineno">90</span>)
6210 <span class="djdt-code">return old_method(*args, **kwargs)</span>
6211
6212<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">__call__</span>(<span class="djdt-lineno">129</span>)
6213 <span class="djdt-code">return f(*args, **kwargs)</span>
6214
6215<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">sentry_wrapped_method</span>(<span class="djdt-lineno">90</span>)
6216 <span class="djdt-code">return old_method(*args, **kwargs)</span>
6217
6218<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">__call__</span>(<span class="djdt-lineno">129</span>)
6219 <span class="djdt-code">return f(*args, **kwargs)</span>
6220
6221<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">sentry_wrapped_method</span>(<span class="djdt-lineno">90</span>)
6222 <span class="djdt-code">return old_method(*args, **kwargs)</span>
6223
6224<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">__call__</span>(<span class="djdt-lineno">129</span>)
6225 <span class="djdt-code">return f(*args, **kwargs)</span>
6226
6227<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">sentry_wrapped_method</span>(<span class="djdt-lineno">90</span>)
6228 <span class="djdt-code">return old_method(*args, **kwargs)</span>
6229
6230<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">__call__</span>(<span class="djdt-lineno">129</span>)
6231 <span class="djdt-code">return f(*args, **kwargs)</span>
6232
6233<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">sentry_wrapped_method</span>(<span class="djdt-lineno">90</span>)
6234 <span class="djdt-code">return old_method(*args, **kwargs)</span>
6235
6236<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">__call__</span>(<span class="djdt-lineno">129</span>)
6237 <span class="djdt-code">return f(*args, **kwargs)</span>
6238
6239<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">sentry_wrapped_method</span>(<span class="djdt-lineno">90</span>)
6240 <span class="djdt-code">return old_method(*args, **kwargs)</span>
6241
6242<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">__call__</span>(<span class="djdt-lineno">129</span>)
6243 <span class="djdt-code">return f(*args, **kwargs)</span>
6244
6245<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">middleware.py</span> in <span class="djdt-func">sentry_wrapped_method</span>(<span class="djdt-lineno">90</span>)
6246 <span class="djdt-code">return old_method(*args, **kwargs)</span>
6247
6248<span class="djdt-path">/usr/local/lib/python3.8/site-packages/django/views/decorators/</span><span class="djdt-file">csrf.py</span> in <span class="djdt-func">wrapped_view</span>(<span class="djdt-lineno">54</span>)
6249 <span class="djdt-code">return view_func(*args, **kwargs)</span>
6250
6251<span class="djdt-path">/usr/local/lib/python3.8/site-packages/django/views/generic/</span><span class="djdt-file">base.py</span> in <span class="djdt-func">view</span>(<span class="djdt-lineno">70</span>)
6252 <span class="djdt-code">return self.dispatch(request, *args, **kwargs)</span>
6253
6254<span class="djdt-path">/usr/local/lib/python3.8/site-packages/rest_framework/</span><span class="djdt-file">views.py</span> in <span class="djdt-func">dispatch</span>(<span class="djdt-lineno">497</span>)
6255 <span class="djdt-code">self.initial(request, *args, **kwargs)</span>
6256
6257<span class="djdt-path">/usr/local/lib/python3.8/site-packages/sentry_sdk/integrations/django/</span><span class="djdt-file">__init__.py</span> in <span class="djdt-func">sentry_patched_drf_initial</span>(<span class="djdt-lineno">287</span>)
6258 <span class="djdt-code">return old_drf_initial(self, request, *args, **kwargs)</span>
6259
6260<span class="djdt-path">/usr/local/lib/python3.8/site-packages/rest_framework/</span><span class="djdt-file">views.py</span> in <span class="djdt-func">initial</span>(<span class="djdt-lineno">414</span>)
6261 <span class="djdt-code">self.perform_authentication(request)</span>
6262
6263<span class="djdt-path">/usr/local/lib/python3.8/site-packages/rest_framework/</span><span class="djdt-file">views.py</span> in <span class="djdt-func">perform_authentication</span>(<span class="djdt-lineno">324</span>)
6264 <span class="djdt-code">request.user</span>
6265
6266<span class="djdt-path">/usr/local/lib/python3.8/site-packages/rest_framework/</span><span class="djdt-file">request.py</span> in <span class="djdt-func">user</span>(<span class="djdt-lineno">227</span>)
6267 <span class="djdt-code">self._authenticate()</span>
6268
6269<span class="djdt-path">/usr/local/lib/python3.8/site-packages/rest_framework/</span><span class="djdt-file">request.py</span> in <span class="djdt-func">_authenticate</span>(<span class="djdt-lineno">380</span>)
6270 <span class="djdt-code">user_auth_tuple = authenticator.authenticate(self)</span>
6271
6272<span class="djdt-path">/usr/src/app/backlink/</span><span class="djdt-file">auth.py</span> in <span class="djdt-func">authenticate</span>(<span class="djdt-lineno">49</span>)
6273 <span class="djdt-code">return self.get_user(validated_token), validated_token</span>
6274
6275<span class="djdt-path">/usr/src/app/backlink/</span><span class="djdt-file">auth.py</span> in <span class="djdt-func">get_user</span>(<span class="djdt-lineno">103</span>)
6276 <span class="djdt-code">external_user, was_created = User.objects.get_or_create_for_user_id(user_id)</span>
6277
6278<span class="djdt-path">/usr/src/app/backlink/</span><span class="djdt-file">models.py</span> in <span class="djdt-func">get_or_create_for_user_id</span>(<span class="djdt-lineno">499</span>)
6279 <span class="djdt-code">return self.get_or_create(</span>
6280
6281
6282</pre>
6283
6284
6285 </div>
6286 </td>
6287 </tr>
6288
6289 </tbody>
6290 </table>
6291
6292</div>
6293
6294 </div>
6295 </div>
6296
6297
6298
6299
6300
6301
6302 <div id="StaticFilesPanel" class="djdt-panelContent djdt-hidden">
6303 <div class="djDebugPanelTitle">
6304 <button type="button" class="djDebugClose">Ã</button>
6305 <h3>Static files (198 found, 0 used)</h3>
6306 </div>
6307 <div class="djDebugPanelContent">
6308
6309 <div class="djdt-scroll">
6310
6311<h4>Static file path</h4>
6312
6313 <ol>
6314
6315 <li>/usr/src/app/static</li>
6316
6317 </ol>
6318
6319
6320<h4>Static file apps</h4>
6321
6322 <ol>
6323
6324 <li>django.contrib.admin</li>
6325
6326 <li>rest_framework</li>
6327
6328 <li>django_extensions</li>
6329
6330 <li>django_json_widget</li>
6331
6332 <li>drf_yasg</li>
6333
6334 <li>debug_toolbar</li>
6335
6336 </ol>
6337
6338
6339<h4>Static files</h4>
6340
6341 <p>None</p>
6342
6343
6344
6345
6346 <h4>django.contrib.staticfiles.finders.AppDirectoriesFinder (198 files)</h4>
6347 <table>
6348 <thead>
6349 <tr>
6350 <th>Path</th>
6351 <th>Location</th>
6352 </tr>
6353 </thead>
6354 <tbody>
6355
6356 <tr>
6357 <td>admin/js/change_form.js</td>
6358 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/change_form.js</td>
6359 </tr>
6360
6361 <tr>
6362 <td>admin/js/SelectFilter2.js</td>
6363 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js</td>
6364 </tr>
6365
6366 <tr>
6367 <td>admin/js/calendar.js</td>
6368 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/calendar.js</td>
6369 </tr>
6370
6371 <tr>
6372 <td>admin/js/core.js</td>
6373 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/core.js</td>
6374 </tr>
6375
6376 <tr>
6377 <td>admin/js/prepopulate.js</td>
6378 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/prepopulate.js</td>
6379 </tr>
6380
6381 <tr>
6382 <td>admin/js/urlify.js</td>
6383 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/urlify.js</td>
6384 </tr>
6385
6386 <tr>
6387 <td>admin/js/nav_sidebar.js</td>
6388 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/nav_sidebar.js</td>
6389 </tr>
6390
6391 <tr>
6392 <td>admin/js/prepopulate_init.js</td>
6393 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js</td>
6394 </tr>
6395
6396 <tr>
6397 <td>admin/js/actions.js</td>
6398 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/actions.js</td>
6399 </tr>
6400
6401 <tr>
6402 <td>admin/js/inlines.js</td>
6403 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/inlines.js</td>
6404 </tr>
6405
6406 <tr>
6407 <td>admin/js/popup_response.js</td>
6408 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/popup_response.js</td>
6409 </tr>
6410
6411 <tr>
6412 <td>admin/js/SelectBox.js</td>
6413 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/SelectBox.js</td>
6414 </tr>
6415
6416 <tr>
6417 <td>admin/js/jquery.init.js</td>
6418 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/jquery.init.js</td>
6419 </tr>
6420
6421 <tr>
6422 <td>admin/js/collapse.js</td>
6423 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/collapse.js</td>
6424 </tr>
6425
6426 <tr>
6427 <td>admin/js/cancel.js</td>
6428 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/cancel.js</td>
6429 </tr>
6430
6431 <tr>
6432 <td>admin/js/autocomplete.js</td>
6433 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/autocomplete.js</td>
6434 </tr>
6435
6436 <tr>
6437 <td>admin/js/admin/RelatedObjectLookups.js</td>
6438 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js</td>
6439 </tr>
6440
6441 <tr>
6442 <td>admin/js/admin/DateTimeShortcuts.js</td>
6443 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js</td>
6444 </tr>
6445
6446 <tr>
6447 <td>admin/js/vendor/select2/select2.full.js</td>
6448 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js</td>
6449 </tr>
6450
6451 <tr>
6452 <td>admin/js/vendor/select2/select2.full.min.js</td>
6453 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js</td>
6454 </tr>
6455
6456 <tr>
6457 <td>admin/js/vendor/select2/LICENSE.md</td>
6458 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md</td>
6459 </tr>
6460
6461 <tr>
6462 <td>admin/js/vendor/select2/i18n/nl.js</td>
6463 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js</td>
6464 </tr>
6465
6466 <tr>
6467 <td>admin/js/vendor/select2/i18n/bs.js</td>
6468 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bs.js</td>
6469 </tr>
6470
6471 <tr>
6472 <td>admin/js/vendor/select2/i18n/ms.js</td>
6473 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js</td>
6474 </tr>
6475
6476 <tr>
6477 <td>admin/js/vendor/select2/i18n/is.js</td>
6478 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js</td>
6479 </tr>
6480
6481 <tr>
6482 <td>admin/js/vendor/select2/i18n/ja.js</td>
6483 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js</td>
6484 </tr>
6485
6486 <tr>
6487 <td>admin/js/vendor/select2/i18n/af.js</td>
6488 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/af.js</td>
6489 </tr>
6490
6491 <tr>
6492 <td>admin/js/vendor/select2/i18n/nb.js</td>
6493 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js</td>
6494 </tr>
6495
6496 <tr>
6497 <td>admin/js/vendor/select2/i18n/el.js</td>
6498 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js</td>
6499 </tr>
6500
6501 <tr>
6502 <td>admin/js/vendor/select2/i18n/en.js</td>
6503 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js</td>
6504 </tr>
6505
6506 <tr>
6507 <td>admin/js/vendor/select2/i18n/uk.js</td>
6508 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js</td>
6509 </tr>
6510
6511 <tr>
6512 <td>admin/js/vendor/select2/i18n/sr.js</td>
6513 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js</td>
6514 </tr>
6515
6516 <tr>
6517 <td>admin/js/vendor/select2/i18n/es.js</td>
6518 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js</td>
6519 </tr>
6520
6521 <tr>
6522 <td>admin/js/vendor/select2/i18n/ar.js</td>
6523 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js</td>
6524 </tr>
6525
6526 <tr>
6527 <td>admin/js/vendor/select2/i18n/th.js</td>
6528 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js</td>
6529 </tr>
6530
6531 <tr>
6532 <td>admin/js/vendor/select2/i18n/sl.js</td>
6533 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sl.js</td>
6534 </tr>
6535
6536 <tr>
6537 <td>admin/js/vendor/select2/i18n/ca.js</td>
6538 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js</td>
6539 </tr>
6540
6541 <tr>
6542 <td>admin/js/vendor/select2/i18n/tr.js</td>
6543 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js</td>
6544 </tr>
6545
6546 <tr>
6547 <td>admin/js/vendor/select2/i18n/de.js</td>
6548 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js</td>
6549 </tr>
6550
6551 <tr>
6552 <td>admin/js/vendor/select2/i18n/sk.js</td>
6553 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js</td>
6554 </tr>
6555
6556 <tr>
6557 <td>admin/js/vendor/select2/i18n/fa.js</td>
6558 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js</td>
6559 </tr>
6560
6561 <tr>
6562 <td>admin/js/vendor/select2/i18n/zh-CN.js</td>
6563 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js</td>
6564 </tr>
6565
6566 <tr>
6567 <td>admin/js/vendor/select2/i18n/eu.js</td>
6568 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js</td>
6569 </tr>
6570
6571 <tr>
6572 <td>admin/js/vendor/select2/i18n/et.js</td>
6573 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js</td>
6574 </tr>
6575
6576 <tr>
6577 <td>admin/js/vendor/select2/i18n/pl.js</td>
6578 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js</td>
6579 </tr>
6580
6581 <tr>
6582 <td>admin/js/vendor/select2/i18n/az.js</td>
6583 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js</td>
6584 </tr>
6585
6586 <tr>
6587 <td>admin/js/vendor/select2/i18n/gl.js</td>
6588 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js</td>
6589 </tr>
6590
6591 <tr>
6592 <td>admin/js/vendor/select2/i18n/ro.js</td>
6593 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js</td>
6594 </tr>
6595
6596 <tr>
6597 <td>admin/js/vendor/select2/i18n/pt.js</td>
6598 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js</td>
6599 </tr>
6600
6601 <tr>
6602 <td>admin/js/vendor/select2/i18n/hu.js</td>
6603 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js</td>
6604 </tr>
6605
6606 <tr>
6607 <td>admin/js/vendor/select2/i18n/cs.js</td>
6608 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js</td>
6609 </tr>
6610
6611 <tr>
6612 <td>admin/js/vendor/select2/i18n/ka.js</td>
6613 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ka.js</td>
6614 </tr>
6615
6616 <tr>
6617 <td>admin/js/vendor/select2/i18n/hy.js</td>
6618 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hy.js</td>
6619 </tr>
6620
6621 <tr>
6622 <td>admin/js/vendor/select2/i18n/id.js</td>
6623 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js</td>
6624 </tr>
6625
6626 <tr>
6627 <td>admin/js/vendor/select2/i18n/tk.js</td>
6628 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tk.js</td>
6629 </tr>
6630
6631 <tr>
6632 <td>admin/js/vendor/select2/i18n/it.js</td>
6633 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js</td>
6634 </tr>
6635
6636 <tr>
6637 <td>admin/js/vendor/select2/i18n/km.js</td>
6638 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js</td>
6639 </tr>
6640
6641 <tr>
6642 <td>admin/js/vendor/select2/i18n/ko.js</td>
6643 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js</td>
6644 </tr>
6645
6646 <tr>
6647 <td>admin/js/vendor/select2/i18n/da.js</td>
6648 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js</td>
6649 </tr>
6650
6651 <tr>
6652 <td>admin/js/vendor/select2/i18n/ps.js</td>
6653 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ps.js</td>
6654 </tr>
6655
6656 <tr>
6657 <td>admin/js/vendor/select2/i18n/mk.js</td>
6658 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js</td>
6659 </tr>
6660
6661 <tr>
6662 <td>admin/js/vendor/select2/i18n/hr.js</td>
6663 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js</td>
6664 </tr>
6665
6666 <tr>
6667 <td>admin/js/vendor/select2/i18n/sr-Cyrl.js</td>
6668 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js</td>
6669 </tr>
6670
6671 <tr>
6672 <td>admin/js/vendor/select2/i18n/sv.js</td>
6673 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js</td>
6674 </tr>
6675
6676 <tr>
6677 <td>admin/js/vendor/select2/i18n/sq.js</td>
6678 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sq.js</td>
6679 </tr>
6680
6681 <tr>
6682 <td>admin/js/vendor/select2/i18n/hi.js</td>
6683 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js</td>
6684 </tr>
6685
6686 <tr>
6687 <td>admin/js/vendor/select2/i18n/dsb.js</td>
6688 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/dsb.js</td>
6689 </tr>
6690
6691 <tr>
6692 <td>admin/js/vendor/select2/i18n/lt.js</td>
6693 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js</td>
6694 </tr>
6695
6696 <tr>
6697 <td>admin/js/vendor/select2/i18n/fr.js</td>
6698 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js</td>
6699 </tr>
6700
6701 <tr>
6702 <td>admin/js/vendor/select2/i18n/he.js</td>
6703 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js</td>
6704 </tr>
6705
6706 <tr>
6707 <td>admin/js/vendor/select2/i18n/hsb.js</td>
6708 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hsb.js</td>
6709 </tr>
6710
6711 <tr>
6712 <td>admin/js/vendor/select2/i18n/vi.js</td>
6713 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js</td>
6714 </tr>
6715
6716 <tr>
6717 <td>admin/js/vendor/select2/i18n/bn.js</td>
6718 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bn.js</td>
6719 </tr>
6720
6721 <tr>
6722 <td>admin/js/vendor/select2/i18n/fi.js</td>
6723 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js</td>
6724 </tr>
6725
6726 <tr>
6727 <td>admin/js/vendor/select2/i18n/ru.js</td>
6728 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js</td>
6729 </tr>
6730
6731 <tr>
6732 <td>admin/js/vendor/select2/i18n/lv.js</td>
6733 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js</td>
6734 </tr>
6735
6736 <tr>
6737 <td>admin/js/vendor/select2/i18n/bg.js</td>
6738 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js</td>
6739 </tr>
6740
6741 <tr>
6742 <td>admin/js/vendor/select2/i18n/ne.js</td>
6743 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ne.js</td>
6744 </tr>
6745
6746 <tr>
6747 <td>admin/js/vendor/select2/i18n/pt-BR.js</td>
6748 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js</td>
6749 </tr>
6750
6751 <tr>
6752 <td>admin/js/vendor/select2/i18n/zh-TW.js</td>
6753 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js</td>
6754 </tr>
6755
6756 <tr>
6757 <td>admin/js/vendor/xregexp/xregexp.min.js</td>
6758 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js</td>
6759 </tr>
6760
6761 <tr>
6762 <td>admin/js/vendor/xregexp/xregexp.js</td>
6763 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js</td>
6764 </tr>
6765
6766 <tr>
6767 <td>admin/js/vendor/xregexp/LICENSE.txt</td>
6768 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt</td>
6769 </tr>
6770
6771 <tr>
6772 <td>admin/js/vendor/jquery/jquery.js</td>
6773 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js</td>
6774 </tr>
6775
6776 <tr>
6777 <td>admin/js/vendor/jquery/LICENSE.txt</td>
6778 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt</td>
6779 </tr>
6780
6781 <tr>
6782 <td>admin/js/vendor/jquery/jquery.min.js</td>
6783 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js</td>
6784 </tr>
6785
6786 <tr>
6787 <td>admin/fonts/Roboto-Bold-webfont.woff</td>
6788 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff</td>
6789 </tr>
6790
6791 <tr>
6792 <td>admin/fonts/README.txt</td>
6793 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/fonts/README.txt</td>
6794 </tr>
6795
6796 <tr>
6797 <td>admin/fonts/Roboto-Regular-webfont.woff</td>
6798 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff</td>
6799 </tr>
6800
6801 <tr>
6802 <td>admin/fonts/Roboto-Light-webfont.woff</td>
6803 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff</td>
6804 </tr>
6805
6806 <tr>
6807 <td>admin/fonts/LICENSE.txt</td>
6808 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt</td>
6809 </tr>
6810
6811 <tr>
6812 <td>admin/css/responsive_rtl.css</td>
6813 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css</td>
6814 </tr>
6815
6816 <tr>
6817 <td>admin/css/nav_sidebar.css</td>
6818 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/nav_sidebar.css</td>
6819 </tr>
6820
6821 <tr>
6822 <td>admin/css/fonts.css</td>
6823 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/fonts.css</td>
6824 </tr>
6825
6826 <tr>
6827 <td>admin/css/login.css</td>
6828 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/login.css</td>
6829 </tr>
6830
6831 <tr>
6832 <td>admin/css/changelists.css</td>
6833 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/changelists.css</td>
6834 </tr>
6835
6836 <tr>
6837 <td>admin/css/forms.css</td>
6838 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/forms.css</td>
6839 </tr>
6840
6841 <tr>
6842 <td>admin/css/dashboard.css</td>
6843 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/dashboard.css</td>
6844 </tr>
6845
6846 <tr>
6847 <td>admin/css/rtl.css</td>
6848 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/rtl.css</td>
6849 </tr>
6850
6851 <tr>
6852 <td>admin/css/autocomplete.css</td>
6853 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/autocomplete.css</td>
6854 </tr>
6855
6856 <tr>
6857 <td>admin/css/widgets.css</td>
6858 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/widgets.css</td>
6859 </tr>
6860
6861 <tr>
6862 <td>admin/css/base.css</td>
6863 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/base.css</td>
6864 </tr>
6865
6866 <tr>
6867 <td>admin/css/responsive.css</td>
6868 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/responsive.css</td>
6869 </tr>
6870
6871 <tr>
6872 <td>admin/css/vendor/select2/LICENSE-SELECT2.md</td>
6873 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md</td>
6874 </tr>
6875
6876 <tr>
6877 <td>admin/css/vendor/select2/select2.min.css</td>
6878 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css</td>
6879 </tr>
6880
6881 <tr>
6882 <td>admin/css/vendor/select2/select2.css</td>
6883 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css</td>
6884 </tr>
6885
6886 <tr>
6887 <td>admin/img/LICENSE</td>
6888 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/LICENSE</td>
6889 </tr>
6890
6891 <tr>
6892 <td>admin/img/icon-unknown-alt.svg</td>
6893 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg</td>
6894 </tr>
6895
6896 <tr>
6897 <td>admin/img/calendar-icons.svg</td>
6898 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg</td>
6899 </tr>
6900
6901 <tr>
6902 <td>admin/img/search.svg</td>
6903 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/search.svg</td>
6904 </tr>
6905
6906 <tr>
6907 <td>admin/img/tooltag-arrowright.svg</td>
6908 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg</td>
6909 </tr>
6910
6911 <tr>
6912 <td>admin/img/inline-delete.svg</td>
6913 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg</td>
6914 </tr>
6915
6916 <tr>
6917 <td>admin/img/README.txt</td>
6918 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/README.txt</td>
6919 </tr>
6920
6921 <tr>
6922 <td>admin/img/sorting-icons.svg</td>
6923 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg</td>
6924 </tr>
6925
6926 <tr>
6927 <td>admin/img/icon-alert.svg</td>
6928 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg</td>
6929 </tr>
6930
6931 <tr>
6932 <td>admin/img/icon-deletelink.svg</td>
6933 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg</td>
6934 </tr>
6935
6936 <tr>
6937 <td>admin/img/icon-clock.svg</td>
6938 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg</td>
6939 </tr>
6940
6941 <tr>
6942 <td>admin/img/icon-addlink.svg</td>
6943 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg</td>
6944 </tr>
6945
6946 <tr>
6947 <td>admin/img/selector-icons.svg</td>
6948 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg</td>
6949 </tr>
6950
6951 <tr>
6952 <td>admin/img/icon-unknown.svg</td>
6953 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg</td>
6954 </tr>
6955
6956 <tr>
6957 <td>admin/img/icon-viewlink.svg</td>
6958 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg</td>
6959 </tr>
6960
6961 <tr>
6962 <td>admin/img/icon-changelink.svg</td>
6963 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg</td>
6964 </tr>
6965
6966 <tr>
6967 <td>admin/img/tooltag-add.svg</td>
6968 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg</td>
6969 </tr>
6970
6971 <tr>
6972 <td>admin/img/icon-no.svg</td>
6973 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-no.svg</td>
6974 </tr>
6975
6976 <tr>
6977 <td>admin/img/icon-calendar.svg</td>
6978 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg</td>
6979 </tr>
6980
6981 <tr>
6982 <td>admin/img/icon-yes.svg</td>
6983 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg</td>
6984 </tr>
6985
6986 <tr>
6987 <td>admin/img/gis/move_vertex_off.svg</td>
6988 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg</td>
6989 </tr>
6990
6991 <tr>
6992 <td>admin/img/gis/move_vertex_on.svg</td>
6993 <td>/usr/local/lib/python3.8/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg</td>
6994 </tr>
6995
6996 <tr>
6997 <td>rest_framework/js/csrf.js</td>
6998 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/js/csrf.js</td>
6999 </tr>
7000
7001 <tr>
7002 <td>rest_framework/js/default.js</td>
7003 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/js/default.js</td>
7004 </tr>
7005
7006 <tr>
7007 <td>rest_framework/js/bootstrap.min.js</td>
7008 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/js/bootstrap.min.js</td>
7009 </tr>
7010
7011 <tr>
7012 <td>rest_framework/js/ajax-form.js</td>
7013 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/js/ajax-form.js</td>
7014 </tr>
7015
7016 <tr>
7017 <td>rest_framework/js/coreapi-0.1.1.js</td>
7018 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/js/coreapi-0.1.1.js</td>
7019 </tr>
7020
7021 <tr>
7022 <td>rest_framework/js/jquery-3.5.1.min.js</td>
7023 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/js/jquery-3.5.1.min.js</td>
7024 </tr>
7025
7026 <tr>
7027 <td>rest_framework/js/prettify-min.js</td>
7028 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/js/prettify-min.js</td>
7029 </tr>
7030
7031 <tr>
7032 <td>rest_framework/docs/js/api.js</td>
7033 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/docs/js/api.js</td>
7034 </tr>
7035
7036 <tr>
7037 <td>rest_framework/docs/js/jquery.json-view.min.js</td>
7038 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/docs/js/jquery.json-view.min.js</td>
7039 </tr>
7040
7041 <tr>
7042 <td>rest_framework/docs/js/highlight.pack.js</td>
7043 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/docs/js/highlight.pack.js</td>
7044 </tr>
7045
7046 <tr>
7047 <td>rest_framework/docs/css/highlight.css</td>
7048 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/docs/css/highlight.css</td>
7049 </tr>
7050
7051 <tr>
7052 <td>rest_framework/docs/css/jquery.json-view.min.css</td>
7053 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/docs/css/jquery.json-view.min.css</td>
7054 </tr>
7055
7056 <tr>
7057 <td>rest_framework/docs/css/base.css</td>
7058 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/docs/css/base.css</td>
7059 </tr>
7060
7061 <tr>
7062 <td>rest_framework/docs/img/favicon.ico</td>
7063 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/docs/img/favicon.ico</td>
7064 </tr>
7065
7066 <tr>
7067 <td>rest_framework/docs/img/grid.png</td>
7068 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/docs/img/grid.png</td>
7069 </tr>
7070
7071 <tr>
7072 <td>rest_framework/fonts/fontawesome-webfont.ttf</td>
7073 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/fonts/fontawesome-webfont.ttf</td>
7074 </tr>
7075
7076 <tr>
7077 <td>rest_framework/fonts/fontawesome-webfont.woff</td>
7078 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/fonts/fontawesome-webfont.woff</td>
7079 </tr>
7080
7081 <tr>
7082 <td>rest_framework/fonts/fontawesome-webfont.eot</td>
7083 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/fonts/fontawesome-webfont.eot</td>
7084 </tr>
7085
7086 <tr>
7087 <td>rest_framework/fonts/glyphicons-halflings-regular.woff</td>
7088 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.woff</td>
7089 </tr>
7090
7091 <tr>
7092 <td>rest_framework/fonts/fontawesome-webfont.svg</td>
7093 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/fonts/fontawesome-webfont.svg</td>
7094 </tr>
7095
7096 <tr>
7097 <td>rest_framework/fonts/glyphicons-halflings-regular.eot</td>
7098 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.eot</td>
7099 </tr>
7100
7101 <tr>
7102 <td>rest_framework/fonts/glyphicons-halflings-regular.svg</td>
7103 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.svg</td>
7104 </tr>
7105
7106 <tr>
7107 <td>rest_framework/fonts/glyphicons-halflings-regular.woff2</td>
7108 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.woff2</td>
7109 </tr>
7110
7111 <tr>
7112 <td>rest_framework/fonts/glyphicons-halflings-regular.ttf</td>
7113 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.ttf</td>
7114 </tr>
7115
7116 <tr>
7117 <td>rest_framework/css/bootstrap.min.css</td>
7118 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/css/bootstrap.min.css</td>
7119 </tr>
7120
7121 <tr>
7122 <td>rest_framework/css/default.css</td>
7123 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/css/default.css</td>
7124 </tr>
7125
7126 <tr>
7127 <td>rest_framework/css/bootstrap-tweaks.css</td>
7128 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/css/bootstrap-tweaks.css</td>
7129 </tr>
7130
7131 <tr>
7132 <td>rest_framework/css/prettify.css</td>
7133 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/css/prettify.css</td>
7134 </tr>
7135
7136 <tr>
7137 <td>rest_framework/css/font-awesome-4.0.3.css</td>
7138 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/css/font-awesome-4.0.3.css</td>
7139 </tr>
7140
7141 <tr>
7142 <td>rest_framework/css/bootstrap-theme.min.css</td>
7143 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/css/bootstrap-theme.min.css</td>
7144 </tr>
7145
7146 <tr>
7147 <td>rest_framework/img/glyphicons-halflings-white.png</td>
7148 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/img/glyphicons-halflings-white.png</td>
7149 </tr>
7150
7151 <tr>
7152 <td>rest_framework/img/grid.png</td>
7153 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/img/grid.png</td>
7154 </tr>
7155
7156 <tr>
7157 <td>rest_framework/img/glyphicons-halflings.png</td>
7158 <td>/usr/local/lib/python3.8/site-packages/rest_framework/static/rest_framework/img/glyphicons-halflings.png</td>
7159 </tr>
7160
7161 <tr>
7162 <td>django_extensions/js/jquery.ajaxQueue.js</td>
7163 <td>/usr/local/lib/python3.8/site-packages/django_extensions/static/django_extensions/js/jquery.ajaxQueue.js</td>
7164 </tr>
7165
7166 <tr>
7167 <td>django_extensions/js/jquery.bgiframe.js</td>
7168 <td>/usr/local/lib/python3.8/site-packages/django_extensions/static/django_extensions/js/jquery.bgiframe.js</td>
7169 </tr>
7170
7171 <tr>
7172 <td>django_extensions/js/jquery.autocomplete.js</td>
7173 <td>/usr/local/lib/python3.8/site-packages/django_extensions/static/django_extensions/js/jquery.autocomplete.js</td>
7174 </tr>
7175
7176 <tr>
7177 <td>django_extensions/css/jquery.autocomplete.css</td>
7178 <td>/usr/local/lib/python3.8/site-packages/django_extensions/static/django_extensions/css/jquery.autocomplete.css</td>
7179 </tr>
7180
7181 <tr>
7182 <td>django_extensions/img/indicator.gif</td>
7183 <td>/usr/local/lib/python3.8/site-packages/django_extensions/static/django_extensions/img/indicator.gif</td>
7184 </tr>
7185
7186 <tr>
7187 <td>dist/jsoneditor.min.css</td>
7188 <td>/usr/local/lib/python3.8/site-packages/django_json_widget/static/dist/jsoneditor.min.css</td>
7189 </tr>
7190
7191 <tr>
7192 <td>dist/jsoneditor.min.js</td>
7193 <td>/usr/local/lib/python3.8/site-packages/django_json_widget/static/dist/jsoneditor.min.js</td>
7194 </tr>
7195
7196 <tr>
7197 <td>dist/img/jsoneditor-icons.svg</td>
7198 <td>/usr/local/lib/python3.8/site-packages/django_json_widget/static/dist/img/jsoneditor-icons.svg</td>
7199 </tr>
7200
7201 <tr>
7202 <td>css/django_json_widget.css</td>
7203 <td>/usr/local/lib/python3.8/site-packages/django_json_widget/static/css/django_json_widget.css</td>
7204 </tr>
7205
7206 <tr>
7207 <td>drf-yasg/url-polyfill.min.js</td>
7208 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/url-polyfill.min.js</td>
7209 </tr>
7210
7211 <tr>
7212 <td>drf-yasg/insQ.min.js</td>
7213 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/insQ.min.js</td>
7214 </tr>
7215
7216 <tr>
7217 <td>drf-yasg/style.css</td>
7218 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/style.css</td>
7219 </tr>
7220
7221 <tr>
7222 <td>drf-yasg/immutable.min.js</td>
7223 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/immutable.min.js</td>
7224 </tr>
7225
7226 <tr>
7227 <td>drf-yasg/redoc-init.js</td>
7228 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/redoc-init.js</td>
7229 </tr>
7230
7231 <tr>
7232 <td>drf-yasg/swagger-ui-init.js</td>
7233 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/swagger-ui-init.js</td>
7234 </tr>
7235
7236 <tr>
7237 <td>drf-yasg/redoc-old/redoc.min.js</td>
7238 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/redoc-old/redoc.min.js</td>
7239 </tr>
7240
7241 <tr>
7242 <td>drf-yasg/redoc/redoc-logo.png</td>
7243 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/redoc/redoc-logo.png</td>
7244 </tr>
7245
7246 <tr>
7247 <td>drf-yasg/redoc/redoc.min.js</td>
7248 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/redoc/redoc.min.js</td>
7249 </tr>
7250
7251 <tr>
7252 <td>drf-yasg/swagger-ui-dist/swagger-ui-es-bundle.js</td>
7253 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle.js</td>
7254 </tr>
7255
7256 <tr>
7257 <td>drf-yasg/swagger-ui-dist/index.js</td>
7258 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/swagger-ui-dist/index.js</td>
7259 </tr>
7260
7261 <tr>
7262 <td>drf-yasg/swagger-ui-dist/swagger-ui-standalone-preset.js</td>
7263 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/swagger-ui-dist/swagger-ui-standalone-preset.js</td>
7264 </tr>
7265
7266 <tr>
7267 <td>drf-yasg/swagger-ui-dist/swagger-ui-bundle.js</td>
7268 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/swagger-ui-dist/swagger-ui-bundle.js</td>
7269 </tr>
7270
7271 <tr>
7272 <td>drf-yasg/swagger-ui-dist/swagger-ui-es-bundle-core.js</td>
7273 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/swagger-ui-dist/swagger-ui-es-bundle-core.js</td>
7274 </tr>
7275
7276 <tr>
7277 <td>drf-yasg/swagger-ui-dist/absolute-path.js</td>
7278 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/swagger-ui-dist/absolute-path.js</td>
7279 </tr>
7280
7281 <tr>
7282 <td>drf-yasg/swagger-ui-dist/oauth2-redirect.html</td>
7283 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/swagger-ui-dist/oauth2-redirect.html</td>
7284 </tr>
7285
7286 <tr>
7287 <td>drf-yasg/swagger-ui-dist/favicon-32x32.png</td>
7288 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/swagger-ui-dist/favicon-32x32.png</td>
7289 </tr>
7290
7291 <tr>
7292 <td>drf-yasg/swagger-ui-dist/swagger-ui.css</td>
7293 <td>/usr/local/lib/python3.8/site-packages/drf_yasg/static/drf-yasg/swagger-ui-dist/swagger-ui.css</td>
7294 </tr>
7295
7296 <tr>
7297 <td>debug_toolbar/js/utils.js</td>
7298 <td>/usr/local/lib/python3.8/site-packages/debug_toolbar/static/debug_toolbar/js/utils.js</td>
7299 </tr>
7300
7301 <tr>
7302 <td>debug_toolbar/js/timer.js</td>
7303 <td>/usr/local/lib/python3.8/site-packages/debug_toolbar/static/debug_toolbar/js/timer.js</td>
7304 </tr>
7305
7306 <tr>
7307 <td>debug_toolbar/js/toolbar.js</td>
7308 <td>/usr/local/lib/python3.8/site-packages/debug_toolbar/static/debug_toolbar/js/toolbar.js</td>
7309 </tr>
7310
7311 <tr>
7312 <td>debug_toolbar/js/history.js</td>
7313 <td>/usr/local/lib/python3.8/site-packages/debug_toolbar/static/debug_toolbar/js/history.js</td>
7314 </tr>
7315
7316 <tr>
7317 <td>debug_toolbar/js/redirect.js</td>
7318 <td>/usr/local/lib/python3.8/site-packages/debug_toolbar/static/debug_toolbar/js/redirect.js</td>
7319 </tr>
7320
7321 <tr>
7322 <td>debug_toolbar/js/toolbar.timer.js</td>
7323 <td>/usr/local/lib/python3.8/site-packages/debug_toolbar/static/debug_toolbar/js/toolbar.timer.js</td>
7324 </tr>
7325
7326 <tr>
7327 <td>debug_toolbar/css/print.css</td>
7328 <td>/usr/local/lib/python3.8/site-packages/debug_toolbar/static/debug_toolbar/css/print.css</td>
7329 </tr>
7330
7331 <tr>
7332 <td>debug_toolbar/css/toolbar.css</td>
7333 <td>/usr/local/lib/python3.8/site-packages/debug_toolbar/static/debug_toolbar/css/toolbar.css</td>
7334 </tr>
7335
7336 <tr>
7337 <td>debug_toolbar/img/ajax-loader.gif</td>
7338 <td>/usr/local/lib/python3.8/site-packages/debug_toolbar/static/debug_toolbar/img/ajax-loader.gif</td>
7339 </tr>
7340
7341 <tr>
7342 <td>debug_toolbar/img/indicator.png</td>
7343 <td>/usr/local/lib/python3.8/site-packages/debug_toolbar/static/debug_toolbar/img/indicator.png</td>
7344 </tr>
7345
7346 </tbody>
7347 </table>
7348
7349</div>
7350
7351 </div>
7352 </div>
7353
7354
7355
7356
7357
7358
7359 <div id="TemplatesPanel" class="djdt-panelContent djdt-hidden">
7360 <div class="djDebugPanelTitle">
7361 <button type="button" class="djDebugClose">Ã</button>
7362 <h3>Templates (1 rendered)</h3>
7363 </div>
7364 <div class="djDebugPanelContent">
7365
7366 <div class="djdt-scroll">
7367<h4>Template paths</h4>
7368
7369 <p>None</p>
7370
7371
7372<h4>Template</h4>
7373
7374 <dl>
7375
7376 <dt><strong><a class="remoteCall toggleTemplate" href="/__debug__/template_source/?template=None&template_origin=Ijx1bmtub3duIHNvdXJjZT4i:1lYTGc:zI3noyIsMNEDDyaQl1FvnS-IUgwNy7fe44ti16iAFPI">None</a></strong></dt>
7377 <dd><samp><unknown source></samp></dd>
7378
7379 <dd>
7380 <details>
7381 <summary>Toggle context</summary>
7382 <code class="djTemplateContext">{'False': False, 'None': None, 'True': True}
7383{'django_version_info': '3.2',
7384 'exception_type': 'RuntimeError',
7385 'exception_value': 'There is no current event loop in thread '
7386 "'ThreadPoolExecutor-0_0'.",
7387 'filtered_POST_items': [],
7388 'frames': [{'context_line': ' response = get_response(request)',
7389 'exc_cause': None,
7390 'exc_cause_explicit': None,
7391 'filename': '/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py',
7392 'function': 'inner',
7393 'id': 140202312592704,
7394 'lineno': 47,
7395 'post_context': [' except Exception as exc:',
7396 ' response = '
7397 'response_for_exception(request, exc)',
7398 ' return response',
7399 ' return inner',
7400 '',
7401 ''],
7402 'pre_context': [' response = await '
7403 'sync_to_async(response_for_exception, '
7404 'thread_sensitive=False)(request, exc)',
7405 ' return response',
7406 ' return inner',
7407 ' else:',
7408 ' @wraps(get_response)',
7409 ' def inner(request):',
7410 ' try:'],
7411 'pre_context_lineno': 40,
7412 'tb': <traceback object at 0x7f836509ed40>,
7413 'type': 'django',
7414 'vars': [('request',
7415 '<WSGIRequest: GET '
7416 "'/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>"),
7417 ('exc',
7418 'RuntimeError("There is no current event loop in thread '
7419 '\'ThreadPoolExecutor-0_0\'.")'),
7420 ('get_response',
7421 '<bound method BaseHandler._get_response of '
7422 '<django.core.handlers.wsgi.WSGIHandler object at '
7423 '0x7f837e237970>>')]},
7424 {'context_line': ' response = '
7425 'wrapped_callback(request, *callback_args, '
7426 '**callback_kwargs)',
7427 'exc_cause': None,
7428 'exc_cause_explicit': None,
7429 'filename': '/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py',
7430 'function': '_get_response',
7431 'id': 140202312593216,
7432 'lineno': 181,
7433 'post_context': [' except Exception as e:',
7434 ' response = '
7435 'self.process_exception_by_middleware(e, '
7436 'request)',
7437 ' if response is None:',
7438 ' raise',
7439 '',
7440 ' # Complain if the view returned None (a '
7441 'common error).'],
7442 'pre_context': ['',
7443 ' if response is None:',
7444 ' wrapped_callback = '
7445 'self.make_view_atomic(callback)',
7446 ' # If it is an asynchronous view, run '
7447 'it in a subthread.',
7448 ' if '
7449 'asyncio.iscoroutinefunction(wrapped_callback):',
7450 ' wrapped_callback = '
7451 'async_to_sync(wrapped_callback)',
7452 ' try:'],
7453 'pre_context_lineno': 174,
7454 'tb': <traceback object at 0x7f836509ef40>,
7455 'type': 'django',
7456 'vars': [('self',
7457 '<django.core.handlers.wsgi.WSGIHandler object at '
7458 '0x7f837e237970>'),
7459 ('request',
7460 '<WSGIRequest: GET '
7461 "'/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>"),
7462 ('response', 'None'),
7463 ('callback',
7464 '<function KeywordDifficultyAPIView at 0x7f83668918b0>'),
7465 ('callback_args', '()'),
7466 ('callback_kwargs', '{}'),
7467 ('middleware_method',
7468 '<function CsrfViewMiddleware.process_view at '
7469 '0x7f83673f3ee0>'),
7470 ('wrapped_callback',
7471 '<function KeywordDifficultyAPIView at '
7472 '0x7f83668918b0>')]},
7473 {'context_line': ' return view_func(*args, **kwargs)',
7474 'exc_cause': None,
7475 'exc_cause_explicit': None,
7476 'filename': '/usr/local/lib/python3.8/site-packages/django/views/decorators/csrf.py',
7477 'function': 'wrapped_view',
7478 'id': 140202312591872,
7479 'lineno': 54,
7480 'post_context': [' wrapped_view.csrf_exempt = True',
7481 ' return wraps(view_func)(wrapped_view)'],
7482 'pre_context': ['',
7483 '',
7484 'def csrf_exempt(view_func):',
7485 ' """Mark a view function as being exempt from '
7486 'the CSRF view protection."""',
7487 ' # view_func.csrf_exempt = True would also '
7488 'work, but decorators are nicer',
7489 " # if they don't have side effects, so return "
7490 'a new function.',
7491 ' def wrapped_view(*args, **kwargs):'],
7492 'pre_context_lineno': 47,
7493 'tb': <traceback object at 0x7f836509ea00>,
7494 'type': 'django',
7495 'vars': [('args',
7496 '(<WSGIRequest: GET '
7497 "'/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>,)"),
7498 ('kwargs', '{}'),
7499 ('view_func',
7500 '<function KeywordDifficultyAPIView at '
7501 '0x7f8366891820>')]},
7502 {'context_line': ' return self.dispatch(request, *args, '
7503 '**kwargs)',
7504 'exc_cause': None,
7505 'exc_cause_explicit': None,
7506 'filename': '/usr/local/lib/python3.8/site-packages/django/views/generic/base.py',
7507 'function': 'view',
7508 'id': 140202312592960,
7509 'lineno': 70,
7510 'post_context': [' view.view_class = cls',
7511 ' view.view_initkwargs = initkwargs',
7512 '',
7513 ' # take name and docstring from class',
7514 ' update_wrapper(view, cls, updated=())',
7515 ''],
7516 'pre_context': [' self = cls(**initkwargs)',
7517 ' self.setup(request, *args, **kwargs)',
7518 " if not hasattr(self, 'request'):",
7519 ' raise AttributeError(',
7520 ' "%s instance has no '
7521 '\'request\' attribute. Did you override "',
7522 ' "setup() and forget to call '
7523 'super()?" % cls.__name__',
7524 ' )'],
7525 'pre_context_lineno': 63,
7526 'tb': <traceback object at 0x7f836509ee40>,
7527 'type': 'django',
7528 'vars': [('request',
7529 '<WSGIRequest: GET '
7530 "'/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>"),
7531 ('args', '()'),
7532 ('kwargs', '{}'),
7533 ('self',
7534 '<backlink.api.v1.views.KeywordDifficultyAPIView object '
7535 'at 0x7f83651966d0>'),
7536 ('cls',
7537 '<class '
7538 "'backlink.api.v1.views.KeywordDifficultyAPIView'>"),
7539 ('initkwargs', '{}')]},
7540 {'context_line': ' response = '
7541 'self.handle_exception(exc)',
7542 'exc_cause': None,
7543 'exc_cause_explicit': None,
7544 'filename': '/usr/local/lib/python3.8/site-packages/rest_framework/views.py',
7545 'function': 'dispatch',
7546 'id': 140202312592896,
7547 'lineno': 509,
7548 'post_context': ['',
7549 ' self.response = '
7550 'self.finalize_response(request, response, '
7551 '*args, **kwargs)',
7552 ' return self.response',
7553 '',
7554 ' def options(self, request, *args, '
7555 '**kwargs):',
7556 ' """'],
7557 'pre_context': [' '
7558 'self.http_method_not_allowed)',
7559 ' else:',
7560 ' handler = '
7561 'self.http_method_not_allowed',
7562 '',
7563 ' response = handler(request, *args, '
7564 '**kwargs)',
7565 '',
7566 ' except Exception as exc:'],
7567 'pre_context_lineno': 502,
7568 'tb': <traceback object at 0x7f836509ee00>,
7569 'type': 'user',
7570 'vars': [('self',
7571 '<backlink.api.v1.views.KeywordDifficultyAPIView object '
7572 'at 0x7f83651966d0>'),
7573 ('request',
7574 '<rest_framework.request.Request: GET '
7575 "'/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>"),
7576 ('args', '()'),
7577 ('kwargs', '{}'),
7578 ('handler',
7579 '<bound method KeywordDifficultyAPIView.get of '
7580 '<backlink.api.v1.views.KeywordDifficultyAPIView object '
7581 'at 0x7f83651966d0>>')]},
7582 {'context_line': ' self.raise_uncaught_exception(exc)',
7583 'exc_cause': None,
7584 'exc_cause_explicit': None,
7585 'filename': '/usr/local/lib/python3.8/site-packages/rest_framework/views.py',
7586 'function': 'handle_exception',
7587 'id': 140202312592320,
7588 'lineno': 469,
7589 'post_context': ['',
7590 ' response.exception = True',
7591 ' return response',
7592 '',
7593 ' def raise_uncaught_exception(self, exc):',
7594 ' if settings.DEBUG:'],
7595 'pre_context': ['',
7596 ' exception_handler = '
7597 'self.get_exception_handler()',
7598 '',
7599 ' context = '
7600 'self.get_exception_handler_context()',
7601 ' response = exception_handler(exc, '
7602 'context)',
7603 '',
7604 ' if response is None:'],
7605 'pre_context_lineno': 462,
7606 'tb': <traceback object at 0x7f836509ebc0>,
7607 'type': 'user',
7608 'vars': [('self',
7609 '<backlink.api.v1.views.KeywordDifficultyAPIView object '
7610 'at 0x7f83651966d0>'),
7611 ('exc',
7612 'RuntimeError("There is no current event loop in thread '
7613 '\'ThreadPoolExecutor-0_0\'.")'),
7614 ('exception_handler',
7615 '<function exception_handler at 0x7f8366d113a0>'),
7616 ('context',
7617 "{'args': (),\n"
7618 " 'kwargs': {},\n"
7619 " 'request': <rest_framework.request.Request: GET "
7620 "'/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>,\n"
7621 " 'view': "
7622 '<backlink.api.v1.views.KeywordDifficultyAPIView object '
7623 'at 0x7f83651966d0>}'),
7624 ('response', 'None')]},
7625 {'context_line': ' raise exc',
7626 'exc_cause': None,
7627 'exc_cause_explicit': None,
7628 'filename': '/usr/local/lib/python3.8/site-packages/rest_framework/views.py',
7629 'function': 'raise_uncaught_exception',
7630 'id': 140202312455040,
7631 'lineno': 480,
7632 'post_context': ['',
7633 ' # Note: Views are made CSRF exempt from '
7634 'within `as_view` as to prevent',
7635 ' # accidental removal of this exemption in '
7636 'cases where `dispatch` needs to',
7637 ' # be overridden.',
7638 ' def dispatch(self, request, *args, '
7639 '**kwargs):',
7640 ' """'],
7641 'pre_context': ['',
7642 ' def raise_uncaught_exception(self, exc):',
7643 ' if settings.DEBUG:',
7644 ' request = self.request',
7645 ' renderer_format = '
7646 "getattr(request.accepted_renderer, 'format')",
7647 ' use_plaintext_traceback = '
7648 "renderer_format not in ('html', 'api', 'admin')",
7649 ' '
7650 'request.force_plaintext_errors(use_plaintext_traceback)'],
7651 'pre_context_lineno': 473,
7652 'tb': <traceback object at 0x7f836507d380>,
7653 'type': 'user',
7654 'vars': [('self',
7655 '<backlink.api.v1.views.KeywordDifficultyAPIView object '
7656 'at 0x7f83651966d0>'),
7657 ('exc',
7658 'RuntimeError("There is no current event loop in thread '
7659 '\'ThreadPoolExecutor-0_0\'.")'),
7660 ('request',
7661 '<rest_framework.request.Request: GET '
7662 "'/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>"),
7663 ('renderer_format', "'json'"),
7664 ('use_plaintext_traceback', 'True')]},
7665 {'context_line': ' response = handler(request, *args, '
7666 '**kwargs)',
7667 'exc_cause': None,
7668 'exc_cause_explicit': None,
7669 'filename': '/usr/local/lib/python3.8/site-packages/rest_framework/views.py',
7670 'function': 'dispatch',
7671 'id': 140202312455104,
7672 'lineno': 506,
7673 'post_context': ['',
7674 ' except Exception as exc:',
7675 ' response = '
7676 'self.handle_exception(exc)',
7677 '',
7678 ' self.response = '
7679 'self.finalize_response(request, response, '
7680 '*args, **kwargs)',
7681 ' return self.response'],
7682 'pre_context': [' # Get the appropriate handler method',
7683 ' if request.method.lower() in '
7684 'self.http_method_names:',
7685 ' handler = getattr(self, '
7686 'request.method.lower(),',
7687 ' '
7688 'self.http_method_not_allowed)',
7689 ' else:',
7690 ' handler = '
7691 'self.http_method_not_allowed',
7692 ''],
7693 'pre_context_lineno': 499,
7694 'tb': <traceback object at 0x7f836507d3c0>,
7695 'type': 'user',
7696 'vars': [('self',
7697 '<backlink.api.v1.views.KeywordDifficultyAPIView object '
7698 'at 0x7f83651966d0>'),
7699 ('request',
7700 '<rest_framework.request.Request: GET '
7701 "'/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>"),
7702 ('args', '()'),
7703 ('kwargs', '{}'),
7704 ('handler',
7705 '<bound method KeywordDifficultyAPIView.get of '
7706 '<backlink.api.v1.views.KeywordDifficultyAPIView object '
7707 'at 0x7f83651966d0>>')]},
7708 {'context_line': ' websites = '
7709 'Website.objects.get_or_create_from_urls(urls=website_urls)',
7710 'exc_cause': None,
7711 'exc_cause_explicit': None,
7712 'filename': '/usr/src/app/backlink/api/v1/views.py',
7713 'function': 'get',
7714 'id': 140202312454912,
7715 'lineno': 247,
7716 'post_context': [" stopwatch_instance.click('WEBSITES "
7717 "GET_OR_CREATE')",
7718 " stopwatch_instance.click('WEBSITES GET "
7719 "WEBSITE DATA FOR EACH')",
7720 ' website_ids = [website.id for website '
7721 'in websites]',
7722 ' websites_qs = '
7723 'Website.objects.filter(pk__in=website_ids)',
7724 ' websites_specs = '
7725 'get_website_data(websites_qs=websites_qs)',
7726 " stopwatch_instance.click('WEBSITES GET "
7727 "WEBSITE DATA FOR EACH')"],
7728 'pre_context': [" stopwatch_instance.click('GET WEBSITES')",
7729 ' website_urls = '
7730 'request.GET.getlist("websites")',
7731 " stopwatch_instance.click('GET WEBSITES')",
7732 ' if not website_urls:',
7733 ' error_message = f"Invalid '
7734 'website_urls received: {website_urls}"',
7735 ' raise '
7736 'serializers.ValidationError(error_message)',
7737 " stopwatch_instance.click('WEBSITES "
7738 "GET_OR_CREATE')"],
7739 'pre_context_lineno': 240,
7740 'tb': <traceback object at 0x7f836507d300>,
7741 'type': 'user',
7742 'vars': [('self',
7743 '<backlink.api.v1.views.KeywordDifficultyAPIView object '
7744 'at 0x7f83651966d0>'),
7745 ('request',
7746 '<rest_framework.request.Request: GET '
7747 "'/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com'>"),
7748 ('kwargs', '{}'),
7749 ('stopwatch_instance',
7750 '<utils.profiling.Stopwatch object at 0x7f8365d536d0>'),
7751 ('website_urls',
7752 "['atcarlsbarbershop.com',\n"
7753 " 'floydsbarbershop.com',\n"
7754 " 'barbershopbags.com',\n"
7755 " 'parkersbarbershop.com',\n"
7756 " 'finleysbarbershop.com',\n"
7757 " 'barbershopbar.com',\n"
7758 " 'garrettsbarbershop.com',\n"
7759 " 'beardsleysbarbershop.com',\n"
7760 " 'barbershop.org',\n"
7761 " 'bensbarbershop.com']")]},
7762 {'context_line': ' return asyncio.run(',
7763 'exc_cause': None,
7764 'exc_cause_explicit': None,
7765 'filename': '/usr/src/app/backlink/models.py',
7766 'function': 'get_or_create_from_urls',
7767 'id': 140202312455552,
7768 'lineno': 110,
7769 'post_context': [' '
7770 'self._gather_async_results_from_get_or_create_from_url(urls),',
7771 ' debug=bool(settings.DEBUG))',
7772 ' else:',
7773 ' return '
7774 '[self.get_or_create_from_url(url, run_async) '
7775 'for url in urls]',
7776 '',
7777 ''],
7778 'pre_context': [' )',
7779 ' task_list.append(future)',
7780 '',
7781 ' return await asyncio.gather(*task_list)',
7782 '',
7783 ' def get_or_create_from_urls(self, urls: '
7784 'Iterable[str], run_async=True):',
7785 ' if run_async:'],
7786 'pre_context_lineno': 103,
7787 'tb': <traceback object at 0x7f836507d580>,
7788 'type': 'user',
7789 'vars': [('urls',
7790 "['atcarlsbarbershop.com',\n"
7791 " 'floydsbarbershop.com',\n"
7792 " 'barbershopbags.com',\n"
7793 " 'parkersbarbershop.com',\n"
7794 " 'finleysbarbershop.com',\n"
7795 " 'barbershopbar.com',\n"
7796 " 'garrettsbarbershop.com',\n"
7797 " 'beardsleysbarbershop.com',\n"
7798 " 'barbershop.org',\n"
7799 " 'bensbarbershop.com']"),
7800 ('run_async', 'True'),
7801 ('self',
7802 '<backlink.models.WebsiteManager object at '
7803 '0x7f8367796a90>')]},
7804 {'context_line': ' return loop.run_until_complete(main)',
7805 'exc_cause': None,
7806 'exc_cause_explicit': None,
7807 'filename': '/usr/local/lib/python3.8/asyncio/runners.py',
7808 'function': 'run',
7809 'id': 140202312592576,
7810 'lineno': 44,
7811 'post_context': [' finally:',
7812 ' try:',
7813 ' _cancel_all_tasks(loop)',
7814 ' '
7815 'loop.run_until_complete(loop.shutdown_asyncgens())',
7816 ' finally:',
7817 ' events.set_event_loop(None)'],
7818 'pre_context': [' raise ValueError("a coroutine was '
7819 'expected, got {!r}".format(main))',
7820 '',
7821 ' loop = events.new_event_loop()',
7822 ' try:',
7823 ' events.set_event_loop(loop)',
7824 ' if debug is not None:',
7825 ' loop.set_debug(debug)'],
7826 'pre_context_lineno': 37,
7827 'tb': <traceback object at 0x7f836509ecc0>,
7828 'type': 'user',
7829 'vars': [('main',
7830 '<coroutine object '
7831 'WebsiteManager._gather_async_results_from_get_or_create_from_url '
7832 'at 0x7f83652b32c0>'),
7833 ('debug', 'True'),
7834 ('loop',
7835 '<_UnixSelectorEventLoop running=False closed=True '
7836 'debug=True>')]},
7837 {'context_line': ' return future.result()',
7838 'exc_cause': None,
7839 'exc_cause_explicit': None,
7840 'filename': '/usr/local/lib/python3.8/asyncio/base_events.py',
7841 'function': 'run_until_complete',
7842 'id': 140202314769344,
7843 'lineno': 616,
7844 'post_context': ['',
7845 ' def stop(self):',
7846 ' """Stop running the event loop.',
7847 '',
7848 ' Every callback already scheduled will '
7849 'still run. This simply informs',
7850 ' run_forever to stop looping after a '
7851 'complete iteration.'],
7852 'pre_context': [' future.exception()',
7853 ' raise',
7854 ' finally:',
7855 ' '
7856 'future.remove_done_callback(_run_until_complete_cb)',
7857 ' if not future.done():',
7858 " raise RuntimeError('Event loop "
7859 "stopped before Future completed.')",
7860 ''],
7861 'pre_context_lineno': 609,
7862 'tb': <traceback object at 0x7f83652b23c0>,
7863 'type': 'user',
7864 'vars': [('self',
7865 '<_UnixSelectorEventLoop running=False closed=True '
7866 'debug=True>'),
7867 ('future',
7868 "<Task finished name='Task-25' "
7869 'coro=<WebsiteManager._gather_async_results_from_get_or_create_from_url() '
7870 'done, defined at /usr/src/app/backlink/models.py:95> '
7871 'exception=RuntimeError("There is no current event loop '
7872 'in thread \'ThreadPoolExecutor-0_0\'.") created at '
7873 '/usr/local/lib/python3.8/asyncio/base_events.py:595>'),
7874 ('new_task', 'True')]},
7875 {'context_line': ' return await asyncio.gather(*task_list)',
7876 'exc_cause': None,
7877 'exc_cause_explicit': None,
7878 'filename': '/usr/src/app/backlink/models.py',
7879 'function': '_gather_async_results_from_get_or_create_from_url',
7880 'id': 140202312590080,
7881 'lineno': 106,
7882 'post_context': ['',
7883 ' def get_or_create_from_urls(self, urls: '
7884 'Iterable[str], run_async=True):',
7885 ' if run_async:',
7886 ' return asyncio.run(',
7887 ' '
7888 'self._gather_async_results_from_get_or_create_from_url(urls),',
7889 ' debug=bool(settings.DEBUG))'],
7890 'pre_context': ['',
7891 ' for url in urls:',
7892 ' future = asyncio.create_task(',
7893 ' '
7894 'get_or_create_from_url_async(url, '
7895 'run_async=True)',
7896 ' )',
7897 ' task_list.append(future)',
7898 ''],
7899 'pre_context_lineno': 99,
7900 'tb': <traceback object at 0x7f836509e300>,
7901 'type': 'user',
7902 'vars': [('self',
7903 '<backlink.models.WebsiteManager object at '
7904 '0x7f8367796a90>'),
7905 ('urls',
7906 "['atcarlsbarbershop.com',\n"
7907 " 'floydsbarbershop.com',\n"
7908 " 'barbershopbags.com',\n"
7909 " 'parkersbarbershop.com',\n"
7910 " 'finleysbarbershop.com',\n"
7911 " 'barbershopbar.com',\n"
7912 " 'garrettsbarbershop.com',\n"
7913 " 'beardsleysbarbershop.com',\n"
7914 " 'barbershop.org',\n"
7915 " 'bensbarbershop.com']"),
7916 ('task_list',
7917 "[<Task finished name='Task-26' "
7918 'coro=<SyncToAsync.__call__() done, defined at '
7919 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7920 'result=<Website: atc... -> None rows> created at '
7921 '/usr/local/lib/python3.8/asyncio/tasks.py:382>,\n'
7922 " <Task finished name='Task-27' "
7923 'coro=<SyncToAsync.__call__() done, defined at '
7924 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7925 'result=<Website: flo... -> None rows> created at '
7926 '/usr/local/lib/python3.8/asyncio/tasks.py:382>,\n'
7927 " <Task finished name='Task-28' "
7928 'coro=<SyncToAsync.__call__() done, defined at '
7929 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7930 'result=<Website: bar... -> None rows> created at '
7931 '/usr/local/lib/python3.8/asyncio/tasks.py:382>,\n'
7932 " <Task finished name='Task-29' "
7933 'coro=<SyncToAsync.__call__() done, defined at '
7934 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7935 'result=<Website: par... -> None rows> created at '
7936 '/usr/local/lib/python3.8/asyncio/tasks.py:382>,\n'
7937 " <Task finished name='Task-30' "
7938 'coro=<SyncToAsync.__call__() done, defined at '
7939 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7940 'exception=RuntimeError("There is no current event loop '
7941 'in thread \'ThreadPoolExecutor-0_0\'.") created at '
7942 '/usr/local/lib/python3.8/asyncio/tasks.py:382>,\n'
7943 " <Task cancelled name='Task-31' "
7944 'coro=<SyncToAsync.__call__() done, defined at '
7945 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7946 'created at '
7947 '/usr/local/lib/python3.8/asyncio/tasks.py:382>,\n'
7948 " <Task cancelled name='Task-32' "
7949 'coro=<SyncToAsync.__call__() done, defined at '
7950 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7951 'created at '
7952 '/usr/local/lib/python3.8/asyncio/tasks.py:382>,\n'
7953 " <Task cancelled name='Task-33' "
7954 'coro=<SyncToAsync.__call__() done, defined at '
7955 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7956 'created at '
7957 '/usr/local/lib/python3.8/asyncio/tasks.py:382>,\n'
7958 " <Task cancelled name='Task-34' "
7959 'coro=<SyncToAsync.__call__() done, defined at '
7960 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7961 'created at '
7962 '/usr/local/lib/python3.8/asyncio/tasks.py:382>,\n'
7963 " <Task cancelled name='Task-35' "
7964 'coro=<SyncToAsync.__call__() done, defined at '
7965 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7966 'created at '
7967 '/usr/local/lib/python3.8/asyncio/tasks.py:382>]'),
7968 ('get_or_create_from_url_async',
7969 '<asgiref.sync.SyncToAsync object at 0x7f83650b62e0>'),
7970 ('url', "'bensbarbershop.com'"),
7971 ('future',
7972 "<Task cancelled name='Task-35' "
7973 'coro=<SyncToAsync.__call__() done, defined at '
7974 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
7975 'created at '
7976 '/usr/local/lib/python3.8/asyncio/tasks.py:382>')]},
7977 {'context_line': ' ret = await asyncio.wait_for(future, '
7978 'timeout=None)',
7979 'exc_cause': None,
7980 'exc_cause_explicit': None,
7981 'filename': '/usr/local/lib/python3.8/site-packages/asgiref/sync.py',
7982 'function': '__call__',
7983 'id': 140202312591552,
7984 'lineno': 423,
7985 'post_context': ['',
7986 ' if contextvars is not None:',
7987 ' _restore_context(context)',
7988 '',
7989 ' return ret',
7990 ''],
7991 'pre_context': [' self.get_current_task(),',
7992 ' sys.exc_info(),',
7993 ' func,',
7994 ' *args,',
7995 ' **kwargs,',
7996 ' ),',
7997 ' )'],
7998 'pre_context_lineno': 416,
7999 'tb': <traceback object at 0x7f836509e8c0>,
8000 'type': 'user',
8001 'vars': [('self',
8002 '<asgiref.sync.SyncToAsync object at 0x7f83650b62e0>'),
8003 ('args',
8004 '(functools.partial(<function '
8005 'WebsiteManager._get_or_create_from_url_base_method at '
8006 "0x7f8367807ee0>, 'finleysbarbershop.com', "
8007 'run_async=True),)'),
8008 ('kwargs', '{}'),
8009 ('loop',
8010 '<_UnixSelectorEventLoop running=False closed=True '
8011 'debug=True>'),
8012 ('executor',
8013 '<concurrent.futures.thread.ThreadPoolExecutor object '
8014 'at 0x7f837eeed9d0>'),
8015 ('context', '<Context object at 0x7f83652be240>'),
8016 ('child',
8017 'functools.partial(<function '
8018 'WebsiteManager._get_or_create_from_url_base_method at '
8019 "0x7f8367807ee0>, 'finleysbarbershop.com', "
8020 'run_async=True)'),
8021 ('func',
8022 '<built-in method run of Context object at '
8023 '0x7f83652be240>'),
8024 ('future',
8025 '<Future finished exception=RuntimeError("There is no '
8026 'current event loop in thread '
8027 '\'ThreadPoolExecutor-0_0\'.") created at '
8028 '/usr/local/lib/python3.8/asyncio/base_events.py:422>')]},
8029 {'context_line': ' return await fut',
8030 'exc_cause': None,
8031 'exc_cause_explicit': None,
8032 'filename': '/usr/local/lib/python3.8/asyncio/tasks.py',
8033 'function': 'wait_for',
8034 'id': 140202312592832,
8035 'lineno': 455,
8036 'post_context': ['',
8037 ' if timeout <= 0:',
8038 ' fut = ensure_future(fut, loop=loop)',
8039 '',
8040 ' if fut.done():',
8041 ' return fut.result()'],
8042 'pre_context': [' loop = events.get_running_loop()',
8043 ' else:',
8044 ' warnings.warn("The loop argument is '
8045 'deprecated since Python 3.8, "',
8046 ' "and scheduled for removal '
8047 'in Python 3.10.",',
8048 ' DeprecationWarning, '
8049 'stacklevel=2)',
8050 '',
8051 ' if timeout is None:'],
8052 'pre_context_lineno': 448,
8053 'tb': <traceback object at 0x7f836509edc0>,
8054 'type': 'user',
8055 'vars': [('fut',
8056 '<Future finished exception=RuntimeError("There is no '
8057 'current event loop in thread '
8058 '\'ThreadPoolExecutor-0_0\'.") created at '
8059 '/usr/local/lib/python3.8/asyncio/base_events.py:422>'),
8060 ('timeout', 'None'),
8061 ('loop',
8062 '<_UnixSelectorEventLoop running=False closed=True '
8063 'debug=True>')]},
8064 {'context_line': ' result = self.fn(*self.args, '
8065 '**self.kwargs)',
8066 'exc_cause': None,
8067 'exc_cause_explicit': None,
8068 'filename': '/usr/local/lib/python3.8/concurrent/futures/thread.py',
8069 'function': 'run',
8070 'id': 140202312591168,
8071 'lineno': 57,
8072 'post_context': [' except BaseException as exc:',
8073 ' self.future.set_exception(exc)',
8074 ' # Break a reference cycle with the '
8075 "exception 'exc'",
8076 ' self = None',
8077 ' else:',
8078 ' self.future.set_result(result)'],
8079 'pre_context': [' self.kwargs = kwargs',
8080 '',
8081 ' def run(self):',
8082 ' if not '
8083 'self.future.set_running_or_notify_cancel():',
8084 ' return',
8085 '',
8086 ' try:'],
8087 'pre_context_lineno': 50,
8088 'tb': <traceback object at 0x7f836509e740>,
8089 'type': 'user',
8090 'vars': [('self', 'None')]},
8091 {'context_line': ' return func(*args, **kwargs)',
8092 'exc_cause': None,
8093 'exc_cause_explicit': None,
8094 'filename': '/usr/local/lib/python3.8/site-packages/asgiref/sync.py',
8095 'function': 'thread_handler',
8096 'id': 140202312590720,
8097 'lineno': 462,
8098 'post_context': [' finally:',
8099 ' # Only delete the launch_map parent '
8100 'if we set it, otherwise it is',
8101 ' # from someone else.',
8102 ' if parent_set:',
8103 ' del '
8104 'self.launch_map[current_thread]',
8105 ''],
8106 'pre_context': [' # after raising it so exc_info is '
8107 'correctly populated.',
8108 ' if exc_info[1]:',
8109 ' try:',
8110 ' raise exc_info[1]',
8111 ' except BaseException:',
8112 ' return func(*args, **kwargs)',
8113 ' else:'],
8114 'pre_context_lineno': 455,
8115 'tb': <traceback object at 0x7f836509e580>,
8116 'type': 'user',
8117 'vars': [('self',
8118 '<asgiref.sync.SyncToAsync object at 0x7f83650b62e0>'),
8119 ('loop',
8120 '<_UnixSelectorEventLoop running=False closed=True '
8121 'debug=True>'),
8122 ('source_task',
8123 "<Task finished name='Task-30' "
8124 'coro=<SyncToAsync.__call__() done, defined at '
8125 '/usr/local/lib/python3.8/site-packages/asgiref/sync.py:372> '
8126 'exception=RuntimeError("There is no current event loop '
8127 'in thread \'ThreadPoolExecutor-0_0\'.") created at '
8128 '/usr/local/lib/python3.8/asyncio/tasks.py:382>'),
8129 ('exc_info', '(None, None, None)'),
8130 ('func',
8131 '<built-in method run of Context object at '
8132 '0x7f83652be240>'),
8133 ('args',
8134 '(functools.partial(<function '
8135 'WebsiteManager._get_or_create_from_url_base_method at '
8136 "0x7f8367807ee0>, 'finleysbarbershop.com', "
8137 'run_async=True),)'),
8138 ('kwargs', '{}'),
8139 ('current_thread',
8140 '<Thread(ThreadPoolExecutor-0_0, started daemon '
8141 '140202335196928)>'),
8142 ('parent_set', 'True')]},
8143 {'context_line': ' website.on_created(run_async)',
8144 'exc_cause': None,
8145 'exc_cause_explicit': None,
8146 'filename': '/usr/src/app/backlink/models.py',
8147 'function': '_get_or_create_from_url_base_method',
8148 'id': 140202312589760,
8149 'lineno': 84,
8150 'post_context': [' else:',
8151 " logger.debug(f'Existing website: "
8152 "{url} id: {website.id}')",
8153 " stopwatch_instance.click('CALLBACKS')",
8154 ' stopwatch_instance.log_overall_time()',
8155 ' return website',
8156 ''],
8157 'pre_context': [" tld=data['tld'],",
8158 ' defaults=dict(url=url, '
8159 "title=data['title'])",
8160 ' )',
8161 " stopwatch_instance.click('GET OR "
8162 "CREATE')",
8163 " stopwatch_instance.click('CALLBACKS')",
8164 ' if was_created:',
8165 " logger.debug(f'Created new Website "
8166 "for URL: {url}.')"],
8167 'pre_context_lineno': 77,
8168 'tb': <traceback object at 0x7f836509e1c0>,
8169 'type': 'user',
8170 'vars': [('url', "'finleysbarbershop.com'"),
8171 ('run_async', 'True'),
8172 ('stopwatch_instance',
8173 '<utils.profiling.Stopwatch object at 0x7f8365bcd5b0>'),
8174 ('data',
8175 "{'domain': 'finleysbarbershop.com',\n"
8176 " 'hostname': 'finleysbarbershop.com',\n"
8177 " 'title': 'finleysbarbershop',\n"
8178 " 'tld': 'com'}"),
8179 ('website',
8180 '<Website: finleysbarbershop.com | ahrefsbacklinks:None '
8181 '-> None rows | majesticbacklinks:None -> None rows | '
8182 'urldownload:None -> None rows | urlclassify:None -> '
8183 'None rows | toxicity:None -> None rows>'),
8184 ('was_created', 'True')]},
8185 {'context_line': ' self.pull_website_stats_ahrefs()',
8186 'exc_cause': None,
8187 'exc_cause_explicit': None,
8188 'filename': '/usr/src/app/backlink/models.py',
8189 'function': 'on_created',
8190 'id': 140202312590208,
8191 'lineno': 287,
8192 'post_context': [' '
8193 "stopwatch_instance.click('pull_website_stats_ahrefs')",
8194 ' '
8195 "stopwatch_instance.click('pull_screenshot')",
8196 " self._call_task('pull_screenshot', "
8197 'self, run_async)',
8198 ' '
8199 "stopwatch_instance.click('pull_screenshot')",
8200 ' stopwatch_instance.log_overall_time()',
8201 ' # START - Celery Task Management Methods'],
8202 'pre_context': [' """',
8203 ' This method gets called after a new '
8204 'Website gets created',
8205 ' """',
8206 ' stopwatch_instance = '
8207 "Stopwatch('Website.on_created')",
8208 ' '
8209 'self.pull_ahrefs_backlinks(run_async=run_async)',
8210 ' '
8211 'self.pull_majestic_backlinks(run_async=run_async)',
8212 ' '
8213 "stopwatch_instance.click('pull_website_stats_ahrefs')"],
8214 'pre_context_lineno': 280,
8215 'tb': <traceback object at 0x7f836509e380>,
8216 'type': 'user',
8217 'vars': [('self',
8218 '<Website: finleysbarbershop.com | ahrefsbacklinks:None '
8219 '-> None rows | majesticbacklinks:None -> None rows | '
8220 'urldownload:None -> None rows | urlclassify:None -> '
8221 'None rows | toxicity:None -> None rows>'),
8222 ('run_async', 'True'),
8223 ('stopwatch_instance',
8224 '<utils.profiling.Stopwatch object at '
8225 '0x7f83650b83d0>')]},
8226 {'context_line': ' update_website_stats(self)',
8227 'exc_cause': None,
8228 'exc_cause_explicit': None,
8229 'filename': '/usr/src/app/backlink/models.py',
8230 'function': 'pull_website_stats_ahrefs',
8231 'id': 140202312590848,
8232 'lineno': 235,
8233 'post_context': ['',
8234 ' def pull_majestic_backlinks(self, '
8235 'run_async=False, force=False):',
8236 ' """',
8237 ' The main method used to pull Majestic '
8238 'backlinks for a Website',
8239 ' """',
8240 ' if not '
8241 'self.should_process_majestic_backlinks:'],
8242 'pre_context': [' 4) ahrefs_refdomain_count',
8243 ' 5) ahrefs_website_stats_updated_at',
8244 ' """',
8245 ' from vendor.ahrefs.api import '
8246 'update_website_stats',
8247 ' if self.ahrefs_website_stats_updated_at '
8248 'and self.ahrefs_website_stats_updated_at > '
8249 'timezone.now() - datetime.timedelta(days=30):',
8250 " logger.info('Skipping update, data "
8251 "has been updated within the last 30 days...')",
8252 ' return'],
8253 'pre_context_lineno': 228,
8254 'tb': <traceback object at 0x7f836509e600>,
8255 'type': 'user',
8256 'vars': [('self',
8257 '<Website: finleysbarbershop.com | ahrefsbacklinks:None '
8258 '-> None rows | majesticbacklinks:None -> None rows | '
8259 'urldownload:None -> None rows | urlclassify:None -> '
8260 'None rows | toxicity:None -> None rows>'),
8261 ('update_website_stats',
8262 '<function update_website_stats at 0x7f8368b558b0>')]},
8263 {'context_line': ' response = '
8264 '{**api.get_positions_metrics(hostname, '
8265 'run_async=not settings.TEST_MODE),',
8266 'exc_cause': None,
8267 'exc_cause_explicit': None,
8268 'filename': '/usr/src/app/vendor/ahrefs/api.py',
8269 'function': 'update_website_stats',
8270 'id': 140202312591104,
8271 'lineno': 54,
8272 'post_context': [' '
8273 '**api.get_pages_extended_for_url(hostname, '
8274 'run_async=not settings.TEST_MODE),',
8275 ' '
8276 '**api.get_dr_and_ur_for_url(hostname, '
8277 'run_async=not settings.TEST_MODE)}',
8278 " stopwatch_instance.click('FETCH DATA')",
8279 " stopwatch_instance.click('SAVE NEW DATA')",
8280 '',
8281 ' internal_to_external = {'],
8282 'pre_context': [' Performs 2 API calls to get this data.',
8283 ' """',
8284 ' stopwatch_instance = '
8285 "Stopwatch('ahrefs.api.update_website_stats')",
8286 " stopwatch_instance.click('FETCH DATA')",
8287 ' hostname = website_obj.hostname',
8288 ' api = APIClient()',
8289 ' logger.info(f"Fetching data for {hostname} '
8290 'from ahrefs vendor")'],
8291 'pre_context_lineno': 47,
8292 'tb': <traceback object at 0x7f836509e700>,
8293 'type': 'user',
8294 'vars': [('website_obj',
8295 '<Website: finleysbarbershop.com | ahrefsbacklinks:None '
8296 '-> None rows | majesticbacklinks:None -> None rows | '
8297 'urldownload:None -> None rows | urlclassify:None -> '
8298 'None rows | toxicity:None -> None rows>'),
8299 ('stopwatch_instance',
8300 '<utils.profiling.Stopwatch object at 0x7f8365073e50>'),
8301 ('hostname', "'finleysbarbershop.com'"),
8302 ('api',
8303 '<vendor.ahrefs.api.APIClient object at '
8304 '0x7f8365bcdd60>')]},
8305 {'context_line': ' response = self.get(params, '
8306 "run_async=run_async)['metrics']",
8307 'exc_cause': None,
8308 'exc_cause_explicit': None,
8309 'filename': '/usr/src/app/vendor/ahrefs/api.py',
8310 'function': 'get_positions_metrics',
8311 'id': 140202312590976,
8312 'lineno': 276,
8313 'post_context': [' logger.info(f"Position_metris '
8314 '{response}")',
8315 ' return response',
8316 '',
8317 '',
8318 'async def fetch(url, params, session):',
8319 ' while True:'],
8320 'pre_context': [" 'from': 'positions_metrics',",
8321 " 'mode': 'subdomains',",
8322 " 'limit': limit,",
8323 " 'target': target,",
8324 " 'output': 'json',",
8325 " 'token': self.get_token(),",
8326 ' }'],
8327 'pre_context_lineno': 269,
8328 'tb': <traceback object at 0x7f836509e680>,
8329 'type': 'user',
8330 'vars': [('self',
8331 '<vendor.ahrefs.api.APIClient object at '
8332 '0x7f8365bcdd60>'),
8333 ('target', "'finleysbarbershop.com'"),
8334 ('limit', '1000'),
8335 ('run_async', 'True'),
8336 ('params',
8337 "{'from': 'positions_metrics',\n"
8338 " 'limit': 1000,\n"
8339 " 'mode': 'subdomains',\n"
8340 " 'output': 'json',\n"
8341 " 'target': 'finleysbarbershop.com',\n"
8342 " 'token': "
8343 "'_VdtvfJ_POoce00XymccszGiO-0ltyC4g7ctpF8H'}")]},
8344 {'context_line': ' loop = asyncio.get_event_loop()',
8345 'exc_cause': None,
8346 'exc_cause_explicit': None,
8347 'filename': '/usr/src/app/vendor/ahrefs/api.py',
8348 'function': 'get',
8349 'id': 140202315240000,
8350 'lineno': 107,
8351 'post_context': [' return '
8352 'loop.run_until_complete(self.get_async(params))',
8353 ' return self.get_sync(params)',
8354 ' else:',
8355 " logger.info('Added queued async "
8356 "task from {}'.format(params['from']))",
8357 ' self.tasks.append(params)',
8358 ''],
8359 'pre_context': [' self.do_async = do_async',
8360 ' self.tasks = tasks',
8361 '',
8362 ' def get(self, params: dict, '
8363 'run_async=False):',
8364 ' if not self.do_async:',
8365 ' # Asyncio based (different kind of '
8366 'async)',
8367 ' if run_async:'],
8368 'pre_context_lineno': 100,
8369 'tb': <traceback object at 0x7f8365325240>,
8370 'type': 'user',
8371 'vars': [('self',
8372 '<vendor.ahrefs.api.APIClient object at '
8373 '0x7f8365bcdd60>'),
8374 ('params',
8375 "{'from': 'positions_metrics',\n"
8376 " 'limit': 1000,\n"
8377 " 'mode': 'subdomains',\n"
8378 " 'output': 'json',\n"
8379 " 'target': 'finleysbarbershop.com',\n"
8380 " 'token': '_VdtvfJ_POoce00XymccszGiO-0ltyC4g7ctpF8H'}"),
8381 ('run_async', 'True')]},
8382 {'context_line': " raise RuntimeError('There is no "
8383 "current event loop in thread %r.'",
8384 'exc_cause': None,
8385 'exc_cause_explicit': None,
8386 'filename': '/usr/local/lib/python3.8/asyncio/events.py',
8387 'function': 'get_event_loop',
8388 'id': 140202314750592,
8389 'lineno': 639,
8390 'post_context': [' % '
8391 'threading.current_thread().name)',
8392 '',
8393 ' return self._local._loop',
8394 '',
8395 ' def set_event_loop(self, loop):',
8396 ' """Set the event loop."""'],
8397 'pre_context': [' """',
8398 ' if (self._local._loop is None and',
8399 ' not self._local._set_called and',
8400 ' '
8401 'isinstance(threading.current_thread(), '
8402 'threading._MainThread)):',
8403 ' '
8404 'self.set_event_loop(self.new_event_loop())',
8405 '',
8406 ' if self._local._loop is None:'],
8407 'pre_context_lineno': 632,
8408 'tb': <traceback object at 0x7f83652ada80>,
8409 'type': 'user',
8410 'vars': [('self',
8411 '<asyncio.unix_events._UnixDefaultEventLoopPolicy '
8412 'object at 0x7f83668b9070>')]}],
8413 'is_email': False,
8414 'lastframe': {'context_line': " raise RuntimeError('There is no "
8415 "current event loop in thread %r.'",
8416 'exc_cause': None,
8417 'exc_cause_explicit': None,
8418 'filename': '/usr/local/lib/python3.8/asyncio/events.py',
8419 'function': 'get_event_loop',
8420 'id': 140202314750592,
8421 'lineno': 639,
8422 'post_context': [' % '
8423 'threading.current_thread().name)',
8424 '',
8425 ' return self._local._loop',
8426 '',
8427 ' def set_event_loop(self, loop):',
8428 ' """Set the event loop."""'],
8429 'pre_context': [' """',
8430 ' if (self._local._loop is None and',
8431 ' not self._local._set_called '
8432 'and',
8433 ' '
8434 'isinstance(threading.current_thread(), '
8435 'threading._MainThread)):',
8436 ' '
8437 'self.set_event_loop(self.new_event_loop())',
8438 '',
8439 ' if self._local._loop is None:'],
8440 'pre_context_lineno': 632,
8441 'tb': <traceback object at 0x7f83652ada80>,
8442 'type': 'user',
8443 'vars': [('self',
8444 '<asyncio.unix_events._UnixDefaultEventLoopPolicy '
8445 'object at 0x7f83668b9070>')]},
8446 'postmortem': None,
8447 'request': '<<request>>',
8448 'request_COOKIES_items': dict_items([]),
8449 'request_FILES_items': <generator object MultiValueDict.items at 0x7f8365050ac0>,
8450 'request_GET_items': <generator object MultiValueDict.items at 0x7f8365069040>,
8451 'request_meta': {'HTTP_ACCEPT': '*/*',
8452 'HTTP_ACCEPT_ENCODING': 'gzip',
8453 'HTTP_AUTHORIZATION': 'Bearer '
8454 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoic2xpZGluZyIsImV4cCI6MTYxOTI2NDk2MCwianRpIjoiNjllMDliNmRiYTAyNDMwOGFlYjU1N2M1MTFmMDg3MjgiLCJyZWZyZXNoX2V4cCI6MTYxOTI2NDk2MCwidXNlcl9pZCI6MSwiY3VzdG9tZXIiOnsiaWQiOjQzOSwidGVhbV9pZHMiOlsxNzk1MSwxNzU5OSwxNzU5OCwxNzUwMywxNzM3NywxNzAxNSwxNjYxMSwxNjU5NiwxNjQzMCwxMjkxNiw2MTQsMjI4LDFdLCJpc19zdWJzY3JpYmVyIjpmYWxzZX19.1HyD2TgtFlleqDE3nyi4mCKaGjN1N0rnnzd7plgfLGA',
8455 'HTTP_CDN_LOOP': 'cloudflare',
8456 'HTTP_CF_CONNECTING_IP': '24.135.194.235',
8457 'HTTP_CF_IPCOUNTRY': 'RS',
8458 'HTTP_CF_RAY': '642639cc2d0f1fa2-AMS',
8459 'HTTP_CF_REQUEST_ID': '098bc2739a00001fa2a1060000000001',
8460 'HTTP_CF_VISITOR': '{"scheme":"https"}',
8461 'HTTP_HOST': 'backlink.searchatlas.com',
8462 'HTTP_USER_AGENT': 'python-requests/2.25.0',
8463 'HTTP_X_FORWARDED_FOR': '24.135.194.235, 10.142.0.76',
8464 'HTTP_X_FORWARDED_HOST': 'backlink.searchatlas.com',
8465 'HTTP_X_FORWARDED_PORT': '443',
8466 'HTTP_X_FORWARDED_PROTO': 'https',
8467 'HTTP_X_ORIGINAL_FORWARDED_FOR': '24.135.194.235',
8468 'HTTP_X_REAL_IP': '24.135.194.235',
8469 'HTTP_X_REQUEST_ID': '7703a22f4003647b1c32264aded70de8',
8470 'HTTP_X_SCHEME': 'https',
8471 'PATH_INFO': '/backlink/keyword-difficulty/',
8472 'QUERY_STRING': 'websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com',
8473 'RAW_URI': '/backlink/keyword-difficulty/?websites=atcarlsbarbershop.com&websites=floydsbarbershop.com&websites=barbershopbags.com&websites=parkersbarbershop.com&websites=finleysbarbershop.com&websites=barbershopbar.com&websites=garrettsbarbershop.com&websites=beardsleysbarbershop.com&websites=barbershop.org&websites=bensbarbershop.com',
8474 'REMOTE_ADDR': '10.24.5.30',
8475 'REMOTE_PORT': '41258',
8476 'REQUEST_METHOD': 'GET',
8477 'SCRIPT_NAME': '',
8478 'SERVER_NAME': '0.0.0.0',
8479 'SERVER_PORT': '8000',
8480 'SERVER_PROTOCOL': 'HTTP/1.1',
8481 'SERVER_SOFTWARE': 'gunicorn/20.0.4',
8482 'gunicorn.socket': <socket.socket fd=11, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('10.24.2.38', 8000), raddr=('10.24.5.30', 41258)>,
8483 'wsgi.errors': <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f836518bc70>,
8484 'wsgi.file_wrapper': <class 'gunicorn.http.wsgi.FileWrapper'>,
8485 'wsgi.input': <gunicorn.http.body.Body object at 0x7f83650bb310>,
8486 'wsgi.input_terminated': True,
8487 'wsgi.multiprocess': True,
8488 'wsgi.multithread': False,
8489 'wsgi.run_once': False,
8490 'wsgi.url_scheme': 'http',
8491 'wsgi.version': (1, 0)},
8492 'server_time': datetime.datetime(2021, 4, 19, 12, 44, 42, 904065, tzinfo=<UTC>),
8493 'settings': {'ABSOLUTE_URL_OVERRIDES': {},
8494 'ADMINS': [],
8495 'ALLOWED_HOSTS': ['backlink.searchatlas.com',
8496 'backlinkapp-backlinkapp-production.backlinkapp-production.svc.cluster.local',
8497 'backlink-staging.searchatlas.com',
8498 'backlink.linkgraph.io'],
8499 'APPEND_SLASH': True,
8500 'AUTHENTICATION_BACKENDS': ['django.contrib.auth.backends.ModelBackend'],
8501 'AUTH_PASSWORD_VALIDATORS': '********************',
8502 'AUTH_USER_MODEL': 'backlink.user',
8503 'BACKLINK_ENVIRONMENT': 'production',
8504 'BACKLINK_WAREHOUSE_URL': 'clickhouse://backlink:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="51333768343061693269626766673437613332666665643560606469323065653011323d38323a393e2422347c3330323a3d383f3a7f323d38323a393e242234">[email protected]</a>/backlink_data',
8505 'BASE_DIR': '/usr/src/app',
8506 'CACHES': {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}},
8507 'CACHE_MIDDLEWARE_ALIAS': 'default',
8508 'CACHE_MIDDLEWARE_KEY_PREFIX': '********************',
8509 'CACHE_MIDDLEWARE_SECONDS': 600,
8510 'CELERY_ACCEPT_CONTENT': ['application/json'],
8511 'CELERY_ALWAYS_EAGER': False,
8512 'CELERY_BEAT_SCHEDULE': {'periodically-get-subscription-info': {'schedule': <crontab: 0 15 * * * (m/h/d/dM/MY)>,
8513 'task': 'backlink.tasks.periodically_get_subscription_info'},
8514 'periodically-populate-backlink-toxicity-data': {'schedule': <crontab: 0 * * * * (m/h/d/dM/MY)>,
8515 'task': 'backlink.tasks.periodically_populate_backlink_toxicity_data'}},
8516 'CELERY_BROKER_URL': 'redis://redis-backlinkapp-production-master:6379',
8517 'CELERY_RESULT_BACKEND': 'django-db',
8518 'CELERY_RESULT_SERIALIZER': 'json',
8519 'CELERY_TASK_SERIALIZER': 'json',
8520 'CELERY_TIMEZONE': 'UTC',
8521 'CH_CLUSTER_NAME': 'cluster',
8522 'CLICKHOUSE_WAREHOUSE_SETTINGS': {'cluster_name': 'cluster',
8523 'is_cluster': True,
8524 'url': 'clickhouse://backlink:<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="adcfcb94c8cc9d95ce959e9b9a9bc8cb9dcfce9a9a9998c99c9c9895cecc9999ccedcec1c4cec6c5c2d8dec880cfcccec6c1c4c3c683cec1c4cec6c5c2d8dec8">[email protected]</a>/backlink_data'},
8525 'CORE_APPS': ['backlink.apps.BacklinkConfig'],
8526 'CORS_ALLOW_CREDENTIALS': True,
8527 'CORS_ORIGIN_WHITELIST': ['https://dashboard.linkgraph.io',
8528 'http://localhost:3000'],
8529 'CSRF_COOKIE_AGE': 31449600,
8530 'CSRF_COOKIE_DOMAIN': None,
8531 'CSRF_COOKIE_HTTPONLY': False,
8532 'CSRF_COOKIE_NAME': 'csrftoken',
8533 'CSRF_COOKIE_PATH': '/',
8534 'CSRF_COOKIE_SAMESITE': 'Lax',
8535 'CSRF_COOKIE_SECURE': False,
8536 'CSRF_FAILURE_VIEW': 'django.views.csrf.csrf_failure',
8537 'CSRF_HEADER_NAME': 'HTTP_X_CSRFTOKEN',
8538 'CSRF_TRUSTED_ORIGINS': [],
8539 'CSRF_USE_SESSIONS': False,
8540 'DATABASES': {'default': {'ATOMIC_REQUESTS': False,
8541 'AUTOCOMMIT': True,
8542 'CONN_MAX_AGE': 0,
8543 'ENGINE': 'django.db.backends.postgresql',
8544 'HOST': 'domainprospector-prod-db.cloudsql-proxy',
8545 'NAME': 'backlinkapp_db',
8546 'OPTIONS': {},
8547 'PASSWORD': '********************',
8548 'PORT': '5432',
8549 'TEST': {'CHARSET': None,
8550 'COLLATION': None,
8551 'MIGRATE': True,
8552 'MIRROR': None,
8553 'NAME': None},
8554 'TIME_ZONE': None,
8555 'USER': 'backlinkapp'}},
8556 'DATABASE_ROUTERS': [],
8557 'DATA_UPLOAD_MAX_MEMORY_SIZE': 2621440,
8558 'DATA_UPLOAD_MAX_NUMBER_FIELDS': 1000,
8559 'DATETIME_FORMAT': 'N j, Y, P',
8560 'DATETIME_INPUT_FORMATS': ['%Y-%m-%d %H:%M:%S',
8561 '%Y-%m-%d %H:%M:%S.%f',
8562 '%Y-%m-%d %H:%M',
8563 '%m/%d/%Y %H:%M:%S',
8564 '%m/%d/%Y %H:%M:%S.%f',
8565 '%m/%d/%Y %H:%M',
8566 '%m/%d/%y %H:%M:%S',
8567 '%m/%d/%y %H:%M:%S.%f',
8568 '%m/%d/%y %H:%M'],
8569 'DATE_FORMAT': 'N j, Y',
8570 'DATE_INPUT_FORMATS': ['%Y-%m-%d',
8571 '%m/%d/%Y',
8572 '%m/%d/%y',
8573 '%b %d %Y',
8574 '%b %d, %Y',
8575 '%d %b %Y',
8576 '%d %b, %Y',
8577 '%B %d %Y',
8578 '%B %d, %Y',
8579 '%d %B %Y',
8580 '%d %B, %Y'],
8581 'DB_ENGINE': 'django.db.backends.postgresql',
8582 'DB_HOST': 'domainprospector-prod-db.cloudsql-proxy',
8583 'DB_NAME': 'backlinkapp_db',
8584 'DB_PORT': '5432',
8585 'DB_PW': '61gh25edt6',
8586 'DB_USER': 'backlinkapp',
8587 'DEBUG': 1,
8588 'DEBUG_PROPAGATE_EXCEPTIONS': False,
8589 'DEBUG_TOOLBAR_CONFIG': {'SHOW_TOOLBAR_CALLBACK': <function <lambda> at 0x7f837e23dd30>},
8590 'DECIMAL_SEPARATOR': '.',
8591 'DEFAULT_AUTO_FIELD': 'django.db.models.AutoField',
8592 'DEFAULT_CHARSET': 'utf-8',
8593 'DEFAULT_EXCEPTION_REPORTER': 'django.views.debug.ExceptionReporter',
8594 'DEFAULT_EXCEPTION_REPORTER_FILTER': 'django.views.debug.SafeExceptionReporterFilter',
8595 'DEFAULT_FILE_STORAGE': 'storages.backends.gcloud.GoogleCloudStorage',
8596 'DEFAULT_FROM_EMAIL': '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f28597909f9381869780b29e9d91939e9a9d8186">[email protected]</a>',
8597 'DEFAULT_HASHING_ALGORITHM': 'sha256',
8598 'DEFAULT_INDEX_TABLESPACE': '',
8599 'DEFAULT_TABLESPACE': '',
8600 'DISALLOWED_USER_AGENTS': [],
8601 'DJANGO_APPS': ['django.contrib.admin',
8602 'django.contrib.auth',
8603 'django.contrib.contenttypes',
8604 'django.contrib.sessions',
8605 'django.contrib.messages',
8606 'django.contrib.staticfiles',
8607 'django.contrib.humanize'],
8608 'EMAIL_BACKEND': 'django.core.mail.backends.smtp.EmailBackend',
8609 'EMAIL_HOST': 'localhost',
8610 'EMAIL_HOST_PASSWORD': '********************',
8611 'EMAIL_HOST_USER': '',
8612 'EMAIL_PORT': 25,
8613 'EMAIL_SSL_CERTFILE': None,
8614 'EMAIL_SSL_KEYFILE': '********************',
8615 'EMAIL_SUBJECT_PREFIX': '[Django] ',
8616 'EMAIL_TIMEOUT': None,
8617 'EMAIL_USE_LOCALTIME': False,
8618 'EMAIL_USE_SSL': False,
8619 'EMAIL_USE_TLS': False,
8620 'ENABLE_CELERY_PERIODIC_TASKS': 1,
8621 'ENV': 'PROD_',
8622 'FILE_UPLOAD_DIRECTORY_PERMISSIONS': None,
8623 'FILE_UPLOAD_HANDLERS': ['django.core.files.uploadhandler.MemoryFileUploadHandler',
8624 'django.core.files.uploadhandler.TemporaryFileUploadHandler'],
8625 'FILE_UPLOAD_MAX_MEMORY_SIZE': 2621440,
8626 'FILE_UPLOAD_PERMISSIONS': 420,
8627 'FILE_UPLOAD_TEMP_DIR': None,
8628 'FIRST_DAY_OF_WEEK': 0,
8629 'FIXTURE_DIRS': [],
8630 'FORCE_SCRIPT_NAME': None,
8631 'FORMAT_MODULE_PATH': None,
8632 'FORM_RENDERER': 'django.forms.renderers.DjangoTemplates',
8633 'GS_BUCKET_NAME': 'backlink-tool-screenshots',
8634 'GS_CREDENTIALS': <google.oauth2.service_account.Credentials object at 0x7f837e6c86a0>,
8635 'HOST': 'backlink.searchatlas.com',
8636 'IGNORABLE_404_URLS': [],
8637 'INSTALLED_APPS': ['django.contrib.admin',
8638 'django.contrib.auth',
8639 'django.contrib.contenttypes',
8640 'django.contrib.sessions',
8641 'django.contrib.messages',
8642 'django.contrib.staticfiles',
8643 'django.contrib.humanize',
8644 'backlink.apps.BacklinkConfig',
8645 'rest_framework',
8646 'rest_framework_api_key',
8647 'django_extensions',
8648 'django_celery_beat',
8649 'django_celery_results',
8650 'django_json_widget',
8651 'django_object_actions',
8652 'drf_yasg',
8653 'sslserver',
8654 'debug_toolbar'],
8655 'INTERNAL_IPS': ['127.0.0.1'],
8656 'LANGUAGES': [('af', 'Afrikaans'),
8657 ('ar', 'Arabic'),
8658 ('ar-dz', 'Algerian Arabic'),
8659 ('ast', 'Asturian'),
8660 ('az', 'Azerbaijani'),
8661 ('bg', 'Bulgarian'),
8662 ('be', 'Belarusian'),
8663 ('bn', 'Bengali'),
8664 ('br', 'Breton'),
8665 ('bs', 'Bosnian'),
8666 ('ca', 'Catalan'),
8667 ('cs', 'Czech'),
8668 ('cy', 'Welsh'),
8669 ('da', 'Danish'),
8670 ('de', 'German'),
8671 ('dsb', 'Lower Sorbian'),
8672 ('el', 'Greek'),
8673 ('en', 'English'),
8674 ('en-au', 'Australian English'),
8675 ('en-gb', 'British English'),
8676 ('eo', 'Esperanto'),
8677 ('es', 'Spanish'),
8678 ('es-ar', 'Argentinian Spanish'),
8679 ('es-co', 'Colombian Spanish'),
8680 ('es-mx', 'Mexican Spanish'),
8681 ('es-ni', 'Nicaraguan Spanish'),
8682 ('es-ve', 'Venezuelan Spanish'),
8683 ('et', 'Estonian'),
8684 ('eu', 'Basque'),
8685 ('fa', 'Persian'),
8686 ('fi', 'Finnish'),
8687 ('fr', 'French'),
8688 ('fy', 'Frisian'),
8689 ('ga', 'Irish'),
8690 ('gd', 'Scottish Gaelic'),
8691 ('gl', 'Galician'),
8692 ('he', 'Hebrew'),
8693 ('hi', 'Hindi'),
8694 ('hr', 'Croatian'),
8695 ('hsb', 'Upper Sorbian'),
8696 ('hu', 'Hungarian'),
8697 ('hy', 'Armenian'),
8698 ('ia', 'Interlingua'),
8699 ('id', 'Indonesian'),
8700 ('ig', 'Igbo'),
8701 ('io', 'Ido'),
8702 ('is', 'Icelandic'),
8703 ('it', 'Italian'),
8704 ('ja', 'Japanese'),
8705 ('ka', 'Georgian'),
8706 ('kab', 'Kabyle'),
8707 ('kk', 'Kazakh'),
8708 ('km', 'Khmer'),
8709 ('kn', 'Kannada'),
8710 ('ko', 'Korean'),
8711 ('ky', 'Kyrgyz'),
8712 ('lb', 'Luxembourgish'),
8713 ('lt', 'Lithuanian'),
8714 ('lv', 'Latvian'),
8715 ('mk', 'Macedonian'),
8716 ('ml', 'Malayalam'),
8717 ('mn', 'Mongolian'),
8718 ('mr', 'Marathi'),
8719 ('my', 'Burmese'),
8720 ('nb', 'Norwegian Bokmål'),
8721 ('ne', 'Nepali'),
8722 ('nl', 'Dutch'),
8723 ('nn', 'Norwegian Nynorsk'),
8724 ('os', 'Ossetic'),
8725 ('pa', 'Punjabi'),
8726 ('pl', 'Polish'),
8727 ('pt', 'Portuguese'),
8728 ('pt-br', 'Brazilian Portuguese'),
8729 ('ro', 'Romanian'),
8730 ('ru', 'Russian'),
8731 ('sk', 'Slovak'),
8732 ('sl', 'Slovenian'),
8733 ('sq', 'Albanian'),
8734 ('sr', 'Serbian'),
8735 ('sr-latn', 'Serbian Latin'),
8736 ('sv', 'Swedish'),
8737 ('sw', 'Swahili'),
8738 ('ta', 'Tamil'),
8739 ('te', 'Telugu'),
8740 ('tg', 'Tajik'),
8741 ('th', 'Thai'),
8742 ('tk', 'Turkmen'),
8743 ('tr', 'Turkish'),
8744 ('tt', 'Tatar'),
8745 ('udm', 'Udmurt'),
8746 ('uk', 'Ukrainian'),
8747 ('ur', 'Urdu'),
8748 ('uz', 'Uzbek'),
8749 ('vi', 'Vietnamese'),
8750 ('zh-hans', 'Simplified Chinese'),
8751 ('zh-hant', 'Traditional Chinese')],
8752 'LANGUAGES_BIDI': ['he', 'ar', 'ar-dz', 'fa', 'ur'],
8753 'LANGUAGE_CODE': 'en-us',
8754 'LANGUAGE_COOKIE_AGE': None,
8755 'LANGUAGE_COOKIE_DOMAIN': None,
8756 'LANGUAGE_COOKIE_HTTPONLY': False,
8757 'LANGUAGE_COOKIE_NAME': 'django_language',
8758 'LANGUAGE_COOKIE_PATH': '/',
8759 'LANGUAGE_COOKIE_SAMESITE': None,
8760 'LANGUAGE_COOKIE_SECURE': False,
8761 'LINKGRAPHIO_EMAIL_CONNECTION': {'host': 'email-smtp.us-east-1.amazonaws.com',
8762 'password': '********************',
8763 'port': 587,
8764 'sender': '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2b494a4840474245406b474245404c594a5b43054244">[email protected]</a>',
8765 'use_tls': True,
8766 'username': ''},
8767 'LOCALE_PATHS': [],
8768 'LOGGING': {'disable_existing_loggers': False,
8769 'formatters': {'timestamp': {'format': '{asctime} '
8770 '{levelname} '
8771 '{module} '
8772 '{message}',
8773 'style': '{'}},
8774 'handlers': {'console': {'class': 'logging.StreamHandler',
8775 'formatter': 'timestamp'}},
8776 'root': {'handlers': ['console'], 'level': 'DEBUG'},
8777 'version': 1},
8778 'LOGGING_CONFIG': 'logging.config.dictConfig',
8779 'LOGIN_REDIRECT_URL': '/accounts/profile/',
8780 'LOGIN_URL': '/accounts/login/',
8781 'LOGOUT_REDIRECT_URL': None,
8782 'MAIL_NOTIFICATIONS_ENABLED': False,
8783 'MANAGERS': [],
8784 'MEDIA_ROOT': '/usr/src/app/media',
8785 'MEDIA_URL': '/media/',
8786 'MESSAGE_STORAGE': 'django.contrib.messages.storage.fallback.FallbackStorage',
8787 'MIDDLEWARE': ['debug_toolbar.middleware.DebugToolbarMiddleware',
8788 'django.middleware.security.SecurityMiddleware',
8789 'django.contrib.sessions.middleware.SessionMiddleware',
8790 'corsheaders.middleware.CorsMiddleware',
8791 'django.middleware.common.CommonMiddleware',
8792 'django.middleware.csrf.CsrfViewMiddleware',
8793 'django.contrib.auth.middleware.AuthenticationMiddleware',
8794 'django.contrib.messages.middleware.MessageMiddleware',
8795 'django.middleware.clickjacking.XFrameOptionsMiddleware'],
8796 'MIGRATION_MODULES': {},
8797 'MONTH_DAY_FORMAT': 'F j',
8798 'NUMBER_GROUPING': 0,
8799 'PASSWORD_HASHERS': '********************',
8800 'PASSWORD_RESET_TIMEOUT': '********************',
8801 'PASSWORD_RESET_TIMEOUT_DAYS': '********************',
8802 'PREPEND_WWW': False,
8803 'REST_FRAMEWORK': {'DEFAULT_AUTHENTICATION_CLASSES': (),
8804 'DEFAULT_PERMISSION_CLASSES': (),
8805 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
8806 'STRICT_JSON': False},
8807 'ROOT_URLCONF': 'app.urls',
8808 'SECRET_KEY': '********************',
8809 'SECURE_BROWSER_XSS_FILTER': False,
8810 'SECURE_CONTENT_TYPE_NOSNIFF': True,
8811 'SECURE_HSTS_INCLUDE_SUBDOMAINS': False,
8812 'SECURE_HSTS_PRELOAD': False,
8813 'SECURE_HSTS_SECONDS': 0,
8814 'SECURE_PROXY_SSL_HEADER': ('HTTP_X_FORWARDED_PROTO', 'https'),
8815 'SECURE_REDIRECT_EXEMPT': [],
8816 'SECURE_REFERRER_POLICY': 'same-origin',
8817 'SECURE_SSL_HOST': None,
8818 'SECURE_SSL_REDIRECT': False,
8819 'SERVER_EMAIL': '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="75071a1a0135191a1614191d1a0601">[email protected]</a>',
8820 'SESSION_CACHE_ALIAS': 'default',
8821 'SESSION_COOKIE_AGE': 1209600,
8822 'SESSION_COOKIE_DOMAIN': None,
8823 'SESSION_COOKIE_HTTPONLY': True,
8824 'SESSION_COOKIE_NAME': 'sessionid',
8825 'SESSION_COOKIE_PATH': '/',
8826 'SESSION_COOKIE_SAMESITE': None,
8827 'SESSION_COOKIE_SECURE': False,
8828 'SESSION_ENGINE': 'django.contrib.sessions.backends.db',
8829 'SESSION_EXPIRE_AT_BROWSER_CLOSE': False,
8830 'SESSION_FILE_PATH': None,
8831 'SESSION_SAVE_EVERY_REQUEST': False,
8832 'SESSION_SERIALIZER': 'django.contrib.sessions.serializers.JSONSerializer',
8833 'SETTINGS_MODULE': 'app.settings',
8834 'SHORT_DATETIME_FORMAT': 'm/d/Y P',
8835 'SHORT_DATE_FORMAT': 'm/d/Y',
8836 'SIGNING_BACKEND': 'django.core.signing.TimestampSigner',
8837 'SILENCED_SYSTEM_CHECKS': [],
8838 'SIMPLE_JWT': {'ALGORITHM': 'HS256',
8839 'AUTH_HEADER_TYPES': ['Bearer'],
8840 'AUTH_TOKEN_CLASSES': '********************',
8841 'COOKIE_KEY': '********************',
8842 'QUERYPARAM_KEY': '********************',
8843 'SIGNING_KEY': '********************',
8844 'VERIFYING_KEY': '********************'},
8845 'SLACK_MIGHTYSCRIBES_API_TOKEN': '********************',
8846 'SLACK_MOONROCK_API_TOKEN': '********************',
8847 'SLACK_SEARCHATLAS_API_TOKEN': '********************',
8848 'SLACK_SEL_WEBHOOK': 'https://hooks.slack.com/services/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',
8849 'SLACK_WELLAUTHORED_API_TOKEN': '********************',
8850 'STATICFILES_DIRS': ('/usr/src/app/static/',),
8851 'STATICFILES_FINDERS': ('django.contrib.staticfiles.finders.FileSystemFinder',
8852 'django.contrib.staticfiles.finders.AppDirectoriesFinder'),
8853 'STATICFILES_STORAGE': 'django.contrib.staticfiles.storage.StaticFilesStorage',
8854 'STATIC_ROOT': '/usr/src/app/_static',
8855 'STATIC_SOURCE': '/usr/src/app/static/',
8856 'STATIC_URL': '/static/',
8857 'TEMPLATES': [{'APP_DIRS': True,
8858 'BACKEND': 'django.template.backends.django.DjangoTemplates',
8859 'DIRS': ['templates/'],
8860 'OPTIONS': {'context_processors': ['django.template.context_processors.debug',
8861 'django.template.context_processors.request',
8862 'django.contrib.auth.context_processors.auth',
8863 'django.contrib.messages.context_processors.messages']}}],
8864 'TEST_MODE': False,
8865 'TEST_NON_SERIALIZED_APPS': [],
8866 'TEST_RUNNER': 'backlink.tests.runner.LinkGraphTestRunner',
8867 'THIRD_PARTY_APPS': ['rest_framework',
8868 'rest_framework_api_key',
8869 'django_extensions',
8870 'django_celery_beat',
8871 'django_celery_results',
8872 'django_json_widget',
8873 'django_object_actions',
8874 'drf_yasg'],
8875 'THOUSAND_SEPARATOR': ',',
8876 'TIME_FORMAT': 'P',
8877 'TIME_INPUT_FORMATS': ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'],
8878 'TIME_ZONE': 'UTC',
8879 'TOXICITY_INPUT_BUCKET': 'backlink-toxicity-automl-tables-staging',
8880 'TOXICITY_MODEL_DISPLAY_NAME': 'backlink_toxicity_20210317080419',
8881 'TOXICITY_OUTPUT_BUCKET': 'backlink-toxicity-predictions',
8882 'TOXICITY_PROJECT': 'backlink-toxicity',
8883 'TOXICITY_REGION': 'us-central1',
8884 'TOXICITY_SERVICE_ACCOUNT': 'vendor/google/credentials/backlink-toxicity-ade825466bb8.json',
8885 'USE_I18N': True,
8886 'USE_L10N': True,
8887 'USE_PRODUCTION_DBS': 1,
8888 'USE_THOUSAND_SEPARATOR': False,
8889 'USE_TZ': True,
8890 'USE_X_FORWARDED_HOST': False,
8891 'USE_X_FORWARDED_PORT': False,
8892 'WSGI_APPLICATION': 'app.wsgi.application',
8893 'X_FRAME_OPTIONS': 'DENY',
8894 'YEAR_MONTH_FORMAT': 'F Y'},
8895 'sys_executable': '/usr/local/bin/python',
8896 'sys_path': ['/usr/src/app',
8897 '/usr/local/bin',
8898 '/usr/src/app',
8899 '/usr/local/lib/python38.zip',
8900 '/usr/local/lib/python3.8',
8901 '/usr/local/lib/python3.8/lib-dynload',
8902 '/usr/local/lib/python3.8/site-packages'],
8903 'sys_version_info': '3.8.9',
8904 'template_does_not_exist': False,
8905 'template_info': None,
8906 'unicode_hint': '',
8907 'user_str': '1'}</code>
8908 </details>
8909 </dd>
8910
8911
8912 </dl>
8913
8914
8915<h4>Context processors</h4>
8916
8917 <p>None</p>
8918
8919</div>
8920
8921 </div>
8922 </div>
8923
8924
8925
8926
8927
8928
8929 <div id="CachePanel" class="djdt-panelContent djdt-hidden">
8930 <div class="djDebugPanelTitle">
8931 <button type="button" class="djDebugClose">Ã</button>
8932 <h3>Cache calls from 1 backend</h3>
8933 </div>
8934 <div class="djDebugPanelContent">
8935
8936 <div class="djdt-scroll">
8937<h4>Summary</h4>
8938<table>
8939 <thead>
8940 <tr>
8941 <th>Total calls</th>
8942 <th>Total time</th>
8943 <th>Cache hits</th>
8944 <th>Cache misses</th>
8945 </tr>
8946 </thead>
8947 <tbody>
8948 <tr>
8949 <td>0</td>
8950 <td>0 ms</td>
8951 <td>0</td>
8952 <td>0</td>
8953 </tr>
8954 </tbody>
8955</table>
8956<h4>Commands</h4>
8957<table>
8958 <thead>
8959 <tr>
8960
8961 <th>add</th>
8962
8963 <th>get</th>
8964
8965 <th>set</th>
8966
8967 <th>touch</th>
8968
8969 <th>delete</th>
8970
8971 <th>clear</th>
8972
8973 <th>get_many</th>
8974
8975 <th>set_many</th>
8976
8977 <th>delete_many</th>
8978
8979 <th>has_key</th>
8980
8981 <th>incr</th>
8982
8983 <th>decr</th>
8984
8985 <th>incr_version</th>
8986
8987 <th>decr_version</th>
8988
8989 </tr>
8990 </thead>
8991 <tbody>
8992 <tr>
8993
8994 <td>0</td>
8995
8996 <td>0</td>
8997
8998 <td>0</td>
8999
9000 <td>0</td>
9001
9002 <td>0</td>
9003
9004 <td>0</td>
9005
9006 <td>0</td>
9007
9008 <td>0</td>
9009
9010 <td>0</td>
9011
9012 <td>0</td>
9013
9014 <td>0</td>
9015
9016 <td>0</td>
9017
9018 <td>0</td>
9019
9020 <td>0</td>
9021
9022 </tr>
9023 </tbody>
9024</table>
9025
9026</div>
9027
9028 </div>
9029 </div>
9030
9031
9032
9033
9034
9035
9036 <div id="SignalsPanel" class="djdt-panelContent djdt-hidden">
9037 <div class="djDebugPanelTitle">
9038 <button type="button" class="djDebugClose">Ã</button>
9039 <h3>Signals</h3>
9040 </div>
9041 <div class="djDebugPanelContent">
9042
9043 <div class="djdt-scroll">
9044<table>
9045 <thead>
9046 <tr>
9047 <th>Signal</th>
9048 <th>Receivers</th>
9049 </tr>
9050 </thead>
9051 <tbody>
9052
9053 <tr>
9054 <td>class_prepared</td>
9055 <td></td>
9056 </tr>
9057
9058 <tr>
9059 <td>connection_created</td>
9060 <td></td>
9061 </tr>
9062
9063 <tr>
9064 <td>got_request_exception</td>
9065 <td>_got_request_exception</td>
9066 </tr>
9067
9068 <tr>
9069 <td>m2m_changed</td>
9070 <td></td>
9071 </tr>
9072
9073 <tr>
9074 <td>post_delete</td>
9075 <td>ModelBase.update_changed, ModelBase.update_changed, ModelBase.update_changed</td>
9076 </tr>
9077
9078 <tr>
9079 <td>post_init</td>
9080 <td>ImageField.update_dimension_fields</td>
9081 </tr>
9082
9083 <tr>
9084 <td>post_migrate</td>
9085 <td>create_permissions, create_contenttypes</td>
9086 </tr>
9087
9088 <tr>
9089 <td>post_save</td>
9090 <td>ModelBase.update_changed, ModelBase.update_changed, ModelBase.update_changed, ModelBase.update_changed</td>
9091 </tr>
9092
9093 <tr>
9094 <td>pre_delete</td>
9095 <td>ModelBase.changed, ModelBase.update_changed</td>
9096 </tr>
9097
9098 <tr>
9099 <td>pre_init</td>
9100 <td></td>
9101 </tr>
9102
9103 <tr>
9104 <td>pre_migrate</td>
9105 <td>inject_rename_contenttypes_operations</td>
9106 </tr>
9107
9108 <tr>
9109 <td>pre_save</td>
9110 <td>ModelBase.changed</td>
9111 </tr>
9112
9113 <tr>
9114 <td>request_finished</td>
9115 <td>close_old_connections, close_caches, reset_urlconf</td>
9116 </tr>
9117
9118 <tr>
9119 <td>request_started</td>
9120 <td>reset_queries, close_old_connections</td>
9121 </tr>
9122
9123 <tr>
9124 <td>setting_changed</td>
9125 <td>reset_cache, reset_hashers, clear_cache_handlers, update_installed_apps, update_connections_time_zone, clear_routers_cache, reset_template_engines, clear_serializers_cache, language_changed, localize_settings_changed, file_storage_changed, complex_setting_changed, root_urlconf_changed, static_storage_changed, static_finders_changed, auth_password_validators_changed, user_model_swapped, reload_api_settings, reload_api_settings, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, FileSystemStorage._clear_cached_properties, StaticFilesStorage._clear_cached_properties</td>
9126 </tr>
9127
9128 </tbody>
9129</table>
9130</div>
9131
9132 </div>
9133 </div>
9134
9135
9136
9137
9138
9139
9140 <div id="LoggingPanel" class="djdt-panelContent djdt-hidden">
9141 <div class="djDebugPanelTitle">
9142 <button type="button" class="djDebugClose">Ã</button>
9143 <h3>Log messages</h3>
9144 </div>
9145 <div class="djDebugPanelContent">
9146
9147 <div class="djdt-scroll">
9148
9149 <table>
9150 <thead>
9151 <tr>
9152 <th>Level</th>
9153 <th>Time</th>
9154 <th>Channel</th>
9155 <th>Message</th>
9156 <th>Location</th>
9157 </tr>
9158 </thead>
9159 <tbody>
9160
9161 <tr>
9162 <td>DEBUG</td>
9163 <td>12:44:42 04/19/2021</td>
9164 <td>backlink.auth</td>
9165 <td>jwt_in_header has length: 409 <br>jwt_in_queryparams has length: 0jwt_in_cookie has length: 0</td>
9166 <td>/usr/src/app/backlink/auth.py:33</td>
9167 </tr>
9168
9169 <tr>
9170 <td>DEBUG</td>
9171 <td>12:44:42 04/19/2021</td>
9172 <td>backlink.auth</td>
9173 <td>JWT Token has length 409</td>
9174 <td>/usr/src/app/backlink/auth.py:42</td>
9175 </tr>
9176
9177 <tr>
9178 <td>DEBUG</td>
9179 <td>12:44:42 04/19/2021</td>
9180 <td>backlink.auth</td>
9181 <td>JWT Token decoded and validated.</td>
9182 <td>/usr/src/app/backlink/auth.py:45</td>
9183 </tr>
9184
9185 <tr>
9186 <td>DEBUG</td>
9187 <td>12:44:42 04/19/2021</td>
9188 <td>backlink.auth</td>
9189 <td>Bearer token added to cookie.</td>
9190 <td>/usr/src/app/backlink/auth.py:53</td>
9191 </tr>
9192
9193 <tr>
9194 <td>DEBUG</td>
9195 <td>12:44:42 04/19/2021</td>
9196 <td>backlink.auth</td>
9197 <td>JWT Authentication returned ExternalUser 1. Was Created: False</td>
9198 <td>/usr/src/app/backlink/auth.py:104</td>
9199 </tr>
9200
9201 <tr>
9202 <td>INFO</td>
9203 <td>12:44:42 04/19/2021</td>
9204 <td>backlink.api.v1.views</td>
9205 <td><QueryDict: {'websites': ['atcarlsbarbershop.com', 'floydsbarbershop.com', 'barbershopbags.com', 'parkersbarbershop.com', 'finleysbarbershop.com', 'barbershopbar.com', 'garrettsbarbershop.com', 'beardsleysbarbershop.com', 'barbershop.org', 'bensbarbershop.com']}></td>
9206 <td>/usr/src/app/backlink/api/v1/views.py:236</td>
9207 </tr>
9208
9209 <tr>
9210 <td>DEBUG</td>
9211 <td>12:44:42 04/19/2021</td>
9212 <td>utils.profiling</td>
9213 <td>(KeywordDifficultyAPI.get Stopwatch ) Started stopwatch.</td>
9214 <td>/usr/src/app/utils/profiling.py:46</td>
9215 </tr>
9216
9217 <tr>
9218 <td>DEBUG</td>
9219 <td>12:44:42 04/19/2021</td>
9220 <td>utils.profiling</td>
9221 <td>(KeywordDifficultyAPI.get Stopwatch ) Time Elapsed: 0.000135s Interval: GET WEBSITES</td>
9222 <td>/usr/src/app/utils/profiling.py:41</td>
9223 </tr>
9224
9225 <tr>
9226 <td>DEBUG</td>
9227 <td>12:44:42 04/19/2021</td>
9228 <td>utils.profiling</td>
9229 <td>(KeywordDifficultyAPI.get Stopwatch ) Time Elapsed: 0.000123s Interval: WEBSITES GET_OR_CREATE</td>
9230 <td>/usr/src/app/utils/profiling.py:41</td>
9231 </tr>
9232
9233 <tr>
9234 <td>DEBUG</td>
9235 <td>12:44:42 04/19/2021</td>
9236 <td>asyncio</td>
9237 <td>Using selector: EpollSelector</td>
9238 <td>/usr/local/lib/python3.8/asyncio/selector_events.py:59</td>
9239 </tr>
9240
9241 <tr>
9242 <td>DEBUG</td>
9243 <td>12:44:42 04/19/2021</td>
9244 <td>asyncio</td>
9245 <td>Close <_UnixSelectorEventLoop running=False closed=False debug=True></td>
9246 <td>/usr/local/lib/python3.8/asyncio/base_events.py:639</td>
9247 </tr>
9248
9249 <tr>
9250 <td>ERROR</td>
9251 <td>12:44:42 04/19/2021</td>
9252 <td>django.request</td>
9253 <td>Internal Server Error: /backlink/keyword-difficulty/</td>
9254 <td>/usr/local/lib/python3.8/site-packages/django/utils/log.py:224</td>
9255 </tr>
9256
9257 </tbody>
9258 </table>
9259
9260</div>
9261
9262 </div>
9263 </div>
9264
9265
9266
9267
9268
9269
9270
9271
9272
9273
9274
9275
9276
9277 <div id="djDebugWindow" class="djdt-panelContent djdt-hidden"></div>
9278</div>
9279<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script></body>
9280</html>