One installation per project, and no login to reach it
Two things a local install should not have asked for. `fluksio serve` now signs you in. Logging in to your own machine was a formality — the password was printed by the same process that would have checked it, and the database it authenticates against sits in the directory the token goes into — so `serve` mints the token itself and says where it put it. `fluksio login` is left for an engine somewhere else. And an installation is `.fluksio` beside the code, found the way `.git` is, rather than one `~/.fluksio` for the machine. A repository with its own venv was already getting its own engine; it now gets its own flows, run history and token too, instead of three repositories sharing one database and fighting over one port. `--global` asks for the shared one, `--data-dir` still names any directory, and when both exist the banner says which you are looking at and how to reach the other. The directory ignores itself from within — a `.gitignore` of `*`, the way uv writes one into `.venv` — because it holds a credential and a database, and neither belongs in anybody's history. The token is written mode 600. A login an older version wrote to ~/.config/fluksio is still read, so nothing that worked stops working. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ue1tkFWB1bcGy3aWhCKpU
This commit is contained in:
@@ -86,3 +86,33 @@ def test_run_arguments_are_typed_by_the_flow_they_are_for() -> None:
|
||||
|
||||
with pytest.raises(SyncError, match="not an input of this flow"):
|
||||
_params(definition, ["--nonesuch", "1"])
|
||||
|
||||
|
||||
def test_serve_uses_the_installation_the_directory_belongs_to(
|
||||
tmp_path: Path, monkeypatch
|
||||
) -> None:
|
||||
"""A repository with its own venv gets its own engine, not the machine's."""
|
||||
from fluksio import cli
|
||||
|
||||
monkeypatch.chdir(tmp_path)
|
||||
monkeypatch.setattr(cli, "DEFAULT_HOME", tmp_path / "home" / ".fluksio")
|
||||
|
||||
# Nothing above it yet: one is made here rather than in the home directory.
|
||||
made = cli._data_dir(None)
|
||||
assert made == (tmp_path / ".fluksio").resolve()
|
||||
assert (made / ".gitignore").exists()
|
||||
|
||||
# And is then found again from anywhere below it.
|
||||
deep = tmp_path / "src" / "deep"
|
||||
deep.mkdir(parents=True)
|
||||
monkeypatch.chdir(deep)
|
||||
assert cli._data_dir(None) == made
|
||||
|
||||
# `--global` asks for the shared one even so.
|
||||
assert (
|
||||
cli._data_dir(None, shared=True) == (tmp_path / "home" / ".fluksio").resolve()
|
||||
)
|
||||
|
||||
# And `--data-dir` still names any directory outright.
|
||||
named = cli._data_dir(str(tmp_path / "named"))
|
||||
assert named == (tmp_path / "named").resolve()
|
||||
|
||||
Reference in New Issue
Block a user