Statistics
| Branch: | Tag: | Revision:

root / snf-common / synnefo / lib / quotaholder / api / quotaholder.py @ 4ec8c043

History | View | Annotate | Download (12.1 kB)

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