Skip to content

Commit 2d1b99e

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

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

rosidl_adapter/rosidl_adapter/parser.py

+14-4
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@
3636
ACTION_RESULT_SERVICE_SUFFIX = '_Result'
3737
ACTION_FEEDBACK_MESSAGE_SUFFIX = '_Feedback'
3838

39-
DEFAULT_ALLOW_LEGACY_FIELD_NAMES=True
39+
# By default, ROS 2 does not allow legacy field names.
40+
# https://docs.ros.org/en/rolling/Concepts/Basic/About-Interfaces.html#field-names
41+
DEFAULT_ALLOW_LEGACY_FIELD_NAMES=False
4042

4143
PRIMITIVE_TYPES = [
4244
'bool',
@@ -69,7 +71,7 @@
6971
'$')
7072
VALID_FIELD_NAME_PATTERN = VALID_PACKAGE_NAME_PATTERN
7173
# relaxed patterns used for compatibility with ROS 1 messages
72-
# VALID_FIELD_NAME_PATTERN = re.compile('^[A-Za-z][A-Za-z0-9_]*$')
74+
RELAXED_FIELD_NAME_PATTERN = re.compile('^[A-Za-z][A-Za-z0-9_]*$')
7375
VALID_MESSAGE_NAME_PATTERN = re.compile('^[A-Z][A-Za-z0-9]*$')
7476
# relaxed patterns used for compatibility with ROS 1 messages
7577
# VALID_MESSAGE_NAME_PATTERN = re.compile('^[A-Za-z][A-Za-z0-9]*$')
@@ -117,8 +119,16 @@ def is_valid_package_name(name):
117119
raise InvalidResourceName(name)
118120
return m is not None and m.group(0) == name
119121

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

121-
def is_valid_field_name(name):
129+
def is_valid_field_name(name, allow_legacy_field_names=DEFAULT_ALLOW_LEGACY_FIELD_NAMES):
130+
if allow_legacy_field_names:
131+
return is_valid_legacy_field_name(name)
122132
try:
123133
m = VALID_FIELD_NAME_PATTERN.match(name)
124134
except TypeError:
@@ -353,7 +363,7 @@ def __init__(self, type_, name, default_value_string=None, *, allow_legacy_field
353363
"the field type '%s' must be a 'Type' instance" % type_)
354364
self.type = type_
355365
if not allow_legacy_field_naming:
356-
if not is_valid_field_name(name):
366+
if not is_valid_field_name(name, allow_legacy_field_name=allow_legacy_field_naming):
357367
raise NameError(
358368
"'{}' is an invalid field name. It should have the pattern '{}'".format(
359369
name, VALID_FIELD_NAME_PATTERN.pattern))

0 commit comments

Comments
 (0)