summaryrefslogtreecommitdiffstats
path: root/askbot/management/commands/add_admin.py
blob: 6f7c70344f34f5ef9f96a86761e015795ab537a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from django.core.management.base import NoArgsCommand
from django.contrib.auth.models import User
from django.db.models.signals import pre_save, post_save
import sys

class Command(NoArgsCommand):
    def get_user(self, uid_str):
        try:
            uid = int(uid_str)
            return User.objects.get(id=uid)
        except User.DoesNotExist:
            print 'sorry there is no user with id=%d' % uid
            sys.exit(1)
        except ValueError:
            print 'user id must be integer, have %s' % uid_str
            sys.exit(1)

    def parse_arguments(self, arguments):
        if len(arguments) != 1:
            print 'argument for this command id <user_id>'
            sys.exit(1)
        self.user = self.get_user(arguments[0])

    def confirm_action(self):
        u = self.user
        print ''
        prompt = 'Do you really wish to make user (id=%d, name=%s) a site administrator? yes/no: ' \
                % (u.id, u.username)
        str = raw_input(prompt)
        if str != 'yes':
            print 'action canceled'
            sys.exit(1)

    def remove_signals(self):
        pre_save.receivers = []
        post_save.receivers = []

    def handle(self, *arguments, **options):
        #destroy pre_save and post_save signals
        self.parse_arguments(arguments)
        self.confirm_action()
        self.remove_signals()

        self.user.set_admin_status()
        self.user.save()