diff --git a/marimo/__main__.py b/marimo/__main__.py index fb6cadec86c..e6fbd7a4c2d 100644 --- a/marimo/__main__.py +++ b/marimo/__main__.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + from marimo._cli.cli import main if __name__ == "__main__": diff --git a/marimo/_ai/_tools/tools/notebooks.py b/marimo/_ai/_tools/tools/notebooks.py index 1ea0b368334..0d2d1b6553d 100644 --- a/marimo/_ai/_tools/tools/notebooks.py +++ b/marimo/_ai/_tools/tools/notebooks.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from dataclasses import dataclass, field from typing import Optional diff --git a/marimo/_ai/_tools/tools/tables_and_variables.py b/marimo/_ai/_tools/tools/tables_and_variables.py index c763afcf95e..1b31008e73b 100644 --- a/marimo/_ai/_tools/tools/tables_and_variables.py +++ b/marimo/_ai/_tools/tools/tables_and_variables.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from dataclasses import dataclass, field from typing import Optional @@ -63,7 +65,7 @@ def handle(self, args: TablesAndVariablesArgs) -> TablesAndVariablesOutput: return self._get_tables_and_variables(session, args.variable_names) def _get_tables_and_variables( - self, session: "Session", variable_names: list[str] + self, session: Session, variable_names: list[str] ) -> TablesAndVariablesOutput: session_view = session.session_view # convert to set for O(1) lookup diff --git a/marimo/_ai/_tools/tools_registry.py b/marimo/_ai/_tools/tools_registry.py index 3a6000c39af..2025d22b041 100644 --- a/marimo/_ai/_tools/tools_registry.py +++ b/marimo/_ai/_tools/tools_registry.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from typing import Any from marimo._ai._tools.base import ToolBase diff --git a/marimo/_ai/llm/__init__.py b/marimo/_ai/llm/__init__.py index 6f596dc9fa7..e35c3a176ab 100644 --- a/marimo/_ai/llm/__init__.py +++ b/marimo/_ai/llm/__init__.py @@ -1,4 +1,5 @@ # Copyright 2025 Marimo. All rights reserved. + from marimo._ai.llm._impl import anthropic, bedrock, google, groq, openai __all__ = ["openai", "anthropic", "google", "groq", "bedrock"] diff --git a/marimo/_ast/__init__.py b/marimo/_ast/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_ast/__init__.py +++ b/marimo/_ast/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_ast/app_config.py b/marimo/_ast/app_config.py index 15bd1018be2..fe7b9054114 100644 --- a/marimo/_ast/app_config.py +++ b/marimo/_ast/app_config.py @@ -1,4 +1,5 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations import os from dataclasses import asdict, dataclass, field @@ -43,7 +44,7 @@ class _AppConfig: @staticmethod def from_untrusted_dict( updates: dict[str, Any], silent: bool = False - ) -> "_AppConfig": + ) -> _AppConfig: # Certain flags are useful to pass to App for construction, but # shouldn't make it into the config. (e.g. the _filename flag is # internal) @@ -65,7 +66,7 @@ def asdict(self) -> dict[str, Any]: k: v for (k, v) in asdict(self).items() if not k.startswith("_") } - def update(self, updates: dict[str, Any]) -> "_AppConfig": + def update(self, updates: dict[str, Any]) -> _AppConfig: config_dict = asdict(self) for key in updates: if key in config_dict: diff --git a/marimo/_ast/cell_id.py b/marimo/_ast/cell_id.py index 7cb7a777491..90bb86fa262 100644 --- a/marimo/_ast/cell_id.py +++ b/marimo/_ast/cell_id.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + import random import string from uuid import UUID, uuid4 diff --git a/marimo/_ast/errors.py b/marimo/_ast/errors.py index df1d9e34136..4d39657f4f7 100644 --- a/marimo/_ast/errors.py +++ b/marimo/_ast/errors.py @@ -1,4 +1,5 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations class SetupRootError(Exception): diff --git a/marimo/_ast/names.py b/marimo/_ast/names.py index 40dc06af418..1a9acc4f68c 100644 --- a/marimo/_ast/names.py +++ b/marimo/_ast/names.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + DEFAULT_CELL_NAME = "_" SETUP_CELL_NAME = "setup" # Intentionally an invalid name character diff --git a/marimo/_ast/sql_utils.py b/marimo/_ast/sql_utils.py index 4b06e6202d2..736594b76ad 100644 --- a/marimo/_ast/sql_utils.py +++ b/marimo/_ast/sql_utils.py @@ -1,4 +1,5 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations from typing import Literal, Optional, Union diff --git a/marimo/_cli/__init__.py b/marimo/_cli/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_cli/__init__.py +++ b/marimo/_cli/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_cli/cli_validators.py b/marimo/_cli/cli_validators.py index bf7f1f2e81e..84bd8643976 100644 --- a/marimo/_cli/cli_validators.py +++ b/marimo/_cli/cli_validators.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + from pathlib import Path from typing import Any, Optional diff --git a/marimo/_cli/export/cloudflare.py b/marimo/_cli/export/cloudflare.py index 43624805a8a..5caa7313ef1 100644 --- a/marimo/_cli/export/cloudflare.py +++ b/marimo/_cli/export/cloudflare.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from pathlib import Path from marimo._cli.print import bold, echo, green diff --git a/marimo/_cli/utils.py b/marimo/_cli/utils.py index 13152b34566..98b3c7179e5 100644 --- a/marimo/_cli/utils.py +++ b/marimo/_cli/utils.py @@ -1,12 +1,16 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations -from pathlib import Path from sys import stdout +from typing import TYPE_CHECKING import click from marimo._config.settings import GLOBAL_SETTINGS +if TYPE_CHECKING: + from pathlib import Path + def prompt_to_overwrite(path: Path) -> bool: if GLOBAL_SETTINGS.YES: diff --git a/marimo/_config/__init__.py b/marimo/_config/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_config/__init__.py +++ b/marimo/_config/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_convert/notebook.py b/marimo/_convert/notebook.py index 019c33f76d9..b67a645416f 100644 --- a/marimo/_convert/notebook.py +++ b/marimo/_convert/notebook.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from marimo._schemas.notebook import ( NotebookCell, NotebookCellConfig, diff --git a/marimo/_entrypoints/ids.py b/marimo/_entrypoints/ids.py index 066eb6c253d..829f0140715 100644 --- a/marimo/_entrypoints/ids.py +++ b/marimo/_entrypoints/ids.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from typing import Literal # Internal entrypoints. Not user-facing as the API is not stable. diff --git a/marimo/_entrypoints/registry.py b/marimo/_entrypoints/registry.py index f85239b4817..4cc3ef72c5e 100644 --- a/marimo/_entrypoints/registry.py +++ b/marimo/_entrypoints/registry.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + import os from importlib.metadata import entry_points from typing import TYPE_CHECKING, Generic, Optional, TypeVar, cast @@ -150,7 +152,7 @@ def __repr__(self) -> str: return f"{type(self).__name__}(group={self.entry_point_group!r}, registered={self.names()!r})" -def get_entry_points(group: KnownEntryPoint) -> "EntryPoints": +def get_entry_points(group: KnownEntryPoint) -> EntryPoints: ep = entry_points() if hasattr(ep, "select"): return ep.select(group=group) diff --git a/marimo/_islands/__init__.py b/marimo/_islands/__init__.py index 93169d35985..2f0bfdfd4f5 100644 --- a/marimo/_islands/__init__.py +++ b/marimo/_islands/__init__.py @@ -1,4 +1,5 @@ # Copyright 2024 Marimo. All rights reserved. + __all__ = [ "MarimoIslandGenerator", "MarimoIslandStub", diff --git a/marimo/_lint/formatters/__init__.py b/marimo/_lint/formatters/__init__.py index 93eea1e4d69..9dd5c957484 100644 --- a/marimo/_lint/formatters/__init__.py +++ b/marimo/_lint/formatters/__init__.py @@ -1,6 +1,8 @@ # Copyright 2025 Marimo. All rights reserved. """Formatters for diagnostic output.""" +from __future__ import annotations + from marimo._lint.formatters.base import DiagnosticFormatter from marimo._lint.formatters.full import FullFormatter from marimo._lint.formatters.json import ( diff --git a/marimo/_lint/rules/__init__.py b/marimo/_lint/rules/__init__.py index 9d895d72f28..2e085b1903e 100644 --- a/marimo/_lint/rules/__init__.py +++ b/marimo/_lint/rules/__init__.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from marimo._lint.rules.base import LintRule from marimo._lint.rules.breaking import BREAKING_RULE_CODES from marimo._lint.rules.formatting import FORMATTING_RULE_CODES diff --git a/marimo/_lint/rules/breaking/__init__.py b/marimo/_lint/rules/breaking/__init__.py index 4868f1c8dcc..ca0c429d980 100644 --- a/marimo/_lint/rules/breaking/__init__.py +++ b/marimo/_lint/rules/breaking/__init__.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from marimo._lint.rules.base import LintRule from marimo._lint.rules.breaking.graph import ( CycleDependenciesRule, diff --git a/marimo/_lint/rules/formatting/__init__.py b/marimo/_lint/rules/formatting/__init__.py index 977c612def7..cd79b20446d 100644 --- a/marimo/_lint/rules/formatting/__init__.py +++ b/marimo/_lint/rules/formatting/__init__.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from marimo._lint.rules.base import LintRule, UnsafeFixRule from marimo._lint.rules.formatting.empty_cells import EmptyCellRule from marimo._lint.rules.formatting.general import GeneralFormattingRule diff --git a/marimo/_lint/rules/runtime/__init__.py b/marimo/_lint/rules/runtime/__init__.py index c28451c72e7..efa4ff76db3 100644 --- a/marimo/_lint/rules/runtime/__init__.py +++ b/marimo/_lint/rules/runtime/__init__.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from marimo._lint.rules.base import LintRule from marimo._lint.rules.runtime.self_import import SelfImportRule diff --git a/marimo/_lint/visitors.py b/marimo/_lint/visitors.py index 71a444ecfdf..2397c718d07 100644 --- a/marimo/_lint/visitors.py +++ b/marimo/_lint/visitors.py @@ -1,6 +1,8 @@ # Copyright 2025 Marimo. All rights reserved. """AST visitors for linting purposes.""" +from __future__ import annotations + import ast from typing import Optional diff --git a/marimo/_mcp/server/lifespan.py b/marimo/_mcp/server/lifespan.py index 804ff35fabb..478d516ecb4 100644 --- a/marimo/_mcp/server/lifespan.py +++ b/marimo/_mcp/server/lifespan.py @@ -1,6 +1,7 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + import contextlib -from collections.abc import AsyncIterator from typing import TYPE_CHECKING from marimo._loggers import marimo_logger @@ -8,11 +9,13 @@ LOGGER = marimo_logger() if TYPE_CHECKING: + from collections.abc import AsyncIterator + from starlette.applications import Starlette @contextlib.asynccontextmanager -async def mcp_server_lifespan(app: "Starlette") -> AsyncIterator[None]: +async def mcp_server_lifespan(app: Starlette) -> AsyncIterator[None]: """Lifespan for MCP server functionality (exposing marimo as MCP server).""" try: diff --git a/marimo/_mcp/server/main.py b/marimo/_mcp/server/main.py index 0538ec2293a..bdbff1f3da1 100644 --- a/marimo/_mcp/server/main.py +++ b/marimo/_mcp/server/main.py @@ -6,6 +6,8 @@ notebook context and functionality. """ +from __future__ import annotations + from typing import TYPE_CHECKING from marimo._ai._tools.base import ToolContext @@ -17,9 +19,10 @@ if TYPE_CHECKING: from starlette.applications import Starlette + from starlette.types import Receive, Scope, Send -def setup_mcp_server(app: "Starlette") -> None: +def setup_mcp_server(app: Starlette) -> None: """Create and configure MCP server for marimo integration. Args: @@ -34,7 +37,6 @@ def setup_mcp_server(app: "Starlette") -> None: from starlette.middleware.base import BaseHTTPMiddleware from starlette.responses import JSONResponse from starlette.routing import Mount - from starlette.types import Receive, Scope, Send mcp = FastMCP( "marimo-mcp-server", diff --git a/marimo/_messaging/__init__.py b/marimo/_messaging/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_messaging/__init__.py +++ b/marimo/_messaging/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_output/formatters/__init__.py b/marimo/_output/formatters/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_output/formatters/__init__.py +++ b/marimo/_output/formatters/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_output/justify.py b/marimo/_output/justify.py index 96d65b48128..3a73fc51c84 100644 --- a/marimo/_output/justify.py +++ b/marimo/_output/justify.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + from marimo._output.formatting import as_html from marimo._output.hypertext import Html from marimo._output.rich_help import mddoc diff --git a/marimo/_output/md_extensions/breakless_lists.py b/marimo/_output/md_extensions/breakless_lists.py index 78a981506ed..e200a2456bb 100644 --- a/marimo/_output/md_extensions/breakless_lists.py +++ b/marimo/_output/md_extensions/breakless_lists.py @@ -1,7 +1,8 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations import re -from xml.etree.ElementTree import Element +from typing import TYPE_CHECKING from markdown import ( # type: ignore Extension, @@ -10,6 +11,9 @@ treeprocessors, ) +if TYPE_CHECKING: + from xml.etree.ElementTree import Element + class BreaklessListsPreprocessor(preprocessors.Preprocessor): # type: ignore[misc] """ diff --git a/marimo/_output/md_extensions/external_links.py b/marimo/_output/md_extensions/external_links.py index c15d43b602b..b97238fc487 100644 --- a/marimo/_output/md_extensions/external_links.py +++ b/marimo/_output/md_extensions/external_links.py @@ -1,9 +1,14 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + +from typing import TYPE_CHECKING from urllib.parse import urlparse -from xml.etree.ElementTree import Element from markdown import Extension, Markdown, treeprocessors # type: ignore +if TYPE_CHECKING: + from xml.etree.ElementTree import Element + # Adapted from https://github.com/squidfunk/mkdocs-material/discussions/3660#discussioncomment-6725823 # noqa: E501 diff --git a/marimo/_output/md_extensions/flexible_indent.py b/marimo/_output/md_extensions/flexible_indent.py index efc674f3824..8c4f304fdcf 100644 --- a/marimo/_output/md_extensions/flexible_indent.py +++ b/marimo/_output/md_extensions/flexible_indent.py @@ -1,4 +1,5 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations import re diff --git a/marimo/_output/superjson.py b/marimo/_output/superjson.py index 4caa930aa02..e0983bf606f 100644 --- a/marimo/_output/superjson.py +++ b/marimo/_output/superjson.py @@ -1,5 +1,7 @@ # Copyright 2025 Marimo. All rights reserved. # This data serializes +from __future__ import annotations + from typing import Any diff --git a/marimo/_plugins/__init__.py b/marimo/_plugins/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_plugins/__init__.py +++ b/marimo/_plugins/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_plugins/stateless/__init__.py b/marimo/_plugins/stateless/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_plugins/stateless/__init__.py +++ b/marimo/_plugins/stateless/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_plugins/ui/_core/__init__.py b/marimo/_plugins/ui/_core/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_plugins/ui/_core/__init__.py +++ b/marimo/_plugins/ui/_core/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_plugins/ui/_impl/__init__.py b/marimo/_plugins/ui/_impl/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_plugins/ui/_impl/__init__.py +++ b/marimo/_plugins/ui/_impl/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_plugins/ui/_impl/chat/__init__.py b/marimo/_plugins/ui/_impl/chat/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_plugins/ui/_impl/chat/__init__.py +++ b/marimo/_plugins/ui/_impl/chat/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_plugins/ui/_impl/dataframes/__init__.py b/marimo/_plugins/ui/_impl/dataframes/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_plugins/ui/_impl/dataframes/__init__.py +++ b/marimo/_plugins/ui/_impl/dataframes/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_pyodide/restartable_task.py b/marimo/_pyodide/restartable_task.py index bb7dee8c198..ec17680fdb0 100644 --- a/marimo/_pyodide/restartable_task.py +++ b/marimo/_pyodide/restartable_task.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + import asyncio from typing import Any, Callable, Optional diff --git a/marimo/_runtime/__init__.py b/marimo/_runtime/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_runtime/__init__.py +++ b/marimo/_runtime/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_runtime/context/__init__.py b/marimo/_runtime/context/__init__.py index ffbda592dcd..da2f1db9d32 100644 --- a/marimo/_runtime/context/__init__.py +++ b/marimo/_runtime/context/__init__.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + __all__ = [ "get_context", "safe_get_context", diff --git a/marimo/_runtime/handlers.py b/marimo/_runtime/handlers.py index 4a57b72e018..bf795c9f3eb 100644 --- a/marimo/_runtime/handlers.py +++ b/marimo/_runtime/handlers.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + import os from dataclasses import dataclass from typing import TYPE_CHECKING, Any, Callable @@ -34,7 +36,7 @@ def interrupt_handler(signum: int, frame: Any) -> None: return interrupt_handler -def construct_sigterm_handler(kernel: "Kernel") -> Callable[[int, Any], None]: +def construct_sigterm_handler(kernel: Kernel) -> Callable[[int, Any], None]: del kernel @dataclass diff --git a/marimo/_runtime/input_override.py b/marimo/_runtime/input_override.py index 0362ae72e75..264cc291d3f 100644 --- a/marimo/_runtime/input_override.py +++ b/marimo/_runtime/input_override.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + import functools import sys diff --git a/marimo/_runtime/packages/package_managers.py b/marimo/_runtime/packages/package_managers.py index bea79658645..157668d0075 100644 --- a/marimo/_runtime/packages/package_managers.py +++ b/marimo/_runtime/packages/package_managers.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + from marimo._runtime.packages.conda_package_manager import PixiPackageManager from marimo._runtime.packages.package_manager import PackageManager from marimo._runtime.packages.pypi_package_manager import ( diff --git a/marimo/_runtime/reload/__init__.py b/marimo/_runtime/reload/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_runtime/reload/__init__.py +++ b/marimo/_runtime/reload/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_runtime/runner/__init__.py b/marimo/_runtime/runner/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_runtime/runner/__init__.py +++ b/marimo/_runtime/runner/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_runtime/runner/hooks.py b/marimo/_runtime/runner/hooks.py index a93f3734948..9ebda90d691 100644 --- a/marimo/_runtime/runner/hooks.py +++ b/marimo/_runtime/runner/hooks.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + __all__ = [ # hooks to run before the runner starts running its subgraph "PREPARATION_HOOKS", diff --git a/marimo/_runtime/watch/__init__.py b/marimo/_runtime/watch/__init__.py index 3ac28b6a1d4..dcefc2ffd5f 100644 --- a/marimo/_runtime/watch/__init__.py +++ b/marimo/_runtime/watch/__init__.py @@ -1,4 +1,5 @@ # Copyright 2025 Marimo. All rights reserved. + from marimo._runtime.watch._directory import directory from marimo._runtime.watch._file import file diff --git a/marimo/_save/__init__.py b/marimo/_save/__init__.py index 1369e9eed5d..c57b3d3b08e 100644 --- a/marimo/_save/__init__.py +++ b/marimo/_save/__init__.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + import marimo._save.cache as _cache_module # prevent variable shadowing from marimo._save.cache import MARIMO_CACHE_VERSION from marimo._save.save import cache, lru_cache, persistent_cache diff --git a/marimo/_save/loaders/__init__.py b/marimo/_save/loaders/__init__.py index 62bfaba0fbe..3a596e85dae 100644 --- a/marimo/_save/loaders/__init__.py +++ b/marimo/_save/loaders/__init__.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + from typing import Literal from marimo._save.loaders.json import JsonLoader diff --git a/marimo/_save/stores/__init__.py b/marimo/_save/stores/__init__.py index c37e5dafcd2..0125465bd1f 100644 --- a/marimo/_save/stores/__init__.py +++ b/marimo/_save/stores/__init__.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + import copy from typing import Optional, cast diff --git a/marimo/_server/__init__.py b/marimo/_server/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_server/__init__.py +++ b/marimo/_server/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_server/ai/constants.py b/marimo/_server/ai/constants.py index a976d44bd13..c3e05e7bf30 100644 --- a/marimo/_server/ai/constants.py +++ b/marimo/_server/ai/constants.py @@ -1,3 +1,5 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + DEFAULT_MAX_TOKENS = 4096 DEFAULT_MODEL = "openai/gpt-4o" diff --git a/marimo/_server/ai/ids.py b/marimo/_server/ai/ids.py index 7ccc3fa4160..f00f0a0dafe 100644 --- a/marimo/_server/ai/ids.py +++ b/marimo/_server/ai/ids.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from dataclasses import dataclass from typing import NewType @@ -23,7 +25,7 @@ def __repr__(self) -> str: return f"AiModelId(provider={self.provider}, model={self.model})" @staticmethod - def from_model(model_id: str) -> "AiModelId": + def from_model(model_id: str) -> AiModelId: if "/" not in model_id: LOGGER.warning( f"Invalid model ID: {model_id}. Model ID must be in the format /" diff --git a/marimo/_server/ai/mcp/__init__.py b/marimo/_server/ai/mcp/__init__.py index 8829b786185..078a43280a2 100644 --- a/marimo/_server/ai/mcp/__init__.py +++ b/marimo/_server/ai/mcp/__init__.py @@ -1,6 +1,8 @@ # Copyright 2024 Marimo. All rights reserved. """MCP (Model Context Protocol) client implementation for marimo.""" +from __future__ import annotations + from marimo._server.ai.mcp.client import ( MCPClient, MCPServerConnection, diff --git a/marimo/_server/ai/tools/types.py b/marimo/_server/ai/tools/types.py index 291b2f10e93..7bc715ef838 100644 --- a/marimo/_server/ai/tools/types.py +++ b/marimo/_server/ai/tools/types.py @@ -1,4 +1,5 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations from dataclasses import dataclass from typing import Any, Callable, Literal, Optional, TypeVar diff --git a/marimo/_server/codes.py b/marimo/_server/codes.py index 9e7dc84d10d..d99086dbc1d 100644 --- a/marimo/_server/codes.py +++ b/marimo/_server/codes.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from enum import IntEnum diff --git a/marimo/_server/exceptions.py b/marimo/_server/exceptions.py index 96dff37a7c8..2633be99196 100644 --- a/marimo/_server/exceptions.py +++ b/marimo/_server/exceptions.py @@ -1,4 +1,7 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + + class InvalidSessionException(Exception): def __init__(self, message: str) -> None: super().__init__(message) diff --git a/marimo/_server/registry.py b/marimo/_server/registry.py index bb8b052db34..909141a5c2b 100644 --- a/marimo/_server/registry.py +++ b/marimo/_server/registry.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from typing import TYPE_CHECKING from marimo._entrypoints.registry import EntryPointRegistry @@ -9,10 +11,10 @@ from starlette.types import Lifespan -MIDDLEWARE_REGISTRY: EntryPointRegistry["Middleware"] = EntryPointRegistry( +MIDDLEWARE_REGISTRY: EntryPointRegistry[Middleware] = EntryPointRegistry( entry_point_group="marimo.server.asgi.middleware" ) -LIFESPAN_REGISTRY: EntryPointRegistry["Lifespan[Starlette]"] = ( +LIFESPAN_REGISTRY: EntryPointRegistry[Lifespan[Starlette]] = ( EntryPointRegistry(entry_point_group="marimo.server.asgi.lifespan") ) diff --git a/marimo/_server/responses.py b/marimo/_server/responses.py index 5937ec548c1..aa10098f94a 100644 --- a/marimo/_server/responses.py +++ b/marimo/_server/responses.py @@ -1,9 +1,15 @@ # Copyright 2025 Marimo. All rights reserved. -import msgspec +from __future__ import annotations + +from typing import TYPE_CHECKING + import starlette.responses from marimo._messaging.msgspec_encoder import encode_json_bytes +if TYPE_CHECKING: + import msgspec + class StructResponse(starlette.responses.Response): media_type = "application/json" diff --git a/marimo/_server/session/__init__.py b/marimo/_server/session/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_server/session/__init__.py +++ b/marimo/_server/session/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_sql/error_utils.py b/marimo/_sql/error_utils.py index dc179e59a69..6ea1ada18f0 100644 --- a/marimo/_sql/error_utils.py +++ b/marimo/_sql/error_utils.py @@ -1,11 +1,14 @@ # Copyright 2025 Marimo. All rights reserved. -import ast +from __future__ import annotations + import re from typing import TYPE_CHECKING, Callable, Optional, TypedDict from marimo._dependencies.dependencies import DependencyManager if TYPE_CHECKING: + import ast + from marimo._messaging.errors import MarimoSQLError from marimo import _loggers @@ -179,7 +182,7 @@ def create_sql_error_metadata( ) -def metadata_to_sql_error(metadata: SQLErrorMetadata) -> "MarimoSQLError": +def metadata_to_sql_error(metadata: SQLErrorMetadata) -> MarimoSQLError: """Convert SQLErrorMetadata to MarimoSQLError for frontend messaging.""" from marimo._messaging.errors import MarimoSQLError @@ -226,7 +229,7 @@ def log_sql_error( def create_sql_error_from_exception( exception: BaseException, cell: object -) -> "MarimoSQLError": +) -> MarimoSQLError: """Create a MarimoSQLError from a SQL parsing exception.""" # Get SQL statement from cell sql_statement = "" diff --git a/marimo/_sql/parse.py b/marimo/_sql/parse.py index db30d155dd2..ce666aa1060 100644 --- a/marimo/_sql/parse.py +++ b/marimo/_sql/parse.py @@ -1,4 +1,5 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations import re from typing import Literal, Optional, Union diff --git a/marimo/_types/lifespan.py b/marimo/_types/lifespan.py index 4388f9ce059..2d1bd493370 100644 --- a/marimo/_types/lifespan.py +++ b/marimo/_types/lifespan.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + from collections.abc import ( Callable, Mapping, diff --git a/marimo/_utils/__init__.py b/marimo/_utils/__init__.py index be52407b506..69635186a3d 100644 --- a/marimo/_utils/__init__.py +++ b/marimo/_utils/__init__.py @@ -1 +1,2 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations diff --git a/marimo/_utils/code.py b/marimo/_utils/code.py index 149d2b97974..f2aa664108d 100644 --- a/marimo/_utils/code.py +++ b/marimo/_utils/code.py @@ -1,4 +1,5 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations def hash_code(code: str) -> str: diff --git a/marimo/_utils/debounce.py b/marimo/_utils/debounce.py index 9168a136816..992a6583acf 100644 --- a/marimo/_utils/debounce.py +++ b/marimo/_utils/debounce.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + import time from functools import wraps from typing import Any, Callable, TypeVar, cast diff --git a/marimo/_utils/deprecated.py b/marimo/_utils/deprecated.py index 4406cf84723..22b68b6e709 100644 --- a/marimo/_utils/deprecated.py +++ b/marimo/_utils/deprecated.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + import functools import warnings from typing import Any, Callable diff --git a/marimo/_utils/disposable.py b/marimo/_utils/disposable.py index 7ad32569df7..2debe471717 100644 --- a/marimo/_utils/disposable.py +++ b/marimo/_utils/disposable.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + from typing import Callable @@ -18,5 +20,5 @@ def is_disposed(self) -> bool: return self._is_disposed @staticmethod - def empty() -> "Disposable": + def empty() -> Disposable: return Disposable(lambda: None) diff --git a/marimo/_utils/exiting.py b/marimo/_utils/exiting.py index 1380cd6256b..a09273b6ec0 100644 --- a/marimo/_utils/exiting.py +++ b/marimo/_utils/exiting.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + import atexit from dataclasses import dataclass diff --git a/marimo/_utils/files.py b/marimo/_utils/files.py index 9f3c7db7d5e..38fe638fd70 100644 --- a/marimo/_utils/files.py +++ b/marimo/_utils/files.py @@ -1,10 +1,14 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + import fnmatch import os import re -from collections.abc import AsyncGenerator, Generator from pathlib import Path -from typing import Union +from typing import TYPE_CHECKING, Union + +if TYPE_CHECKING: + from collections.abc import AsyncGenerator, Generator def natural_sort(filename: str) -> list[Union[int, str]]: diff --git a/marimo/_utils/format_signature.py b/marimo/_utils/format_signature.py index cdbe0d54fc2..24ae34a56b5 100644 --- a/marimo/_utils/format_signature.py +++ b/marimo/_utils/format_signature.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + import textwrap diff --git a/marimo/_utils/hashable.py b/marimo/_utils/hashable.py index 1b04318e2eb..3d5889d54c2 100644 --- a/marimo/_utils/hashable.py +++ b/marimo/_utils/hashable.py @@ -1,4 +1,5 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations from typing import Any diff --git a/marimo/_utils/once.py b/marimo/_utils/once.py index 27742028064..91522e67761 100644 --- a/marimo/_utils/once.py +++ b/marimo/_utils/once.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + import weakref from functools import wraps from typing import Any, Callable, TypeVar, cast diff --git a/marimo/_utils/requests.py b/marimo/_utils/requests.py index 926a71c9903..7d9c331bd84 100644 --- a/marimo/_utils/requests.py +++ b/marimo/_utils/requests.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + import json import urllib.error import urllib.parse @@ -58,7 +60,7 @@ def text(self) -> str: # This matches Python's universal newline mode used by Path.read_text() return decoded.replace("\r\n", "\n").replace("\r", "\n") - def raise_for_status(self) -> "Response": + def raise_for_status(self) -> Response: """Raise an exception for non-2xx status codes. Returns: diff --git a/marimo/_utils/rst_to_html.py b/marimo/_utils/rst_to_html.py index e90eb80f256..7388163ab43 100644 --- a/marimo/_utils/rst_to_html.py +++ b/marimo/_utils/rst_to_html.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + import contextlib import io diff --git a/marimo/_utils/theme.py b/marimo/_utils/theme.py index 2a0c3348d5e..d17e89bd16c 100644 --- a/marimo/_utils/theme.py +++ b/marimo/_utils/theme.py @@ -1,4 +1,5 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations from marimo._config.config import Theme from marimo._config.manager import get_default_config_manager diff --git a/marimo/_utils/timer.py b/marimo/_utils/timer.py index 8f7578bd4b7..328a8761f24 100644 --- a/marimo/_utils/timer.py +++ b/marimo/_utils/timer.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + import functools import time from typing import Any, Callable diff --git a/marimo/_utils/tmpdir.py b/marimo/_utils/tmpdir.py index b5e00a783a2..8a5038fb39f 100644 --- a/marimo/_utils/tmpdir.py +++ b/marimo/_utils/tmpdir.py @@ -1,4 +1,6 @@ # Copyright 2024 Marimo. All rights reserved. +from __future__ import annotations + import os import sys import tempfile diff --git a/marimo/_utils/uv.py b/marimo/_utils/uv.py index 4e79b7f2d25..f2b948e49ae 100644 --- a/marimo/_utils/uv.py +++ b/marimo/_utils/uv.py @@ -1,4 +1,6 @@ # Copyright 2025 Marimo. All rights reserved. +from __future__ import annotations + import os