mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	management: Move all_users option to ZulipBaseCommand.
This commit is contained in:
		@@ -2,6 +2,8 @@
 | 
			
		||||
from __future__ import absolute_import
 | 
			
		||||
from __future__ import print_function
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
from argparse import ArgumentParser
 | 
			
		||||
from django.core.exceptions import MultipleObjectsReturned
 | 
			
		||||
from django.core.management.base import BaseCommand, CommandError
 | 
			
		||||
@@ -31,8 +33,8 @@ You can use the command list_realms to find ID of the realms in this server."""
 | 
			
		||||
            type=str,
 | 
			
		||||
            help=help)
 | 
			
		||||
 | 
			
		||||
    def add_user_list_args(self, parser, required=False, help=None):
 | 
			
		||||
        # type: (ArgumentParser, bool, Optional[str]) -> None
 | 
			
		||||
    def add_user_list_args(self, parser, required=False, help=None, all_users_arg=True, all_users_help=None):
 | 
			
		||||
        # type: (ArgumentParser, bool, Optional[str], bool, Optional[str]) -> None
 | 
			
		||||
        if help is None:
 | 
			
		||||
            help = 'A comma-separated list of email addresses.'
 | 
			
		||||
 | 
			
		||||
@@ -43,6 +45,17 @@ You can use the command list_realms to find ID of the realms in this server."""
 | 
			
		||||
            type=str,
 | 
			
		||||
            help=help)
 | 
			
		||||
 | 
			
		||||
        if all_users_arg:
 | 
			
		||||
            if all_users_help is None:
 | 
			
		||||
                all_users_help = "All users in realm."
 | 
			
		||||
 | 
			
		||||
            parser.add_argument(
 | 
			
		||||
                '-a', '--all-users',
 | 
			
		||||
                dest='all_users',
 | 
			
		||||
                action="store_true",
 | 
			
		||||
                default=False,
 | 
			
		||||
                help=all_users_help)
 | 
			
		||||
 | 
			
		||||
    def get_realm(self, options):
 | 
			
		||||
        # type: (Dict[str, Any]) -> Optional[Realm]
 | 
			
		||||
        val = options["realm_id"]
 | 
			
		||||
@@ -62,6 +75,19 @@ You can use the command list_realms to find ID of the realms in this server."""
 | 
			
		||||
 | 
			
		||||
    def get_users(self, options, realm):
 | 
			
		||||
        # type: (Dict[str, Any], Optional[Realm]) -> List[UserProfile]
 | 
			
		||||
        if "all_users" in options:
 | 
			
		||||
            all_users = options["all_users"]
 | 
			
		||||
 | 
			
		||||
            # User should pass either user list or all_users flag
 | 
			
		||||
            if bool(options["users"]) == all_users:
 | 
			
		||||
                raise CommandError("You can't use both -u/--users and -a/--all-users.")
 | 
			
		||||
 | 
			
		||||
            if all_users and realm is None:
 | 
			
		||||
                raise CommandError("The --all-users option requires a realm; please pass --realm.")
 | 
			
		||||
 | 
			
		||||
            if all_users:
 | 
			
		||||
                return UserProfile.objects.filter(realm=realm)
 | 
			
		||||
 | 
			
		||||
        if options["users"] is None:
 | 
			
		||||
            return []
 | 
			
		||||
        emails = set([email.strip() for email in options["users"].split(",")])
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ class Command(ZulipBaseCommand):
 | 
			
		||||
    def add_arguments(self, parser):
 | 
			
		||||
        # type: (CommandParser) -> None
 | 
			
		||||
        self.add_realm_args(parser, True)
 | 
			
		||||
        self.add_user_list_args(parser)
 | 
			
		||||
        self.add_user_list_args(parser, all_users_help="Add all users in realm to these streams.")
 | 
			
		||||
 | 
			
		||||
        parser.add_argument(
 | 
			
		||||
            '-s', '--streams',
 | 
			
		||||
@@ -24,28 +24,12 @@ class Command(ZulipBaseCommand):
 | 
			
		||||
            required=True,
 | 
			
		||||
            help='A comma-separated list of stream names.')
 | 
			
		||||
 | 
			
		||||
        parser.add_argument(
 | 
			
		||||
            '-a', '--all-users',
 | 
			
		||||
            dest='all_users',
 | 
			
		||||
            action="store_true",
 | 
			
		||||
            default=False,
 | 
			
		||||
            help='Add all users in this realm to these streams.')
 | 
			
		||||
 | 
			
		||||
    def handle(self, **options):
 | 
			
		||||
        # type: (**Any) -> None
 | 
			
		||||
        realm = self.get_realm(options)
 | 
			
		||||
        user_profiles = self.get_users(options, realm)
 | 
			
		||||
 | 
			
		||||
        if bool(user_profiles) == options["all_users"]:
 | 
			
		||||
            self.print_help("./manage.py", "add_users_to_streams")
 | 
			
		||||
            exit(1)
 | 
			
		||||
 | 
			
		||||
        stream_names = set([stream.strip() for stream in options["streams"].split(",")])
 | 
			
		||||
 | 
			
		||||
        # If all_users flag is passed user list should not be passed and vice versa.
 | 
			
		||||
        if options["all_users"]:
 | 
			
		||||
            user_profiles = UserProfile.objects.filter(realm=realm)
 | 
			
		||||
 | 
			
		||||
        for stream_name in set(stream_names):
 | 
			
		||||
            for user_profile in user_profiles:
 | 
			
		||||
                stream, _ = create_stream_if_needed(realm, stream_name)
 | 
			
		||||
 
 | 
			
		||||
@@ -20,30 +20,16 @@ class Command(ZulipBaseCommand):
 | 
			
		||||
                            type=str,
 | 
			
		||||
                            help='A stream name.')
 | 
			
		||||
 | 
			
		||||
        parser.add_argument('-a', '--all-users',
 | 
			
		||||
                            dest='all_users',
 | 
			
		||||
                            action="store_true",
 | 
			
		||||
                            default=False,
 | 
			
		||||
                            help='Remove all users in this realm from this stream.')
 | 
			
		||||
 | 
			
		||||
        self.add_realm_args(parser, True)
 | 
			
		||||
        self.add_user_list_args(parser)
 | 
			
		||||
        self.add_user_list_args(parser, all_users_help='Remove all users in realm from this stream.')
 | 
			
		||||
 | 
			
		||||
    def handle(self, **options):
 | 
			
		||||
        # type: (**Any) -> None
 | 
			
		||||
        realm = self.get_realm(options)
 | 
			
		||||
        user_profiles = self.get_users(options, realm)
 | 
			
		||||
 | 
			
		||||
        if bool(user_profiles) == options["all_users"]:
 | 
			
		||||
            self.print_help("./manage.py", "remove_users_from_stream")
 | 
			
		||||
            exit(1)
 | 
			
		||||
 | 
			
		||||
        stream_name = options["stream"].strip()
 | 
			
		||||
        stream = get_stream(stream_name, realm)
 | 
			
		||||
 | 
			
		||||
        if options["all_users"]:
 | 
			
		||||
            user_profiles = UserProfile.objects.filter(realm=realm)
 | 
			
		||||
 | 
			
		||||
        result = bulk_remove_subscriptions(user_profiles, [stream])
 | 
			
		||||
        not_subscribed = result[1]
 | 
			
		||||
        not_subscribed_users = {tup[0] for tup in not_subscribed}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,8 @@ class Command(ZulipBaseCommand):
 | 
			
		||||
                                 "If you pass 'realm' will send to everyone on realm."
 | 
			
		||||
                                 "Don't forget to specify the realm using -r or --realm flag.")
 | 
			
		||||
        self.add_user_list_args(parser,
 | 
			
		||||
                                help="Email addresses of user(s) to send password reset emails to.")
 | 
			
		||||
                                help="Email addresses of user(s) to send password reset emails to.",
 | 
			
		||||
                                all_users_arg=False)
 | 
			
		||||
        self.add_realm_args(parser)
 | 
			
		||||
 | 
			
		||||
    def handle(self, *args, **options):
 | 
			
		||||
@@ -33,9 +34,14 @@ class Command(ZulipBaseCommand):
 | 
			
		||||
 | 
			
		||||
        if bool(users) == bool(options["target"]):
 | 
			
		||||
            self.print_help("./manage.py", "send_password_reset_email")
 | 
			
		||||
            print(self.style.ERROR("Please pass either --target or --users."))
 | 
			
		||||
            exit(1)
 | 
			
		||||
 | 
			
		||||
        if options["target"] == "realm":
 | 
			
		||||
            if realm is None:
 | 
			
		||||
                self.print_help("./manage.py", "send_password_reset_email")
 | 
			
		||||
                print(self.style.ERROR("Please pass the realm."))
 | 
			
		||||
                exit(1)
 | 
			
		||||
            users = UserProfile.objects.filter(realm=realm, is_active=True, is_bot=False,
 | 
			
		||||
                                               is_mirror_dummy=False)
 | 
			
		||||
        elif options["target"] == "server":
 | 
			
		||||
 
 | 
			
		||||
@@ -18,29 +18,13 @@ class Command(ZulipBaseCommand):
 | 
			
		||||
 | 
			
		||||
        self.add_user_list_args(parser,
 | 
			
		||||
                                help='Turn off digests for this comma-separated '
 | 
			
		||||
                                     'list of email addresses.')
 | 
			
		||||
 | 
			
		||||
        parser.add_argument('-a', '--all-users',
 | 
			
		||||
                            dest='all_users',
 | 
			
		||||
                            action="store_true",
 | 
			
		||||
                            default=False,
 | 
			
		||||
                            help="Turn off digests for everyone in a realm. "
 | 
			
		||||
                                 "Don't forget to specify the realm.")
 | 
			
		||||
                                     'list of email addresses.',
 | 
			
		||||
                                all_users_help="Turn off digests for everyone in realm.")
 | 
			
		||||
 | 
			
		||||
    def handle(self, **options):
 | 
			
		||||
        # type: (**str) -> None
 | 
			
		||||
        realm = self.get_realm(options)
 | 
			
		||||
        user_profiles = self.get_users(options, realm)
 | 
			
		||||
        all_users = options["all_users"]
 | 
			
		||||
 | 
			
		||||
        # If all_users flag is passed user list should not be passed and vice versa.
 | 
			
		||||
        # If all_users flag is passed it is manadatory to pass the realm.
 | 
			
		||||
        if (bool(user_profiles) == all_users) or (all_users and not realm):
 | 
			
		||||
            self.print_help("./manage.py", "turn_off_digests")
 | 
			
		||||
            exit(1)
 | 
			
		||||
 | 
			
		||||
        if all_users:
 | 
			
		||||
            user_profiles = UserProfile.objects.filter(realm=realm)
 | 
			
		||||
 | 
			
		||||
        print("Turned off digest emails for:")
 | 
			
		||||
        for user_profile in user_profiles:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user