SYMBOL INDEX (402 symbols across 43 files) FILE: .changeset/changeset.cjs function find_packages_dirs (line 29) | function find_packages_dirs(package_name) { function handle_line (line 317) | function handle_line(str, prefix, suffix) { FILE: .changeset/fix_changelogs.cjs constant RE_PKG_NAME (line 5) | const RE_PKG_NAME = /^[\w-]+\b/; function run (line 16) | function run() { FILE: daggr/_client_cache.py function _is_hot_reload (line 19) | def _is_hot_reload() -> bool: function _get_cache_path (line 23) | def _get_cache_path(src: str) -> Path: function _get_validated_file (line 28) | def _get_validated_file() -> Path: function _load_validated_set (line 32) | def _load_validated_set() -> None: function _save_validated_set (line 46) | def _save_validated_set() -> None: function is_validated (line 56) | def is_validated(cache_key: tuple) -> bool: function mark_validated (line 63) | def mark_validated(cache_key: tuple) -> None: function get_api_info (line 71) | def get_api_info(src: str) -> dict | None: function set_api_info (line 89) | def set_api_info(src: str, info: dict) -> None: function get_client (line 101) | def get_client(src: str): function set_client (line 105) | def set_client(src: str, client) -> None: function _get_model_task_cache_path (line 109) | def _get_model_task_cache_path() -> Path: function _load_model_task_cache (line 113) | def _load_model_task_cache() -> None: function _save_model_task_cache (line 127) | def _save_model_task_cache() -> None: function get_model_task (line 137) | def get_model_task(model: str) -> tuple[bool, str | None]: function set_model_task (line 157) | def set_model_task(model: str, task: str | None) -> None: function set_model_not_found (line 162) | def set_model_not_found(model: str) -> None: function _get_dependency_hash_path (line 167) | def _get_dependency_hash_path() -> Path: function _load_dependency_hash_cache (line 171) | def _load_dependency_hash_cache() -> None: function _save_dependency_hash_cache (line 184) | def _save_dependency_hash_cache() -> None: function get_dependency_hash (line 192) | def get_dependency_hash(src: str) -> str | None: function set_dependency_hash (line 197) | def set_dependency_hash(src: str, sha: str) -> None: FILE: daggr/_utils.py function suggest_similar (line 8) | def suggest_similar(invalid: str, valid_options: set[str]) -> str | None: FILE: daggr/cli.py function _find_available_port (line 22) | def _find_available_port(host: str, start_port: int) -> int: function find_python_imports (line 40) | def find_python_imports(file_path: Path) -> list[Path]: function main (line 72) | def main(): function _deploy_main (line 158) | def _deploy_main(): function _extract_graph (line 246) | def _extract_graph(script_path: Path): function _sanitize_space_name (line 287) | def _sanitize_space_name(name: str) -> str: function _deploy (line 295) | def _deploy( function _get_gradio_version (line 457) | def _get_gradio_version() -> str: function _delete_sheets (line 467) | def _delete_sheets(script_path: Path, force: bool = False): function _run_script (line 562) | def _run_script(script_path: Path, host: str, port: int): function _run_with_reload (line 576) | def _run_with_reload(script_path: Path, host: str, port: int, watch_dagg... function _create_app (line 626) | def _create_app(): FILE: daggr/edge.py class Edge (line 13) | class Edge: method __init__ (line 29) | def __init__(self, source: PortLike, target: PortLike): method __repr__ (line 42) | def __repr__(self): method as_tuple (line 54) | def as_tuple(self) -> tuple[str, str, str, str]: FILE: daggr/executor.py class FileValue (line 34) | class FileValue(str): function _download_file (line 40) | def _download_file(url: str, hf_token: str | None = None) -> str: function _postprocess_inference_result (line 63) | def _postprocess_inference_result(task: str | None, result: Any) -> Any: function _call_inference_task (line 109) | def _call_inference_task(client: Any, task: str | None, inputs: dict[str... function _read_file_as_bytes (line 205) | def _read_file_as_bytes(file_path: str) -> bytes: class AsyncExecutor (line 221) | class AsyncExecutor: method __init__ (line 230) | def __init__(self, graph: Graph): method _get_client_for_gradio_node (line 233) | def _get_client_for_gradio_node( method _get_client (line 274) | def _get_client(self, session: ExecutionSession, node_name: str): method _get_scattered_input_edges (line 290) | def _get_scattered_input_edges(self, node_name: str) -> list: method _get_gathered_input_edges (line 297) | def _get_gathered_input_edges(self, node_name: str) -> list: method _prepare_inputs (line 304) | def _prepare_inputs( method _execute_single_node_sync (line 359) | def _execute_single_node_sync( method _execute_variant_node_sync (line 451) | def _execute_variant_node_sync( method execute_node (line 536) | async def execute_node( method _execute_scattered_node (line 594) | async def _execute_scattered_node( method _wrap_file_input (line 677) | def _wrap_file_input(self, value: Any) -> Any: method _save_data_url_to_file (line 693) | def _save_data_url_to_file(self, data_url: str) -> str | None: method _apply_postprocess (line 723) | def _apply_postprocess(self, postprocess, raw_result: Any) -> Any: method _extract_file_urls (line 728) | def _extract_file_urls(self, data: Any, hf_token: str | None = None) -... method _map_gradio_result (line 739) | def _map_gradio_result( method _map_fn_result (line 764) | def _map_fn_result(self, node, raw_result: Any) -> dict[str, Any]: method _map_inference_result (line 783) | def _map_inference_result(self, node, raw_result: Any) -> dict[str, Any]: method execute_all (line 794) | async def execute_all( class SequentialExecutor (line 807) | class SequentialExecutor: method __init__ (line 814) | def __init__(self, graph: Graph, hf_token: str | None = None): method results (line 820) | def results(self) -> dict[str, Any]: method results (line 824) | def results(self, value: dict[str, Any]): method selected_variants (line 828) | def selected_variants(self) -> dict[str, int]: method selected_variants (line 832) | def selected_variants(self, value: dict[str, int]): method set_hf_token (line 835) | def set_hf_token(self, token: str | None): method execute_node (line 838) | def execute_node( method execute_all (line 850) | def execute_all(self, entry_inputs: dict[str, dict[str, Any]]) -> dict... FILE: daggr/frontend/src/types.ts type Port (line 1) | interface Port { type GradioComponentData (line 6) | interface GradioComponentData { type MapItem (line 14) | interface MapItem { type ItemListItem (line 22) | interface ItemListItem { type NodeVariant (line 27) | interface NodeVariant { type GraphNode (line 33) | interface GraphNode { type GraphEdge (line 56) | interface GraphEdge { type CanvasData (line 66) | interface CanvasData { FILE: daggr/graph.py function _parse_space_id (line 29) | def _parse_space_id(src: str) -> str | None: function _get_dependency_id (line 40) | def _get_dependency_id(node) -> tuple[str | None, str]: function _fetch_current_sha (line 49) | def _fetch_current_sha(dep_id: str, dep_type: str) -> str | None: function _duplicate_space_at_revision (line 66) | def _duplicate_space_at_revision( function _prompt_dependency_changes (line 104) | def _prompt_dependency_changes(changed: list[dict]) -> None: function _get_hf_username (line 183) | def _get_hf_username() -> str | None: class _Spinner (line 196) | class _Spinner: method __init__ (line 199) | def __init__(self, message: str): method _spin (line 207) | def _spin(self): method _finish (line 214) | def _finish(self, symbol: str, suffix: str = ""): method succeed (line 226) | def succeed(self, suffix: str = ""): method warn (line 229) | def warn(self, suffix: str = ""): function _get_node_display_label (line 233) | def _get_node_display_label(node) -> str: class Graph (line 244) | class Graph: method __init__ (line 260) | def __init__( method add (line 298) | def add(self, node: Node) -> Graph: method edge (line 313) | def edge(self, source: Port, target: Port) -> Graph: method _add_node (line 330) | def _add_node(self, node: Node) -> None: method _create_edges_from_port_connections (line 338) | def _create_edges_from_port_connections(self, node: Node) -> None: method _add_edge (line 363) | def _add_edge(self, edge: Edge) -> None: method get_entry_nodes (line 375) | def get_entry_nodes(self) -> list[Node]: method get_execution_order (line 383) | def get_execution_order(self) -> list[str]: method get_connections (line 387) | def get_connections(self) -> list[tuple]: method _validate_edges (line 391) | def _validate_edges(self) -> None: method launch (line 426) | def launch( method _prepare_local_nodes (line 472) | def _prepare_local_nodes(self) -> None: method _check_dependency_hashes (line 481) | def _check_dependency_hashes(self) -> None: method _startup_display (line 550) | def _startup_display(self) -> None: method get_subgraphs (line 656) | def get_subgraphs(self) -> list[set[str]]: method get_output_nodes (line 665) | def get_output_nodes(self) -> list[str]: method get_api_schema (line 673) | def get_api_schema(self) -> dict: method _get_component_type (line 735) | def _get_component_type(self, component) -> str: method __repr__ (line 766) | def __repr__(self): FILE: daggr/local_space.py function _get_spaces_cache_dir (line 26) | def _get_spaces_cache_dir() -> Path: function _get_logs_dir (line 30) | def _get_logs_dir() -> Path: function _get_space_dir (line 37) | def _get_space_dir(space_id: str) -> Path: function _get_metadata_path (line 46) | def _get_metadata_path(space_dir: Path) -> Path: function _hash_file (line 50) | def _hash_file(file_path: Path) -> str: function _find_free_port (line 56) | def _find_free_port(start: int = 7861, end: int = 7960) -> int: function _is_space_id (line 67) | def _is_space_id(src: str) -> bool: class LocalSpaceManager (line 73) | class LocalSpaceManager: method __init__ (line 74) | def __init__(self, node: GradioNode): method ensure_ready (line 84) | def ensure_ready(self) -> str: method _ensure_cloned (line 100) | def _ensure_cloned(self) -> None: method _get_sdk_version (line 133) | def _get_sdk_version(self) -> str | None: method _ensure_venv (line 155) | def _ensure_venv(self) -> None: method _launch_app (line 257) | def _launch_app(self) -> str: method _find_app_file (line 338) | def _find_app_file(self) -> Path | None: method _wait_for_ready (line 345) | def _wait_for_ready( method _load_metadata (line 416) | def _load_metadata(self) -> dict[str, Any] | None: method _save_metadata (line 424) | def _save_metadata(self, metadata: dict[str, Any]) -> None: method _get_log_path (line 428) | def _get_log_path(self, log_type: str) -> Path: method _log_to_file (line 435) | def _log_to_file(self, log_type: str, content: str) -> None: method _log_error (line 445) | def _log_error(self, error: Exception) -> None: function prepare_local_node (line 449) | def prepare_local_node(node: GradioNode) -> None: function get_local_client (line 479) | def get_local_client(node: GradioNode) -> Any: function cleanup_local_processes (line 491) | def cleanup_local_processes() -> None: FILE: daggr/node.py function _warn_if_type_set (line 33) | def _warn_if_type_set(component: Any, port_name: str) -> None: function _is_gradio_component (line 52) | def _is_gradio_component(obj: Any) -> bool: class Node (line 77) | class Node(ABC): method __init__ (line 92) | def __init__(self, name: str | None = None): method name (line 106) | def name(self) -> str: method name (line 110) | def name(self, value: str) -> None: method __getattr__ (line 114) | def __getattr__(self, name: str) -> Port: method __dir__ (line 119) | def __dir__(self) -> list[str]: method __or__ (line 123) | def __or__(self, other: Node) -> ChoiceNode: method _inputs (line 137) | def _inputs(self) -> PortNamespace: method _outputs (line 141) | def _outputs(self) -> PortNamespace: method _default_output_port (line 144) | def _default_output_port(self) -> Port: method _default_input_port (line 149) | def _default_input_port(self) -> Port: method _validate_ports (line 154) | def _validate_ports(self): method _process_inputs (line 163) | def _process_inputs(self, inputs: dict[str, Any]) -> None: method _process_outputs (line 174) | def _process_outputs(self, outputs: dict[str, Any]) -> None: method test (line 181) | def test(self, **inputs) -> dict[str, Any]: method _generate_example_inputs (line 214) | def _generate_example_inputs(self) -> dict[str, Any]: method __repr__ (line 239) | def __repr__(self): class ChoiceNode (line 243) | class ChoiceNode(Node): method __init__ (line 262) | def __init__( method _compute_union_output_ports (line 285) | def _compute_union_output_ports(self) -> list[str]: method _compute_union_output_components (line 295) | def _compute_union_output_components(self) -> dict[str, Any]: method __or__ (line 303) | def __or__(self, other: Node) -> ChoiceNode: method __repr__ (line 308) | def __repr__(self): class GradioNode (line 313) | class GradioNode(Node): method __init__ (line 342) | def __init__( method _validate_space_format (line 382) | def _validate_space_format(self) -> None: method _get_api_info (line 390) | def _get_api_info(self) -> dict: method _validate_gradio_api (line 408) | def _validate_gradio_api( class InferenceNode (line 508) | class InferenceNode(Node): method __init__ (line 530) | def __init__( method _model_name_for_hub (line 567) | def _model_name_for_hub(self) -> str: method _provider (line 574) | def _provider(self) -> str | None: method _fetch_model_info (line 579) | def _fetch_model_info(self) -> None: class FnNode (line 612) | class FnNode(Node): method __init__ (line 660) | def __init__( method _discover_signature (line 696) | def _discover_signature(self): method _validate_fn_inputs (line 700) | def _validate_fn_inputs(self, inputs: dict[str, Any]) -> None: method _process_outputs (line 724) | def _process_outputs(self, outputs: dict[str, Any]) -> None: class InteractionNode (line 735) | class InteractionNode(Node): method __init__ (line 749) | def __init__( class InputNode (line 775) | class InputNode(Node): method __init__ (line 783) | def __init__( FILE: daggr/ops.py class ChooseOne (line 6) | class ChooseOne(InteractionNode): method __init__ (line 9) | def __init__(self, name: str | None = None): class Approve (line 19) | class Approve(InteractionNode): method __init__ (line 22) | def __init__(self, name: str | None = None): class TextInput (line 32) | class TextInput(InteractionNode): method __init__ (line 35) | def __init__(self, name: str | None = None, label: str = "Input"): class ImageInput (line 46) | class ImageInput(InteractionNode): method __init__ (line 49) | def __init__(self, name: str | None = None, label: str = "Image"): FILE: daggr/port.py class Port (line 15) | class Port: method __init__ (line 26) | def __init__(self, node: Node, name: str): method __repr__ (line 30) | def __repr__(self): method _as_source (line 33) | def _as_source(self) -> tuple[Node, str]: method _as_target (line 36) | def _as_target(self) -> tuple[Node, str]: method __getattr__ (line 39) | def __getattr__(self, attr: str) -> ScatteredPort: method each (line 52) | def each(self) -> ScatteredPort: method all (line 56) | def all(self) -> GatheredPort: class ScatteredPort (line 61) | class ScatteredPort: method __init__ (line 68) | def __init__(self, port: Port, item_key: str | None = None): method node (line 73) | def node(self): method name (line 77) | def name(self): method __getitem__ (line 80) | def __getitem__(self, key: str) -> ScatteredPort: method __repr__ (line 84) | def __repr__(self): class GatheredPort (line 90) | class GatheredPort: method __init__ (line 97) | def __init__(self, port: Port): method node (line 101) | def node(self): method name (line 105) | def name(self): method __repr__ (line 108) | def __repr__(self): function is_port (line 115) | def is_port(obj: Any) -> bool: class PortNamespace (line 120) | class PortNamespace: method __init__ (line 127) | def __init__(self, node: Node, port_names: list[str]): method __getattr__ (line 131) | def __getattr__(self, name: str) -> Port: method __dir__ (line 136) | def __dir__(self) -> list[str]: method __repr__ (line 139) | def __repr__(self): class ItemList (line 143) | class ItemList: method __init__ (line 157) | def __init__(self, **schema): FILE: daggr/server.py function _find_available_port (line 54) | def _find_available_port(host: str, start_port: int) -> int: function _get_theme (line 72) | def _get_theme(theme: "Theme | str | None") -> "Theme": class DaggrServer (line 109) | class DaggrServer: method __init__ (line 110) | def __init__( method _extract_token_from_header (line 126) | def _extract_token_from_header(self, authorization: str | None) -> str... method _validate_hf_token (line 131) | def _validate_hf_token(self, token: str) -> dict | None: method _setup_routes (line 144) | def _setup_routes(self): method _get_dev_html (line 619) | def _get_dev_html(self) -> str: method _get_node_url (line 644) | def _get_node_url(self, node) -> str | None: method _get_node_type (line 655) | def _get_node_type(self, node, node_name: str) -> str: method _has_scattered_input (line 674) | def _has_scattered_input(self, node_name: str) -> bool: method _get_scattered_edge (line 680) | def _get_scattered_edge(self, node_name: str): method _is_output_node (line 686) | def _is_output_node(self, node_name: str) -> bool: method _is_running_locally (line 689) | def _is_running_locally(self, node) -> bool: method _build_variant_data (line 694) | def _build_variant_data(self, variant, input_values: dict) -> dict[str... method _get_component_type (line 722) | def _get_component_type(self, component) -> str: method _serialize_component (line 752) | def _serialize_component(self, comp, port_name: str) -> dict[str, Any]: method _file_to_url (line 798) | def _file_to_url(self, value: Any) -> Any: method _validate_file_value (line 808) | def _validate_file_value(self, value: Any, comp_type: str) -> str | None: method _transform_file_paths (line 830) | def _transform_file_paths(self, data: Any) -> Any: method _transform_persisted_results (line 839) | def _transform_persisted_results( method _build_input_components (line 859) | def _build_input_components(self, node) -> list[dict[str, Any]]: method _build_output_components (line 867) | def _build_output_components( method _build_scattered_items (line 901) | def _build_scattered_items( method _serialize_item_list_schema (line 955) | def _serialize_item_list_schema( method _build_item_list_items (line 964) | def _build_item_list_items( method _apply_item_list_edits (line 983) | def _apply_item_list_edits( method _compute_node_depths (line 1005) | def _compute_node_depths(self) -> dict[str, int]: method _get_hf_user_info (line 1029) | def _get_hf_user_info(self) -> dict | None: method _build_graph_data (line 1046) | def _build_graph_data( method _get_ancestors (line 1393) | def _get_ancestors(self, node_name: str) -> list[str]: method _get_user_provided_output (line 1404) | def _get_user_provided_output( method _save_data_url_as_gradio_file (line 1429) | def _save_data_url_as_gradio_file(self, data_url: str): method _convert_urls_to_file_values (line 1454) | def _convert_urls_to_file_values(self, data: Any) -> Any: method _execute_to_node (line 1479) | async def _execute_to_node( method _execute_to_node_streaming (line 1576) | async def _execute_to_node_streaming( method _execute_workflow_api (line 1786) | async def _execute_workflow_api( method run (line 1883) | def run( class _Server (line 1972) | class _Server(uvicorn.Server): method install_signal_handlers (line 1973) | def install_signal_handlers(self): method run_in_thread (line 1976) | def run_in_thread(self): method close (line 1987) | def close(self): FILE: daggr/session.py class ConcurrencyManager (line 12) | class ConcurrencyManager: method __init__ (line 20) | def __init__(self): method get_semaphore (line 25) | async def get_semaphore( class ExecutionSession (line 50) | class ExecutionSession: method __init__ (line 61) | def __init__(self, graph: Graph, hf_token: str | None = None): method set_hf_token (line 73) | def set_hf_token(self, token: str | None): method clear_results (line 79) | def clear_results(self): method wait_for_node (line 84) | async def wait_for_node(self, node_name: str) -> bool: method start_node_execution (line 97) | async def start_node_execution(self, node_name: str) -> bool: method finish_node_execution (line 109) | async def finish_node_execution(self, node_name: str): FILE: daggr/state.py function get_daggr_cache_dir (line 14) | def get_daggr_cache_dir() -> Path: function get_daggr_files_dir (line 21) | def get_daggr_files_dir() -> Path: class SessionState (line 27) | class SessionState: method __init__ (line 28) | def __init__(self, db_path: str | None = None): method _init_db (line 34) | def _init_db(self): method _migrate_legacy_schema (line 105) | def _migrate_legacy_schema(self, cursor): method get_effective_user_id (line 170) | def get_effective_user_id(self, hf_user: dict | None = None) -> str | ... method create_sheet (line 178) | def create_sheet( method get_sheet_count (line 199) | def get_sheet_count(self, user_id: str, graph_name: str) -> int: method list_sheets (line 210) | def list_sheets(self, user_id: str, graph_name: str) -> list[dict[str,... method get_sheet (line 232) | def get_sheet(self, sheet_id: str) -> dict[str, Any] | None: method save_transform (line 260) | def save_transform(self, sheet_id: str, x: float, y: float, scale: flo... method rename_sheet (line 274) | def rename_sheet(self, sheet_id: str, new_name: str) -> bool: method delete_sheet (line 287) | def delete_sheet(self, sheet_id: str) -> bool: method get_or_create_sheet (line 298) | def get_or_create_sheet( method save_input (line 312) | def save_input(self, sheet_id: str, node_name: str, port_name: str, va... method get_inputs (line 331) | def get_inputs(self, sheet_id: str) -> dict[str, dict[str, Any]]: method save_result (line 347) | def save_result( method get_latest_result (line 372) | def get_latest_result(self, sheet_id: str, node_name: str) -> Any | None: method get_result_count (line 387) | def get_result_count(self, sheet_id: str, node_name: str) -> int: method get_result_by_index (line 398) | def get_result_by_index( method get_all_results (line 417) | def get_all_results(self, sheet_id: str) -> dict[str, list[Any]]: method get_sheet_state (line 439) | def get_sheet_state(self, sheet_id: str) -> dict[str, Any]: method clear_sheet_data (line 445) | def clear_sheet_data(self, sheet_id: str): method create_session (line 453) | def create_session(self, graph_name: str) -> str: method get_or_create_session (line 456) | def get_or_create_session(self, session_id: str | None, graph_name: st... FILE: examples/03_mock_podcast_app.py function generate_dialogue (line 50) | def generate_dialogue(topic: str) -> list: function chatterbox (line 74) | def chatterbox(text: str, speaker: str, host_audio: str, guest_audio: st... function combine_audio_files (line 93) | def combine_audio_files(audio_files: list[str]) -> str: FILE: examples/04_complete_podcast_app.py function generate_dialogue (line 50) | def generate_dialogue(topic: str) -> list: function chatterbox (line 74) | def chatterbox(text: str, speaker: str, host_audio: str, guest_audio: st... function combine_audio_files (line 93) | def combine_audio_files(audio_files: list[str]) -> str: FILE: examples/06_pig_latin_voice_app.py function pig_latin_sentence (line 17) | def pig_latin_sentence(text: str) -> str: FILE: examples/07_image_to_3d_app.py function downscale_image_to_file (line 12) | def downscale_image_to_file(image: Any, scale: float = 0.25) -> str | None: FILE: examples/09_slideshow_app.py function resize_image (line 11) | def resize_image(image_path: str, size: int = 256) -> str: function concat_videos (line 256) | def concat_videos(v1: str, v2: str, v3: str, v4: str) -> str: FILE: examples/10_real_podcast_app.py function extract_content (line 7) | def extract_content(url: str, custom_text: str) -> tuple[str, str]: function generate_dialogue (line 76) | def generate_dialogue( function generate_all_voice_segments (line 217) | def generate_all_voice_segments(dialogue: list) -> list: function combine_podcast (line 257) | def combine_podcast( FILE: examples/11_viral_content_generator_app.py function expand_content_idea (line 9) | def expand_content_idea( function package_content (line 159) | def package_content( FILE: examples/12_ecommerce_product_generator_app.py function ensure_image_path (line 7) | def ensure_image_path(inputs, key="image"): function ensure_image_dict (line 15) | def ensure_image_dict(inputs, key="f"): function postprocess_flux (line 31) | def postprocess_flux(result, seed): FILE: examples/13_accessible_image_description_app.py function postprocess_flux (line 7) | def postprocess_flux(result, seed): function preprocess_moondream (line 22) | def preprocess_moondream(inputs): FILE: examples/14_food_nutrition_analyzer_app.py function ensure_image_path (line 8) | def ensure_image_path(inputs, key="image"): function create_nutrition_report (line 15) | def create_nutrition_report(food_items: str, nutrition_analysis: str) ->... function extract_calorie_summary (line 100) | def extract_calorie_summary(nutrition_analysis: str) -> str: FILE: tests/test_api.py class TestWorkflowAPI (line 8) | class TestWorkflowAPI: method test_simple_two_node_workflow_api (line 9) | def test_simple_two_node_workflow_api(self): method test_multi_node_chain_workflow_api (line 51) | def test_multi_node_chain_workflow_api(self): FILE: tests/test_basic.py function test_basic (line 7) | def test_basic(): function test_edge_api_with_typed_ports (line 11) | def test_edge_api_with_typed_ports(): function test_port_validation (line 33) | def test_port_validation(): FILE: tests/test_cache.py function test_cache_directories_respect_hf_home_env_var (line 15) | def test_cache_directories_respect_hf_home_env_var(): FILE: tests/test_executor.py class TestSequentialExecutor (line 5) | class TestSequentialExecutor: method test_execute_single_fn_node (line 6) | def test_execute_single_fn_node(self): method test_execute_chain (line 16) | def test_execute_chain(self): method test_execute_all (line 31) | def test_execute_all(self): method test_fn_result_mapping_tuple (line 46) | def test_fn_result_mapping_tuple(self): method test_user_input_override (line 59) | def test_user_input_override(self): method test_callable_fixed_input (line 69) | def test_callable_fixed_input(self): FILE: tests/test_nodes.py class TestComponentTypeWarning (line 7) | class TestComponentTypeWarning: method test_warns_when_type_explicitly_set (line 8) | def test_warns_when_type_explicitly_set(self): method test_no_warning_when_type_not_set (line 18) | def test_no_warning_when_type_not_set(self): class TestFnNode (line 32) | class TestFnNode: method test_creates_from_function (line 33) | def test_creates_from_function(self): method test_custom_name (line 43) | def test_custom_name(self): method test_explicit_inputs (line 50) | def test_explicit_inputs(self): method test_invalid_input_raises_error (line 59) | def test_invalid_input_raises_error(self): method test_item_list_output (line 67) | def test_item_list_output(self): class TestInteractionNode (line 77) | class TestInteractionNode: method test_default_ports (line 78) | def test_default_ports(self): method test_custom_interaction_type (line 83) | def test_custom_interaction_type(self): class TestChoiceNodeName (line 88) | class TestChoiceNodeName: method test_choice_node_uses_custom_name_in_graph (line 89) | def test_choice_node_uses_custom_name_in_graph(self): class TestPort (line 106) | class TestPort: method test_port_access (line 107) | def test_port_access(self): method test_scattered_port (line 117) | def test_scattered_port(self): method test_scattered_port_with_key (line 126) | def test_scattered_port_with_key(self): class TestGraphConstruction (line 136) | class TestGraphConstruction: method test_requires_name (line 137) | def test_requires_name(self): method test_persist_key_derived_from_name (line 143) | def test_persist_key_derived_from_name(self): method test_persist_key_disabled (line 147) | def test_persist_key_disabled(self): method test_persist_key_custom (line 151) | def test_persist_key_custom(self): method test_add_nodes_from_init (line 155) | def test_add_nodes_from_init(self): method test_cycle_detection (line 168) | def test_cycle_detection(self): method test_execution_order (line 182) | def test_execution_order(self): method test_get_connections (line 202) | def test_get_connections(self): FILE: tests/test_persistence.py function state (line 10) | def state(): function test_create_sheet (line 18) | def test_create_sheet(state): function test_list_sheets_by_user (line 29) | def test_list_sheets_by_user(state): function test_rename_sheet (line 43) | def test_rename_sheet(state): function test_save_and_load_inputs (line 53) | def test_save_and_load_inputs(state): function test_save_and_load_results (line 67) | def test_save_and_load_results(state): function test_user_isolation (line 83) | def test_user_isolation(state): function test_local_user_fallback (line 103) | def test_local_user_fallback(state, monkeypatch): function test_spaces_requires_login (line 113) | def test_spaces_requires_login(state, monkeypatch): function test_delete_sheet (line 123) | def test_delete_sheet(state): FILE: tests/test_server.py function server (line 11) | def server(): function test_file_to_url_converts_windows_paths (line 16) | def test_file_to_url_converts_windows_paths(server): function test_file_to_url_converts_real_file_paths (line 27) | def test_file_to_url_converts_real_file_paths(server, tmp_path): FILE: tests/ui/conftest.py function temp_db (line 10) | def temp_db(): function browser (line 21) | def browser() -> Generator[Browser, None, None]: function page (line 29) | def page( function pytest_addoption (line 48) | def pytest_addoption(parser: pytest.Parser): FILE: tests/ui/helpers.py function find_available_port (line 13) | def find_available_port() -> int: class TestServer (line 19) | class TestServer(uvicorn.Server): method install_signal_handlers (line 20) | def install_signal_handlers(self): method run_in_thread (line 23) | def run_in_thread(self): method close (line 32) | def close(self): function launch_daggr_server (line 37) | def launch_daggr_server( function wait_for_graph_load (line 55) | def wait_for_graph_load(page: Page, timeout: int = 15000): FILE: tests/ui/test_basic.py function test_nodes_and_edges_render (line 8) | def test_nodes_and_edges_render(page: Page, temp_db: str): function test_run_workflow_produces_output (line 49) | def test_run_workflow_produces_output(page: Page, temp_db: str): function test_input_node_accepts_value (line 87) | def test_input_node_accepts_value(page: Page, temp_db: str): FILE: tests/ui/test_cancel.py function test_cancel_running_node (line 10) | def test_cancel_running_node(page: Page, temp_db: str): FILE: tests/ui/test_dependency_hash.py function test_dependency_hash_auto_update_on_stale_cache (line 10) | def test_dependency_hash_auto_update_on_stale_cache(page: Page, temp_db:... FILE: tests/ui/test_image_fix.py function test_image_initial_value_and_none_input (line 16) | def test_image_initial_value_and_none_input(page: Page, temp_db: str): FILE: tests/ui/test_images.py function test_image_output_displays (line 12) | def test_image_output_displays(page: Page, temp_db: str): function test_image_input_and_output (line 55) | def test_image_input_and_output(page: Page, temp_db: str): function test_multiple_outputs_with_image (line 82) | def test_multiple_outputs_with_image(page: Page, temp_db: str): FILE: tests/ui/test_run_mode.py function test_run_mode_dropdown_and_single_step (line 10) | def test_run_mode_dropdown_and_single_step(page: Page, temp_db: str): FILE: tests/ui/test_sheets.py function test_sheets_ui_elements_present (line 8) | def test_sheets_ui_elements_present(page: Page, temp_db: str): function test_create_new_sheet (line 36) | def test_create_new_sheet(page: Page, temp_db: str): function test_switch_between_sheets (line 74) | def test_switch_between_sheets(page: Page, temp_db: str): function test_result_persists_on_sheet (line 149) | def test_result_persists_on_sheet(page: Page, temp_db: str): FILE: tests/ui/test_theme.py function test_theme_support (line 8) | def test_theme_support(page: Page, temp_db: str):