lex-app 2.3.3__tar.gz → 2.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lex_app-2.3.3/lex_app.egg-info → lex_app-2.3.4}/PKG-INFO +1 -1
- lex_app-2.3.4/lex/_version.py +1 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/config.py +25 -16
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1at_reflex_single_port_proxy.py +74 -64
- {lex_app-2.3.3 → lex_app-2.3.4/lex_app.egg-info}/PKG-INFO +1 -1
- lex_app-2.3.3/lex/_version.py +0 -1
- {lex_app-2.3.3 → lex_app-2.3.4}/LICENSE.txt +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/MANIFEST.in +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/README.md +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/generate_pycharm_configs.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/__main__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/apps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/BackendHealthConsumer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/CalculationLogConsumer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/CalculationsConsumer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/LogConsumer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/ModelDataUpdateConsumer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/UpdateCalculationStatusConsumer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/filters/FilterTreeNode.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/filters/GenericFilters.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/filters/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/middleware/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/middleware/keycloak_permissions.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/migrations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/serializers/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/serializers/base_serializers.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/serializers/sensitive_fields.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/Context.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/api_key_requests.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/collection_utils.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/converters.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/helpers.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/temporal.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/LexLoggerView/LexLoggerView.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/LexLoggerView/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/ModelStructureObtainView.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/authentication/KeycloakManager.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/authentication/UserAPIView.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/authentication/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/calculations/ActiveCalculations.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/calculations/CleanCalculations.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/calculations/DownloadMarkdownPdf.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/calculations/InitCalculationLogs.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/calculations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/file_operations/FileDownload.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/file_operations/ModelExport.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/file_operations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/global_search_for_models/Search.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/global_search_for_models/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/lex_api/LexAPI.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/lex_api/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/CalculationLogTreeView.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/History.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/List.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/Many.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/One.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/filter_backends.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/DestroyOneWithPayloadMixin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/ModelEntryProviderMixin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/PermissionAwareSerializerMixin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/serializers/CalculationLogTreeSerializer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/serializers/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_info/Fields.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_info/Widgets.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_info/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/pagination.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/permissions/ModelPermissions.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/permissions/UserPermission.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/permissions/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/process_flow/CreateOrUpdate.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/process_flow/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/project_info/ProjectInfo.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/project_info/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/rbac/RBACInfo.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/rbac/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/sharepoint/DeleteUnusedFiles.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/sharepoint/SharePointFileDownload.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/sharepoint/SharePointPreview.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/sharepoint/SharePointShareLink.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/sharepoint/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/streamlit/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/dark-lex-logo.svg +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-bg.jpg +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-logo.png +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-logo.svg +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-test-report/email.html +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-test-report/lex-icon.png +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-test-report/lex-logo.png +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-test-report/pdf.html +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/apps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/handlers/ConsoleHandler.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/handlers/LexLogger.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/handlers/WebSocketHandler.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/handlers/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0001_initial.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0002_auditlog_created_at_auditlog_edited_at_and_more.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0003_alter_auditlog_created_at_alter_auditlog_edited_at_and_more.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0004_remove_auditlog_audit_fields.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0005_calculationlog_calculationid_index.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0006_alter_auditlog_calculation_id.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0007_calculationlog_heading.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/mixins/AuditLogMixin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/mixins/BulkAuditLogMixin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/mixins/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/models/AuditLog.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/models/AuditLogStatus.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/models/CalculationLog.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/models/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/serializers/AuditLogMixinSerializer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/serializers/AuditLogSerializer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/serializers/CalculationLogSerializer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/serializers/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/tests/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/CacheManager.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/ContextResolver.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/DataModels.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/InitialDataAuditLogger.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/ModelContext.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/WebSocketNotifier.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/calculation_audit.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/config.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/content_types.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/latest_calculation.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/legacy_audit_payload.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/views.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/apps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/authentication_backends/BearerMiddlewareAuthentication.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/authentication_backends/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/createprofiles.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/delete_keycloak_resources.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/keycloak_backup.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/keycloak_init_bak.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/keycloak_rollback_bak.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/register_keycloak_resources.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/middleware.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/migrations/0001_initial.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/migrations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/models/Profile.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/models/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/utils/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/utils/lex_authentication.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/views/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/views/permissions.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/views/token_views.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/views/user_api.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/backfill_history_sql.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/bin/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/bin/lex.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/apps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/calculated_updates/ObjectsToRecalculateStore.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/calculated_updates/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/calculated_updates/update_handler.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/cancellation/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/cancellation/cluster_cancel_index.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/config.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/exceptions.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/fields/PDF_field.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/fields/XLSX_field.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/fields/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/management/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/management/commands/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/management/commands/bootstrap_callback_server.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/middleware/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/middleware/embed_token_auth.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/middleware/embed_xframe.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/migrations/0001_bitemporal_activation.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/migrations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/mixins/CalculatedModelMixin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/mixins/ModelModificationRestriction.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/mixins/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models/CalculationModel.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models/HTMLReport.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models/LexModel.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models/Process.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/Bitemporal.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/MetaHistory.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/StandardHistory.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/activation_applier.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/bitemporal_signals.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/signal_registry.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/signals/ActiveCalculationStateStore.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/signals/CalculationSignals.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/signals/ModelMutationSignal.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/signals/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/sql/bitemporal_activation.sql +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tasks/CeleryTaskDispatcher.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tasks/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tests/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tests/_bitemporal_test_case.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tests/bitemporal_test_settings.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tests/check_schema.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tests/test_calculation_history_transitions.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/transactions/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/transactions/transactions.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/views.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/extract_legacy_logs.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/fix_v1_migration.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/full_migration_workflow.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/helpers/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/helpers/cache_tables.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/legacy_calculation_id_admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/legacy_calculation_log_admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/legacy_log_admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/legacy_user_change_log_admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/read_only_admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/apps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/migrations/0001_initial.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/migrations/0002_alter_legacycalculationid_options_and_more.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/migrations/0003_legacylog.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/migrations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/models/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/models/legacy_calculation_id.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/models/legacy_calculation_log.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/models/legacy_log.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/models/legacy_user_change_log.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/serializers/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/serializers/legacy_data_serializers.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/apps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/asgi.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/entrypoint.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/exceptions.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/heartbeat.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/redis_keys.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/registry.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/supervisor.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_tasks.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/design_system/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/design_system/lex_tokens.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/fast_health.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/keycloak_exclusions.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/Init2.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/backfill_audit_logging.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/backfill_bitemporal_history.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/bootstrap_keycloak.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/capture_db_tables.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/capture_migration_state.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/create_db.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/detect_model_changes.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/full_migration_workflow.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/generate_legacy_freeze_manifest.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/init.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/lex_migrate.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/normalize_is_calculated.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/rebase_incident_datetimes.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/rollback_migration_state.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/run_recovery_supervisor.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/sync_keycloak.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_backfill_audit_logging_command.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_backfill_audit_logging_payload.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_bootstrap_callback_server.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_init_command.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_lex_pytest_report_flags.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_migration_workflow_commands.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/migrations/0001_initial.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/migrations/0002_delete_asoftestmodel_and_more.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/migrations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/Reflex.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/app.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/auth.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/dashboards.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/django_orm.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/examples/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/examples/_reflex_structure.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/routing.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/runtime_health.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/settings.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/simple_history_config.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/Streamlit.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/_lex_view_component/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/_lex_view_component/frontend/index.html +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/_widget_host_component/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/_widget_host_component/frontend/index.html +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/eager_frames.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/embed.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/examples/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/examples/_streamlit_structure.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/quackback.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/sidebar.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/theme/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/theme/config_writer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/theme/mapping.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/theme/tokens.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/widgets/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/widgets/host.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/widgets/keys.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/widgets/spec.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/tests/ProcessAdminTestCase.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/tests/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/tests/create_db.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/urls.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/utils.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/views.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/wsgi.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/manage.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/mcp_server/tools/embed.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/apps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/migrations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/ModelCollection.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/ModelContainer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/ModelProcessAdmin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/constants.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/utils.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/settings/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/settings/process_admin_settings.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/sites/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/sites/process_admin_site.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/tests/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/tests/django_test_settings.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/tests/urls.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/bitemporal_sync.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/local_scheduler.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/model_registration.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/model_structure.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/model_structure_builder.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/views/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/views/model_relation_views.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/views.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/proxy.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/apps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/migrations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/tests.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/views.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/reflex_app.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/restore_legacy_logs.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/runtime_config.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/sanitize_v2_migrations.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/streamlit_app.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/streamlit_theme.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/apps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/lex_config.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/_authenticated_e2e_test_case.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/_e2e_test_case.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10a_crud_endpoints.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10b_history_endpoint.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10c_many_endpoint.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10d_reflex_search_exclusion.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10e_schema_introspection.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10f_global_search.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10g_one_endpoint_lifecycle.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10h_lex_api_sdk.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10i_fields_view_and_list_ui.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10j_filter_backends_and_storage.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10k_destroy_with_payload_mixin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10l_file_download_view.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10m_calculation_log_tree.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10n_active_calculations_endpoint.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/extra_models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6a_api_audit.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6b_calculation_audit.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6c_actor_resolution.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6d_payload_and_gfk.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6e_bulk_audit.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6f_resilience.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6g_immutability.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6h_cache_manager.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6i_calculation_via_api.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6j_audit_utils.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6k_model_contracts.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6l_context_and_gfk_resolution.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6m_lexlogger_and_websocket.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6n_audit_log_serializers.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6o_bulk_audit_normalize.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6q_root_detection_with_headings.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15a_builder_api.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15b_child_node_creation.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15c_silent_and_mixed.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15d_three_level_chain.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15e_combinatorial_pipeline.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15f_save_boundary.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15g_heading_context.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15h_pdf_export.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15i_latest_run_on_the_row.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15j_failed_run_keeps_its_log.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7a_atomic.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7b_non_atomic.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7c_hierarchy.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7d_state_guards.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7e_persistence_internals.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7f_combination_engine.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7g_create_pipeline.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7h_celery_dispatch.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7i_atomicity_matrix.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7j_three_level_matrix.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7k_exceptions_restrictions_xlsx.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7l_recalc_queue.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7m_calc_signals.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7n_cancellation.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7o_fk_violation_abort.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7p_streaming_expansion.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7q_worker_default_dispatch.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7s_calculation_audit_columns.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8a_sync_fallback.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8aa_postrun_shutdown_guard.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8ab_dispatcher_join_worker_safe.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8ac_sync_fallback_idempotent.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8ad_dispatched_task_cancel_marker.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8b_dispatch_context.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8c_calculation_audit_columns.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8g_task_infrastructure.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8h_eager_end_to_end.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8i_scope_contracts.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8j_task_bodies.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8k_redis_broker_integration.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8l_celery_dispatcher.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8m_undecorated_dispatch.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8u_cancel_revoke.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8v_cluster_cascade_cancel.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8w_recovery_terminal_guard.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8x_startup_reset_recovery_handoff.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8y_beat_recovery_driver.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2a_create.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2b_read.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2c_update.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2d_delete.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2e_bulk.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2f_missing_scenarios.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2f_ordering.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2g_filtering.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2i_cancel_endpoint.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2j_instance_api_key.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/design_system/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/design_system/test_lex_tokens.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13a_legacy_export.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13b_ag_grid_export.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13c_grouped_selected.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13d_auth_edge.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13e_streaming_fast_export.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13f_export_timezone.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13g_xlsx_field_timezone.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13h_xlsx_field_binding.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/fixtures/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/gate_selftest/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/gate_selftest/test_gate_selftest.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5_11_fallback_snapshot.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5a_basic_history.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5b_calculation_history.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5c_history_api.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5g_valid_to_chaining.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5h_suppression_toolkit.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5i_api_contract.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5j_snapshot_actor.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5k_metahistory.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5l_future_valid_from.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5m_asof_edit_time.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5o_activation_applier.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/initial_data/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/initial_data/test_1c_initial_data.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/initial_data/test_1f_seed_idempotency.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/initial_data/test_1i_initial_data_journey.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1a_lex_setup.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1aa_embedded_token_renewal.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ab_ignored_role_policy_cleanup.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ac_streamlit_session_survival.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ac_widget_host_manifest.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ad_proxy_assets_and_session_durability.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ad_streamlit_theme_follower.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ae_streamlit_theme.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1af_theme_switch_preserves_brand.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ag_spa_asset_caching.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ah_metadata_cache_headers.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ai_eager_component_frames.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1aj_streamlit_sidebar_chrome.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ak_widget_keys_and_flow.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1al_example_dashboard.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1am_quackback_launcher.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1an_proxy_http2_safe_headers.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ao_flow_composable_steps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ao_frontend_resolution.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ap_reflex_cli.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1aq_reflex_dashboards.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ar_reflex_automatic_sign_in.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1as_reflex_token_cookie_compression.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1b_default_authz.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1b_lex_init.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1d_init_helpers.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1e_keycloak_sync_manager.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1f_keycloak_drift.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1g_sync_manager_admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1h_bootstrap_flow.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1i_rebase_incident_datetimes.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1j_client_preflight.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1k_client_preflight_integration.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1l_full_pipeline_integration.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1m_cli_commands.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1n_init_helper_paths.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1o_lazy_imports_and_helpers.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1p_settings_urls_views.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1q_migration_files_complete.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1r_fetched_datetime_zone.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1s_log_cleanup_and_lex_debug.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1t_disable_server_side_cursors.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1u_fast_health_asgi.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1v_scheduler_tz_invariant.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1w_recovery_default_deployment_target.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1x_runtime_health_metadata.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1y_ide_run_configs.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1z_proxy_iframe_breakout.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/test_journey_a_invoice_lifecycle.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/test_journey_b_portfolio_calculation.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/test_journey_c_role_aware_visibility.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/test_journey_d_audit_trail.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/test_journey_e_validation_gate.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4a_field_level.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4b_action_level.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4c_keycloak_fallback.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4d_user_context.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4e_filter_backend.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4f_serializer_mixin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4g_user_permissions_api.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4h_full_deny_matrix.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4i_permission_helpers.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4j_filter_backends.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4m_api_key_middleware.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4n_reflex_permissions.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/test_14a_query_params.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/test_14b_ag_post_filter_model.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/test_14c_ag_post_group_pivot.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/test_14e_secondary_branches.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/test_14h_list_query_paths.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12a_history_meta_scopes.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12a_read_contract.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12b_type_roundtrip.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12c_list_and_many.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12d_audit_log_payload.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12e_factory.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12f_write_paths.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12g_datetime_tz_ambiguity.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12h_filefield_clear.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12i_fk_display_names.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12j_datetime_roundtrip_convention.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12k_sensitive_field_denylist.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9_7_suppression_guards.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9a_state_and_broadcast.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9c_cache_cleanup.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9d_active_calculation_state_store.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9e_model_mutation_broadcast.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9f_core_consumers.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/_stress_test_case.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11a_seed_baseline.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11b_list.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11c_export.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11d_period_calc.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11e_bulk_api.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11f_growth_and_scale.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11g_fk_heavy_export.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11h_calc_log_overhead.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11i_save_fingerprint.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3a_pre_validation.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3b_post_validation.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3c_hook_ordering.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3d_recursion_guard.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3e_snapshot_lifecycle.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3f_lean_initial_state.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3g_aware_datetime_assignment.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/e2e/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/e2e/_authenticated_e2e_test_case.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/e2e/_e2e_test_case.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/calculation/test_calculated_model_mixin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/calculation/test_calculation_wait_contexts.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_ai_asset_mode_sync.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_ai_update_bootstrap.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_ai_windows_parity.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_celery_recovery.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_mcp_server_sdk_compat.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_worker_self_termination.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/ai_dashboard.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/ai_faq.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/ai_issue_report.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/ai_worktree.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/django_bootstrap.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/mcp_mode_invoke.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/project_root.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/setup_with_ai.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/test_groups.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/verify_ai_assets.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/admin.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/apps.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/channel_layer.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/config/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/config/generic_app_config.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/decorators/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/decorators/singleton.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/import_system/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/import_system/import_utils.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/import_system/model_loader.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/import_system/module_finder.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/migrations/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/models.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/storage/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/storage/custom_storage.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/utils/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/utils/gcs_utils.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/views.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex_app.egg-info/SOURCES.txt +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex_app.egg-info/dependency_links.txt +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex_app.egg-info/entry_points.txt +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex_app.egg-info/requires.txt +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/lex_app.egg-info/top_level.txt +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/migrations_logic/__init__.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/migrations_logic/fix_migrations.py +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/pyproject.toml +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/requirements.txt +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/setup.cfg +0 -0
- {lex_app-2.3.3 → lex_app-2.3.4}/setup.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.3.4"
|
|
@@ -81,22 +81,29 @@ def _make_app_module_findable() -> None:
|
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
def _repair_single_port_proxy() -> None:
|
|
84
|
-
"""
|
|
84
|
+
"""Mount Reflex Enterprise's single-port proxy on the Reflex backend itself.
|
|
85
85
|
|
|
86
86
|
``use_single_port`` (``REFLEX_USE_SINGLE_PORT``) has the backend answer its
|
|
87
87
|
own routes and pass every other request to the frontend server, so that a
|
|
88
88
|
development run -- two servers -- works behind the one port a pod exposes.
|
|
89
|
-
reflex-enterprise 0.9.6
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
89
|
+
reflex-enterprise 0.9.6 never manages it on Reflex 0.9.12:
|
|
90
|
+
|
|
91
|
+
* its lifespan task names its parameter ``app``, and Reflex passes the
|
|
92
|
+
*Reflex* app under that name (the Starlette app only as
|
|
93
|
+
``starlette_app``), so it logs "Unable to find the base Starlette app";
|
|
94
|
+
* given the Starlette app, it mounts on the outermost one, and Reflex
|
|
95
|
+
reaches its backend through a catch-all ``Mount("")`` there. Behind an
|
|
96
|
+
``api_transformer`` that wraps the backend in ASGI middleware (RFDS's
|
|
97
|
+
security headers do), the proxy lands after that mount and is never
|
|
98
|
+
reached. Every page 404s either way.
|
|
99
|
+
|
|
100
|
+
So the replacement takes the Reflex app and hands the proxy its backend,
|
|
101
|
+
``app._api`` -- where Reflex itself mounts a compiled frontend -- inside
|
|
102
|
+
every wrapper, after every backend route. Reflex Enterprise imports the
|
|
103
|
+
proxy when it builds the app, after ``rxconfig.py`` has run, so replacing
|
|
104
|
+
the module's function is enough. The stand-in Reflex Enterprise defines
|
|
105
|
+
when asgiproxy is missing, which names no parameter, is left alone, and so
|
|
106
|
+
is this replacement itself.
|
|
100
107
|
"""
|
|
101
108
|
import contextlib
|
|
102
109
|
import inspect
|
|
@@ -104,15 +111,17 @@ def _repair_single_port_proxy() -> None:
|
|
|
104
111
|
from reflex_enterprise import proxy
|
|
105
112
|
|
|
106
113
|
upstream = proxy.proxy_middleware
|
|
107
|
-
|
|
108
|
-
|
|
114
|
+
if getattr(upstream, "lex_mounts_on_backend", False):
|
|
115
|
+
return
|
|
116
|
+
if not {"app", "starlette_app"} & set(inspect.signature(upstream).parameters):
|
|
109
117
|
return
|
|
110
118
|
|
|
111
119
|
@contextlib.asynccontextmanager
|
|
112
|
-
async def proxy_middleware(
|
|
113
|
-
async with upstream(
|
|
120
|
+
async def proxy_middleware(app):
|
|
121
|
+
async with upstream(app._api):
|
|
114
122
|
yield
|
|
115
123
|
|
|
124
|
+
proxy_middleware.lex_mounts_on_backend = True
|
|
116
125
|
proxy.proxy_middleware = proxy_middleware
|
|
117
126
|
|
|
118
127
|
|
{lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1at_reflex_single_port_proxy.py
RENAMED
|
@@ -11,16 +11,19 @@ platform starts a project's dashboards. On reflex-enterprise 0.9.6 with Reflex
|
|
|
11
11
|
0.9.12 the mode did nothing but log "Unable to find the base Starlette app":
|
|
12
12
|
Reflex passes a lifespan task the Reflex app under a parameter named ``app`` and
|
|
13
13
|
the Starlette app only as ``starlette_app``, and the proxy names its parameter
|
|
14
|
-
``app``.
|
|
14
|
+
``app``. Handed the Starlette app, it mounts on the outermost one, where Reflex
|
|
15
|
+
reaches its backend through a catch-all mount -- behind an ``api_transformer``
|
|
16
|
+
that wraps the backend in middleware, as RFDS's security headers do, the proxy
|
|
17
|
+
is never reached. lex-app mounts it on the Reflex backend itself, so:
|
|
15
18
|
|
|
16
19
|
* a project's ``rxconfig.py`` repairs the proxy as Reflex loads it --
|
|
17
20
|
``lex_config()`` in the one ``lex reflex`` writes, ``lex_auth_plugin()`` in a
|
|
18
21
|
hand-written one -- and the configuration is still the project's;
|
|
19
|
-
* run the way Reflex runs it,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
left exactly as it is.
|
|
22
|
+
* run the way Reflex runs it, with or without middleware around the backend,
|
|
23
|
+
the backend's port answers the backend's routes itself and every other path,
|
|
24
|
+
query string included, from the frontend server;
|
|
25
|
+
* repairing again changes nothing, and the stand-in Reflex Enterprise defines
|
|
26
|
+
without asgiproxy is left exactly as it is.
|
|
24
27
|
|
|
25
28
|
A regression reads as "the dashboard's URL answers /ping and 404s every page".
|
|
26
29
|
|
|
@@ -79,7 +82,7 @@ _LOAD_CONFIG = (
|
|
|
79
82
|
"config = get_config()\n"
|
|
80
83
|
"from reflex_enterprise import proxy\n"
|
|
81
84
|
"print(config.app_name, config.module,\n"
|
|
82
|
-
"
|
|
85
|
+
" getattr(proxy.proxy_middleware, 'lex_mounts_on_backend', False))\n"
|
|
83
86
|
)
|
|
84
87
|
|
|
85
88
|
|
|
@@ -146,7 +149,7 @@ class TestCluster01at_SinglePortProxy(TestCase):
|
|
|
146
149
|
interpreter -- the way every Reflex worker starts.
|
|
147
150
|
When: Reflex loads the configuration, before it would build the app.
|
|
148
151
|
Then: the configuration is the project's own, and Reflex Enterprise's
|
|
149
|
-
proxy
|
|
152
|
+
proxy is lex-app's, which mounts on the Reflex backend.
|
|
150
153
|
"""
|
|
151
154
|
from lex.bin.lex import _ensure_reflex_config
|
|
152
155
|
|
|
@@ -165,82 +168,89 @@ class TestCluster01at_SinglePortProxy(TestCase):
|
|
|
165
168
|
timeout=300, cwd=tmp,
|
|
166
169
|
)
|
|
167
170
|
self.assertEqual(result.returncode, 0, msg=result.stderr[-2000:])
|
|
168
|
-
app_name, loaded_module,
|
|
171
|
+
app_name, loaded_module, repaired = result.stdout.strip().splitlines()[-1].split()
|
|
169
172
|
self.assertEqual(
|
|
170
173
|
loaded_module, app_module, f"Reflex must still load the project's configuration ({case})",
|
|
171
174
|
)
|
|
172
175
|
self.assertNotEqual(app_name, "", "the configuration names the app")
|
|
173
|
-
self.assertEqual(
|
|
174
|
-
parameters, "starlette_app",
|
|
175
|
-
f"rxconfig.py ({case}) must leave the proxy taking the Starlette app, not the Reflex app",
|
|
176
|
-
)
|
|
176
|
+
self.assertEqual(repaired, "True", f"rxconfig.py ({case}) must leave lex-app's proxy in place")
|
|
177
177
|
|
|
178
178
|
# -- 1.382 ---------------------------------------------------------
|
|
179
179
|
def test_1_382_one_port_answers_the_backend_routes_and_proxies_every_page(self) -> None:
|
|
180
180
|
"""
|
|
181
181
|
Scenario 1.382: run the way Reflex runs it, one port serves the backend and the pages.
|
|
182
182
|
Given: a frontend server on its own port, a single-port configuration,
|
|
183
|
-
|
|
184
|
-
|
|
183
|
+
Reflex Enterprise's proxy as it ships once rxconfig.py has built
|
|
184
|
+
lex-app's sign-in plugin, and the backend assembled as Reflex
|
|
185
|
+
assembles it -- mounted under a catch-all in the outermost app,
|
|
186
|
+
bare or wrapped in ASGI middleware by an ``api_transformer``.
|
|
185
187
|
When: Reflex Enterprise registers the proxy, as it does when it builds
|
|
186
|
-
the app; Reflex runs its lifespan tasks
|
|
187
|
-
|
|
188
|
-
``/ping`` and for a page.
|
|
188
|
+
the app; Reflex runs its lifespan tasks; and a browser asks the
|
|
189
|
+
backend's port for ``/ping`` and for a page.
|
|
189
190
|
Then: ``/ping`` is the backend's own answer, and the page -- its path
|
|
190
|
-
and query string -- is the frontend server's
|
|
191
|
+
and query string -- is the frontend server's, through the
|
|
192
|
+
middleware when there is some.
|
|
191
193
|
"""
|
|
192
|
-
# In a directory of its own: Reflex Enterprise's registration notes its session in `.web/` under the cwd.
|
|
193
|
-
with tempfile.TemporaryDirectory() as tmp, contextlib.chdir(tmp), \
|
|
194
|
-
_frontend_server() as frontend_port, _shipped_proxy(), _clean_reflex_env():
|
|
195
|
-
self.assertEqual(_parameters(proxy.proxy_middleware), ["app"], "the proxy as reflex-enterprise ships it")
|
|
196
|
-
lex_auth_plugin()
|
|
197
194
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
195
|
+
def wrapped(inner):
|
|
196
|
+
async def middleware(scope, receive, send):
|
|
197
|
+
if scope["type"] != "http":
|
|
198
|
+
return await inner(scope, receive, send)
|
|
199
|
+
|
|
200
|
+
async def marked(message):
|
|
201
|
+
if message["type"] == "http.response.start":
|
|
202
|
+
message = {**message, "headers": [*message.get("headers", []), (b"x-wrapped", b"yes")]}
|
|
203
|
+
await send(message)
|
|
204
|
+
|
|
205
|
+
await inner(scope, receive, marked)
|
|
206
|
+
|
|
207
|
+
return middleware
|
|
208
|
+
|
|
209
|
+
for case, transform in {"bare": None, "wrapped in middleware": wrapped}.items():
|
|
210
|
+
# In a directory of its own: Reflex Enterprise's registration notes its session in `.web/` under the cwd.
|
|
211
|
+
with self.subTest(backend=case), tempfile.TemporaryDirectory() as tmp, contextlib.chdir(tmp), \
|
|
212
|
+
_frontend_server() as frontend_port, _shipped_proxy(), _clean_reflex_env():
|
|
213
|
+
self.assertEqual(_parameters(proxy.proxy_middleware), ["app"], "the proxy as it ships")
|
|
214
|
+
lex_auth_plugin()
|
|
215
|
+
|
|
216
|
+
config = rxe.Config(
|
|
217
|
+
app_name="single_port_probe", use_single_port=True,
|
|
218
|
+
frontend_port=frontend_port, backend_port=frontend_port + 1,
|
|
208
219
|
)
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
220
|
+
reflex_app = LifespanMixin()
|
|
221
|
+
reflex_app._api = Starlette(routes=[Route("/ping", lambda request: PlainTextResponse("pong"))])
|
|
222
|
+
with patch("reflex_enterprise.app.get_config", return_value=config), \
|
|
223
|
+
patch("reflex_enterprise.proxy.get_config", return_value=config):
|
|
224
|
+
AppEnterprise._verify_and_setup_proxy(reflex_app)
|
|
225
|
+
self.assertEqual(len(reflex_app.get_lifespan_tasks()), 1, "one lifespan task: the proxy")
|
|
226
|
+
# What `reflex.app.App.__call__` builds: the backend, transformed, under a catch-all mount.
|
|
227
|
+
backend = reflex_app._api if transform is None else transform(reflex_app._api)
|
|
228
|
+
outermost = Starlette(lifespan=reflex_app._run_lifespan_tasks)
|
|
229
|
+
outermost.mount("", backend)
|
|
230
|
+
with TestClient(outermost) as browser:
|
|
231
|
+
ping = browser.get("/ping")
|
|
232
|
+
page = browser.get("/funds/42?tab=history")
|
|
233
|
+
|
|
234
|
+
self.assertEqual((ping.status_code, ping.text), (200, "pong"), "a backend route is the backend's")
|
|
235
|
+
self.assertEqual(
|
|
236
|
+
(page.status_code, page.text), (200, "frontend:/funds/42?tab=history"),
|
|
237
|
+
f"every other path must reach the frontend server through the backend's port ({case})",
|
|
212
238
|
)
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
page = browser.get("/funds/42?tab=history")
|
|
216
|
-
|
|
217
|
-
self.assertEqual((ping.status_code, ping.text), (200, "pong"), "a backend route is answered by the backend")
|
|
218
|
-
self.assertEqual(
|
|
219
|
-
(page.status_code, page.text), (200, "frontend:/funds/42?tab=history"),
|
|
220
|
-
"every other path must reach the frontend server through the backend's port",
|
|
221
|
-
)
|
|
239
|
+
if transform is not None:
|
|
240
|
+
self.assertEqual(page.headers.get("x-wrapped"), "yes", "a proxied page passes the middleware")
|
|
222
241
|
|
|
223
242
|
# -- 1.383 ---------------------------------------------------------
|
|
224
243
|
def test_1_383_repairing_again_or_a_proxy_that_needs_no_repair_changes_nothing(self) -> None:
|
|
225
244
|
"""
|
|
226
|
-
Scenario 1.383: the repair applies once, and
|
|
227
|
-
Given: the proxy as it ships, already repaired once; and
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
Enterprise defines without asgiproxy, which names none.
|
|
245
|
+
Scenario 1.383: the repair applies once, and not to the stand-in.
|
|
246
|
+
Given: the proxy as it ships, already repaired once; and the stand-in
|
|
247
|
+
Reflex Enterprise defines without asgiproxy, which names no
|
|
248
|
+
parameter.
|
|
231
249
|
When: ``lex_auth_plugin()`` builds the sign-in plugin again, as a
|
|
232
250
|
reloaded configuration does.
|
|
233
251
|
Then: each proxy is left exactly as it was.
|
|
234
252
|
"""
|
|
235
253
|
|
|
236
|
-
@contextlib.asynccontextmanager
|
|
237
|
-
async def fixed(starlette_app):
|
|
238
|
-
yield
|
|
239
|
-
|
|
240
|
-
@contextlib.asynccontextmanager
|
|
241
|
-
async def both(app, starlette_app):
|
|
242
|
-
yield
|
|
243
|
-
|
|
244
254
|
@contextlib.asynccontextmanager
|
|
245
255
|
async def stand_in(*args, **kwargs):
|
|
246
256
|
yield
|
|
@@ -248,11 +258,11 @@ class TestCluster01at_SinglePortProxy(TestCase):
|
|
|
248
258
|
with _shipped_proxy():
|
|
249
259
|
lex_auth_plugin()
|
|
250
260
|
repaired = proxy.proxy_middleware
|
|
251
|
-
self.
|
|
261
|
+
self.assertTrue(getattr(repaired, "lex_mounts_on_backend", False), "the first build repairs the proxy")
|
|
262
|
+
self.assertEqual(_parameters(repaired), ["app"], "it takes the Reflex app, whose backend it mounts on")
|
|
252
263
|
lex_auth_plugin()
|
|
253
264
|
self.assertIs(proxy.proxy_middleware, repaired, "a second build must not wrap the repair again")
|
|
254
265
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
self.assertIs(proxy.proxy_middleware, upstream, f"a {name} proxy needs no repair")
|
|
266
|
+
with patch.object(proxy, "proxy_middleware", stand_in):
|
|
267
|
+
lex_auth_plugin()
|
|
268
|
+
self.assertIs(proxy.proxy_middleware, stand_in, "the stand-in without asgiproxy needs no repair")
|
lex_app-2.3.3/lex/_version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2.3.3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/DestroyOneWithPayloadMixin.py
RENAMED
|
File without changes
|
{lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/ModelEntryProviderMixin.py
RENAMED
|
File without changes
|
{lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/PermissionAwareSerializerMixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0004_remove_auditlog_audit_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
{lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0006_alter_auditlog_calculation_id.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|