Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions build/templates/_converters.py.mako
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,17 @@ ${template_parameters['encoding_tag']}
config = template_parameters['metadata'].config
module_name = config['module_name']
extra_errors_used = config['extra_errors_used']
# Drivers that have repeated capabilities but do not generate InvalidRepeatedCapabilityError pass repeated capabilities they cannot parse to the driver as-is
validate_repeated_capabilities = 'InvalidRepeatedCapabilityError' in extra_errors_used or len(config['repeated_capabilities']) == 0
enums = config['enums']
%>\
import ${module_name}._visatype as _visatype
% if any(helper.enum_uses_converter(enums[enum_name]) for enum_name in helper.filter_codegen_enums(enums)):
import ${module_name}.enums as enums
% endif
% if validate_repeated_capabilities:
import ${module_name}.errors as errors
% endif

import array
import collections
Expand Down Expand Up @@ -51,7 +55,11 @@ def _convert_repeated_capabilities(arg, prefix): # noqa: F811
- (slice(0, 1), '2', [4, '5-6'], '7-9', '11:14', '16, 17') -->
['0', '2', '4', '5', '6', '7', '8', '9', '11', '12', '13', '14', '16', '17']
'''
% if validate_repeated_capabilities:
raise errors.InvalidRepeatedCapabilityError('Invalid type', type(arg))
% else:
raise TypeError('Invalid type for a repeated capability: {}'.format(type(arg)))
% endif


@_convert_repeated_capabilities.register(numbers.Integral) # noqa: F811
Expand All @@ -77,9 +85,14 @@ def _(repeated_capability, prefix):
# We remove any prefix and change ':' to '-'
r = repeated_capability.strip().replace(prefix, '').replace(':', '-')
rc = r.split('-')
% if validate_repeated_capabilities:
if len(rc) > 1:
if len(rc) > 2:
raise errors.InvalidRepeatedCapabilityError("Multiple '-' or ':'", repeated_capability)
% else:
# Only a simple range can be expanded. Anything else, such as 'calplane::plane1/port::if1', is returned as-is
if len(rc) == 2:
% endif
try:
start = int(rc[0])
end = int(rc[1])
Expand Down
Loading