From c99d8c7738cd6efef80aafc6d62add5bb764f038 Mon Sep 17 00:00:00 2001 From: Sahil Date: Mon, 18 May 2026 14:27:02 +0530 Subject: [PATCH 1/3] fixed multiple environmnet document queued --- api/core/workflows_services.py | 12 ------ api/features/versioning/receivers.py | 5 ++- .../test_unit_versioning_receiver.py | 42 +++++++++++++++++++ .../core/test_unit_workflows_models.py | 18 ++------ 4 files changed, 50 insertions(+), 27 deletions(-) create mode 100644 api/tests/unit/features/versioning/test_unit_versioning_receiver.py diff --git a/api/core/workflows_services.py b/api/core/workflows_services.py index 2547681e56a2..b824fa0a4ee8 100644 --- a/api/core/workflows_services.py +++ b/api/core/workflows_services.py @@ -86,18 +86,6 @@ def _publish_environment_feature_versions( ) for environment_feature_version in environment_feature_versions: - trigger_update_version_webhooks.delay( - kwargs={ - "environment_feature_version_uuid": str( - environment_feature_version.uuid - ) - }, - delay_until=environment_feature_version.live_from, - ) - rebuild_environment_document.delay( - kwargs={"environment_id": self.change_request.environment_id}, - delay_until=environment_feature_version.live_from, - ) environment_feature_version_published.send( EnvironmentFeatureVersion, instance=environment_feature_version ) diff --git a/api/features/versioning/receivers.py b/api/features/versioning/receivers.py index 175fd1113f55..e6de2b24a249 100644 --- a/api/features/versioning/receivers.py +++ b/api/features/versioning/receivers.py @@ -44,7 +44,10 @@ def cache_fields(instance: EnvironmentFeatureVersion, **kwargs): # type: ignore @receiver(environment_feature_version_published, sender=EnvironmentFeatureVersion) -def update_environment_document(instance: EnvironmentFeatureVersion, **kwargs): # type: ignore[no-untyped-def] +def update_environment_document(instance: EnvironmentFeatureVersion, **kwargs) -> None: # type: ignore[no-untyped-def] + now = timezone.now() + if not instance.live_from or instance.live_from <= now: + return rebuild_environment_document.delay( kwargs={"environment_id": instance.environment_id}, delay_until=instance.live_from, diff --git a/api/tests/unit/features/versioning/test_unit_versioning_receiver.py b/api/tests/unit/features/versioning/test_unit_versioning_receiver.py new file mode 100644 index 000000000000..bdaf8053cc2d --- /dev/null +++ b/api/tests/unit/features/versioning/test_unit_versioning_receiver.py @@ -0,0 +1,42 @@ +from datetime import timedelta +from unittest import mock + +from django.utils import timezone + +from features.versioning.receivers import update_environment_document + + +def test_update_environment_document__immediate_publish__does_not_schedule_rebuild() -> None: + # Given + mock_instance = mock.MagicMock() + mock_instance.live_from = timezone.now() - timedelta(seconds=1) + mock_instance.environment_id = 1 + + # When + with mock.patch( + "features.versioning.receivers.rebuild_environment_document" + ) as mock_rebuild: + update_environment_document(instance=mock_instance) + + # Then + mock_rebuild.delay.assert_not_called() + + +def test_update_environment_document__scheduled_publish__schedules_rebuild_at_live_from() -> None: + # Given + future = timezone.now() + timedelta(hours=1) + mock_instance = mock.MagicMock() + mock_instance.live_from = future + mock_instance.environment_id = 1 + + # When + with mock.patch( + "features.versioning.receivers.rebuild_environment_document" + ) as mock_rebuild: + update_environment_document(instance=mock_instance) + + # Then + mock_rebuild.delay.assert_called_once_with( + kwargs={"environment_id": 1}, + delay_until=future, + ) diff --git a/api/tests/unit/features/workflows/core/test_unit_workflows_models.py b/api/tests/unit/features/workflows/core/test_unit_workflows_models.py index 4068d34021d4..1be447aeb132 100644 --- a/api/tests/unit/features/workflows/core/test_unit_workflows_models.py +++ b/api/tests/unit/features/workflows/core/test_unit_workflows_models.py @@ -699,11 +699,8 @@ def test_change_request_commit__v2_versioning__publishes_environment_feature_ver change_request.environment_feature_versions.add(environment_feature_version) - mock_rebuild_environment_document_task = mocker.patch( - "core.workflows_services.rebuild_environment_document" - ) - mock_trigger_update_version_webhooks = mocker.patch( - "core.workflows_services.trigger_update_version_webhooks" + mock_signal = mocker.patch( + "core.workflows_services.environment_feature_version_published" ) # When @@ -715,15 +712,8 @@ def test_change_request_commit__v2_versioning__publishes_environment_feature_ver assert environment_feature_version.published_by == admin_user assert environment_feature_version.live_from == now - mock_rebuild_environment_document_task.delay.assert_called_once_with( - kwargs={"environment_id": environment.id}, - delay_until=environment_feature_version.live_from, - ) - mock_trigger_update_version_webhooks.delay.assert_called_once_with( - kwargs={ - "environment_feature_version_uuid": str(environment_feature_version.uuid) - }, - delay_until=environment_feature_version.live_from, + mock_signal.send.assert_called_once_with( + EnvironmentFeatureVersion, instance=environment_feature_version ) From 7415b43bfbd3e8807cdbc7fd141d363873fffcef Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 18 May 2026 09:01:12 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- api/core/workflows_services.py | 2 -- .../features/versioning/test_unit_versioning_receiver.py | 8 ++++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/api/core/workflows_services.py b/api/core/workflows_services.py index b824fa0a4ee8..3b706e3e3c87 100644 --- a/api/core/workflows_services.py +++ b/api/core/workflows_services.py @@ -4,10 +4,8 @@ from django.db import transaction from django.utils import timezone -from environments.tasks import rebuild_environment_document from features.versioning.models import EnvironmentFeatureVersion from features.versioning.signals import environment_feature_version_published -from features.versioning.tasks import trigger_update_version_webhooks from features.workflows.core.exceptions import ChangeRequestNotApprovedError if TYPE_CHECKING: diff --git a/api/tests/unit/features/versioning/test_unit_versioning_receiver.py b/api/tests/unit/features/versioning/test_unit_versioning_receiver.py index bdaf8053cc2d..ff499cc04c2b 100644 --- a/api/tests/unit/features/versioning/test_unit_versioning_receiver.py +++ b/api/tests/unit/features/versioning/test_unit_versioning_receiver.py @@ -6,7 +6,9 @@ from features.versioning.receivers import update_environment_document -def test_update_environment_document__immediate_publish__does_not_schedule_rebuild() -> None: +def test_update_environment_document__immediate_publish__does_not_schedule_rebuild() -> ( + None +): # Given mock_instance = mock.MagicMock() mock_instance.live_from = timezone.now() - timedelta(seconds=1) @@ -22,7 +24,9 @@ def test_update_environment_document__immediate_publish__does_not_schedule_rebui mock_rebuild.delay.assert_not_called() -def test_update_environment_document__scheduled_publish__schedules_rebuild_at_live_from() -> None: +def test_update_environment_document__scheduled_publish__schedules_rebuild_at_live_from() -> ( + None +): # Given future = timezone.now() + timedelta(hours=1) mock_instance = mock.MagicMock() From e633be743fac83f66b6c812a1276e73fc8da51a5 Mon Sep 17 00:00:00 2001 From: SahilJat Date: Mon, 18 May 2026 15:42:50 +0530 Subject: [PATCH 3/3] chore: regenerate events catalogue --- api/flagsmith_api.egg-info/PKG-INFO | 280 +++ api/flagsmith_api.egg-info/SOURCES.txt | 1692 +++++++++++++++++ .../dependency_links.txt | 1 + api/flagsmith_api.egg-info/requires.txt | 133 ++ api/flagsmith_api.egg-info/top_level.txt | 34 + .../observability/_events-catalogue.md | 6 +- 6 files changed, 2143 insertions(+), 3 deletions(-) create mode 100644 api/flagsmith_api.egg-info/PKG-INFO create mode 100644 api/flagsmith_api.egg-info/SOURCES.txt create mode 100644 api/flagsmith_api.egg-info/dependency_links.txt create mode 100644 api/flagsmith_api.egg-info/requires.txt create mode 100644 api/flagsmith_api.egg-info/top_level.txt diff --git a/api/flagsmith_api.egg-info/PKG-INFO b/api/flagsmith_api.egg-info/PKG-INFO new file mode 100644 index 000000000000..62168ba5bfb7 --- /dev/null +++ b/api/flagsmith_api.egg-info/PKG-INFO @@ -0,0 +1,280 @@ +Metadata-Version: 2.4 +Name: flagsmith-api +Version: 2.68.0 +Summary: The API component for the Flagsmith application. +Author-email: Flagsmith +Requires-Python: <3.14,>=3.11 +Description-Content-Type: text/markdown +Requires-Dist: django<6,>=5 +Requires-Dist: rudder-sdk-python<2.1.0,>=2.0.2 +Requires-Dist: segment-analytics-python<2.3.0,>=2.2.3 +Requires-Dist: backoff<2.3.0,>=2.2.1 +Requires-Dist: appdirs<1.5.0,>=1.4.4 +Requires-Dist: django-cors-headers<3.6.0,>=3.5.0 +Requires-Dist: djangorestframework<3.16.0,>=3.15.2 +Requires-Dist: gunicorn<23.1.0,>=23.0.0 +Requires-Dist: pyparsing<2.5.0,>=2.4.7 +Requires-Dist: requests<2.34.0,>=2.33.0 +Requires-Dist: six<1.17.0,>=1.16.0 +Requires-Dist: whitenoise<6.1.0,>=6.0.0 +Requires-Dist: dj-database-url<3.1.0,>=3.0.1 +Requires-Dist: drf-nested-routers<0.93.0,>=0.92.1 +Requires-Dist: shortuuid<1.1.0,>=1.0.1 +Requires-Dist: sendgrid-django<4.3.0,>=4.2.0 +Requires-Dist: psycopg2-binary<2.10.0,>=2.9.5 +Requires-Dist: coreapi<2.4.0,>=2.3.3 +Requires-Dist: django-simple-history<2.13.0,>=2.12.0 +Requires-Dist: google-api-python-client<1.13.0,>=1.12.5 +Requires-Dist: oauth2client<4.2.0,>=4.1.3 +Requires-Dist: djangorestframework-recursive<0.2.0,>=0.1.2 +Requires-Dist: chargebee<4.0.0,>=3.10.0 +Requires-Dist: python-http-client<3.4.0,>=3.3.7 +Requires-Dist: django-health-check<3.19.0,>=3.18.2 +Requires-Dist: django-admin-sso<5.3.0,>=5.2.0 +Requires-Dist: drf-spectacular<0.29.0,>=0.28.0 +Requires-Dist: sentry-sdk<3,>=2.24.1 +Requires-Dist: environs<15.0.0,>=14.1.1 +Requires-Dist: django-lifecycle<1.3.0,>=1.2.4 +Requires-Dist: drf-writable-nested<0.7.0,>=0.6.2 +Requires-Dist: django-filter<2.5.0,>=2.4.0 +Requires-Dist: flagsmith-flag-engine<11.0.0,>=10.1.0 +Requires-Dist: boto3<1.36.0,>=1.35.95 +Requires-Dist: slack-sdk<3.10.0,>=3.9.0 +Requires-Dist: asgiref<3.9.0,>=3.8.1 +Requires-Dist: djangorestframework-api-key<2.3.0,>=2.2.0 +Requires-Dist: pymemcache<4.1.0,>=4.0.0 +Requires-Dist: google-re2<2.0.0,>=1.0 +Requires-Dist: django-softdelete<0.12.0,>=0.11.5 +Requires-Dist: simplejson<3.20.0,>=3.19.1 +Requires-Dist: djoser<3.0.0,>=2.3.0 +Requires-Dist: django-storages<1.11.0,>=1.10.1 +Requires-Dist: django-environ<0.5.0,>=0.4.5 +Requires-Dist: influxdb-client<1.51.0,>=1.50.0 +Requires-Dist: django-ordered-model<3.5.0,>=3.4.1 +Requires-Dist: django-ses<3.6.0,>=3.5.0 +Requires-Dist: django-axes<9.0.0,>=8.1.0 +Requires-Dist: pydantic<3.0.0,>=2.12.0 +Requires-Dist: pydantic-collections<0.7.0,>=0.6.0 +Requires-Dist: pyngo<2.5.0,>=2.4.1 +Requires-Dist: flagsmith<6.0.0,>=5.3.0 +Requires-Dist: openfeature-sdk<0.10.0,>=0.9.0 +Requires-Dist: openfeature-provider-flagsmith>=0.2.0 +Requires-Dist: python-gnupg<0.6.0,>=0.5.1 +Requires-Dist: django-redis<6.0.0,>=5.4.0 +Requires-Dist: pygithub<2.9.0,>=2.8 +Requires-Dist: hubspot-api-client<13.0.0,>=12.0.0 +Requires-Dist: djangorestframework-dataclasses<2.0.0,>=1.3.1 +Requires-Dist: pyotp<3.0.0,>=2.9.0 +Requires-Dist: flagsmith-common[common-core,flagsmith-schemas,task-processor]<4,>=3.9.0 +Requires-Dist: django-stubs<6.0.0,>=5.1.3 +Requires-Dist: tzdata<2025.0.0,>=2024.1 +Requires-Dist: djangorestframework-simplejwt<6.0.0,>=5.5.1 +Requires-Dist: structlog<25.0.0,>=24.4.0 +Requires-Dist: prometheus-client<0.22.0,>=0.21.1 +Requires-Dist: django-cockroachdb<4.3.0,>=4.2 +Requires-Dist: django-oauth-toolkit<4.0.0,>=3.0.1 +Provides-Extra: auth-controller +Requires-Dist: auth-controller; extra == "auth-controller" +Requires-Dist: django-multiselectfield<2,>=1.0.1; extra == "auth-controller" +Provides-Extra: saml +Requires-Dist: pysaml2<8.0.0,>=7.4.2; extra == "saml" +Provides-Extra: ldap +Requires-Dist: flagsmith-ldap; extra == "ldap" +Requires-Dist: django-python3-ldap<1,>=0.15.6; extra == "ldap" +Provides-Extra: workflows +Requires-Dist: workflows-logic; extra == "workflows" +Provides-Extra: licensing +Requires-Dist: licensing; extra == "licensing" +Requires-Dist: cryptography>=44.0.1; extra == "licensing" +Provides-Extra: release-pipelines +Requires-Dist: flagsmith-private<1,>=0.5.1; extra == "release-pipelines" +Provides-Extra: scim +Requires-Dist: flagsmith-private<1,>=0.5.1; extra == "scim" +Provides-Extra: dev +Requires-Dist: django-test-migrations<2.0.0,>=1.2.0; extra == "dev" +Requires-Dist: responses<0.23.0,>=0.22.0; extra == "dev" +Requires-Dist: pre-commit<5.0.0,>=4.0.1; extra == "dev" +Requires-Dist: pytest-mock<3.11.0,>=3.10.0; extra == "dev" +Requires-Dist: pytest-lazy-fixture<0.7.0,>=0.6.3; extra == "dev" +Requires-Dist: moto<4.2.0,>=4.1.3; extra == "dev" +Requires-Dist: pytest-freezegun<0.5.0,>=0.4.2; extra == "dev" +Requires-Dist: setuptools; extra == "dev" +Requires-Dist: pytest-xdist<3.7.0,>=3.6.1; extra == "dev" +Requires-Dist: pylint<2.17.0,>=2.16.2; extra == "dev" +Requires-Dist: pep8<1.8.0,>=1.7.1; extra == "dev" +Requires-Dist: autopep8<2.1.0,>=2.0.1; extra == "dev" +Requires-Dist: pytest<7.3.0,>=7.2.1; extra == "dev" +Requires-Dist: pytest-django<5.0.0,>=4.8.0; extra == "dev" +Requires-Dist: pytest-cov<4.2.0,>=4.1.0; extra == "dev" +Requires-Dist: datamodel-code-generator<0.26.0,>=0.25; extra == "dev" +Requires-Dist: requests-mock<2.0.0,>=1.11.0; extra == "dev" +Requires-Dist: django-extensions<4.0.0,>=3.2.3; extra == "dev" +Requires-Dist: pdbpp<0.11.0,>=0.10.3; extra == "dev" +Requires-Dist: mypy-boto3-dynamodb<2.0.0,>=1.33.0; extra == "dev" +Requires-Dist: pytest-structlog<2.0.0,>=1.1; extra == "dev" +Requires-Dist: pyfakefs<6.0.0,>=5.7.4; extra == "dev" +Requires-Dist: mypy<2.0.0,>=1.15.0; extra == "dev" +Requires-Dist: djangorestframework-stubs<4.0.0,>=3.15.2; extra == "dev" +Requires-Dist: boto3-stubs<2.0.0,>=1.36.20; extra == "dev" +Requires-Dist: types-requests<3.0.0,>=2.32.0.20241016; extra == "dev" +Requires-Dist: types-markdown<4.0.0,>=3.7.0.20241204; extra == "dev" +Requires-Dist: types-pygments<3.0.0,>=2.19.0.20250107; extra == "dev" +Requires-Dist: types-influxdb-client<2.0.0,>=1.45.0.20241221; extra == "dev" +Requires-Dist: types-psycopg2<3.0.0,>=2.9.21.20250121; extra == "dev" +Requires-Dist: types-python-dateutil<3.0.0,>=2.9.0.20241206; extra == "dev" +Requires-Dist: types-pytz<2026.0.0,>=2025.1.0.20250204; extra == "dev" +Requires-Dist: ruff<0.10.0,>=0.9.7; extra == "dev" +Requires-Dist: flagsmith-common[test-tools]; extra == "dev" +Requires-Dist: pytest-responses<0.6.0,>=0.5.1; extra == "dev" +Requires-Dist: diff-cover<11.0.0,>=10.1.0; extra == "dev" +Requires-Dist: django-debug-toolbar; extra == "dev" +Requires-Dist: ipython<10.0.0,>=9.10.0; extra == "dev" +Requires-Dist: email-validator>=2.0.0; extra == "dev" + +## Flagsmith API + +### Local development + +The project assumes the following tools installed: +- [Python](https://www.python.org/downloads/). Any version allowed by `requires-python` in `pyproject.toml` is supported. +- [GNU Make](https://www.gnu.org/software/make/). +- Docker or a compatible tool like [Podman](https://podman.io/). We recommend [OrbStack](https://orbstack.dev/) for macOS. + +To install dev dependencies, run `make install`. Only Flagsmith maintainers can run `uv lock` due to private dependencies. + +To run linters, run `make lint`. + +To run tests, run `make test`. + +To run a subset of tests or an individual test, run `make test opts=''`. If the number of test is too low for xdist, consider adding `-n0` to pytest args. + +To prepare a dev database, run `make docker-up django-migrate`. + +To bring up a dev server, run `make serve`, or `make serve-with-task-processor` to run the Task processor alongside the server. + +### Code guidelines: testing + +The required diff test coverage for our backend PRs is 100%. This policy gives us more confidence to ship, helps us to find bugs earlier, and promotes the test-driven development (TDD) approach. We encourage you to add new tests, and modify existing ones, ahead of writing the code. + +This codebase includes two kinds of tests: +- Black box API tests in `tests/integration` directory. Ideally, these are intended to only invoke API endpoints, and verify their output. +- Tests for individual modules, classes and functions in `tests/unit` directory. + +We avoid class-based tests. To manage test lifecycle and dependencies, we rely on Pytest features such as fixtures, markers, parametrisation, and hooks. Read `conftest.py` for commonly used fixtures. + +We enforce the `test_{subject}__{condition}__{expected outcome}` template for test names, e.g. `test_get_version__valid_file_contents__returns_version_number`. + +We use the Given When Then structure in all our tests. + +### Code guidelines: metrics + +The Flagsmith backend exports Prometheus metrics. When planning a feature, consider which metrics should cover it — counters for domain events, histograms for latency or sizes, gauges for cardinalities. See [documentation for existing metrics](https://docs.flagsmith.com/deployment-self-hosting/observability/metrics). Metrics code is hosted in `metrics.py` modules. + +Name metrics `flagsmith_{domain}_{entity}_{unit}` and give them a comprehensive description. + +### Code guidelines: logs + +We use structured logging to mark up interesting operational and product events. Events emitted via structlog also flow through an OpenTelemetry pipeline and may be routed to a CDP or a data warehouse for product analytics. + +When planning a feature, decide which moments deserve an event: things a product manager would ask about (an integration set up, a workflow committed, an import completed), or that a future oncall engineer would need to debug an incident. One well-shaped event per moment beats a wall of free-form `logging.info` calls. + +```python +import structlog + +# Use logger name as the event domain: +logger = structlog.get_logger("workflows") + +# This will produce a `workflows.change_request.committed` OTLP log event +# with the following attributes: +# - organisation.id +# - environment.id +# - feature_states.count +logger.info( + "change_request.committed", + organisation__id=environment.project.organisation_id, + environment__id=environment.id, + feature_states__count=change_request.feature_states.count(), +) +``` + +In your tests, verify your logs with the `caplog` fixture: + +```python +from pytest_structlog import StructuredLogCapture + +def test_my_view__success__logs_expected( + log: StructuredLogCapture, +) -> None: + # Given / When + ... + + # Then + assert log.events == [ + { + "level": "info", + "event": "action.succeeded", + "organisation__id": organisation.id, + } + ] +``` + +Conventions: + +- Logger name is the domain namespace — typically the app or package (`workflows`, `code_references`, `feature_health`). +- Event name is `entity.action` in snake_case (`scan.created`, `change_request.committed`). Do not repeat the logger name in the event, i.e `get_logger("saml")` with `"saml.configuration.created"` is redundant. +- Use double underscore to namespace event attributes, i.e. `namespace__property` will be emitted as `namespace.property`. Include the IDs of the entities the event is about (`organisation__id`, `project__id`, `environment__id`, `feature__id`) so events can be correlated with each other. +- Bind shared context once with `logger.bind(...)` rather than repeating attributes at every call site. +- Avoid PII — identify users and organisations by ID. + +For errors, use `logger.exception(...)` or pass `exc_info=exc`, and keep the event name actionable (`import.failed`, not `error`). + +### Code guidelines: feature flags (Flagsmith on Flagsmith) + +To gate and gradually roll out features in the backend, we use the [OpenFeature](https://openfeature.dev/) SDK with a Flagsmith provider running in local evaluation mode: + +```python +from integrations.flagsmith.client import get_openfeature_client + +client = get_openfeature_client() +ai_enabled = client.get_boolean_value( + "ai", + default_value=False, + evaluation_context=organisation.openfeature_evaluation_context, +) +``` + +Organisations expose an `openfeature_evaluation_context` property carrying common traits — use it for org-scoped targeting. For other subjects, build an `EvaluationContext` with a stable `targeting_key` and the attributes your targeting rules need. + +Add your feature as early as possible to the Flagsmith on Flagsmith project, and run the `updateflagsmithenvironment` management command to synchronise the local cache. You can use [Flagsmith MCP](https://docs.flagsmith.com/integrating-with-flagsmith/mcp-server) to integrate Flagsmith in your development flow. + +### Code guidelines: migrations + +To auto-generate migrations for your new code, run `make docker-up django-make-migrations`. + +The prompt will ask you for a name and not generate one; we avoid auto-generated migration names. + +Squash newly added migrations whenever you can. + +### Code guidelines: typing + +This codebase, including tests, is fully type-checked by Mypy in strict mode. Resolving existing `# type: ignore` comments is always welcome. If you happen to bring a new `# type: ignore` comment, please document the reason, and consider fixing a small number of adjacent `# type: ignore` comments, if possible and appropriate for the scope of your task. + +To run a full type check, run `make typecheck`. + +### Code guidelines: design and architecture + +Core API consists of Django apps with usual Django submodules like: +- `apps.py` +- `middleware.py` +- `models.py` +- `serializers.py` +- `views.py` +- `urls.py` + +We tend to add our own layers in the following modules: +- `constants.py` for app-wide constant variables. +- `dataclasses.py` for dataclass definitions, typically used for internal data transfer objects (DTOs). +- `mappers.py` for data mapping logic unrelated to API requests and responses. +- `services.py` for encapsulated business logic. Our goal with this layer is to make the views, models and serialisers leaner, so that the business logic is more clearly defined and easier to compose. +- `tasks.py` for defining asynchronous and recurring tasks. +- `types.py` for custom type definitions, including typed dicts. diff --git a/api/flagsmith_api.egg-info/SOURCES.txt b/api/flagsmith_api.egg-info/SOURCES.txt new file mode 100644 index 000000000000..7e368ad4b344 --- /dev/null +++ b/api/flagsmith_api.egg-info/SOURCES.txt @@ -0,0 +1,1692 @@ +README.md +pyproject.toml +api/__init__.py +api/apps.py +api/models.py +api/openapi.py +api/openapi_views.py +api/serializers.py +api/migrations/0001_initial.py +api/migrations/0002_auto_20170619_1243.py +api/migrations/0003_auto_20170619_1255.py +api/migrations/0004_identity_uuid.py +api/migrations/0005_auto_20180514_1557.py +api/migrations/0006_auto_20180514_1622.py +api/migrations/0007_auto_20180517_1011.py +api/migrations/0008_auto_20180517_1104.py +api/migrations/0009_auto_20180517_1418.py +api/migrations/0010_remove_identity_hash.py +api/migrations/0011_auto_20180517_1646.py +api/migrations/0012_delete_ffadminuser.py +api/migrations/0013_featurestate_value.py +api/migrations/0014_auto_20180522_0928.py +api/migrations/0015_auto_20180522_0931.py +api/migrations/0016_auto_20180522_1311.py +api/migrations/0017_feature_description.py +api/migrations/0018_auto_20180524_1521.py +api/migrations/0019_auto_20180525_1436.py +api/migrations/0020_auto_20180525_1541.py +api/migrations/0021_auto_20180525_1651.py +api/migrations/__init__.py +api/urls/__init__.py +api/urls/deprecated.py +api/urls/experiments.py +api/urls/v1.py +api/urls/v2.py +api_keys/__init__.py +api_keys/admin.py +api_keys/apps.py +api_keys/authentication.py +api_keys/models.py +api_keys/serializers.py +api_keys/user.py +api_keys/views.py +api_keys/migrations/0001_initial.py +api_keys/migrations/0002_soft_delete_api_keys.py +api_keys/migrations/0003_masterapikey_is_admin.py +api_keys/migrations/0004_add_created_by.py +api_keys/migrations/__init__.py +app/__init__.py +app/exceptions.py +app/handlers.py +app/pagination.py +app/routers.py +app/urls.py +app/utils.py +app/views.py +app/wsgi.py +app/settings/__init__.py +app/settings/common.py +app/settings/develop.py +app/settings/local.py +app/settings/production.py +app/settings/test.py +app/templates/robots.txt +app_analytics/__init__.py +app_analytics/analytics_db_service.py +app_analytics/apps.py +app_analytics/cache.py +app_analytics/constants.py +app_analytics/dataclasses.py +app_analytics/experiments.py +app_analytics/influxdb_wrapper.py +app_analytics/mappers.py +app_analytics/middleware.py +app_analytics/migrate_to_pg.py +app_analytics/models.py +app_analytics/permissions.py +app_analytics/query.py +app_analytics/serializers.py +app_analytics/services.py +app_analytics/tasks.py +app_analytics/throttles.py +app_analytics/track.py +app_analytics/types.py +app_analytics/views.py +app_analytics/management/commands/migrate_analytics.py +app_analytics/management/commands/populate_buckets.py +app_analytics/management/commands/sendapiusagetoinflux.py +app_analytics/migrations/0001_initial.py +app_analytics/migrations/0002_featureevaluationraw_identifier_and_index_feature.py +app_analytics/migrations/0003_add_feature_name_index.py +app_analytics/migrations/0004_apiusageraw_count.py +app_analytics/migrations/0005_featureevaluationraw_created_at_idx.py +app_analytics/migrations/0006_add_labels.py +app_analytics/migrations/0007_rename_environment_id_created_at_index.py +app_analytics/migrations/0008_labels_jsonb.py +app_analytics/migrations/__init__.py +audit/__init__.py +audit/apps.py +audit/constants.py +audit/models.py +audit/permissions.py +audit/related_object_type.py +audit/serializers.py +audit/services.py +audit/signals.py +audit/tasks.py +audit/types.py +audit/urls.py +audit/views.py +audit/migrations/0001_initial.py +audit/migrations/0002_auto_20190909_1153.py +audit/migrations/0003_auto_20190910_1545.py +audit/migrations/0004_auto_20200504_1322.py +audit/migrations/0005_auditlog_skip_signals.py +audit/migrations/0006_auditlog_master_api_key.py +audit/migrations/0007_auditlog_is_system_event.py +audit/migrations/0008_attach_historical_record_to_audit_log.py +audit/migrations/0010_do_nothing_on_project_or_environment_delete.py +audit/migrations/0011_auditlog_related_object_uuid.py +audit/migrations/0012_auto_20230517_1006.py +audit/migrations/0013_allow_manual_override_of_created_date.py +audit/migrations/__init__.py +core/__init__.py +core/apps.py +core/constants.py +core/dataclasses.py +core/helpers.py +core/migration_helpers.py +core/models.py +core/redis_cluster.py +core/request_origin.py +core/signals.py +core/signing.py +core/throttling.py +core/workflows_services.py +core/custom_admin/__init__.py +core/custom_admin/admin.py +core/custom_admin/apps.py +core/management/__init__.py +core/management/commands/__init__.py +core/management/commands/bootstrap.py +core/management/commands/makemigrations.py +core/management/commands/rollbackmigrationsappliedafter.py +core/management/commands/waitfordb.py +core/middleware/__init__.py +core/middleware/admin.py +core/middleware/axes.py +core/middleware/cache_control.py +custom_auth/__init__.py +custom_auth/admin.py +custom_auth/apps.py +custom_auth/constants.py +custom_auth/models.py +custom_auth/permissions.py +custom_auth/serializers.py +custom_auth/tasks.py +custom_auth/urls.py +custom_auth/views.py +custom_auth/jwt_cookie/__init__.py +custom_auth/jwt_cookie/authentication.py +custom_auth/jwt_cookie/constants.py +custom_auth/jwt_cookie/services.py +custom_auth/jwt_cookie/signals.py +custom_auth/jwt_cookie/views.py +custom_auth/mfa/__init__.py +custom_auth/mfa/backends/__init__.py +custom_auth/mfa/backends/application.py +custom_auth/mfa/trench/__init__.py +custom_auth/mfa/trench/admin.py +custom_auth/mfa/trench/apps.py +custom_auth/mfa/trench/exceptions.py +custom_auth/mfa/trench/models.py +custom_auth/mfa/trench/responses.py +custom_auth/mfa/trench/serializers.py +custom_auth/mfa/trench/utils.py +custom_auth/mfa/trench/backends/__init__.py +custom_auth/mfa/trench/command/__init__.py +custom_auth/mfa/trench/command/activate_mfa_method.py +custom_auth/mfa/trench/command/authenticate_second_factor.py +custom_auth/mfa/trench/command/create_mfa_method.py +custom_auth/mfa/trench/command/create_secret.py +custom_auth/mfa/trench/command/deactivate_mfa_method.py +custom_auth/mfa/trench/command/generate_backup_codes.py +custom_auth/mfa/trench/command/remove_backup_code.py +custom_auth/mfa/trench/command/replace_mfa_method_backup_codes.py +custom_auth/mfa/trench/command/validate_backup_code.py +custom_auth/mfa/trench/migrations/0001_initial.py +custom_auth/mfa/trench/migrations/0002_auto_20190111_1403.py +custom_auth/mfa/trench/migrations/0003_auto_20190213_2330.py +custom_auth/mfa/trench/migrations/0004_add_created_at_and_updated_at.py +custom_auth/mfa/trench/migrations/__init__.py +custom_auth/mfa/trench/urls/__init__.py +custom_auth/mfa/trench/urls/base.py +custom_auth/mfa/trench/views/__init__.py +custom_auth/mfa/trench/views/base.py +custom_auth/migrations/0001_initial.py +custom_auth/migrations/__init__.py +custom_auth/oauth/__init__.py +custom_auth/oauth/exceptions.py +custom_auth/oauth/github.py +custom_auth/oauth/google.py +custom_auth/oauth/serializers.py +custom_auth/oauth/urls.py +custom_auth/oauth/views.py +custom_auth/oauth/helpers/__init__.py +custom_auth/oauth/helpers/github_helpers.py +e2etests/__init__.py +e2etests/e2e_seed_data.py +e2etests/middleware.py +e2etests/permissions.py +e2etests/urls.py +e2etests/views.py +edge_api/__init__.py +edge_api/apps.py +edge_api/utils.py +edge_api/identities/__init__.py +edge_api/identities/apps.py +edge_api/identities/edge_identity_service.py +edge_api/identities/edge_request_forwarder.py +edge_api/identities/events.py +edge_api/identities/exceptions.py +edge_api/identities/export.py +edge_api/identities/models.py +edge_api/identities/openapi.py +edge_api/identities/permissions.py +edge_api/identities/search.py +edge_api/identities/serializers.py +edge_api/identities/tasks.py +edge_api/identities/types.py +edge_api/identities/utils.py +edge_api/identities/views.py +edge_api/management/commands/__init__.py +edge_api/management/commands/ensure_identity_traits_blanks.py +edge_api/management/commands/migrate_to_edge_v2.py +environments/__init__.py +environments/admin.py +environments/api_keys.py +environments/apps.py +environments/authentication.py +environments/constants.py +environments/enums.py +environments/exceptions.py +environments/managers.py +environments/metrics.py +environments/models.py +environments/serializers.py +environments/tasks.py +environments/urls.py +environments/views.py +environments/dynamodb/__init__.py +environments/dynamodb/constants.py +environments/dynamodb/migrator.py +environments/dynamodb/services.py +environments/dynamodb/types.py +environments/dynamodb/utils.py +environments/dynamodb/wrappers/__init__.py +environments/dynamodb/wrappers/base.py +environments/dynamodb/wrappers/environment_api_key_wrapper.py +environments/dynamodb/wrappers/environment_wrapper.py +environments/dynamodb/wrappers/exceptions.py +environments/dynamodb/wrappers/identity_wrapper.py +environments/identities/__init__.py +environments/identities/admin.py +environments/identities/apps.py +environments/identities/managers.py +environments/identities/models.py +environments/identities/serializers.py +environments/identities/views.py +environments/identities/migrations/0001_initial.py +environments/identities/migrations/0002_alter_identity_index_together.py +environments/identities/migrations/0003_sanitized_identifiers.py +environments/identities/migrations/0004_allow_spaces_in_identifiers.py +environments/identities/migrations/0005_revert_sanitized_identifiers.py +environments/identities/migrations/0006_rename_environment_created_date_index.py +environments/identities/migrations/__init__.py +environments/identities/traits/__init__.py +environments/identities/traits/admin.py +environments/identities/traits/constants.py +environments/identities/traits/exceptions.py +environments/identities/traits/fields.py +environments/identities/traits/models.py +environments/identities/traits/openapi.py +environments/identities/traits/serializers.py +environments/identities/traits/views.py +environments/identities/traits/migrations/0001_initial.py +environments/identities/traits/migrations/0002_alter_trait_boolean_value.py +environments/identities/traits/migrations/__init__.py +environments/management/__init__.py +environments/management/serializers.py +environments/management/commands/__init__.py +environments/management/commands/migrate_to_edge.py +environments/migrations/0001_initial.py +environments/migrations/0002_auto_20180809_0014.py +environments/migrations/0003_auto_20180925_0915.py +environments/migrations/0004_auto_20181026_1438.py +environments/migrations/0005_auto_20181128_1013.py +environments/migrations/0006_auditlog.py +environments/migrations/0007_auto_20190827_1528.py +environments/migrations/0008_webhook.py +environments/migrations/0009_auto_20200219_1922.py +environments/migrations/0010_auto_20200219_2343.py +environments/migrations/0011_auto_20200220_0044.py +environments/migrations/0012_auto_20200504_1322.py +environments/migrations/0013_auto_20200619_1321.py +environments/migrations/0014_auto_20200917_1032.py +environments/migrations/0015_auto_20200916_1441.py +environments/migrations/0016_webhook_secret.py +environments/migrations/0017_add_environment_api_key_model.py +environments/migrations/0018_add_minimum_change_request_approvals_to_environment.py +environments/migrations/0019_allow_blank_minimum_change_request_approvals.py +environments/migrations/0020_add_uuid_field_to_environment_webhook.py +environments/migrations/0021_environment_allow_client_traits.py +environments/migrations/0022_environment_description.py +environments/migrations/0023_environment_updated_at.py +environments/migrations/0024_auto_20221206_0601.py +environments/migrations/0025_soft_delete_environments.py +environments/migrations/0026_add_auditable_base_class_to_environment_model.py +environments/migrations/0027_auto_20230106_0626.py +environments/migrations/0028_add_use_mv_v2_evaluation.py +environments/migrations/0029_auto_20230314_0443.py +environments/migrations/0030_auto_20230518_0338.py +environments/migrations/0031_alter_webhook_url.py +environments/migrations/0032_rename_use_mv_v2_evaluation_to_use_in_percentage_split_evaluation.py +environments/migrations/0033_add_environment_feature_state_version_logic.py +environments/migrations/0034_alter_environment_project.py +environments/migrations/0035_add_use_identity_overrides_in_local_eval.py +environments/migrations/0036_add_is_creating_field.py +environments/migrations/0037_add_uuid_field.py +environments/migrations/__init__.py +environments/permissions/__init__.py +environments/permissions/apps.py +environments/permissions/managers.py +environments/permissions/models.py +environments/permissions/permissions.py +environments/permissions/serializers.py +environments/permissions/views.py +environments/permissions/migrations/0001_initial.py +environments/permissions/migrations/0002_add_update_feature_state_permission.py +environments/permissions/migrations/0003_add_manage_identities_permission.py +environments/permissions/migrations/0004_add_change_request_permissions.py +environments/permissions/migrations/0005_add_view_identity_permissions.py +environments/permissions/migrations/0006_merge_duplicate_permissions.py +environments/permissions/migrations/0007_add_unique_permission_constraint.py +environments/permissions/migrations/0008_add_manage_segment_overrides_permission.py +environments/permissions/migrations/0009_add_environment_feature_state_version_logic.py +environments/permissions/migrations/__init__.py +environments/sdk/__init__.py +environments/sdk/serializers.py +environments/sdk/serializers_mixins.py +environments/sdk/services.py +environments/sdk/types.py +environments/sdk/views.py +features/__init__.py +features/admin.py +features/apps.py +features/audit_helpers.py +features/constants.py +features/custom_lifecycle.py +features/dataclasses.py +features/exceptions.py +features/feature_types.py +features/features_service.py +features/fields.py +features/helpers.py +features/managers.py +features/models.py +features/permissions.py +features/serializers.py +features/signals.py +features/tasks.py +features/urls.py +features/utils.py +features/value_types.py +features/views.py +features/feature_external_resources/__init__.py +features/feature_external_resources/apps.py +features/feature_external_resources/models.py +features/feature_external_resources/serializers.py +features/feature_external_resources/views.py +features/feature_external_resources/migrations/0001_initial.py +features/feature_external_resources/migrations/0002_featureexternalresource_feature_ext_type_2b2068_idx.py +features/feature_external_resources/migrations/0003_add_gitlab_resource_types.py +features/feature_external_resources/migrations/__init__.py +features/feature_health/__init__.py +features/feature_health/admin.py +features/feature_health/apps.py +features/feature_health/constants.py +features/feature_health/mappers.py +features/feature_health/models.py +features/feature_health/serializers.py +features/feature_health/services.py +features/feature_health/tasks.py +features/feature_health/types.py +features/feature_health/views.py +features/feature_health/migrations/0001_initial.py +features/feature_health/migrations/0002_featurehealthevent_add_external_id_alter_created_at.py +features/feature_health/migrations/0003_migrate_sample_to_webhook.py +features/feature_health/migrations/__init__.py +features/feature_health/providers/__init__.py +features/feature_health/providers/services.py +features/feature_health/providers/generic/mappers.py +features/feature_health/providers/grafana/__init__.py +features/feature_health/providers/grafana/constants.py +features/feature_health/providers/grafana/mappers.py +features/feature_health/providers/grafana/services.py +features/feature_health/providers/grafana/types.py +features/feature_health/providers/webhook/__init__.py +features/feature_health/providers/webhook/mappers.py +features/feature_health/providers/webhook/services.py +features/feature_health/providers/webhook/types.py +features/feature_segments/__init__.py +features/feature_segments/limits.py +features/feature_segments/permissions.py +features/feature_segments/serializers.py +features/feature_segments/views.py +features/feature_states/__init__.py +features/feature_states/models.py +features/feature_states/permissions.py +features/feature_states/serializers.py +features/feature_states/views.py +features/import_export/apps.py +features/import_export/constants.py +features/import_export/mappers.py +features/import_export/models.py +features/import_export/permissions.py +features/import_export/serializers.py +features/import_export/services.py +features/import_export/tasks.py +features/import_export/types.py +features/import_export/views.py +features/import_export/migrations/0001_initial.py +features/import_export/migrations/0002_status_and_data_featureexport.py +features/import_export/migrations/0003_flagsmithonflagsmithfeatureexport.py +features/import_export/migrations/0004_convert_data_fields_to_text_field.py +features/import_export/migrations/__init__.py +features/migrations/0001_initial.py +features/migrations/0002_auto_20180530_0724.py +features/migrations/0003_auto_20180601_1038.py +features/migrations/0004_auto_20180604_1259.py +features/migrations/0005_auto_20180604_1348.py +features/migrations/0006_featurestate_type.py +features/migrations/0007_feature_default_enabled.py +features/migrations/0008_auto_20180608_1328.py +features/migrations/0009_auto_20180809_0014.py +features/migrations/0009_auto_20180815_1011.py +features/migrations/0010_merge_20180816_1531.py +features/migrations/0011_historicalfeature_squashed_0012_historicalfeaturestate_historicalfeaturestatevalue.py +features/migrations/0012_auto_20190424_1555.py +features/migrations/0013_auto_20190607_1109.py +features/migrations/0014_auto_20190607_1642.py +features/migrations/0015_auto_20190916_1338.py +features/migrations/0016_auto_20190916_1717.py +features/migrations/0017_auto_20200607_1005.py +features/migrations/0018_auto_20200607_1057.py +features/migrations/0019_auto_20200607_1059.py +features/migrations/0020_auto_20200615_1300.py +features/migrations/0021_historicalfeaturesegment.py +features/migrations/0022_auto_20200630_2115.py +features/migrations/0023_auto_20200717_1515.py +features/migrations/0024_auto_20200917_1032.py +features/migrations/0025_alter_unique_constraints_for_feature_states.py +features/migrations/0025_enable_all_remote_config_feature_states.py +features/migrations/0026_auto_20210110_1300.py +features/migrations/0027_merge_20210215_1059.py +features/migrations/0028_auto_20210216_1600.py +features/migrations/0028_auto_20210223_2039.py +features/migrations/0029_auto_20210223_2106.py +features/migrations/0030_auto_20210401_1552.py +features/migrations/0030_merge_20210305_1622.py +features/migrations/0031_merge_20210409_1621.py +features/migrations/0032_update_feature_type.py +features/migrations/0033_auto_20210918_1048.py +features/migrations/0033_feature_owners.py +features/migrations/0034_merge_20210930_0502.py +features/migrations/0035_auto_20211109_0603.py +features/migrations/0036_alter_feature_options.py +features/migrations/0036_remove_existing_constraints.py +features/migrations/0037_add_feature_state_versioning_fields.py +features/migrations/0038_remove_old_versions_and_drafts.py +features/migrations/0039_allow_null_version.py +features/migrations/0039_merge_20220329_1252.py +features/migrations/0040_add_change_request_to_feature_state.py +features/migrations/0041_merge_20220406_0806.py +features/migrations/0042_default_type_to_STANDARD.py +features/migrations/0043_add_uuid_field_to_feature.py +features/migrations/0044_add_uuid_field_to_feature_state.py +features/migrations/0045_add_uuid_field_to_feature_state_value.py +features/migrations/0046_add_uuid_field_to_feature_segment.py +features/migrations/0047_prevent_null_feature_type.py +features/migrations/0048_add_master_api_key_to_historical_records.py +features/migrations/0049_safe_delete_feature_models.py +features/migrations/0050_remove_unique_indexes.py +features/migrations/0051_permanently_delete_soft_deleted_features.py +features/migrations/0052_add_feature_state_value_audit.py +features/migrations/0053_delete_historical_feature_segment.py +features/migrations/0054_add_missing_migration.py +features/migrations/0055_add_feature_segment_audit_log_for_delete.py +features/migrations/0056_alter_featurestate_change_request.py +features/migrations/0057_add_feature_is_server_key_only.py +features/migrations/0058_alter_boolean_values.py +features/migrations/0059_fix_feature_type.py +features/migrations/0060_feature_group_owners.py +features/migrations/0061_add_environment_feature_state_version_logic.py +features/migrations/0062_alter_feature_segment_unique_together.py +features/migrations/0063_detach_feature_from_project_cascade_delete.py +features/migrations/0064_fix_feature_help_text_typo.py +features/migrations/0065_make_feature_value_size_configurable.py +features/migrations/0066_constrain_feature_type.py +features/migrations/__init__.py +features/multivariate/__init__.py +features/multivariate/apps.py +features/multivariate/models.py +features/multivariate/serializers.py +features/multivariate/urls.py +features/multivariate/views.py +features/multivariate/migrations/0001_initial.py +features/multivariate/migrations/0002_add_unique_constraint_for_mv_feature_states.py +features/multivariate/migrations/0002_auto_20220124_0722.py +features/multivariate/migrations/0003_merge_20220131_1532.py +features/multivariate/migrations/0004_alter_multivariatefeatureoption_string_value.py +features/multivariate/migrations/0005_add_uuid_fields.py +features/multivariate/migrations/0006_add_audit_log_events_form_multivariate_models.py +features/multivariate/migrations/0007_alter_boolean_values.py +features/multivariate/migrations/0008_make_feature_value_size_configurable.py +features/multivariate/migrations/__init__.py +features/release_pipelines/core/__init__.py +features/release_pipelines/core/apps.py +features/release_pipelines/core/constants.py +features/release_pipelines/core/exceptions.py +features/release_pipelines/core/models.py +features/release_pipelines/core/migrations/0001_add_release_pipelines.py +features/release_pipelines/core/migrations/0002_add_phased_rollout.py +features/release_pipelines/core/migrations/0003_add_created_at.py +features/release_pipelines/core/migrations/__init__.py +features/release_pipelines/core/templates/release_pipelines/pipeline_stage_completed_notification.html +features/release_pipelines/core/templates/release_pipelines/pipeline_stage_completed_notification.txt +features/templates/features/webhook_failure.txt +features/versioning/__init__.py +features/versioning/apps.py +features/versioning/constants.py +features/versioning/dataclasses.py +features/versioning/exceptions.py +features/versioning/managers.py +features/versioning/models.py +features/versioning/permissions.py +features/versioning/receivers.py +features/versioning/schemas.py +features/versioning/serializers.py +features/versioning/signals.py +features/versioning/tasks.py +features/versioning/urls.py +features/versioning/versioning_service.py +features/versioning/views.py +features/versioning/migrations/0001_add_environment_feature_state_version_logic.py +features/versioning/migrations/0002_add_api_key_for_creation_and_publish.py +features/versioning/migrations/0003_cascade_delete_versions_on_cr_delete.py +features/versioning/migrations/0004_add_version_change_set.py +features/versioning/migrations/0005_fix_scheduled_fs_data_issue_caused_by_enabling_versioning.py +features/versioning/migrations/0006_add_pipeline_stage_to_envfeatureversion.py +features/versioning/migrations/0007_add_phased_rollout.py +features/versioning/migrations/__init__.py +features/versioning/sql/get_latest_versions.sql +features/versioning/templates/versioning/scheduled_change_failed_conflict_email.txt +features/workflows/__init__.py +features/workflows/core/__init__.py +features/workflows/core/apps.py +features/workflows/core/exceptions.py +features/workflows/core/models.py +features/workflows/core/migrations/0001_initial.py +features/workflows/core/migrations/0002_add_uuid_field.py +features/workflows/core/migrations/0003_add_historical_change_request.py +features/workflows/core/migrations/0004_add_historical_change_request_approvals.py +features/workflows/core/migrations/0005_soft_delete_change_requests.py +features/workflows/core/migrations/0006_auto_20230518_1036.py +features/workflows/core/migrations/0007_add_change_request_group_assignment.py +features/workflows/core/migrations/0008_remove_redundant_column.py +features/workflows/core/migrations/0009_prevent_cascade_delete_from_user_delete.py +features/workflows/core/migrations/0010_add_ignore_conflicts_option.py +features/workflows/core/migrations/0011_add_project_to_change_requests.py +features/workflows/core/migrations/0012_alter_changerequest_options.py +features/workflows/core/migrations/__init__.py +features/workflows/core/templates/workflows_core/change_request_approved_author_notification.html +features/workflows/core/templates/workflows_core/change_request_approved_author_notification.txt +features/workflows/core/templates/workflows_core/change_request_assignee_notification.html +features/workflows/core/templates/workflows_core/change_request_assignee_notification.txt +flagsmith_api.egg-info/PKG-INFO +flagsmith_api.egg-info/SOURCES.txt +flagsmith_api.egg-info/dependency_links.txt +flagsmith_api.egg-info/requires.txt +flagsmith_api.egg-info/top_level.txt +import_export/__init__.py +import_export/export.py +import_export/import_.py +import_export/json_serializers_with_metadata_support.py +import_export/management/__init__.py +import_export/management/commands/__init__.py +import_export/management/commands/dumporganisationtolocalfs.py +import_export/management/commands/dumporganisationtos3.py +import_export/management/commands/importorganisationfroms3.py +integrations/__init__.py +integrations/integration.py +integrations/amplitude/__init__.py +integrations/amplitude/amplitude.py +integrations/amplitude/apps.py +integrations/amplitude/constants.py +integrations/amplitude/models.py +integrations/amplitude/serializers.py +integrations/amplitude/views.py +integrations/amplitude/migrations/0001_initial.py +integrations/amplitude/migrations/0002_auto_20210325_1414.py +integrations/amplitude/migrations/0003_amplitudeconfiguration_uuid.py +integrations/amplitude/migrations/0004_make_uuid_not_editable.py +integrations/amplitude/migrations/0005_amplitudeconfiguration_deleted_at.py +integrations/amplitude/migrations/0006_add_default_base_url.py +integrations/amplitude/migrations/__init__.py +integrations/common/__init__.py +integrations/common/models.py +integrations/common/serializers.py +integrations/common/views.py +integrations/common/wrapper.py +integrations/datadog/__init__.py +integrations/datadog/apps.py +integrations/datadog/datadog.py +integrations/datadog/models.py +integrations/datadog/serializers.py +integrations/datadog/views.py +integrations/datadog/migrations/0001_initial.py +integrations/datadog/migrations/0002_add_uuid_field.py +integrations/datadog/migrations/0003_datadogconfiguration_deleted_at.py +integrations/datadog/migrations/0004_add_use_custom_source.py +integrations/datadog/migrations/__init__.py +integrations/dynatrace/__init__.py +integrations/dynatrace/apps.py +integrations/dynatrace/dynatrace.py +integrations/dynatrace/models.py +integrations/dynatrace/serializers.py +integrations/dynatrace/views.py +integrations/dynatrace/migrations/0001_initial.py +integrations/dynatrace/migrations/0002_add_uuid_field.py +integrations/dynatrace/migrations/0003_dynatraceconfiguration_deleted_at.py +integrations/dynatrace/migrations/__init__.py +integrations/flagsmith/__init__.py +integrations/flagsmith/client.py +integrations/flagsmith/exceptions.py +integrations/flagsmith/flagsmith_service.py +integrations/flagsmith/data/environment.json +integrations/flagsmith/management/__init__.py +integrations/flagsmith/management/commands/__init__.py +integrations/flagsmith/management/commands/updateflagsmithenvironment.py +integrations/github/__init__.py +integrations/github/apps.py +integrations/github/client.py +integrations/github/constants.py +integrations/github/dataclasses.py +integrations/github/exceptions.py +integrations/github/github.py +integrations/github/helpers.py +integrations/github/models.py +integrations/github/permissions.py +integrations/github/serializers.py +integrations/github/tasks.py +integrations/github/views.py +integrations/github/migrations/0001_initial.py +integrations/github/migrations/0002_auto_20240502_1949.py +integrations/github/migrations/0003_auto_20240528_0640.py +integrations/github/migrations/0004_githubrepository_tagging_enabled.py +integrations/github/migrations/__init__.py +integrations/gitlab/__init__.py +integrations/gitlab/apps.py +integrations/gitlab/constants.py +integrations/gitlab/mappers.py +integrations/gitlab/models.py +integrations/gitlab/serializers.py +integrations/gitlab/tasks.py +integrations/gitlab/types.py +integrations/gitlab/client/__init__.py +integrations/gitlab/client/api.py +integrations/gitlab/client/types.py +integrations/gitlab/migrations/0001_initial.py +integrations/gitlab/migrations/0002_add_gitlab_webhook_model.py +integrations/gitlab/migrations/0003_gitlabconfiguration_labeling_enabled.py +integrations/gitlab/migrations/__init__.py +integrations/gitlab/services/__init__.py +integrations/gitlab/services/comments.py +integrations/gitlab/services/labels.py +integrations/gitlab/services/tagging.py +integrations/gitlab/services/url_parsing.py +integrations/gitlab/services/webhooks.py +integrations/gitlab/templates/gitlab/feature_deleted_comment.md +integrations/gitlab/templates/gitlab/feature_linked_comment.md +integrations/gitlab/templates/gitlab/feature_state_changed_comment.md +integrations/gitlab/templates/gitlab/feature_unlinked_comment.md +integrations/gitlab/views/__init__.py +integrations/gitlab/views/browse_gitlab.py +integrations/gitlab/views/configuration.py +integrations/gitlab/views/webhook.py +integrations/grafana/__init__.py +integrations/grafana/apps.py +integrations/grafana/grafana.py +integrations/grafana/mappers.py +integrations/grafana/models.py +integrations/grafana/serializers.py +integrations/grafana/types.py +integrations/grafana/views.py +integrations/grafana/migrations/0001_initial.py +integrations/grafana/migrations/0002_add_grafana_organisation_configuration.py +integrations/grafana/migrations/__init__.py +integrations/heap/__init__.py +integrations/heap/apps.py +integrations/heap/heap.py +integrations/heap/models.py +integrations/heap/serializers.py +integrations/heap/views.py +integrations/heap/migrations/0001_initial.py +integrations/heap/migrations/0002_add_uuid_field.py +integrations/heap/migrations/0003_heapconfiguration_deleted_at.py +integrations/heap/migrations/__init__.py +integrations/launch_darkly/__init__.py +integrations/launch_darkly/admin.py +integrations/launch_darkly/apps.py +integrations/launch_darkly/client.py +integrations/launch_darkly/constants.py +integrations/launch_darkly/exceptions.py +integrations/launch_darkly/models.py +integrations/launch_darkly/serializers.py +integrations/launch_darkly/services.py +integrations/launch_darkly/tasks.py +integrations/launch_darkly/types.py +integrations/launch_darkly/views.py +integrations/launch_darkly/migrations/0001_initial.py +integrations/launch_darkly/migrations/0002_importrequest_unique_project_ld_project_key_status_result_null.py +integrations/launch_darkly/migrations/__init__.py +integrations/lead_tracking/__init__.py +integrations/lead_tracking/lead_tracking.py +integrations/lead_tracking/hubspot/client.py +integrations/lead_tracking/hubspot/constants.py +integrations/lead_tracking/hubspot/lead_tracker.py +integrations/lead_tracking/hubspot/services.py +integrations/lead_tracking/hubspot/tasks.py +integrations/mixpanel/__init__.py +integrations/mixpanel/apps.py +integrations/mixpanel/mixpanel.py +integrations/mixpanel/models.py +integrations/mixpanel/serializers.py +integrations/mixpanel/views.py +integrations/mixpanel/migrations/0001_initial.py +integrations/mixpanel/migrations/0002_add_uuid_field.py +integrations/mixpanel/migrations/0003_mixpanelconfiguration_deleted_at.py +integrations/mixpanel/migrations/__init__.py +integrations/new_relic/__init__.py +integrations/new_relic/apps.py +integrations/new_relic/models.py +integrations/new_relic/new_relic.py +integrations/new_relic/serializers.py +integrations/new_relic/views.py +integrations/new_relic/migrations/0001_initial.py +integrations/new_relic/migrations/0002_auto_20210325_1414.py +integrations/new_relic/migrations/0003_add_uuid_field.py +integrations/new_relic/migrations/0004_newrelicconfiguration_deleted_at.py +integrations/new_relic/migrations/__init__.py +integrations/pylon/__init__.py +integrations/pylon/identity_verification.py +integrations/rudderstack/__init__.py +integrations/rudderstack/apps.py +integrations/rudderstack/models.py +integrations/rudderstack/rudderstack.py +integrations/rudderstack/serializers.py +integrations/rudderstack/views.py +integrations/rudderstack/migrations/0001_initial.py +integrations/rudderstack/migrations/0002_add_uuid_field.py +integrations/rudderstack/migrations/0003_rudderstackconfiguration_deleted_at.py +integrations/rudderstack/migrations/__init__.py +integrations/segment/__init__.py +integrations/segment/apps.py +integrations/segment/constants.py +integrations/segment/models.py +integrations/segment/segment.py +integrations/segment/serializers.py +integrations/segment/views.py +integrations/segment/migrations/0001_initial.py +integrations/segment/migrations/0002_auto_20210325_1414.py +integrations/segment/migrations/0003_add_uuid_field.py +integrations/segment/migrations/0004_segmentconfiguration_deleted_at.py +integrations/segment/migrations/0005_set_base_url_to_default.py +integrations/segment/migrations/0006_set_base_url_to_default_again.py +integrations/segment/migrations/__init__.py +integrations/sentry/__init__.py +integrations/sentry/apps.py +integrations/sentry/change_tracking.py +integrations/sentry/middleware.py +integrations/sentry/models.py +integrations/sentry/samplers.py +integrations/sentry/serializers.py +integrations/sentry/views.py +integrations/sentry/migrations/0001_sentry_change_tracking.py +integrations/sentry/migrations/__init__.py +integrations/slack/__init__.py +integrations/slack/apps.py +integrations/slack/authentication.py +integrations/slack/exceptions.py +integrations/slack/models.py +integrations/slack/permissions.py +integrations/slack/serializers.py +integrations/slack/slack.py +integrations/slack/views.py +integrations/slack/migrations/0001_initial.py +integrations/slack/migrations/0002_add_uuid_fields.py +integrations/slack/migrations/0003_slackconfiguration_deleted_at.py +integrations/slack/migrations/__init__.py +integrations/vcs/__init__.py +integrations/vcs/apps.py +integrations/vcs/services.py +integrations/webhook/__init__.py +integrations/webhook/apps.py +integrations/webhook/models.py +integrations/webhook/serializers.py +integrations/webhook/views.py +integrations/webhook/webhook.py +integrations/webhook/migrations/0001_initial.py +integrations/webhook/migrations/0002_add_uuid_field.py +integrations/webhook/migrations/0003_webhookconfiguration_deleted_at.py +integrations/webhook/migrations/0004_alter_webhookconfiguration_url.py +integrations/webhook/migrations/__init__.py +jmeter-tests/Home Page.jmx +metadata/__init__.py +metadata/apps.py +metadata/fields.py +metadata/models.py +metadata/permissions.py +metadata/serializers.py +metadata/urls.py +metadata/views.py +metadata/migrations/0001_initial.py +metadata/migrations/0002_add_project_to_metadata_field.py +metadata/migrations/__init__.py +metrics/__init__.py +metrics/apps.py +metrics/constants.py +metrics/metrics_service.py +metrics/serializers.py +metrics/types.py +oauth2_metadata/__init__.py +oauth2_metadata/apps.py +oauth2_metadata/authentication.py +oauth2_metadata/dataclasses.py +oauth2_metadata/serializers.py +oauth2_metadata/services.py +oauth2_metadata/tasks.py +oauth2_metadata/views.py +onboarding/__init__.py +onboarding/apps.py +onboarding/serializers.py +onboarding/tasks.py +onboarding/throttling.py +onboarding/urls.py +onboarding/views.py +organisations/__init__.py +organisations/admin.py +organisations/apps.py +organisations/constants.py +organisations/exceptions.py +organisations/managers.py +organisations/models.py +organisations/serializers.py +organisations/subscription_info_cache.py +organisations/task_helpers.py +organisations/tasks.py +organisations/urls.py +organisations/views.py +organisations/chargebee/__init__.py +organisations/chargebee/apps.py +organisations/chargebee/cache.py +organisations/chargebee/chargebee.py +organisations/chargebee/client.py +organisations/chargebee/constants.py +organisations/chargebee/metadata.py +organisations/chargebee/serializers.py +organisations/chargebee/tasks.py +organisations/chargebee/webhook_event_types.py +organisations/chargebee/webhook_handlers.py +organisations/invites/__init__.py +organisations/invites/admin.py +organisations/invites/apps.py +organisations/invites/exceptions.py +organisations/invites/models.py +organisations/invites/serializers.py +organisations/invites/views.py +organisations/invites/migrations/0001_initial.py +organisations/invites/migrations/0002_auto_20210118_2026.py +organisations/invites/migrations/0003_auto_20220323_1455.py +organisations/invites/migrations/0004_remove_invite_frontend_base_url.py +organisations/invites/migrations/0005_add_uuid_field.py +organisations/invites/migrations/0006_invite_permission_groups.py +organisations/invites/migrations/__init__.py +organisations/management/commands/check_if_organisations_over_plan_limit.py +organisations/management/commands/createinitialorganisation.py +organisations/migrations/0001_initial.py +organisations/migrations/0002_organisation_has_requested_features.py +organisations/migrations/0003_organisation_webhook_notification_email.py +organisations/migrations/0004_organisation_created_date.py +organisations/migrations/0005_auto_20181025_1611.py +organisations/migrations/0006_auto_20181030_1438.py +organisations/migrations/0007_organisation_pending_cancellation.py +organisations/migrations/0008_auto_20181108_1259.py +organisations/migrations/0009_auto_20181108_1306.py +organisations/migrations/0010_subscription.py +organisations/migrations/0011_subscription_max_seats.py +organisations/migrations/0012_auto_20190912_1538.py +organisations/migrations/0013_organisation_alerted_over_plan_limit.py +organisations/migrations/0014_organisation_stop_serving_flags.py +organisations/migrations/0014_userorganisation.py +organisations/migrations/0015_auto_20190924_1641.py +organisations/migrations/0016_auto_20190924_1716.py +organisations/migrations/0017_subscription_cancellation_date.py +organisations/migrations/0018_merge_20191003_1249.py +organisations/migrations/0019_subscription_customer_id.py +organisations/migrations/0020_auto_20200222_1159.py +organisations/migrations/0021_auto_20200619_1555.py +organisations/migrations/0022_organisation_persist_trait_data.py +organisations/migrations/0023_organisation_block_access_to_admin.py +organisations/migrations/0024_organisation_feature_analytics.py +organisations/migrations/0025_auto_20210223_1603.py +organisations/migrations/0026_auto_20210907_1232.py +organisations/migrations/0027_organisation_restrict_project_create_to_admin.py +organisations/migrations/0028_organisationwebhook_secret.py +organisations/migrations/0029_add_max_api_calls_to_subscription_model.py +organisations/migrations/0030_alter_userorganisation_role.py +organisations/migrations/0031_alter_subscription_plan.py +organisations/migrations/0032_add_uuid_fields.py +organisations/migrations/0033_allow_blank_payment_method.py +organisations/migrations/0034_alter_subscription_payment_method.py +organisations/migrations/0035_add_organisation_subscription_information_cache.py +organisations/migrations/0036_alter_subscription_plan.py +organisations/migrations/0037_add_default_subscription_to_existing_organisations.py +organisations/migrations/0038_soft_delete_organisations.py +organisations/migrations/0039_subscription_deleted_at.py +organisations/migrations/0040_alter_organisationwebhook_url.py +organisations/migrations/0040_organisationsubscriptioninformationcache_chargebee_email.py +organisations/migrations/0041_merge_20230621_0946.py +organisations/migrations/0042_alter_subscription_payment_method.py +organisations/migrations/0043_add_created_at_and_updated_at_to_organisationwebhook.py +organisations/migrations/0044_organisationsubscriptioninformationcache_allowed_projects.py +organisations/migrations/0045_auto_20230802_1956.py +organisations/migrations/0046_allow_allowed_projects_to_be_null.py +organisations/migrations/0047_organisation_force_2fa.py +organisations/migrations/0048_add_default_subscription_to_orphaned_organisations.py +organisations/migrations/0049_subscription_billing_status.py +organisations/migrations/0050_add_historical_subscription.py +organisations/migrations/0051_create_org_api_usage_notification.py +organisations/migrations/0052_create_hubspot_organisation.py +organisations/migrations/0053_create_api_limit_access_block.py +organisations/migrations/0054_create_api_billing.py +organisations/migrations/0055_alter_percent_usage.py +organisations/migrations/0056_create_organisation_breached_grace_period.py +organisations/migrations/0057_limit_audit_and_version_history.py +organisations/migrations/0058_update_audit_and_history_limits_in_sub_cache.py +organisations/migrations/__init__.py +organisations/permissions/__init__.py +organisations/permissions/apps.py +organisations/permissions/models.py +organisations/permissions/permissions.py +organisations/permissions/serializers.py +organisations/permissions/views.py +organisations/permissions/migrations/0001_initial.py +organisations/permissions/migrations/0002_add_related_query_name.py +organisations/permissions/migrations/0003_merge_duplicate_permissions.py +organisations/permissions/migrations/0004_add_unique_permission_constraint.py +organisations/permissions/migrations/__init__.py +organisations/subscriptions/__init__.py +organisations/subscriptions/constants.py +organisations/subscriptions/exceptions.py +organisations/subscriptions/metadata.py +organisations/subscriptions/permissions.py +organisations/subscriptions/serializers/__init__.py +organisations/subscriptions/serializers/mixins.py +organisations/subscriptions/xero/__init__.py +organisations/subscriptions/xero/metadata.py +organisations/templates/organisations/api_flags_blocked_notification.html +organisations/templates/organisations/api_flags_blocked_notification.txt +organisations/templates/organisations/api_usage_notification.html +organisations/templates/organisations/api_usage_notification.txt +organisations/templates/organisations/api_usage_notification_limit.html +organisations/templates/organisations/api_usage_notification_limit.txt +permissions/__init__.py +permissions/models.py +permissions/permission_service.py +permissions/permissions_calculator.py +permissions/rbac_wrapper.py +permissions/serializers.py +permissions/migrations/0001_initial.py +permissions/migrations/0002_auto_20200221_2126.py +permissions/migrations/0003_add_organisation_permission_type.py +permissions/migrations/0004_add_create_project_permission.py +permissions/migrations/0005_orphan_permission_cleanup.py +permissions/migrations/0006_add_manage_segments_permission.py +permissions/migrations/0007_add_invite_users_and_manage_user_groups_org_permissions.py +permissions/migrations/0008_add_view_audit_log_permission.py +permissions/migrations/0009_move_view_audit_log_permission.py +permissions/migrations/0010_add_manage_tags_permission.py +permissions/migrations/__init__.py +platform_hub/__init__.py +platform_hub/apps.py +platform_hub/constants.py +platform_hub/mappers.py +platform_hub/serializers.py +platform_hub/services.py +platform_hub/types.py +platform_hub/urls.py +platform_hub/views.py +projects/__init__.py +projects/admin.py +projects/apps.py +projects/exceptions.py +projects/managers.py +projects/models.py +projects/permissions.py +projects/serializers.py +projects/services.py +projects/tasks.py +projects/urls.py +projects/views.py +projects/code_references/__init__.py +projects/code_references/apps.py +projects/code_references/constants.py +projects/code_references/models.py +projects/code_references/permissions.py +projects/code_references/serializers.py +projects/code_references/services.py +projects/code_references/types.py +projects/code_references/urls.py +projects/code_references/views.py +projects/code_references/migrations/0001_code_references.py +projects/code_references/migrations/0002_add_project_repo_created_index.py +projects/code_references/migrations/__init__.py +projects/management/commands/createinitialproject.py +projects/migrations/0001_initial.py +projects/migrations/0002_projectpermission_userpermissiongroupprojectpermission_userprojectpermission.py +projects/migrations/0003_auto_20200216_2050.py +projects/migrations/0004_auto_20200220_0044.py +projects/migrations/0005_auto_20200221_2317.py +projects/migrations/0006_auto_20200224_2106.py +projects/migrations/0007_auto_20200504_1322.py +projects/migrations/0008_project_hide_disabled_flags.py +projects/migrations/0009_project_enable_dynamo_db.py +projects/migrations/0010_auto_20211208_1050.py +projects/migrations/0011_add_uuid_field.py +projects/migrations/0012_add_prevent_flag_defaults_to_project.py +projects/migrations/0013_project_enable_realtime_updates.py +projects/migrations/0014_project_only_allow_lower_case_feature_names.py +projects/migrations/0015_project_feature_name_regex.py +projects/migrations/0016_soft_delete_projects.py +projects/migrations/0017_merge_duplicate_permissions.py +projects/migrations/0018_add_unique_permission_constraint.py +projects/migrations/0019_add_limits.py +projects/migrations/0020_add_environment_feature_state_version_logic.py +projects/migrations/0021_add_identity_overrides_migration_status.py +projects/migrations/0022_add_stale_flags_threshold_to_project.py +projects/migrations/0023_rename_identity_overrides_migration_status_keeping_db_column.py +projects/migrations/0024_add_project_edge_v2_migration_read_capacity_budget.py +projects/migrations/0025_add_change_request_project_permissions.py +projects/migrations/0026_add_change_request_approval_limit_to_projects.py +projects/migrations/0027_add_create_project_level_change_requests_permission.py +projects/migrations/0028_add_enforce_feature_owners_to_project.py +projects/migrations/0029_bump_default_project_limits.py +projects/migrations/__init__.py +projects/tags/__init__.py +projects/tags/admin.py +projects/tags/apps.py +projects/tags/models.py +projects/tags/permissions.py +projects/tags/serializers.py +projects/tags/views.py +projects/tags/migrations/0001_initial.py +projects/tags/migrations/0002_auto_20210223_1603.py +projects/tags/migrations/0003_allow_null_tag_description.py +projects/tags/migrations/0004_add_uuid_field.py +projects/tags/migrations/0005_add_tag_fields_for_stale_flags_logic.py +projects/tags/migrations/0006_alter_tag_type.py +projects/tags/migrations/0007_alter_tag_color.py +projects/tags/migrations/0008_alter_tag_type.py +projects/tags/migrations/0009_add_gitlab_tag_type.py +projects/tags/migrations/__init__.py +sales_dashboard/__init__.py +sales_dashboard/apps.py +sales_dashboard/forms.py +sales_dashboard/urls.py +sales_dashboard/views.py +sales_dashboard/migrations/__init__.py +sales_dashboard/templates/sales_dashboard/base.html +sales_dashboard/templates/sales_dashboard/home.html +sales_dashboard/templates/sales_dashboard/nav.html +sales_dashboard/templates/sales_dashboard/organisation.html +sales_dashboard/templates/sales_dashboard/usage.html +sales_dashboard/templatetags/__init__.py +sales_dashboard/templatetags/sales_dashboard_extras.py +segments/__init__.py +segments/admin.py +segments/apps.py +segments/models.py +segments/permissions.py +segments/serializers.py +segments/services.py +segments/tasks.py +segments/types.py +segments/urls.py +segments/views.py +segments/migrations/0001_initial.py +segments/migrations/0002_auto_20190515_1113.py +segments/migrations/0003_segment_project.py +segments/migrations/0004_auto_20190523_1325.py +segments/migrations/0005_auto_20190529_1426.py +segments/migrations/0006_auto_20190828_0907.py +segments/migrations/0007_auto_20190906_1416.py +segments/migrations/0008_auto_20210223_1603.py +segments/migrations/0010_add_uuid_fields.py +segments/migrations/0011_segment_feature.py +segments/migrations/0012_alter_condition_operator.py +segments/migrations/0013_add_is_set_and_is_not_set_operators.py +segments/migrations/0014_add_description_to_segment_condition.py +segments/migrations/0015_remove_max_length_from_condition_description.py +segments/migrations/0016_add_historical_records_to_segment.py +segments/migrations/0017_update_historical_segment_with_missing_changes.py +segments/migrations/0018_soft_delete_segments.py +segments/migrations/0019_add_audit_to_condition.py +segments/migrations/0020_detach_segment_from_project_cascade_delete.py +segments/migrations/0021_create_whitelisted_segments.py +segments/migrations/0022_add_soft_delete_to_segment_rules_and_conditions.py +segments/migrations/0023_add_versioning_to_segments.py +segments/migrations/0024_add_timestamps_to_segments.py +segments/migrations/0025_set_default_version_on_segment.py +segments/migrations/0026_add_change_request_to_segments.py +segments/migrations/0027_historicalsegmentrule.py +segments/migrations/0028_condition_property_required.py +segments/migrations/0029_add_is_system_segment.py +segments/migrations/0030_add_default_to_segment_version.py +segments/migrations/__init__.py +segments/migrations/sql/0023_add_versioning_to_segments.sql +segments/migrations/sql/0023_add_versioning_to_segments_reverse.sql +sse/__init__.py +sse/dataclasses.py +sse/exceptions.py +sse/sse_service.py +sse/tasks.py +telemetry/__init__.py +telemetry/apps.py +telemetry/models.py +telemetry/serializers.py +telemetry/telemetry.py +templates/admin/base_site.html +templates/admin/login.html +tests/__init__.py +tests/conftest.py +tests/test_helpers.py +tests/types.py +tests/integration/__init__.py +tests/integration/conftest.py +tests/integration/helpers.py +tests/integration/test_api_documentation.py +tests/integration/test_integration_api_version_header.py +tests/integration/api_keys/__init__.py +tests/integration/api_keys/conftest.py +tests/integration/api_keys/test_viewset.py +tests/integration/app_analytics/test_influx_query_throttle.py +tests/integration/audit/test_audit_logs.py +tests/integration/core/test_commands.py +tests/integration/core/test_user_rate_throttle.py +tests/integration/custom_auth/end_to_end/test_custom_auth_integration.py +tests/integration/e2etests/end_to_end/test_integration_e2e_tests.py +tests/integration/edge_api/identities/conftest.py +tests/integration/edge_api/identities/test_edge_identity_featurestates_viewset.py +tests/integration/edge_api/identities/test_edge_identity_viewset.py +tests/integration/environments/__init__.py +tests/integration/environments/test_integration_environments.py +tests/integration/environments/identities/__init__.py +tests/integration/environments/identities/test_integration_identities.py +tests/integration/environments/identities/test_integration_identities_feature_states.py +tests/integration/features/__init__.py +tests/integration/features/test_gitlab_external_resources.py +tests/integration/features/test_gitlab_webhook.py +tests/integration/features/test_integration_features.py +tests/integration/features/feature_health/__init__.py +tests/integration/features/feature_health/conftest.py +tests/integration/features/feature_health/test_views.py +tests/integration/features/featurestate/__init__.py +tests/integration/features/featurestate/test_environment_featurestate_viewset.py +tests/integration/features/featurestate/test_simple_featurestate_viewset.py +tests/integration/features/featurestate/test_webhooks.py +tests/integration/features/multivariate/__init__.py +tests/integration/features/multivariate/test_integration_multivariate.py +tests/integration/features/versioning/__init__.py +tests/integration/features/versioning/test_integration_v2_versioning.py +tests/integration/features/versioning/types.py +tests/integration/projects/__init__.py +tests/integration/projects/test_integration_projects.py +tests/integration/sales_dashboard/__init__.py +tests/integration/sales_dashboard/conftest.py +tests/integration/sales_dashboard/test_integration_sales_dashboard.py +tests/integration/scim/__init__.py +tests/integration/scim/conftest.py +tests/integration/scim/test_integration_scim.py +tests/integration/sdk/__init__.py +tests/integration/sdk/test_sdk_api_schemas.py +tests/integration/sdk/test_sdk_environment_document.py +tests/integration/sentry/test_change_tracking_webhook_integration.py +tests/integration/slack/conftest.py +tests/integration/slack/test_slack_environment_viewset.py +tests/integration/slack/test_slack_get_channels.py +tests/integration/slack/test_slack_token_flow.py +tests/integration/users/test_init_config.py +tests/unit/__init__.py +tests/unit/conftest.py +tests/unit/api/__init__.py +tests/unit/api/test_mcp_openapi.py +tests/unit/api/test_unit_api.py +tests/unit/api/test_unit_openapi.py +tests/unit/api_keys/__init__.py +tests/unit/api_keys/test_authentication.py +tests/unit/api_keys/test_user.py +tests/unit/app/__init__.py +tests/unit/app/test_unit_app_routers.py +tests/unit/app/test_unit_app_utils.py +tests/unit/app_analytics/__init__.py +tests/unit/app_analytics/test_analytics_db_service.py +tests/unit/app_analytics/test_commands.py +tests/unit/app_analytics/test_experiments.py +tests/unit/app_analytics/test_middleware.py +tests/unit/app_analytics/test_migrate_to_pg.py +tests/unit/app_analytics/test_migrations.py +tests/unit/app_analytics/test_models.py +tests/unit/app_analytics/test_tasks.py +tests/unit/app_analytics/test_unit_app_analytics_cache.py +tests/unit/app_analytics/test_unit_app_analytics_influxdb_wrapper.py +tests/unit/app_analytics/test_unit_app_analytics_mappers.py +tests/unit/app_analytics/test_unit_app_analytics_track.py +tests/unit/app_analytics/test_unit_app_analytics_views.py +tests/unit/audit/__init__.py +tests/unit/audit/conftest.py +tests/unit/audit/test_unit_audit_models.py +tests/unit/audit/test_unit_audit_permissions.py +tests/unit/audit/test_unit_audit_services.py +tests/unit/audit/test_unit_audit_signals.py +tests/unit/audit/test_unit_audit_tasks.py +tests/unit/audit/test_unit_audit_views.py +tests/unit/core/test_helpers.py +tests/unit/core/test_redis_cluster.py +tests/unit/core/test_unit_core_management.py +tests/unit/core/test_unit_core_migration_helpers.py +tests/unit/core/test_unit_core_throttling.py +tests/unit/core/management/__init__.py +tests/unit/core/management/test_unit_core_management_makemigrations.py +tests/unit/core/middleware/test_unit_core_middleware_admin.py +tests/unit/core/middleware/test_unit_core_middleware_cache_control.py +tests/unit/custom_auth/conftest.py +tests/unit/custom_auth/test_tasks.py +tests/unit/custom_auth/test_unit_custom_auth_serializer.py +tests/unit/custom_auth/test_unit_custom_auth_views.py +tests/unit/custom_auth/jwt_cookie/test_unit_jwt_cookie_authentication.py +tests/unit/custom_auth/mfa/trench/__init__.py +tests/unit/custom_auth/mfa/trench/conftest.py +tests/unit/custom_auth/mfa/trench/test_views.py +tests/unit/custom_auth/oauth/test_unit_oauth_github.py +tests/unit/custom_auth/oauth/test_unit_oauth_google.py +tests/unit/custom_auth/oauth/test_unit_oauth_serializers.py +tests/unit/custom_auth/oauth/test_unit_oauth_views.py +tests/unit/custom_auth/oauth/helpers/test_unit_oauth_github_helpers.py +tests/unit/edge_api/test_unit_edge_api_commands.py +tests/unit/edge_api/test_unit_edge_api_utils.py +tests/unit/edge_api/identities/__init__.py +tests/unit/edge_api/identities/conftest.py +tests/unit/edge_api/identities/test_edge_api_identities_serializers.py +tests/unit/edge_api/identities/test_edge_api_identities_views.py +tests/unit/edge_api/identities/test_edge_identity_featurestate_view.py +tests/unit/edge_api/identities/test_edge_identity_models.py +tests/unit/edge_api/identities/test_edge_identity_service.py +tests/unit/edge_api/identities/test_edge_request_forwarder.py +tests/unit/edge_api/identities/test_events.py +tests/unit/edge_api/identities/test_permissions.py +tests/unit/edge_api/identities/test_unit_edge_api_identities_tasks.py +tests/unit/environments/__init__.py +tests/unit/environments/conftest.py +tests/unit/environments/helpers.py +tests/unit/environments/test_environment_metrics_views.py +tests/unit/environments/test_unit_environments_admin.py +tests/unit/environments/test_unit_environments_authentication.py +tests/unit/environments/test_unit_environments_feature_states_views.py +tests/unit/environments/test_unit_environments_migrations.py +tests/unit/environments/test_unit_environments_models.py +tests/unit/environments/test_unit_environments_permissions.py +tests/unit/environments/test_unit_environments_tasks.py +tests/unit/environments/test_unit_environments_views.py +tests/unit/environments/test_unit_environments_views_sdk_environment.py +tests/unit/environments/dynamodb/test_unit_dynamodb_utils.py +tests/unit/environments/dynamodb/test_unit_migrator.py +tests/unit/environments/dynamodb/test_unit_services.py +tests/unit/environments/dynamodb/types/test_unit_dynamodb_project_metadata.py +tests/unit/environments/dynamodb/wrappers/__init__.py +tests/unit/environments/dynamodb/wrappers/test_unit_dynamo_environment_wrapper.py +tests/unit/environments/dynamodb/wrappers/test_unit_dynamodb_environment_api_key_wrapper.py +tests/unit/environments/dynamodb/wrappers/test_unit_dynamodb_environment_v2_wrapper.py +tests/unit/environments/dynamodb/wrappers/test_unit_dynamodb_identity_wrapper.py +tests/unit/environments/identities/__init__.py +tests/unit/environments/identities/conftest.py +tests/unit/environments/identities/helpers.py +tests/unit/environments/identities/test_unit_identities_feature_states_views.py +tests/unit/environments/identities/test_unit_identities_models.py +tests/unit/environments/identities/test_unit_identities_views.py +tests/unit/environments/identities/traits/__init__.py +tests/unit/environments/identities/traits/test_traits_views.py +tests/unit/environments/identities/traits/test_unit_traits_models.py +tests/unit/environments/identities/traits/test_unit_traits_serializers.py +tests/unit/environments/management/commands/test_unit_environments_management_commands_migrate_to_edge.py +tests/unit/environments/permissions/__init__.py +tests/unit/environments/permissions/test_unit_environments_permissions.py +tests/unit/environments/permissions/test_unit_environments_permissions_migrations.py +tests/unit/environments/permissions/test_unit_environments_views.py +tests/unit/environments/sdk/__init__.py +tests/unit/environments/sdk/test_unit_sdk_serializers.py +tests/unit/features/__init__.py +tests/unit/features/conftest.py +tests/unit/features/test_migrations.py +tests/unit/features/test_unit_feature_external_resources_views.py +tests/unit/features/test_unit_features_audit_helpers.py +tests/unit/features/test_unit_features_features_service.py +tests/unit/features/test_unit_features_helpers.py +tests/unit/features/test_unit_features_models.py +tests/unit/features/test_unit_features_permissions.py +tests/unit/features/test_unit_features_serializers.py +tests/unit/features/test_unit_features_tasks.py +tests/unit/features/test_unit_features_utils.py +tests/unit/features/test_unit_features_views.py +tests/unit/features/feature_health/__init__.py +tests/unit/features/feature_health/conftest.py +tests/unit/features/feature_health/test_admin.py +tests/unit/features/feature_health/test_models.py +tests/unit/features/feature_health/test_services.py +tests/unit/features/feature_segments/__init__.py +tests/unit/features/feature_segments/test_unit_feature_segments_limits.py +tests/unit/features/feature_segments/test_unit_feature_segments_models.py +tests/unit/features/feature_segments/test_unit_feature_segments_permissions.py +tests/unit/features/feature_segments/test_unit_feature_segments_serializers.py +tests/unit/features/feature_segments/test_unit_feature_segments_views.py +tests/unit/features/feature_states/__init__.py +tests/unit/features/feature_states/test_models.py +tests/unit/features/feature_states/test_serializers.py +tests/unit/features/feature_states/test_unit_feature_states_views.py +tests/unit/features/import_export/test_unit_features_import_export_tasks.py +tests/unit/features/import_export/test_unit_features_import_export_views.py +tests/unit/features/multivariate/__init__.py +tests/unit/features/multivariate/test_migrations.py +tests/unit/features/multivariate/test_unit_multivariate_models.py +tests/unit/features/multivariate/test_unit_multivariate_views.py +tests/unit/features/release_pipeline/core/conftest.py +tests/unit/features/release_pipeline/core/test_unit_release_pipeline_models.py +tests/unit/features/versioning/__init__.py +tests/unit/features/versioning/test_unit_versioning_dataclasses.py +tests/unit/features/versioning/test_unit_versioning_migrations.py +tests/unit/features/versioning/test_unit_versioning_models.py +tests/unit/features/versioning/test_unit_versioning_receiver.py +tests/unit/features/versioning/test_unit_versioning_tasks.py +tests/unit/features/versioning/test_unit_versioning_versioning_service.py +tests/unit/features/versioning/test_unit_versioning_views.py +tests/unit/features/workflows/__init__.py +tests/unit/features/workflows/core/__init__.py +tests/unit/features/workflows/core/conftest.py +tests/unit/features/workflows/core/test_unit_workflows_migrations.py +tests/unit/features/workflows/core/test_unit_workflows_models.py +tests/unit/import_export/__init__.py +tests/unit/import_export/test_unit_import_export_export.py +tests/unit/import_export/test_unit_import_export_import.py +tests/unit/integrations/__init__.py +tests/unit/integrations/test_unit_integration.py +tests/unit/integrations/amplitude/__init__.py +tests/unit/integrations/amplitude/conftest.py +tests/unit/integrations/amplitude/test_unit_amplitude.py +tests/unit/integrations/amplitude/test_unit_amplitude_models.py +tests/unit/integrations/amplitude/test_unit_amplitude_views.py +tests/unit/integrations/common/__init__.py +tests/unit/integrations/common/test_unit_integrations_common_serializers.py +tests/unit/integrations/datadog/__init__.py +tests/unit/integrations/datadog/conftest.py +tests/unit/integrations/datadog/test_unit_datadog.py +tests/unit/integrations/datadog/test_unit_datadog_views.py +tests/unit/integrations/dynatrace/test_unit_dynatrace.py +tests/unit/integrations/dynatrace/test_unit_dynatrace_views.py +tests/unit/integrations/flagsmith/__init__.py +tests/unit/integrations/flagsmith/test_unit_flagsmith_client.py +tests/unit/integrations/flagsmith/test_unit_flagsmith_service.py +tests/unit/integrations/github/__init__.py +tests/unit/integrations/github/test_unit_github_cleanup_issue.py +tests/unit/integrations/github/test_unit_github_client.py +tests/unit/integrations/github/test_unit_github_github.py +tests/unit/integrations/github/test_unit_github_views.py +tests/unit/integrations/github/client_responses/get_issues.json +tests/unit/integrations/github/client_responses/get_pulls.json +tests/unit/integrations/github/client_responses/get_repos.json +tests/unit/integrations/gitlab/__init__.py +tests/unit/integrations/gitlab/conftest.py +tests/unit/integrations/gitlab/test_client.py +tests/unit/integrations/gitlab/test_comments.py +tests/unit/integrations/gitlab/test_configuration.py +tests/unit/integrations/gitlab/test_mappers.py +tests/unit/integrations/gitlab/test_proxy_views.py +tests/unit/integrations/gitlab/test_tagging.py +tests/unit/integrations/gitlab/test_tasks.py +tests/unit/integrations/gitlab/test_url_parsing.py +tests/unit/integrations/gitlab/test_webhooks.py +tests/unit/integrations/grafana/__init__.py +tests/unit/integrations/grafana/test_grafana.py +tests/unit/integrations/grafana/test_mappers.py +tests/unit/integrations/grafana/test_views.py +tests/unit/integrations/heap/__init__.py +tests/unit/integrations/heap/test_unit_heap.py +tests/unit/integrations/heap/test_unit_heap_views.py +tests/unit/integrations/launch_darkly/__init__.py +tests/unit/integrations/launch_darkly/conftest.py +tests/unit/integrations/launch_darkly/test_admin.py +tests/unit/integrations/launch_darkly/test_client.py +tests/unit/integrations/launch_darkly/test_services.py +tests/unit/integrations/launch_darkly/test_tasks.py +tests/unit/integrations/launch_darkly/test_views.py +tests/unit/integrations/launch_darkly/client_responses/get_environments.json +tests/unit/integrations/launch_darkly/client_responses/get_flags.json +tests/unit/integrations/launch_darkly/client_responses/get_project.json +tests/unit/integrations/launch_darkly/client_responses/get_segments.json +tests/unit/integrations/launch_darkly/client_responses/get_segments__large_segments.json +tests/unit/integrations/launch_darkly/example_api_responses/getEnvironmentsByProject_1.json +tests/unit/integrations/launch_darkly/example_api_responses/getEnvironmentsByProject_2.json +tests/unit/integrations/launch_darkly/example_api_responses/getFeatureFlags_1.json +tests/unit/integrations/launch_darkly/example_api_responses/getFeatureFlags_2.json +tests/unit/integrations/launch_darkly/example_api_responses/getProject.json +tests/unit/integrations/launch_darkly/example_api_responses/getTags.json +tests/unit/integrations/launch_darkly/snapshots/test_process_import_request__large_segments__correctly_imported__condition_data.csv +tests/unit/integrations/launch_darkly/snapshots/test_process_import_request__large_segments__correctly_imported__import_request_status.json +tests/unit/integrations/lead_tracking/__init__.py +tests/unit/integrations/lead_tracking/hubspot/_hubspot_responses.py +tests/unit/integrations/lead_tracking/hubspot/test_services.py +tests/unit/integrations/lead_tracking/hubspot/test_unit_hubspot_client.py +tests/unit/integrations/lead_tracking/hubspot/test_unit_hubspot_lead_tracking.py +tests/unit/integrations/lead_tracking/hubspot/test_unit_hubspot_tasks.py +tests/unit/integrations/mixpanel/test_unit_mixpanel.py +tests/unit/integrations/mixpanel/test_unit_mixpanel_views.py +tests/unit/integrations/new_relic/__init__.py +tests/unit/integrations/new_relic/conftest.py +tests/unit/integrations/new_relic/test_unit_new_relic.py +tests/unit/integrations/new_relic/test_unit_new_relic_views.py +tests/unit/integrations/rudderstack/test_unit_rudderstack.py +tests/unit/integrations/rudderstack/test_unit_rudderstack_views.py +tests/unit/integrations/segment/__init__.py +tests/unit/integrations/segment/test_unit_segment.py +tests/unit/integrations/segment/test_unit_segment_views.py +tests/unit/integrations/sentry/test_unit_sentry_middleware.py +tests/unit/integrations/sentry/test_unit_sentry_sampler.py +tests/unit/integrations/sentry/test_unit_sentry_views.py +tests/unit/integrations/slack/conftest.py +tests/unit/integrations/slack/test_unit_slack.py +tests/unit/integrations/slack/test_unit_slack_authentication.py +tests/unit/integrations/slack/test_unit_slack_permissions.py +tests/unit/integrations/webhook/conftest.py +tests/unit/integrations/webhook/test_unit_webhook.py +tests/unit/integrations/webhook/test_unit_webhook_models.py +tests/unit/integrations/webhook/test_unit_webhook_serializers.py +tests/unit/integrations/webhook/test_unit_webhook_views.py +tests/unit/metadata/__init__.py +tests/unit/metadata/conftest.py +tests/unit/metadata/test_serializers.py +tests/unit/metadata/test_views.py +tests/unit/metrics/test_unit_metrics_service.py +tests/unit/oauth2_metadata/__init__.py +tests/unit/oauth2_metadata/test_authentication.py +tests/unit/oauth2_metadata/test_authorize_view.py +tests/unit/oauth2_metadata/test_dcr.py +tests/unit/oauth2_metadata/test_services.py +tests/unit/oauth2_metadata/test_tasks.py +tests/unit/oauth2_metadata/test_views.py +tests/unit/onboarding/conftest.py +tests/unit/onboarding/test_views.py +tests/unit/organisations/__init__.py +tests/unit/organisations/test_unit_organisations_migrations.py +tests/unit/organisations/test_unit_organisations_models.py +tests/unit/organisations/test_unit_organisations_permissions.py +tests/unit/organisations/test_unit_organisations_serializers.py +tests/unit/organisations/test_unit_organisations_subscription_info_cache.py +tests/unit/organisations/test_unit_organisations_tasks.py +tests/unit/organisations/test_unit_organisations_views.py +tests/unit/organisations/chargebee/__init__.py +tests/unit/organisations/chargebee/conftest.py +tests/unit/organisations/chargebee/test_unit_chargebee_cache.py +tests/unit/organisations/chargebee/test_unit_chargebee_chargebee.py +tests/unit/organisations/chargebee/test_unit_chargebee_metadata.py +tests/unit/organisations/chargebee/test_unit_chargebee_tasks.py +tests/unit/organisations/invites/__init__.py +tests/unit/organisations/invites/conftest.py +tests/unit/organisations/invites/test_unit_invites_models.py +tests/unit/organisations/invites/test_unit_invites_views.py +tests/unit/organisations/permissions/__init__.py +tests/unit/organisations/permissions/test_unit_organisations_migrations.py +tests/unit/organisations/permissions/test_unit_organisations_permissions.py +tests/unit/organisations/permissions/test_unit_organisations_views.py +tests/unit/organisations/subscriptions/__init__.py +tests/unit/organisations/subscriptions/test_unit_subscriptions_dataclasses.py +tests/unit/organisations/subscriptions/test_unit_subscriptions_permissions.py +tests/unit/organisations/subscriptions/serializers/__init__.py +tests/unit/organisations/subscriptions/serializers/test_unit_subscriptions_serializers_mixins.py +tests/unit/permissions/test_migrations.py +tests/unit/permissions/test_unit_permissions_calculator.py +tests/unit/permissions/permission_service/conftest.py +tests/unit/permissions/permission_service/test_get_permitted_environments_for_user.py +tests/unit/permissions/permission_service/test_get_permitted_projects_for_user.py +tests/unit/permissions/permission_service/test_is_user_environment_admin.py +tests/unit/permissions/permission_service/test_is_user_project_admin.py +tests/unit/permissions/permission_service/test_master_api_key_permission_service.py +tests/unit/permissions/permission_service/test_user_has_organisation_permissions.py +tests/unit/platform_hub/__init__.py +tests/unit/platform_hub/conftest.py +tests/unit/platform_hub/test_services.py +tests/unit/platform_hub/test_views.py +tests/unit/projects/__init__.py +tests/unit/projects/conftest.py +tests/unit/projects/test_migrations.py +tests/unit/projects/test_unit_projects_admin.py +tests/unit/projects/test_unit_projects_models.py +tests/unit/projects/test_unit_projects_permissions.py +tests/unit/projects/test_unit_projects_serializers.py +tests/unit/projects/test_unit_projects_tasks.py +tests/unit/projects/test_unit_projects_views.py +tests/unit/projects/code_references/test_unit_projects_code_references_services.py +tests/unit/projects/code_references/test_unit_projects_code_references_views.py +tests/unit/projects/tags/test_unit_projects_tags_permissions.py +tests/unit/projects/tags/test_unit_projects_tags_views.py +tests/unit/sales_dashboard/__init__.py +tests/unit/sales_dashboard/conftest.py +tests/unit/sales_dashboard/test_unit_sales_dashboard_views.py +tests/unit/segments/__init__.py +tests/unit/segments/test_unit_segments_migrations.py +tests/unit/segments/test_unit_segments_models.py +tests/unit/segments/test_unit_segments_permissions.py +tests/unit/segments/test_unit_segments_services.py +tests/unit/segments/test_unit_segments_views.py +tests/unit/sse/__init__.py +tests/unit/sse/conftest.py +tests/unit/sse/test_sse_service.py +tests/unit/sse/test_tasks.py +tests/unit/telemetry/__init__.py +tests/unit/telemetry/helpers.py +tests/unit/telemetry/test_unit_telemetry_models.py +tests/unit/telemetry/test_unit_telemetry_serializers.py +tests/unit/telemetry/test_unit_telemetry_telemetry.py +tests/unit/users/__init__.py +tests/unit/users/test_unit_users_forms.py +tests/unit/users/test_unit_users_login.py +tests/unit/users/test_unit_users_migrations.py +tests/unit/users/test_unit_users_models.py +tests/unit/users/test_unit_users_serializers.py +tests/unit/users/test_unit_users_signals.py +tests/unit/users/test_unit_users_tasks.py +tests/unit/users/test_unit_users_views.py +tests/unit/users/utils/__init__.py +tests/unit/util/test_db.py +tests/unit/util/test_util.py +tests/unit/util/engine_models/identities/traits/test_unit_traits_types.py +tests/unit/util/mappers/test_unit_mappers_dynamodb.py +tests/unit/util/mappers/test_unit_mappers_engine.py +tests/unit/util/mappers/test_unit_mappers_sdk.py +tests/unit/webhooks/test_unit_webhooks.py +tests/unit/webhooks/test_unit_webhooks_mappers.py +tests/unit/webhooks/test_unit_webhooks_permissions.py +users/__init__.py +users/abc.py +users/admin.py +users/apps.py +users/auth_type.py +users/constants.py +users/emails.py +users/exceptions.py +users/forms.py +users/models.py +users/serializers.py +users/services.py +users/signals.py +users/tasks.py +users/urls.py +users/views.py +users/management/__init__.py +users/management/commands/__init__.py +users/management/commands/createinitialadminuser.py +users/migrations/0001_initial.py +users/migrations/0002_ffadminuser_organisation.py +users/migrations/0003_auto_20180518_1045.py +users/migrations/0004_auto_20180518_1655.py +users/migrations/0005_auto_20180518_1659.py +users/migrations/0006_auto_20180522_0928.py +users/migrations/0007_invite.py +users/migrations/0008_auto_20180522_1302.py +users/migrations/0009_auto_20180522_1342.py +users/migrations/0010_auto_20180522_1350.py +users/migrations/0011_remove_ffadminuser_organisation.py +users/migrations/0012_invite_frontend_base_url.py +users/migrations/0013_auto_20180524_1521.py +users/migrations/0014_invite_invited_by.py +users/migrations/0015_auto_20180809_0014.py +users/migrations/0016_auto_20180910_1341.py +users/migrations/0017_auto_20180913_1116.py +users/migrations/0018_auto_20180920_1234.py +users/migrations/0019_auto_20181025_1611.py +users/migrations/0020_auto_20181128_1012.py +users/migrations/0021_auto_20190918_1040.py +users/migrations/0022_invite_role.py +users/migrations/0023_auto_20191122_1039.py +users/migrations/0024_auto_20200216_1924.py +users/migrations/0025_auto_20200509_1326.py +users/migrations/0026_ffadminuser_google_user_id.py +users/migrations/0027_ffadminuser_github_user_id.py +users/migrations/0028_delete_invite.py +users/migrations/0029_auto_20210223_1603.py +users/migrations/0030_ffadminuser_marketing_consent_given.py +users/migrations/0031_userpermissiongroup_is_default.py +users/migrations/0032_auto_20221107_0425.py +users/migrations/0033_ffadminuser_sign_up_type.py +users/migrations/0034_add_user_permission_group_membership_through_model.py +users/migrations/0035_add_ldap_dn.py +users/migrations/0036_create_hubspot_lead.py +users/migrations/0037_add_uuid_field_to_user_model.py +users/migrations/0038_create_hubspot_tracker.py +users/migrations/0039_alter_ffadminuser_first_name.py +users/migrations/0040_default_marketing_consent_given_true.py +users/migrations/0041_add_onboarding_field.py +users/migrations/0042_add_utm_data_json_field.py +users/migrations/0043_make_hubspot_cookie_optional.py +users/migrations/0044_remove_users_from_groups_in_orgs_they_do_not_belong_to.py +users/migrations/0045_add_through_fields_metadata_for_django_5_upgrade.py +users/migrations/__init__.py +users/static/sales_dashboard/css/bootstrap.min.css +users/templates/users/activation.html +users/templates/users/confirmation.html +users/templates/users/email_updated.txt +users/templates/users/invite_to_org.html +users/templates/users/invite_to_org.txt +users/templates/users/onboard.html +util/__init__.py +util/dataclasses.py +util/db.py +util/migrations.py +util/renderers.py +util/tests.py +util/util.py +util/views.py +util/drf_writable_nested/serializers.py +util/engine_models/__init__.py +util/engine_models/context/__init__.py +util/engine_models/context/mappers.py +util/engine_models/environments/__init__.py +util/engine_models/environments/models.py +util/engine_models/environments/integrations/__init__.py +util/engine_models/environments/integrations/models.py +util/engine_models/features/__init__.py +util/engine_models/features/models.py +util/engine_models/identities/__init__.py +util/engine_models/identities/models.py +util/engine_models/identities/traits/__init__.py +util/engine_models/identities/traits/constants.py +util/engine_models/identities/traits/models.py +util/engine_models/identities/traits/types.py +util/engine_models/organisations/__init__.py +util/engine_models/organisations/models.py +util/engine_models/projects/__init__.py +util/engine_models/projects/models.py +util/engine_models/segments/__init__.py +util/engine_models/segments/models.py +util/engine_models/utils/__init__.py +util/engine_models/utils/datetime.py +util/engine_models/utils/exceptions.py +util/engine_models/utils/hashing.py +util/history/__init__.py +util/history/custom_simple_history.py +util/mappers/__init__.py +util/mappers/dynamodb.py +util/mappers/engine.py +util/mappers/sdk.py +util/mappers/types.py +webhooks/__init__.py +webhooks/apps.py +webhooks/constants.py +webhooks/exceptions.py +webhooks/mappers.py +webhooks/models.py +webhooks/permissions.py +webhooks/serializers.py +webhooks/tasks.py +webhooks/urls.py +webhooks/views.py +webhooks/webhooks.py \ No newline at end of file diff --git a/api/flagsmith_api.egg-info/dependency_links.txt b/api/flagsmith_api.egg-info/dependency_links.txt new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/api/flagsmith_api.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/api/flagsmith_api.egg-info/requires.txt b/api/flagsmith_api.egg-info/requires.txt new file mode 100644 index 000000000000..27b64461593c --- /dev/null +++ b/api/flagsmith_api.egg-info/requires.txt @@ -0,0 +1,133 @@ +django<6,>=5 +rudder-sdk-python<2.1.0,>=2.0.2 +segment-analytics-python<2.3.0,>=2.2.3 +backoff<2.3.0,>=2.2.1 +appdirs<1.5.0,>=1.4.4 +django-cors-headers<3.6.0,>=3.5.0 +djangorestframework<3.16.0,>=3.15.2 +gunicorn<23.1.0,>=23.0.0 +pyparsing<2.5.0,>=2.4.7 +requests<2.34.0,>=2.33.0 +six<1.17.0,>=1.16.0 +whitenoise<6.1.0,>=6.0.0 +dj-database-url<3.1.0,>=3.0.1 +drf-nested-routers<0.93.0,>=0.92.1 +shortuuid<1.1.0,>=1.0.1 +sendgrid-django<4.3.0,>=4.2.0 +psycopg2-binary<2.10.0,>=2.9.5 +coreapi<2.4.0,>=2.3.3 +django-simple-history<2.13.0,>=2.12.0 +google-api-python-client<1.13.0,>=1.12.5 +oauth2client<4.2.0,>=4.1.3 +djangorestframework-recursive<0.2.0,>=0.1.2 +chargebee<4.0.0,>=3.10.0 +python-http-client<3.4.0,>=3.3.7 +django-health-check<3.19.0,>=3.18.2 +django-admin-sso<5.3.0,>=5.2.0 +drf-spectacular<0.29.0,>=0.28.0 +sentry-sdk<3,>=2.24.1 +environs<15.0.0,>=14.1.1 +django-lifecycle<1.3.0,>=1.2.4 +drf-writable-nested<0.7.0,>=0.6.2 +django-filter<2.5.0,>=2.4.0 +flagsmith-flag-engine<11.0.0,>=10.1.0 +boto3<1.36.0,>=1.35.95 +slack-sdk<3.10.0,>=3.9.0 +asgiref<3.9.0,>=3.8.1 +djangorestframework-api-key<2.3.0,>=2.2.0 +pymemcache<4.1.0,>=4.0.0 +google-re2<2.0.0,>=1.0 +django-softdelete<0.12.0,>=0.11.5 +simplejson<3.20.0,>=3.19.1 +djoser<3.0.0,>=2.3.0 +django-storages<1.11.0,>=1.10.1 +django-environ<0.5.0,>=0.4.5 +influxdb-client<1.51.0,>=1.50.0 +django-ordered-model<3.5.0,>=3.4.1 +django-ses<3.6.0,>=3.5.0 +django-axes<9.0.0,>=8.1.0 +pydantic<3.0.0,>=2.12.0 +pydantic-collections<0.7.0,>=0.6.0 +pyngo<2.5.0,>=2.4.1 +flagsmith<6.0.0,>=5.3.0 +openfeature-sdk<0.10.0,>=0.9.0 +openfeature-provider-flagsmith>=0.2.0 +python-gnupg<0.6.0,>=0.5.1 +django-redis<6.0.0,>=5.4.0 +pygithub<2.9.0,>=2.8 +hubspot-api-client<13.0.0,>=12.0.0 +djangorestframework-dataclasses<2.0.0,>=1.3.1 +pyotp<3.0.0,>=2.9.0 +flagsmith-common[common-core,flagsmith-schemas,task-processor]<4,>=3.9.0 +django-stubs<6.0.0,>=5.1.3 +tzdata<2025.0.0,>=2024.1 +djangorestframework-simplejwt<6.0.0,>=5.5.1 +structlog<25.0.0,>=24.4.0 +prometheus-client<0.22.0,>=0.21.1 +django-cockroachdb<4.3.0,>=4.2 +django-oauth-toolkit<4.0.0,>=3.0.1 + +[auth-controller] +auth-controller +django-multiselectfield<2,>=1.0.1 + +[dev] +django-test-migrations<2.0.0,>=1.2.0 +responses<0.23.0,>=0.22.0 +pre-commit<5.0.0,>=4.0.1 +pytest-mock<3.11.0,>=3.10.0 +pytest-lazy-fixture<0.7.0,>=0.6.3 +moto<4.2.0,>=4.1.3 +pytest-freezegun<0.5.0,>=0.4.2 +setuptools +pytest-xdist<3.7.0,>=3.6.1 +pylint<2.17.0,>=2.16.2 +pep8<1.8.0,>=1.7.1 +autopep8<2.1.0,>=2.0.1 +pytest<7.3.0,>=7.2.1 +pytest-django<5.0.0,>=4.8.0 +pytest-cov<4.2.0,>=4.1.0 +datamodel-code-generator<0.26.0,>=0.25 +requests-mock<2.0.0,>=1.11.0 +django-extensions<4.0.0,>=3.2.3 +pdbpp<0.11.0,>=0.10.3 +mypy-boto3-dynamodb<2.0.0,>=1.33.0 +pytest-structlog<2.0.0,>=1.1 +pyfakefs<6.0.0,>=5.7.4 +mypy<2.0.0,>=1.15.0 +djangorestframework-stubs<4.0.0,>=3.15.2 +boto3-stubs<2.0.0,>=1.36.20 +types-requests<3.0.0,>=2.32.0.20241016 +types-markdown<4.0.0,>=3.7.0.20241204 +types-pygments<3.0.0,>=2.19.0.20250107 +types-influxdb-client<2.0.0,>=1.45.0.20241221 +types-psycopg2<3.0.0,>=2.9.21.20250121 +types-python-dateutil<3.0.0,>=2.9.0.20241206 +types-pytz<2026.0.0,>=2025.1.0.20250204 +ruff<0.10.0,>=0.9.7 +flagsmith-common[test-tools] +pytest-responses<0.6.0,>=0.5.1 +diff-cover<11.0.0,>=10.1.0 +django-debug-toolbar +ipython<10.0.0,>=9.10.0 +email-validator>=2.0.0 + +[ldap] +flagsmith-ldap +django-python3-ldap<1,>=0.15.6 + +[licensing] +licensing +cryptography>=44.0.1 + +[release-pipelines] +flagsmith-private<1,>=0.5.1 + +[saml] +pysaml2<8.0.0,>=7.4.2 + +[scim] +flagsmith-private<1,>=0.5.1 + +[workflows] +workflows-logic diff --git a/api/flagsmith_api.egg-info/top_level.txt b/api/flagsmith_api.egg-info/top_level.txt new file mode 100644 index 000000000000..80b793c8ecf9 --- /dev/null +++ b/api/flagsmith_api.egg-info/top_level.txt @@ -0,0 +1,34 @@ +api +api_keys +app +app_analytics +audit +clickhouse +core +custom_auth +e2etests +edge_api +environments +experimentation +features +import_export +integrations +jmeter-tests +metadata +metrics +oauth2_metadata +onboarding +organisations +permissions +platform_hub +projects +sales_dashboard +segment_membership +segments +sse +telemetry +templates +tests +users +util +webhooks diff --git a/docs/docs/deployment-self-hosting/observability/_events-catalogue.md b/docs/docs/deployment-self-hosting/observability/_events-catalogue.md index 1d126c0430d7..577bdf6f0274 100644 --- a/docs/docs/deployment-self-hosting/observability/_events-catalogue.md +++ b/docs/docs/deployment-self-hosting/observability/_events-catalogue.md @@ -381,7 +381,7 @@ Attributes: ### `workflows.change_request.committed` Logged at `info` from: - - `api/core/workflows_services.py:39` + - `api/core/workflows_services.py:37` Attributes: - `environment.id` @@ -391,7 +391,7 @@ Attributes: ### `workflows.missing_live_segment` Logged at `warning` from: - - `api/core/workflows_services.py:114` + - `api/core/workflows_services.py:100` Attributes: - `draft_segment` @@ -399,7 +399,7 @@ Attributes: ### `workflows.segment_revision_created` Logged at `info` from: - - `api/core/workflows_services.py:119` + - `api/core/workflows_services.py:105` Attributes: - `revision_id`