Merge pull request #26 from gutenbergtools/errors

404 error page, don't create sessions for 404's
diagnostics
eshellman 2019-08-02 12:01:09 -04:00 committed by GitHub
commit eccd3b5a18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 162 additions and 0 deletions

View File

@ -42,6 +42,7 @@ import QRCodePage
import diagnostics
import Sitemap
import Formatters
from errors import ErrorPage
import Timer
@ -51,6 +52,14 @@ install_dir = os.path.dirname(os.path.abspath(__file__))
CHERRYPY_CONFIG = os.path.join(install_dir, 'CherryPy.conf')
LOCAL_CONFIG = [os.path.expanduser('~/.autocat3'), '/etc/autocat3.conf']
def error_page_404(status, message, traceback, version):
resp = ErrorPage(status, message).index()
# signal that we needn't save the session
cherrypy.session.loaded = False
return resp
class MyRoutesDispatcher(cherrypy.dispatch.RoutesDispatcher):
""" Dispatcher that tells us the matched route.
@ -157,6 +166,8 @@ def main():
cherrypy.config['all_hosts'] = (
cherrypy.config['host'], cherrypy.config['host_mobile'], cherrypy.config['file_host'])
cherrypy.config.update({'error_page.404': error_page_404})
if hasattr(cherrypy.engine, 'signal_handler'):
cherrypy.engine.signal_handler.subscribe()

15
errors.py Executable file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env python
# -*- mode: python; indent-tabs-mode: nil; -*- coding: utf-8 -*-
import cherrypy
from BaseSearcher import OpenSearch
from Page import Page
import Formatters
class ErrorPage(Page):
def __init__(self, status=500, message='undefined error'):
self.message = message
self.status = status
def index(self):
return Formatters.formatters['html'].render('error', self)

136
templates/error.html Normal file
View File

@ -0,0 +1,136 @@
<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:py="http://genshi.edgewall.org/"
xmlns:i18n="http://genshi.edgewall.org/i18n"
xmlns:og="http://opengraphprotocol.org/schema/"
xmlns:fb="http://www.facebook.com/2008/fbml"
py:strip="">
<head>
<style type="text/css">
.icon { background: transparent url(/pics/sprite.png?${cherrypy.config['css_mtime']}) 0 0 no-repeat; }
</style>
<link rel="stylesheet" type="text/css"
href="/css/pg-desktop-one.css?${cherrypy.config['css_mtime']}" />
<script type="text/javascript">//<![CDATA[
//<![CDATA[
var json_search = "/ebooks/suggest/";
var mobile_url = "//m.gutenberg.org/ebooks.mobile/";
var canonical_url = "https://www.gutenberg.org/ebooks/";
var lang = "en";
var fb_lang = "en_US"; /* FB accepts only xx_XX */
var msg_load_more = "Load More Results…";
var page_mode = "screen";
var dialog_title = "";
var dialog_message = "";
//]]></script>
<script type="text/javascript"
src="/js/pg-desktop-one.js?${cherrypy.config['js_mtime']}" />
<link rel="shortcut icon" href="/pics/favicon" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<!--! plain old metadata -->
<meta name="title" content="${os.message}" />
<title>${os.message}</title>
</head>
<body>
<div id="mw-head-dummy" class="noprint" />
<div id="content" i18n:comment="On the page of results of a search.">
<div class="header">
<h1>${os.message}</h1>
</div>
<div class="body">
</div>
</div>
<div id="fb-root" />
<div id="print-head" class="noscreen">
<div class="center">Project Gutenberg offers thousands of free ebooks to download.</div>
</div>
<div id="screen-head" class="noprint">
<table>
<tr i18n:comment="The logo, tagline and badges at the very top of every page.">
<td rowspan="2" id="logo" i18n:comment="The PG logo at the top left of every page.">
<a href="/wiki/Main_Page" title="Go to the Main Page.">
<span class="icon icon_logo" />
</a>
</td>
<td id="tagline-badges" colspan="2">
<table>
<tr>
<td id="tagline">Project Gutenberg offers thousands of free ebooks to download.</td>
</tr>
</table>
</td>
</tr>
<tr id="menubar-search">
<td id="menubar" i18n:comment="The menu bar at the top of every page.">
<a id="menubar-first"
tabindex="11" accesskey="1"
title="Start a new search."
href="/ebooks/">Search</a>
<a tabindex="22"
title="Our latest releases."
href="/ebooks/search/?sort_order=release_date">Latest</a>
<a tabindex="31"
title="Read the Project Gutenberg terms of use."
href="/terms_of_use/">Terms of Use</a>
<a tabindex="32"
href="/wiki/Gutenberg:Project_Gutenberg_Needs_Your_Donation"
title="Learn why we need some money.">Donate?</a>
</td>
<td id="search" i18n:comment="The search box at the top right of every page.">
<form method="get" action="/ebooks/search/"
enctype="multipart/form-data">
<table class="borderless">
<tr>
<td id="search-button-cell">
<button id="search-button" type="submit" title="Execute the search. &lt;enter&gt;">
<span class="icon icon_smsearch" />
</button>
</td>
<td id="search-input-cell">
<input id="search-input" name="query" type="text" title="Search Project Gutenberg. &lt;s&gt;"
accesskey="s" value="" />
</td>
<td id="help-button-cell">
<button id="help-button" type="button" title="Open the help menu. &lt;h&gt;"
accesskey="h">Help</button>
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
<div id="helpbox" class="hide">
<xi:include href="help.html" />
</div>
</div>
</body>
</html>