Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / quotaholder / api / quotaholder.py @ 6764f588

History | View | Annotate | Download (10.3 kB)

1 54069d1b Stavros Sachtouris
# -*- coding: utf-8 -*-
2 54069d1b Stavros Sachtouris
#
3 54069d1b Stavros Sachtouris
# Copyright 2012 GRNET S.A. All rights reserved.
4 54069d1b Stavros Sachtouris
#
5 54069d1b Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
6 54069d1b Stavros Sachtouris
# without modification, are permitted provided that the following
7 54069d1b Stavros Sachtouris
# conditions are met:
8 54069d1b Stavros Sachtouris
#
9 54069d1b Stavros Sachtouris
#   1. Redistributions of source code must retain the above
10 54069d1b Stavros Sachtouris
#      copyright notice, this list of conditions and the following
11 54069d1b Stavros Sachtouris
#      disclaimer.
12 54069d1b Stavros Sachtouris
#
13 54069d1b Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
14 54069d1b Stavros Sachtouris
#      copyright notice, this list of conditions and the following
15 54069d1b Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
16 54069d1b Stavros Sachtouris
#      provided with the distribution.
17 54069d1b Stavros Sachtouris
#
18 54069d1b Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19 54069d1b Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 54069d1b Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 54069d1b Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22 54069d1b Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 54069d1b Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 54069d1b Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25 54069d1b Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 54069d1b Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 54069d1b Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 54069d1b Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 54069d1b Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
30 54069d1b Stavros Sachtouris
#
31 54069d1b Stavros Sachtouris
# The views and conclusions contained in the software and
32 54069d1b Stavros Sachtouris
# documentation are those of the authors and should not be
33 54069d1b Stavros Sachtouris
# interpreted as representing official policies, either expressed
34 54069d1b Stavros Sachtouris
# or implied, of GRNET S.A.
35 54069d1b Stavros Sachtouris
36 54069d1b Stavros Sachtouris
37 d1304043 Stavros Sachtouris
from kamaki.clients.commissioning import (
38 d1304043 Stavros Sachtouris
    CanonifyException,
39 d1304043 Stavros Sachtouris
    SpecifyException,
40 d1304043 Stavros Sachtouris
    Specificator,
41 d1304043 Stavros Sachtouris
    Null,
42 d1304043 Stavros Sachtouris
    Integer,
43 d1304043 Stavros Sachtouris
    Text,
44 d1304043 Stavros Sachtouris
    Tuple,
45 d1304043 Stavros Sachtouris
    ListOf,
46 d1304043 Stavros Sachtouris
    Dict,
47 d1304043 Stavros Sachtouris
    Args)
48 54069d1b Stavros Sachtouris
from random import choice, randint
49 54069d1b Stavros Sachtouris
50 d1304043 Stavros Sachtouris
Context = Dict(classname='Context', null=True, show=False)
51 d1304043 Stavros Sachtouris
52 54069d1b Stavros Sachtouris
53 54069d1b Stavros Sachtouris
class Name(Text):
54 54069d1b Stavros Sachtouris
    def init(self):
55 d1304043 Stavros Sachtouris
        self.opts.update({'regex': "[\w.:@+/-]+", 'maxlen': 512})
56 54069d1b Stavros Sachtouris
        Text.init(self)
57 54069d1b Stavros Sachtouris
58 54069d1b Stavros Sachtouris
    def _random_choice(self, kw):
59 54069d1b Stavros Sachtouris
        alphabet = u'abcdef_1233490.:@/-αβγδεζ'
60 54069d1b Stavros Sachtouris
        length = randint(1, 48)
61 54069d1b Stavros Sachtouris
        return ''.join(choice(alphabet) for _ in xrange(length))
62 54069d1b Stavros Sachtouris
63 d1304043 Stavros Sachtouris
64 54069d1b Stavros Sachtouris
class Nonnegative(Integer):
65 54069d1b Stavros Sachtouris
    def init(self):
66 54069d1b Stavros Sachtouris
        self.opts.update({'minimum': 0})
67 54069d1b Stavros Sachtouris
68 d1304043 Stavros Sachtouris
69 54069d1b Stavros Sachtouris
class Positive(Integer):
70 54069d1b Stavros Sachtouris
    def init(self):
71 54069d1b Stavros Sachtouris
        self.opts.update({'minimum': 1})
72 54069d1b Stavros Sachtouris
73 d1304043 Stavros Sachtouris
74 6764f588 Stavros Sachtouris
QH_PRACTICALLY_INFINITE = 10 ** 32
75 d1304043 Stavros Sachtouris
76 d1304043 Stavros Sachtouris
Serial = Positive(classname='Serial')
77 d1304043 Stavros Sachtouris
78 d1304043 Stavros Sachtouris
ClientKey = Name(classname='ClientKey')
79 d1304043 Stavros Sachtouris
Nothing = Null(classname='Nothing')
80 d1304043 Stavros Sachtouris
81 d1304043 Stavros Sachtouris
Entity = Name(classname='Entity')
82 d1304043 Stavros Sachtouris
Owner = Name(classname='Owner')
83 d1304043 Stavros Sachtouris
Key = Text(classname='Key')
84 d1304043 Stavros Sachtouris
NewKey = Text(classname='Newkey')
85 d1304043 Stavros Sachtouris
OwnerKey = Text(classname='OwnerKey')
86 d1304043 Stavros Sachtouris
Resource = Name(classname='Resource')
87 d1304043 Stavros Sachtouris
Policy = Name(classname='Policy')
88 d1304043 Stavros Sachtouris
89 d1304043 Stavros Sachtouris
Quantity = Integer(classname='Quantity')
90 d1304043 Stavros Sachtouris
Capacity = Nonnegative(classname='Capacity')
91 d1304043 Stavros Sachtouris
ImportLimit = Nonnegative(classname='ImportLimit')
92 d1304043 Stavros Sachtouris
ExportLimit = Nonnegative(classname='ExportLimit')
93 d1304043 Stavros Sachtouris
QuantityDelta = Integer(classname='QuantityDelta')
94 d1304043 Stavros Sachtouris
CapacityDelta = Integer(classname='CapacityDelta')
95 d1304043 Stavros Sachtouris
ImportLimitDelta = Integer(classname='ImportLimitDelta')
96 d1304043 Stavros Sachtouris
ExportLimitDelta = Integer(classname='ExportLimitDelta')
97 d1304043 Stavros Sachtouris
Imported = Nonnegative(classname='Imported')
98 d1304043 Stavros Sachtouris
Exported = Nonnegative(classname='Exported')
99 d1304043 Stavros Sachtouris
Returned = Nonnegative(classname='Returned')
100 d1304043 Stavros Sachtouris
Released = Nonnegative(classname='Released')
101 d1304043 Stavros Sachtouris
Flags = Nonnegative(classname='Flags')
102 d1304043 Stavros Sachtouris
Index = Nonnegative(classname='Index')
103 d1304043 Stavros Sachtouris
104 d1304043 Stavros Sachtouris
Timepoint = Text(classname='Timepoint', maxlen=24)
105 d1304043 Stavros Sachtouris
Reason = Text(classname='Reason', regex='(ACCEPT|REJECT):.*', maxlen=128)
106 d1304043 Stavros Sachtouris
107 54069d1b Stavros Sachtouris
108 54069d1b Stavros Sachtouris
class QuotaholderAPI(Specificator):
109 54069d1b Stavros Sachtouris
110 d1304043 Stavros Sachtouris
    def create_entity(
111 d1304043 Stavros Sachtouris
        self,
112 d1304043 Stavros Sachtouris
        context=Context,
113 d1304043 Stavros Sachtouris
        create_entity=ListOf(Entity, Owner, Key, OwnerKey,
114 d1304043 Stavros Sachtouris
        nonempty=1)
115 d1304043 Stavros Sachtouris
    ):
116 54069d1b Stavros Sachtouris
        rejected = ListOf(Index)
117 54069d1b Stavros Sachtouris
        return rejected
118 54069d1b Stavros Sachtouris
119 d1304043 Stavros Sachtouris
    def set_entity_key(
120 d1304043 Stavros Sachtouris
        self,
121 d1304043 Stavros Sachtouris
        context=Context,
122 d1304043 Stavros Sachtouris
        set_entity_key=ListOf(Entity, Key, NewKey)
123 d1304043 Stavros Sachtouris
    ):
124 54069d1b Stavros Sachtouris
        rejected = ListOf(Entity)
125 54069d1b Stavros Sachtouris
        return rejected
126 54069d1b Stavros Sachtouris
127 d1304043 Stavros Sachtouris
    def list_entities(
128 d1304043 Stavros Sachtouris
        self,
129 d1304043 Stavros Sachtouris
        context=Context,
130 d1304043 Stavros Sachtouris
        entity=Entity,
131 d1304043 Stavros Sachtouris
        key=Key
132 d1304043 Stavros Sachtouris
    ):
133 54069d1b Stavros Sachtouris
        entities = ListOf(Entity)
134 54069d1b Stavros Sachtouris
        return entities
135 54069d1b Stavros Sachtouris
136 d1304043 Stavros Sachtouris
    def get_entity(
137 d1304043 Stavros Sachtouris
        self,
138 d1304043 Stavros Sachtouris
        context=Context,
139 d1304043 Stavros Sachtouris
        get_entity=ListOf(Entity, Key, nonempty=1)
140 d1304043 Stavros Sachtouris
    ):
141 54069d1b Stavros Sachtouris
        entities = ListOf(Entity, Owner)
142 54069d1b Stavros Sachtouris
        return entities
143 54069d1b Stavros Sachtouris
144 d1304043 Stavros Sachtouris
    def get_limits(
145 d1304043 Stavros Sachtouris
        self,
146 d1304043 Stavros Sachtouris
        context=Context,
147 d1304043 Stavros Sachtouris
        get_limits=ListOf(Policy, nonempty=1)
148 d1304043 Stavros Sachtouris
    ):
149 54069d1b Stavros Sachtouris
        limits = ListOf(Policy, Quantity, Capacity,
150 54069d1b Stavros Sachtouris
                        ImportLimit, ExportLimit)
151 54069d1b Stavros Sachtouris
        return limits
152 54069d1b Stavros Sachtouris
153 d1304043 Stavros Sachtouris
    def set_limits(
154 d1304043 Stavros Sachtouris
        self,
155 d1304043 Stavros Sachtouris
        context=Context,
156 d1304043 Stavros Sachtouris
        set_limits=ListOf(
157 d1304043 Stavros Sachtouris
            Policy,
158 d1304043 Stavros Sachtouris
            Quantity,
159 d1304043 Stavros Sachtouris
            Capacity,
160 d1304043 Stavros Sachtouris
            ImportLimit,
161 d1304043 Stavros Sachtouris
            ExportLimit,
162 d1304043 Stavros Sachtouris
            nonempty=1)
163 d1304043 Stavros Sachtouris
    ):
164 54069d1b Stavros Sachtouris
        rejected = ListOf(Policy)
165 54069d1b Stavros Sachtouris
        return rejected
166 54069d1b Stavros Sachtouris
167 d1304043 Stavros Sachtouris
    def get_holding(
168 d1304043 Stavros Sachtouris
        self,
169 d1304043 Stavros Sachtouris
        context=Context,
170 d1304043 Stavros Sachtouris
        get_holding=ListOf(Entity, Resource, Key)
171 d1304043 Stavros Sachtouris
    ):
172 6764f588 Stavros Sachtouris
        holdings = ListOf(
173 6764f588 Stavros Sachtouris
            Entity,
174 6764f588 Stavros Sachtouris
            Resource,
175 6764f588 Stavros Sachtouris
            Policy,
176 6764f588 Stavros Sachtouris
            Imported,
177 6764f588 Stavros Sachtouris
            Exported,
178 6764f588 Stavros Sachtouris
            Returned,
179 6764f588 Stavros Sachtouris
            Released,
180 6764f588 Stavros Sachtouris
            Flags)
181 54069d1b Stavros Sachtouris
        return holdings
182 54069d1b Stavros Sachtouris
183 d1304043 Stavros Sachtouris
    def set_holding(
184 d1304043 Stavros Sachtouris
        self,
185 d1304043 Stavros Sachtouris
        context=Context,
186 d1304043 Stavros Sachtouris
        set_holding=ListOf(Entity, Resource, Key, Policy, Flags)
187 d1304043 Stavros Sachtouris
    ):
188 54069d1b Stavros Sachtouris
        rejected = ListOf(Entity, Resource, Policy)
189 54069d1b Stavros Sachtouris
        return rejected
190 54069d1b Stavros Sachtouris
191 d1304043 Stavros Sachtouris
    def init_holding(
192 d1304043 Stavros Sachtouris
        self,
193 d1304043 Stavros Sachtouris
        context=Context,
194 d1304043 Stavros Sachtouris
        init_holding=ListOf(
195 d1304043 Stavros Sachtouris
            Entity,
196 d1304043 Stavros Sachtouris
            Resource,
197 d1304043 Stavros Sachtouris
            Key,
198 d1304043 Stavros Sachtouris
            Policy,
199 d1304043 Stavros Sachtouris
            Imported,
200 d1304043 Stavros Sachtouris
            Exported,
201 d1304043 Stavros Sachtouris
            Returned,
202 d1304043 Stavros Sachtouris
            Released,
203 d1304043 Stavros Sachtouris
            Flags)
204 d1304043 Stavros Sachtouris
    ):
205 54069d1b Stavros Sachtouris
        rejected = ListOf(Index)
206 54069d1b Stavros Sachtouris
        return rejected
207 54069d1b Stavros Sachtouris
208 d1304043 Stavros Sachtouris
    def reset_holding(
209 d1304043 Stavros Sachtouris
        self,
210 d1304043 Stavros Sachtouris
        context=Context,
211 d1304043 Stavros Sachtouris
        reset_holding=ListOf(
212 d1304043 Stavros Sachtouris
            Entity,
213 d1304043 Stavros Sachtouris
            Resource,
214 d1304043 Stavros Sachtouris
            Key,
215 d1304043 Stavros Sachtouris
            Imported,
216 d1304043 Stavros Sachtouris
            Exported,
217 d1304043 Stavros Sachtouris
            Returned,
218 d1304043 Stavros Sachtouris
            Released)
219 d1304043 Stavros Sachtouris
    ):
220 54069d1b Stavros Sachtouris
        rejected = ListOf(Index)
221 54069d1b Stavros Sachtouris
        return rejected
222 54069d1b Stavros Sachtouris
223 d1304043 Stavros Sachtouris
    def release_holding(
224 d1304043 Stavros Sachtouris
        self,
225 d1304043 Stavros Sachtouris
        context=Context,
226 d1304043 Stavros Sachtouris
        release_holding=ListOf(Entity, Resource, Key)
227 d1304043 Stavros Sachtouris
    ):
228 54069d1b Stavros Sachtouris
        rejected = ListOf(Index)
229 54069d1b Stavros Sachtouris
        return rejected
230 54069d1b Stavros Sachtouris
231 d1304043 Stavros Sachtouris
    def list_resources(self, context=Context, entity=Entity, key=Key):
232 54069d1b Stavros Sachtouris
        resources = ListOf(Resource)
233 54069d1b Stavros Sachtouris
        return resources
234 54069d1b Stavros Sachtouris
235 d1304043 Stavros Sachtouris
    def list_holdings(
236 d1304043 Stavros Sachtouris
        self,
237 d1304043 Stavros Sachtouris
        context=Context,
238 d1304043 Stavros Sachtouris
        list_holdings=ListOf(Entity, Key)
239 d1304043 Stavros Sachtouris
    ):
240 54069d1b Stavros Sachtouris
        rejected = ListOf(Entity)
241 54069d1b Stavros Sachtouris
        holdings_list = ListOf(ListOf(Entity, Resource,
242 54069d1b Stavros Sachtouris
                                      Imported, Exported,
243 54069d1b Stavros Sachtouris
                                      Returned, Released))
244 54069d1b Stavros Sachtouris
        return Tuple(holdings_list, rejected)
245 54069d1b Stavros Sachtouris
246 d1304043 Stavros Sachtouris
    def get_quota(
247 d1304043 Stavros Sachtouris
        self,
248 d1304043 Stavros Sachtouris
        context=Context,
249 d1304043 Stavros Sachtouris
        get_quota=ListOf(Entity, Resource, Key)
250 d1304043 Stavros Sachtouris
    ):
251 54069d1b Stavros Sachtouris
        quotas = ListOf(Entity, Resource,
252 54069d1b Stavros Sachtouris
                        Quantity, Capacity,
253 54069d1b Stavros Sachtouris
                        ImportLimit, ExportLimit,
254 54069d1b Stavros Sachtouris
                        Imported, Exported,
255 54069d1b Stavros Sachtouris
                        Returned, Released,
256 54069d1b Stavros Sachtouris
                        Flags)
257 54069d1b Stavros Sachtouris
        return quotas
258 54069d1b Stavros Sachtouris
259 d1304043 Stavros Sachtouris
    def set_quota(
260 d1304043 Stavros Sachtouris
        self,
261 d1304043 Stavros Sachtouris
        context=Context,
262 d1304043 Stavros Sachtouris
        set_quota=ListOf(
263 d1304043 Stavros Sachtouris
            Entity,
264 d1304043 Stavros Sachtouris
            Resource,
265 d1304043 Stavros Sachtouris
            Key,
266 d1304043 Stavros Sachtouris
            Quantity,
267 d1304043 Stavros Sachtouris
            Capacity,
268 d1304043 Stavros Sachtouris
            ImportLimit,
269 d1304043 Stavros Sachtouris
            ExportLimit,
270 d1304043 Stavros Sachtouris
            Flags)
271 d1304043 Stavros Sachtouris
    ):
272 d1304043 Stavros Sachtouris
        rejected = ListOf(Entity, Resource)
273 d1304043 Stavros Sachtouris
        return rejected
274 d1304043 Stavros Sachtouris
275 d1304043 Stavros Sachtouris
    def add_quota(
276 d1304043 Stavros Sachtouris
        self,
277 d1304043 Stavros Sachtouris
        context=Context,
278 d1304043 Stavros Sachtouris
        clientkey=ClientKey,
279 d1304043 Stavros Sachtouris
        serial=Serial,
280 d1304043 Stavros Sachtouris
        sub_quota=ListOf(
281 d1304043 Stavros Sachtouris
            Entity,
282 d1304043 Stavros Sachtouris
            Resource,
283 d1304043 Stavros Sachtouris
            Key,
284 d1304043 Stavros Sachtouris
            QuantityDelta,
285 d1304043 Stavros Sachtouris
            CapacityDelta,
286 d1304043 Stavros Sachtouris
            ImportLimitDelta,
287 d1304043 Stavros Sachtouris
            ExportLimitDelta),
288 d1304043 Stavros Sachtouris
        add_quota=ListOf(
289 d1304043 Stavros Sachtouris
            Entity,
290 d1304043 Stavros Sachtouris
            Resource,
291 d1304043 Stavros Sachtouris
            Key,
292 d1304043 Stavros Sachtouris
            QuantityDelta,
293 d1304043 Stavros Sachtouris
            CapacityDelta,
294 d1304043 Stavros Sachtouris
            ImportLimitDelta,
295 d1304043 Stavros Sachtouris
            ExportLimitDelta)
296 d1304043 Stavros Sachtouris
    ):
297 54069d1b Stavros Sachtouris
        rejected = ListOf(Entity, Resource)
298 54069d1b Stavros Sachtouris
        return rejected
299 54069d1b Stavros Sachtouris
300 d1304043 Stavros Sachtouris
    def query_serials(
301 d1304043 Stavros Sachtouris
        self,
302 d1304043 Stavros Sachtouris
        context=Context,
303 d1304043 Stavros Sachtouris
        clientkey=ClientKey,
304 d1304043 Stavros Sachtouris
        serials=ListOf(Serial)
305 d1304043 Stavros Sachtouris
    ):
306 d1304043 Stavros Sachtouris
        return ListOf(Serial)
307 d1304043 Stavros Sachtouris
308 d1304043 Stavros Sachtouris
    def ack_serials(
309 d1304043 Stavros Sachtouris
        self,
310 d1304043 Stavros Sachtouris
        context=Context,
311 d1304043 Stavros Sachtouris
        clientkey=ClientKey,
312 d1304043 Stavros Sachtouris
        serials=ListOf(Serial)
313 d1304043 Stavros Sachtouris
    ):
314 d1304043 Stavros Sachtouris
        return Nothing
315 d1304043 Stavros Sachtouris
316 d1304043 Stavros Sachtouris
    def issue_commission(
317 d1304043 Stavros Sachtouris
        self,
318 d1304043 Stavros Sachtouris
        context=Context,
319 d1304043 Stavros Sachtouris
        target=Entity,
320 d1304043 Stavros Sachtouris
        key=Key,
321 d1304043 Stavros Sachtouris
        clientkey=ClientKey,
322 d1304043 Stavros Sachtouris
        name=Text(default=''),
323 d1304043 Stavros Sachtouris
        provisions=ListOf(Entity, Resource, Quantity)
324 d1304043 Stavros Sachtouris
    ):
325 54069d1b Stavros Sachtouris
        return Serial
326 54069d1b Stavros Sachtouris
327 d1304043 Stavros Sachtouris
    def accept_commission(
328 d1304043 Stavros Sachtouris
        self,
329 d1304043 Stavros Sachtouris
        context=Context,
330 d1304043 Stavros Sachtouris
        clientkey=ClientKey,
331 d1304043 Stavros Sachtouris
        serials=ListOf(Serial),
332 d1304043 Stavros Sachtouris
        reason=Text(default='ACCEPT')
333 d1304043 Stavros Sachtouris
    ):
334 54069d1b Stavros Sachtouris
        return Nothing
335 54069d1b Stavros Sachtouris
336 d1304043 Stavros Sachtouris
    def reject_commission(
337 d1304043 Stavros Sachtouris
        self,
338 d1304043 Stavros Sachtouris
        context=Context,
339 d1304043 Stavros Sachtouris
        clientkey=ClientKey,
340 d1304043 Stavros Sachtouris
        serials=ListOf(Serial),
341 d1304043 Stavros Sachtouris
        reason=Text(default='REJECT')
342 d1304043 Stavros Sachtouris
    ):
343 54069d1b Stavros Sachtouris
        return Nothing
344 54069d1b Stavros Sachtouris
345 d1304043 Stavros Sachtouris
    def get_pending_commissions(
346 d1304043 Stavros Sachtouris
        self,
347 d1304043 Stavros Sachtouris
        context=Context,
348 d1304043 Stavros Sachtouris
        clientkey=ClientKey
349 d1304043 Stavros Sachtouris
    ):
350 54069d1b Stavros Sachtouris
        pending = ListOf(Serial)
351 54069d1b Stavros Sachtouris
        return pending
352 54069d1b Stavros Sachtouris
353 d1304043 Stavros Sachtouris
    def resolve_pending_commissions(
354 d1304043 Stavros Sachtouris
        self,
355 d1304043 Stavros Sachtouris
        context=Context,
356 d1304043 Stavros Sachtouris
        clientkey=ClientKey,
357 d1304043 Stavros Sachtouris
        max_serial=Serial,
358 d1304043 Stavros Sachtouris
        accept_set=ListOf(Serial)
359 d1304043 Stavros Sachtouris
    ):
360 54069d1b Stavros Sachtouris
        return Nothing
361 54069d1b Stavros Sachtouris
362 d1304043 Stavros Sachtouris
    def release_entity(
363 d1304043 Stavros Sachtouris
        self,
364 d1304043 Stavros Sachtouris
        context=Context,
365 d1304043 Stavros Sachtouris
        release_entity=ListOf(Entity, Key, nonempty=1)
366 d1304043 Stavros Sachtouris
    ):
367 54069d1b Stavros Sachtouris
        rejected = ListOf(Entity)
368 54069d1b Stavros Sachtouris
        return rejected
369 54069d1b Stavros Sachtouris
370 d1304043 Stavros Sachtouris
    def get_timeline(
371 d1304043 Stavros Sachtouris
        self,
372 d1304043 Stavros Sachtouris
        context=Context,
373 d1304043 Stavros Sachtouris
        after=Timepoint,
374 d1304043 Stavros Sachtouris
        before=Timepoint,
375 d1304043 Stavros Sachtouris
        get_timeline=ListOf(Entity, Resource, Key)
376 d1304043 Stavros Sachtouris
    ):
377 54069d1b Stavros Sachtouris
        timeline = ListOf(Dict(
378 d1304043 Stavros Sachtouris
            serial=Serial,
379 d1304043 Stavros Sachtouris
            source=Entity,
380 d1304043 Stavros Sachtouris
            target=Entity,
381 d1304043 Stavros Sachtouris
            resource=Resource,
382 d1304043 Stavros Sachtouris
            name=Name(),
383 d1304043 Stavros Sachtouris
            quantity=Quantity,
384 d1304043 Stavros Sachtouris
            source_allocated=Quantity,
385 d1304043 Stavros Sachtouris
            source_allocated_through=Quantity,
386 d1304043 Stavros Sachtouris
            source_inbound=Quantity,
387 d1304043 Stavros Sachtouris
            source_inbound_through=Quantity,
388 d1304043 Stavros Sachtouris
            source_outbound=Quantity,
389 d1304043 Stavros Sachtouris
            source_outbound_through=Quantity,
390 d1304043 Stavros Sachtouris
            target_allocated=Quantity,
391 d1304043 Stavros Sachtouris
            target_allocated_through=Quantity,
392 d1304043 Stavros Sachtouris
            target_inbound=Quantity,
393 d1304043 Stavros Sachtouris
            target_inbound_through=Quantity,
394 d1304043 Stavros Sachtouris
            target_outbound=Quantity,
395 d1304043 Stavros Sachtouris
            target_outbound_through=Quantity,
396 d1304043 Stavros Sachtouris
            issue_time=Timepoint,
397 d1304043 Stavros Sachtouris
            log_time=Timepoint,
398 d1304043 Stavros Sachtouris
            reason=Reason,
399 d1304043 Stavros Sachtouris
            strict=True))
400 54069d1b Stavros Sachtouris
        return timeline