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