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