Skip to content

feat(accounts): control user visibility through role permissions - #22503

Merged
nijel merged 1 commit into
mainfrom
feat/visibility
Nov 1, 2026
Merged

nijel merged 1 commit into
mainfrom
feat/visibility

Conversation

@nijel

@nijel nijel commented Nov 1, 2026

Copy link
Copy Markdown
Member

Replace unreleased installation-wide visibility settings with editable global role permissions while preserving scoped contributor discovery and administrative access. Add frozen role and team migrations, regression coverage, and a privacy configuration guide covering profiles and private VCS identities.

Refs #22370, #22498, #18054

@nijel nijel added this to the 2026.11 milestone Nov 1, 2026
@nijel nijel self-assigned this Nov 1, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-01T12:01:04.419191Z ff97e8a New commits
🔒 Security Review ✅ Completed 2026-11-01T08:08:26.285051Z 6fe298a PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6fe298ae4b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread weblate/accounts/visibility.py Resolved
@codecov

codecov Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

❌ 5 Tests Failed:

Tests completed Failed Passed Skipped
13676 5 13671 1016
View the top 3 failed test(s) by shortest run time
weblate.api.tests.RoleAPITest::test_list_roles
Stack Traces | 0.124s run time
self = <weblate.api.tests.RoleAPITest testMethod=test_list_roles>

    def test_list_roles(self) -> None:
        response = self.client.get(reverse("api:role-list"))
>       self.assertEqual(response.data["count"], 2)
E       AssertionError: 3 != 2

weblate/api/tests.py:4635: AssertionError
weblate.trans.tests.test_projecttoken.ProjectTokenTest::test_token_not_enumerated_in_user_search
Stack Traces | 0.354s run time
self = <weblate.trans.tests.test_projecttoken.ProjectTokenTest testMethod=test_token_not_enumerated_in_user_search>

    def test_token_not_enumerated_in_user_search(self) -> None:
        """Unrelated users can not find project tokens through user searches."""
        token_key = self.create_token()
        token_user = self.get_token_user(token_key)
        _attacker_project, _attacker, attacker_client = self.create_attacker()
    
        response = attacker_client.get(reverse("api:user-list"), {"username": "bot-"})
        self.assertEqual(response.status_code, 200)
        self.assertNotIn(
            token_user.username,
            {result["username"] for result in response.json()["results"]},
        )
    
        response = attacker_client.get(
            reverse("api:search"), {"q": token_user.username}
        )
        self.assertEqual(response.status_code, 200)
        self.assertNotIn(
            token_user.username,
            {result["name"] for result in response.json()},
        )
    
        # Exact API lookup remains available by design.
        response = attacker_client.get(
            reverse("api:user-detail", kwargs={"username": token_user.username})
        )
        self.assertEqual(response.status_code, 200)
    
        token_client = self.client_class()
        response = token_client.get(
            reverse("api:user-list"),
            {"username": token_user.username},
            headers={"authorization": f"Token {token_key}"},
        )
        self.assertEqual(response.status_code, 200)
>       self.assertEqual(response.json()["count"], 1)
E       AssertionError: 0 != 1

.../trans/tests/test_projecttoken.py:230: AssertionError
weblate.trans.tests.test_changes.FeedQueriesTest::test_translation_feed_queries_do_not_scale_with_change_count
Stack Traces | 0.585s run time
self = <weblate.trans.tests.test_changes.FeedQueriesTest testMethod=test_translation_feed_queries_do_not_scale_with_change_count>

    def test_translation_feed_queries_do_not_scale_with_change_count(self) -> None:
        self.add_feed_changes(6)
>       self.assert_feed_queries(
            self.translation,
            self.TRANSLATION_FEED_QUERIES,
        )

.../trans/tests/test_changes.py:753: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../trans/tests/test_changes.py:735: in assert_feed_queries
    with self.assertNumQueries(expected_queries):
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E   AssertionError: 40 != 12 : 40 queries executed, 12 expected
E   Captured queries were:
E   1. SELECT "trans_change"."id" AS "pk" FROM "trans_change" WHERE "trans_change"."translation_id" = 1 ORDER BY "trans_change"."timestamp" DESC LIMIT 10
E   2. SELECT "trans_change"."id", "trans_change"."unit_id", "trans_change"."language_id", "trans_change"."project_id", "trans_change"."workspace_id", "trans_change"."category_id", "trans_change"."component_id", "trans_change"."translation_id", "trans_change"."comment_id", "trans_change"."suggestion_id", "trans_change"."announcement_id", "trans_change"."screenshot_id", "trans_change"."alert_id", "trans_change"."addon_id", "trans_change"."user_id", "trans_change"."author_id", "trans_change"."timestamp", "trans_change"."action", "trans_change"."target", "trans_change"."old", "trans_change"."details", "trans_comment"."id", "trans_comment"."unit_id", "trans_comment"."comment", "trans_comment"."user_id", "trans_comment"."timestamp", "trans_comment"."resolved", "trans_comment"."userdetails", "trans_suggestion"."id", "trans_suggestion"."unit_id", "trans_suggestion"."target", "trans_suggestion"."user_id", "trans_suggestion"."userdetails", "trans_suggestion"."timestamp", "trans_announcement"."id", "trans_announcement"."message", "trans_announcement"."project_id", "trans_announcement"."category_id", "trans_announcement"."component_id", "trans_announcement"."language_id", "trans_announcement"."severity", "trans_announcement"."expiry", "trans_announcement"."notify", "screenshots_screenshot"."id", "screenshots_screenshot"."name", "screenshots_screenshot"."repository_filename", "screenshots_screenshot"."image", "screenshots_screenshot"."translation_id", "screenshots_screenshot"."timestamp", "screenshots_screenshot"."user_id", "trans_alert"."id", "trans_alert"."component_id", "trans_alert"."timestamp", "trans_alert"."updated", "trans_alert"."name", "trans_alert"."dismissed_at", "trans_alert"."dismissed_by_id", "trans_alert"."dismissal_reason", "trans_alert"."dismissal_fingerprint", "trans_alert"."severity", "trans_alert"."details" FROM "trans_change" LEFT OUTER JOIN "trans_comment" ON ("trans_change"."comment_id" = "trans_comment"."id") LEFT OUTER JOIN "trans_suggestion" ON ("trans_change"."suggestion_id" = "trans_suggestion"."id") LEFT OUTER JOIN "trans_announcement" ON ("trans_change"."announcement_id" = "trans_announcement"."id") LEFT OUTER JOIN "screenshots_screenshot" ON ("trans_change"."screenshot_id" = "screenshots_screenshot"."id") LEFT OUTER JOIN "trans_alert" ON ("trans_change"."alert_id" = "trans_alert"."id") WHERE ("trans_change"."translation_id" = 1 AND "trans_change"."id" IN (29, 28, 27, 26, 25, 24, 23)) ORDER BY "trans_change"."timestamp" DESC
E   3. SELECT "weblate_auth_user"."id", "weblate_auth_user"."password", "weblate_auth_user"."last_login", "weblate_auth_user"."username", "weblate_auth_user"."full_name", "weblate_auth_user"."email", "weblate_auth_user"."is_superuser", "weblate_auth_user"."is_active", "weblate_auth_user"."is_bot", "weblate_auth_user"."date_expires", "weblate_auth_user"."date_joined" FROM "weblate_auth_user" WHERE ("weblate_auth_user"."id") IN ((1010))
E   4. SELECT "weblate_auth_user"."id", "weblate_auth_user"."password", "weblate_auth_user"."last_login", "weblate_auth_user"."username", "weblate_auth_user"."full_name", "weblate_auth_user"."email", "weblate_auth_user"."is_superuser", "weblate_auth_user"."is_active", "weblate_auth_user"."is_bot", "weblate_auth_user"."date_expires", "weblate_auth_user"."date_joined" FROM "weblate_auth_user" WHERE ("weblate_auth_user"."id") IN ((1010))
E   5. SELECT "lang_language"."id", "lang_language"."code", "lang_language"."name", "lang_language"."direction", "lang_language"."population" FROM "lang_language" WHERE ("lang_language"."id") IN ((12))
E   6. SELECT "trans_component"."id", "trans_component"."name", "trans_component"."slug", "trans_component"."project_id", "trans_component"."category_id", "trans_component"."vcs", "trans_component"."vcs_params", "trans_component"."repo", "trans_component"."linked_component_id", "trans_component"."push", "trans_component"."repoweb", "trans_component"."repoweb_translations", "trans_component"."git_export", "trans_component"."report_source_bugs", "trans_component"."branch", "trans_component"."push_branch", "trans_component"."filemask", "trans_component"."screenshot_filemask", "trans_component"."template", "trans_component"."edit_template", "trans_component"."intermediate", "trans_component"."new_base", "trans_component"."file_format", "trans_component"."file_format_params", "trans_component"."locked", "trans_component"."hide_glossary_matches", "trans_component"."allow_translation_propagation", "trans_component"."contribute_project_tm", "trans_component"."enable_suggestions", "trans_component"."suggestion_voting", "trans_component"."suggestion_autoaccept", "trans_component"."check_flags", "trans_component"."enforced_checks", "trans_component"."inherit_enforced_checks", "trans_component"."license", "trans_component"."inherit_license", "trans_component"."agreement", "trans_component"."inherit_agreement", "trans_component"."new_lang", "trans_component"."inherit_new_lang", "trans_component"."language_code_style", "trans_component"."inherit_language_code_style", "trans_component"."manage_units", "trans_component"."merge_style", "trans_component"."commit_message", "trans_component"."inherit_commit_message", "trans_component"."add_message", "trans_component"."inherit_add_message", "trans_component"."delete_message", "trans_component"."inherit_delete_message", "trans_component"."merge_message", "trans_component"."inherit_merge_message", "trans_component"."addon_message", "trans_component"."inherit_addon_message", "trans_component"."pull_message", "trans_component"."inherit_pull_message", "trans_component"."push_on_commit", "trans_component"."push_on_update", "trans_component"."commit_pending_age", "trans_component"."auto_lock_error", "trans_component"."source_language_id", "trans_component"."language_regex", "trans_component"."variant_regex", "trans_component"."priority", "trans_component"."restricted", "trans_component"."is_glossary", "trans_component"."glossary_color", "trans_component"."remote_revision", "trans_component"."local_revision", "trans_component"."processed_revision", "trans_component"."pull_request_url", "trans_component"."key_filter", "trans_component"."secondary_language_id", "trans_component"."inherit_secondary_language" FROM "trans_component" WHERE ("trans_component"."id") IN ((1))
E   7. SELECT "trans_project"."id", "trans_project"."name", "trans_project"."slug", "trans_project"."web", "trans_project"."instructions", "trans_project"."workspace_id", "trans_project"."use_shared_tm", "trans_project"."contribute_shared_tm", "trans_project"."use_workspace_tm", "trans_project"."contribute_workspace_tm", "trans_project"."autoclean_tm", "trans_project"."access_control", "trans_project"."public_sharing", "trans_project"."enforced_2fa", "trans_project"."translation_review", "trans_project"."source_review", "trans_project"."commit_policy", "trans_project"."enable_hooks", "trans_project"."language_aliases", "trans_project"."secondary_language_id", "trans_project"."check_flags", "trans_project"."enforced_checks", "trans_project"."inherit_enforced_checks", "trans_project"."license", "trans_project"."inherit_license", "trans_project"."agreement", "trans_project"."inherit_agreement", "trans_project"."new_lang", "trans_project"."inherit_new_lang", "trans_project"."language_code_style", "trans_project"."inherit_language_code_style", "trans_project"."inherit_secondary_language", "trans_project"."commit_message", "trans_project"."inherit_commit_message", "trans_project"."add_message", "trans_project"."inherit_add_message", "trans_project"."delete_message", "trans_project"."inherit_delete_message", "trans_project"."merge_message", "trans_project"."inherit_merge_message", "trans_project"."addon_message", "trans_project"."inherit_addon_message", "trans_project"."pull_message", "trans_project"."inherit_pull_message" FROM "trans_project" WHERE ("trans_project"."id") IN ((1))
E   8. SELECT "lang_language"."id", "lang_language"."code", "lang_language"."name", "lang_language"."direction", "lang_language"."population" FROM "lang_language" WHERE ("lang_language"."id") IN ((63))
E   9. SELECT "trans_unit"."id", "trans_unit"."translation_id", "trans_unit"."id_hash", "trans_unit"."location", "trans_unit"."context", "trans_unit"."note", "trans_unit"."flags", "trans_unit"."source", "trans_unit"."previous_source", "trans_unit"."target", "trans_unit"."state", "trans_unit"."original_state", "trans_unit"."details", "trans_unit"."position", "trans_unit"."num_words", "trans_unit"."priority", "trans_unit"."timestamp", "trans_unit"."last_updated", "trans_unit"."extra_flags", "trans_unit"."explanation", "trans_unit"."variant_id", "trans_unit"."automatically_translated", "trans_unit"."source_unit_id", "trans_unit"."translation_parent_id" FROM "trans_unit" WHERE ("trans_unit"."id") IN ((1))
E   10. SELECT "trans_unit"."id", "trans_unit"."translation_id", "trans_unit"."id_hash", "trans_unit"."location", "trans_unit"."context", "trans_unit"."note", "trans_unit"."flags", "trans_unit"."source", "trans_unit"."previous_source", "trans_unit"."target", "trans_unit"."state", "trans_unit"."original_state", "trans_unit"."details", "trans_unit"."position", "trans_unit"."num_words", "trans_unit"."priority", "trans_unit"."timestamp", "trans_unit"."last_updated", "trans_unit"."extra_flags", "trans_unit"."explanation", "trans_unit"."variant_id", "trans_unit"."automatically_translated", "trans_unit"."source_unit_id", "trans_unit"."translation_parent_id" FROM "trans_unit" WHERE ("trans_unit"."id") IN ((13))
E   11. SELECT "trans_translation"."id", "trans_translation"."component_id", "trans_translation"."language_id", "trans_translation"."plural_id", "trans_translation"."revision", "trans_translation"."filename", "trans_translation"."language_code", "trans_translation"."check_flags" FROM "trans_translation" WHERE ("trans_translation"."id") IN ((4))
E   12. SELECT "lang_plural"."id", "lang_plural"."source", "lang_plural"."number", "lang_plural"."formula", "lang_plural"."type", "lang_plural"."language_id" FROM "lang_plural" WHERE ("lang_plural"."id") IN ((76))
E   13. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   14. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   15. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   16. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   17. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   18. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   19. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   20. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   21. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   22. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   23. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   24. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   25. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   26. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   27. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   28. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   29. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   30. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   31. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   32. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   33. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   34. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   35. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   36. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   37. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   38. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   39. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   40. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
weblate.trans.tests.test_changes.FeedQueriesTest::test_project_feed_queries_do_not_scale_with_change_count
Stack Traces | 0.631s run time
self = <weblate.trans.tests.test_changes.FeedQueriesTest testMethod=test_project_feed_queries_do_not_scale_with_change_count>

    def test_project_feed_queries_do_not_scale_with_change_count(self) -> None:
        self.add_feed_changes(6)
>       self.assert_feed_queries(self.project, self.PROJECT_FEED_QUERIES)

.../trans/tests/test_changes.py:742: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../trans/tests/test_changes.py:735: in assert_feed_queries
    with self.assertNumQueries(expected_queries):
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E   AssertionError: 41 != 13 : 41 queries executed, 13 expected
E   Captured queries were:
E   1. SELECT "trans_change"."id" AS "pk" FROM "trans_change" WHERE "trans_change"."project_id" = 1 ORDER BY "trans_change"."timestamp" DESC LIMIT 10
E   2. SELECT "trans_change"."id", "trans_change"."unit_id", "trans_change"."language_id", "trans_change"."project_id", "trans_change"."workspace_id", "trans_change"."category_id", "trans_change"."component_id", "trans_change"."translation_id", "trans_change"."comment_id", "trans_change"."suggestion_id", "trans_change"."announcement_id", "trans_change"."screenshot_id", "trans_change"."alert_id", "trans_change"."addon_id", "trans_change"."user_id", "trans_change"."author_id", "trans_change"."timestamp", "trans_change"."action", "trans_change"."target", "trans_change"."old", "trans_change"."details", "trans_comment"."id", "trans_comment"."unit_id", "trans_comment"."comment", "trans_comment"."user_id", "trans_comment"."timestamp", "trans_comment"."resolved", "trans_comment"."userdetails", "trans_suggestion"."id", "trans_suggestion"."unit_id", "trans_suggestion"."target", "trans_suggestion"."user_id", "trans_suggestion"."userdetails", "trans_suggestion"."timestamp", "trans_announcement"."id", "trans_announcement"."message", "trans_announcement"."project_id", "trans_announcement"."category_id", "trans_announcement"."component_id", "trans_announcement"."language_id", "trans_announcement"."severity", "trans_announcement"."expiry", "trans_announcement"."notify", "screenshots_screenshot"."id", "screenshots_screenshot"."name", "screenshots_screenshot"."repository_filename", "screenshots_screenshot"."image", "screenshots_screenshot"."translation_id", "screenshots_screenshot"."timestamp", "screenshots_screenshot"."user_id", "trans_alert"."id", "trans_alert"."component_id", "trans_alert"."timestamp", "trans_alert"."updated", "trans_alert"."name", "trans_alert"."dismissed_at", "trans_alert"."dismissed_by_id", "trans_alert"."dismissal_reason", "trans_alert"."dismissal_fingerprint", "trans_alert"."severity", "trans_alert"."details" FROM "trans_change" LEFT OUTER JOIN "trans_comment" ON ("trans_change"."comment_id" = "trans_comment"."id") LEFT OUTER JOIN "trans_suggestion" ON ("trans_change"."suggestion_id" = "trans_suggestion"."id") LEFT OUTER JOIN "trans_announcement" ON ("trans_change"."announcement_id" = "trans_announcement"."id") LEFT OUTER JOIN "screenshots_screenshot" ON ("trans_change"."screenshot_id" = "screenshots_screenshot"."id") LEFT OUTER JOIN "trans_alert" ON ("trans_change"."alert_id" = "trans_alert"."id") WHERE ("trans_change"."project_id" = 1 AND "trans_change"."id" IN (22, 21, 20, 19, 18, 17, 16)) ORDER BY "trans_change"."timestamp" DESC
E   3. SELECT "weblate_auth_user"."id", "weblate_auth_user"."password", "weblate_auth_user"."last_login", "weblate_auth_user"."username", "weblate_auth_user"."full_name", "weblate_auth_user"."email", "weblate_auth_user"."is_superuser", "weblate_auth_user"."is_active", "weblate_auth_user"."is_bot", "weblate_auth_user"."date_expires", "weblate_auth_user"."date_joined" FROM "weblate_auth_user" WHERE ("weblate_auth_user"."id") IN ((1008))
E   4. SELECT "weblate_auth_user"."id", "weblate_auth_user"."password", "weblate_auth_user"."last_login", "weblate_auth_user"."username", "weblate_auth_user"."full_name", "weblate_auth_user"."email", "weblate_auth_user"."is_superuser", "weblate_auth_user"."is_active", "weblate_auth_user"."is_bot", "weblate_auth_user"."date_expires", "weblate_auth_user"."date_joined" FROM "weblate_auth_user" WHERE ("weblate_auth_user"."id") IN ((1008))
E   5. SELECT "trans_translation"."id", "trans_translation"."component_id", "trans_translation"."language_id", "trans_translation"."plural_id", "trans_translation"."revision", "trans_translation"."filename", "trans_translation"."language_code", "trans_translation"."check_flags" FROM "trans_translation" WHERE ("trans_translation"."id") IN ((1))
E   6. SELECT "lang_language"."id", "lang_language"."code", "lang_language"."name", "lang_language"."direction", "lang_language"."population" FROM "lang_language" WHERE ("lang_language"."id") IN ((12))
E   7. SELECT "trans_component"."id", "trans_component"."name", "trans_component"."slug", "trans_component"."project_id", "trans_component"."category_id", "trans_component"."vcs", "trans_component"."vcs_params", "trans_component"."repo", "trans_component"."linked_component_id", "trans_component"."push", "trans_component"."repoweb", "trans_component"."repoweb_translations", "trans_component"."git_export", "trans_component"."report_source_bugs", "trans_component"."branch", "trans_component"."push_branch", "trans_component"."filemask", "trans_component"."screenshot_filemask", "trans_component"."template", "trans_component"."edit_template", "trans_component"."intermediate", "trans_component"."new_base", "trans_component"."file_format", "trans_component"."file_format_params", "trans_component"."locked", "trans_component"."hide_glossary_matches", "trans_component"."allow_translation_propagation", "trans_component"."contribute_project_tm", "trans_component"."enable_suggestions", "trans_component"."suggestion_voting", "trans_component"."suggestion_autoaccept", "trans_component"."check_flags", "trans_component"."enforced_checks", "trans_component"."inherit_enforced_checks", "trans_component"."license", "trans_component"."inherit_license", "trans_component"."agreement", "trans_component"."inherit_agreement", "trans_component"."new_lang", "trans_component"."inherit_new_lang", "trans_component"."language_code_style", "trans_component"."inherit_language_code_style", "trans_component"."manage_units", "trans_component"."merge_style", "trans_component"."commit_message", "trans_component"."inherit_commit_message", "trans_component"."add_message", "trans_component"."inherit_add_message", "trans_component"."delete_message", "trans_component"."inherit_delete_message", "trans_component"."merge_message", "trans_component"."inherit_merge_message", "trans_component"."addon_message", "trans_component"."inherit_addon_message", "trans_component"."pull_message", "trans_component"."inherit_pull_message", "trans_component"."push_on_commit", "trans_component"."push_on_update", "trans_component"."commit_pending_age", "trans_component"."auto_lock_error", "trans_component"."source_language_id", "trans_component"."language_regex", "trans_component"."variant_regex", "trans_component"."priority", "trans_component"."restricted", "trans_component"."is_glossary", "trans_component"."glossary_color", "trans_component"."remote_revision", "trans_component"."local_revision", "trans_component"."processed_revision", "trans_component"."pull_request_url", "trans_component"."key_filter", "trans_component"."secondary_language_id", "trans_component"."inherit_secondary_language" FROM "trans_component" WHERE ("trans_component"."id") IN ((1))
E   8. SELECT "lang_language"."id", "lang_language"."code", "lang_language"."name", "lang_language"."direction", "lang_language"."population" FROM "lang_language" WHERE ("lang_language"."id") IN ((63))
E   9. SELECT "trans_unit"."id", "trans_unit"."translation_id", "trans_unit"."id_hash", "trans_unit"."location", "trans_unit"."context", "trans_unit"."note", "trans_unit"."flags", "trans_unit"."source", "trans_unit"."previous_source", "trans_unit"."target", "trans_unit"."state", "trans_unit"."original_state", "trans_unit"."details", "trans_unit"."position", "trans_unit"."num_words", "trans_unit"."priority", "trans_unit"."timestamp", "trans_unit"."last_updated", "trans_unit"."extra_flags", "trans_unit"."explanation", "trans_unit"."variant_id", "trans_unit"."automatically_translated", "trans_unit"."source_unit_id", "trans_unit"."translation_parent_id" FROM "trans_unit" WHERE ("trans_unit"."id") IN ((1))
E   10. SELECT "trans_unit"."id", "trans_unit"."translation_id", "trans_unit"."id_hash", "trans_unit"."location", "trans_unit"."context", "trans_unit"."note", "trans_unit"."flags", "trans_unit"."source", "trans_unit"."previous_source", "trans_unit"."target", "trans_unit"."state", "trans_unit"."original_state", "trans_unit"."details", "trans_unit"."position", "trans_unit"."num_words", "trans_unit"."priority", "trans_unit"."timestamp", "trans_unit"."last_updated", "trans_unit"."extra_flags", "trans_unit"."explanation", "trans_unit"."variant_id", "trans_unit"."automatically_translated", "trans_unit"."source_unit_id", "trans_unit"."translation_parent_id" FROM "trans_unit" WHERE ("trans_unit"."id") IN ((13))
E   11. SELECT "trans_translation"."id", "trans_translation"."component_id", "trans_translation"."language_id", "trans_translation"."plural_id", "trans_translation"."revision", "trans_translation"."filename", "trans_translation"."language_code", "trans_translation"."check_flags" FROM "trans_translation" WHERE ("trans_translation"."id") IN ((4))
E   12. SELECT "lang_plural"."id", "lang_plural"."source", "lang_plural"."number", "lang_plural"."formula", "lang_plural"."type", "lang_plural"."language_id" FROM "lang_plural" WHERE ("lang_plural"."id") IN ((76))
E   13. SELECT "lang_plural"."id", "lang_plural"."source", "lang_plural"."number", "lang_plural"."formula", "lang_plural"."type", "lang_plural"."language_id" FROM "lang_plural" WHERE ("lang_plural"."id") IN ((68))
E   14. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   15. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   16. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   17. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   18. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   19. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   20. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   21. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   22. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   23. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   24. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   25. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   26. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   27. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   28. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   29. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   30. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   31. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   32. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   33. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   34. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   35. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   36. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   37. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   38. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   39. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   40. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   41. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
weblate.trans.tests.test_changes.FeedQueriesTest::test_component_feed_queries_do_not_scale_with_change_count
Stack Traces | 1.52s run time
self = <weblate.trans.tests.test_changes.FeedQueriesTest testMethod=test_component_feed_queries_do_not_scale_with_change_count>

    def test_component_feed_queries_do_not_scale_with_change_count(self) -> None:
        self.add_feed_changes(6)
>       self.assert_feed_queries(
            self.component,
            self.COMPONENT_FEED_QUERIES,
        )

.../trans/tests/test_changes.py:746: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../trans/tests/test_changes.py:735: in assert_feed_queries
    with self.assertNumQueries(expected_queries):
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E   AssertionError: 41 != 12 : 41 queries executed, 12 expected
E   Captured queries were:
E   1. SELECT "trans_change"."id" AS "pk" FROM "trans_change" WHERE "trans_change"."component_id" = 1 ORDER BY "trans_change"."timestamp" DESC LIMIT 10
E   2. SELECT "trans_change"."id", "trans_change"."unit_id", "trans_change"."language_id", "trans_change"."project_id", "trans_change"."workspace_id", "trans_change"."category_id", "trans_change"."component_id", "trans_change"."translation_id", "trans_change"."comment_id", "trans_change"."suggestion_id", "trans_change"."announcement_id", "trans_change"."screenshot_id", "trans_change"."alert_id", "trans_change"."addon_id", "trans_change"."user_id", "trans_change"."author_id", "trans_change"."timestamp", "trans_change"."action", "trans_change"."target", "trans_change"."old", "trans_change"."details", "trans_comment"."id", "trans_comment"."unit_id", "trans_comment"."comment", "trans_comment"."user_id", "trans_comment"."timestamp", "trans_comment"."resolved", "trans_comment"."userdetails", "trans_suggestion"."id", "trans_suggestion"."unit_id", "trans_suggestion"."target", "trans_suggestion"."user_id", "trans_suggestion"."userdetails", "trans_suggestion"."timestamp", "trans_announcement"."id", "trans_announcement"."message", "trans_announcement"."project_id", "trans_announcement"."category_id", "trans_announcement"."component_id", "trans_announcement"."language_id", "trans_announcement"."severity", "trans_announcement"."expiry", "trans_announcement"."notify", "screenshots_screenshot"."id", "screenshots_screenshot"."name", "screenshots_screenshot"."repository_filename", "screenshots_screenshot"."image", "screenshots_screenshot"."translation_id", "screenshots_screenshot"."timestamp", "screenshots_screenshot"."user_id", "trans_alert"."id", "trans_alert"."component_id", "trans_alert"."timestamp", "trans_alert"."updated", "trans_alert"."name", "trans_alert"."dismissed_at", "trans_alert"."dismissed_by_id", "trans_alert"."dismissal_reason", "trans_alert"."dismissal_fingerprint", "trans_alert"."severity", "trans_alert"."details" FROM "trans_change" LEFT OUTER JOIN "trans_comment" ON ("trans_change"."comment_id" = "trans_comment"."id") LEFT OUTER JOIN "trans_suggestion" ON ("trans_change"."suggestion_id" = "trans_suggestion"."id") LEFT OUTER JOIN "trans_announcement" ON ("trans_change"."announcement_id" = "trans_announcement"."id") LEFT OUTER JOIN "screenshots_screenshot" ON ("trans_change"."screenshot_id" = "screenshots_screenshot"."id") LEFT OUTER JOIN "trans_alert" ON ("trans_change"."alert_id" = "trans_alert"."id") WHERE ("trans_change"."component_id" = 1 AND "trans_change"."id" IN (15, 14, 13, 12, 11, 10, 9)) ORDER BY "trans_change"."timestamp" DESC
E   3. SELECT "weblate_auth_user"."id", "weblate_auth_user"."password", "weblate_auth_user"."last_login", "weblate_auth_user"."username", "weblate_auth_user"."full_name", "weblate_auth_user"."email", "weblate_auth_user"."is_superuser", "weblate_auth_user"."is_active", "weblate_auth_user"."is_bot", "weblate_auth_user"."date_expires", "weblate_auth_user"."date_joined" FROM "weblate_auth_user" WHERE ("weblate_auth_user"."id") IN ((1006))
E   4. SELECT "weblate_auth_user"."id", "weblate_auth_user"."password", "weblate_auth_user"."last_login", "weblate_auth_user"."username", "weblate_auth_user"."full_name", "weblate_auth_user"."email", "weblate_auth_user"."is_superuser", "weblate_auth_user"."is_active", "weblate_auth_user"."is_bot", "weblate_auth_user"."date_expires", "weblate_auth_user"."date_joined" FROM "weblate_auth_user" WHERE ("weblate_auth_user"."id") IN ((1006))
E   5. SELECT "trans_translation"."id", "trans_translation"."component_id", "trans_translation"."language_id", "trans_translation"."plural_id", "trans_translation"."revision", "trans_translation"."filename", "trans_translation"."language_code", "trans_translation"."check_flags" FROM "trans_translation" WHERE ("trans_translation"."id") IN ((1))
E   6. SELECT "lang_language"."id", "lang_language"."code", "lang_language"."name", "lang_language"."direction", "lang_language"."population" FROM "lang_language" WHERE ("lang_language"."id") IN ((12))
E   7. SELECT "trans_project"."id", "trans_project"."name", "trans_project"."slug", "trans_project"."web", "trans_project"."instructions", "trans_project"."workspace_id", "trans_project"."use_shared_tm", "trans_project"."contribute_shared_tm", "trans_project"."use_workspace_tm", "trans_project"."contribute_workspace_tm", "trans_project"."autoclean_tm", "trans_project"."access_control", "trans_project"."public_sharing", "trans_project"."enforced_2fa", "trans_project"."translation_review", "trans_project"."source_review", "trans_project"."commit_policy", "trans_project"."enable_hooks", "trans_project"."language_aliases", "trans_project"."secondary_language_id", "trans_project"."check_flags", "trans_project"."enforced_checks", "trans_project"."inherit_enforced_checks", "trans_project"."license", "trans_project"."inherit_license", "trans_project"."agreement", "trans_project"."inherit_agreement", "trans_project"."new_lang", "trans_project"."inherit_new_lang", "trans_project"."language_code_style", "trans_project"."inherit_language_code_style", "trans_project"."inherit_secondary_language", "trans_project"."commit_message", "trans_project"."inherit_commit_message", "trans_project"."add_message", "trans_project"."inherit_add_message", "trans_project"."delete_message", "trans_project"."inherit_delete_message", "trans_project"."merge_message", "trans_project"."inherit_merge_message", "trans_project"."addon_message", "trans_project"."inherit_addon_message", "trans_project"."pull_message", "trans_project"."inherit_pull_message" FROM "trans_project" WHERE ("trans_project"."id") IN ((1))
E   8. SELECT "trans_unit"."id", "trans_unit"."translation_id", "trans_unit"."id_hash", "trans_unit"."location", "trans_unit"."context", "trans_unit"."note", "trans_unit"."flags", "trans_unit"."source", "trans_unit"."previous_source", "trans_unit"."target", "trans_unit"."state", "trans_unit"."original_state", "trans_unit"."details", "trans_unit"."position", "trans_unit"."num_words", "trans_unit"."priority", "trans_unit"."timestamp", "trans_unit"."last_updated", "trans_unit"."extra_flags", "trans_unit"."explanation", "trans_unit"."variant_id", "trans_unit"."automatically_translated", "trans_unit"."source_unit_id", "trans_unit"."translation_parent_id" FROM "trans_unit" WHERE ("trans_unit"."id") IN ((1))
E   9. SELECT "trans_unit"."id", "trans_unit"."translation_id", "trans_unit"."id_hash", "trans_unit"."location", "trans_unit"."context", "trans_unit"."note", "trans_unit"."flags", "trans_unit"."source", "trans_unit"."previous_source", "trans_unit"."target", "trans_unit"."state", "trans_unit"."original_state", "trans_unit"."details", "trans_unit"."position", "trans_unit"."num_words", "trans_unit"."priority", "trans_unit"."timestamp", "trans_unit"."last_updated", "trans_unit"."extra_flags", "trans_unit"."explanation", "trans_unit"."variant_id", "trans_unit"."automatically_translated", "trans_unit"."source_unit_id", "trans_unit"."translation_parent_id" FROM "trans_unit" WHERE ("trans_unit"."id") IN ((13))
E   10. SELECT "trans_translation"."id", "trans_translation"."component_id", "trans_translation"."language_id", "trans_translation"."plural_id", "trans_translation"."revision", "trans_translation"."filename", "trans_translation"."language_code", "trans_translation"."check_flags" FROM "trans_translation" WHERE ("trans_translation"."id") IN ((4))
E   11. SELECT "lang_plural"."id", "lang_plural"."source", "lang_plural"."number", "lang_plural"."formula", "lang_plural"."type", "lang_plural"."language_id" FROM "lang_plural" WHERE ("lang_plural"."id") IN ((76))
E   12. SELECT "lang_plural"."id", "lang_plural"."source", "lang_plural"."number", "lang_plural"."formula", "lang_plural"."type", "lang_plural"."language_id" FROM "lang_plural" WHERE ("lang_plural"."id") IN ((68))
E   13. SELECT "weblate_auth_user"."id", "weblate_auth_user"."password", "weblate_auth_user"."last_login", "weblate_auth_user"."username", "weblate_auth_user"."full_name", "weblate_auth_user"."email", "weblate_auth_user"."is_superuser", "weblate_auth_user"."is_active", "weblate_auth_user"."is_bot", "weblate_auth_user"."date_expires", "weblate_auth_user"."date_joined", "accounts_profile"."id", "accounts_profile"."user_id", "accounts_profile"."language", "accounts_profile"."suggested", "accounts_profile"."translated", "accounts_profile"."uploaded", "accounts_profile"."commented", "accounts_profile"."theme", "accounts_profile"."hide_completed", "accounts_profile"."secondary_in_zen", "accounts_profile"."hide_source_secondary", "accounts_profile"."wide_tables", "accounts_profile"."listing_columns", "accounts_profile"."editor_link", "accounts_profile"."translate_mode", "accounts_profile"."zen_mode", "accounts_profile"."special_chars", "accounts_profile"."nearby_strings", "accounts_profile"."auto_watch", "accounts_profile"."contribute_personal_tm", "accounts_profile"."dashboard_view", "accounts_profile"."dashboard_component_list_id", "accounts_profile"."website", "accounts_profile"."contact", "accounts_profile"."liberapay", "accounts_profile"."fediverse", "accounts_profile"."codesite", "accounts_profile"."github", "accounts_profile"."twitter", "accounts_profile"."linkedin", "accounts_profile"."location", "accounts_profile"."company", "accounts_profile"."public_email", "accounts_profile"."commit_email", "accounts_profile"."commit_name", "accounts_profile"."last_2fa" FROM "weblate_auth_user" LEFT OUTER JOIN "accounts_profile" ON ("weblate_auth_user"."id" = "accounts_profile"."user_id") WHERE UPPER("weblate_auth_user"."username"::text) = UPPER('anonymous') LIMIT 21
E   14. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   15. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   16. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   17. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   18. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   19. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   20. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   21. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   22. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   23. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   24. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   25. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   26. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   27. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   28. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   29. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   30. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   31. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   32. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   33. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   34. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   35. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   36. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   37. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))
E   38. SELECT "otp_static_staticdevice"."id", "otp_static_staticdevice"."user_id", "otp_static_staticdevice"."name", "otp_static_staticdevice"."confirmed", "otp_static_staticdevice"."throttling_failure_timestamp", "otp_static_staticdevice"."throttling_failure_count", "otp_static_staticdevice"."created_at", "otp_static_staticdevice"."last_used_at" FROM "otp_static_staticdevice" WHERE "otp_static_staticdevice"."user_id" = 1
E   39. SELECT "otp_totp_totpdevice"."id", "otp_totp_totpdevice"."user_id", "otp_totp_totpdevice"."name", "otp_totp_totpdevice"."confirmed", "otp_totp_totpdevice"."throttling_failure_timestamp", "otp_totp_totpdevice"."throttling_failure_count", "otp_totp_totpdevice"."created_at", "otp_totp_totpdevice"."last_used_at", "otp_totp_totpdevice"."key", "otp_totp_totpdevice"."step", "otp_totp_totpdevice"."t0", "otp_totp_totpdevice"."digits", "otp_totp_totpdevice"."tolerance", "otp_totp_totpdevice"."drift", "otp_totp_totpdevice"."last_t" FROM "otp_totp_totpdevice" WHERE ("otp_totp_totpdevice"."user_id" = 1 AND "otp_totp_totpdevice"."confirmed")
E   40. SELECT "django_otp_webauthn_webauthncredential"."id", "django_otp_webauthn_webauthncredential"."user_id", "django_otp_webauthn_webauthncredential"."name", "django_otp_webauthn_webauthncredential"."confirmed", "django_otp_webauthn_webauthncredential"."created_at", "django_otp_webauthn_webauthncredential"."last_used_at", "django_otp_webauthn_webauthncredential"."credential_type", "django_otp_webauthn_webauthncredential"."credential_id", "django_otp_webauthn_webauthncredential"."public_key", "django_otp_webauthn_webauthncredential"."transports", "django_otp_webauthn_webauthncredential"."sign_count", "django_otp_webauthn_webauthncredential"."backup_eligible", "django_otp_webauthn_webauthncredential"."backup_state", "django_otp_webauthn_webauthncredential"."aaguid", "django_otp_webauthn_webauthncredential"."credential_id_sha256", "django_otp_webauthn_webauthncredential"."discoverable" FROM "django_otp_webauthn_webauthncredential" WHERE "django_otp_webauthn_webauthncredential"."user_id" = 1
E   41. SELECT "weblate_auth_permission"."codename" AS "codename" FROM "weblate_auth_permission" INNER JOIN "weblate_auth_role_permissions" ON ("weblate_auth_permission"."id" = "weblate_auth_role_permissions"."permission_id") INNER JOIN "weblate_auth_role" ON ("weblate_auth_role_permissions"."role_id" = "weblate_auth_role"."id") INNER JOIN "weblate_auth_group_roles" ON ("weblate_auth_role"."id" = "weblate_auth_group_roles"."role_id") INNER JOIN "weblate_auth_group" ON ("weblate_auth_group_roles"."group_id" = "weblate_auth_group"."id") WHERE ("weblate_auth_permission"."codename" IN ('componentlist.edit', 'user.profile', 'management.use', 'user.edit', 'memory.manage', 'management.addons', 'user.browse', 'user.view', 'group.view', 'management.configure', 'announcement.edit', 'billing.manage', 'language.edit', 'group.edit', 'project.add', 'user.search', 'language.add', 'workspace.add', 'machinery.edit', 'role.edit', 'role.view') AND "weblate_auth_group"."defining_project_id" IS NULL AND "weblate_auth_group"."defining_workspace_id" IS NULL AND "weblate_auth_group_roles"."group_id" IN (SELECT U0."group_id" AS "group_id" FROM "weblate_auth_user_groups" U0 LEFT OUTER JOIN "weblate_auth_user_groups_limit_languages" U1 ON (U0."id" = U1."teammembership_id") INNER JOIN "weblate_auth_group" U4 ON (U0."group_id" = U4."id") WHERE (U1."language_id" IS NULL AND U0."user_id" = 1 AND NOT (U4."enforced_2fa"))))

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@nijel
nijel enabled auto-merge (rebase) November 1, 2026 11:43
Replace unreleased installation-wide visibility settings with editable global role permissions while preserving scoped contributor discovery and administrative access. Add frozen role and team migrations, regression coverage, and a privacy configuration guide covering profiles and private VCS identities.

Refs #22370, #22498, #18054
@nijel
nijel disabled auto-merge November 1, 2026 12:55
@nijel
nijel merged commit f27ca9f into main Nov 1, 2026
42 of 43 checks passed
@nijel
nijel deleted the feat/visibility branch November 1, 2026 12:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant