databricks-tellr-app 0.4.3.dev7__tar.gz → 0.4.3.dev8__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 (167) hide show
  1. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/PKG-INFO +1 -1
  2. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/databricks_tellr_app.egg-info/PKG-INFO +1 -1
  3. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/pyproject.toml +1 -1
  4. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/database.py +53 -3
  5. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/README.md +0 -0
  6. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/databricks_tellr_app/__init__.py +0 -0
  7. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/databricks_tellr_app/run.py +0 -0
  8. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/databricks_tellr_app.egg-info/SOURCES.txt +0 -0
  9. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/databricks_tellr_app.egg-info/dependency_links.txt +0 -0
  10. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/databricks_tellr_app.egg-info/requires.txt +0 -0
  11. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/databricks_tellr_app.egg-info/top_level.txt +0 -0
  12. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/setup.cfg +0 -0
  13. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/setup.py +0 -0
  14. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/__init__.py +0 -0
  15. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/__init__.py +0 -0
  16. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/_otel_bootstrap.py +0 -0
  17. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/fixtures/tour_demo_deck.json +0 -0
  18. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/main.py +0 -0
  19. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/mcp_auth.py +0 -0
  20. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/mcp_server.py +0 -0
  21. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/middleware/__init__.py +0 -0
  22. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/middleware/csrf.py +0 -0
  23. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/middleware/request_logging.py +0 -0
  24. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/middleware/security_headers.py +0 -0
  25. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/__init__.py +0 -0
  26. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/_authz.py +0 -0
  27. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/admin.py +0 -0
  28. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/admin_usage.py +0 -0
  29. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/agent_config.py +0 -0
  30. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/chat.py +0 -0
  31. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/deck_contributors.py +0 -0
  32. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/export.py +0 -0
  33. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/feedback.py +0 -0
  34. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/google_slides.py +0 -0
  35. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/images.py +0 -0
  36. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/local_version.py +0 -0
  37. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/profiles.py +0 -0
  38. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/sessions.py +0 -0
  39. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/settings/__init__.py +0 -0
  40. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/settings/contributors.py +0 -0
  41. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/settings/deck_prompts.py +0 -0
  42. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/settings/design_systems.py +0 -0
  43. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/settings/identities.py +0 -0
  44. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/settings/slide_styles.py +0 -0
  45. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/setup.py +0 -0
  46. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/slides.py +0 -0
  47. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/tools.py +0 -0
  48. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/tour.py +0 -0
  49. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/verification.py +0 -0
  50. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/routes/version.py +0 -0
  51. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/schemas/__init__.py +0 -0
  52. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/schemas/agent_config.py +0 -0
  53. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/schemas/feedback.py +0 -0
  54. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/schemas/requests.py +0 -0
  55. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/schemas/responses.py +0 -0
  56. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/schemas/settings/__init__.py +0 -0
  57. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/schemas/settings/requests.py +0 -0
  58. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/schemas/settings/responses.py +0 -0
  59. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/schemas/streaming.py +0 -0
  60. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/services/__init__.py +0 -0
  61. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/services/chat_service.py +0 -0
  62. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/services/export_job_queue.py +0 -0
  63. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/services/feedback_service.py +0 -0
  64. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/services/job_queue.py +0 -0
  65. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/services/session_manager.py +0 -0
  66. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/services/session_naming.py +0 -0
  67. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/services/usage_events.py +0 -0
  68. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/services/usage_service.py +0 -0
  69. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/utils/__init__.py +0 -0
  70. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/api/utils/validation.py +0 -0
  71. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/__init__.py +0 -0
  72. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/config_loader.py +0 -0
  73. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/context_utils.py +0 -0
  74. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/databricks_client.py +0 -0
  75. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/defaults.py +0 -0
  76. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/encryption.py +0 -0
  77. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/init_default_profile.py +0 -0
  78. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/lakebase.py +0 -0
  79. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/migrate_profiles_to_agent_config.py +0 -0
  80. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/mlflow_agent_spans.py +0 -0
  81. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/mlflow_tracing.py +0 -0
  82. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/otel_logging.py +0 -0
  83. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/permission_context.py +0 -0
  84. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/prompt_modules.py +0 -0
  85. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/settings_db.py +0 -0
  86. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/core/user_context.py +0 -0
  87. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/__init__.py +0 -0
  88. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/__init__.py +0 -0
  89. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/deck_contributor.py +0 -0
  90. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/design_system.py +0 -0
  91. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/encryption_key.py +0 -0
  92. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/feedback.py +0 -0
  93. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/genie_space.py +0 -0
  94. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/google_global_credentials.py +0 -0
  95. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/google_oauth_token.py +0 -0
  96. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/identity.py +0 -0
  97. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/image.py +0 -0
  98. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/profile.py +0 -0
  99. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/profile_contributor.py +0 -0
  100. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/prompts.py +0 -0
  101. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/request_log.py +0 -0
  102. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/session.py +0 -0
  103. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/slide_deck_prompt.py +0 -0
  104. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/slide_style_library.py +0 -0
  105. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/usage_event.py +0 -0
  106. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/models/user_preference.py +0 -0
  107. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/database/types.py +0 -0
  108. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/domain/__init__.py +0 -0
  109. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/domain/slide.py +0 -0
  110. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/domain/slide_deck.py +0 -0
  111. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/__init__.py +0 -0
  112. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/agent.py +0 -0
  113. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/agent_factory.py +0 -0
  114. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/config_service.py +0 -0
  115. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/config_validator.py +0 -0
  116. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/converter_jail/__init__.py +0 -0
  117. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/converter_jail/ast_guard.py +0 -0
  118. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/converter_jail/codeprep.py +0 -0
  119. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/converter_jail/gslides_runner.py +0 -0
  120. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/converter_jail/jail.py +0 -0
  121. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/converter_jail/pptx_runner.py +0 -0
  122. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/converter_jail/protocol.py +0 -0
  123. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/design_system_compiler.py +0 -0
  124. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/design_system_service.py +0 -0
  125. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/design_system_templates.py +0 -0
  126. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/drive_uploader.py +0 -0
  127. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/evaluation/__init__.py +0 -0
  128. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/evaluation/llm_judge.py +0 -0
  129. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/genie_service.py +0 -0
  130. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/google_slides_auth.py +0 -0
  131. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/google_slides_prompts_defaults.py +0 -0
  132. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/html_to_google_slides.py +0 -0
  133. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/html_to_pptx.py +0 -0
  134. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/identity_provider.py +0 -0
  135. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/identity_providers/__init__.py +0 -0
  136. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/identity_providers/account_provider.py +0 -0
  137. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/identity_providers/local_provider.py +0 -0
  138. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/identity_providers/workspace_provider.py +0 -0
  139. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/image_service.py +0 -0
  140. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/image_tools.py +0 -0
  141. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/permission_service.py +0 -0
  142. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/pptx_from_html_huashu.py +0 -0
  143. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/pptx_from_records.py +0 -0
  144. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/pptx_prompts_defaults.py +0 -0
  145. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/profile_service.py +0 -0
  146. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/streaming_callback.py +0 -0
  147. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/tools/__init__.py +0 -0
  148. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/tools/agent_bricks_tool.py +0 -0
  149. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/tools/ds_asset_tool.py +0 -0
  150. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/tools/genie_tool.py +0 -0
  151. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/tools/mcp_tool.py +0 -0
  152. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/tools/model_endpoint_tool.py +0 -0
  153. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/tools/vector_tool.py +0 -0
  154. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/services/validator.py +0 -0
  155. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/__init__.py +0 -0
  156. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/css_utils.py +0 -0
  157. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/ds_asset_utils.py +0 -0
  158. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/error_handling.py +0 -0
  159. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/html_safety.py +0 -0
  160. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/html_utils.py +0 -0
  161. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/image_utils.py +0 -0
  162. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/js_validator.py +0 -0
  163. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/logging_config.py +0 -0
  164. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/pi_filter.py +0 -0
  165. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/slide_hash.py +0 -0
  166. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/spotlight.py +0 -0
  167. {databricks_tellr_app-0.4.3.dev7 → databricks_tellr_app-0.4.3.dev8}/src/utils/text_caps.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-tellr-app
3
- Version: 0.4.3.dev7
3
+ Version: 0.4.3.dev8
4
4
  Summary: Tellr application package for Databricks Apps
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-tellr-app
3
- Version: 0.4.3.dev7
3
+ Version: 0.4.3.dev8
4
4
  Summary: Tellr application package for Databricks Apps
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "databricks-tellr-app"
7
- version = "0.4.3.dev7"
7
+ version = "0.4.3.dev8"
8
8
  description = "Tellr application package for Databricks Apps"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1126,6 +1126,41 @@ _DECK_PLACEHOLDER_COLUMNS: tuple[tuple[str, str], ...] = (
1126
1126
  )
1127
1127
 
1128
1128
 
1129
+ def _deck_columns_have_int_placeholder(conn, live_targets, _qual, is_sqlite) -> bool:
1130
+ """Does any target column still hold an int-style ``{{image:<digits>}}`` placeholder?
1131
+
1132
+ The cheap gate that keeps :func:`_migrate_rewrite_deck_image_placeholders` a
1133
+ near no-op on every startup after its one-time rewrite. Read-only and
1134
+ short-circuiting (``LIMIT 1``), so it never takes a write lock and stops at the
1135
+ first match.
1136
+
1137
+ - PostgreSQL / Lakebase (the real target): a POSIX regex, ``{{image:`` + one or
1138
+ more digits + ``}}``. Precise — a token placeholder is
1139
+ ``{{image:<token>}}`` where the token is ``secrets.token_urlsafe(32)`` (43
1140
+ chars of ``[A-Za-z0-9_-]``), which cannot be all digits, so only genuine
1141
+ legacy int placeholders match.
1142
+ - SQLite (tests only): ``GLOB`` has no ``+`` quantifier, so the pattern matches
1143
+ ``{{image:`` followed by a single digit. Deliberately BROAD — it can also
1144
+ match a token placeholder that happens to start with a digit, which at worst
1145
+ makes the idempotent rewrite loop run when it strictly need not. It never
1146
+ misses a real int placeholder, so correctness is preserved; SQLite is not a
1147
+ deployment target and its data is tiny.
1148
+ """
1149
+ from sqlalchemy import text
1150
+
1151
+ for table_name, column_name in live_targets:
1152
+ q = _qual(table_name)
1153
+ if is_sqlite:
1154
+ stmt = text(f"SELECT 1 FROM {q} WHERE {column_name} GLOB :pat LIMIT 1")
1155
+ params = {"pat": "*{{image:[0-9]*"}
1156
+ else:
1157
+ stmt = text(f"SELECT 1 FROM {q} WHERE {column_name} ~ :pat LIMIT 1")
1158
+ params = {"pat": r"\{\{image:[0-9]+\}\}"}
1159
+ if conn.execute(stmt, params).first() is not None:
1160
+ return True
1161
+ return False
1162
+
1163
+
1129
1164
  def _migrate_rewrite_deck_image_placeholders(conn, inspector, schema, _qual, is_sqlite) -> None:
1130
1165
  """Rewrite stored deck ``{{image:<int-id>}}`` placeholders to ``{{image:<token>}}`` (SDR-4437 F-TM-7).
1131
1166
 
@@ -1151,9 +1186,14 @@ def _migrate_rewrite_deck_image_placeholders(conn, inspector, schema, _qual, is_
1151
1186
  per-match lookup into ``image_assets``, not a fixed template.
1152
1187
  - **Prefix-safe.** The literal ``{{image:5}}`` (closing braces included) never
1153
1188
  matches inside ``{{image:51}}``, so there is no id-prefix collision.
1154
- - **Idempotent + cheap.** The ``LIKE`` guard means once the int placeholders are
1155
- gone (first run) re-runs match nothing; unreferenced or hard-deleted ids are
1156
- simply never touched. Cost is O(images) set-based UPDATEs, fine at startup.
1189
+ - **Idempotent + cheap on repeat.** This runs on EVERY worker at EVERY startup,
1190
+ so a fast gate (:func:`_deck_columns_have_int_placeholder`) short-circuits the
1191
+ whole thing once no int-style placeholder remains turning steady-state boots
1192
+ into a few read-only ``LIMIT 1`` scans instead of O(images) unindexable
1193
+ leading-wildcard ``LIKE`` UPDATEs per column (that unconditional per-boot cost
1194
+ stalled real multi-worker startup on prod-scale data). The per-UPDATE ``LIKE``
1195
+ guard is the second layer: within a run it skips rows without this id, and
1196
+ unreferenced or hard-deleted ids are never touched.
1157
1197
  - **No jsonb cast.** Every target column (:data:`_DECK_PLACEHOLDER_COLUMNS`) is
1158
1198
  ``TEXT`` on both backends, so ``replace()`` applies directly. Tokens are
1159
1199
  ``[A-Za-z0-9_-]`` (JSON-safe), so text-level replacement inside a JSON blob
@@ -1187,6 +1227,16 @@ def _migrate_rewrite_deck_image_placeholders(conn, inspector, schema, _qual, is_
1187
1227
  if not live_targets:
1188
1228
  return
1189
1229
 
1230
+ # Fast idempotency gate. This migration runs on EVERY worker at EVERY startup
1231
+ # (init_db in the FastAPI lifespan), so once the one-time rewrite is done it must
1232
+ # NOT re-issue the per-image UPDATEs: each is an unindexable leading-wildcard
1233
+ # LIKE scan of a large-blob deck table, and O(images) of them per column across
1234
+ # several concurrent workers stalls startup on prod-scale data. If no target
1235
+ # column still holds an int-style {{image:<digits>}} placeholder, there is
1236
+ # nothing to do — return before touching the image rows or the deck tables.
1237
+ if not _deck_columns_have_int_placeholder(conn, live_targets, _qual, is_sqlite):
1238
+ return
1239
+
1190
1240
  rows = conn.execute(
1191
1241
  text(f"SELECT id, token FROM {_qual('image_assets')} WHERE token IS NOT NULL")
1192
1242
  ).fetchall()