Code

PGP support is again working (pyme API has changed significantly) and we
[roundup.git] / roundup / actions.py
1 #
2 # Copyright (C) 2009 Stefan Seefeld
3 # All rights reserved.
4 # For license terms see the file COPYING.txt.
5 #
7 from roundup.exceptions import *
8 from roundup import hyperdb
9 from roundup.i18n import _
11 class Action:
12     def __init__(self, db, translator):
13         self.db = db
14         self.translator = translator
16     def handle(self, *args):
17         """Action handler procedure"""
18         raise NotImplementedError
20     def execute(self, *args):
21         """Execute the action specified by this object."""
23         self.permission(*args)
24         return self.handle(*args)
27     def permission(self, *args):
28         """Check whether the user has permission to execute this action.
30         If not, raise Unauthorised."""
32         pass
35     def gettext(self, msgid):
36         """Return the localized translation of msgid"""
37         return self.translator.gettext(msgid)
40     _ = gettext
43 class Retire(Action):
45     def handle(self, designator):
47         classname, itemid = hyperdb.splitDesignator(designator)
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'))
55         # do the retire
56         self.db.getclass(classname).retire(itemid)
57         self.db.commit()
60     def permission(self, designator):
62         classname, itemid = hyperdb.splitDesignator(designator)
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