--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/candolint/handlers.py Mon Jul 04 17:37:55 2016 +0800
+from __future__ import absolute_import, division
+from peewee import DoesNotExist
+from tornado.escape import json_decode
+from tornado.web import HTTPError, RequestHandler
+from tornado.web import ErrorHandler as BaseErrorHandler
+from candolint.models import database, Project, Change, Check
+def get_or_404(query, *args, **kwargs):
+ return query.get(*args, **kwargs)
+def get_project_or_404(domain, user, name):
+ pq = Project.select().where(
+ Project.domain == domain,
+ Project.user == (user if user != '-' else None),
+class BaseHandler(RequestHandler):
+ super(BaseHandler, self).prepare()
+ if not database.is_closed():
+ def write_error(self, status_code, **kwargs):
+ 'message': self._reason,
+ if 'exc_info' in kwargs:
+ if self.settings.get('serve_traceback'):
+ fexc = traceback.format_exception(*kwargs['exc_info'])
+ data['debug_message'] = '\n'.join(fexc)
+ self.render('404.html', **data)
+ self.render('500.html', **data)
+class IndexHandler(BaseHandler):
+ .select(Check, Project, Change)
+ .group_by(Check.project))
+ self.render('index.html', checks=checks)
+class ProjectHandler(BaseHandler):
+ def get(self, domain, user, name):
+ project = get_project_or_404(domain, user, name)
+ .where(Check.project == project)
+ self.render('project.html', project=project, checks=checks)
+class CheckHandler(BaseHandler):
+ def get(self, domain, user, name, check_num, format_='html'):
+ project = get_project_or_404(domain, user, name)
+ if check_num == 'latest':
+ check = get_or_404(Check, project=project)
+ check = get_or_404(Check, project=project, ordinal=check_num)
+ lines = json_decode(check.lines)
+ self.set_header('Content-Type', 'text/plain; charset=utf-8')
+ self.write(line['text'])
+ self.render('check.html', project=project, check=check, lines=lines)
+class StatusHandler(BaseHandler):
+ def get(self, domain, user, name):
+ project = get_project_or_404(domain, user, name)
+ check = get_or_404(Check, project=project)
+ parts = [('#555', 30, 14.5, 'lint')]
+ parts.append(('#777', 62, 30.5, 'unknown'))
+ elif check.errors or check.warnings:
+ msg = self.locale.translate('{} error', '{} errors', check.errors)
+ text = msg.format(check.errors)
+ width = 7 + 6 * len(text) + 7
+ parts.append(('#da314b', width, width // 2 - 0.5, text))
+ msg = self.locale.translate('{} warning', '{} warnings', check.warnings)
+ text = msg.format(check.warnings)
+ width = 7 + 6 * len(text) + 9
+ parts.append(('#faa732', width, width // 2 + 0.5, text))
+ parts.append(('#8cc14c', 40, 19.5, 'none'))
+ width = sum(p[1] for p in parts)
+ self.set_header('Content-Type', 'image/svg+xml; charset=utf-8')
+ self.render('status.svg', width=width, parts=parts, height=20)
+class ErrorHandler(BaseHandler, BaseErrorHandler):
--- a/tests/test_viewer.py Mon Jul 04 17:12:56 2016 +0800
+++ b/tests/test_viewer.py Mon Jul 04 17:37:55 2016 +0800
from tornado.web import HTTPError
from tornado.testing import AsyncHTTPTestCase
+from candolint.handlers import get_project_or_404
from candolint.models import database, Project, Change, Check
-from viewer import get_project_or_404, CandolintViewer
+from viewer import CandolintViewer
--- a/viewer.py Mon Jul 04 17:12:56 2016 +0800
+++ b/viewer.py Mon Jul 04 17:37:55 2016 +0800
-from __future__ import absolute_import, division
+from __future__ import absolute_import
-from peewee import DoesNotExist
-from tornado.escape import json_decode
from tornado.ioloop import IOLoop
from tornado.options import define, options
-from tornado.web import Application, HTTPError, RequestHandler, URLSpec
-from tornado.web import ErrorHandler as BaseErrorHandler
+from tornado.web import Application, URLSpec
from candolint import uimodules
-from candolint.models import database, Project, Change, Check
+from candolint.handlers import IndexHandler, ProjectHandler, CheckHandler, StatusHandler, ErrorHandler
+from candolint.models import database
rel = lambda *x: os.path.abspath(os.path.join(os.path.dirname(__file__), *x))
define('debug', metavar='True|False', default=False, type=bool)
-def get_or_404(query, *args, **kwargs):
- return query.get(*args, **kwargs)
-def get_project_or_404(domain, user, name):
- pq = Project.select().where(
- Project.domain == domain,
- Project.user == (user if user != '-' else None),
-class BaseHandler(RequestHandler):
- super(BaseHandler, self).prepare()
- if not database.is_closed():
- def write_error(self, status_code, **kwargs):
- 'message': self._reason,
- if 'exc_info' in kwargs:
- if self.settings.get('serve_traceback'):
- fexc = traceback.format_exception(*kwargs['exc_info'])
- data['debug_message'] = '\n'.join(fexc)
- self.render('404.html', **data)
- self.render('500.html', **data)
-class IndexHandler(BaseHandler):
- .select(Check, Project, Change)
- .group_by(Check.project))
- self.render('index.html', checks=checks)
-class ProjectHandler(BaseHandler):
- def get(self, domain, user, name):
- project = get_project_or_404(domain, user, name)
- .where(Check.project == project)
- self.render('project.html', project=project, checks=checks)
-class CheckHandler(BaseHandler):
- def get(self, domain, user, name, check_num, format_='html'):
- project = get_project_or_404(domain, user, name)
- if check_num == 'latest':
- check = get_or_404(Check, project=project)
- check = get_or_404(Check, project=project, ordinal=check_num)
- lines = json_decode(check.lines)
- self.set_header('Content-Type', 'text/plain; charset=utf-8')
- self.write(line['text'])
- self.render('check.html', project=project, check=check, lines=lines)
-class StatusHandler(BaseHandler):
- def get(self, domain, user, name):
- project = get_project_or_404(domain, user, name)
- check = get_or_404(Check, project=project)
- parts = [('#555', 30, 14.5, 'lint')]
- parts.append(('#777', 62, 30.5, 'unknown'))
- elif check.errors or check.warnings:
- msg = self.locale.translate('{} error', '{} errors', check.errors)
- text = msg.format(check.errors)
- width = 7 + 6 * len(text) + 7
- parts.append(('#da314b', width, width // 2 - 0.5, text))
- msg = self.locale.translate('{} warning', '{} warnings', check.warnings)
- text = msg.format(check.warnings)
- width = 7 + 6 * len(text) + 9
- parts.append(('#faa732', width, width // 2 + 0.5, text))
- parts.append(('#8cc14c', 40, 19.5, 'none'))
- width = sum(p[1] for p in parts)
- self.set_header('Content-Type', 'image/svg+xml; charset=utf-8')
- self.render('status.svg', width=width, parts=parts, height=20)
-class ErrorHandler(BaseHandler, BaseErrorHandler):
class CandolintViewer(Application):