2
2
3
3
from ansible_base .lib .abstract_models import AbstractOrganization , AbstractTeam
4
4
from django .conf import settings
5
+ from django .contrib .auth .models import Group as BaseGroup
5
6
from django .db import models
6
- from django_lifecycle import LifecycleModelMixin , hook , BEFORE_CREATE , AFTER_UPDATE
7
+ from django .db .models import signals
8
+ from django .dispatch import receiver
9
+ from django_lifecycle import AFTER_UPDATE , BEFORE_CREATE , LifecycleModelMixin , hook
10
+ from pulpcore .plugin .models import Group as PulpGroup
7
11
8
12
from galaxy_ng .app .models .auth import Group
9
13
10
14
11
15
class OrganizationManager (models .Manager ):
12
-
13
16
def get_default (self ) -> Organization :
14
17
"""Return default organization."""
15
18
return self .get (name = settings .DEFAULT_ORGANIZATION_NAME )
@@ -21,7 +24,7 @@ class Organization(LifecycleModelMixin, AbstractOrganization):
21
24
users = models .ManyToManyField (
22
25
settings .AUTH_USER_MODEL ,
23
26
related_name = "organizations" ,
24
- help_text = "The list of users in this organization."
27
+ help_text = "The list of users in this organization." ,
25
28
)
26
29
27
30
objects = OrganizationManager ()
@@ -39,27 +42,45 @@ class Team(LifecycleModelMixin, AbstractTeam):
39
42
"""A team model."""
40
43
41
44
users = models .ManyToManyField (
42
- settings .AUTH_USER_MODEL ,
43
- related_name = "teams" ,
44
- help_text = "The list of users in this team."
45
+ settings .AUTH_USER_MODEL , related_name = "teams" , help_text = "The list of users in this team."
45
46
)
46
47
group = models .OneToOneField (
47
48
Group ,
48
49
on_delete = models .CASCADE ,
49
- related_name = '+' ,
50
+ related_name = "+" ,
50
51
help_text = "Related group record." ,
51
52
)
52
53
53
54
def group_name (self ):
55
+ if self .organization .name == settings .DEFAULT_ORGANIZATION_NAME :
56
+ return self .name
54
57
return f"{ self .organization .name } ::{ self .name } "
55
58
56
59
@hook (BEFORE_CREATE )
57
- def _before_create (self ):
58
- if not hasattr (self , "group" ):
59
- self .group = Group .objects .create (name = self .group_name ())
60
+ def _create_related_group (self , ** kwargs ):
61
+ if hasattr (self , "group" ):
62
+ return
63
+ self .group = Group (name = self .group_name ())
64
+ # NOTE(cutwater): This is a hack. Delete along with the signal handler below.
65
+ self .group ._x_skip_create_team = True
66
+ self .group .save ()
60
67
61
68
@hook (AFTER_UPDATE )
62
- def _after_update (self ):
63
- if self .has_changed ("name" ):
64
- self .group .name = self .group_name ()
65
- self .group .save ()
69
+ def _rename_related_group (self , ** kwargs ):
70
+ if not self .has_changed ("name" ):
71
+ return
72
+ self .group .name = self .group_name ()
73
+ self .group .save ()
74
+
75
+
76
+ @receiver (signal = signals .post_save , sender = Group )
77
+ @receiver (signal = signals .post_save , sender = PulpGroup )
78
+ @receiver (signal = signals .post_save , sender = BaseGroup )
79
+ def _create_related_team (sender , instance , created , ** kwargs ):
80
+ if not created or getattr (instance , "_x_skip_create_team" , False ):
81
+ return
82
+ Team .objects .create (
83
+ name = instance .name ,
84
+ organization = Organization .objects .get_default (),
85
+ group = instance ,
86
+ )
0 commit comments