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