]>
Commit | Line | Data |
---|---|---|
9137135a MT |
1 | #!/usr/bin/python |
2 | ||
f6e6ff79 MT |
3 | import pakfire |
4 | ||
5 | import datetime | |
9137135a | 6 | import httplib |
f6e6ff79 | 7 | import pytz |
9137135a MT |
8 | import time |
9 | import tornado.locale | |
10 | import tornado.web | |
f6e6ff79 | 11 | import traceback |
9137135a | 12 | |
2c909128 | 13 | from .. import misc |
d2738057 | 14 | from ..decorators import * |
9137135a MT |
15 | |
16 | class 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 |