flock-core 0.5.0b28__py3-none-any.whl → 0.5.56b0__py3-none-any.whl
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.
Potentially problematic release.
This version of flock-core might be problematic. Click here for more details.
- flock/__init__.py +12 -217
- flock/agent.py +678 -0
- flock/api/themes.py +71 -0
- flock/artifacts.py +79 -0
- flock/cli.py +75 -0
- flock/components.py +173 -0
- flock/dashboard/__init__.py +28 -0
- flock/dashboard/collector.py +283 -0
- flock/dashboard/events.py +182 -0
- flock/dashboard/launcher.py +230 -0
- flock/dashboard/service.py +537 -0
- flock/dashboard/websocket.py +235 -0
- flock/engines/__init__.py +6 -0
- flock/engines/dspy_engine.py +856 -0
- flock/examples.py +128 -0
- flock/{core/util → helper}/cli_helper.py +4 -3
- flock/{core/logging → logging}/__init__.py +2 -3
- flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
- flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
- flock/{core/logging → logging}/formatters/themed_formatter.py +69 -115
- flock/{core/logging → logging}/logging.py +77 -61
- flock/{core/logging → logging}/telemetry.py +20 -26
- flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
- flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +6 -9
- flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
- flock/{core/logging → logging}/trace_and_logged.py +20 -24
- flock/mcp/__init__.py +91 -0
- flock/{core/mcp/mcp_client.py → mcp/client.py} +103 -154
- flock/{core/mcp/mcp_config.py → mcp/config.py} +62 -117
- flock/mcp/manager.py +255 -0
- flock/mcp/servers/sse/__init__.py +1 -1
- flock/mcp/servers/sse/flock_sse_server.py +11 -53
- flock/mcp/servers/stdio/__init__.py +1 -1
- flock/mcp/servers/stdio/flock_stdio_server.py +8 -48
- flock/mcp/servers/streamable_http/flock_streamable_http_server.py +17 -62
- flock/mcp/servers/websockets/flock_websocket_server.py +7 -40
- flock/{core/mcp/flock_mcp_tool.py → mcp/tool.py} +16 -26
- flock/mcp/types/__init__.py +42 -0
- flock/{core/mcp → mcp}/types/callbacks.py +9 -15
- flock/{core/mcp → mcp}/types/factories.py +7 -6
- flock/{core/mcp → mcp}/types/handlers.py +13 -18
- flock/{core/mcp → mcp}/types/types.py +70 -74
- flock/{core/mcp → mcp}/util/helpers.py +1 -1
- flock/orchestrator.py +645 -0
- flock/registry.py +148 -0
- flock/runtime.py +262 -0
- flock/service.py +140 -0
- flock/store.py +69 -0
- flock/subscription.py +111 -0
- flock/themes/andromeda.toml +1 -1
- flock/themes/apple-system-colors.toml +1 -1
- flock/themes/arcoiris.toml +1 -1
- flock/themes/atomonelight.toml +1 -1
- flock/themes/ayu copy.toml +1 -1
- flock/themes/ayu-light.toml +1 -1
- flock/themes/belafonte-day.toml +1 -1
- flock/themes/belafonte-night.toml +1 -1
- flock/themes/blulocodark.toml +1 -1
- flock/themes/breeze.toml +1 -1
- flock/themes/broadcast.toml +1 -1
- flock/themes/brogrammer.toml +1 -1
- flock/themes/builtin-dark.toml +1 -1
- flock/themes/builtin-pastel-dark.toml +1 -1
- flock/themes/catppuccin-latte.toml +1 -1
- flock/themes/catppuccin-macchiato.toml +1 -1
- flock/themes/catppuccin-mocha.toml +1 -1
- flock/themes/cga.toml +1 -1
- flock/themes/chalk.toml +1 -1
- flock/themes/ciapre.toml +1 -1
- flock/themes/coffee-theme.toml +1 -1
- flock/themes/cyberpunkscarletprotocol.toml +1 -1
- flock/themes/dark+.toml +1 -1
- flock/themes/darkermatrix.toml +1 -1
- flock/themes/darkside.toml +1 -1
- flock/themes/desert.toml +1 -1
- flock/themes/django.toml +1 -1
- flock/themes/djangosmooth.toml +1 -1
- flock/themes/doomone.toml +1 -1
- flock/themes/dotgov.toml +1 -1
- flock/themes/dracula+.toml +1 -1
- flock/themes/duckbones.toml +1 -1
- flock/themes/encom.toml +1 -1
- flock/themes/espresso.toml +1 -1
- flock/themes/everblush.toml +1 -1
- flock/themes/fairyfloss.toml +1 -1
- flock/themes/fideloper.toml +1 -1
- flock/themes/fishtank.toml +1 -1
- flock/themes/flexoki-light.toml +1 -1
- flock/themes/floraverse.toml +1 -1
- flock/themes/framer.toml +1 -1
- flock/themes/galizur.toml +1 -1
- flock/themes/github.toml +1 -1
- flock/themes/grass.toml +1 -1
- flock/themes/grey-green.toml +1 -1
- flock/themes/gruvboxlight.toml +1 -1
- flock/themes/guezwhoz.toml +1 -1
- flock/themes/harper.toml +1 -1
- flock/themes/hax0r-blue.toml +1 -1
- flock/themes/hopscotch.256.toml +1 -1
- flock/themes/ic-green-ppl.toml +1 -1
- flock/themes/iceberg-dark.toml +1 -1
- flock/themes/japanesque.toml +1 -1
- flock/themes/jubi.toml +1 -1
- flock/themes/kibble.toml +1 -1
- flock/themes/kolorit.toml +1 -1
- flock/themes/kurokula.toml +1 -1
- flock/themes/materialdesigncolors.toml +1 -1
- flock/themes/matrix.toml +1 -1
- flock/themes/mellifluous.toml +1 -1
- flock/themes/midnight-in-mojave.toml +1 -1
- flock/themes/monokai-remastered.toml +1 -1
- flock/themes/monokai-soda.toml +1 -1
- flock/themes/neon.toml +1 -1
- flock/themes/neopolitan.toml +1 -1
- flock/themes/nord-light.toml +1 -1
- flock/themes/ocean.toml +1 -1
- flock/themes/onehalfdark.toml +1 -1
- flock/themes/onehalflight.toml +1 -1
- flock/themes/palenighthc.toml +1 -1
- flock/themes/paulmillr.toml +1 -1
- flock/themes/pencildark.toml +1 -1
- flock/themes/pnevma.toml +1 -1
- flock/themes/purple-rain.toml +1 -1
- flock/themes/purplepeter.toml +1 -1
- flock/themes/raycast-dark.toml +1 -1
- flock/themes/red-sands.toml +1 -1
- flock/themes/relaxed.toml +1 -1
- flock/themes/retro.toml +1 -1
- flock/themes/rose-pine.toml +1 -1
- flock/themes/royal.toml +1 -1
- flock/themes/ryuuko.toml +1 -1
- flock/themes/sakura.toml +1 -1
- flock/themes/scarlet-protocol.toml +1 -1
- flock/themes/seoulbones-dark.toml +1 -1
- flock/themes/shades-of-purple.toml +1 -1
- flock/themes/smyck.toml +1 -1
- flock/themes/softserver.toml +1 -1
- flock/themes/solarized-darcula.toml +1 -1
- flock/themes/square.toml +1 -1
- flock/themes/sugarplum.toml +1 -1
- flock/themes/thayer-bright.toml +1 -1
- flock/themes/tokyonight.toml +1 -1
- flock/themes/tomorrow.toml +1 -1
- flock/themes/ubuntu.toml +1 -1
- flock/themes/ultradark.toml +1 -1
- flock/themes/ultraviolent.toml +1 -1
- flock/themes/unikitty.toml +1 -1
- flock/themes/urple.toml +1 -1
- flock/themes/vesper.toml +1 -1
- flock/themes/vimbones.toml +1 -1
- flock/themes/wildcherry.toml +1 -1
- flock/themes/wilmersdorf.toml +1 -1
- flock/themes/wryan.toml +1 -1
- flock/themes/xcodedarkhc.toml +1 -1
- flock/themes/xcodelight.toml +1 -1
- flock/themes/zenbones-light.toml +1 -1
- flock/themes/zenwritten-dark.toml +1 -1
- flock/utilities.py +301 -0
- flock/{components/utility → utility}/output_utility_component.py +68 -53
- flock/visibility.py +107 -0
- flock_core-0.5.56b0.dist-info/METADATA +747 -0
- flock_core-0.5.56b0.dist-info/RECORD +398 -0
- flock_core-0.5.56b0.dist-info/entry_points.txt +2 -0
- {flock_core-0.5.0b28.dist-info → flock_core-0.5.56b0.dist-info}/licenses/LICENSE +1 -1
- flock/adapter/__init__.py +0 -14
- flock/adapter/azure_adapter.py +0 -68
- flock/adapter/chroma_adapter.py +0 -73
- flock/adapter/faiss_adapter.py +0 -97
- flock/adapter/pinecone_adapter.py +0 -51
- flock/adapter/vector_base.py +0 -47
- flock/cli/assets/release_notes.md +0 -140
- flock/cli/config.py +0 -8
- flock/cli/constants.py +0 -36
- flock/cli/create_agent.py +0 -1
- flock/cli/create_flock.py +0 -280
- flock/cli/execute_flock.py +0 -620
- flock/cli/load_agent.py +0 -1
- flock/cli/load_examples.py +0 -1
- flock/cli/load_flock.py +0 -192
- flock/cli/load_release_notes.py +0 -20
- flock/cli/loaded_flock_cli.py +0 -254
- flock/cli/manage_agents.py +0 -459
- flock/cli/registry_management.py +0 -889
- flock/cli/runner.py +0 -41
- flock/cli/settings.py +0 -857
- flock/cli/utils.py +0 -135
- flock/cli/view_results.py +0 -29
- flock/cli/yaml_editor.py +0 -396
- flock/components/__init__.py +0 -30
- flock/components/evaluation/__init__.py +0 -9
- flock/components/evaluation/declarative_evaluation_component.py +0 -606
- flock/components/routing/__init__.py +0 -15
- flock/components/routing/conditional_routing_component.py +0 -494
- flock/components/routing/default_routing_component.py +0 -103
- flock/components/routing/llm_routing_component.py +0 -206
- flock/components/utility/__init__.py +0 -22
- flock/components/utility/example_utility_component.py +0 -250
- flock/components/utility/feedback_utility_component.py +0 -206
- flock/components/utility/memory_utility_component.py +0 -550
- flock/components/utility/metrics_utility_component.py +0 -700
- flock/config.py +0 -61
- flock/core/__init__.py +0 -110
- flock/core/agent/__init__.py +0 -16
- flock/core/agent/default_agent.py +0 -216
- flock/core/agent/flock_agent_components.py +0 -104
- flock/core/agent/flock_agent_execution.py +0 -101
- flock/core/agent/flock_agent_integration.py +0 -260
- flock/core/agent/flock_agent_lifecycle.py +0 -186
- flock/core/agent/flock_agent_serialization.py +0 -381
- flock/core/api/__init__.py +0 -10
- flock/core/api/custom_endpoint.py +0 -45
- flock/core/api/endpoints.py +0 -254
- flock/core/api/main.py +0 -162
- flock/core/api/models.py +0 -97
- flock/core/api/run_store.py +0 -224
- flock/core/api/runner.py +0 -44
- flock/core/api/service.py +0 -214
- flock/core/component/__init__.py +0 -15
- flock/core/component/agent_component_base.py +0 -309
- flock/core/component/evaluation_component.py +0 -62
- flock/core/component/routing_component.py +0 -74
- flock/core/component/utility_component.py +0 -69
- flock/core/config/flock_agent_config.py +0 -58
- flock/core/config/scheduled_agent_config.py +0 -40
- flock/core/context/context.py +0 -213
- flock/core/context/context_manager.py +0 -37
- flock/core/context/context_vars.py +0 -10
- flock/core/evaluation/utils.py +0 -396
- flock/core/execution/batch_executor.py +0 -369
- flock/core/execution/evaluation_executor.py +0 -438
- flock/core/execution/local_executor.py +0 -31
- flock/core/execution/opik_executor.py +0 -103
- flock/core/execution/temporal_executor.py +0 -164
- flock/core/flock.py +0 -634
- flock/core/flock_agent.py +0 -336
- flock/core/flock_factory.py +0 -613
- flock/core/flock_scheduler.py +0 -166
- flock/core/flock_server_manager.py +0 -136
- flock/core/interpreter/python_interpreter.py +0 -689
- flock/core/mcp/__init__.py +0 -1
- flock/core/mcp/flock_mcp_server.py +0 -680
- flock/core/mcp/mcp_client_manager.py +0 -201
- flock/core/mcp/types/__init__.py +0 -1
- flock/core/mixin/dspy_integration.py +0 -403
- flock/core/mixin/prompt_parser.py +0 -125
- flock/core/orchestration/__init__.py +0 -15
- flock/core/orchestration/flock_batch_processor.py +0 -94
- flock/core/orchestration/flock_evaluator.py +0 -113
- flock/core/orchestration/flock_execution.py +0 -295
- flock/core/orchestration/flock_initialization.py +0 -149
- flock/core/orchestration/flock_server_manager.py +0 -67
- flock/core/orchestration/flock_web_server.py +0 -117
- flock/core/registry/__init__.py +0 -45
- flock/core/registry/agent_registry.py +0 -69
- flock/core/registry/callable_registry.py +0 -139
- flock/core/registry/component_discovery.py +0 -142
- flock/core/registry/component_registry.py +0 -64
- flock/core/registry/config_mapping.py +0 -64
- flock/core/registry/decorators.py +0 -137
- flock/core/registry/registry_hub.py +0 -205
- flock/core/registry/server_registry.py +0 -57
- flock/core/registry/type_registry.py +0 -86
- flock/core/serialization/__init__.py +0 -13
- flock/core/serialization/callable_registry.py +0 -52
- flock/core/serialization/flock_serializer.py +0 -832
- flock/core/serialization/json_encoder.py +0 -41
- flock/core/serialization/secure_serializer.py +0 -175
- flock/core/serialization/serializable.py +0 -342
- flock/core/serialization/serialization_utils.py +0 -412
- flock/core/util/file_path_utils.py +0 -223
- flock/core/util/hydrator.py +0 -309
- flock/core/util/input_resolver.py +0 -164
- flock/core/util/loader.py +0 -59
- flock/core/util/splitter.py +0 -219
- flock/di.py +0 -27
- flock/platform/docker_tools.py +0 -49
- flock/platform/jaeger_install.py +0 -86
- flock/webapp/__init__.py +0 -1
- flock/webapp/app/__init__.py +0 -0
- flock/webapp/app/api/__init__.py +0 -0
- flock/webapp/app/api/agent_management.py +0 -241
- flock/webapp/app/api/execution.py +0 -709
- flock/webapp/app/api/flock_management.py +0 -129
- flock/webapp/app/api/registry_viewer.py +0 -30
- flock/webapp/app/chat.py +0 -665
- flock/webapp/app/config.py +0 -104
- flock/webapp/app/dependencies.py +0 -117
- flock/webapp/app/main.py +0 -1070
- flock/webapp/app/middleware.py +0 -113
- flock/webapp/app/models_ui.py +0 -7
- flock/webapp/app/services/__init__.py +0 -0
- flock/webapp/app/services/feedback_file_service.py +0 -363
- flock/webapp/app/services/flock_service.py +0 -337
- flock/webapp/app/services/sharing_models.py +0 -81
- flock/webapp/app/services/sharing_store.py +0 -762
- flock/webapp/app/templates/theme_mapper.html +0 -326
- flock/webapp/app/theme_mapper.py +0 -812
- flock/webapp/app/utils.py +0 -85
- flock/webapp/run.py +0 -215
- flock/webapp/static/css/chat.css +0 -301
- flock/webapp/static/css/components.css +0 -167
- flock/webapp/static/css/header.css +0 -39
- flock/webapp/static/css/layout.css +0 -46
- flock/webapp/static/css/sidebar.css +0 -127
- flock/webapp/static/css/two-pane.css +0 -48
- flock/webapp/templates/base.html +0 -200
- flock/webapp/templates/chat.html +0 -152
- flock/webapp/templates/chat_settings.html +0 -19
- flock/webapp/templates/flock_editor.html +0 -16
- flock/webapp/templates/index.html +0 -12
- flock/webapp/templates/partials/_agent_detail_form.html +0 -93
- flock/webapp/templates/partials/_agent_list.html +0 -18
- flock/webapp/templates/partials/_agent_manager_view.html +0 -51
- flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
- flock/webapp/templates/partials/_chat_container.html +0 -15
- flock/webapp/templates/partials/_chat_messages.html +0 -57
- flock/webapp/templates/partials/_chat_settings_form.html +0 -85
- flock/webapp/templates/partials/_create_flock_form.html +0 -50
- flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
- flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
- flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
- flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
- flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
- flock/webapp/templates/partials/_env_vars_table.html +0 -23
- flock/webapp/templates/partials/_execution_form.html +0 -118
- flock/webapp/templates/partials/_execution_view_container.html +0 -28
- flock/webapp/templates/partials/_flock_file_list.html +0 -23
- flock/webapp/templates/partials/_flock_properties_form.html +0 -52
- flock/webapp/templates/partials/_flock_upload_form.html +0 -16
- flock/webapp/templates/partials/_header_flock_status.html +0 -5
- flock/webapp/templates/partials/_load_manager_view.html +0 -49
- flock/webapp/templates/partials/_registry_table.html +0 -25
- flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
- flock/webapp/templates/partials/_results_display.html +0 -78
- flock/webapp/templates/partials/_settings_env_content.html +0 -9
- flock/webapp/templates/partials/_settings_theme_content.html +0 -14
- flock/webapp/templates/partials/_settings_view.html +0 -36
- flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
- flock/webapp/templates/partials/_share_link_snippet.html +0 -35
- flock/webapp/templates/partials/_sidebar.html +0 -74
- flock/webapp/templates/partials/_streaming_results_container.html +0 -195
- flock/webapp/templates/partials/_structured_data_view.html +0 -40
- flock/webapp/templates/partials/_theme_preview.html +0 -36
- flock/webapp/templates/registry_viewer.html +0 -84
- flock/webapp/templates/shared_run_page.html +0 -140
- flock/workflow/__init__.py +0 -0
- flock/workflow/activities.py +0 -196
- flock/workflow/agent_activities.py +0 -24
- flock/workflow/agent_execution_activity.py +0 -202
- flock/workflow/flock_workflow.py +0 -214
- flock/workflow/temporal_config.py +0 -96
- flock/workflow/temporal_setup.py +0 -68
- flock_core-0.5.0b28.dist-info/METADATA +0 -274
- flock_core-0.5.0b28.dist-info/RECORD +0 -561
- flock_core-0.5.0b28.dist-info/entry_points.txt +0 -2
- /flock/{core/logging → logging}/formatters/themes.py +0 -0
- /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
- /flock/{core/mcp → mcp}/util/__init__.py +0 -0
- {flock_core-0.5.0b28.dist-info → flock_core-0.5.56b0.dist-info}/WHEEL +0 -0
flock/webapp/app/config.py
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import random # Added for random theme selection
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
from typing import TYPE_CHECKING
|
|
5
|
-
|
|
6
|
-
if TYPE_CHECKING:
|
|
7
|
-
from flock.core.flock import Flock
|
|
8
|
-
|
|
9
|
-
from flock.core.logging.formatters.themes import OutputTheme
|
|
10
|
-
|
|
11
|
-
FLOCK_FILES_DIR = Path(os.getenv("FLOCK_FILES_DIR", "./.flock_ui_projects"))
|
|
12
|
-
FLOCK_FILES_DIR.mkdir(parents=True, exist_ok=True)
|
|
13
|
-
|
|
14
|
-
# --- Shared Links Database Configuration ---
|
|
15
|
-
# Default path is relative to the .flock/ directory in the workspace root if FLOCK_ROOT is not set
|
|
16
|
-
# or if .flock is not a sibling of FLOCK_BASE_DIR.
|
|
17
|
-
# More robustly, place it inside a user-specific or project-specific data directory.
|
|
18
|
-
_default_shared_links_db_parent = Path(os.getenv("FLOCK_ROOT", ".")) / ".flock"
|
|
19
|
-
SHARED_LINKS_DB_PATH = Path(
|
|
20
|
-
os.getenv(
|
|
21
|
-
"SHARED_LINKS_DB_PATH",
|
|
22
|
-
str(_default_shared_links_db_parent / "shared_links.db")
|
|
23
|
-
)
|
|
24
|
-
)
|
|
25
|
-
# Ensure the directory for the DB exists, though the store will also do this.
|
|
26
|
-
SHARED_LINKS_DB_PATH.parent.mkdir(parents=True, exist_ok=True)
|
|
27
|
-
|
|
28
|
-
# --- Theme Configuration ---
|
|
29
|
-
# Calculate themes directory relative to this config file's location, assuming structure:
|
|
30
|
-
# src/flock/webapp/app/config.py
|
|
31
|
-
# src/flock/themes/
|
|
32
|
-
CONFIG_FILE_PATH = Path(__file__).resolve() # src/flock/webapp/app/config.py
|
|
33
|
-
FLOCK_WEBAPP_DIR = CONFIG_FILE_PATH.parent.parent # src/flock/webapp/
|
|
34
|
-
FLOCK_BASE_DIR = FLOCK_WEBAPP_DIR.parent # src/flock/
|
|
35
|
-
THEMES_DIR = FLOCK_BASE_DIR / "themes"
|
|
36
|
-
|
|
37
|
-
# Global state for MVP - NOT SUITABLE FOR PRODUCTION/MULTI-USER
|
|
38
|
-
CURRENT_FLOCK_INSTANCE: "Flock | None" = None
|
|
39
|
-
CURRENT_FLOCK_FILENAME: str | None = None
|
|
40
|
-
|
|
41
|
-
DEFAULT_THEME_NAME = OutputTheme.ciapre.value # Default if random fails or invalid theme specified
|
|
42
|
-
|
|
43
|
-
def list_available_themes() -> list[str]:
|
|
44
|
-
"""Scans the THEMES_DIR for .toml files and returns their names (without .toml)."""
|
|
45
|
-
if not THEMES_DIR.exists() or not THEMES_DIR.is_dir():
|
|
46
|
-
return []
|
|
47
|
-
return sorted([p.stem for p in THEMES_DIR.glob("*.toml") if p.is_file()])
|
|
48
|
-
|
|
49
|
-
# Initialize CURRENT_THEME_NAME
|
|
50
|
-
_initial_theme_from_env = os.environ.get("FLOCK_WEB_THEME")
|
|
51
|
-
_resolved_initial_theme = DEFAULT_THEME_NAME
|
|
52
|
-
|
|
53
|
-
if _initial_theme_from_env:
|
|
54
|
-
if _initial_theme_from_env.lower() == "random":
|
|
55
|
-
available_themes = list_available_themes()
|
|
56
|
-
if available_themes:
|
|
57
|
-
_resolved_initial_theme = random.choice(available_themes)
|
|
58
|
-
print(f"Config: Initial theme from FLOCK_WEB_THEME='random' resolved to: {_resolved_initial_theme}")
|
|
59
|
-
else:
|
|
60
|
-
print(f"Warning: FLOCK_WEB_THEME='random' specified, but no themes found in {THEMES_DIR}. Using default: {DEFAULT_THEME_NAME}")
|
|
61
|
-
_resolved_initial_theme = DEFAULT_THEME_NAME
|
|
62
|
-
elif _initial_theme_from_env in [t.value for t in OutputTheme] or _initial_theme_from_env in list_available_themes():
|
|
63
|
-
_resolved_initial_theme = _initial_theme_from_env
|
|
64
|
-
print(f"Config: Initial theme set from FLOCK_WEB_THEME env var: {_resolved_initial_theme}")
|
|
65
|
-
else:
|
|
66
|
-
print(f"Warning: Invalid theme name '{_initial_theme_from_env}' in FLOCK_WEB_THEME. Using default: {DEFAULT_THEME_NAME}")
|
|
67
|
-
_resolved_initial_theme = DEFAULT_THEME_NAME
|
|
68
|
-
|
|
69
|
-
CURRENT_THEME_NAME: str = _resolved_initial_theme
|
|
70
|
-
|
|
71
|
-
def set_current_theme_name(theme_name: str | None):
|
|
72
|
-
"""Sets the globally accessible current theme name.
|
|
73
|
-
If 'random' is passed, a random theme is chosen.
|
|
74
|
-
"""
|
|
75
|
-
global CURRENT_THEME_NAME
|
|
76
|
-
resolved_theme = DEFAULT_THEME_NAME # Default to start
|
|
77
|
-
|
|
78
|
-
if theme_name:
|
|
79
|
-
if theme_name.lower() == "random":
|
|
80
|
-
available = list_available_themes()
|
|
81
|
-
if available:
|
|
82
|
-
resolved_theme = random.choice(available)
|
|
83
|
-
print(f"Config: Theme 'random' resolved to: {resolved_theme}")
|
|
84
|
-
else:
|
|
85
|
-
print(f"Warning: Theme 'random' specified, but no themes found in {THEMES_DIR}. Using default: {DEFAULT_THEME_NAME}")
|
|
86
|
-
# resolved_theme remains DEFAULT_THEME_NAME
|
|
87
|
-
elif theme_name in list_available_themes():
|
|
88
|
-
resolved_theme = theme_name
|
|
89
|
-
else:
|
|
90
|
-
print(f"Warning: Invalid theme name provided ('{theme_name}'). Using default: {DEFAULT_THEME_NAME}")
|
|
91
|
-
# resolved_theme remains DEFAULT_THEME_NAME
|
|
92
|
-
else: # theme_name is None
|
|
93
|
-
# resolved_theme remains DEFAULT_THEME_NAME (set at the beginning of function)
|
|
94
|
-
pass
|
|
95
|
-
|
|
96
|
-
CURRENT_THEME_NAME = resolved_theme
|
|
97
|
-
# Ensure the theme name is set in the environment if we want other processes to see it,
|
|
98
|
-
# though this might be better handled by the calling process (e.g. CLI)
|
|
99
|
-
# os.environ["FLOCK_WEB_THEME"] = CURRENT_THEME_NAME
|
|
100
|
-
print(f"Config: Current theme explicitly set to: {CURRENT_THEME_NAME}")
|
|
101
|
-
|
|
102
|
-
def get_current_theme_name() -> str:
|
|
103
|
-
"""Gets the globally accessible current theme name."""
|
|
104
|
-
return CURRENT_THEME_NAME
|
flock/webapp/app/dependencies.py
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
# src/flock/webapp/app/dependencies.py
|
|
2
|
-
from collections.abc import Sequence
|
|
3
|
-
from typing import TYPE_CHECKING, Optional
|
|
4
|
-
|
|
5
|
-
# Import FlockEndpoint for type hinting
|
|
6
|
-
from flock.core.api.custom_endpoint import FlockEndpoint
|
|
7
|
-
|
|
8
|
-
if TYPE_CHECKING:
|
|
9
|
-
from flock.core.api.run_store import RunStore
|
|
10
|
-
from flock.core.flock import Flock
|
|
11
|
-
from flock.webapp.app.services.sharing_store import SharedLinkStoreInterface
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
# These will be set once when the FastAPI app starts, via set_global_flock_services
|
|
15
|
-
_flock_instance: Optional["Flock"] = None
|
|
16
|
-
_run_store_instance: Optional["RunStore"] = None
|
|
17
|
-
_shared_link_store_instance: Optional["SharedLinkStoreInterface"] = None
|
|
18
|
-
|
|
19
|
-
# Global-like variable (scoped to this module) to temporarily store custom endpoints
|
|
20
|
-
# before the app is fully configured and the lifespan event runs.
|
|
21
|
-
_pending_custom_endpoints: list[FlockEndpoint] = []
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def add_pending_custom_endpoints(endpoints: Sequence[FlockEndpoint] | None):
|
|
25
|
-
"""Temporarily stores custom endpoints. Called by `start_unified_server`
|
|
26
|
-
before the FastAPI app's lifespan event can process them.
|
|
27
|
-
"""
|
|
28
|
-
global _pending_custom_endpoints
|
|
29
|
-
if endpoints:
|
|
30
|
-
# Ensure we are adding FlockEndpoint instances
|
|
31
|
-
for ep in endpoints:
|
|
32
|
-
if not isinstance(ep, FlockEndpoint):
|
|
33
|
-
# If it's a dict, try to convert it, assuming it was the old format
|
|
34
|
-
if isinstance(ep, dict) and "path" in ep and "callback" in ep:
|
|
35
|
-
try:
|
|
36
|
-
# Attempt to create FlockEndpoint from dict - assumes correct keys
|
|
37
|
-
# This is a basic conversion; more robust parsing might be needed
|
|
38
|
-
# if the dict structure is very different.
|
|
39
|
-
_pending_custom_endpoints.append(FlockEndpoint(**ep)) # type: ignore
|
|
40
|
-
except Exception as e:
|
|
41
|
-
print(f"Warning: Could not convert custom endpoint dict to FlockEndpoint: {ep}. Error: {e}")
|
|
42
|
-
else:
|
|
43
|
-
print(f"Warning: Custom endpoint is not a FlockEndpoint instance and cannot be automatically converted: {type(ep)}")
|
|
44
|
-
else:
|
|
45
|
-
_pending_custom_endpoints.append(ep)
|
|
46
|
-
print(f"Dependencies: Added {len(endpoints)} pending custom endpoints.")
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def get_pending_custom_endpoints_and_clear() -> list[FlockEndpoint]:
|
|
50
|
-
"""Retrieves and clears pending custom endpoints.
|
|
51
|
-
Called by the FastAPI app's lifespan event manager in `webapp/app/main.py`.
|
|
52
|
-
"""
|
|
53
|
-
global _pending_custom_endpoints
|
|
54
|
-
endpoints_to_add = _pending_custom_endpoints[:] # Create a copy
|
|
55
|
-
_pending_custom_endpoints = [] # Clear the pending list
|
|
56
|
-
if endpoints_to_add:
|
|
57
|
-
print(f"Dependencies: Retrieved {len(endpoints_to_add)} pending custom endpoints for app registration.")
|
|
58
|
-
return endpoints_to_add
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def set_global_flock_services(flock: Optional["Flock"], run_store: "RunStore"):
|
|
62
|
-
"""Called once at application startup to set the global Flock and RunStore.
|
|
63
|
-
This is typically invoked by the server startup script (e.g., in webapp/run.py).
|
|
64
|
-
"""
|
|
65
|
-
global _flock_instance, _run_store_instance
|
|
66
|
-
from flock.core.logging.logging import (
|
|
67
|
-
get_logger, # Local import to avoid circularity at module level
|
|
68
|
-
)
|
|
69
|
-
logger = get_logger("dependencies")
|
|
70
|
-
|
|
71
|
-
if _flock_instance is not None or _run_store_instance is not None:
|
|
72
|
-
logger.warning("Global Flock services are being re-initialized in dependencies.py.")
|
|
73
|
-
|
|
74
|
-
_flock_instance = flock
|
|
75
|
-
_run_store_instance = run_store
|
|
76
|
-
logger.info(f"Global services set in dependencies: Flock='{flock.name if flock else 'None'}', RunStore type='{type(run_store)}'")
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def set_global_shared_link_store(store: "SharedLinkStoreInterface"):
|
|
80
|
-
"""Called once at application startup to set the global SharedLinkStore."""
|
|
81
|
-
global _shared_link_store_instance
|
|
82
|
-
from flock.core.logging.logging import get_logger
|
|
83
|
-
logger = get_logger("dependencies")
|
|
84
|
-
|
|
85
|
-
if _shared_link_store_instance is not None:
|
|
86
|
-
logger.warning("Global SharedLinkStore is being re-initialized in dependencies.py.")
|
|
87
|
-
|
|
88
|
-
_shared_link_store_instance = store
|
|
89
|
-
logger.info(f"Global SharedLinkStore set in dependencies: Store type='{type(store)}'")
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
def get_flock_instance() -> "Flock":
|
|
93
|
-
"""FastAPI dependency to get the globally available Flock instance."""
|
|
94
|
-
if _flock_instance is None:
|
|
95
|
-
# This can happen if accessed before `set_global_flock_services` or if it was cleared.
|
|
96
|
-
# The application should handle this gracefully, e.g. by redirecting to a setup page.
|
|
97
|
-
raise RuntimeError("Flock instance has not been initialized or is not currently available for DI.")
|
|
98
|
-
return _flock_instance
|
|
99
|
-
|
|
100
|
-
def get_optional_flock_instance() -> Optional["Flock"]:
|
|
101
|
-
"""FastAPI dependency to optionally get the Flock instance. Returns None if not set."""
|
|
102
|
-
return _flock_instance
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
def get_run_store() -> "RunStore":
|
|
106
|
-
"""FastAPI dependency to get the globally available RunStore instance."""
|
|
107
|
-
if _run_store_instance is None:
|
|
108
|
-
# Similar to Flock instance, should be initialized at app startup.
|
|
109
|
-
raise RuntimeError("RunStore instance has not been initialized in the application.")
|
|
110
|
-
return _run_store_instance
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
def get_shared_link_store() -> "SharedLinkStoreInterface":
|
|
114
|
-
"""FastAPI dependency to get the globally available SharedLinkStore instance."""
|
|
115
|
-
if _shared_link_store_instance is None:
|
|
116
|
-
raise RuntimeError("SharedLinkStore instance has not been initialized in the application.")
|
|
117
|
-
return _shared_link_store_instance
|