Revision 5192a608

b/snf-astakos-app/astakos/im/models.py
1019 1019
        return super(AstakosUserAuthProvider, self).save(*args, **kwargs)
1020 1020

  
1021 1021

  
1022
class ExtendedManager(models.Manager):
1023
    def _update_or_create(self, **kwargs):
1024
        assert kwargs, \
1025
            'update_or_create() must be passed at least one keyword argument'
1026
        obj, created = self.get_or_create(**kwargs)
1027
        defaults = kwargs.pop('defaults', {})
1028
        if created:
1029
            return obj, True, False
1030
        else:
1031
            try:
1032
                params = dict(
1033
                    [(k, v) for k, v in kwargs.items() if '__' not in k])
1034
                params.update(defaults)
1035
                for attr, val in params.items():
1036
                    if hasattr(obj, attr):
1037
                        setattr(obj, attr, val)
1038
                sid = transaction.savepoint()
1039
                obj.save(force_update=True)
1040
                transaction.savepoint_commit(sid)
1041
                return obj, False, True
1042
            except IntegrityError, e:
1043
                transaction.savepoint_rollback(sid)
1044
                try:
1045
                    return self.get(**kwargs), False, False
1046
                except self.model.DoesNotExist:
1047
                    raise e
1048

  
1049
    update_or_create = _update_or_create
1050

  
1051

  
1052 1022
class AstakosUserQuota(models.Model):
1053
    objects = ExtendedManager()
1054 1023
    capacity = intDecimalField()
1055 1024
    resource = models.ForeignKey(Resource)
1056 1025
    user = models.ForeignKey(AstakosUser)
......
1511 1480
    project_capacity = intDecimalField(null=True)
1512 1481
    member_capacity = intDecimalField(default=0)
1513 1482

  
1514
    objects = ExtendedManager()
1515

  
1516 1483
    class Meta:
1517 1484
        unique_together = ("resource", "project_application")
1518 1485

  

Also available in: Unified diff