110 |
110 |
|
111 |
111 |
|
112 |
112 |
class LazyLinkedFormData(object):
|
|
113 |
__part = None
|
|
114 |
|
113 |
115 |
def __init__(self, part):
|
114 |
116 |
self.__part = part
|
115 |
117 |
|
... | ... | |
131 |
133 |
|
132 |
134 |
|
133 |
135 |
class LinkedFormdataSubstitutionProxy(object):
|
134 |
|
def __init__(self, parts):
|
135 |
|
self.__parts = parts
|
136 |
|
self.__formdatas = [(part.varname, part, LazyLinkedFormData(part)) for part in parts]
|
137 |
|
self.__formdatas.reverse()
|
138 |
|
self.__varnames = set(varname for varname, _1, _2 in self.__formdatas)
|
139 |
|
self.__varname = None
|
|
136 |
__varname = None
|
|
137 |
|
|
138 |
def __init__(self, formdata):
|
|
139 |
self.formdata = formdata
|
|
140 |
|
|
141 |
@property
|
|
142 |
def __parts(self):
|
|
143 |
return [part for part in self.formdata.iter_evolution_parts()
|
|
144 |
if isinstance(part, LinkedFormdataEvolutionPart)]
|
|
145 |
|
|
146 |
@property
|
|
147 |
def __formdatas(self):
|
|
148 |
formdatas = [(part.varname, part, LazyLinkedFormData(part)) for part in self.__parts]
|
|
149 |
formdatas.reverse()
|
|
150 |
return formdatas
|
|
151 |
|
|
152 |
@property
|
|
153 |
def __varnames(self):
|
|
154 |
return set(varname for varname, _1, _2 in self.__formdatas)
|
140 |
155 |
|
141 |
156 |
def __iter__(self):
|
142 |
|
for varname, part, formdata in self.__formdatas:
|
|
157 |
for varname, part, formdata in self.__formdatas or []:
|
143 |
158 |
if self.__varname is None or self.__varname == varname:
|
144 |
159 |
yield formdata
|
145 |
160 |
|
... | ... | |
147 |
162 |
return list(self)[idx]
|
148 |
163 |
|
149 |
164 |
def __getattr__(self, name):
|
150 |
|
if self.__varname or name not in self.__varnames:
|
|
165 |
if name.startswith('__'):
|
|
166 |
raise AttributeError(name)
|
|
167 |
|
|
168 |
if self.__varname or name not in (self.__varnames or []):
|
151 |
169 |
try:
|
152 |
170 |
first = self[0]
|
153 |
|
except KeyError:
|
|
171 |
except IndexError:
|
154 |
172 |
raise AttributeError(name)
|
155 |
173 |
return getattr(first, name)
|
156 |
|
elif name in self.__varnames:
|
|
174 |
elif name in (self.__varnames or []):
|
157 |
175 |
new_sub = copy.copy(self)
|
158 |
176 |
new_sub.varname = name
|
159 |
177 |
return new_sub
|
... | ... | |
193 |
211 |
@classmethod
|
194 |
212 |
def get_substitution_variables(cls, formdata):
|
195 |
213 |
return {
|
196 |
|
'linked': LinkedFormdataSubstitutionProxy(
|
197 |
|
[part for part in formdata.iter_evolution_parts() if isinstance(part, LinkedFormdataEvolutionPart)]),
|
|
214 |
'linked': LinkedFormdataSubstitutionProxy(formdata),
|
198 |
215 |
}
|
199 |
216 |
|
200 |
217 |
@property
|
201 |
|
-
|