csv_import: add auto key column detection (#50157)

This commit is contained in:
Valentin Deniaud 2021-02-23 16:25:03 +01:00
parent 229582db81
commit e895bb0142
2 changed files with 35 additions and 3 deletions

View File

@ -426,7 +426,12 @@ class UserCsvImporter(object):
key_counts = sum(1 for header in self.headers if header.key)
if not key_counts:
self.add_error(Error('missing-key-column', _('Missing key column')))
if self.email_is_unique and 'email' in self.headers_by_name:
self.headers_by_name['email'].key = True
elif self.username_is_unique and 'username' in self.headers_by_name:
self.headers_by_name['username'].key = True
else:
self.add_error(Error('missing-key-column', _('Missing key column')))
if key_counts > 1:
self.add_error(Error('too-many-key-columns', _('Too many key columns')))

View File

@ -121,8 +121,35 @@ def test_unknown_flag_error(profile, user_csv_importer_factory):
assert importer.errors == [LineError('unknown-flag', line=1, column=2)]
def test_missing_key_column_error(profile, user_csv_importer_factory):
importer = user_csv_importer_factory('email,first_name\n1,2')
def test_missing_key_column_error(profile, user_csv_importer_factory, settings):
content = 'email,first_name\ntnoel@entrouvert.com,Thomas'
importer = user_csv_importer_factory(content)
assert not importer.run()
assert importer.has_errors
assert importer.errors == [Error('missing-key-column')]
ou = get_default_ou()
ou.email_is_unique = True
ou.save()
importer = user_csv_importer_factory(content)
assert importer.run()
assert not importer.has_errors
content = 'username,first_name\ntnoel,Thomas'
importer = user_csv_importer_factory(content)
assert importer.run()
assert not importer.has_errors
settings.A2_USERNAME_IS_UNIQUE = False
importer = user_csv_importer_factory(content)
assert not importer.run()
assert importer.has_errors
assert importer.errors == [Error('missing-key-column')]
content = 'last_name,first_name\nNoel,Thomas'
importer = user_csv_importer_factory(content)
assert not importer.run()
assert importer.has_errors
assert importer.errors == [Error('missing-key-column')]