def Resolve(self, env, resolved_params):
logging.log(1, 'Resolving ' + self.name)
# TODO(byungchul): Support names in different modules.
states = env['_current_module'].states
if self.name not in states:
did_you_mean = stl.levenshtein.closest_candidate(self.name, states.keys())
raise NameError('Cannot find a state to expand: %s. Did you mean %s?' %
(self.name, did_you_mean))
found = states[self.name]
if len(self.param_values) != len(found.params):
raise TypeError('Wrong number of parameters: %s. '
'Found %d params, expected %d params.' %
(found.name, len(found.params), len(self.param_values)))
resolved_state = StateResolved(self.name, found)
for v in self.param_values:
resolved_state.resolved_params.append(v.Resolve(env, resolved_params))
for v in found.values:
if self.value == v:
return StateValue(resolved_state, v)
did_you_mean = stl.levenshtein.closest_candidate(self.value, found.values)
raise NameError('Invalid value in state %s: %s. Did you mean %s?' %
(self.name, self.value, did_you_mean))
评论列表
文章目录