Revision ffb1e7a8 snf-astakos-app/astakos/im/models.py
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
41 | 41 |
from base64 import b64encode |
42 | 42 |
from urlparse import urlparse, urlunparse |
43 | 43 |
from random import randint |
44 |
from collections import defaultdict |
|
44 | 45 |
|
45 | 46 |
from django.db import models, IntegrityError |
46 | 47 |
from django.contrib.auth.models import User, UserManager, Group |
... | ... | |
120 | 121 |
|
121 | 122 |
@property |
122 | 123 |
def is_disabled(self): |
123 |
if not approval_date: |
|
124 |
return False
|
|
125 |
return True
|
|
124 |
if not self.approval_date:
|
|
125 |
return True
|
|
126 |
return False
|
|
126 | 127 |
|
127 | 128 |
@property |
128 |
def is_active(self):
|
|
129 |
def is_enabled(self):
|
|
129 | 130 |
if self.is_disabled: |
130 | 131 |
return False |
131 | 132 |
if not self.issue_date: |
... | ... | |
143 | 144 |
def participants(self): |
144 | 145 |
return len(self.approved_members) |
145 | 146 |
|
146 |
def approve(self):
|
|
147 |
def enable(self):
|
|
147 | 148 |
self.approval_date = datetime.now() |
148 | 149 |
self.save() |
149 | 150 |
|
150 |
def disapprove(self):
|
|
151 |
def disable(self):
|
|
151 | 152 |
self.approval_date = None |
152 | 153 |
self.save() |
153 | 154 |
|
... | ... | |
172 | 173 |
return map(lambda m:m.person, f) |
173 | 174 |
|
174 | 175 |
@property |
175 |
def policies(self): |
|
176 |
return self.astakosgroupquota_set.all() |
|
176 |
def quota(self): |
|
177 |
d = {} |
|
178 |
for q in self.astakosgroupquota_set.all(): |
|
179 |
d[q.resource.name] = q.limit |
|
180 |
return d |
|
177 | 181 |
|
178 | 182 |
@property |
179 | 183 |
def has_undefined_policies(self): |
... | ... | |
255 | 259 |
return Invitation.objects.get(username=self.email) |
256 | 260 |
except Invitation.DoesNotExist: |
257 | 261 |
return None |
258 |
|
|
262 |
|
|
263 |
@property |
|
264 |
def quota(self): |
|
265 |
d = defaultdict(int) |
|
266 |
for q in self.astakosuserquota_set.all(): |
|
267 |
d[q.resource.name] += q.limit |
|
268 |
for g in self.astakos_groups.all(): |
|
269 |
if not g.is_enabled: |
|
270 |
continue |
|
271 |
for r, limit in g.quota.iteritems(): |
|
272 |
d[r] += limit |
|
273 |
# TODO set default for remaining |
|
274 |
return d |
|
275 |
|
|
259 | 276 |
def save(self, update_timestamps=True, **kwargs): |
260 | 277 |
if update_timestamps: |
261 | 278 |
if not self.id: |
... | ... | |
340 | 357 |
self.save() |
341 | 358 |
return False |
342 | 359 |
return True |
343 |
|
|
344 |
def enroll_group(self, group): |
|
345 |
self.membership_set.add(group) |
|
346 |
|
|
347 |
def get_astakos_groups(self, approved=True): |
|
348 |
if approved: |
|
349 |
return self.membership_set().filter(is_approved=True) |
|
350 |
return self.membership_set().all() |
|
351 | 360 |
|
352 | 361 |
class Membership(models.Model): |
353 | 362 |
person = models.ForeignKey(AstakosUser) |
... | ... | |
358 | 367 |
class Meta: |
359 | 368 |
unique_together = ("person", "group") |
360 | 369 |
|
361 |
def save(self): |
|
370 |
def save(self, *args, **kwargs):
|
|
362 | 371 |
if not self.id: |
363 | 372 |
if not self.group.moderation_enabled: |
364 | 373 |
self.date_joined = datetime.now() |
365 |
super(Membership, self).save() |
|
374 |
super(Membership, self).save(*args, **kwargs)
|
|
366 | 375 |
|
367 | 376 |
@property |
368 | 377 |
def is_approved(self): |
Also available in: Unified diff