launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #22743
Re: [Merge] lp:~wgrant/launchpad/suspend-bot-account into lp:launchpad
Review: Approve
Diff comments:
> === 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')
I guess this was copied from CreateBotAccountScript; there's no such default here.
Do we know that the IS integration will find it convenient to supply an email address, or should we have an alternative --username option?
> +
> + 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
It's 2018.
> +# 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)
--
https://code.launchpad.net/~wgrant/launchpad/suspend-bot-account/+merge/349392
Your team Launchpad code reviewers is subscribed to branch lp:launchpad.
References