]>
Commit | Line | Data |
---|---|---|
f6e6ff79 MT |
1 | #!/usr/bin/python |
2 | ||
3 | import os | |
4 | ||
2c909128 | 5 | from . import base |
f6e6ff79 MT |
6 | |
7 | _ = lambda x: x | |
8 | ||
9 | class LogEntry(base.Object): | |
10 | type = None | |
f6e6ff79 MT |
11 | |
12 | def __init__(self, pakfire, data): | |
13 | base.Object.__init__(self, pakfire) | |
14 | ||
15 | self.data = data | |
16 | ||
17 | self._user = None | |
18 | ||
19 | def __cmp__(self, other): | |
20 | return cmp(other.time, self.time) | |
21 | ||
22 | @property | |
23 | def time(self): | |
24 | return self.data.time | |
25 | ||
26 | def get_user(self): | |
2d077f67 MT |
27 | user_id = getattr(self.data, "user_id", None) |
28 | ||
29 | if user_id is None: | |
30 | return | |
31 | ||
32 | return self.pakfire.users.get_by_id(self.data.user_id) | |
f6e6ff79 MT |
33 | |
34 | @property | |
35 | def user(self): | |
36 | if self._user is None: | |
37 | self._user = self.get_user() | |
38 | ||
39 | return self._user | |
40 | ||
41 | def get_title(self, user=None): | |
42 | return None | |
43 | ||
44 | def get_message(self, user=None): | |
45 | raise NotImplementedError | |
46 | ||
47 | def get_footer(self, user=None): | |
48 | return None | |
49 | ||
50 | ||
fd681905 MT |
51 | class CreatedLogEntry(LogEntry): |
52 | type = "created" | |
53 | ||
54 | @property | |
55 | def build(self): | |
56 | return self.data | |
57 | ||
58 | @property | |
59 | def time(self): | |
60 | return self.build.created | |
61 | ||
62 | def get_user(self): | |
63 | if self.build.type == "scratch": | |
64 | return self.build.owner | |
65 | ||
66 | def get_message(self, user=None): | |
67 | return _("Build has been created") | |
68 | ||
69 | ||
f6e6ff79 MT |
70 | class CommentLogEntry(LogEntry): |
71 | type = "comment" | |
f6e6ff79 MT |
72 | |
73 | @property | |
74 | def time(self): | |
75 | return self.data.time_created | |
76 | ||
77 | @property | |
d31d17af MT |
78 | def score(self): |
79 | return self.data.score | |
f6e6ff79 | 80 | |
62c7e7cd MT |
81 | @property |
82 | def build_id(self): | |
83 | return self.data.build_id | |
84 | ||
85 | @property | |
86 | def build(self): | |
87 | return self.pakfire.builds.get_by_id(self.build_id) | |
88 | ||
f6e6ff79 MT |
89 | @property |
90 | def vote(self): | |
d31d17af | 91 | if self.score > 0: |
f6e6ff79 | 92 | return "up" |
d31d17af | 93 | elif self.score < 0: |
f6e6ff79 MT |
94 | return "down" |
95 | ||
96 | return "none" | |
97 | ||
f6e6ff79 MT |
98 | def get_message(self, user=None): |
99 | return self.data.text | |
100 | ||
101 | ||
102 | class RepositoryLogEntry(LogEntry): | |
103 | type = "repo" | |
104 | ||
105 | def get_message(self, user=None): | |
106 | msg = _("Unknown action.") | |
107 | ||
108 | # See if we have done the action by ourself. | |
109 | you = self.user == user | |
110 | ||
111 | args = {} | |
112 | ||
113 | # Add information about the user. | |
114 | if self.user: | |
115 | args["user"] = self.user.realname | |
116 | else: | |
117 | args["user"] = _("Unknown") | |
118 | ||
119 | # Add information about the repositories. | |
120 | if self.data.from_repo_id: | |
121 | repo = self.pakfire.repos.get_by_id(self.data.from_repo_id) | |
122 | args["from_repo"] = repo.name | |
123 | else: | |
124 | args["from_repo"] = _("N/A") | |
125 | ||
126 | if self.data.to_repo_id: | |
127 | repo = self.pakfire.repos.get_by_id(self.data.to_repo_id) | |
128 | args["to_repo"] = repo.name | |
129 | else: | |
130 | args["to_repo"] = _("N/A") | |
131 | ||
132 | action = self.data.action | |
133 | ||
134 | if action == "added": | |
135 | if not self.user: | |
136 | msg = _("This build was pushed to the repository '%(to_repo)s'.") | |
137 | elif you: | |
138 | msg = _("You pushed this build to the repository '%(to_repo)s'.") | |
139 | else: | |
140 | msg = _("%(user)s pushed this build to the repository '%(to_repo)s'.") | |
141 | ||
142 | elif action == "removed": | |
143 | if not self.user: | |
144 | msg = _("This build was unpushed from the repository '%(from_repo)s'.") | |
145 | elif you: | |
146 | msg = _("You unpushed this build from the repository '%(from_repo)s'.") | |
147 | else: | |
148 | msg = _("%(user)s unpushed this build from the repository '%(from_repo)s'.") | |
149 | ||
150 | elif action == "moved": | |
151 | if not self.user: | |
152 | msg = _("This build was pushed from the repository '%(from_repo)s' to '%(to_repo)s'.") | |
153 | elif you: | |
154 | msg = _("You pushed this build from the repository '%(from_repo)s' to '%(to_repo)s'.") | |
155 | else: | |
156 | msg = _("%(user)s pushed this build from the repository '%(from_repo)s' to '%(to_repo)s'.") | |
157 | ||
158 | return msg % args | |
159 | ||
160 | ||
161 | class BuilderLogEntry(LogEntry): | |
162 | type = "builder" | |
163 | ||
164 | def get_builder(self): | |
165 | assert self.data.builder_id | |
166 | ||
167 | return self.pakfire.builders.get_by_id(self.data.builder_id) | |
168 | ||
169 | def get_message(self, user=None): | |
170 | msg = _("Unknown action.") | |
171 | ||
172 | # See if we have done the action by ourself. | |
173 | you = self.user == user | |
174 | ||
175 | builder = self.get_builder() | |
176 | assert builder | |
177 | ||
178 | args = { | |
179 | "builder" : builder.hostname, | |
180 | } | |
181 | ||
182 | # Add information about the user. | |
183 | if self.user: | |
184 | args["user"] = self.user.realname | |
185 | else: | |
186 | args["user"] = _("Unknown") | |
187 | ||
188 | action = self.data.action | |
189 | ||
190 | if action == "enabled": | |
191 | if not self.user: | |
192 | msg = _("Builder '%(builder)s' has been enabled.") | |
193 | elif you: | |
194 | msg = _("You enabled builder '%(builder)s'.") | |
195 | else: | |
196 | msg = _("%(user)s enabled builder '%(builder)s'.") | |
197 | ||
198 | elif action == "disabled": | |
199 | if not self.user: | |
f57ee674 | 200 | msg = _("Builder '%(builder)s' has been disabled.") |
f6e6ff79 MT |
201 | elif you: |
202 | msg = _("You disabled builder '%(builder)s'.") | |
203 | else: | |
204 | msg = _("%(user)s disabled builder '%(builder)s'.") | |
205 | ||
206 | elif action == "deleted": | |
207 | if you: | |
208 | msg = _("You deleted builder '%(builder)s'.") | |
209 | else: | |
210 | msg = _("%(user)s deleted builder '%(builder)s'.") | |
211 | ||
212 | elif action == "created": | |
213 | if you: | |
214 | msg = _("You created builder '%(builder)s'.") | |
215 | else: | |
216 | msg = _("%(user)s created builder '%(builder)s'.") | |
217 | ||
218 | return msg % args | |
219 | ||
220 | ||
221 | class JobLogEntry(LogEntry): | |
222 | type = "job" | |
223 | ||
224 | def get_job(self): | |
225 | assert self.data.job_id | |
226 | ||
227 | return self.pakfire.jobs.get_by_id(self.data.job_id) | |
228 | ||
229 | def get_message(self, user=None): | |
230 | msg = _("Unknown action.") | |
231 | ||
232 | # See if we have done the action by ourself. | |
233 | you = self.user == user | |
234 | ||
235 | job = self.get_job() | |
236 | assert job | |
237 | ||
238 | args = { | |
239 | "job" : job.name, | |
240 | "state" : self.data.state, | |
241 | } | |
242 | ||
243 | # Add information about the user. | |
244 | if self.user: | |
245 | args["user"] = self.user.realname | |
246 | else: | |
247 | args["user"] = _("Unknown") | |
248 | ||
249 | action = self.data.action | |
250 | ||
251 | if action == "created": | |
252 | if not self.user: | |
253 | msg = _("Job '%(job)s' has been created.") | |
254 | elif you: | |
255 | msg = _("You created job '%(job)s'.") | |
256 | else: | |
257 | msg = _("%(user)s created job '%(job)s'.") | |
258 | ||
259 | elif action == "state_change": | |
260 | if not self.user: | |
261 | msg = _("Job '%(job)s' has changed its state to: %(state)s.") | |
262 | elif you: | |
263 | msg = _("You changed the state of job '%(job)s' to: %(state)s.") | |
264 | else: | |
265 | msg = _("%(user)s changed the state of job '%(job)s' to: %(state)s.") | |
266 | ||
267 | elif action == "reset": | |
268 | if not self.user: | |
269 | msg = _("Job '%(job)s' has been reset.") | |
270 | elif you: | |
271 | msg = _("You reset job '%(job)s'.") | |
272 | else: | |
273 | msg = _("%(user)s has reset job '%(job)s'.") | |
274 | ||
275 | elif action == "schedule_rebuild": | |
276 | if not self.user: | |
277 | msg = _("Job '%(job)s' has been scheduled for rebuild.") | |
278 | elif you: | |
279 | msg = _("You scheduled job '%(job)s' for rebuild.") | |
280 | else: | |
281 | msg = _("%(user)s scheduled job '%(job)s' for rebuild.") | |
282 | ||
283 | elif action == "schedule_test_job": | |
284 | # XXX add link to the test job | |
285 | ||
286 | if not self.user: | |
287 | msg = _("A test job for '%(job)s' has been scheduled.") | |
288 | elif you: | |
289 | msg = _("You scheduled a test job for '%(job)s'.") | |
290 | else: | |
291 | msg = _("%(user)s scheduled a test job for '%(job)s'.") | |
292 | ||
293 | return msg % args | |
294 | ||
295 | ||
296 | class MirrorLogEntry(LogEntry): | |
297 | type = "mirror" | |
298 | ||
f6e6ff79 MT |
299 | def get_mirror(self): |
300 | assert self.data.mirror_id | |
301 | ||
302 | return self.pakfire.mirrors.get_by_id(self.data.mirror_id) | |
303 | ||
304 | def get_message(self, user=None): | |
305 | msg = _("Unknown action.") | |
306 | ||
307 | # See if we have done the action by ourself. | |
308 | you = self.user == user | |
309 | ||
310 | mirror = self.get_mirror() | |
311 | assert mirror | |
312 | ||
313 | args = { | |
314 | "mirror" : mirror.hostname, | |
315 | } | |
316 | ||
317 | # Add information about the user. | |
318 | if self.user: | |
319 | args["user"] = self.user.realname | |
320 | else: | |
321 | args["user"] = _("Unknown") | |
322 | ||
323 | action = self.data.action | |
324 | ||
325 | if action == "enabled": | |
326 | if not self.user: | |
327 | msg = _("Mirror '%(mirror)s' has been enabled.") | |
328 | elif you: | |
329 | msg = _("You enabled mirror '%(mirror)s'.") | |
330 | else: | |
331 | msg = _("%(user)s enabled mirror '%(mirror)s'.") | |
332 | ||
333 | elif action == "disabled": | |
334 | if not self.user: | |
335 | msg = _("Mirror '%(mirror)s' has been disabled.") | |
336 | elif you: | |
337 | msg = _("You disabled mirror '%(mirror)s'.") | |
338 | else: | |
339 | msg = _("%(user)s disabled mirror '%(mirror)s'.") | |
340 | ||
341 | elif action == "deleted": | |
342 | if you: | |
343 | msg = _("You deleted mirror '%(mirror)s'.") | |
344 | else: | |
345 | msg = _("%(user)s deleted mirror '%(mirror)s'.") | |
346 | ||
347 | elif action == "created": | |
348 | if you: | |
349 | msg = _("You created mirror '%(mirror)s'.") | |
350 | else: | |
351 | msg = _("%(user)s created mirror '%(mirror)s'.") | |
352 | ||
353 | return msg % args | |
354 | ||
355 | ||
356 | class LogFile(base.Object): | |
357 | def __init__(self, pakfire, id): | |
358 | base.Object.__init__(self, pakfire) | |
359 | ||
360 | # Save the ID of the item. | |
361 | self.id = id | |
362 | ||
363 | # Cache. | |
364 | self._data = None | |
365 | self._job = None | |
366 | ||
367 | @property | |
368 | def data(self): | |
369 | if self._data is None: | |
370 | self._data = self.db.get("SELECT * FROM logfiles WHERE id = %s", self.id) | |
371 | assert self._data | |
372 | ||
373 | return self._data | |
374 | ||
375 | @property | |
376 | def name(self): | |
377 | return os.path.basename(self.path) | |
378 | ||
379 | @property | |
380 | def path(self): | |
381 | return self.data.path | |
382 | ||
383 | @property | |
384 | def job(self): | |
385 | if self._job is None: | |
386 | self._job = self.pakfire.jobs.get_by_id(self.data.job_id) | |
387 | assert self._job | |
388 | ||
389 | return self._job | |
390 | ||
391 | @property | |
392 | def build(self): | |
393 | return self.job.build | |
394 | ||
395 | @property | |
396 | def download_url(self): | |
397 | return "/".join((self.build.download_prefix, self.path)) | |
398 | ||
399 | @property | |
400 | def filesize(self): | |
401 | return self.data.filesize |