Revision f46c95c4 snf-astakos-app/astakos/im/management/commands/user-update.py

b/snf-astakos-app/astakos/im/management/commands/user-update.py
32 32
# or implied, of GRNET S.A.
33 33

  
34 34
from optparse import make_option
35
from datetime import datetime
36 35

  
37 36
from django.core.management.base import BaseCommand, CommandError
37
from django.contrib.auth.models import Group, Permission
38
from django.contrib.contenttypes.models import ContentType
38 39
from django.core.exceptions import ValidationError
39
from django.db.utils import IntegrityError
40 40

  
41
from astakos.im.models import (AstakosUser, AstakosGroup, Membership, Resource,
42
                               AstakosUserQuota)
43
from astakos.im.endpoints.aquarium.producer import report_user_credits_event
41
from astakos.im.models import AstakosUser
44 42
from ._common import remove_user_permission, add_user_permission
45 43

  
46 44

  
......
48 46
    args = "<user ID>"
49 47
    help = "Modify a user's attributes"
50 48

  
51
    option_list = list(BaseCommand.option_list) + [
49
    option_list = BaseCommand.option_list + (
52 50
        make_option('--invitations',
53 51
                    dest='invitations',
54 52
                    metavar='NUM',
......
107 105
        make_option('--delete-permission',
108 106
                    dest='delete-permission',
109 107
                    help="Delete user permission"),
110
        make_option('--refill-credits',
111
                    action='store_true',
112
                    dest='refill',
113
                    default=False,
114
                    help="Refill user credits"),
115
    ]
116
    resources = Resource.objects.select_related().all()
117
    append = option_list.append
118
    for r in resources:
119
        append(make_option('--%s-set-quota' % r,
120
                    dest='%s-set-quota' % r,
121
                    metavar='QUANTITY',
122
                    help="Set resource quota"))
123
    
108
    )
109

  
124 110
    def handle(self, *args, **options):
125 111
        if len(args) != 1:
126 112
            raise CommandError("Please provide a user ID")
......
150 136
        groupname = options.get('add-group')
151 137
        if groupname is not None:
152 138
            try:
153
                group = AstakosGroup.objects.get(name=groupname)
154
                m = Membership(
155
                    person=user, group=group, date_joined=datetime.now())
156
                m.save()
157
            except AstakosGroup.DoesNotExist, e:
139
                group = Group.objects.get(name=groupname)
140
                user.groups.add(group)
141
            except Group.DoesNotExist, e:
158 142
                self.stdout.write(
159 143
                    "Group named %s does not exist\n" % groupname)
160
            except IntegrityError, e:
161
                self.stdout.write("User is already member of %s\n" % groupname)
162 144

  
163 145
        groupname = options.get('delete-group')
164 146
        if groupname is not None:
165 147
            try:
166
                group = AstakosGroup.objects.get(name=groupname)
167
                m = Membership.objects.get(person=user, group=group)
168
                m.delete()
169
            except AstakosGroup.DoesNotExist, e:
148
                group = Group.objects.get(name=groupname)
149
                user.groups.remove(group)
150
            except Group.DoesNotExist, e:
170 151
                self.stdout.write(
171 152
                    "Group named %s does not exist\n" % groupname)
172
            except Membership.DoesNotExist, e:
173
                self.stdout.write("User is not a member of %s\n" % groupname)
174 153

  
175 154
        pname = options.get('add-permission')
176 155
        if pname is not None:
......
223 202
        if options['renew_token']:
224 203
            user.renew_token()
225 204

  
226
        if options['refill']:
227
            report_user_credits_event(user)
228

  
229 205
        try:
230 206
            user.save()
231 207
        except ValidationError, e:
......
233 209

  
234 210
        if password:
235 211
            self.stdout.write('User\'s new password: %s\n' % password)
236
        
237
        for r in self.resources:
238
            limit = options.get('%s-set-quota' % r)
239
            if not limit:
240
                continue
241
            if not limit.isdigit():
242
                raise CommandError('Invalid limit')
243
            
244
            q = AstakosUserQuota.objects
245
            q, created = q.get_or_create(resource=r, user=user,
246
                                         defaults={'uplimit': limit})
247
            verb = 'set' if created else 'updated'
248
            self.stdout.write('User\'s quota %s successfully\n' % verb)

Also available in: Unified diff