Revision ae16bcad
b/snf-astakos-app/astakos/im/quotas.py | ||
---|---|---|
35 | 35 |
Resource, AstakosUserQuota, AstakosUser, |
36 | 36 |
Project, ProjectMembership, ProjectResourceGrant, ProjectApplication) |
37 | 37 |
from astakos.quotaholder.callpoint import QuotaholderDjangoDBCallpoint |
38 |
from django.db.models import Q |
|
38 | 39 |
|
39 | 40 |
qh = QuotaholderDjangoDBCallpoint() |
40 | 41 |
|
... | ... | |
248 | 249 |
|
249 | 250 |
|
250 | 251 |
def qh_add_resource_limit(resource, diff): |
251 |
users = AstakosUser.forupdate.all().select_for_update() |
|
252 |
qh.add_resource_limit(SYSTEM, resource, diff) |
|
252 |
objs = AstakosUser.forupdate.filter(Q(email_verified=True) & |
|
253 |
~Q(policy=resource)) |
|
254 |
users = objs.select_for_update() |
|
255 |
uuids = [u.uuid for u in users] |
|
256 |
qh.add_resource_limit(holders=uuids, sources=[SYSTEM], |
|
257 |
resources=[resource.name], diff=diff) |
|
253 | 258 |
|
254 | 259 |
|
255 | 260 |
def qh_sync_new_resource(resource, limit): |
256 | 261 |
users = AstakosUser.forupdate.filter( |
257 | 262 |
email_verified=True).select_for_update() |
258 | 263 |
|
264 |
resource_name = resource.name |
|
259 | 265 |
data = [] |
260 | 266 |
for user in users: |
261 | 267 |
uuid = user.uuid |
262 |
key = uuid, SYSTEM, resource |
|
268 |
key = uuid, SYSTEM, resource_name
|
|
263 | 269 |
data.append((key, limit)) |
264 | 270 |
|
265 | 271 |
qh.set_quota(data) |
b/snf-astakos-app/astakos/im/resources.py | ||
---|---|---|
68 | 68 |
if old_uplimit is not None: |
69 | 69 |
diff = uplimit - old_uplimit |
70 | 70 |
if diff != 0: |
71 |
qh_add_resource_limit(name, diff)
|
|
71 |
qh_add_resource_limit(r, diff)
|
|
72 | 72 |
else: |
73 |
qh_sync_new_resource(name, uplimit)
|
|
73 |
qh_sync_new_resource(r, uplimit)
|
|
74 | 74 |
|
75 | 75 |
|
76 | 76 |
def update_resource(name, uplimit): |
... | ... | |
82 | 82 |
logger.info("Updated resource %s with limit %s." % (name, uplimit)) |
83 | 83 |
diff = uplimit - old_uplimit |
84 | 84 |
if diff != 0: |
85 |
qh_add_resource_limit(name, diff) |
|
85 |
qh_add_resource_limit(r, diff) |
b/snf-astakos-app/astakos/quotaholder/callpoint.py | ||
---|---|---|
135 | 135 |
h.save() |
136 | 136 |
holdings[key] = h |
137 | 137 |
|
138 |
def add_resource_limit(self, source, resource, diff): |
|
139 |
objs = Holding.objects.filter(source=source, resource=resource) |
|
140 |
objs.update(limit=F('limit')+diff) |
|
138 |
def add_resource_limit(self, holders=None, sources=None, resources=None, |
|
139 |
diff=0): |
|
140 |
holdings = Holding.objects.all() |
|
141 |
|
|
142 |
if holders is not None: |
|
143 |
holdings = holdings.filter(holder__in=holders) |
|
144 |
|
|
145 |
if sources is not None: |
|
146 |
holdings = holdings.filter(source__in=sources) |
|
147 |
|
|
148 |
if resources is not None: |
|
149 |
holdings = holdings.filter(resource__in=resources) |
|
150 |
|
|
151 |
holdings.update(limit=F('limit')+diff) |
|
141 | 152 |
|
142 | 153 |
def issue_commission(self, |
143 | 154 |
context=None, |
Also available in: Unified diff