5 dalobj=None, cache=None):
6
7 if dalobj:
8 setattr(dalobj, '__%s_data' % relation, (data, cache))
9
10 def getter(obj):
11
12 try:
13 val = getattr(obj, '__%s' % relation)
14 except AttributeError:
15 try:
16 ldata, lcache = obj.__dict__.pop('__%s_data' % relation)
17 except KeyError:
18 raise AttributeError
19
20 if not multi:
21 ldata = [ldata]
22
23 val = []
24 for k in ldata:
25 if k.UID() in lcache[k.class_name()]:
26 val.append(lcache[k.class_name()][k.UID()])
27 else:
28 val.append(k.as_dal(lcache))
29
30 if not multi:
31 val = val[0]
32
33 setattr(obj, '__%s' % relation, val)
34
35 return val
36
37 return getter
38
39