databricks-tellr-app 0.4.3.dev40__tar.gz → 0.4.3.dev42__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.dev40 → databricks_tellr_app-0.4.3.dev42}/PKG-INFO +1 -1
  2. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/databricks_tellr_app.egg-info/PKG-INFO +1 -1
  3. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/pyproject.toml +1 -1
  4. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/main.py +2 -19
  5. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/export.py +8 -2
  6. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/services/export_job_queue.py +0 -31
  7. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/converter_jail/jail.py +5 -0
  8. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/html_to_google_slides.py +9 -0
  9. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/README.md +0 -0
  10. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/databricks_tellr_app/__init__.py +0 -0
  11. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/databricks_tellr_app/run.py +0 -0
  12. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/databricks_tellr_app.egg-info/SOURCES.txt +0 -0
  13. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/databricks_tellr_app.egg-info/dependency_links.txt +0 -0
  14. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/databricks_tellr_app.egg-info/requires.txt +0 -0
  15. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/databricks_tellr_app.egg-info/top_level.txt +0 -0
  16. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/setup.cfg +0 -0
  17. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/setup.py +0 -0
  18. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/__init__.py +0 -0
  19. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/__init__.py +0 -0
  20. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/_otel_bootstrap.py +0 -0
  21. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/fixtures/tour_demo_deck.json +0 -0
  22. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/mcp_auth.py +0 -0
  23. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/mcp_server.py +0 -0
  24. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/middleware/__init__.py +0 -0
  25. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/middleware/csrf.py +0 -0
  26. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/middleware/request_logging.py +0 -0
  27. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/middleware/security_headers.py +0 -0
  28. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/__init__.py +0 -0
  29. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/_authz.py +0 -0
  30. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/admin.py +0 -0
  31. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/admin_usage.py +0 -0
  32. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/agent_config.py +0 -0
  33. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/chat.py +0 -0
  34. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/deck_contributors.py +0 -0
  35. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/feedback.py +0 -0
  36. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/google_slides.py +0 -0
  37. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/images.py +0 -0
  38. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/local_version.py +0 -0
  39. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/profiles.py +0 -0
  40. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/sessions.py +0 -0
  41. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/settings/__init__.py +0 -0
  42. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/settings/contributors.py +0 -0
  43. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/settings/deck_prompts.py +0 -0
  44. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/settings/design_systems.py +0 -0
  45. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/settings/identities.py +0 -0
  46. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/settings/slide_styles.py +0 -0
  47. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/setup.py +0 -0
  48. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/slides.py +0 -0
  49. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/tools.py +0 -0
  50. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/tour.py +0 -0
  51. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/verification.py +0 -0
  52. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/routes/version.py +0 -0
  53. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/schemas/__init__.py +0 -0
  54. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/schemas/agent_config.py +0 -0
  55. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/schemas/feedback.py +0 -0
  56. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/schemas/requests.py +0 -0
  57. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/schemas/responses.py +0 -0
  58. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/schemas/settings/__init__.py +0 -0
  59. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/schemas/settings/requests.py +0 -0
  60. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/schemas/settings/responses.py +0 -0
  61. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/schemas/streaming.py +0 -0
  62. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/services/__init__.py +0 -0
  63. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/services/chat_service.py +0 -0
  64. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/services/feedback_service.py +0 -0
  65. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/services/job_queue.py +0 -0
  66. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/services/session_manager.py +0 -0
  67. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/services/session_naming.py +0 -0
  68. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/services/usage_events.py +0 -0
  69. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/services/usage_service.py +0 -0
  70. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/utils/__init__.py +0 -0
  71. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/api/utils/validation.py +0 -0
  72. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/__init__.py +0 -0
  73. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/config_loader.py +0 -0
  74. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/context_utils.py +0 -0
  75. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/database.py +0 -0
  76. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/databricks_client.py +0 -0
  77. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/defaults.py +0 -0
  78. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/encryption.py +0 -0
  79. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/init_default_profile.py +0 -0
  80. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/lakebase.py +0 -0
  81. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/migrate_profiles_to_agent_config.py +0 -0
  82. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/mlflow_agent_spans.py +0 -0
  83. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/mlflow_tracing.py +0 -0
  84. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/otel_logging.py +0 -0
  85. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/permission_context.py +0 -0
  86. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/prompt_modules.py +0 -0
  87. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/settings_db.py +0 -0
  88. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/core/user_context.py +0 -0
  89. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/__init__.py +0 -0
  90. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/__init__.py +0 -0
  91. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/deck_contributor.py +0 -0
  92. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/design_system.py +0 -0
  93. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/encryption_key.py +0 -0
  94. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/feedback.py +0 -0
  95. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/genie_space.py +0 -0
  96. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/google_global_credentials.py +0 -0
  97. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/google_oauth_token.py +0 -0
  98. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/identity.py +0 -0
  99. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/image.py +0 -0
  100. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/profile.py +0 -0
  101. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/profile_contributor.py +0 -0
  102. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/prompts.py +0 -0
  103. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/request_log.py +0 -0
  104. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/session.py +0 -0
  105. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/slide_deck_prompt.py +0 -0
  106. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/slide_style_library.py +0 -0
  107. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/usage_event.py +0 -0
  108. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/models/user_preference.py +0 -0
  109. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/database/types.py +0 -0
  110. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/domain/__init__.py +0 -0
  111. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/domain/slide.py +0 -0
  112. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/domain/slide_deck.py +0 -0
  113. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/__init__.py +0 -0
  114. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/agent.py +0 -0
  115. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/agent_factory.py +0 -0
  116. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/config_service.py +0 -0
  117. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/config_validator.py +0 -0
  118. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/converter_jail/__init__.py +0 -0
  119. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/converter_jail/ast_guard.py +0 -0
  120. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/converter_jail/codeprep.py +0 -0
  121. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/converter_jail/gslides_runner.py +0 -0
  122. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/converter_jail/pptx_runner.py +0 -0
  123. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/converter_jail/protocol.py +0 -0
  124. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/design_system_compiler.py +0 -0
  125. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/design_system_service.py +0 -0
  126. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/design_system_templates.py +0 -0
  127. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/drive_uploader.py +0 -0
  128. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/evaluation/__init__.py +0 -0
  129. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/evaluation/llm_judge.py +0 -0
  130. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/genie_service.py +0 -0
  131. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/google_slides_auth.py +0 -0
  132. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/google_slides_prompts_defaults.py +0 -0
  133. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/html_to_pptx.py +0 -0
  134. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/identity_provider.py +0 -0
  135. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/identity_providers/__init__.py +0 -0
  136. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/identity_providers/account_provider.py +0 -0
  137. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/identity_providers/local_provider.py +0 -0
  138. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/identity_providers/workspace_provider.py +0 -0
  139. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/image_service.py +0 -0
  140. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/image_tools.py +0 -0
  141. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/permission_service.py +0 -0
  142. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/pptx_from_html_huashu.py +0 -0
  143. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/pptx_from_records.py +0 -0
  144. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/pptx_prompts_defaults.py +0 -0
  145. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/profile_service.py +0 -0
  146. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/streaming_callback.py +0 -0
  147. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/tools/__init__.py +0 -0
  148. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/tools/agent_bricks_tool.py +0 -0
  149. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/tools/ds_asset_tool.py +0 -0
  150. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/tools/genie_tool.py +0 -0
  151. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/tools/mcp_tool.py +0 -0
  152. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/tools/model_endpoint_tool.py +0 -0
  153. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/tools/vector_tool.py +0 -0
  154. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/services/validator.py +0 -0
  155. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/__init__.py +0 -0
  156. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/css_utils.py +0 -0
  157. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/ds_asset_utils.py +0 -0
  158. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/error_handling.py +0 -0
  159. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/html_safety.py +0 -0
  160. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/html_utils.py +0 -0
  161. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/image_utils.py +0 -0
  162. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/js_validator.py +0 -0
  163. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/logging_config.py +0 -0
  164. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/pi_filter.py +0 -0
  165. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/slide_hash.py +0 -0
  166. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/src/utils/spotlight.py +0 -0
  167. {databricks_tellr_app-0.4.3.dev40 → databricks_tellr_app-0.4.3.dev42}/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.dev40
3
+ Version: 0.4.3.dev42
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.dev40
3
+ Version: 0.4.3.dev42
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.dev40"
7
+ version = "0.4.3.dev42"
8
8
  description = "Tellr application package for Databricks Apps"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -31,10 +31,7 @@ from src.api.routes.settings import (
31
31
  identities_router,
32
32
  slide_styles_router,
33
33
  )
34
- from src.api.services.export_job_queue import (
35
- start_export_cleanup_worker,
36
- start_export_worker,
37
- )
34
+ from src.api.services.export_job_queue import start_export_worker
38
35
  from src.api.services.job_queue import recover_stuck_requests, start_worker
39
36
  from src.core.database import (
40
37
  is_lakebase_environment,
@@ -52,7 +49,6 @@ IS_TESTING = ENVIRONMENT == "test"
52
49
  # Worker task references for cleanup
53
50
  _worker_task = None
54
51
  _export_worker_task = None
55
- _export_cleanup_task: asyncio.Task | None = None
56
52
  _cleanup_task = None
57
53
  _timeout_task = None
58
54
  _frontend_assets_stack: ExitStack | None = None
@@ -61,8 +57,7 @@ _frontend_assets_stack: ExitStack | None = None
61
57
  @asynccontextmanager
62
58
  async def lifespan(app: FastAPI):
63
59
  """Lifespan context manager for startup/shutdown events."""
64
- global _worker_task, _export_worker_task, _export_cleanup_task
65
- global _cleanup_task, _timeout_task, _frontend_assets_stack
60
+ global _worker_task, _export_worker_task, _cleanup_task, _timeout_task, _frontend_assets_stack
66
61
 
67
62
  # Startup
68
63
  logger.info(f"Starting AI Slide Generator API (environment: {ENVIRONMENT})")
@@ -129,10 +124,6 @@ async def lifespan(app: FastAPI):
129
124
  _export_worker_task = await start_export_worker()
130
125
  logger.info("Export job queue worker started")
131
126
 
132
- # Start the export job TTL cleanup worker
133
- _export_cleanup_task = await start_export_cleanup_worker()
134
- logger.info("Export job cleanup worker started")
135
-
136
127
  # Start the MCP job timeout sweeper
137
128
  from src.api.services.job_queue import mark_timed_out_jobs_loop
138
129
  _timeout_task = asyncio.create_task(mark_timed_out_jobs_loop())
@@ -178,14 +169,6 @@ async def lifespan(app: FastAPI):
178
169
  pass
179
170
  logger.info("Export job queue worker stopped")
180
171
 
181
- if _export_cleanup_task:
182
- _export_cleanup_task.cancel()
183
- try:
184
- await _export_cleanup_task
185
- except asyncio.CancelledError:
186
- pass
187
- logger.info("Export job cleanup worker stopped")
188
-
189
172
  if _cleanup_task:
190
173
  _cleanup_task.cancel()
191
174
  try:
@@ -807,11 +807,13 @@ async def poll_pptx_export(job_id: str):
807
807
 
808
808
 
809
809
  @router.get("/pptx/download/{job_id}")
810
- async def download_pptx_export(job_id: str):
810
+ async def download_pptx_export(job_id: str, background_tasks: BackgroundTasks):
811
811
  """Download completed PPTX export.
812
812
 
813
813
  Args:
814
814
  job_id: Job ID from start_pptx_export_async
815
+ background_tasks: FastAPI background tasks for cleanup
816
+
815
817
  Returns:
816
818
  FileResponse with PPTX file
817
819
 
@@ -822,6 +824,7 @@ async def download_pptx_export(job_id: str):
822
824
  _require_export_job_access(job_id)
823
825
  from src.api.services.export_job_queue import (
824
826
  get_export_job_status,
827
+ cleanup_export_job,
825
828
  )
826
829
 
827
830
  job = get_export_job_status(job_id)
@@ -849,6 +852,9 @@ async def download_pptx_export(job_id: str):
849
852
  extra={"job_id": job_id, "pptx_filename": filename},
850
853
  )
851
854
 
855
+ # Schedule cleanup after download
856
+ background_tasks.add_task(cleanup_export_job, job_id)
857
+
852
858
  return FileResponse(
853
859
  path=output_path,
854
860
  filename=filename,
@@ -1289,4 +1295,4 @@ async def export_pptx_huashu_from_html(request: ExportPPTXEditableRequest):
1289
1295
  content=pptx_bytes,
1290
1296
  media_type="application/vnd.openxmlformats-officedocument.presentationml.presentation",
1291
1297
  headers=headers,
1292
- )
1298
+ )
@@ -29,9 +29,6 @@ logger = logging.getLogger(__name__)
29
29
  # Only needs to work within a single process.
30
30
  export_queue: asyncio.Queue = asyncio.Queue()
31
31
 
32
- EXPORT_CLEANUP_INTERVAL_SECONDS = 300
33
- EXPORT_JOB_MAX_AGE_MINUTES = 30
34
-
35
32
 
36
33
  def generate_job_id() -> str:
37
34
  """Generate a unique job ID."""
@@ -513,34 +510,6 @@ async def start_export_worker() -> asyncio.Task:
513
510
  return asyncio.create_task(export_worker())
514
511
 
515
512
 
516
- async def export_cleanup_loop() -> None:
517
- """Periodically remove terminal export jobs that have exceeded their TTL."""
518
- logger.info("Export job cleanup worker started")
519
- while True:
520
- try:
521
- await asyncio.sleep(EXPORT_CLEANUP_INTERVAL_SECONDS)
522
- cleaned = await asyncio.to_thread(
523
- cleanup_stale_jobs,
524
- EXPORT_JOB_MAX_AGE_MINUTES,
525
- )
526
- if cleaned:
527
- logger.info("Cleaned up %d stale export job(s)", cleaned)
528
- except asyncio.CancelledError:
529
- logger.info("Export job cleanup worker shutting down")
530
- raise
531
- except Exception as e:
532
- logger.warning(
533
- "Export job cleanup iteration failed",
534
- exc_info=True,
535
- extra={"error": str(e)},
536
- )
537
-
538
-
539
- async def start_export_cleanup_worker() -> asyncio.Task:
540
- """Start the background export job cleanup task."""
541
- return asyncio.create_task(export_cleanup_loop())
542
-
543
-
544
513
  def cleanup_export_job(job_id: str) -> None:
545
514
  """Clean up job data and temporary files.
546
515
 
@@ -115,6 +115,11 @@ def netns_available() -> bool:
115
115
  except Exception:
116
116
  result = False
117
117
  _netns_cache = result
118
+ # NOTE (F-CR-30): in Databricks Apps `unshare --net` is typically
119
+ # unavailable. We deliberately do NOT fail closed: that would disable all
120
+ # PPTX/GSlides production conversion. Residual risk is accepted because the
121
+ # child env is whitelisted via build_scrubbed_env (no credentials) and the
122
+ # host-side AST import allowlist runs before every jail exec.
118
123
  if not result:
119
124
  logger.warning(
120
125
  "Network namespace unavailable — converter jail runs without netns. "
@@ -1355,6 +1355,15 @@ class HtmlToGoogleSlidesConverter:
1355
1355
  import shutil as _shutil
1356
1356
  import tempfile as _tempfile
1357
1357
  from src.services.converter_jail import protocol, run_gslides_jail
1358
+ from src.services.converter_jail.ast_guard import DisallowedImport, check_imports
1359
+
1360
+ # Same host-side AST allowlist as _build_gslides_job_dir (F-CR-30): a
1361
+ # rejected snippet is never written or exec'd; caller falls back.
1362
+ try:
1363
+ check_imports(code)
1364
+ except (DisallowedImport, SyntaxError) as exc:
1365
+ logger.warning("GSlides retry snippet rejected pre-jail: %s", exc)
1366
+ return None
1358
1367
 
1359
1368
  job_dir = _tempfile.mkdtemp(prefix="gslides_retry_")
1360
1369
  try: