Add support for pipe character as delimiting character for bulk imports

This commit is contained in:
Jeremy Stretch 2025-08-13 08:38:57 -04:00
parent f3ecf94393
commit 2004ab7a0e
6 changed files with 6 additions and 11 deletions

View File

@ -151,12 +151,14 @@ class CSVDelimiterChoices(ChoiceSet):
AUTO = 'auto' AUTO = 'auto'
COMMA = CSV_DELIMITERS['comma'] COMMA = CSV_DELIMITERS['comma']
SEMICOLON = CSV_DELIMITERS['semicolon'] SEMICOLON = CSV_DELIMITERS['semicolon']
PIPE = CSV_DELIMITERS['pipe']
TAB = CSV_DELIMITERS['tab'] TAB = CSV_DELIMITERS['tab']
CHOICES = [ CHOICES = [
(AUTO, _('Auto-detect')), (AUTO, _('Auto-detect')),
(COMMA, _('Comma')), (COMMA, _('Comma')),
(SEMICOLON, _('Semicolon')), (SEMICOLON, _('Semicolon')),
(PIPE, _('Pipe')),
(TAB, _('Tab')), (TAB, _('Tab')),
] ]

View File

@ -60,11 +60,3 @@ CENSOR_TOKEN_CHANGED = '***CHANGED***'
# Placeholder text for empty tables # Placeholder text for empty tables
EMPTY_TABLE_TEXT = 'No results found' EMPTY_TABLE_TEXT = 'No results found'
# CSV delimiters
CSV_DELIMITERS = {
'comma': ',',
'semicolon': ';',
'pipe': '|',
'tab': '\t',
}

View File

@ -1,9 +1,9 @@
from django.conf import settings from django.conf import settings
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from netbox.constants import CSV_DELIMITERS
from netbox.registry import registry from netbox.registry import registry
from users.preferences import UserPreference from users.preferences import UserPreference
from utilities.constants import CSV_DELIMITERS
from utilities.paginator import EnhancedPaginator from utilities.paginator import EnhancedPaginator

View File

@ -69,6 +69,7 @@ HTTP_REQUEST_META_SAFE_COPY = [
CSV_DELIMITERS = { CSV_DELIMITERS = {
'comma': ',', 'comma': ',',
'semicolon': ';', 'semicolon': ';',
'pipe': '|',
'tab': '\t', 'tab': '\t',
} }

View File

@ -1,7 +1,7 @@
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django_tables2.export import TableExport as TableExport_ from django_tables2.export import TableExport as TableExport_
from netbox.constants import CSV_DELIMITERS from utilities.constants import CSV_DELIMITERS
__all__ = ( __all__ = (
'TableExport', 'TableExport',

View File

@ -115,7 +115,7 @@ class BulkImportForm(ChangelogMessageMixin, BackgroundJobMixin, SyncedDataMixin,
dialect = csv.Sniffer().sniff(data.strip(), delimiters=delimiters) dialect = csv.Sniffer().sniff(data.strip(), delimiters=delimiters)
except csv.Error: except csv.Error:
dialect = csv.excel dialect = csv.excel
elif delimiter in (CSVDelimiterChoices.COMMA, CSVDelimiterChoices.SEMICOLON): elif delimiter in (CSVDelimiterChoices.COMMA, CSVDelimiterChoices.SEMICOLON, CSVDelimiterChoices.PIPE):
dialect = csv.excel dialect = csv.excel
dialect.delimiter = delimiter dialect.delimiter = delimiter
elif delimiter == CSVDelimiterChoices.TAB: elif delimiter == CSVDelimiterChoices.TAB: