|
36 | 36 | ACTION_RESULT_SERVICE_SUFFIX = '_Result'
|
37 | 37 | ACTION_FEEDBACK_MESSAGE_SUFFIX = '_Feedback'
|
38 | 38 |
|
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 |
40 | 42 |
|
41 | 43 | PRIMITIVE_TYPES = [
|
42 | 44 | 'bool',
|
|
69 | 71 | '$')
|
70 | 72 | VALID_FIELD_NAME_PATTERN = VALID_PACKAGE_NAME_PATTERN
|
71 | 73 | # 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_]*$') |
73 | 75 | VALID_MESSAGE_NAME_PATTERN = re.compile('^[A-Z][A-Za-z0-9]*$')
|
74 | 76 | # relaxed patterns used for compatibility with ROS 1 messages
|
75 | 77 | # VALID_MESSAGE_NAME_PATTERN = re.compile('^[A-Za-z][A-Za-z0-9]*$')
|
@@ -117,8 +119,16 @@ def is_valid_package_name(name):
|
117 | 119 | raise InvalidResourceName(name)
|
118 | 120 | return m is not None and m.group(0) == name
|
119 | 121 |
|
| 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 |
120 | 128 |
|
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) |
122 | 132 | try:
|
123 | 133 | m = VALID_FIELD_NAME_PATTERN.match(name)
|
124 | 134 | except TypeError:
|
@@ -353,7 +363,7 @@ def __init__(self, type_, name, default_value_string=None, *, allow_legacy_field
|
353 | 363 | "the field type '%s' must be a 'Type' instance" % type_)
|
354 | 364 | self.type = type_
|
355 | 365 | 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): |
357 | 367 | raise NameError(
|
358 | 368 | "'{}' is an invalid field name. It should have the pattern '{}'".format(
|
359 | 369 | name, VALID_FIELD_NAME_PATTERN.pattern))
|
|
0 commit comments