Skip to content

Commit ed7f09e

Browse files
mariajgrimaldiBryanttV
authored andcommitted
refactor: index users to avoid additional queries & improve inline comments
1 parent 4a84f7c commit ed7f09e

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

openedx_authz/engine/utils.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,10 @@ def migrate_authz_to_legacy_course_roles(
319319
"""
320320
_validate_migration_input(course_id_list, org_id)
321321

322-
# CourseOverviewData and OrgCourseOverviewGlobData share the same namespace,
323-
# so filtering by CourseOverviewData captures both course-level and org-level glob assignments.
322+
# CourseOverviewData and OrgCourseOverviewGlobData share the same NAMESPACE ("course-v1"),
323+
# and get_all_role_assignments_per_scope_type matches by NAMESPACE. Passing CourseOverviewData
324+
# therefore captures both course-level and org-level glob assignments. The exact scope type
325+
# is narrowed per-assignment via isinstance checks in the loop below.
324326
role_assignments = get_all_role_assignments_per_scope_type(scope_type=CourseOverviewData)
325327

326328
# Two cases here:
@@ -345,6 +347,14 @@ def migrate_authz_to_legacy_course_roles(
345347
roles_with_no_errors = []
346348
unassignments = defaultdict(list)
347349

350+
user_external_keys = {assignment.subject.external_key for assignment in role_assignments}
351+
users_by_username = {
352+
subject.user.username: subject.user
353+
for subject in user_subject_model.objects.filter(
354+
user__username__in=user_external_keys
355+
).select_related("user")
356+
}
357+
348358
for role_assignment in role_assignments:
349359

350360
# Per valid role assignment, create corresponding CourseAccessRole entry
@@ -355,7 +365,7 @@ def migrate_authz_to_legacy_course_roles(
355365
scope_external_key = role_assignment.scope.external_key
356366

357367
course_access_role_kwargs = {
358-
"user": user_subject_model.objects.get(user__username=user_external_key).user,
368+
"user": users_by_username[user_external_key],
359369
"role": COURSE_ROLE_EQUIVALENCES[role_external_key],
360370
}
361371

@@ -365,6 +375,8 @@ def migrate_authz_to_legacy_course_roles(
365375
elif isinstance(role_assignment.scope, OrgCourseOverviewGlobData):
366376
course_access_role_kwargs["org"] = role_assignment.scope.org
367377
else:
378+
# This would only happen for course roles assigned instance-wide
379+
# which is not yet supported
368380
logger.error(
369381
f"Unexpected scope type: {type(role_assignment.scope)} for RoleAssignment with "
370382
f"scope: {scope_external_key}, user: {user_external_key} and role: {role_external_key}, skipping."

0 commit comments

Comments
 (0)