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