Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
line = line.decode('utf-8')
# Skip commented lines.
if self.comment_regex.match(line):
continue
if line.startswith('Value '):
try:
value = TextFSMValue(
fsm=self, max_name_len=self.MAX_NAME_LEN,
options_class=self._options_cls)
value.Parse(line)
except TextFSMTemplateError as error:
raise TextFSMTemplateError('%s Line %s.' % (error, self._line_num))
if value.name in self.header:
raise TextFSMTemplateError(
"Duplicate declarations for Value '%s'. Line: %s."
% (value.name, self._line_num))
try:
self._ValidateOptions(value)
except TextFSMTemplateError as error:
raise TextFSMTemplateError('%s Line %s.' % (error, self._line_num))
self.values.append(value)
self.value_map[value.name] = value.template
# The line has text but without the 'Value ' prefix.
elif not self.values:
raise TextFSMTemplateError('No Value definitions found.')
else:
raise TextFSMTemplateError(
'Expected blank line after last Value entry. Line: %s.'
if value.name in self.header:
raise TextFSMTemplateError(
"Duplicate declarations for Value '%s'. Line: %s."
% (value.name, self._line_num))
try:
self._ValidateOptions(value)
except TextFSMTemplateError as error:
raise TextFSMTemplateError('%s Line %s.' % (error, self._line_num))
self.values.append(value)
self.value_map[value.name] = value.template
# The line has text but without the 'Value ' prefix.
elif not self.values:
raise TextFSMTemplateError('No Value definitions found.')
else:
raise TextFSMTemplateError(
'Expected blank line after last Value entry. Line: %s.'
% (self._line_num))
name: (str), the name of the Option to add.
Raises:
TextFSMTemplateError: If option is already present or
the option does not exist.
"""
# Check for duplicate option declaration
if name in [option.name for option in self.options]:
raise TextFSMTemplateError('Duplicate option "%s"' % name)
# Create the option object
try:
option = self._options_cls.GetOption(name)(self)
except AttributeError:
raise TextFSMTemplateError('Unknown option "%s"' % name)
self.options.append(option)
def _Parse(self, template):
"""Parses template file for FSM structure.
Args:
template: Valid template file.
Raises:
TextFSMTemplateError: If template file syntax is invalid.
"""
if not template:
raise TextFSMTemplateError('Null template.')
# Parse header with Variables.
self._ParseFSMVariables(template)
# Parse States.
while self._ParseFSMState(template):
pass
# Validate destination states.
self._ValidateFSM()
Each destination state must exist, be a valid name and
not be a reserved name.
There must be a 'Start' state and if 'EOF' or 'End' states are specified,
they must be empty.
Returns:
True if FSM is valid.
Raises:
TextFSMTemplateError: If any state definitions are invalid.
"""
# Must have 'Start' state.
if 'Start' not in self.states:
raise TextFSMTemplateError("Missing state 'Start'.")
# 'End/EOF' state (if specified) must be empty.
if self.states.get('End'):
raise TextFSMTemplateError("Non-Empty 'End' state.")
if self.states.get('EOF'):
raise TextFSMTemplateError("Non-Empty 'EOF' state.")
# Remove 'End' state.
if 'End' in self.states:
del self.states['End']
self.state_list.remove('End')
# Ensure jump states are all valid.
for state in self.states:
for rule in self.states[state]:
True if FSM is valid.
Raises:
TextFSMTemplateError: If any state definitions are invalid.
"""
# Must have 'Start' state.
if 'Start' not in self.states:
raise TextFSMTemplateError("Missing state 'Start'.")
# 'End/EOF' state (if specified) must be empty.
if self.states.get('End'):
raise TextFSMTemplateError("Non-Empty 'End' state.")
if self.states.get('EOF'):
raise TextFSMTemplateError("Non-Empty 'EOF' state.")
# Remove 'End' state.
if 'End' in self.states:
del self.states['End']
self.state_list.remove('End')
# Ensure jump states are all valid.
for state in self.states:
for rule in self.states[state]:
if rule.line_op == 'Error':
continue
if not rule.new_state or rule.new_state in ('End', 'EOF'):
continue
if rule.new_state not in self.states:
they must be empty.
Returns:
True if FSM is valid.
Raises:
TextFSMTemplateError: If any state definitions are invalid.
"""
# Must have 'Start' state.
if 'Start' not in self.states:
raise TextFSMTemplateError("Missing state 'Start'.")
# 'End/EOF' state (if specified) must be empty.
if self.states.get('End'):
raise TextFSMTemplateError("Non-Empty 'End' state.")
if self.states.get('EOF'):
raise TextFSMTemplateError("Non-Empty 'EOF' state.")
# Remove 'End' state.
if 'End' in self.states:
del self.states['End']
self.state_list.remove('End')
# Ensure jump states are all valid.
for state in self.states:
for rule in self.states[state]:
if rule.line_op == 'Error':
continue
if not rule.new_state or rule.new_state in ('End', 'EOF'):