Coverage for users/forms/bulk_import.py: 82%
38 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from django import forms
2from django.utils.translation import gettext as _
4from users.choices import TokenVersionChoices
5from users.models import *
6from utilities.forms import CSVModelForm
7from utilities.forms.fields import CSVModelChoiceField, CSVModelMultipleChoiceField
9__all__ = (
10 'GroupImportForm',
11 'OwnerGroupImportForm',
12 'OwnerImportForm',
13 'TokenImportForm',
14 'UserImportForm',
15)
18class GroupImportForm(CSVModelForm):
20 class Meta:
21 model = Group
22 fields = ('name', 'description')
25class UserImportForm(CSVModelForm):
27 class Meta:
28 model = User
29 fields = (
30 'username', 'first_name', 'last_name', 'email', 'password', 'is_active', 'is_superuser'
31 )
33 def save(self, *args, **kwargs):
34 # Set the hashed password
35 self.instance.set_password(self.cleaned_data.get('password'))
37 return super().save(*args, **kwargs)
40class TokenImportForm(CSVModelForm):
41 version = forms.ChoiceField(
42 choices=TokenVersionChoices,
43 initial=TokenVersionChoices.V2,
44 required=False,
45 help_text=_("Specify version 1 or 2 (v2 will be used by default)")
46 )
48 class Meta:
49 model = Token
50 fields = ('user', 'version', 'enabled', 'write_enabled', 'expires', 'description',)
52 def __init__(self, *args, **kwargs):
53 super().__init__(*args, **kwargs)
55 # Disable the user field when updating an existing Token, so a Token's owner cannot be reassigned via
56 # bulk import (consistent with the REST API & UI edit form).
57 if self.instance.pk:
58 self.fields['user'].disabled = True
61class OwnerGroupImportForm(CSVModelForm):
63 class Meta:
64 model = OwnerGroup
65 fields = (
66 'name', 'description',
67 )
70class OwnerImportForm(CSVModelForm):
71 group = CSVModelChoiceField(
72 queryset=OwnerGroup.objects.all(),
73 required=False,
74 to_field_name='name',
75 )
76 user_groups = CSVModelMultipleChoiceField(
77 queryset=Group.objects.all(),
78 required=False,
79 to_field_name='name',
80 )
81 users = CSVModelMultipleChoiceField(
82 queryset=User.objects.all(),
83 required=False,
84 to_field_name='username',
85 )
87 class Meta:
88 model = Owner
89 fields = (
90 'group', 'name', 'description', 'user_groups', 'users',
91 )