launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #22740
[Merge] lp:~wgrant/launchpad/suspend-bot-account into lp:launchpad
William Grant has proposed merging lp:~wgrant/launchpad/suspend-bot-account into lp:launchpad.
Commit message:
Add a suspend-bot-account.py script to suspend an account by email address.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~wgrant/launchpad/suspend-bot-account/+merge/349392
--
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~wgrant/launchpad/suspend-bot-account into lp:launchpad.
=== added file 'lib/lp/registry/scripts/suspendbotaccount.py'
--- lib/lp/registry/scripts/suspendbotaccount.py 1970-01-01 00:00:00 +0000
+++ lib/lp/registry/scripts/suspendbotaccount.py 2018-07-12 06:15:20 +0000
@@ -0,0 +1,44 @@
+# Copyright 2018 Canonical Ltd. This software is licensed under the
+# GNU Affero General Public License version 3 (see the file LICENSE).
+
+"""Suspend a bot account."""
+
+from zope.component import getUtility
+
+from lp.registry.interfaces.person import IPersonSet
+from lp.services.identity.interfaces.account import AccountStatus
+from lp.services.scripts.base import (
+ LaunchpadScript,
+ LaunchpadScriptFailure,
+ )
+from lp.services.webapp import canonical_url
+
+
+class SuspendBotAccountScript(LaunchpadScript):
+
+ description = "Suspend a bot account."
+ output = None
+
+ def add_my_options(self):
+ self.parser.add_option(
+ '-e', '--email', metavar='ADDR', action='store',
+ type='string', dest='email', default='',
+ help='Email address. Defaults to webops+username@xxxxxxxxxxxxx')
+
+ def main(self):
+ emailaddress = unicode(self.options.email)
+ if not emailaddress:
+ raise LaunchpadScriptFailure('--email is required')
+
+ person = getUtility(IPersonSet).getByEmail(emailaddress)
+ if person is None:
+ raise LaunchpadScriptFailure(
+ 'Account with email address {} does not exist'.format(
+ emailaddress))
+
+ person.account.setStatus(
+ AccountStatus.SUSPENDED, None,
+ 'Suspended by suspend-bot-account.py')
+
+ self.logger.info('Suspended {}'.format(canonical_url(person)))
+ self.txn.commit()
=== added file 'lib/lp/registry/scripts/tests/test_suspendbotaccount.py'
--- lib/lp/registry/scripts/tests/test_suspendbotaccount.py 1970-01-01 00:00:00 +0000
+++ lib/lp/registry/scripts/tests/test_suspendbotaccount.py 2018-07-12 06:15:20 +0000
@@ -0,0 +1,33 @@
+# Copyright 2017 Canonical Ltd. This software is licensed under the
+# GNU Affero General Public License version 3 (see the file LICENSE).
+
+"""Test the suspend-bot-account script."""
+
+__metaclass__ = type
+
+from lp.registry.scripts.suspendbotaccount import SuspendBotAccountScript
+from lp.services.identity.interfaces.account import AccountStatus
+from lp.services.log.logger import DevNullLogger
+from lp.testing import TestCaseWithFactory
+from lp.testing.faketransaction import FakeTransaction
+from lp.testing.layers import ZopelessDatabaseLayer
+
+
+class TestSuspendBotAccount(TestCaseWithFactory):
+ """Test `suspend-bot-account`."""
+
+ layer = ZopelessDatabaseLayer
+
+ def makeScript(self, test_args):
+ script = SuspendBotAccountScript(test_args=test_args)
+ script.logger = DevNullLogger()
+ script.txn = FakeTransaction()
+ return script
+
+ def test_suspendbotaccount(self):
+ bot = self.factory.makePerson(email='webops+bot@xxxxxxxxxxxxx')
+ script = self.makeScript(['--email', 'webops+bot@xxxxxxxxxxxxx'])
+ script.main()
+ self.assertEqual(AccountStatus.SUSPENDED, bot.account_status)
+
+ self.assertEqual(1, script.txn.commit_count)
=== added file 'scripts/suspend-bot-account.py'
--- scripts/suspend-bot-account.py 1970-01-01 00:00:00 +0000
+++ scripts/suspend-bot-account.py 2018-07-12 06:15:20 +0000
@@ -0,0 +1,13 @@
+#!/usr/bin/python -S
+#
+# Copyright 2018 Canonical Ltd. This software is licensed under the
+# GNU Affero General Public License version 3 (see the file LICENSE).
+
+import _pythonpath
+
+from lp.registry.scripts.createbotaccount import SuspendBotAccountScript
+
+
+if __name__ == '__main__':
+ script = SuspendBotAccountScript('suspend-bot-account', dbuser='launchpad')
+ script.run()
Follow ups