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

1from django import forms 

2from django.utils.translation import gettext as _ 

3 

4from users.choices import TokenVersionChoices 

5from users.models import * 

6from utilities.forms import CSVModelForm 

7from utilities.forms.fields import CSVModelChoiceField, CSVModelMultipleChoiceField 

8 

9__all__ = ( 

10 'GroupImportForm', 

11 'OwnerGroupImportForm', 

12 'OwnerImportForm', 

13 'TokenImportForm', 

14 'UserImportForm', 

15) 

16 

17 

18class GroupImportForm(CSVModelForm): 

19 

20 class Meta: 

21 model = Group 

22 fields = ('name', 'description') 

23 

24 

25class UserImportForm(CSVModelForm): 

26 

27 class Meta: 

28 model = User 

29 fields = ( 

30 'username', 'first_name', 'last_name', 'email', 'password', 'is_active', 'is_superuser' 

31 ) 

32 

33 def save(self, *args, **kwargs): 

34 # Set the hashed password 

35 self.instance.set_password(self.cleaned_data.get('password')) 

36 

37 return super().save(*args, **kwargs) 

38 

39 

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 ) 

47 

48 class Meta: 

49 model = Token 

50 fields = ('user', 'version', 'enabled', 'write_enabled', 'expires', 'description',) 

51 

52 def __init__(self, *args, **kwargs): 

53 super().__init__(*args, **kwargs) 

54 

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 

59 

60 

61class OwnerGroupImportForm(CSVModelForm): 

62 

63 class Meta: 

64 model = OwnerGroup 

65 fields = ( 

66 'name', 'description', 

67 ) 

68 

69 

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 ) 

86 

87 class Meta: 

88 model = Owner 

89 fields = ( 

90 'group', 'name', 'description', 'user_groups', 'users', 

91 )