Skip to content

Commit 1da0268

Browse files
tvansteenburghthisisshi
authored andcommitted
chore: RIOT double-install cleanup (ENG-2706) (#49)
* chore: RIOT double-install cleanup (ENG-2706) Remove duplicate superuser and bulitin groups. * make sure we have exactly one org and user * make sure we no-op in non-riot deployments
1 parent 0c4bc76 commit 1da0268

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
"""Clean up double install.
2+
3+
This is specifically for RIOT and will no-op for everyone else.
4+
5+
https://stacklet.atlassian.net/browse/ENG-2706
6+
7+
Revision ID: 4afa4a1dd310
8+
Revises: fa68605eb530
9+
Create Date: 2023-10-12 14:50:00.000000
10+
11+
"""
12+
from alembic import op
13+
import sqlalchemy as sa
14+
from sqlalchemy.dialects import postgresql
15+
16+
from redash import models
17+
18+
# revision identifiers, used by Alembic.
19+
revision = "4afa4a1dd310"
20+
down_revision = "fa68605eb530"
21+
branch_labels = None
22+
depends_on = None
23+
24+
25+
def get_groups(org, group_name):
26+
groups = (
27+
org.groups.filter(
28+
models.Group.name == group_name,
29+
models.Group.type == models.Group.BUILTIN_GROUP,
30+
)
31+
.order_by(models.Group.id.desc())
32+
.all()
33+
)
34+
35+
assert len(groups) == 2
36+
assert groups[0].id > groups[1].id
37+
return groups
38+
39+
40+
def upgrade():
41+
# if this user doesn't exist, then we're not in RIOT and should no-op
42+
user = models.User.find_by_email("deleteme@riotgames.com").first()
43+
if not user:
44+
return
45+
46+
org = models.Organization.query.filter(models.Organization.slug == "default").one()
47+
48+
dupe_admin_group = get_groups(org, "admin")[0]
49+
dupe_default_group = get_groups(org, "default")[0]
50+
51+
# remove members from the dupe groups
52+
for group in (dupe_admin_group, dupe_default_group):
53+
for member in group.members(group.id):
54+
member.group_ids.remove(group.id)
55+
models.db.session.add(member)
56+
57+
# ensure dupe groups have no members
58+
models.db.session.flush()
59+
assert dupe_admin_group.members(dupe_admin_group.id).count() == 0
60+
assert dupe_default_group.members(dupe_default_group.id).count() == 0
61+
62+
# delete the dupe objects
63+
models.db.session.delete(dupe_admin_group)
64+
models.db.session.delete(dupe_default_group)
65+
models.db.session.delete(user)
66+
models.db.session.commit()
67+
68+
69+
def downgrade():
70+
pass

0 commit comments

Comments
 (0)