Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / quotaholder / callpoint.py @ 61660c26

History | View | Annotate | Download (11.9 kB)

1 1d734153 Giorgos Korfiatis
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
2 3e5941c1 Giorgos Korfiatis
#
3 3e5941c1 Giorgos Korfiatis
# Redistribution and use in source and binary forms, with or
4 3e5941c1 Giorgos Korfiatis
# without modification, are permitted provided that the following
5 3e5941c1 Giorgos Korfiatis
# conditions are met:
6 3e5941c1 Giorgos Korfiatis
#
7 3e5941c1 Giorgos Korfiatis
#   1. Redistributions of source code must retain the above
8 3e5941c1 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
9 3e5941c1 Giorgos Korfiatis
#      disclaimer.
10 3e5941c1 Giorgos Korfiatis
#
11 3e5941c1 Giorgos Korfiatis
#   2. Redistributions in binary form must reproduce the above
12 3e5941c1 Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
13 3e5941c1 Giorgos Korfiatis
#      disclaimer in the documentation and/or other materials
14 3e5941c1 Giorgos Korfiatis
#      provided with the distribution.
15 3e5941c1 Giorgos Korfiatis
#
16 3e5941c1 Giorgos Korfiatis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 3e5941c1 Giorgos Korfiatis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 3e5941c1 Giorgos Korfiatis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 3e5941c1 Giorgos Korfiatis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 3e5941c1 Giorgos Korfiatis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 3e5941c1 Giorgos Korfiatis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 3e5941c1 Giorgos Korfiatis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 3e5941c1 Giorgos Korfiatis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 3e5941c1 Giorgos Korfiatis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 3e5941c1 Giorgos Korfiatis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 3e5941c1 Giorgos Korfiatis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 3e5941c1 Giorgos Korfiatis
# POSSIBILITY OF SUCH DAMAGE.
28 3e5941c1 Giorgos Korfiatis
#
29 3e5941c1 Giorgos Korfiatis
# The views and conclusions contained in the software and
30 3e5941c1 Giorgos Korfiatis
# documentation are those of the authors and should not be
31 3e5941c1 Giorgos Korfiatis
# interpreted as representing official policies, either expressed
32 3e5941c1 Giorgos Korfiatis
# or implied, of GRNET S.A.
33 3e5941c1 Giorgos Korfiatis
34 79e3da8a Giorgos Korfiatis
from functools import partial
35 79e3da8a Giorgos Korfiatis
36 b0727daf Giorgos Korfiatis
from astakos.quotaholder.exception import (
37 b0727daf Giorgos Korfiatis
    QuotaholderError,
38 79e3da8a Giorgos Korfiatis
    NoCommissionError,
39 b0727daf Giorgos Korfiatis
    CorruptedError, InvalidDataError,
40 79e3da8a Giorgos Korfiatis
    NoHoldingError,
41 1d734153 Giorgos Korfiatis
    DuplicateError)
42 fac1de87 Georgios D. Tsoukalas
43 d03796c2 Giorgos Korfiatis
from astakos.quotaholder.commission import (
44 2864e701 Giorgos Korfiatis
    Import, Release, Operations)
45 d03796c2 Giorgos Korfiatis
46 b0727daf Giorgos Korfiatis
from astakos.quotaholder.utils.newname import newname
47 b0727daf Giorgos Korfiatis
from astakos.quotaholder.api import QH_PRACTICALLY_INFINITE
48 f54beeea Giorgos Korfiatis
49 2b888e60 Giorgos Korfiatis
from .models import (Holding,
50 8cff5e41 Giorgos Korfiatis
                     Commission, Provision, ProvisionLog,
51 789d202d Giorgos Korfiatis
                     now,
52 2b888e60 Giorgos Korfiatis
                     db_get_holding,
53 8cff5e41 Giorgos Korfiatis
                     db_get_commission, db_filter_provision)
54 fac1de87 Georgios D. Tsoukalas
55 e5a2e942 Georgios D. Tsoukalas
56 b0727daf Giorgos Korfiatis
class QuotaholderDjangoDBCallpoint(object):
57 fac1de87 Georgios D. Tsoukalas
58 dc9da5b9 Giorgos Korfiatis
    def get_holder_quota(self, holders=None, sources=None, resources=None):
59 dc9da5b9 Giorgos Korfiatis
        holdings = Holding.objects.filter(holder__in=holders)
60 dc9da5b9 Giorgos Korfiatis
61 dc9da5b9 Giorgos Korfiatis
        if sources is not None:
62 dc9da5b9 Giorgos Korfiatis
            holdings = holdings.filter(source__in=sources)
63 dc9da5b9 Giorgos Korfiatis
64 dc9da5b9 Giorgos Korfiatis
        if resources is not None:
65 dc9da5b9 Giorgos Korfiatis
            holdings = holdings.filter(resource__in=resources)
66 dc9da5b9 Giorgos Korfiatis
67 dc9da5b9 Giorgos Korfiatis
        quotas = {}
68 dc9da5b9 Giorgos Korfiatis
        for holding in holdings:
69 dc9da5b9 Giorgos Korfiatis
            key = (holding.holder, holding.source, holding.resource)
70 dc9da5b9 Giorgos Korfiatis
            value = (holding.limit, holding.imported_min, holding.imported_max)
71 dc9da5b9 Giorgos Korfiatis
            quotas[key] = value
72 dc9da5b9 Giorgos Korfiatis
73 dc9da5b9 Giorgos Korfiatis
        return quotas
74 dc9da5b9 Giorgos Korfiatis
75 befa5997 Giorgos Korfiatis
    def _get_holdings_for_update(self, holding_keys):
76 befa5997 Giorgos Korfiatis
        holding_keys = sorted(holding_keys)
77 dc9da5b9 Giorgos Korfiatis
        holdings = {}
78 befa5997 Giorgos Korfiatis
        for (holder, source, resource) in holding_keys:
79 befa5997 Giorgos Korfiatis
            try:
80 befa5997 Giorgos Korfiatis
                h = Holding.objects.get_for_update(
81 befa5997 Giorgos Korfiatis
                    holder=holder, source=source, resource=resource)
82 befa5997 Giorgos Korfiatis
                holdings[(holder, source, resource)] = h
83 befa5997 Giorgos Korfiatis
            except Holding.DoesNotExist:
84 befa5997 Giorgos Korfiatis
                pass
85 befa5997 Giorgos Korfiatis
        return holdings
86 befa5997 Giorgos Korfiatis
87 befa5997 Giorgos Korfiatis
    def _provisions_to_list(self, provisions):
88 befa5997 Giorgos Korfiatis
        lst = []
89 befa5997 Giorgos Korfiatis
        for provision in provisions:
90 befa5997 Giorgos Korfiatis
            try:
91 befa5997 Giorgos Korfiatis
                holder = provision['holder']
92 befa5997 Giorgos Korfiatis
                source = provision['source']
93 befa5997 Giorgos Korfiatis
                resource = provision['resource']
94 befa5997 Giorgos Korfiatis
                quantity = provision['quantity']
95 befa5997 Giorgos Korfiatis
                key = (holder, source, resource)
96 befa5997 Giorgos Korfiatis
                lst.append((key, quantity))
97 befa5997 Giorgos Korfiatis
            except KeyError:
98 befa5997 Giorgos Korfiatis
                raise InvalidDataError("Malformed provision")
99 befa5997 Giorgos Korfiatis
        return lst
100 befa5997 Giorgos Korfiatis
101 befa5997 Giorgos Korfiatis
    def _mkProvision(self, key, quantity):
102 befa5997 Giorgos Korfiatis
        holder, source, resource = key
103 befa5997 Giorgos Korfiatis
        return {'holder': holder,
104 befa5997 Giorgos Korfiatis
                'source': source,
105 befa5997 Giorgos Korfiatis
                'resource': resource,
106 befa5997 Giorgos Korfiatis
                'quantity': quantity,
107 befa5997 Giorgos Korfiatis
                }
108 befa5997 Giorgos Korfiatis
109 befa5997 Giorgos Korfiatis
    def set_holder_quota(self, quotas):
110 befa5997 Giorgos Korfiatis
        q = self._level_quota_dict(quotas)
111 befa5997 Giorgos Korfiatis
        self.set_quota(q)
112 dc9da5b9 Giorgos Korfiatis
113 befa5997 Giorgos Korfiatis
    def _level_quota_dict(self, quotas):
114 befa5997 Giorgos Korfiatis
        lst = []
115 dc9da5b9 Giorgos Korfiatis
        for holder, holder_quota in quotas.iteritems():
116 dc9da5b9 Giorgos Korfiatis
            for source, source_quota in holder_quota.iteritems():
117 dc9da5b9 Giorgos Korfiatis
                for resource, limit in source_quota.iteritems():
118 befa5997 Giorgos Korfiatis
                    key = (holder, source, resource)
119 befa5997 Giorgos Korfiatis
                    lst.append((key, limit))
120 befa5997 Giorgos Korfiatis
        return lst
121 befa5997 Giorgos Korfiatis
122 befa5997 Giorgos Korfiatis
    def set_quota(self, quotas):
123 befa5997 Giorgos Korfiatis
        holding_keys = [key for (key, limit) in quotas]
124 befa5997 Giorgos Korfiatis
        holdings = self._get_holdings_for_update(holding_keys)
125 befa5997 Giorgos Korfiatis
126 befa5997 Giorgos Korfiatis
        for key, limit in quotas:
127 befa5997 Giorgos Korfiatis
            try:
128 befa5997 Giorgos Korfiatis
                h = holdings[key]
129 befa5997 Giorgos Korfiatis
            except KeyError:
130 befa5997 Giorgos Korfiatis
                holder, source, resource = key
131 befa5997 Giorgos Korfiatis
                h = Holding(holder=holder,
132 befa5997 Giorgos Korfiatis
                            source=source,
133 befa5997 Giorgos Korfiatis
                            resource=resource)
134 befa5997 Giorgos Korfiatis
            h.limit = limit
135 befa5997 Giorgos Korfiatis
            h.save()
136 befa5997 Giorgos Korfiatis
            holdings[key] = h
137 dc9da5b9 Giorgos Korfiatis
138 1d734153 Giorgos Korfiatis
    def issue_commission(self,
139 e3685916 Giorgos Korfiatis
                         context=None,
140 1d734153 Giorgos Korfiatis
                         clientkey=None,
141 1d734153 Giorgos Korfiatis
                         name=None,
142 79e3da8a Giorgos Korfiatis
                         force=False,
143 d03796c2 Giorgos Korfiatis
                         provisions=()):
144 fac1de87 Georgios D. Tsoukalas
145 2864e701 Giorgos Korfiatis
        if name is None:
146 2864e701 Giorgos Korfiatis
            name = ""
147 c3a709ad root
        create = Commission.objects.create
148 2864e701 Giorgos Korfiatis
        commission = create(clientkey=clientkey, name=name)
149 fac1de87 Georgios D. Tsoukalas
        serial = commission.serial
150 fac1de87 Georgios D. Tsoukalas
151 d03796c2 Giorgos Korfiatis
        operations = Operations()
152 6afede3f Giorgos Korfiatis
153 befa5997 Giorgos Korfiatis
        provisions = self._provisions_to_list(provisions)
154 befa5997 Giorgos Korfiatis
        keys = [key for (key, value) in provisions]
155 befa5997 Giorgos Korfiatis
        holdings = self._get_holdings_for_update(keys)
156 d03796c2 Giorgos Korfiatis
        try:
157 d03796c2 Giorgos Korfiatis
            checked = []
158 befa5997 Giorgos Korfiatis
            for key, quantity in provisions:
159 79e3da8a Giorgos Korfiatis
                if not isinstance(quantity, (int, long)):
160 79e3da8a Giorgos Korfiatis
                    raise InvalidDataError("Malformed provision")
161 c3a709ad root
162 befa5997 Giorgos Korfiatis
                if key in checked:
163 befa5997 Giorgos Korfiatis
                    m = "Duplicate provision for %s" % str(key)
164 befa5997 Giorgos Korfiatis
                    provision = self._mkProvision(key, quantity)
165 79e3da8a Giorgos Korfiatis
                    raise DuplicateError(m,
166 befa5997 Giorgos Korfiatis
                                         provision=provision)
167 befa5997 Giorgos Korfiatis
                checked.append(key)
168 fac1de87 Georgios D. Tsoukalas
169 d03796c2 Giorgos Korfiatis
                # Target
170 d03796c2 Giorgos Korfiatis
                try:
171 befa5997 Giorgos Korfiatis
                    th = holdings[key]
172 befa5997 Giorgos Korfiatis
                except KeyError:
173 befa5997 Giorgos Korfiatis
                    m = ("There is no such holding %s" % key)
174 befa5997 Giorgos Korfiatis
                    provision = self._mkProvision(key, quantity)
175 79e3da8a Giorgos Korfiatis
                    raise NoHoldingError(m,
176 79e3da8a Giorgos Korfiatis
                                         provision=provision)
177 d551c841 Georgios D. Tsoukalas
178 d03796c2 Giorgos Korfiatis
                if quantity >= 0:
179 79e3da8a Giorgos Korfiatis
                    operations.prepare(Import, th, quantity, force)
180 fac1de87 Georgios D. Tsoukalas
181 d03796c2 Giorgos Korfiatis
                else: # release
182 d03796c2 Giorgos Korfiatis
                    abs_quantity = -quantity
183 79e3da8a Giorgos Korfiatis
                    operations.prepare(Release, th, abs_quantity, force)
184 d03796c2 Giorgos Korfiatis
185 befa5997 Giorgos Korfiatis
                holdings[key] = th
186 d03796c2 Giorgos Korfiatis
                Provision.objects.create(serial=commission,
187 2864e701 Giorgos Korfiatis
                                         holding=th,
188 d03796c2 Giorgos Korfiatis
                                         quantity=quantity)
189 d03796c2 Giorgos Korfiatis
190 d03796c2 Giorgos Korfiatis
        except QuotaholderError:
191 d03796c2 Giorgos Korfiatis
            operations.revert()
192 d03796c2 Giorgos Korfiatis
            raise
193 fac1de87 Georgios D. Tsoukalas
194 fac1de87 Georgios D. Tsoukalas
        return serial
195 fac1de87 Georgios D. Tsoukalas
196 1d734153 Giorgos Korfiatis
    def _log_provision(self,
197 2864e701 Giorgos Korfiatis
                       commission, provision, log_time, reason):
198 2864e701 Giorgos Korfiatis
199 2864e701 Giorgos Korfiatis
        holding = provision.holding
200 1dedc367 Georgios D. Tsoukalas
201 1d734153 Giorgos Korfiatis
        kwargs = {
202 1d734153 Giorgos Korfiatis
            'serial':              commission.serial,
203 1d734153 Giorgos Korfiatis
            'name':                commission.name,
204 2864e701 Giorgos Korfiatis
            'holder':              holding.holder,
205 2864e701 Giorgos Korfiatis
            'source':              holding.source,
206 2864e701 Giorgos Korfiatis
            'resource':            holding.resource,
207 b78f2b29 Giorgos Korfiatis
            'limit':               holding.limit,
208 2864e701 Giorgos Korfiatis
            'imported_min':        holding.imported_min,
209 2864e701 Giorgos Korfiatis
            'imported_max':        holding.imported_max,
210 1d734153 Giorgos Korfiatis
            'delta_quantity':      provision.quantity,
211 1d734153 Giorgos Korfiatis
            'issue_time':          commission.issue_time,
212 1d734153 Giorgos Korfiatis
            'log_time':            log_time,
213 1d734153 Giorgos Korfiatis
            'reason':              reason,
214 1d734153 Giorgos Korfiatis
        }
215 1d734153 Giorgos Korfiatis
216 1d734153 Giorgos Korfiatis
        ProvisionLog.objects.create(**kwargs)
217 1d734153 Giorgos Korfiatis
218 1d734153 Giorgos Korfiatis
    def accept_commission(self,
219 e3685916 Giorgos Korfiatis
                          context=None, clientkey=None,
220 79e3da8a Giorgos Korfiatis
                          serial=None, reason=''):
221 b435047b root
        log_time = now()
222 b435047b root
223 79e3da8a Giorgos Korfiatis
        try:
224 79e3da8a Giorgos Korfiatis
            c = db_get_commission(clientkey=clientkey, serial=serial,
225 79e3da8a Giorgos Korfiatis
                                  for_update=True)
226 79e3da8a Giorgos Korfiatis
        except Commission.DoesNotExist:
227 79e3da8a Giorgos Korfiatis
            return False
228 d03796c2 Giorgos Korfiatis
229 79e3da8a Giorgos Korfiatis
        operations = Operations()
230 fac1de87 Georgios D. Tsoukalas
231 79e3da8a Giorgos Korfiatis
        provisions = db_filter_provision(serial=serial, for_update=True)
232 79e3da8a Giorgos Korfiatis
        for pv in provisions:
233 79e3da8a Giorgos Korfiatis
            try:
234 79e3da8a Giorgos Korfiatis
                th = db_get_holding(id=pv.holding_id,
235 79e3da8a Giorgos Korfiatis
                                    for_update=True)
236 79e3da8a Giorgos Korfiatis
            except Holding.DoesNotExist:
237 79e3da8a Giorgos Korfiatis
                m = "Corrupted provision"
238 79e3da8a Giorgos Korfiatis
                raise CorruptedError(m)
239 f590f930 Georgios D. Tsoukalas
240 79e3da8a Giorgos Korfiatis
            quantity = pv.quantity
241 f590f930 Georgios D. Tsoukalas
242 79e3da8a Giorgos Korfiatis
            if quantity >= 0:
243 79e3da8a Giorgos Korfiatis
                operations.finalize(Import, th, quantity)
244 79e3da8a Giorgos Korfiatis
            else: # release
245 79e3da8a Giorgos Korfiatis
                abs_quantity = -quantity
246 79e3da8a Giorgos Korfiatis
                operations.finalize(Release, th, abs_quantity)
247 fac1de87 Georgios D. Tsoukalas
248 79e3da8a Giorgos Korfiatis
            reason = 'ACCEPT:' + reason[-121:]
249 79e3da8a Giorgos Korfiatis
            self._log_provision(c, pv, log_time, reason)
250 79e3da8a Giorgos Korfiatis
            pv.delete()
251 79e3da8a Giorgos Korfiatis
        c.delete()
252 79e3da8a Giorgos Korfiatis
        return True
253 fac1de87 Georgios D. Tsoukalas
254 1d734153 Giorgos Korfiatis
    def reject_commission(self,
255 e3685916 Giorgos Korfiatis
                          context=None, clientkey=None,
256 79e3da8a Giorgos Korfiatis
                          serial=None, reason=''):
257 b435047b root
        log_time = now()
258 b435047b root
259 79e3da8a Giorgos Korfiatis
        try:
260 79e3da8a Giorgos Korfiatis
            c = db_get_commission(clientkey=clientkey, serial=serial,
261 79e3da8a Giorgos Korfiatis
                                  for_update=True)
262 79e3da8a Giorgos Korfiatis
        except Commission.DoesNotExist:
263 79e3da8a Giorgos Korfiatis
            return False
264 d03796c2 Giorgos Korfiatis
265 79e3da8a Giorgos Korfiatis
        operations = Operations()
266 fac1de87 Georgios D. Tsoukalas
267 79e3da8a Giorgos Korfiatis
        provisions = db_filter_provision(serial=serial, for_update=True)
268 79e3da8a Giorgos Korfiatis
        for pv in provisions:
269 79e3da8a Giorgos Korfiatis
            try:
270 79e3da8a Giorgos Korfiatis
                th = db_get_holding(id=pv.holding_id,
271 79e3da8a Giorgos Korfiatis
                                    for_update=True)
272 79e3da8a Giorgos Korfiatis
            except Holding.DoesNotExist:
273 79e3da8a Giorgos Korfiatis
                m = "Corrupted provision"
274 79e3da8a Giorgos Korfiatis
                raise CorruptedError(m)
275 f590f930 Georgios D. Tsoukalas
276 79e3da8a Giorgos Korfiatis
            quantity = pv.quantity
277 fe6c61fb root
278 79e3da8a Giorgos Korfiatis
            if quantity >= 0:
279 79e3da8a Giorgos Korfiatis
                operations.undo(Import, th, quantity)
280 79e3da8a Giorgos Korfiatis
            else: # release
281 79e3da8a Giorgos Korfiatis
                abs_quantity = -quantity
282 79e3da8a Giorgos Korfiatis
                operations.undo(Release, th, abs_quantity)
283 fac1de87 Georgios D. Tsoukalas
284 79e3da8a Giorgos Korfiatis
            reason = 'REJECT:' + reason[-121:]
285 79e3da8a Giorgos Korfiatis
            self._log_provision(c, pv, log_time, reason)
286 79e3da8a Giorgos Korfiatis
            pv.delete()
287 79e3da8a Giorgos Korfiatis
        c.delete()
288 79e3da8a Giorgos Korfiatis
        return True
289 fac1de87 Georgios D. Tsoukalas
290 e3685916 Giorgos Korfiatis
    def get_pending_commissions(self, context=None, clientkey=None):
291 e5a2e942 Georgios D. Tsoukalas
        pending = Commission.objects.filter(clientkey=clientkey)
292 e5a2e942 Georgios D. Tsoukalas
        pending_list = pending.values_list('serial', flat=True)
293 79e3da8a Giorgos Korfiatis
        return list(pending_list)
294 79e3da8a Giorgos Korfiatis
295 79e3da8a Giorgos Korfiatis
    def get_commission(self, clientkey=None, serial=None):
296 79e3da8a Giorgos Korfiatis
        try:
297 79e3da8a Giorgos Korfiatis
            commission = Commission.objects.get(clientkey=clientkey,
298 79e3da8a Giorgos Korfiatis
                                                serial=serial)
299 79e3da8a Giorgos Korfiatis
        except Commission.DoesNotExist:
300 79e3da8a Giorgos Korfiatis
            raise NoCommissionError(serial)
301 79e3da8a Giorgos Korfiatis
302 79e3da8a Giorgos Korfiatis
        objs = Provision.objects.select_related('holding')
303 79e3da8a Giorgos Korfiatis
        provisions = objs.filter(serial=commission)
304 79e3da8a Giorgos Korfiatis
305 79e3da8a Giorgos Korfiatis
        ps = [p.todict() for p in provisions]
306 79e3da8a Giorgos Korfiatis
307 79e3da8a Giorgos Korfiatis
        response = {'serial':     serial,
308 79e3da8a Giorgos Korfiatis
                    'provisions': ps,
309 79e3da8a Giorgos Korfiatis
                    'issue_time': commission.issue_time,
310 79e3da8a Giorgos Korfiatis
                    }
311 79e3da8a Giorgos Korfiatis
        return response
312 79e3da8a Giorgos Korfiatis
313 79e3da8a Giorgos Korfiatis
    def _resolve(self, include, exclude, operation):
314 79e3da8a Giorgos Korfiatis
        done = []
315 79e3da8a Giorgos Korfiatis
        failed = []
316 79e3da8a Giorgos Korfiatis
        for serial in include:
317 79e3da8a Giorgos Korfiatis
            if serial in exclude:
318 79e3da8a Giorgos Korfiatis
                failed.append((serial, 'CONFLICT'))
319 79e3da8a Giorgos Korfiatis
            else:
320 79e3da8a Giorgos Korfiatis
                response = operation(serial=serial)
321 79e3da8a Giorgos Korfiatis
                if response:
322 79e3da8a Giorgos Korfiatis
                    done.append(serial)
323 79e3da8a Giorgos Korfiatis
                else:
324 79e3da8a Giorgos Korfiatis
                    failed.append((serial, 'NOTFOUND'))
325 79e3da8a Giorgos Korfiatis
        return done, failed
326 fac1de87 Georgios D. Tsoukalas
327 1d734153 Giorgos Korfiatis
    def resolve_pending_commissions(self,
328 e3685916 Giorgos Korfiatis
                                    context=None, clientkey=None,
329 79e3da8a Giorgos Korfiatis
                                    accept_set=[], reject_set=[]):
330 fac1de87 Georgios D. Tsoukalas
        accept_set = set(accept_set)
331 79e3da8a Giorgos Korfiatis
        reject_set = set(reject_set)
332 fac1de87 Georgios D. Tsoukalas
333 79e3da8a Giorgos Korfiatis
        accept = partial(self.accept_commission, clientkey=clientkey)
334 79e3da8a Giorgos Korfiatis
        reject = partial(self.reject_commission, clientkey=clientkey)
335 fac1de87 Georgios D. Tsoukalas
336 79e3da8a Giorgos Korfiatis
        accepted, failed_ac = self._resolve(accept_set, reject_set, accept)
337 79e3da8a Giorgos Korfiatis
        rejected, failed_re = self._resolve(reject_set, accept_set, reject)
338 fac1de87 Georgios D. Tsoukalas
339 79e3da8a Giorgos Korfiatis
        failed = list(set(failed_ac + failed_re))
340 79e3da8a Giorgos Korfiatis
        return accepted, rejected, failed
341 fac1de87 Georgios D. Tsoukalas
342 e5a2e942 Georgios D. Tsoukalas
343 fac1de87 Georgios D. Tsoukalas
API_Callpoint = QuotaholderDjangoDBCallpoint