Revision 6c997921 snf-astakos-app/astakos/im/models.py
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
136 | 136 |
for s in resources: |
137 | 137 |
self.resource_set.create(**s) |
138 | 138 |
|
139 |
def add_resource(self, service, resource, uplimit, update=True): |
|
140 |
"""Raises ObjectDoesNotExist, IntegrityError""" |
|
141 |
resource = Resource.objects.get(service__name=service, name=resource) |
|
142 |
if update: |
|
143 |
AstakosUserQuota.objects.update_or_create(user=self, |
|
144 |
resource=resource, |
|
145 |
defaults={'uplimit': uplimit}) |
|
146 |
else: |
|
147 |
q = self.astakosuserquota_set |
|
148 |
q.create(resource=resource, uplimit=uplimit) |
|
149 |
|
|
150 | 139 |
|
151 | 140 |
class ResourceMetadata(models.Model): |
152 | 141 |
key = models.CharField(_('Name'), max_length=255, unique=True, db_index=True) |
... | ... | |
344 | 333 |
default_quota = get_default_quota() |
345 | 334 |
d.update(default_quota) |
346 | 335 |
for q in self.policies: |
347 |
d[q.resource] += q.uplimit or inf
|
|
336 |
d[q.resource] = q.capacity or inf
|
|
348 | 337 |
for m in self.projectmembership_set.select_related().all(): |
349 | 338 |
if not m.acceptance_date: |
350 | 339 |
continue |
... | ... | |
363 | 352 |
@policies.setter |
364 | 353 |
def policies(self, policies): |
365 | 354 |
for p in policies: |
366 |
service = policies.get('service', None) |
|
367 |
resource = policies.get('resource', None) |
|
368 |
uplimit = policies.get('uplimit', 0) |
|
369 |
update = policies.get('update', True) |
|
370 |
self.add_policy(service, resource, uplimit, update) |
|
371 |
|
|
372 |
def add_policy(self, service, resource, uplimit, update=True): |
|
355 |
p.setdefault('resource', '') |
|
356 |
p.setdefault('capacity', 0) |
|
357 |
p.setdefault('quantity', 0) |
|
358 |
p.setdefault('import_limit', 0) |
|
359 |
p.setdefault('export_limit', 0) |
|
360 |
p.setdefault('update', True) |
|
361 |
self.add_resource_policy(**p) |
|
362 |
|
|
363 |
def add_resource_policy( |
|
364 |
self, resource, capacity, quantity, import_limit, |
|
365 |
export_limit, update=True): |
|
373 | 366 |
"""Raises ObjectDoesNotExist, IntegrityError""" |
374 |
resource = Resource.objects.get(service__name=service, name=resource) |
|
367 |
s, sep, r = resource.partition(RESOURCE_SEPARATOR) |
|
368 |
resource = Resource.objects.get(service__name=s, name=r) |
|
375 | 369 |
if update: |
376 |
AstakosUserQuota.objects.update_or_create(user=self, |
|
377 |
resource=resource, |
|
378 |
defaults={'uplimit': uplimit}) |
|
370 |
AstakosUserQuota.objects.update_or_create( |
|
371 |
user=self, resource=resource, defaults={ |
|
372 |
'capacity':capacity, |
|
373 |
'quantity': quantity, |
|
374 |
'import_limit':import_limit, |
|
375 |
'export_limit':export_limit}) |
|
379 | 376 |
else: |
380 | 377 |
q = self.astakosuserquota_set |
381 |
q.create(resource=resource, uplimit=uplimit) |
|
378 |
q.create( |
|
379 |
resource=resource, capacity=capacity, quanity=quantity, |
|
380 |
import_limit=import_limit, export_limit=export_limit) |
|
382 | 381 |
|
383 |
def remove_policy(self, service, resource): |
|
382 |
def remove_resource_policy(self, service, resource):
|
|
384 | 383 |
"""Raises ObjectDoesNotExist, IntegrityError""" |
385 | 384 |
resource = Resource.objects.get(service__name=service, name=resource) |
386 | 385 |
q = self.policies.get(resource=resource).delete() |
... | ... | |
394 | 393 |
self.uuid = uuid_val |
395 | 394 |
return self.uuid |
396 | 395 |
|
397 |
@property |
|
398 |
def extended_groups(self): |
|
399 |
return self.membership_set.select_related().all() |
|
400 |
|
|
401 | 396 |
def save(self, update_timestamps=True, **kwargs): |
402 | 397 |
if update_timestamps: |
403 | 398 |
if not self.id: |
... | ... | |
801 | 796 |
|
802 | 797 |
class AstakosUserQuota(models.Model): |
803 | 798 |
objects = ExtendedManager() |
804 |
limit = models.PositiveIntegerField(_('Limit'), null=True) # obsolete field |
|
805 |
uplimit = models.BigIntegerField(_('Up limit'), null=True) |
|
799 |
capacity = models.BigIntegerField(_('Capacity'), null=True) |
|
800 |
quantity = models.BigIntegerField(_('Quantity'), null=True) |
|
801 |
export_limit = models.BigIntegerField(_('Export limit'), null=True) |
|
802 |
import_limit = models.BigIntegerField(_('Import limit'), null=True) |
|
806 | 803 |
resource = models.ForeignKey(Resource) |
807 | 804 |
user = models.ForeignKey(AstakosUser) |
808 | 805 |
|
Also available in: Unified diff