Source code for pysepal.solara.setup

"""Setup utilities for Solara applications using sepal_ui.

This module provides utilities to configure common Solara server settings
that are typically needed across all sepal_ui-based applications.
"""

import logging
from pathlib import Path
from typing import List, Optional, Union

import solara
import solara.server.settings

from .asset_merger import create_merged_assets_directory

logger = logging.getLogger("sepalui.solara.setup")

DEFAULT_FONT_AWESOME = "/@fortawesome/fontawesome-free@6.7.2/css/all.min.css"
DEFAULT_CULL_TIMEOUT = "0s"


[docs] def setup_theme_colors(): """Configure default sepalui theme colors for the application.""" # Dark theme colors solara.lab.theme.themes.dark.primary = "#76591e" solara.lab.theme.themes.dark.primary_contrast = "#bf8f2d" solara.lab.theme.themes.dark.secondary = "#363e4f" solara.lab.theme.themes.dark.secondary_contrast = "#5d76ab" solara.lab.theme.themes.dark.error = "#a63228" solara.lab.theme.themes.dark.info = "#c5c6c9" solara.lab.theme.themes.dark.success = "#3f802a" solara.lab.theme.themes.dark.warning = "#b8721d" solara.lab.theme.themes.dark.accent = "#272727" solara.lab.theme.themes.dark.anchor = "#f3f3f3" solara.lab.theme.themes.dark.main = "#24221f" solara.lab.theme.themes.dark.darker = "#1a1a1a" solara.lab.theme.themes.dark.bg = "#121212" solara.lab.theme.themes.dark.menu = "#424242" # Light theme colors solara.lab.theme.themes.light.primary = "#5BB624" solara.lab.theme.themes.light.primary_contrast = "#76b353" solara.lab.theme.themes.light.accent = "#f3f3f3" solara.lab.theme.themes.light.anchor = "#f3f3f3" solara.lab.theme.themes.light.secondary = "#2199C4" solara.lab.theme.themes.light.secondary_contrast = "#5d76ab" solara.lab.theme.themes.light.main = "#2196f3" solara.lab.theme.themes.light.darker = "#ffffff" solara.lab.theme.themes.light.bg = "#FFFFFF" solara.lab.theme.themes.light.menu = "#FFFFFF"
[docs] def setup_solara_server( extra_asset_locations: Optional[List[Union[str, Path]]] = None, ) -> None: """Configure common Solara server settings for sepal_ui applications. This function sets up standard configurations that are commonly needed across sepal_ui-based Solara applications, avoiding the need to duplicate these settings in every application. Always includes: - FontAwesome 6.7.2 - sepal_ui common assets (CSS, JS) - No kernel timeout ("0s") (helps to kill sessions once the page is closed) If extra asset locations are provided, this function will merge all CSS and JS files into combined files to ensure they are all properly served by Solara. Args: extra_asset_locations: Additional asset locations to serve beyond sepal_ui's common assets """ logger.debug("Setting up Solara server configuration for sepal_ui application") solara.server.settings.assets.fontawesome_path = DEFAULT_FONT_AWESOME solara.server.settings.kernel.cull_timeout = DEFAULT_CULL_TIMEOUT # Get sepal_ui common assets sepal_common_assets = Path(__file__).parent / "common" / "assets" if not sepal_common_assets.exists(): logger.warning(f"sepal_ui common assets directory not found: {sepal_common_assets}") return # If no extra locations, just use sepal_ui common assets if not extra_asset_locations: logger.debug("No extra asset locations specified, using sepal_ui common assets only") solara.server.settings.assets.extra_locations = [str(sepal_common_assets)] logger.debug(f"Asset location set to: {sepal_common_assets}") else: # Convert extra locations to Path objects extra_paths = [Path(loc) for loc in extra_asset_locations] logger.debug(f"Extra asset locations: {[str(p) for p in extra_paths]}") # Create merged assets directory merged_assets_dir = create_merged_assets_directory(sepal_common_assets, extra_paths) # Set the merged assets location solara.server.settings.assets.extra_locations = [str(merged_assets_dir)] logger.debug(f"Asset location set to merged directory: {merged_assets_dir}") logger.info("Solara server configuration completed successfully")