databricks-tellr-app 0.3.11.dev4__tar.gz → 0.3.11.dev5__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 (149) hide show
  1. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/PKG-INFO +1 -1
  2. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/databricks_tellr_app.egg-info/PKG-INFO +1 -1
  3. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/pyproject.toml +1 -1
  4. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/services/chat_service.py +11 -2
  5. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/design_system.py +7 -2
  6. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/ds_asset_utils.py +24 -6
  7. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/README.md +0 -0
  8. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/databricks_tellr_app/__init__.py +0 -0
  9. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/databricks_tellr_app/run.py +0 -0
  10. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/databricks_tellr_app.egg-info/SOURCES.txt +0 -0
  11. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/databricks_tellr_app.egg-info/dependency_links.txt +0 -0
  12. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/databricks_tellr_app.egg-info/requires.txt +0 -0
  13. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/databricks_tellr_app.egg-info/top_level.txt +0 -0
  14. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/setup.cfg +0 -0
  15. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/setup.py +0 -0
  16. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/__init__.py +0 -0
  17. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/__init__.py +0 -0
  18. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/_otel_bootstrap.py +0 -0
  19. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/fixtures/tour_demo_deck.json +0 -0
  20. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/main.py +0 -0
  21. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/mcp_auth.py +0 -0
  22. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/mcp_server.py +0 -0
  23. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/middleware/__init__.py +0 -0
  24. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/middleware/request_logging.py +0 -0
  25. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/__init__.py +0 -0
  26. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/admin.py +0 -0
  27. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/agent_config.py +0 -0
  28. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/chat.py +0 -0
  29. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/deck_contributors.py +0 -0
  30. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/export.py +0 -0
  31. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/feedback.py +0 -0
  32. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/google_slides.py +0 -0
  33. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/images.py +0 -0
  34. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/local_version.py +0 -0
  35. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/profiles.py +0 -0
  36. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/sessions.py +0 -0
  37. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/settings/__init__.py +0 -0
  38. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/settings/contributors.py +0 -0
  39. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/settings/deck_prompts.py +0 -0
  40. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/settings/design_systems.py +0 -0
  41. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/settings/identities.py +0 -0
  42. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/settings/slide_styles.py +0 -0
  43. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/setup.py +0 -0
  44. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/slides.py +0 -0
  45. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/tools.py +0 -0
  46. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/tour.py +0 -0
  47. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/verification.py +0 -0
  48. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/routes/version.py +0 -0
  49. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/schemas/__init__.py +0 -0
  50. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/schemas/agent_config.py +0 -0
  51. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/schemas/feedback.py +0 -0
  52. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/schemas/requests.py +0 -0
  53. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/schemas/responses.py +0 -0
  54. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/schemas/settings/__init__.py +0 -0
  55. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/schemas/settings/requests.py +0 -0
  56. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/schemas/settings/responses.py +0 -0
  57. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/schemas/streaming.py +0 -0
  58. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/services/__init__.py +0 -0
  59. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/services/export_job_queue.py +0 -0
  60. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/services/feedback_service.py +0 -0
  61. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/services/job_queue.py +0 -0
  62. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/services/session_manager.py +0 -0
  63. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/services/session_naming.py +0 -0
  64. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/utils/__init__.py +0 -0
  65. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/api/utils/validation.py +0 -0
  66. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/__init__.py +0 -0
  67. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/config_loader.py +0 -0
  68. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/context_utils.py +0 -0
  69. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/database.py +0 -0
  70. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/databricks_client.py +0 -0
  71. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/defaults.py +0 -0
  72. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/encryption.py +0 -0
  73. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/init_default_profile.py +0 -0
  74. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/lakebase.py +0 -0
  75. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/migrate_profiles_to_agent_config.py +0 -0
  76. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/mlflow_agent_spans.py +0 -0
  77. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/mlflow_tracing.py +0 -0
  78. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/otel_logging.py +0 -0
  79. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/permission_context.py +0 -0
  80. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/prompt_modules.py +0 -0
  81. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/settings_db.py +0 -0
  82. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/core/user_context.py +0 -0
  83. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/__init__.py +0 -0
  84. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/__init__.py +0 -0
  85. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/deck_contributor.py +0 -0
  86. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/feedback.py +0 -0
  87. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/genie_space.py +0 -0
  88. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/google_global_credentials.py +0 -0
  89. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/google_oauth_token.py +0 -0
  90. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/identity.py +0 -0
  91. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/image.py +0 -0
  92. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/profile.py +0 -0
  93. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/profile_contributor.py +0 -0
  94. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/prompts.py +0 -0
  95. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/request_log.py +0 -0
  96. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/session.py +0 -0
  97. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/slide_deck_prompt.py +0 -0
  98. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/slide_style_library.py +0 -0
  99. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/database/models/user_preference.py +0 -0
  100. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/domain/__init__.py +0 -0
  101. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/domain/slide.py +0 -0
  102. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/domain/slide_deck.py +0 -0
  103. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/__init__.py +0 -0
  104. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/agent.py +0 -0
  105. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/agent_factory.py +0 -0
  106. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/config_service.py +0 -0
  107. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/config_validator.py +0 -0
  108. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/design_system_compiler.py +0 -0
  109. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/design_system_service.py +0 -0
  110. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/drive_uploader.py +0 -0
  111. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/evaluation/__init__.py +0 -0
  112. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/evaluation/llm_judge.py +0 -0
  113. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/genie_service.py +0 -0
  114. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/google_slides_auth.py +0 -0
  115. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/google_slides_prompts_defaults.py +0 -0
  116. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/html_to_google_slides.py +0 -0
  117. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/html_to_pptx.py +0 -0
  118. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/identity_provider.py +0 -0
  119. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/identity_providers/__init__.py +0 -0
  120. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/identity_providers/account_provider.py +0 -0
  121. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/identity_providers/local_provider.py +0 -0
  122. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/identity_providers/workspace_provider.py +0 -0
  123. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/image_service.py +0 -0
  124. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/image_tools.py +0 -0
  125. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/permission_service.py +0 -0
  126. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/pptx_from_html_huashu.py +0 -0
  127. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/pptx_from_records.py +0 -0
  128. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/pptx_prompts_defaults.py +0 -0
  129. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/profile_service.py +0 -0
  130. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/streaming_callback.py +0 -0
  131. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/tools/__init__.py +0 -0
  132. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/tools/agent_bricks_tool.py +0 -0
  133. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/tools/genie_tool.py +0 -0
  134. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/tools/mcp_tool.py +0 -0
  135. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/tools/model_endpoint_tool.py +0 -0
  136. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/tools/vector_tool.py +0 -0
  137. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/services/validator.py +0 -0
  138. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/__init__.py +0 -0
  139. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/css_utils.py +0 -0
  140. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/error_handling.py +0 -0
  141. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/html_safety.py +0 -0
  142. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/html_utils.py +0 -0
  143. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/image_utils.py +0 -0
  144. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/js_validator.py +0 -0
  145. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/logging_config.py +0 -0
  146. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/pi_filter.py +0 -0
  147. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/slide_hash.py +0 -0
  148. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/src/utils/spotlight.py +0 -0
  149. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev5}/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.3.11.dev4
3
+ Version: 0.3.11.dev5
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.3.11.dev4
3
+ Version: 0.3.11.dev5
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.3.11.dev4"
7
+ version = "0.3.11.dev5"
8
8
  description = "Tellr application package for Databricks Apps"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -113,17 +113,26 @@ class ChatService:
113
113
  and deck_dict.get("html_content")
114
114
  and "{{ds-asset:" in deck_dict.get("html_content", "")
115
115
  )
116
+ # @font-face src url() fonts and background-image url() live in the deck's
117
+ # top-level ``css``, not in slide html — gate on it too, else a deck whose
118
+ # only brand-asset reference is in css skips the resolver entirely
119
+ # (substitute_deck_dict_ds_assets covers the css field).
120
+ ds_needs_deck_css = bool(
121
+ deck_dict
122
+ and deck_dict.get("css")
123
+ and "{{ds-asset:" in deck_dict.get("css", "")
124
+ )
116
125
 
117
126
  if (
118
127
  needs_deck or needs_html or needs_deck_html
119
- or ds_needs_deck or ds_needs_html or ds_needs_deck_html
128
+ or ds_needs_deck or ds_needs_html or ds_needs_deck_html or ds_needs_deck_css
120
129
  ):
121
130
  with get_db_session() as db:
122
131
  if needs_deck or needs_deck_html:
123
132
  substitute_deck_dict_images(deck_dict, db)
124
133
  if needs_html:
125
134
  raw_html = substitute_image_placeholders(raw_html, db)
126
- if ds_needs_deck or ds_needs_deck_html:
135
+ if ds_needs_deck or ds_needs_deck_html or ds_needs_deck_css:
127
136
  substitute_deck_dict_ds_assets(deck_dict, db)
128
137
  if ds_needs_html:
129
138
  raw_html = substitute_ds_asset_placeholders(raw_html, db)
@@ -45,8 +45,13 @@ from src.core.database import Base
45
45
  # analogous to ``image_service.MAX_FILE_SIZE``. Kept here next to the models so
46
46
  # every writer shares one source of truth. Bytes are only ever persisted in the
47
47
  # dedicated ``design_system_asset`` table.
48
- MAX_ASSET_SIZE_BYTES = 10 * 1024 * 1024 # 10 MB per individual asset
49
- MAX_BUNDLE_SIZE_BYTES = 50 * 1024 * 1024 # 50 MB per uploaded design-system bundle
48
+ MAX_ASSET_SIZE_BYTES = 50 * 1024 * 1024 # 50 MB per individual asset
49
+ MAX_BUNDLE_SIZE_BYTES = 200 * 1024 * 1024 # 200 MB per uploaded design-system bundle
50
+ # NOTE: bytes are persisted in-row in ``design_system_asset`` (Lakebase Postgres).
51
+ # Raising the bundle cap to 200 MB means a single import can add up to ~200 MB of
52
+ # BLOB rows; large blobs bloat the row store and every copy-on-write branch fork.
53
+ # This is a deliberate limit bump, not a storage re-architecture — revisit
54
+ # out-of-row/object-store offloading if bundles routinely approach this size.
50
55
 
51
56
  # JSON on SQLite (tests); JSONB on PostgreSQL/Lakebase so the parsed manifest can
52
57
  # later be introspected/indexed natively. Mirrors the ImageAsset.tags convention.
@@ -44,15 +44,33 @@ def substitute_ds_asset_placeholders(html: str, db: Session) -> str:
44
44
  return DS_ASSET_PLACEHOLDER_PATTERN.sub(replace_match, html)
45
45
 
46
46
 
47
+ # Deck-level string fields (siblings of per-slide ``html``) that can carry a
48
+ # ``{{ds-asset:ID}}`` reference. Per the deck_json schema — "slides array, css,
49
+ # external_scripts, scripts" (see ``database/models/session.py``) — these are the
50
+ # only asset-bearing fields: ``css`` holds @font-face ``src: url()`` fonts and
51
+ # ``background-image: url()`` backgrounds, and ``html_content`` is the full
52
+ # knitted HTML. ``scripts``/``external_scripts`` are JavaScript and never
53
+ # reference brand assets, so they are intentionally excluded.
54
+ _DECK_DS_ASSET_FIELDS = ("html_content", "css")
55
+
56
+
47
57
  def substitute_deck_dict_ds_assets(deck_dict: dict, db: Session) -> dict:
48
- """Substitute {{ds-asset:ID}} placeholders in all slides of a deck dict."""
49
- if not deck_dict or not deck_dict.get("slides"):
58
+ """Substitute {{ds-asset:ID}} placeholders across a deck dict.
59
+
60
+ Covers every field that can carry the placeholder: each slide's ``html``,
61
+ the deck's ``html_content`` (full knitted HTML) and its top-level ``css``
62
+ (fonts + backgrounds). Deck-level fields are resolved independently of the
63
+ slides array so a deck with no slides still has its ``css``/``html_content``
64
+ substituted.
65
+ """
66
+ if not deck_dict:
50
67
  return deck_dict
51
- for slide in deck_dict["slides"]:
68
+ for slide in deck_dict.get("slides") or []:
52
69
  html = slide.get("html", "")
53
70
  if "{{ds-asset:" in html:
54
71
  slide["html"] = substitute_ds_asset_placeholders(html, db)
55
- # Also handle html_content if present (full knitted HTML)
56
- if deck_dict.get("html_content") and "{{ds-asset:" in deck_dict["html_content"]:
57
- deck_dict["html_content"] = substitute_ds_asset_placeholders(deck_dict["html_content"], db)
72
+ for field in _DECK_DS_ASSET_FIELDS:
73
+ value = deck_dict.get(field)
74
+ if value and "{{ds-asset:" in value:
75
+ deck_dict[field] = substitute_ds_asset_placeholders(value, db)
58
76
  return deck_dict