From ac6b504dff6360c906516119edf6ebd45f56abeb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:06:49 +0000 Subject: [PATCH 1/7] deps: bump pytest from 7.2.2 to 9.0.3 in /api Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.2.2 to 9.0.3. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.2.2...9.0.3) --- updated-dependencies: - dependency-name: pytest dependency-version: 9.0.3 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- api/poetry.lock | 34 +++++++++++++++++----------------- api/pyproject.toml | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index a10b9de29e30..1674e0868317 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -967,7 +967,7 @@ description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["dev"] -markers = "sys_platform == \"win32\" or platform_system == \"Windows\"" +markers = "platform_system == \"Windows\" or sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -3569,19 +3569,19 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "pluggy" -version = "1.2.0" +version = "1.6.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, ] [package.extras] dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +testing = ["coverage", "pytest", "pytest-benchmark"] [[package]] name = "pre-commit" @@ -4259,25 +4259,25 @@ s2repoze = ["paste", "repoze.who", "zope.interface"] [[package]] name = "pytest" -version = "7.2.2" +version = "9.0.3" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, - {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, + {file = "pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9"}, + {file = "pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c"}, ] [package.dependencies] -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +iniconfig = ">=1.0.1" +packaging = ">=22" +pluggy = ">=1.5,<2" +pygments = ">=2.7.2" [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" @@ -6022,4 +6022,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">3.11,<3.14" -content-hash = "3887d5db2a2c09afcc53b6bdda606a15226230b49c0e1712346099b7a3a71d52" +content-hash = "e77132ced9c59f8bc5f4c41d8bd2f3b2bdc89207a05c983c52ac7dbddc346028" diff --git a/api/pyproject.toml b/api/pyproject.toml index 91a41d6d1a2e..95d8d7e32788 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -242,7 +242,7 @@ pytest-xdist = "~3.6.1" pylint = "~2.16.2" pep8 = "~1.7.1" autopep8 = "~2.0.1" -pytest = "~7.2.1" +pytest = "~9.0.3" pytest-django = "^4.8.0" pytest-cov = "~4.1.0" datamodel-code-generator = "~0.25" From 8785bc0aeec3699912262d8f17c97fcc73c58963 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:04:56 +0000 Subject: [PATCH 2/7] fix: remove unused type: ignore[misc] comment in conftest.py after pytest 9.x upgrade Agent-Logs-Url: https://github.com/Flagsmith/flagsmith/sessions/b977b31b-bfe3-45f2-99d5-8eb3a23dd497 Co-authored-by: khvn26 <979078+khvn26@users.noreply.github.com> --- api/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/conftest.py b/api/conftest.py index deec0b19fb03..7315a209c8ed 100644 --- a/api/conftest.py +++ b/api/conftest.py @@ -120,7 +120,7 @@ def json(self) -> str: return mocker.patch("requests.post", side_effect=mocked_request) -@pytest.hookimpl(trylast=True) # type: ignore[misc] +@pytest.hookimpl(trylast=True) def pytest_configure(config: pytest.Config) -> None: if ( config.option.ci From 9ddb66b3024ca72a098c4cf749c9f129d3110eca Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 18:02:07 +0000 Subject: [PATCH 3/7] fix: replace pytest-lazy-fixture with pytest-lazy-fixtures for pytest 9.x compatibility Agent-Logs-Url: https://github.com/Flagsmith/flagsmith/sessions/96878e0f-102c-484a-ac5b-a32069f48df1 Co-authored-by: khvn26 <979078+khvn26@users.noreply.github.com> --- api/poetry.lock | 14 +++++++------- api/pyproject.toml | 2 +- api/tests/integration/core/test_commands.py | 2 +- .../integration/core/test_user_rate_throttle.py | 2 +- .../test_edge_identity_featurestates_viewset.py | 2 +- .../identities/test_integration_identities.py | 2 +- .../environments/test_integration_environments.py | 2 +- .../test_environment_featurestate_viewset.py | 2 +- .../test_simple_featurestate_viewset.py | 2 +- .../features/featurestate/test_webhooks.py | 2 +- .../multivariate/test_integration_multivariate.py | 2 +- api/tests/unit/api/test_unit_api.py | 2 +- api/tests/unit/api_keys/test_user.py | 2 +- .../test_edge_api_identities_serializers.py | 2 +- .../identities/test_edge_identity_models.py | 2 +- .../environments/test_unit_environments_views.py | 2 +- ...test_unit_environments_views_sdk_environment.py | 2 +- .../test_unit_feature_segments_views.py | 2 +- .../test_unit_feature_states_views.py | 2 +- .../multivariate/test_unit_multivariate_views.py | 2 +- .../unit/features/test_unit_features_models.py | 2 +- .../unit/features/test_unit_features_tasks.py | 2 +- .../unit/features/test_unit_features_views.py | 2 +- .../integrations/dynatrace/test_unit_dynatrace.py | 2 +- .../integrations/github/test_unit_github_views.py | 2 +- .../invites/test_unit_invites_views.py | 2 +- .../test_unit_subscriptions_permissions.py | 2 +- .../organisations/test_unit_organisations_views.py | 2 +- .../test_get_permitted_environments_for_user.py | 2 +- .../test_get_permitted_projects_for_user.py | 2 +- .../test_is_user_environment_admin.py | 2 +- .../test_is_user_project_admin.py | 2 +- .../test_master_api_key_permission_service.py | 2 +- .../projects/tags/test_unit_projects_tags_views.py | 2 +- .../unit/projects/test_unit_projects_views.py | 2 +- .../unit/segments/test_unit_segments_views.py | 2 +- api/tests/unit/sse/test_sse_service.py | 2 +- 37 files changed, 43 insertions(+), 43 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 1674e0868317..26ba7679f1f2 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -4334,19 +4334,19 @@ freezegun = ">0.3" pytest = ">=3.0.0" [[package]] -name = "pytest-lazy-fixture" -version = "0.6.3" +name = "pytest-lazy-fixtures" +version = "1.1.1" description = "It helps to use fixtures in pytest.mark.parametrize" optional = false -python-versions = "*" +python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "pytest-lazy-fixture-0.6.3.tar.gz", hash = "sha256:0e7d0c7f74ba33e6e80905e9bfd81f9d15ef9a790de97993e34213deb5ad10ac"}, - {file = "pytest_lazy_fixture-0.6.3-py3-none-any.whl", hash = "sha256:e0b379f38299ff27a653f03eaa69b08a6fd4484e46fd1c9907d984b9f9daeda6"}, + {file = "pytest_lazy_fixtures-1.1.1-py3-none-any.whl", hash = "sha256:a4b396a361faf56c6305535fd0175ce82902ca7cf668c4d812a25ed2bcde8183"}, + {file = "pytest_lazy_fixtures-1.1.1.tar.gz", hash = "sha256:0c561f0d29eea5b55cf29b9264a3241999ffdb74c6b6e8c4ccc0bd2c934d01ed"}, ] [package.dependencies] -pytest = ">=3.2.5" +pytest = ">=7.0.0" [[package]] name = "pytest-mock" @@ -6022,4 +6022,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">3.11,<3.14" -content-hash = "e77132ced9c59f8bc5f4c41d8bd2f3b2bdc89207a05c983c52ac7dbddc346028" +content-hash = "47ee533c57ca546feb7a79be0a43fc5f4b448b863cb915ae9b9038bf55a1930c" diff --git a/api/pyproject.toml b/api/pyproject.toml index 95d8d7e32788..9907d5e008ad 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -233,7 +233,7 @@ django-test-migrations = "^1.2.0" responses = "~0.22.0" pre-commit = "^4.0.1" pytest-mock = "~3.10.0" -pytest-lazy-fixture = "~0.6.3" +pytest-lazy-fixtures = "^1.1.1" moto = "~4.1.3" # TODO: move to https://github.com/adamchainz/time-machine pytest-freezegun = "^0.4.2" diff --git a/api/tests/integration/core/test_commands.py b/api/tests/integration/core/test_commands.py index a23965dc1bae..1038d79cc26e 100644 --- a/api/tests/integration/core/test_commands.py +++ b/api/tests/integration/core/test_commands.py @@ -3,7 +3,7 @@ from django.db.models import Model from djoser.utils import decode_uid # type: ignore[import-untyped] from pytest_django.fixtures import SettingsWrapper -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from organisations.models import ( Organisation, diff --git a/api/tests/integration/core/test_user_rate_throttle.py b/api/tests/integration/core/test_user_rate_throttle.py index d5e473a96473..7e91204ba7f0 100644 --- a/api/tests/integration/core/test_user_rate_throttle.py +++ b/api/tests/integration/core/test_user_rate_throttle.py @@ -2,7 +2,7 @@ import pytest from django.urls import reverse -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/integration/edge_api/identities/test_edge_identity_featurestates_viewset.py b/api/tests/integration/edge_api/identities/test_edge_identity_featurestates_viewset.py index e017a8729dd4..e3f89205e349 100644 --- a/api/tests/integration/edge_api/identities/test_edge_identity_featurestates_viewset.py +++ b/api/tests/integration/edge_api/identities/test_edge_identity_featurestates_viewset.py @@ -8,7 +8,7 @@ from django.urls import reverse from mypy_boto3_dynamodb.service_resource import Table from mypy_boto3_dynamodb.type_defs import TableAttributeValueTypeDef -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.exceptions import NotFound diff --git a/api/tests/integration/environments/identities/test_integration_identities.py b/api/tests/integration/environments/identities/test_integration_identities.py index fa2fa0dec78d..1264bde771a7 100644 --- a/api/tests/integration/environments/identities/test_integration_identities.py +++ b/api/tests/integration/environments/identities/test_integration_identities.py @@ -5,7 +5,7 @@ import pytest from django.urls import reverse -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/integration/environments/test_integration_environments.py b/api/tests/integration/environments/test_integration_environments.py index caef5c08e55e..b758dfd94758 100644 --- a/api/tests/integration/environments/test_integration_environments.py +++ b/api/tests/integration/environments/test_integration_environments.py @@ -4,7 +4,7 @@ import pytest from django.urls import reverse from pytest_django.fixtures import DjangoAssertNumQueries -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/integration/features/featurestate/test_environment_featurestate_viewset.py b/api/tests/integration/features/featurestate/test_environment_featurestate_viewset.py index 52c46456b253..18f5334b3870 100644 --- a/api/tests/integration/features/featurestate/test_environment_featurestate_viewset.py +++ b/api/tests/integration/features/featurestate/test_environment_featurestate_viewset.py @@ -2,7 +2,7 @@ import pytest from django.urls import reverse -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status diff --git a/api/tests/integration/features/featurestate/test_simple_featurestate_viewset.py b/api/tests/integration/features/featurestate/test_simple_featurestate_viewset.py index ba099e8b8ba5..e7f49e7ee91d 100644 --- a/api/tests/integration/features/featurestate/test_simple_featurestate_viewset.py +++ b/api/tests/integration/features/featurestate/test_simple_featurestate_viewset.py @@ -2,7 +2,7 @@ import pytest from django.urls import reverse -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status diff --git a/api/tests/integration/features/featurestate/test_webhooks.py b/api/tests/integration/features/featurestate/test_webhooks.py index 44bb33bc9f4f..a54c9b3e5022 100644 --- a/api/tests/integration/features/featurestate/test_webhooks.py +++ b/api/tests/integration/features/featurestate/test_webhooks.py @@ -6,7 +6,7 @@ import responses from django.urls import reverse from freezegun import freeze_time -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/integration/features/multivariate/test_integration_multivariate.py b/api/tests/integration/features/multivariate/test_integration_multivariate.py index 8b89b2f49224..194fbdf0535d 100644 --- a/api/tests/integration/features/multivariate/test_integration_multivariate.py +++ b/api/tests/integration/features/multivariate/test_integration_multivariate.py @@ -2,7 +2,7 @@ import pytest from django.urls import reverse -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/api/test_unit_api.py b/api/tests/unit/api/test_unit_api.py index 44601c375304..e92e2d23df70 100644 --- a/api/tests/unit/api/test_unit_api.py +++ b/api/tests/unit/api/test_unit_api.py @@ -1,6 +1,6 @@ import pytest from django.urls import reverse -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/api_keys/test_user.py b/api/tests/unit/api_keys/test_user.py index 5093c14a36cb..8d5b2dc56dd5 100644 --- a/api/tests/unit/api_keys/test_user.py +++ b/api/tests/unit/api_keys/test_user.py @@ -1,5 +1,5 @@ import pytest -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from api_keys.models import MasterAPIKey from api_keys.user import APIKeyUser diff --git a/api/tests/unit/edge_api/identities/test_edge_api_identities_serializers.py b/api/tests/unit/edge_api/identities/test_edge_api_identities_serializers.py index 361118396f56..b26134e9614c 100644 --- a/api/tests/unit/edge_api/identities/test_edge_api_identities_serializers.py +++ b/api/tests/unit/edge_api/identities/test_edge_api_identities_serializers.py @@ -1,7 +1,7 @@ import pytest from django.test import RequestFactory from django.utils import timezone -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from api_keys.user import APIKeyUser diff --git a/api/tests/unit/edge_api/identities/test_edge_identity_models.py b/api/tests/unit/edge_api/identities/test_edge_identity_models.py index 64c7740c44a8..513753ce89e6 100644 --- a/api/tests/unit/edge_api/identities/test_edge_identity_models.py +++ b/api/tests/unit/edge_api/identities/test_edge_identity_models.py @@ -6,7 +6,7 @@ from django.utils import timezone from freezegun import freeze_time from pytest_django import DjangoAssertNumQueries -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from api_keys.user import APIKeyUser diff --git a/api/tests/unit/environments/test_unit_environments_views.py b/api/tests/unit/environments/test_unit_environments_views.py index 1b53ada87a55..ae5674003354 100644 --- a/api/tests/unit/environments/test_unit_environments_views.py +++ b/api/tests/unit/environments/test_unit_environments_views.py @@ -10,7 +10,7 @@ from django.urls import reverse from flag_engine.segments.constants import EQUAL from pytest_django import DjangoAssertNumQueries -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/environments/test_unit_environments_views_sdk_environment.py b/api/tests/unit/environments/test_unit_environments_views_sdk_environment.py index 4b471ab4b4a7..c1d8184b1600 100644 --- a/api/tests/unit/environments/test_unit_environments_views_sdk_environment.py +++ b/api/tests/unit/environments/test_unit_environments_views_sdk_environment.py @@ -6,7 +6,7 @@ from django.urls import reverse from django.utils import timezone from django.utils.http import http_date -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/features/feature_segments/test_unit_feature_segments_views.py b/api/tests/unit/features/feature_segments/test_unit_feature_segments_views.py index ba1e99fffe1e..fd3a6d8f1140 100644 --- a/api/tests/unit/features/feature_segments/test_unit_feature_segments_views.py +++ b/api/tests/unit/features/feature_segments/test_unit_feature_segments_views.py @@ -10,7 +10,7 @@ from django.conf import settings from django.urls import reverse from pytest_django import DjangoAssertNumQueries -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/features/feature_states/test_unit_feature_states_views.py b/api/tests/unit/features/feature_states/test_unit_feature_states_views.py index d11244a590c4..7d1d023fa96a 100644 --- a/api/tests/unit/features/feature_states/test_unit_feature_states_views.py +++ b/api/tests/unit/features/feature_states/test_unit_feature_states_views.py @@ -4,7 +4,7 @@ import pytest from common.environments.permissions import UPDATE_FEATURE_STATE from django.urls import reverse -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/features/multivariate/test_unit_multivariate_views.py b/api/tests/unit/features/multivariate/test_unit_multivariate_views.py index b98f1323155e..41ea97aebca3 100644 --- a/api/tests/unit/features/multivariate/test_unit_multivariate_views.py +++ b/api/tests/unit/features/multivariate/test_unit_multivariate_views.py @@ -6,7 +6,7 @@ VIEW_PROJECT, ) from django.urls import reverse -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status from features.multivariate.views import MultivariateFeatureOptionViewSet diff --git a/api/tests/unit/features/test_unit_features_models.py b/api/tests/unit/features/test_unit_features_models.py index 4b5d07ecd23f..a7cc7d09ddca 100644 --- a/api/tests/unit/features/test_unit_features_models.py +++ b/api/tests/unit/features/test_unit_features_models.py @@ -6,7 +6,7 @@ from django.core.exceptions import ValidationError from django.db.utils import IntegrityError from django.utils import timezone -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from environments.identities.models import Identity diff --git a/api/tests/unit/features/test_unit_features_tasks.py b/api/tests/unit/features/test_unit_features_tasks.py index 480b872a3d17..b91c2e8b6ac1 100644 --- a/api/tests/unit/features/test_unit_features_tasks.py +++ b/api/tests/unit/features/test_unit_features_tasks.py @@ -1,5 +1,5 @@ import pytest -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from api_keys.models import MasterAPIKey diff --git a/api/tests/unit/features/test_unit_features_views.py b/api/tests/unit/features/test_unit_features_views.py index d4e95211f581..8ab715189789 100644 --- a/api/tests/unit/features/test_unit_features_views.py +++ b/api/tests/unit/features/test_unit_features_views.py @@ -23,7 +23,7 @@ from freezegun import freeze_time from pytest_django import DjangoAssertNumQueries from pytest_django.fixtures import SettingsWrapper -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/integrations/dynatrace/test_unit_dynatrace.py b/api/tests/unit/integrations/dynatrace/test_unit_dynatrace.py index 64afb3ca470c..882a59bd8093 100644 --- a/api/tests/unit/integrations/dynatrace/test_unit_dynatrace.py +++ b/api/tests/unit/integrations/dynatrace/test_unit_dynatrace.py @@ -2,7 +2,7 @@ import pytest from django.contrib.auth.models import AbstractUser -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from audit.models import AuditLog diff --git a/api/tests/unit/integrations/github/test_unit_github_views.py b/api/tests/unit/integrations/github/test_unit_github_views.py index 6f6cf5ead487..9038fd52a1aa 100644 --- a/api/tests/unit/integrations/github/test_unit_github_views.py +++ b/api/tests/unit/integrations/github/test_unit_github_views.py @@ -7,7 +7,7 @@ import requests import responses from django.urls import reverse -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.response import Response diff --git a/api/tests/unit/organisations/invites/test_unit_invites_views.py b/api/tests/unit/organisations/invites/test_unit_invites_views.py index 2f2547f065e6..1706bd680c00 100644 --- a/api/tests/unit/organisations/invites/test_unit_invites_views.py +++ b/api/tests/unit/organisations/invites/test_unit_invites_views.py @@ -9,7 +9,7 @@ from django.urls import reverse from django.utils import timezone from pytest_django.fixtures import SettingsWrapper -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock.plugin import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/organisations/subscriptions/test_unit_subscriptions_permissions.py b/api/tests/unit/organisations/subscriptions/test_unit_subscriptions_permissions.py index 166bf90bf47e..75e39ef50c12 100644 --- a/api/tests/unit/organisations/subscriptions/test_unit_subscriptions_permissions.py +++ b/api/tests/unit/organisations/subscriptions/test_unit_subscriptions_permissions.py @@ -1,7 +1,7 @@ from unittest.mock import MagicMock import pytest -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework.request import Request from organisations.models import Organisation, Subscription diff --git a/api/tests/unit/organisations/test_unit_organisations_views.py b/api/tests/unit/organisations/test_unit_organisations_views.py index be0a07fd8ae3..4a77fb659375 100644 --- a/api/tests/unit/organisations/test_unit_organisations_views.py +++ b/api/tests/unit/organisations/test_unit_organisations_views.py @@ -15,7 +15,7 @@ from django.utils import timezone from freezegun import freeze_time from pytest_django.fixtures import SettingsWrapper -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from pytz import UTC from rest_framework import status diff --git a/api/tests/unit/permissions/permission_service/test_get_permitted_environments_for_user.py b/api/tests/unit/permissions/permission_service/test_get_permitted_environments_for_user.py index b47d3dcad6c8..4a4afee1a06d 100644 --- a/api/tests/unit/permissions/permission_service/test_get_permitted_environments_for_user.py +++ b/api/tests/unit/permissions/permission_service/test_get_permitted_environments_for_user.py @@ -6,7 +6,7 @@ UPDATE_FEATURE_STATE, VIEW_ENVIRONMENT, ) -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from environments.models import Environment from environments.permissions.models import ( diff --git a/api/tests/unit/permissions/permission_service/test_get_permitted_projects_for_user.py b/api/tests/unit/permissions/permission_service/test_get_permitted_projects_for_user.py index 99a80f0e995c..598c658364ad 100644 --- a/api/tests/unit/permissions/permission_service/test_get_permitted_projects_for_user.py +++ b/api/tests/unit/permissions/permission_service/test_get_permitted_projects_for_user.py @@ -6,7 +6,7 @@ DELETE_FEATURE, VIEW_PROJECT, ) -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from organisations.models import Organisation, UserOrganisation from permissions.models import PermissionModel diff --git a/api/tests/unit/permissions/permission_service/test_is_user_environment_admin.py b/api/tests/unit/permissions/permission_service/test_is_user_environment_admin.py index 4b91851a7b31..1c903cdddef5 100644 --- a/api/tests/unit/permissions/permission_service/test_is_user_environment_admin.py +++ b/api/tests/unit/permissions/permission_service/test_is_user_environment_admin.py @@ -2,7 +2,7 @@ import pytest from django.conf import settings -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from environments.models import Environment from environments.permissions.models import ( diff --git a/api/tests/unit/permissions/permission_service/test_is_user_project_admin.py b/api/tests/unit/permissions/permission_service/test_is_user_project_admin.py index 054f91bf3dd3..db932d4a9768 100644 --- a/api/tests/unit/permissions/permission_service/test_is_user_project_admin.py +++ b/api/tests/unit/permissions/permission_service/test_is_user_project_admin.py @@ -1,7 +1,7 @@ import typing import pytest -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from organisations.models import Organisation, UserOrganisation from permissions.permission_service import is_user_project_admin diff --git a/api/tests/unit/permissions/permission_service/test_master_api_key_permission_service.py b/api/tests/unit/permissions/permission_service/test_master_api_key_permission_service.py index 8c8cfe466082..3b2842d029f4 100644 --- a/api/tests/unit/permissions/permission_service/test_master_api_key_permission_service.py +++ b/api/tests/unit/permissions/permission_service/test_master_api_key_permission_service.py @@ -1,5 +1,5 @@ import pytest -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from environments.permissions.models import EnvironmentPermissionModel from organisations.permissions.models import OrganisationPermissionModel diff --git a/api/tests/unit/projects/tags/test_unit_projects_tags_views.py b/api/tests/unit/projects/tags/test_unit_projects_tags_views.py index ce31a9ba0c5e..0e3ad8426466 100644 --- a/api/tests/unit/projects/tags/test_unit_projects_tags_views.py +++ b/api/tests/unit/projects/tags/test_unit_projects_tags_views.py @@ -3,7 +3,7 @@ import pytest from common.projects.permissions import VIEW_PROJECT from django.urls import reverse -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/projects/test_unit_projects_views.py b/api/tests/unit/projects/test_unit_projects_views.py index 03747f288934..e9e81eda4d86 100644 --- a/api/tests/unit/projects/test_unit_projects_views.py +++ b/api/tests/unit/projects/test_unit_projects_views.py @@ -11,7 +11,7 @@ from django.urls import reverse from django.utils import timezone from pytest_django.fixtures import SettingsWrapper -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/segments/test_unit_segments_views.py b/api/tests/unit/segments/test_unit_segments_views.py index 54e3cd786c81..a5456220b1f9 100644 --- a/api/tests/unit/segments/test_unit_segments_views.py +++ b/api/tests/unit/segments/test_unit_segments_views.py @@ -13,7 +13,7 @@ from flag_engine.segments.constants import EQUAL from pytest_django import DjangoAssertNumQueries from pytest_django.fixtures import SettingsWrapper -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/sse/test_sse_service.py b/api/tests/unit/sse/test_sse_service.py index 8f60c1d6f6a3..9dbbfea34c85 100644 --- a/api/tests/unit/sse/test_sse_service.py +++ b/api/tests/unit/sse/test_sse_service.py @@ -3,7 +3,7 @@ from botocore.exceptions import ClientError from django.conf import settings from moto import mock_s3 # type: ignore[import-untyped] -from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from pytest_lazy_fixtures import lazy_fixture from pytest_mock import MockerFixture from sse.dataclasses import SSEAccessLogs From 4864254148ea32ce6bc6cf26e4579f82c1ece963 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Apr 2026 14:35:29 +0000 Subject: [PATCH 4/7] fix: regenerate poetry.lock with pytest-lazy-fixtures via poetry lock Agent-Logs-Url: https://github.com/Flagsmith/flagsmith/sessions/29784329-84f5-4826-8f34-211613da9b14 Co-authored-by: khvn26 <979078+khvn26@users.noreply.github.com> --- api/poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 26ba7679f1f2..c51d2ff3d4d5 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -967,7 +967,7 @@ description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["dev"] -markers = "platform_system == \"Windows\" or sys_platform == \"win32\"" +markers = "sys_platform == \"win32\" or platform_system == \"Windows\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -4336,9 +4336,9 @@ pytest = ">=3.0.0" [[package]] name = "pytest-lazy-fixtures" version = "1.1.1" -description = "It helps to use fixtures in pytest.mark.parametrize" +description = "Allows you to use fixtures in @pytest.mark.parametrize." optional = false -python-versions = ">=3.8" +python-versions = "<4.0,>=3.8" groups = ["dev"] files = [ {file = "pytest_lazy_fixtures-1.1.1-py3-none-any.whl", hash = "sha256:a4b396a361faf56c6305535fd0175ce82902ca7cf668c4d812a25ed2bcde8183"}, @@ -4346,7 +4346,7 @@ files = [ ] [package.dependencies] -pytest = ">=7.0.0" +pytest = ">=7" [[package]] name = "pytest-mock" @@ -6022,4 +6022,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">3.11,<3.14" -content-hash = "47ee533c57ca546feb7a79be0a43fc5f4b448b863cb915ae9b9038bf55a1930c" +content-hash = "2b377d891da4eef473cd5fd12da5d7dbd42d29a327d6aac779e7c2e5fbe7c31c" From ca04bbf6960bac3cb119bdea1b747fb63fdcab18 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Apr 2026 20:18:38 +0000 Subject: [PATCH 5/7] fix: use lf as lazy_fixture import from pytest_lazy_fixtures to fix mypy errors Agent-Logs-Url: https://github.com/Flagsmith/flagsmith/sessions/9e94922e-309f-4d3c-8dde-5636e8a42fcd Co-authored-by: khvn26 <979078+khvn26@users.noreply.github.com> --- api/tests/integration/core/test_commands.py | 2 +- api/tests/integration/core/test_user_rate_throttle.py | 2 +- .../identities/test_edge_identity_featurestates_viewset.py | 2 +- .../environments/identities/test_integration_identities.py | 2 +- .../integration/environments/test_integration_environments.py | 2 +- .../featurestate/test_environment_featurestate_viewset.py | 2 +- .../features/featurestate/test_simple_featurestate_viewset.py | 2 +- api/tests/integration/features/featurestate/test_webhooks.py | 2 +- .../features/multivariate/test_integration_multivariate.py | 2 +- api/tests/unit/api/test_unit_api.py | 2 +- api/tests/unit/api_keys/test_user.py | 2 +- .../edge_api/identities/test_edge_api_identities_serializers.py | 2 +- api/tests/unit/edge_api/identities/test_edge_identity_models.py | 2 +- api/tests/unit/environments/test_unit_environments_views.py | 2 +- .../test_unit_environments_views_sdk_environment.py | 2 +- .../feature_segments/test_unit_feature_segments_views.py | 2 +- .../features/feature_states/test_unit_feature_states_views.py | 2 +- .../unit/features/multivariate/test_unit_multivariate_views.py | 2 +- api/tests/unit/features/test_unit_features_models.py | 2 +- api/tests/unit/features/test_unit_features_tasks.py | 2 +- api/tests/unit/features/test_unit_features_views.py | 2 +- api/tests/unit/integrations/dynatrace/test_unit_dynatrace.py | 2 +- api/tests/unit/integrations/github/test_unit_github_views.py | 2 +- api/tests/unit/organisations/invites/test_unit_invites_views.py | 2 +- .../subscriptions/test_unit_subscriptions_permissions.py | 2 +- api/tests/unit/organisations/test_unit_organisations_views.py | 2 +- .../test_get_permitted_environments_for_user.py | 2 +- .../permission_service/test_get_permitted_projects_for_user.py | 2 +- .../permission_service/test_is_user_environment_admin.py | 2 +- .../permission_service/test_is_user_project_admin.py | 2 +- .../test_master_api_key_permission_service.py | 2 +- api/tests/unit/projects/tags/test_unit_projects_tags_views.py | 2 +- api/tests/unit/projects/test_unit_projects_views.py | 2 +- api/tests/unit/segments/test_unit_segments_views.py | 2 +- api/tests/unit/sse/test_sse_service.py | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/api/tests/integration/core/test_commands.py b/api/tests/integration/core/test_commands.py index 1038d79cc26e..8196a169e98d 100644 --- a/api/tests/integration/core/test_commands.py +++ b/api/tests/integration/core/test_commands.py @@ -3,7 +3,7 @@ from django.db.models import Model from djoser.utils import decode_uid # type: ignore[import-untyped] from pytest_django.fixtures import SettingsWrapper -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from organisations.models import ( Organisation, diff --git a/api/tests/integration/core/test_user_rate_throttle.py b/api/tests/integration/core/test_user_rate_throttle.py index 7e91204ba7f0..86f91a120caa 100644 --- a/api/tests/integration/core/test_user_rate_throttle.py +++ b/api/tests/integration/core/test_user_rate_throttle.py @@ -2,7 +2,7 @@ import pytest from django.urls import reverse -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/integration/edge_api/identities/test_edge_identity_featurestates_viewset.py b/api/tests/integration/edge_api/identities/test_edge_identity_featurestates_viewset.py index e3f89205e349..1433fe09e765 100644 --- a/api/tests/integration/edge_api/identities/test_edge_identity_featurestates_viewset.py +++ b/api/tests/integration/edge_api/identities/test_edge_identity_featurestates_viewset.py @@ -8,7 +8,7 @@ from django.urls import reverse from mypy_boto3_dynamodb.service_resource import Table from mypy_boto3_dynamodb.type_defs import TableAttributeValueTypeDef -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.exceptions import NotFound diff --git a/api/tests/integration/environments/identities/test_integration_identities.py b/api/tests/integration/environments/identities/test_integration_identities.py index 1264bde771a7..a5d4c7fcffd3 100644 --- a/api/tests/integration/environments/identities/test_integration_identities.py +++ b/api/tests/integration/environments/identities/test_integration_identities.py @@ -5,7 +5,7 @@ import pytest from django.urls import reverse -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/integration/environments/test_integration_environments.py b/api/tests/integration/environments/test_integration_environments.py index b758dfd94758..f16a36ba20e5 100644 --- a/api/tests/integration/environments/test_integration_environments.py +++ b/api/tests/integration/environments/test_integration_environments.py @@ -4,7 +4,7 @@ import pytest from django.urls import reverse from pytest_django.fixtures import DjangoAssertNumQueries -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/integration/features/featurestate/test_environment_featurestate_viewset.py b/api/tests/integration/features/featurestate/test_environment_featurestate_viewset.py index 18f5334b3870..588c4e323169 100644 --- a/api/tests/integration/features/featurestate/test_environment_featurestate_viewset.py +++ b/api/tests/integration/features/featurestate/test_environment_featurestate_viewset.py @@ -2,7 +2,7 @@ import pytest from django.urls import reverse -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status diff --git a/api/tests/integration/features/featurestate/test_simple_featurestate_viewset.py b/api/tests/integration/features/featurestate/test_simple_featurestate_viewset.py index e7f49e7ee91d..6baf2352c761 100644 --- a/api/tests/integration/features/featurestate/test_simple_featurestate_viewset.py +++ b/api/tests/integration/features/featurestate/test_simple_featurestate_viewset.py @@ -2,7 +2,7 @@ import pytest from django.urls import reverse -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status diff --git a/api/tests/integration/features/featurestate/test_webhooks.py b/api/tests/integration/features/featurestate/test_webhooks.py index a54c9b3e5022..85156c2c2d97 100644 --- a/api/tests/integration/features/featurestate/test_webhooks.py +++ b/api/tests/integration/features/featurestate/test_webhooks.py @@ -6,7 +6,7 @@ import responses from django.urls import reverse from freezegun import freeze_time -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/integration/features/multivariate/test_integration_multivariate.py b/api/tests/integration/features/multivariate/test_integration_multivariate.py index 194fbdf0535d..9f01664beb6a 100644 --- a/api/tests/integration/features/multivariate/test_integration_multivariate.py +++ b/api/tests/integration/features/multivariate/test_integration_multivariate.py @@ -2,7 +2,7 @@ import pytest from django.urls import reverse -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/api/test_unit_api.py b/api/tests/unit/api/test_unit_api.py index e92e2d23df70..a54b9b375b00 100644 --- a/api/tests/unit/api/test_unit_api.py +++ b/api/tests/unit/api/test_unit_api.py @@ -1,6 +1,6 @@ import pytest from django.urls import reverse -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/api_keys/test_user.py b/api/tests/unit/api_keys/test_user.py index 8d5b2dc56dd5..c7a71683799d 100644 --- a/api/tests/unit/api_keys/test_user.py +++ b/api/tests/unit/api_keys/test_user.py @@ -1,5 +1,5 @@ import pytest -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from api_keys.models import MasterAPIKey from api_keys.user import APIKeyUser diff --git a/api/tests/unit/edge_api/identities/test_edge_api_identities_serializers.py b/api/tests/unit/edge_api/identities/test_edge_api_identities_serializers.py index b26134e9614c..49374ceef516 100644 --- a/api/tests/unit/edge_api/identities/test_edge_api_identities_serializers.py +++ b/api/tests/unit/edge_api/identities/test_edge_api_identities_serializers.py @@ -1,7 +1,7 @@ import pytest from django.test import RequestFactory from django.utils import timezone -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from api_keys.user import APIKeyUser diff --git a/api/tests/unit/edge_api/identities/test_edge_identity_models.py b/api/tests/unit/edge_api/identities/test_edge_identity_models.py index 513753ce89e6..6b2f845e1ef5 100644 --- a/api/tests/unit/edge_api/identities/test_edge_identity_models.py +++ b/api/tests/unit/edge_api/identities/test_edge_identity_models.py @@ -6,7 +6,7 @@ from django.utils import timezone from freezegun import freeze_time from pytest_django import DjangoAssertNumQueries -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from api_keys.user import APIKeyUser diff --git a/api/tests/unit/environments/test_unit_environments_views.py b/api/tests/unit/environments/test_unit_environments_views.py index ae5674003354..30b0a9a71cd4 100644 --- a/api/tests/unit/environments/test_unit_environments_views.py +++ b/api/tests/unit/environments/test_unit_environments_views.py @@ -10,7 +10,7 @@ from django.urls import reverse from flag_engine.segments.constants import EQUAL from pytest_django import DjangoAssertNumQueries -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/environments/test_unit_environments_views_sdk_environment.py b/api/tests/unit/environments/test_unit_environments_views_sdk_environment.py index c1d8184b1600..22a4f46e2573 100644 --- a/api/tests/unit/environments/test_unit_environments_views_sdk_environment.py +++ b/api/tests/unit/environments/test_unit_environments_views_sdk_environment.py @@ -6,7 +6,7 @@ from django.urls import reverse from django.utils import timezone from django.utils.http import http_date -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/features/feature_segments/test_unit_feature_segments_views.py b/api/tests/unit/features/feature_segments/test_unit_feature_segments_views.py index fd3a6d8f1140..92fe9afc0f9e 100644 --- a/api/tests/unit/features/feature_segments/test_unit_feature_segments_views.py +++ b/api/tests/unit/features/feature_segments/test_unit_feature_segments_views.py @@ -10,7 +10,7 @@ from django.conf import settings from django.urls import reverse from pytest_django import DjangoAssertNumQueries -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/features/feature_states/test_unit_feature_states_views.py b/api/tests/unit/features/feature_states/test_unit_feature_states_views.py index 7d1d023fa96a..99bd8428210e 100644 --- a/api/tests/unit/features/feature_states/test_unit_feature_states_views.py +++ b/api/tests/unit/features/feature_states/test_unit_feature_states_views.py @@ -4,7 +4,7 @@ import pytest from common.environments.permissions import UPDATE_FEATURE_STATE from django.urls import reverse -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/features/multivariate/test_unit_multivariate_views.py b/api/tests/unit/features/multivariate/test_unit_multivariate_views.py index 41ea97aebca3..888a6dc5c73c 100644 --- a/api/tests/unit/features/multivariate/test_unit_multivariate_views.py +++ b/api/tests/unit/features/multivariate/test_unit_multivariate_views.py @@ -6,7 +6,7 @@ VIEW_PROJECT, ) from django.urls import reverse -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status from features.multivariate.views import MultivariateFeatureOptionViewSet diff --git a/api/tests/unit/features/test_unit_features_models.py b/api/tests/unit/features/test_unit_features_models.py index a7cc7d09ddca..10c5f368a000 100644 --- a/api/tests/unit/features/test_unit_features_models.py +++ b/api/tests/unit/features/test_unit_features_models.py @@ -6,7 +6,7 @@ from django.core.exceptions import ValidationError from django.db.utils import IntegrityError from django.utils import timezone -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from environments.identities.models import Identity diff --git a/api/tests/unit/features/test_unit_features_tasks.py b/api/tests/unit/features/test_unit_features_tasks.py index b91c2e8b6ac1..24e86fb6b684 100644 --- a/api/tests/unit/features/test_unit_features_tasks.py +++ b/api/tests/unit/features/test_unit_features_tasks.py @@ -1,5 +1,5 @@ import pytest -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from api_keys.models import MasterAPIKey diff --git a/api/tests/unit/features/test_unit_features_views.py b/api/tests/unit/features/test_unit_features_views.py index 8ab715189789..44fbf5a73b6c 100644 --- a/api/tests/unit/features/test_unit_features_views.py +++ b/api/tests/unit/features/test_unit_features_views.py @@ -23,7 +23,7 @@ from freezegun import freeze_time from pytest_django import DjangoAssertNumQueries from pytest_django.fixtures import SettingsWrapper -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/integrations/dynatrace/test_unit_dynatrace.py b/api/tests/unit/integrations/dynatrace/test_unit_dynatrace.py index 882a59bd8093..609c22cb363b 100644 --- a/api/tests/unit/integrations/dynatrace/test_unit_dynatrace.py +++ b/api/tests/unit/integrations/dynatrace/test_unit_dynatrace.py @@ -2,7 +2,7 @@ import pytest from django.contrib.auth.models import AbstractUser -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from audit.models import AuditLog diff --git a/api/tests/unit/integrations/github/test_unit_github_views.py b/api/tests/unit/integrations/github/test_unit_github_views.py index 9038fd52a1aa..4e2abbdc1e8a 100644 --- a/api/tests/unit/integrations/github/test_unit_github_views.py +++ b/api/tests/unit/integrations/github/test_unit_github_views.py @@ -7,7 +7,7 @@ import requests import responses from django.urls import reverse -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.response import Response diff --git a/api/tests/unit/organisations/invites/test_unit_invites_views.py b/api/tests/unit/organisations/invites/test_unit_invites_views.py index 1706bd680c00..ad872220a753 100644 --- a/api/tests/unit/organisations/invites/test_unit_invites_views.py +++ b/api/tests/unit/organisations/invites/test_unit_invites_views.py @@ -9,7 +9,7 @@ from django.urls import reverse from django.utils import timezone from pytest_django.fixtures import SettingsWrapper -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock.plugin import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/organisations/subscriptions/test_unit_subscriptions_permissions.py b/api/tests/unit/organisations/subscriptions/test_unit_subscriptions_permissions.py index 75e39ef50c12..3a153aeed380 100644 --- a/api/tests/unit/organisations/subscriptions/test_unit_subscriptions_permissions.py +++ b/api/tests/unit/organisations/subscriptions/test_unit_subscriptions_permissions.py @@ -1,7 +1,7 @@ from unittest.mock import MagicMock import pytest -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework.request import Request from organisations.models import Organisation, Subscription diff --git a/api/tests/unit/organisations/test_unit_organisations_views.py b/api/tests/unit/organisations/test_unit_organisations_views.py index 4a77fb659375..96efd9872a66 100644 --- a/api/tests/unit/organisations/test_unit_organisations_views.py +++ b/api/tests/unit/organisations/test_unit_organisations_views.py @@ -15,7 +15,7 @@ from django.utils import timezone from freezegun import freeze_time from pytest_django.fixtures import SettingsWrapper -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from pytz import UTC from rest_framework import status diff --git a/api/tests/unit/permissions/permission_service/test_get_permitted_environments_for_user.py b/api/tests/unit/permissions/permission_service/test_get_permitted_environments_for_user.py index 4a4afee1a06d..93d3e77775f9 100644 --- a/api/tests/unit/permissions/permission_service/test_get_permitted_environments_for_user.py +++ b/api/tests/unit/permissions/permission_service/test_get_permitted_environments_for_user.py @@ -6,7 +6,7 @@ UPDATE_FEATURE_STATE, VIEW_ENVIRONMENT, ) -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from environments.models import Environment from environments.permissions.models import ( diff --git a/api/tests/unit/permissions/permission_service/test_get_permitted_projects_for_user.py b/api/tests/unit/permissions/permission_service/test_get_permitted_projects_for_user.py index 598c658364ad..47f1157f23c7 100644 --- a/api/tests/unit/permissions/permission_service/test_get_permitted_projects_for_user.py +++ b/api/tests/unit/permissions/permission_service/test_get_permitted_projects_for_user.py @@ -6,7 +6,7 @@ DELETE_FEATURE, VIEW_PROJECT, ) -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from organisations.models import Organisation, UserOrganisation from permissions.models import PermissionModel diff --git a/api/tests/unit/permissions/permission_service/test_is_user_environment_admin.py b/api/tests/unit/permissions/permission_service/test_is_user_environment_admin.py index 1c903cdddef5..556eec3b127f 100644 --- a/api/tests/unit/permissions/permission_service/test_is_user_environment_admin.py +++ b/api/tests/unit/permissions/permission_service/test_is_user_environment_admin.py @@ -2,7 +2,7 @@ import pytest from django.conf import settings -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from environments.models import Environment from environments.permissions.models import ( diff --git a/api/tests/unit/permissions/permission_service/test_is_user_project_admin.py b/api/tests/unit/permissions/permission_service/test_is_user_project_admin.py index db932d4a9768..de95c546bf5e 100644 --- a/api/tests/unit/permissions/permission_service/test_is_user_project_admin.py +++ b/api/tests/unit/permissions/permission_service/test_is_user_project_admin.py @@ -1,7 +1,7 @@ import typing import pytest -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from organisations.models import Organisation, UserOrganisation from permissions.permission_service import is_user_project_admin diff --git a/api/tests/unit/permissions/permission_service/test_master_api_key_permission_service.py b/api/tests/unit/permissions/permission_service/test_master_api_key_permission_service.py index 3b2842d029f4..3d8940074f76 100644 --- a/api/tests/unit/permissions/permission_service/test_master_api_key_permission_service.py +++ b/api/tests/unit/permissions/permission_service/test_master_api_key_permission_service.py @@ -1,5 +1,5 @@ import pytest -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from environments.permissions.models import EnvironmentPermissionModel from organisations.permissions.models import OrganisationPermissionModel diff --git a/api/tests/unit/projects/tags/test_unit_projects_tags_views.py b/api/tests/unit/projects/tags/test_unit_projects_tags_views.py index 0e3ad8426466..2ffd74c05900 100644 --- a/api/tests/unit/projects/tags/test_unit_projects_tags_views.py +++ b/api/tests/unit/projects/tags/test_unit_projects_tags_views.py @@ -3,7 +3,7 @@ import pytest from common.projects.permissions import VIEW_PROJECT from django.urls import reverse -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/projects/test_unit_projects_views.py b/api/tests/unit/projects/test_unit_projects_views.py index e9e81eda4d86..6d839380b956 100644 --- a/api/tests/unit/projects/test_unit_projects_views.py +++ b/api/tests/unit/projects/test_unit_projects_views.py @@ -11,7 +11,7 @@ from django.urls import reverse from django.utils import timezone from pytest_django.fixtures import SettingsWrapper -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/segments/test_unit_segments_views.py b/api/tests/unit/segments/test_unit_segments_views.py index a5456220b1f9..4e8aeb17d721 100644 --- a/api/tests/unit/segments/test_unit_segments_views.py +++ b/api/tests/unit/segments/test_unit_segments_views.py @@ -13,7 +13,7 @@ from flag_engine.segments.constants import EQUAL from pytest_django import DjangoAssertNumQueries from pytest_django.fixtures import SettingsWrapper -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from rest_framework import status from rest_framework.test import APIClient diff --git a/api/tests/unit/sse/test_sse_service.py b/api/tests/unit/sse/test_sse_service.py index 9dbbfea34c85..3526ba09586a 100644 --- a/api/tests/unit/sse/test_sse_service.py +++ b/api/tests/unit/sse/test_sse_service.py @@ -3,7 +3,7 @@ from botocore.exceptions import ClientError from django.conf import settings from moto import mock_s3 # type: ignore[import-untyped] -from pytest_lazy_fixtures import lazy_fixture +from pytest_lazy_fixtures import lf as lazy_fixture from pytest_mock import MockerFixture from sse.dataclasses import SSEAccessLogs From 5b06a7f9c829b886cf425adc74adedbcf79b4b41 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Apr 2026 20:47:18 +0000 Subject: [PATCH 6/7] fix: add pytest_lazyfixture compatibility shim for private test modules Agent-Logs-Url: https://github.com/Flagsmith/flagsmith/sessions/9e94922e-309f-4d3c-8dde-5636e8a42fcd Co-authored-by: khvn26 <979078+khvn26@users.noreply.github.com> --- api/pytest_lazyfixture.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 api/pytest_lazyfixture.py diff --git a/api/pytest_lazyfixture.py b/api/pytest_lazyfixture.py new file mode 100644 index 000000000000..59b03db6845e --- /dev/null +++ b/api/pytest_lazyfixture.py @@ -0,0 +1,6 @@ +# Compatibility shim: pytest-lazy-fixture was replaced with pytest-lazy-fixtures. +# This module allows third-party test code that still imports from pytest_lazyfixture +# to continue working without modification. +from pytest_lazy_fixtures import lf as lazy_fixture + +__all__ = ["lazy_fixture"] From 0eb76d24598bbf8736ada6d40dc6b51ad5d6fa5d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Apr 2026 20:47:40 +0000 Subject: [PATCH 7/7] revert: remove pytest_lazyfixture shim (fix belongs in flagsmith-rbac) Agent-Logs-Url: https://github.com/Flagsmith/flagsmith/sessions/9e94922e-309f-4d3c-8dde-5636e8a42fcd Co-authored-by: khvn26 <979078+khvn26@users.noreply.github.com> --- api/pytest_lazyfixture.py | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 api/pytest_lazyfixture.py diff --git a/api/pytest_lazyfixture.py b/api/pytest_lazyfixture.py deleted file mode 100644 index 59b03db6845e..000000000000 --- a/api/pytest_lazyfixture.py +++ /dev/null @@ -1,6 +0,0 @@ -# Compatibility shim: pytest-lazy-fixture was replaced with pytest-lazy-fixtures. -# This module allows third-party test code that still imports from pytest_lazyfixture -# to continue working without modification. -from pytest_lazy_fixtures import lf as lazy_fixture - -__all__ = ["lazy_fixture"]