Skip to content

Commit

Permalink
perms.middleware: Preload convention for companies
Browse files Browse the repository at this point in the history
The convention is regularly accessed but not always so we were lazy
loading them, now we also need it to build the navigation so better
eager load them instead of optimize queries in various places.
  • Loading branch information
rsebille committed Sep 19, 2024
1 parent d601330 commit e82fe68
Show file tree
Hide file tree
Showing 13 changed files with 434 additions and 818 deletions.
4 changes: 3 additions & 1 deletion itou/utils/perms/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,9 @@ def __call__(self, request):
company.pk: company
for company in user.company_set.filter(
pk__in=[membership.company_id for membership in active_memberships]
).active_or_in_grace_period()
)
.active_or_in_grace_period()
.select_related("convention")
}
really_active_memberships = []
for membership in active_memberships:
Expand Down
85 changes: 26 additions & 59 deletions tests/www/apply/__snapshots__/test_process.ambr
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# serializer version: 1
# name: ProcessAcceptViewsTest.test_select_job_description_for_job_application[accept view SQL queries]
dict({
'num_queries': 16,
'num_queries': 15,
'queries': list([
dict({
'origin': list([
Expand Down Expand Up @@ -123,9 +123,20 @@
FROM "companies_siaeconvention" U0
WHERE (U0."deactivated_at" >= %s
AND U0."id" = ("companies_company"."convention_id"))
LIMIT 1) AS "has_convention_in_grace_period"
LIMIT 1) AS "has_convention_in_grace_period",
"companies_siaeconvention"."id",
"companies_siaeconvention"."kind",
"companies_siaeconvention"."siret_signature",
"companies_siaeconvention"."is_active",
"companies_siaeconvention"."deactivated_at",
"companies_siaeconvention"."reactivated_by_id",
"companies_siaeconvention"."reactivated_at",
"companies_siaeconvention"."asp_id",
"companies_siaeconvention"."created_at",
"companies_siaeconvention"."updated_at"
FROM "companies_company"
INNER JOIN "companies_companymembership" ON ("companies_company"."id" = "companies_companymembership"."company_id")
LEFT OUTER JOIN "companies_siaeconvention" ON ("companies_company"."convention_id" = "companies_siaeconvention"."id")
WHERE (NOT ("companies_company"."siret" = %s)
AND "companies_companymembership"."user_id" = %s
AND "companies_company"."id" IN (%s)
Expand Down Expand Up @@ -848,34 +859,6 @@
"companies_jobdescription"."is_active" ASC
''',
}),
dict({
'origin': list([
'Company.is_active[companies/models.py]',
'nav[utils/templatetags/nav.py]',
'InclusionNode[layout/_header_authenticated.html]',
'IncludeNode[layout/base.html]',
'IfNode[layout/base.html]',
'ExtendsNode[apply/process_base.html]',
'ExtendsNode[apply/process_accept.html]',
'_accept[www/apply/views/common.py]',
'accept[www/apply/views/process_views.py]',
]),
'sql': '''
SELECT "companies_siaeconvention"."id",
"companies_siaeconvention"."kind",
"companies_siaeconvention"."siret_signature",
"companies_siaeconvention"."is_active",
"companies_siaeconvention"."deactivated_at",
"companies_siaeconvention"."reactivated_by_id",
"companies_siaeconvention"."reactivated_at",
"companies_siaeconvention"."asp_id",
"companies_siaeconvention"."created_at",
"companies_siaeconvention"."updated_at"
FROM "companies_siaeconvention"
WHERE "companies_siaeconvention"."id" = %s
LIMIT 21
''',
}),
dict({
'origin': list([
'Company.has_admin[common_apps/organizations/models.py]',
Expand Down Expand Up @@ -917,7 +900,7 @@
# ---
# name: ProcessViewsTest.test_details_for_company[job application detail for company]
dict({
'num_queries': 18,
'num_queries': 17,
'queries': list([
dict({
'origin': list([
Expand Down Expand Up @@ -1039,9 +1022,20 @@
FROM "companies_siaeconvention" U0
WHERE (U0."deactivated_at" >= %s
AND U0."id" = ("companies_company"."convention_id"))
LIMIT 1) AS "has_convention_in_grace_period"
LIMIT 1) AS "has_convention_in_grace_period",
"companies_siaeconvention"."id",
"companies_siaeconvention"."kind",
"companies_siaeconvention"."siret_signature",
"companies_siaeconvention"."is_active",
"companies_siaeconvention"."deactivated_at",
"companies_siaeconvention"."reactivated_by_id",
"companies_siaeconvention"."reactivated_at",
"companies_siaeconvention"."asp_id",
"companies_siaeconvention"."created_at",
"companies_siaeconvention"."updated_at"
FROM "companies_company"
INNER JOIN "companies_companymembership" ON ("companies_company"."id" = "companies_companymembership"."company_id")
LEFT OUTER JOIN "companies_siaeconvention" ON ("companies_company"."convention_id" = "companies_siaeconvention"."id")
WHERE (NOT ("companies_company"."siret" = %s)
AND "companies_companymembership"."user_id" = %s
AND "companies_company"."id" IN (%s)
Expand Down Expand Up @@ -1661,33 +1655,6 @@
ORDER BY "approvals_approval"."created_at" DESC
''',
}),
dict({
'origin': list([
'Company.is_active[companies/models.py]',
'nav[utils/templatetags/nav.py]',
'InclusionNode[layout/_header_authenticated.html]',
'IncludeNode[layout/base.html]',
'IfNode[layout/base.html]',
'ExtendsNode[apply/process_base.html]',
'ExtendsNode[apply/process_details_company.html]',
'details_for_company[www/apply/views/process_views.py]',
]),
'sql': '''
SELECT "companies_siaeconvention"."id",
"companies_siaeconvention"."kind",
"companies_siaeconvention"."siret_signature",
"companies_siaeconvention"."is_active",
"companies_siaeconvention"."deactivated_at",
"companies_siaeconvention"."reactivated_by_id",
"companies_siaeconvention"."reactivated_at",
"companies_siaeconvention"."asp_id",
"companies_siaeconvention"."created_at",
"companies_siaeconvention"."updated_at"
FROM "companies_siaeconvention"
WHERE "companies_siaeconvention"."id" = %s
LIMIT 21
''',
}),
dict({
'origin': list([
'Company.has_admin[common_apps/organizations/models.py]',
Expand Down
Loading

0 comments on commit e82fe68

Please sign in to comment.