Revision ef0fa70b

b/snf-common/synnefo/lib/quotaholder/api/quotaholder.py
92 92
                                regex       =   '(ACCEPT|REJECT):.*',
93 93
                                maxlen      =   128         )
94 94

  
95
Bool                =   Integer(classname='Bool')
96

  
95 97
class QuotaholderAPI(Specificator):
96 98

  
97 99
    def create_entity   (
......
246 248
        rejected = ListOf(Entity, Resource)
247 249
        return rejected
248 250

  
249
    def ack_serials (
251
    def ack_serial (
250 252
                self,
251 253
                context     =   Context,
252 254
                clientkey   =   ClientKey,
253
                serials     =   ListOf(Serial)
255
                serial      =   Serial,
256
                fetch_args  =   Bool
254 257
        ):
255
        return Nothing
258
        return ListOf(Entity, Resource)
256 259

  
257 260
    def issue_commission    (
258 261
                self,
b/snf-quotaholder-app/quotaholder_django/quotaholder_app/callpoint.py
49 49
                     now,
50 50
                     db_get_entity, db_get_holding, db_get_policy,
51 51
                     db_get_commission, db_filter_provision, db_get_callserial)
52

  
52
import json
53 53

  
54 54
class QuotaholderDjangoDBCallpoint(Callpoint):
55 55

  
......
510 510
    def add_quota(self, context={}, clientkey=None, serial=None, add_quota=()):
511 511
        rejected = []
512 512
        append = rejected.append
513
        all_pairs = [(q[0], q[1]) for q in add_quota]
513 514

  
514 515
        if serial is not None:
515 516
            if clientkey is None:
516
                all_rejected = [(q[0], q[1]) for q in add_quota]
517
                raise ReturnButFail(all_rejected)
517
                raise ReturnButFail(all_pairs)
518 518
            try:
519 519
                cs = CallSerial.objects.get(serial=serial, clientkey=clientkey)
520
                all_rejected = [(q[0], q[1]) for q in add_quota]
521
                raise ReturnButFail(all_rejected)
520
                raise ReturnButFail(all_pairs)
522 521
            except CallSerial.DoesNotExist:
523 522
                pass
524 523

  
......
571 570
            raise ReturnButFail(rejected)
572 571

  
573 572
        if serial is not None and clientkey is not None:
574
            CallSerial.objects.create(serial=serial, clientkey=clientkey)
573
            data = json.dumps(all_pairs)
574
            CallSerial.objects.create(serial=serial,
575
                                      clientkey=clientkey,
576
                                      data=data)
575 577
        return rejected
576 578

  
577
    def ack_serials(self, context={}, clientkey=None, serials=()):
578
        for serial in serials:
579
            try:
580
                cs = db_get_callserial(clientkey=clientkey, serial=serial,
581
                                       for_update=True)
582
                cs.delete()
583
            except CallSerial.DoesNotExist:
584
                pass
585
        return
579
    def ack_serial(self, context={}, clientkey=None, serial=None,
580
                   fetch_args=False):
581
        result = []
582
        try:
583
            cs = db_get_callserial(clientkey=clientkey,
584
                                   serial=serial,
585
                                   for_update=True)
586
        except CallSerial.DoesNotExist:
587
            return result
588

  
589
        if fetch_args:
590
            result = json.loads(cs.data)
591

  
592
        cs.delete()
593
        return result
586 594

  
587 595
    def issue_commission(self,  context     =   {},
588 596
                                clientkey   =   None,
b/snf-quotaholder-app/quotaholder_django/quotaholder_app/models.py
191 191

  
192 192
    serial      =   BigIntegerField(null=False)
193 193
    clientkey   =   CharField(max_length=4096, null=False)
194

  
194
    data        =   CharField(max_length=256*1024)
195 195
    objects     =   ForUpdateManager()
196 196

  
197 197
    class Meta:
b/snf-quotaholder-app/quotaholder_django/test/simpletests.py
254 254
                                         (e0, resource1, k0, 0, None, (-5), 0)])
255 255
        self.assertEqual(r, [(e0, resource0), (e0, resource1)])
256 256

  
257
        r = self.qh.ack_serials(clientkey=self.client, serials=[1])
257
        r = self.qh.ack_serial(clientkey=self.client,
258
                               serial=1,
259
                               fetch_args=True)
260

  
261
        self.assertEqual(r, [(e0, resource0), (e0, resource1)])
262

  
263
        r = self.qh.ack_serial(clientkey=self.client,
264
                               serial=1,
265
                               fetch_args=True)
266

  
267
        self.assertEqual(r, [])
258 268

  
259 269
        # serial has been deleted
260 270
        r = self.qh.add_quota(clientkey=self.client,

Also available in: Unified diff