Skip to content

Fixes #19379: allow standalone id in vlan-ids range list #20024

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
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
14 changes: 11 additions & 3 deletions netbox/utilities/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,17 @@ def string_to_ranges(value):
return None
value.replace(' ', '') # Remove whitespace
values = []
for dash_range in value.split(','):
if '-' not in dash_range:
for data in value.split(','):
dash_range = data.strip().split('-')
if len(dash_range) == 1 and str(dash_range[0]).isdigit():
# Single integer value; expand to a range
lower = dash_range[0]
upper = dash_range[0]
elif len(dash_range) == 2 and str(dash_range[0]).isdigit() and str(dash_range[1]).isdigit():
# The range has two values and both are valid integers
lower = dash_range[0]
upper = dash_range[1]
else:
return None
lower, upper = dash_range.split('-')
values.append(NumericRange(int(lower), int(upper), bounds='[]'))
return values
6 changes: 4 additions & 2 deletions netbox/utilities/forms/fields/array.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,14 @@ def to_python(self, value):
class NumericRangeArrayField(forms.CharField):
"""
A field which allows for array of numeric ranges:
Example: 1-5,7-20,30-50
Example: 1-5,10,20-30
"""
def __init__(self, *args, help_text='', **kwargs):
if not help_text:
help_text = mark_safe(
_("Specify one or more numeric ranges separated by commas. Example: " + "<code>1-5,20-30</code>")
_(
"Specify one or more individual numbers or numeric ranges separated by commas. Example: {example}"
).format(example="<code>1-5,10,20-30</code>")
)
super().__init__(*args, help_text=help_text, **kwargs)

Expand Down
14 changes: 14 additions & 0 deletions netbox/utilities/tests/test_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,17 @@ def test_string_to_ranges(self):
NumericRange(100, 199, bounds='[]'), # 100-199
]
)

self.assertEqual(
string_to_ranges('1-2, 5, 10-12'),
[
NumericRange(1, 2, bounds='[]'), # 1-2
NumericRange(5, 5, bounds='[]'), # 5-5
NumericRange(10, 12, bounds='[]'), # 10-12
]
)

self.assertEqual(
string_to_ranges('2-10, a-b'),
None # Fails to convert
)