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.
Files changed (684) hide show
  1. {lex_app-2.3.3/lex_app.egg-info → lex_app-2.3.4}/PKG-INFO +1 -1
  2. lex_app-2.3.4/lex/_version.py +1 -0
  3. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/config.py +25 -16
  4. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1at_reflex_single_port_proxy.py +74 -64
  5. {lex_app-2.3.3 → lex_app-2.3.4/lex_app.egg-info}/PKG-INFO +1 -1
  6. lex_app-2.3.3/lex/_version.py +0 -1
  7. {lex_app-2.3.3 → lex_app-2.3.4}/LICENSE.txt +0 -0
  8. {lex_app-2.3.3 → lex_app-2.3.4}/MANIFEST.in +0 -0
  9. {lex_app-2.3.3 → lex_app-2.3.4}/README.md +0 -0
  10. {lex_app-2.3.3 → lex_app-2.3.4}/generate_pycharm_configs.py +0 -0
  11. {lex_app-2.3.3 → lex_app-2.3.4}/lex/__init__.py +0 -0
  12. {lex_app-2.3.3 → lex_app-2.3.4}/lex/__main__.py +0 -0
  13. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/__init__.py +0 -0
  14. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/admin.py +0 -0
  15. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/apps.py +0 -0
  16. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/BackendHealthConsumer.py +0 -0
  17. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/CalculationLogConsumer.py +0 -0
  18. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/CalculationsConsumer.py +0 -0
  19. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/LogConsumer.py +0 -0
  20. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/ModelDataUpdateConsumer.py +0 -0
  21. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/UpdateCalculationStatusConsumer.py +0 -0
  22. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/consumers/__init__.py +0 -0
  23. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/filters/FilterTreeNode.py +0 -0
  24. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/filters/GenericFilters.py +0 -0
  25. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/filters/__init__.py +0 -0
  26. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/middleware/__init__.py +0 -0
  27. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/middleware/keycloak_permissions.py +0 -0
  28. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/migrations/__init__.py +0 -0
  29. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/models.py +0 -0
  30. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/serializers/__init__.py +0 -0
  31. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/serializers/base_serializers.py +0 -0
  32. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/serializers/sensitive_fields.py +0 -0
  33. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/Context.py +0 -0
  34. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/__init__.py +0 -0
  35. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/api_key_requests.py +0 -0
  36. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/collection_utils.py +0 -0
  37. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/converters.py +0 -0
  38. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/helpers.py +0 -0
  39. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/utils/temporal.py +0 -0
  40. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/LexLoggerView/LexLoggerView.py +0 -0
  41. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/LexLoggerView/__init__.py +0 -0
  42. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/ModelStructureObtainView.py +0 -0
  43. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/__init__.py +0 -0
  44. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/authentication/KeycloakManager.py +0 -0
  45. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/authentication/UserAPIView.py +0 -0
  46. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/authentication/__init__.py +0 -0
  47. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/calculations/ActiveCalculations.py +0 -0
  48. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/calculations/CleanCalculations.py +0 -0
  49. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/calculations/DownloadMarkdownPdf.py +0 -0
  50. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/calculations/InitCalculationLogs.py +0 -0
  51. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/calculations/__init__.py +0 -0
  52. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/file_operations/FileDownload.py +0 -0
  53. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/file_operations/ModelExport.py +0 -0
  54. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/file_operations/__init__.py +0 -0
  55. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/global_search_for_models/Search.py +0 -0
  56. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/global_search_for_models/__init__.py +0 -0
  57. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/lex_api/LexAPI.py +0 -0
  58. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/lex_api/__init__.py +0 -0
  59. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/CalculationLogTreeView.py +0 -0
  60. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/History.py +0 -0
  61. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/List.py +0 -0
  62. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/Many.py +0 -0
  63. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/One.py +0 -0
  64. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/__init__.py +0 -0
  65. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/filter_backends.py +0 -0
  66. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/DestroyOneWithPayloadMixin.py +0 -0
  67. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/ModelEntryProviderMixin.py +0 -0
  68. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/PermissionAwareSerializerMixin.py +0 -0
  69. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/mixins/__init__.py +0 -0
  70. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/serializers/CalculationLogTreeSerializer.py +0 -0
  71. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_entries/serializers/__init__.py +0 -0
  72. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_info/Fields.py +0 -0
  73. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_info/Widgets.py +0 -0
  74. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/model_info/__init__.py +0 -0
  75. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/pagination.py +0 -0
  76. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/permissions/ModelPermissions.py +0 -0
  77. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/permissions/UserPermission.py +0 -0
  78. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/permissions/__init__.py +0 -0
  79. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/process_flow/CreateOrUpdate.py +0 -0
  80. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/process_flow/__init__.py +0 -0
  81. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/project_info/ProjectInfo.py +0 -0
  82. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/project_info/__init__.py +0 -0
  83. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/rbac/RBACInfo.py +0 -0
  84. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/rbac/__init__.py +0 -0
  85. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/sharepoint/DeleteUnusedFiles.py +0 -0
  86. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/sharepoint/SharePointFileDownload.py +0 -0
  87. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/sharepoint/SharePointPreview.py +0 -0
  88. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/sharepoint/SharePointShareLink.py +0 -0
  89. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/sharepoint/__init__.py +0 -0
  90. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views/streamlit/__init__.py +0 -0
  91. {lex_app-2.3.3 → lex_app-2.3.4}/lex/api/views.py +0 -0
  92. {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/dark-lex-logo.svg +0 -0
  93. {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-bg.jpg +0 -0
  94. {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-logo.png +0 -0
  95. {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-logo.svg +0 -0
  96. {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-test-report/email.html +0 -0
  97. {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-test-report/lex-icon.png +0 -0
  98. {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-test-report/lex-logo.png +0 -0
  99. {lex_app-2.3.3 → lex_app-2.3.4}/lex/assets/lex-test-report/pdf.html +0 -0
  100. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/__init__.py +0 -0
  101. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/admin.py +0 -0
  102. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/apps.py +0 -0
  103. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/handlers/ConsoleHandler.py +0 -0
  104. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/handlers/LexLogger.py +0 -0
  105. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/handlers/WebSocketHandler.py +0 -0
  106. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/handlers/__init__.py +0 -0
  107. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0001_initial.py +0 -0
  108. {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
  109. {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
  110. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0004_remove_auditlog_audit_fields.py +0 -0
  111. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0005_calculationlog_calculationid_index.py +0 -0
  112. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0006_alter_auditlog_calculation_id.py +0 -0
  113. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/0007_calculationlog_heading.py +0 -0
  114. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/migrations/__init__.py +0 -0
  115. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/mixins/AuditLogMixin.py +0 -0
  116. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/mixins/BulkAuditLogMixin.py +0 -0
  117. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/mixins/__init__.py +0 -0
  118. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/models/AuditLog.py +0 -0
  119. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/models/AuditLogStatus.py +0 -0
  120. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/models/CalculationLog.py +0 -0
  121. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/models/__init__.py +0 -0
  122. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/models.py +0 -0
  123. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/serializers/AuditLogMixinSerializer.py +0 -0
  124. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/serializers/AuditLogSerializer.py +0 -0
  125. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/serializers/CalculationLogSerializer.py +0 -0
  126. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/serializers/__init__.py +0 -0
  127. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/tests/__init__.py +0 -0
  128. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/CacheManager.py +0 -0
  129. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/ContextResolver.py +0 -0
  130. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/DataModels.py +0 -0
  131. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/InitialDataAuditLogger.py +0 -0
  132. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/ModelContext.py +0 -0
  133. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/WebSocketNotifier.py +0 -0
  134. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/__init__.py +0 -0
  135. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/calculation_audit.py +0 -0
  136. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/config.py +0 -0
  137. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/content_types.py +0 -0
  138. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/latest_calculation.py +0 -0
  139. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/utils/legacy_audit_payload.py +0 -0
  140. {lex_app-2.3.3 → lex_app-2.3.4}/lex/audit_logging/views.py +0 -0
  141. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/__init__.py +0 -0
  142. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/admin.py +0 -0
  143. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/apps.py +0 -0
  144. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/authentication_backends/BearerMiddlewareAuthentication.py +0 -0
  145. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/authentication_backends/__init__.py +0 -0
  146. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/__init__.py +0 -0
  147. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/__init__.py +0 -0
  148. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/createprofiles.py +0 -0
  149. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/delete_keycloak_resources.py +0 -0
  150. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/keycloak_backup.py +0 -0
  151. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/keycloak_init_bak.py +0 -0
  152. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/keycloak_rollback_bak.py +0 -0
  153. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/management/commands/register_keycloak_resources.py +0 -0
  154. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/middleware.py +0 -0
  155. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/migrations/0001_initial.py +0 -0
  156. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/migrations/__init__.py +0 -0
  157. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/models/Profile.py +0 -0
  158. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/models/__init__.py +0 -0
  159. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/models.py +0 -0
  160. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/utils/__init__.py +0 -0
  161. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/utils/lex_authentication.py +0 -0
  162. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/views/__init__.py +0 -0
  163. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/views/permissions.py +0 -0
  164. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/views/token_views.py +0 -0
  165. {lex_app-2.3.3 → lex_app-2.3.4}/lex/authentication/views/user_api.py +0 -0
  166. {lex_app-2.3.3 → lex_app-2.3.4}/lex/backfill_history_sql.py +0 -0
  167. {lex_app-2.3.3 → lex_app-2.3.4}/lex/bin/__init__.py +0 -0
  168. {lex_app-2.3.3 → lex_app-2.3.4}/lex/bin/lex.py +0 -0
  169. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/__init__.py +0 -0
  170. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/admin.py +0 -0
  171. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/apps.py +0 -0
  172. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/calculated_updates/ObjectsToRecalculateStore.py +0 -0
  173. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/calculated_updates/__init__.py +0 -0
  174. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/calculated_updates/update_handler.py +0 -0
  175. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/cancellation/__init__.py +0 -0
  176. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/cancellation/cluster_cancel_index.py +0 -0
  177. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/config.py +0 -0
  178. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/exceptions.py +0 -0
  179. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/fields/PDF_field.py +0 -0
  180. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/fields/XLSX_field.py +0 -0
  181. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/fields/__init__.py +0 -0
  182. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/management/__init__.py +0 -0
  183. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/management/commands/__init__.py +0 -0
  184. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/management/commands/bootstrap_callback_server.py +0 -0
  185. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/middleware/__init__.py +0 -0
  186. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/middleware/embed_token_auth.py +0 -0
  187. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/middleware/embed_xframe.py +0 -0
  188. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/migrations/0001_bitemporal_activation.py +0 -0
  189. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/migrations/__init__.py +0 -0
  190. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/mixins/CalculatedModelMixin.py +0 -0
  191. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/mixins/ModelModificationRestriction.py +0 -0
  192. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/mixins/__init__.py +0 -0
  193. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models/CalculationModel.py +0 -0
  194. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models/HTMLReport.py +0 -0
  195. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models/LexModel.py +0 -0
  196. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models/Process.py +0 -0
  197. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models/__init__.py +0 -0
  198. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/models.py +0 -0
  199. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/Bitemporal.py +0 -0
  200. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/MetaHistory.py +0 -0
  201. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/StandardHistory.py +0 -0
  202. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/__init__.py +0 -0
  203. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/activation_applier.py +0 -0
  204. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/bitemporal_signals.py +0 -0
  205. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/services/signal_registry.py +0 -0
  206. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/signals/ActiveCalculationStateStore.py +0 -0
  207. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/signals/CalculationSignals.py +0 -0
  208. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/signals/ModelMutationSignal.py +0 -0
  209. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/signals/__init__.py +0 -0
  210. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/sql/bitemporal_activation.sql +0 -0
  211. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tasks/CeleryTaskDispatcher.py +0 -0
  212. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tasks/__init__.py +0 -0
  213. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tests/__init__.py +0 -0
  214. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tests/_bitemporal_test_case.py +0 -0
  215. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tests/bitemporal_test_settings.py +0 -0
  216. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tests/check_schema.py +0 -0
  217. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/tests/test_calculation_history_transitions.py +0 -0
  218. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/transactions/__init__.py +0 -0
  219. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/transactions/transactions.py +0 -0
  220. {lex_app-2.3.3 → lex_app-2.3.4}/lex/core/views.py +0 -0
  221. {lex_app-2.3.3 → lex_app-2.3.4}/lex/extract_legacy_logs.py +0 -0
  222. {lex_app-2.3.3 → lex_app-2.3.4}/lex/fix_v1_migration.py +0 -0
  223. {lex_app-2.3.3 → lex_app-2.3.4}/lex/full_migration_workflow.py +0 -0
  224. {lex_app-2.3.3 → lex_app-2.3.4}/lex/helpers/__init__.py +0 -0
  225. {lex_app-2.3.3 → lex_app-2.3.4}/lex/helpers/cache_tables.py +0 -0
  226. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/__init__.py +0 -0
  227. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/__init__.py +0 -0
  228. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/legacy_calculation_id_admin.py +0 -0
  229. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/legacy_calculation_log_admin.py +0 -0
  230. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/legacy_log_admin.py +0 -0
  231. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/legacy_user_change_log_admin.py +0 -0
  232. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/admin/read_only_admin.py +0 -0
  233. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/apps.py +0 -0
  234. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/migrations/0001_initial.py +0 -0
  235. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/migrations/0002_alter_legacycalculationid_options_and_more.py +0 -0
  236. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/migrations/0003_legacylog.py +0 -0
  237. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/migrations/__init__.py +0 -0
  238. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/models/__init__.py +0 -0
  239. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/models/legacy_calculation_id.py +0 -0
  240. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/models/legacy_calculation_log.py +0 -0
  241. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/models/legacy_log.py +0 -0
  242. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/models/legacy_user_change_log.py +0 -0
  243. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/serializers/__init__.py +0 -0
  244. {lex_app-2.3.3 → lex_app-2.3.4}/lex/legacy_data/serializers/legacy_data_serializers.py +0 -0
  245. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/__init__.py +0 -0
  246. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/admin.py +0 -0
  247. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/apps.py +0 -0
  248. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/asgi.py +0 -0
  249. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery.py +0 -0
  250. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/__init__.py +0 -0
  251. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/entrypoint.py +0 -0
  252. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/exceptions.py +0 -0
  253. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/heartbeat.py +0 -0
  254. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/redis_keys.py +0 -0
  255. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/registry.py +0 -0
  256. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_recovery/supervisor.py +0 -0
  257. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/celery_tasks.py +0 -0
  258. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/design_system/__init__.py +0 -0
  259. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/design_system/lex_tokens.py +0 -0
  260. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/fast_health.py +0 -0
  261. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/keycloak_exclusions.py +0 -0
  262. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/__init__.py +0 -0
  263. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/Init2.py +0 -0
  264. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/__init__.py +0 -0
  265. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/backfill_audit_logging.py +0 -0
  266. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/backfill_bitemporal_history.py +0 -0
  267. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/bootstrap_keycloak.py +0 -0
  268. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/capture_db_tables.py +0 -0
  269. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/capture_migration_state.py +0 -0
  270. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/create_db.py +0 -0
  271. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/detect_model_changes.py +0 -0
  272. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/full_migration_workflow.py +0 -0
  273. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/generate_legacy_freeze_manifest.py +0 -0
  274. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/init.py +0 -0
  275. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/lex_migrate.py +0 -0
  276. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/normalize_is_calculated.py +0 -0
  277. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/rebase_incident_datetimes.py +0 -0
  278. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/rollback_migration_state.py +0 -0
  279. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/run_recovery_supervisor.py +0 -0
  280. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/sync_keycloak.py +0 -0
  281. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/__init__.py +0 -0
  282. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_backfill_audit_logging_command.py +0 -0
  283. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_backfill_audit_logging_payload.py +0 -0
  284. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_bootstrap_callback_server.py +0 -0
  285. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_init_command.py +0 -0
  286. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_lex_pytest_report_flags.py +0 -0
  287. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/management/commands/tests/test_migration_workflow_commands.py +0 -0
  288. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/migrations/0001_initial.py +0 -0
  289. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/migrations/0002_delete_asoftestmodel_and_more.py +0 -0
  290. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/migrations/__init__.py +0 -0
  291. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/models.py +0 -0
  292. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/Reflex.py +0 -0
  293. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/__init__.py +0 -0
  294. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/app.py +0 -0
  295. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/auth.py +0 -0
  296. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/dashboards.py +0 -0
  297. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/django_orm.py +0 -0
  298. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/examples/__init__.py +0 -0
  299. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/reflex/examples/_reflex_structure.py +0 -0
  300. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/routing.py +0 -0
  301. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/runtime_health.py +0 -0
  302. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/settings.py +0 -0
  303. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/simple_history_config.py +0 -0
  304. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/Streamlit.py +0 -0
  305. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/__init__.py +0 -0
  306. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/_lex_view_component/__init__.py +0 -0
  307. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/_lex_view_component/frontend/index.html +0 -0
  308. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/_widget_host_component/__init__.py +0 -0
  309. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/_widget_host_component/frontend/index.html +0 -0
  310. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/eager_frames.py +0 -0
  311. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/embed.py +0 -0
  312. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/examples/__init__.py +0 -0
  313. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/examples/_streamlit_structure.py +0 -0
  314. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/quackback.py +0 -0
  315. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/sidebar.py +0 -0
  316. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/theme/__init__.py +0 -0
  317. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/theme/config_writer.py +0 -0
  318. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/theme/mapping.py +0 -0
  319. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/theme/tokens.py +0 -0
  320. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/widgets/__init__.py +0 -0
  321. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/widgets/host.py +0 -0
  322. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/widgets/keys.py +0 -0
  323. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/streamlit/widgets/spec.py +0 -0
  324. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/tests/ProcessAdminTestCase.py +0 -0
  325. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/tests/__init__.py +0 -0
  326. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/tests/create_db.py +0 -0
  327. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/urls.py +0 -0
  328. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/utils.py +0 -0
  329. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/views.py +0 -0
  330. {lex_app-2.3.3 → lex_app-2.3.4}/lex/lex_app/wsgi.py +0 -0
  331. {lex_app-2.3.3 → lex_app-2.3.4}/lex/manage.py +0 -0
  332. {lex_app-2.3.3 → lex_app-2.3.4}/lex/mcp_server/tools/embed.py +0 -0
  333. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/__init__.py +0 -0
  334. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/admin.py +0 -0
  335. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/apps.py +0 -0
  336. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/migrations/__init__.py +0 -0
  337. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/ModelCollection.py +0 -0
  338. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/ModelContainer.py +0 -0
  339. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/ModelProcessAdmin.py +0 -0
  340. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/__init__.py +0 -0
  341. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/constants.py +0 -0
  342. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models/utils.py +0 -0
  343. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/models.py +0 -0
  344. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/settings/__init__.py +0 -0
  345. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/settings/process_admin_settings.py +0 -0
  346. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/sites/__init__.py +0 -0
  347. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/sites/process_admin_site.py +0 -0
  348. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/tests/__init__.py +0 -0
  349. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/tests/django_test_settings.py +0 -0
  350. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/tests/urls.py +0 -0
  351. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/__init__.py +0 -0
  352. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/bitemporal_sync.py +0 -0
  353. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/local_scheduler.py +0 -0
  354. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/model_registration.py +0 -0
  355. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/model_structure.py +0 -0
  356. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/utils/model_structure_builder.py +0 -0
  357. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/views/__init__.py +0 -0
  358. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/views/model_relation_views.py +0 -0
  359. {lex_app-2.3.3 → lex_app-2.3.4}/lex/process_admin/views.py +0 -0
  360. {lex_app-2.3.3 → lex_app-2.3.4}/lex/proxy.py +0 -0
  361. {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/admin.py +0 -0
  362. {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/apps.py +0 -0
  363. {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/migrations/__init__.py +0 -0
  364. {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/models.py +0 -0
  365. {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/tests.py +0 -0
  366. {lex_app-2.3.3 → lex_app-2.3.4}/lex/react/views.py +0 -0
  367. {lex_app-2.3.3 → lex_app-2.3.4}/lex/reflex_app.py +0 -0
  368. {lex_app-2.3.3 → lex_app-2.3.4}/lex/restore_legacy_logs.py +0 -0
  369. {lex_app-2.3.3 → lex_app-2.3.4}/lex/runtime_config.py +0 -0
  370. {lex_app-2.3.3 → lex_app-2.3.4}/lex/sanitize_v2_migrations.py +0 -0
  371. {lex_app-2.3.3 → lex_app-2.3.4}/lex/streamlit_app.py +0 -0
  372. {lex_app-2.3.3 → lex_app-2.3.4}/lex/streamlit_theme.py +0 -0
  373. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/__init__.py +0 -0
  374. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/apps.py +0 -0
  375. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/lex_config.py +0 -0
  376. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/__init__.py +0 -0
  377. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/_authenticated_e2e_test_case.py +0 -0
  378. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/_e2e_test_case.py +0 -0
  379. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/__init__.py +0 -0
  380. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/models.py +0 -0
  381. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10a_crud_endpoints.py +0 -0
  382. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10b_history_endpoint.py +0 -0
  383. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10c_many_endpoint.py +0 -0
  384. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10d_reflex_search_exclusion.py +0 -0
  385. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10e_schema_introspection.py +0 -0
  386. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10f_global_search.py +0 -0
  387. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10g_one_endpoint_lifecycle.py +0 -0
  388. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10h_lex_api_sdk.py +0 -0
  389. {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
  390. {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
  391. {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
  392. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10l_file_download_view.py +0 -0
  393. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10m_calculation_log_tree.py +0 -0
  394. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/api_layer/test_10n_active_calculations_endpoint.py +0 -0
  395. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/__init__.py +0 -0
  396. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/extra_models.py +0 -0
  397. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/models.py +0 -0
  398. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6a_api_audit.py +0 -0
  399. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6b_calculation_audit.py +0 -0
  400. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6c_actor_resolution.py +0 -0
  401. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6d_payload_and_gfk.py +0 -0
  402. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6e_bulk_audit.py +0 -0
  403. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6f_resilience.py +0 -0
  404. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6g_immutability.py +0 -0
  405. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6h_cache_manager.py +0 -0
  406. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6i_calculation_via_api.py +0 -0
  407. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6j_audit_utils.py +0 -0
  408. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6k_model_contracts.py +0 -0
  409. {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
  410. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6m_lexlogger_and_websocket.py +0 -0
  411. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6n_audit_log_serializers.py +0 -0
  412. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/audit_logging/test_6o_bulk_audit_normalize.py +0 -0
  413. {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
  414. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/__init__.py +0 -0
  415. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/models.py +0 -0
  416. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15a_builder_api.py +0 -0
  417. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15b_child_node_creation.py +0 -0
  418. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15c_silent_and_mixed.py +0 -0
  419. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15d_three_level_chain.py +0 -0
  420. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15e_combinatorial_pipeline.py +0 -0
  421. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15f_save_boundary.py +0 -0
  422. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15g_heading_context.py +0 -0
  423. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculation_logging/test_15h_pdf_export.py +0 -0
  424. {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
  425. {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
  426. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/__init__.py +0 -0
  427. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/models.py +0 -0
  428. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7a_atomic.py +0 -0
  429. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7b_non_atomic.py +0 -0
  430. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7c_hierarchy.py +0 -0
  431. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7d_state_guards.py +0 -0
  432. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7e_persistence_internals.py +0 -0
  433. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7f_combination_engine.py +0 -0
  434. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7g_create_pipeline.py +0 -0
  435. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7h_celery_dispatch.py +0 -0
  436. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7i_atomicity_matrix.py +0 -0
  437. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7j_three_level_matrix.py +0 -0
  438. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7k_exceptions_restrictions_xlsx.py +0 -0
  439. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7l_recalc_queue.py +0 -0
  440. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7m_calc_signals.py +0 -0
  441. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7n_cancellation.py +0 -0
  442. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7o_fk_violation_abort.py +0 -0
  443. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7p_streaming_expansion.py +0 -0
  444. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7q_worker_default_dispatch.py +0 -0
  445. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/calculations/test_7s_calculation_audit_columns.py +0 -0
  446. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/__init__.py +0 -0
  447. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/models.py +0 -0
  448. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8a_sync_fallback.py +0 -0
  449. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8aa_postrun_shutdown_guard.py +0 -0
  450. {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
  451. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8ac_sync_fallback_idempotent.py +0 -0
  452. {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
  453. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8b_dispatch_context.py +0 -0
  454. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8c_calculation_audit_columns.py +0 -0
  455. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8g_task_infrastructure.py +0 -0
  456. {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
  457. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8i_scope_contracts.py +0 -0
  458. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8j_task_bodies.py +0 -0
  459. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8k_redis_broker_integration.py +0 -0
  460. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8l_celery_dispatcher.py +0 -0
  461. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8m_undecorated_dispatch.py +0 -0
  462. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8u_cancel_revoke.py +0 -0
  463. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8v_cluster_cascade_cancel.py +0 -0
  464. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8w_recovery_terminal_guard.py +0 -0
  465. {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
  466. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/celery_async/test_8y_beat_recovery_driver.py +0 -0
  467. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/__init__.py +0 -0
  468. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/models.py +0 -0
  469. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2a_create.py +0 -0
  470. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2b_read.py +0 -0
  471. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2c_update.py +0 -0
  472. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2d_delete.py +0 -0
  473. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2e_bulk.py +0 -0
  474. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2f_missing_scenarios.py +0 -0
  475. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2f_ordering.py +0 -0
  476. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2g_filtering.py +0 -0
  477. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2i_cancel_endpoint.py +0 -0
  478. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/crud_api/test_2j_instance_api_key.py +0 -0
  479. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/design_system/__init__.py +0 -0
  480. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/design_system/test_lex_tokens.py +0 -0
  481. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/__init__.py +0 -0
  482. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/models.py +0 -0
  483. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13a_legacy_export.py +0 -0
  484. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13b_ag_grid_export.py +0 -0
  485. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13c_grouped_selected.py +0 -0
  486. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13d_auth_edge.py +0 -0
  487. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13e_streaming_fast_export.py +0 -0
  488. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13f_export_timezone.py +0 -0
  489. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13g_xlsx_field_timezone.py +0 -0
  490. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/exports/test_13h_xlsx_field_binding.py +0 -0
  491. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/fixtures/__init__.py +0 -0
  492. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/gate_selftest/__init__.py +0 -0
  493. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/gate_selftest/test_gate_selftest.py +0 -0
  494. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/__init__.py +0 -0
  495. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/models.py +0 -0
  496. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5_11_fallback_snapshot.py +0 -0
  497. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5a_basic_history.py +0 -0
  498. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5b_calculation_history.py +0 -0
  499. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5c_history_api.py +0 -0
  500. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5g_valid_to_chaining.py +0 -0
  501. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5h_suppression_toolkit.py +0 -0
  502. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5i_api_contract.py +0 -0
  503. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5j_snapshot_actor.py +0 -0
  504. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5k_metahistory.py +0 -0
  505. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5l_future_valid_from.py +0 -0
  506. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5m_asof_edit_time.py +0 -0
  507. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/history/test_5o_activation_applier.py +0 -0
  508. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/__init__.py +0 -0
  509. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/initial_data/__init__.py +0 -0
  510. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/initial_data/test_1c_initial_data.py +0 -0
  511. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/initial_data/test_1f_seed_idempotency.py +0 -0
  512. {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
  513. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/models.py +0 -0
  514. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1a_lex_setup.py +0 -0
  515. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1aa_embedded_token_renewal.py +0 -0
  516. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ab_ignored_role_policy_cleanup.py +0 -0
  517. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ac_streamlit_session_survival.py +0 -0
  518. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ac_widget_host_manifest.py +0 -0
  519. {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
  520. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ad_streamlit_theme_follower.py +0 -0
  521. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ae_streamlit_theme.py +0 -0
  522. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1af_theme_switch_preserves_brand.py +0 -0
  523. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ag_spa_asset_caching.py +0 -0
  524. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ah_metadata_cache_headers.py +0 -0
  525. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ai_eager_component_frames.py +0 -0
  526. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1aj_streamlit_sidebar_chrome.py +0 -0
  527. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ak_widget_keys_and_flow.py +0 -0
  528. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1al_example_dashboard.py +0 -0
  529. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1am_quackback_launcher.py +0 -0
  530. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1an_proxy_http2_safe_headers.py +0 -0
  531. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ao_flow_composable_steps.py +0 -0
  532. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ao_frontend_resolution.py +0 -0
  533. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ap_reflex_cli.py +0 -0
  534. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1aq_reflex_dashboards.py +0 -0
  535. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1ar_reflex_automatic_sign_in.py +0 -0
  536. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1as_reflex_token_cookie_compression.py +0 -0
  537. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1b_default_authz.py +0 -0
  538. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1b_lex_init.py +0 -0
  539. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1d_init_helpers.py +0 -0
  540. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1e_keycloak_sync_manager.py +0 -0
  541. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1f_keycloak_drift.py +0 -0
  542. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1g_sync_manager_admin.py +0 -0
  543. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1h_bootstrap_flow.py +0 -0
  544. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1i_rebase_incident_datetimes.py +0 -0
  545. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1j_client_preflight.py +0 -0
  546. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1k_client_preflight_integration.py +0 -0
  547. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1l_full_pipeline_integration.py +0 -0
  548. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1m_cli_commands.py +0 -0
  549. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1n_init_helper_paths.py +0 -0
  550. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1o_lazy_imports_and_helpers.py +0 -0
  551. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1p_settings_urls_views.py +0 -0
  552. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1q_migration_files_complete.py +0 -0
  553. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1r_fetched_datetime_zone.py +0 -0
  554. {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
  555. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1t_disable_server_side_cursors.py +0 -0
  556. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1u_fast_health_asgi.py +0 -0
  557. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1v_scheduler_tz_invariant.py +0 -0
  558. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1w_recovery_default_deployment_target.py +0 -0
  559. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1x_runtime_health_metadata.py +0 -0
  560. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1y_ide_run_configs.py +0 -0
  561. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/init/test_1z_proxy_iframe_breakout.py +0 -0
  562. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/__init__.py +0 -0
  563. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/models.py +0 -0
  564. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/test_journey_a_invoice_lifecycle.py +0 -0
  565. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/test_journey_b_portfolio_calculation.py +0 -0
  566. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/test_journey_c_role_aware_visibility.py +0 -0
  567. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/test_journey_d_audit_trail.py +0 -0
  568. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/journeys/test_journey_e_validation_gate.py +0 -0
  569. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/__init__.py +0 -0
  570. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/models.py +0 -0
  571. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4a_field_level.py +0 -0
  572. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4b_action_level.py +0 -0
  573. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4c_keycloak_fallback.py +0 -0
  574. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4d_user_context.py +0 -0
  575. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4e_filter_backend.py +0 -0
  576. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4f_serializer_mixin.py +0 -0
  577. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4g_user_permissions_api.py +0 -0
  578. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4h_full_deny_matrix.py +0 -0
  579. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4i_permission_helpers.py +0 -0
  580. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4j_filter_backends.py +0 -0
  581. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4m_api_key_middleware.py +0 -0
  582. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/permissions/test_4n_reflex_permissions.py +0 -0
  583. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/__init__.py +0 -0
  584. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/models.py +0 -0
  585. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/test_14a_query_params.py +0 -0
  586. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/test_14b_ag_post_filter_model.py +0 -0
  587. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/test_14c_ag_post_group_pivot.py +0 -0
  588. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/test_14e_secondary_branches.py +0 -0
  589. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/queries/test_14h_list_query_paths.py +0 -0
  590. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/__init__.py +0 -0
  591. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/models.py +0 -0
  592. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12a_history_meta_scopes.py +0 -0
  593. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12a_read_contract.py +0 -0
  594. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12b_type_roundtrip.py +0 -0
  595. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12c_list_and_many.py +0 -0
  596. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12d_audit_log_payload.py +0 -0
  597. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12e_factory.py +0 -0
  598. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12f_write_paths.py +0 -0
  599. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12g_datetime_tz_ambiguity.py +0 -0
  600. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12h_filefield_clear.py +0 -0
  601. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12i_fk_display_names.py +0 -0
  602. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12j_datetime_roundtrip_convention.py +0 -0
  603. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/serializers/test_12k_sensitive_field_denylist.py +0 -0
  604. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/__init__.py +0 -0
  605. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/models.py +0 -0
  606. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9_7_suppression_guards.py +0 -0
  607. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9a_state_and_broadcast.py +0 -0
  608. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9c_cache_cleanup.py +0 -0
  609. {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
  610. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9e_model_mutation_broadcast.py +0 -0
  611. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/signals_ws/test_9f_core_consumers.py +0 -0
  612. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/__init__.py +0 -0
  613. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/_stress_test_case.py +0 -0
  614. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/models.py +0 -0
  615. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11a_seed_baseline.py +0 -0
  616. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11b_list.py +0 -0
  617. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11c_export.py +0 -0
  618. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11d_period_calc.py +0 -0
  619. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11e_bulk_api.py +0 -0
  620. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11f_growth_and_scale.py +0 -0
  621. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11g_fk_heavy_export.py +0 -0
  622. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11h_calc_log_overhead.py +0 -0
  623. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/stress/test_11i_save_fingerprint.py +0 -0
  624. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/__init__.py +0 -0
  625. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/models.py +0 -0
  626. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3a_pre_validation.py +0 -0
  627. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3b_post_validation.py +0 -0
  628. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3c_hook_ordering.py +0 -0
  629. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3d_recursion_guard.py +0 -0
  630. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3e_snapshot_lifecycle.py +0 -0
  631. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3f_lean_initial_state.py +0 -0
  632. {lex_app-2.3.3 → lex_app-2.3.4}/lex/test_project/tests/validation_hooks/test_3g_aware_datetime_assignment.py +0 -0
  633. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/e2e/__init__.py +0 -0
  634. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/e2e/_authenticated_e2e_test_case.py +0 -0
  635. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/e2e/_e2e_test_case.py +0 -0
  636. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/calculation/test_calculated_model_mixin.py +0 -0
  637. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/calculation/test_calculation_wait_contexts.py +0 -0
  638. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_ai_asset_mode_sync.py +0 -0
  639. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_ai_update_bootstrap.py +0 -0
  640. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_ai_windows_parity.py +0 -0
  641. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_celery_recovery.py +0 -0
  642. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_mcp_server_sdk_compat.py +0 -0
  643. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tests/unit/infra/test_worker_self_termination.py +0 -0
  644. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/__init__.py +0 -0
  645. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/ai_dashboard.py +0 -0
  646. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/ai_faq.py +0 -0
  647. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/ai_issue_report.py +0 -0
  648. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/ai_worktree.py +0 -0
  649. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/django_bootstrap.py +0 -0
  650. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/mcp_mode_invoke.py +0 -0
  651. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/project_root.py +0 -0
  652. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/setup_with_ai.py +0 -0
  653. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/test_groups.py +0 -0
  654. {lex_app-2.3.3 → lex_app-2.3.4}/lex/tools/verify_ai_assets.py +0 -0
  655. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/__init__.py +0 -0
  656. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/admin.py +0 -0
  657. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/apps.py +0 -0
  658. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/channel_layer.py +0 -0
  659. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/config/__init__.py +0 -0
  660. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/config/generic_app_config.py +0 -0
  661. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/decorators/__init__.py +0 -0
  662. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/decorators/singleton.py +0 -0
  663. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/import_system/__init__.py +0 -0
  664. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/import_system/import_utils.py +0 -0
  665. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/import_system/model_loader.py +0 -0
  666. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/import_system/module_finder.py +0 -0
  667. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/migrations/__init__.py +0 -0
  668. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/models.py +0 -0
  669. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/storage/__init__.py +0 -0
  670. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/storage/custom_storage.py +0 -0
  671. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/utils/__init__.py +0 -0
  672. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/utils/gcs_utils.py +0 -0
  673. {lex_app-2.3.3 → lex_app-2.3.4}/lex/utilities/views.py +0 -0
  674. {lex_app-2.3.3 → lex_app-2.3.4}/lex_app.egg-info/SOURCES.txt +0 -0
  675. {lex_app-2.3.3 → lex_app-2.3.4}/lex_app.egg-info/dependency_links.txt +0 -0
  676. {lex_app-2.3.3 → lex_app-2.3.4}/lex_app.egg-info/entry_points.txt +0 -0
  677. {lex_app-2.3.3 → lex_app-2.3.4}/lex_app.egg-info/requires.txt +0 -0
  678. {lex_app-2.3.3 → lex_app-2.3.4}/lex_app.egg-info/top_level.txt +0 -0
  679. {lex_app-2.3.3 → lex_app-2.3.4}/migrations_logic/__init__.py +0 -0
  680. {lex_app-2.3.3 → lex_app-2.3.4}/migrations_logic/fix_migrations.py +0 -0
  681. {lex_app-2.3.3 → lex_app-2.3.4}/pyproject.toml +0 -0
  682. {lex_app-2.3.3 → lex_app-2.3.4}/requirements.txt +0 -0
  683. {lex_app-2.3.3 → lex_app-2.3.4}/setup.cfg +0 -0
  684. {lex_app-2.3.3 → lex_app-2.3.4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lex-app
3
- Version: 2.3.3
3
+ Version: 2.3.4
4
4
  Summary: A Python / Django library to create business applications easily with complex logic
5
5
  Author-email: Melih Sünbül <m.sunbul@excellence-cloud.com>
6
6
  License-Expression: MIT
@@ -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
- """Hand Reflex Enterprise's single-port proxy the Starlette app it is written for.
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 registers that proxy as a lifespan task whose
90
- parameter is named ``app``, and Reflex 0.9.12 passes a task the *Reflex*
91
- app under that name, the Starlette app only as ``starlette_app``. The proxy
92
- then finds nothing to mount on, logs "Unable to find the base Starlette
93
- app", and every page 404s.
94
-
95
- Reflex Enterprise imports the proxy when it builds the app, after
96
- ``rxconfig.py`` has run, so replacing the module's function is enough. Only
97
- a proxy taking ``app`` and not ``starlette_app`` is replaced; the rest are
98
- left alone -- one already asking for ``starlette_app``, the stand-in Reflex
99
- Enterprise defines when asgiproxy is missing, and this replacement itself.
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
- parameters = inspect.signature(upstream).parameters
108
- if "app" not in parameters or "starlette_app" in parameters:
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(starlette_app):
113
- async with upstream(starlette_app):
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
 
@@ -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``. lex-app hands it the Starlette app, so:
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, the backend's port answers the backend's routes
20
- itself and every other path, query string included, from the frontend server;
21
- * repairing again changes nothing, and a proxy that already takes the
22
- Starlette app -- a fixed Reflex Enterprise -- or names no ``app`` parameter is
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
- " ','.join(inspect.signature(proxy.proxy_middleware).parameters))\n"
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 takes ``starlette_app``, the Starlette app Reflex passes.
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, parameters = result.stdout.strip().splitlines()[-1].split()
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
- and Reflex Enterprise's proxy as it ships, once rxconfig.py has
184
- built lex-app's sign-in plugin.
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 for the backend's
187
- Starlette app; and a browser asks the backend's port for
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
- config = rxe.Config(
199
- app_name="single_port_probe", use_single_port=True,
200
- frontend_port=frontend_port, backend_port=frontend_port + 1,
201
- )
202
- reflex_app = LifespanMixin()
203
- with patch("reflex_enterprise.app.get_config", return_value=config), \
204
- patch("reflex_enterprise.proxy.get_config", return_value=config):
205
- AppEnterprise._verify_and_setup_proxy(reflex_app)
206
- self.assertEqual(
207
- len(reflex_app.get_lifespan_tasks()), 1, "single-port mode registers its proxy as a lifespan task",
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
- backend = Starlette(
210
- routes=[Route("/ping", lambda request: PlainTextResponse("pong"))],
211
- lifespan=reflex_app._run_lifespan_tasks,
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
- with TestClient(backend) as browser:
214
- ping = browser.get("/ping")
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 only to a proxy that needs it.
227
- Given: the proxy as it ships, already repaired once; and proxies that
228
- need no repair -- one taking ``starlette_app`` as a fixed Reflex
229
- Enterprise would, one taking both names, and the stand-in Reflex
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.assertEqual(_parameters(repaired), ["starlette_app"], "the first build repairs the proxy")
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
- for name, upstream in {"fixed": fixed, "both": both, "stand-in": stand_in}.items():
256
- with self.subTest(proxy=name), patch.object(proxy, "proxy_middleware", upstream):
257
- lex_auth_plugin()
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")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lex-app
3
- Version: 2.3.3
3
+ Version: 2.3.4
4
4
  Summary: A Python / Django library to create business applications easily with complex logic
5
5
  Author-email: Melih Sünbül <m.sunbul@excellence-cloud.com>
6
6
  License-Expression: MIT
@@ -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