From 9cf023a0c62bd51e903f9af217140cfad68333d2 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 13 Aug 2025 08:32:19 -0400 Subject: [PATCH] #19739: Include tab character as CSV delimiter choice --- netbox/netbox/constants.py | 1 + netbox/netbox/preferences.py | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/netbox/netbox/constants.py b/netbox/netbox/constants.py index aeeeae90e..7a8d54ca8 100644 --- a/netbox/netbox/constants.py +++ b/netbox/netbox/constants.py @@ -66,4 +66,5 @@ CSV_DELIMITERS = { 'comma': ',', 'semicolon': ';', 'pipe': '|', + 'tab': '\t', } diff --git a/netbox/netbox/preferences.py b/netbox/netbox/preferences.py index b537679b3..f69d2abc7 100644 --- a/netbox/netbox/preferences.py +++ b/netbox/netbox/preferences.py @@ -1,6 +1,7 @@ from django.conf import settings from django.utils.translation import gettext_lazy as _ +from netbox.constants import CSV_DELIMITERS from netbox.registry import registry from users.preferences import UserPreference from utilities.paginator import EnhancedPaginator @@ -12,6 +13,16 @@ def get_page_lengths(): ] +def get_csv_delimiters(): + choices = [] + for k, v in CSV_DELIMITERS.items(): + label = _(k.title()) + if v.strip(): + label = f'{label} ({v})' + choices.append((k, label)) + return choices + + PREFERENCES = { # User interface @@ -74,11 +85,7 @@ PREFERENCES = { ), 'csv_delimiter': UserPreference( label=_('CSV delimiter'), - choices=( - ('comma', 'Comma (,)'), - ('semicolon', 'Semicolon (;)'), - ('pipe', 'Pipe (|)'), - ), + choices=get_csv_delimiters(), default='comma', description=_('The character used to separate fields in CSV data') ),