Skip to content

Commit 691f7aa

Browse files
committed
Create related teams for manually created groups
And drop group prefix for the default organization. No-Issue
1 parent 6fb91ba commit 691f7aa

File tree

3 files changed

+44
-29
lines changed

3 files changed

+44
-29
lines changed

galaxy_ng/app/api/resource_api.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
ServiceAPIConfig,
44
SharedResource,
55
)
6-
from ansible_base.resource_registry.shared_types import UserType, TeamType, OrganizationType
6+
from ansible_base.resource_registry.shared_types import OrganizationType, TeamType, UserType
7+
78
from galaxy_ng.app import models
89

910

@@ -26,5 +27,5 @@ class APIConfig(ServiceAPIConfig):
2627
models.Organization,
2728
shared_resource=SharedResource(serializer=OrganizationType, is_provider=False),
2829
name_field="name",
29-
)
30+
),
3031
)

galaxy_ng/app/migrations/0050_organization_data.py

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,24 @@ def create_default_organization(apps, schema_editor):
1515
modified_on=now,
1616
)
1717

18-
schema_editor.execute("""
18+
schema_editor.execute(
19+
"""
1920
INSERT INTO galaxy_team (name, description, created_on, modified_on, group_id, organization_id)
2021
SELECT grp.name, '', now(), now(), grp.id, %s
2122
FROM auth_group AS grp
22-
""", (org.id,))
23-
24-
schema_editor.execute("""
25-
UPDATE auth_group SET name = %s || '::' || name
26-
""", (settings.DEFAULT_ORGANIZATION_NAME,))
23+
""",
24+
(org.id,),
25+
)
2726

2827

2928
def delete_default_organization(apps, schema_editor):
3029
db_alias = schema_editor.connection.alias
3130
Team = apps.get_model("galaxy", "Team")
3231
Organization = apps.get_model("galaxy", "Organization")
3332

34-
schema_editor.execute("""
35-
UPDATE auth_group SET name = regexp_replace(name, '^.+?::', '')
36-
""")
37-
3833
Team.objects.using(db_alias).delete()
3934

40-
Organization.objects.using(db_alias).filter(
41-
name=settings.DEFAULT_ORGANIZATION_NAME
42-
).delete()
35+
Organization.objects.using(db_alias).filter(name=settings.DEFAULT_ORGANIZATION_NAME).delete()
4336

4437

4538
class Migration(migrations.Migration):

galaxy_ng/app/models/organization.py

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22

33
from ansible_base.lib.abstract_models import AbstractOrganization, AbstractTeam
44
from django.conf import settings
5+
from django.contrib.auth.models import Group as BaseGroup
56
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
711

812
from galaxy_ng.app.models.auth import Group
913

1014

1115
class OrganizationManager(models.Manager):
12-
1316
def get_default(self) -> Organization:
1417
"""Return default organization."""
1518
return self.get(name=settings.DEFAULT_ORGANIZATION_NAME)
@@ -21,7 +24,7 @@ class Organization(LifecycleModelMixin, AbstractOrganization):
2124
users = models.ManyToManyField(
2225
settings.AUTH_USER_MODEL,
2326
related_name="organizations",
24-
help_text="The list of users in this organization."
27+
help_text="The list of users in this organization.",
2528
)
2629

2730
objects = OrganizationManager()
@@ -39,27 +42,45 @@ class Team(LifecycleModelMixin, AbstractTeam):
3942
"""A team model."""
4043

4144
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."
4546
)
4647
group = models.OneToOneField(
4748
Group,
4849
on_delete=models.CASCADE,
49-
related_name='+',
50+
related_name="+",
5051
help_text="Related group record.",
5152
)
5253

5354
def group_name(self):
55+
if self.organization.name == settings.DEFAULT_ORGANIZATION_NAME:
56+
return self.name
5457
return f"{self.organization.name}::{self.name}"
5558

5659
@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()
6067

6168
@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

Comments
 (0)