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