Skip to content

Commit 78be3e5

Browse files
committed
Use existing regex for validation for legacy field names
Signed-off-by: Ryan Friedman <[email protected]>
1 parent 7be3579 commit 78be3e5

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

rosidl_adapter/rosidl_adapter/parser.py

+14-5
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@
3636
ACTION_RESULT_SERVICE_SUFFIX = '_Result'
3737
ACTION_FEEDBACK_MESSAGE_SUFFIX = '_Feedback'
3838

39-
DEFAULT_ALLOW_LEGACY_FIELD_NAMES=True
40-
4139
PRIMITIVE_TYPES = [
4240
'bool',
4341
'byte',
@@ -69,12 +67,15 @@
6967
'$')
7068
VALID_FIELD_NAME_PATTERN = VALID_PACKAGE_NAME_PATTERN
7169
# relaxed patterns used for compatibility with ROS 1 messages
72-
# VALID_FIELD_NAME_PATTERN = re.compile('^[A-Za-z][A-Za-z0-9_]*$')
70+
RELAXED_FIELD_NAME_PATTERN = re.compile('^[A-Za-z][A-Za-z0-9_]*$')
7371
VALID_MESSAGE_NAME_PATTERN = re.compile('^[A-Z][A-Za-z0-9]*$')
7472
# relaxed patterns used for compatibility with ROS 1 messages
7573
# VALID_MESSAGE_NAME_PATTERN = re.compile('^[A-Za-z][A-Za-z0-9]*$')
7674
VALID_CONSTANT_NAME_PATTERN = re.compile('^[A-Z]([A-Z0-9_]?[A-Z0-9]+)*$')
7775

76+
# By default, ROS 2 does not allow legacy field names.
77+
# https://docs.ros.org/en/rolling/Concepts/Basic/About-Interfaces.html#field-names
78+
DEFAULT_ALLOW_LEGACY_FIELD_NAMES=False
7879

7980
class InvalidSpecification(Exception):
8081
pass
@@ -117,8 +118,16 @@ def is_valid_package_name(name):
117118
raise InvalidResourceName(name)
118119
return m is not None and m.group(0) == name
119120

121+
def is_valid_legacy_field_name(name):
122+
try:
123+
m = RELAXED_FIELD_NAME_PATTERN.match(name)
124+
except TypeError:
125+
raise InvalidResourceName(name)
126+
return m is not None and m.group(0) == name
120127

121-
def is_valid_field_name(name):
128+
def is_valid_field_name(name, allow_legacy_field_names=DEFAULT_ALLOW_LEGACY_FIELD_NAMES):
129+
if allow_legacy_field_names:
130+
return is_valid_legacy_field_name(name)
122131
try:
123132
m = VALID_FIELD_NAME_PATTERN.match(name)
124133
except TypeError:
@@ -353,7 +362,7 @@ def __init__(self, type_, name, default_value_string=None, *, allow_legacy_field
353362
"the field type '%s' must be a 'Type' instance" % type_)
354363
self.type = type_
355364
if not allow_legacy_field_naming:
356-
if not is_valid_field_name(name):
365+
if not is_valid_field_name(name, allow_legacy_field_name=allow_legacy_field_naming):
357366
raise NameError(
358367
"'{}' is an invalid field name. It should have the pattern '{}'".format(
359368
name, VALID_FIELD_NAME_PATTERN.pattern))

0 commit comments

Comments
 (0)