Revision 0f4fa26d snf-astakos-app/astakos/im/models.py

b/snf-astakos-app/astakos/im/models.py
154 154
        self.save()
155 155
    
156 156
    def approve_member(self, person):
157
        try:
158
            self.membership_set.create(person=person, date_joined=datetime.now())
159
        except IntegrityError:
160
            m = self.membership_set.get(person=person)
161
            m.date_joined = datetime.now()
162
            m.save()
157
        m, created = self.membership_set.get_or_create(person=person)
158
        # update date_joined in any case
159
        m.date_joined=datetime.now()
160
        m.save()
163 161
    
164 162
    def disapprove_member(self, person):
165 163
        self.membership_set.remove(person=person)
......
175 173
    
176 174
    @property
177 175
    def quota(self):
178
        d = {}
179
        for q in  self.astakosgroupquota_set.all():
180
            d[q.resource.name] = q.limit
176
        d = defaultdict(int)
177
        for q in self.astakosgroupquota_set.all():
178
            d[q.resource] += q.limit
181 179
        return d
182 180
    
183 181
    @property
184 182
    def has_undefined_policies(self):
185 183
        # TODO: can avoid query?
186 184
        return Resource.objects.filter(~Q(astakosgroup=self)).exists()
185
    
186
    @property
187
    def owners(self):
188
        return self.owner.all()
189
    
190
    @owners.setter
191
    def owners(self, l):
192
        self.owner = l
193
        map(self.approve_member, l)
187 194

  
188 195
class AstakosUser(User):
189 196
    """
......
567 574
    if instance.is_superuser:
568 575
        create_astakos_user(instance)
569 576

  
570
post_save.connect(superuser_post_save, sender=User)
577
post_save.connect(superuser_post_save, sender=User)
578

  
579
def get_resources():
580
    # use cache
581
    return Resource.objects.select_related().all()

Also available in: Unified diff