]>
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 | |
14d7ed77 | 13 | from .. import __version__ |
2c909128 | 14 | from .. import misc |
d2738057 | 15 | from ..decorators import * |
9137135a MT |
16 | |
17 | class BaseHandler(tornado.web.RequestHandler): | |
c6c94528 MT |
18 | @property |
19 | def backend(self): | |
20 | return self.application.backend | |
21 | ||
22 | @property | |
23 | def db(self): | |
24 | return self.backend.db | |
25 | ||
d2738057 MT |
26 | @lazy_property |
27 | def session(self): | |
28 | # Get the session from the cookie | |
29 | session_id = self.get_cookie("session_id", None) | |
f6e6ff79 | 30 | |
d2738057 MT |
31 | # Search for a valid database session |
32 | if session_id: | |
33 | session = self.backend.sessions.get(session_id) | |
f6e6ff79 | 34 | |
d2738057 MT |
35 | # Found a valid session |
36 | if session: | |
37 | return session | |
9137135a | 38 | |
d2738057 MT |
39 | def get_current_user(self): |
40 | if self.session: | |
41 | return self.session.impersonated_user or self.session.user | |
bdeb3c62 | 42 | |
9137135a | 43 | def get_user_locale(self): |
9137135a MT |
44 | # Get the locale from the user settings. |
45 | if self.current_user and self.current_user.locale: | |
46 | locale = tornado.locale.get(self.current_user.locale) | |
214463e3 | 47 | if locale: |
9137135a MT |
48 | return locale |
49 | ||
214463e3 MT |
50 | # If no locale was provided, we take what ever the browser requested. |
51 | return self.get_browser_locale() | |
9137135a | 52 | |
f6e6ff79 | 53 | @property |
12d79e59 | 54 | def current_address(self): |
f6e6ff79 MT |
55 | """ |
56 | Returns the IP address the request came from. | |
57 | """ | |
371a879e | 58 | return self.request.headers.get("X-Real-IP") or self.request.remote_ip |
f6e6ff79 | 59 | |
61c74986 MT |
60 | @property |
61 | def user_agent(self): | |
62 | """ | |
63 | Returns the HTTP user agent | |
64 | """ | |
65 | return self.request.headers.get("User-Agent", None) | |
66 | ||
f6e6ff79 MT |
67 | @property |
68 | def timezone(self): | |
69 | if self.current_user: | |
70 | return self.current_user.timezone | |
71 | ||
72 | return pytz.utc | |
73 | ||
74 | def format_date(self, date, relative=True, shorter=False, | |
75 | full_format=False): | |
76 | # XXX not very precise but working for now. | |
77 | gmt_offset = self.timezone.utcoffset(date).total_seconds() / -60 | |
78 | ||
79 | return self.locale.format_date(date, gmt_offset=gmt_offset, | |
80 | relative=relative, shorter=shorter, full_format=full_format) | |
81 | ||
8fa68307 MT |
82 | def get_template_namespace(self): |
83 | ns = tornado.web.RequestHandler.get_template_namespace(self) | |
84 | ||
85 | ns.update({ | |
f6e6ff79 MT |
86 | "bugtracker" : self.pakfire.bugzilla, |
87 | "hostname" : self.request.host, | |
88 | "format_date" : self.format_date, | |
2c909128 MT |
89 | "format_size" : misc.format_size, |
90 | "friendly_time" : misc.friendly_time, | |
91 | "format_email" : misc.format_email, | |
92 | "format_filemode" : misc.format_filemode, | |
f6e6ff79 | 93 | "lang" : self.locale.code[:2], |
d2738057 | 94 | "session" : self.session, |
14d7ed77 | 95 | "version" : __version__, |
f6e6ff79 | 96 | "year" : time.strftime("%Y"), |
8fa68307 | 97 | }) |
9137135a | 98 | |
8fa68307 | 99 | return ns |
9137135a | 100 | |
f6e6ff79 | 101 | def get_error_html(self, status_code, exception=None, **kwargs): |
ae4c835a | 102 | error_document = "errors/error.html" |
f6e6ff79 MT |
103 | |
104 | kwargs.update({ | |
105 | "code" : status_code, | |
106 | "message" : httplib.responses[status_code], | |
107 | }) | |
108 | ||
ae4c835a MT |
109 | if status_code in (400, 403, 404): |
110 | error_document = "errors/error-%s.html" % status_code | |
f6e6ff79 MT |
111 | |
112 | # Collect more information about the exception if possible. | |
113 | if exception: | |
114 | exception = traceback.format_exc() | |
115 | ||
116 | return self.render_string(error_document, exception=exception, **kwargs) | |
9137135a MT |
117 | |
118 | @property | |
119 | def pakfire(self): | |
c6c94528 | 120 | return self.backend |
9137135a | 121 | |
f6e6ff79 MT |
122 | @property |
123 | def mirrors(self): | |
1104bcbf | 124 | return self.pakfire.mirrors |