Prefetch RuleSet objects for group (#5725)

* Prefetch RuleSet objects for group

- Prevent multiple unnecessary db queries

* Tweak

* Default to previous behavior

* Revert closer to original
This commit is contained in:
Oliver 2023-10-17 21:33:23 +11:00 committed by GitHub
parent ccaece3634
commit 1b7f943946
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -420,16 +420,23 @@ def update_group_roles(group, debug=False):
if permission_string not in permissions_to_add:
permissions_to_delete.add(permission_string)
# Pre-fetch all the RuleSet objects
rulesets = {
r.name: r for r in RuleSet.objects.filter(group=group).prefetch_related('group')
}
# Get all the rulesets associated with this group
for r in RuleSet.RULESET_CHOICES:
rulename = r[0]
try:
ruleset = RuleSet.objects.get(group=group, name=rulename)
except RuleSet.DoesNotExist:
# Create the ruleset with default values (if it does not exist)
ruleset = RuleSet.objects.create(group=group, name=rulename)
if rulename in rulesets:
ruleset = rulesets[rulename]
else:
try:
ruleset = RuleSet.objects.get(group=group, name=rulename)
except RuleSet.DoesNotExist:
ruleset = RuleSet.objects.create(group=group, name=rulename)
# Which database tables does this RuleSet touch?
models = ruleset.get_models()