Mercurial > p > roundup > code
diff roundup/actions.py @ 4083:bbab97f8ffb2
XMLRPC improvements:
* Add support for actions to XMLRPC interface.
* Provide bridge so user actions may be executed
either via CGI or XMLRPC.
* Adjust XMLRPC tests to recent work.
* Cleanup.
| author | Stefan Seefeld <stefan@seefeld.name> |
|---|---|
| date | Fri, 27 Feb 2009 17:46:47 +0000 |
| parents | |
| children | d499c3499d18 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/roundup/actions.py Fri Feb 27 17:46:47 2009 +0000 @@ -0,0 +1,68 @@ +# +# Copyright (C) 2009 Stefan Seefeld +# All rights reserved. +# For license terms see the file COPYING.txt. +# + +from roundup.exceptions import * +from roundup import hyperdb +from roundup.i18n import _ + +class Action: + def __init__(self, db, translator): + self.db = db + self.translator = translator + + def handle(self, *args): + """Action handler procedure""" + raise NotImplementedError + + def execute(self, *args): + """Execute the action specified by this object.""" + + self.permission(*args) + return self.handle(*args) + + + def permission(self, *args): + """Check whether the user has permission to execute this action. + + If not, raise Unauthorised.""" + + pass + + + def gettext(self, msgid): + """Return the localized translation of msgid""" + return self.translator.gettext(msgid) + + + _ = gettext + + +class Retire(Action): + + def handle(self, designator): + + classname, itemid = hyperdb.splitDesignator(designator) + + # make sure we don't try to retire admin or anonymous + if (classname == 'user' and + self.db.user.get(itemid, 'username') in ('admin', 'anonymous')): + raise ValueError, self._( + 'You may not retire the admin or anonymous user') + + # do the retire + self.db.getclass(classname).retire(itemid) + self.db.commit() + + + def permission(self, designator): + + classname, itemid = hyperdb.splitDesignator(designator) + + if not self.db.security.hasPermission('Edit', self.db.getuid(), + classname=classname, itemid=itemid): + raise Unauthorised(self._('You do not have permission to ' + '%(action)s the %(classname)s class.')%info) +
