Revision 5ce3ce4f snf-astakos-app/astakos/im/management/commands/user_update.py

b/snf-astakos-app/astakos/im/management/commands/user_update.py
42 42
from astakos.im.endpoints.aquarium.producer import report_user_credits_event
43 43
from ._common import remove_user_permission, add_user_permission
44 44

  
45

  
45 46
class Command(BaseCommand):
46 47
    args = "<user ID>"
47 48
    help = "Modify a user's attributes"
48
    
49

  
49 50
    option_list = BaseCommand.option_list + (
50 51
        make_option('--invitations',
51
            dest='invitations',
52
            metavar='NUM',
53
            help="Update user's invitations"),
52
                    dest='invitations',
53
                    metavar='NUM',
54
                    help="Update user's invitations"),
54 55
        make_option('--level',
55
            dest='level',
56
            metavar='NUM',
57
            help="Update user's level"),
56
                    dest='level',
57
                    metavar='NUM',
58
                    help="Update user's level"),
58 59
        make_option('--password',
59
            dest='password',
60
            metavar='PASSWORD',
61
            help="Set user's password"),
60
                    dest='password',
61
                    metavar='PASSWORD',
62
                    help="Set user's password"),
62 63
        make_option('--provider',
63
            dest='provider',
64
            metavar='PROVIDER',
65
            help="Set user's provider"),
64
                    dest='provider',
65
                    metavar='PROVIDER',
66
                    help="Set user's provider"),
66 67
        make_option('--renew-token',
67
            action='store_true',
68
            dest='renew_token',
69
            default=False,
70
            help="Renew the user's token"),
68
                    action='store_true',
69
                    dest='renew_token',
70
                    default=False,
71
                    help="Renew the user's token"),
71 72
        make_option('--renew-password',
72
            action='store_true',
73
            dest='renew_password',
74
            default=False,
75
            help="Renew the user's password"),
73
                    action='store_true',
74
                    dest='renew_password',
75
                    default=False,
76
                    help="Renew the user's password"),
76 77
        make_option('--set-admin',
77
            action='store_true',
78
            dest='admin',
79
            default=False,
80
            help="Give user admin rights"),
78
                    action='store_true',
79
                    dest='admin',
80
                    default=False,
81
                    help="Give user admin rights"),
81 82
        make_option('--set-noadmin',
82
            action='store_true',
83
            dest='noadmin',
84
            default=False,
85
            help="Revoke user's admin rights"),
83
                    action='store_true',
84
                    dest='noadmin',
85
                    default=False,
86
                    help="Revoke user's admin rights"),
86 87
        make_option('--set-active',
87
            action='store_true',
88
            dest='active',
89
            default=False,
90
            help="Change user's state to inactive"),
88
                    action='store_true',
89
                    dest='active',
90
                    default=False,
91
                    help="Change user's state to inactive"),
91 92
        make_option('--set-inactive',
92
            action='store_true',
93
            dest='inactive',
94
            default=False,
95
            help="Change user's state to inactive"),
93
                    action='store_true',
94
                    dest='inactive',
95
                    default=False,
96
                    help="Change user's state to inactive"),
96 97
        make_option('--add-group',
97
            dest='add-group',
98
            help="Add user group"),
98
                    dest='add-group',
99
                    help="Add user group"),
99 100
        make_option('--delete-group',
100
            dest='delete-group',
101
            help="Delete user group"),
101
                    dest='delete-group',
102
                    help="Delete user group"),
102 103
        make_option('--add-permission',
103
            dest='add-permission',
104
            help="Add user permission"),
104
                    dest='add-permission',
105
                    help="Add user permission"),
105 106
        make_option('--delete-permission',
106
            dest='delete-permission',
107
            help="Delete user permission"),
107
                    dest='delete-permission',
108
                    help="Delete user permission"),
108 109
        make_option('--refill-credits',
109
            action='store_true',
110
            dest='refill',
111
            default=False,
112
            help="Refill user credits"),
113
        )
114
    
110
                    action='store_true',
111
                    dest='refill',
112
                    default=False,
113
                    help="Refill user credits"),
114
    )
115

  
115 116
    def handle(self, *args, **options):
116 117
        if len(args) != 1:
117 118
            raise CommandError("Please provide a user ID")
118
        
119

  
119 120
        if args[0].isdigit():
120
            user = AstakosUser.objects.get(id=int( args[0]))
121
            user = AstakosUser.objects.get(id=int(args[0]))
121 122
        else:
122 123
            raise CommandError("Invalid ID")
123
        
124

  
124 125
        if not user:
125 126
            raise CommandError("Unknown user")
126
        
127

  
127 128
        if options.get('admin'):
128 129
            user.is_superuser = True
129 130
        elif options.get('noadmin'):
130 131
            user.is_superuser = False
131
        
132

  
132 133
        if options.get('active'):
133 134
            user.is_active = True
134 135
        elif options.get('inactive'):
135 136
            user.is_active = False
136
        
137

  
137 138
        invitations = options.get('invitations')
138 139
        if invitations is not None:
139 140
            user.invitations = int(invitations)
140
        
141

  
141 142
        groupname = options.get('add-group')
142 143
        if groupname is not None:
143 144
            try:
144 145
                group = AstakosGroup.objects.get(name=groupname)
145
                m = Membership(person=user, group=group, date_joined=datetime.now())
146
                m = Membership(
147
                    person=user, group=group, date_joined=datetime.now())
146 148
                m.save()
147 149
            except AstakosGroup.DoesNotExist, e:
148
                self.stdout.write("Group named %s does not exist\n" % groupname)
150
                self.stdout.write(
151
                    "Group named %s does not exist\n" % groupname)
149 152
            except IntegrityError, e:
150 153
                self.stdout.write("User is already member of %s\n" % groupname)
151
        
154

  
152 155
        groupname = options.get('delete-group')
153 156
        if groupname is not None:
154 157
            try:
......
156 159
                m = Membership.objects.get(person=user, group=group)
157 160
                m.delete()
158 161
            except AstakosGroup.DoesNotExist, e:
159
                self.stdout.write("Group named %s does not exist\n" % groupname)
162
                self.stdout.write(
163
                    "Group named %s does not exist\n" % groupname)
160 164
            except Membership.DoesNotExist, e:
161 165
                self.stdout.write("User is not a member of %s\n" % groupname)
162
        
166

  
163 167
        pname = options.get('add-permission')
164 168
        if pname is not None:
165 169
            try:
166 170
                r, created = add_user_permission(user, pname)
167 171
                if created:
168
                    self.stdout.write('Permission: %s created successfully\n' % pname)
172
                    self.stdout.write(
173
                        'Permission: %s created successfully\n' % pname)
169 174
                if r > 0:
170
                    self.stdout.write('Permission: %s added successfully\n' % pname)
171
                elif r==0:
172
                    self.stdout.write('User has already permission: %s\n' % pname)
175
                    self.stdout.write(
176
                        'Permission: %s added successfully\n' % pname)
177
                elif r == 0:
178
                    self.stdout.write(
179
                        'User has already permission: %s\n' % pname)
173 180
            except Exception, e:
174 181
                raise CommandError(e)
175
        
176
        pname  = options.get('delete-permission')
182

  
183
        pname = options.get('delete-permission')
177 184
        if pname is not None and not user.has_perm(pname):
178 185
            try:
179 186
                r = remove_user_permission(user, pname)
180 187
                if r < 0:
181
                    self.stdout.write('Invalid permission codename: %s\n' % pname)
188
                    self.stdout.write(
189
                        'Invalid permission codename: %s\n' % pname)
182 190
                elif r == 0:
183 191
                    self.stdout.write('User has not permission: %s\n' % pname)
184 192
                elif r > 0:
185
                    self.stdout.write('Permission: %s removed successfully\n' % pname)
193
                    self.stdout.write(
194
                        'Permission: %s removed successfully\n' % pname)
186 195
            except Exception, e:
187 196
                raise CommandError(e)
188
        
197

  
189 198
        level = options.get('level')
190 199
        if level is not None:
191 200
            user.level = int(level)
192
        
201

  
193 202
        password = options.get('password')
194 203
        if password is not None:
195 204
            user.set_password(password)
196
        
205

  
197 206
        provider = options.get('provider')
198 207
        if provider is not None:
199 208
            user.provider = provider
200
        
201
        
209

  
202 210
        password = None
203 211
        if options['renew_password']:
204 212
            password = AstakosUser.objects.make_random_password()
205 213
            user.set_password(password)
206
        
214

  
207 215
        if options['renew_token']:
208 216
            user.renew_token()
209
        
217

  
210 218
        if options['refill']:
211 219
            report_user_credits_event(user)
212
        
220

  
213 221
        try:
214 222
            user.save()
215 223
        except ValidationError, e:
216 224
            raise CommandError(e)
217
        
225

  
218 226
        if password:
219 227
            self.stdout.write('User\'s new password: %s\n' % password)

Also available in: Unified diff