Premiere version : mise en route du suivi.
[auf_roundup.git] / roundup / .svn / text-base / actions.py.svn-base
1 #
2 # Copyright (C) 2009 Stefan Seefeld
3 # All rights reserved.
4 # For license terms see the file COPYING.txt.
5 #
6
7 from roundup.exceptions import *
8 from roundup import hyperdb
9 from roundup.i18n import _
10
11 class Action:
12     def __init__(self, db, translator):
13         self.db = db
14         self.translator = translator
15
16     def handle(self, *args):
17         """Action handler procedure"""
18         raise NotImplementedError
19
20     def execute(self, *args):
21         """Execute the action specified by this object."""
22
23         self.permission(*args)
24         return self.handle(*args)
25
26
27     def permission(self, *args):
28         """Check whether the user has permission to execute this action.
29
30         If not, raise Unauthorised."""
31
32         pass
33
34
35     def gettext(self, msgid):
36         """Return the localized translation of msgid"""
37         return self.translator.gettext(msgid)
38
39
40     _ = gettext
41
42
43 class Retire(Action):
44
45     def handle(self, designator):
46
47         classname, itemid = hyperdb.splitDesignator(designator)
48
49         # make sure we don't try to retire admin or anonymous
50         if (classname == 'user' and
51             self.db.user.get(itemid, 'username') in ('admin', 'anonymous')):
52             raise ValueError(self._(
53                 'You may not retire the admin or anonymous user'))
54
55         # do the retire
56         self.db.getclass(classname).retire(itemid)
57         self.db.commit()
58
59
60     def permission(self, designator):
61
62         classname, itemid = hyperdb.splitDesignator(designator)
63
64         if not self.db.security.hasPermission('Edit', self.db.getuid(),
65                                               classname=classname, itemid=itemid):
66             raise Unauthorised(self._('You do not have permission to '
67                                       'retire the %(classname)s class.')%classname)
68