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