]> git.ipfire.org Git - people/jschlag/pbs.git/blame - src/web/handlers_base.py
web: More code cleanup
[people/jschlag/pbs.git] / src / web / handlers_base.py
CommitLineData
9137135a
MT
1#!/usr/bin/python
2
f6e6ff79
MT
3import pakfire
4
5import datetime
9137135a 6import httplib
f6e6ff79 7import pytz
9137135a
MT
8import time
9import tornado.locale
10import tornado.web
f6e6ff79 11import traceback
9137135a 12
2c909128 13from .. import misc
d2738057 14from ..decorators import *
9137135a
MT
15
16class BaseHandler(tornado.web.RequestHandler):
f6e6ff79
MT
17 @property
18 def cache(self):
19 return self.pakfire.cache
20
d2738057
MT
21 @lazy_property
22 def session(self):
23 # Get the session from the cookie
24 session_id = self.get_cookie("session_id", None)
f6e6ff79 25
d2738057
MT
26 # Search for a valid database session
27 if session_id:
28 session = self.backend.sessions.get(session_id)
f6e6ff79 29
d2738057
MT
30 # Found a valid session
31 if session:
32 return session
9137135a 33
d2738057
MT
34 def get_current_user(self):
35 if self.session:
36 return self.session.impersonated_user or self.session.user
bdeb3c62 37
9137135a 38 def get_user_locale(self):
9137135a
MT
39 # Get the locale from the user settings.
40 if self.current_user and self.current_user.locale:
41 locale = tornado.locale.get(self.current_user.locale)
214463e3 42 if locale:
9137135a
MT
43 return locale
44
214463e3
MT
45 # If no locale was provided, we take what ever the browser requested.
46 return self.get_browser_locale()
9137135a 47
f6e6ff79
MT
48 @property
49 def remote_address(self):
50 """
51 Returns the IP address the request came from.
52 """
53 remote_ips = self.request.remote_ip.split(", ")
54
55 return remote_ips[-1]
56
57 @property
58 def timezone(self):
59 if self.current_user:
60 return self.current_user.timezone
61
62 return pytz.utc
63
64 def format_date(self, date, relative=True, shorter=False,
65 full_format=False):
66 # XXX not very precise but working for now.
67 gmt_offset = self.timezone.utcoffset(date).total_seconds() / -60
68
69 return self.locale.format_date(date, gmt_offset=gmt_offset,
70 relative=relative, shorter=shorter, full_format=full_format)
71
9137135a
MT
72 @property
73 def render_args(self):
d2738057 74 return {
f6e6ff79
MT
75 "bugtracker" : self.pakfire.bugzilla,
76 "hostname" : self.request.host,
77 "format_date" : self.format_date,
2c909128
MT
78 "format_size" : misc.format_size,
79 "friendly_time" : misc.friendly_time,
80 "format_email" : misc.format_email,
81 "format_filemode" : misc.format_filemode,
f6e6ff79
MT
82 "lang" : self.locale.code[:2],
83 "pakfire_version" : pakfire.__version__,
d2738057 84 "session" : self.session,
f6e6ff79 85 "year" : time.strftime("%Y"),
9137135a
MT
86 }
87
88 def render(self, *args, **kwargs):
89 kwargs.update(self.render_args)
90 tornado.web.RequestHandler.render(self, *args, **kwargs)
91
92 def render_string(self, *args, **kwargs):
93 kwargs.update(self.render_args)
94 return tornado.web.RequestHandler.render_string(self, *args, **kwargs)
95
f6e6ff79 96 def get_error_html(self, status_code, exception=None, **kwargs):
ae4c835a 97 error_document = "errors/error.html"
f6e6ff79
MT
98
99 kwargs.update({
100 "code" : status_code,
101 "message" : httplib.responses[status_code],
102 })
103
ae4c835a
MT
104 if status_code in (400, 403, 404):
105 error_document = "errors/error-%s.html" % status_code
f6e6ff79
MT
106
107 # Collect more information about the exception if possible.
108 if exception:
109 exception = traceback.format_exc()
110
111 return self.render_string(error_document, exception=exception, **kwargs)
9137135a
MT
112
113 @property
114 def pakfire(self):
4b9167ef 115 return self.application.backend
9137135a 116
f6e6ff79
MT
117 @property
118 def arches(self):
119 return self.pakfire.arches
120
121 @property
122 def mirrors(self):
123 return self.pakfire.mirrors
124
125 @property
126 def public(self):
127 """
128 Indicates what level of public/non-public things a user
129 may see.
130 """
131 if self.current_user and self.current_user.is_admin():
132 public = None
133 else:
134 public = True
135
136 return public