fastware v0.6.0 /src.fastware.devconfig
On this page

Parses and validates the [tool.fastware.dev] table from pyproject.toml into a typed DevConfig, failing hard on missing settings.

#src.fastware.devconfig

#src.fastware.devconfig

File-driven dev configuration for the fastware dev CLI.

Reads a [tool.fastware.dev] table from the nearest owning pyproject.toml and validates it into a :class:DevConfig. All fields are explicit -- there are no silent defaults for anything that changes behaviour; invalid or ambiguous configuration is a hard error (:class:DevConfigError).

Location rule (enforced by :func:find_dev_pyproject): starting from a directory, walk up to the filesystem root collecting every pyproject.toml that contains a [tool.fastware.dev] table. Zero found is an error naming the rule; two or more (a table nested under another table) is an ambiguity error listing both. Exactly one is required. In a monorepo the table lives in the package that owns the fastware app + frontend.

#DevConfigError

Raised for any missing, unknown, or contradictory dev-config value.

#BackendSpec

How to run the backend: in-process app OR an arbitrary spawn command.

Exactly one of app ("module:attr" served in-process via serve, wrapped with ViteDevProxy) or cmd (arbitrary argv spawned directly) must be set -- never both, never neither.

#is_in_process

python
def is_in_process(self) -> bool

#ViteSpec

Vite dev server: command, working dir, port, and env.

--strictPort is always enforced (appended if absent) so Vite fails loudly on a port collision instead of silently drifting to another port that the readiness probe and proxy would then miss.

#HealthCheck

A readiness check for an aux service: exactly one of http/tcp/cmd.

#AuxService

An ordered auxiliary service started (and health-gated) before the backend.

#PreSpawnGate

A pre-flight gate that must pass BEFORE anything spawns.

Exactly one probe kind (cmd/http/tcp/file) plus a mandatory human-readable message shown when the gate fails.

#DevConfig

Validated dev configuration resolved from [tool.fastware.dev].

#base_dir

python
def base_dir(self) -> Path

#resolve_cwd

python
def resolve_cwd(self, cwd: str | None) -> Path

Resolve a component cwd relative to the owning pyproject directory.

#build_dev_config

python
def build_dev_config(table: dict, *, source_path: Path | None=None, app_name: str='fastware') -> DevConfig

Build a :class:DevConfig from a raw [tool.fastware.dev] mapping.

#find_dev_pyproject

python
def find_dev_pyproject(start: Path | str | None=None) -> Path

Return the single owning pyproject.toml per the location rule.

Walks up from start (default CWD) to the filesystem root collecting every pyproject.toml that contains a [tool.fastware.dev] table:

  • zero found -> :class:DevConfigError naming the location rule
  • two or more -> :class:DevConfigError listing all candidates (ambiguous)
  • exactly one -> that path

#load_dev_config

python
def load_dev_config(start: Path | str | None=None) -> DevConfig

Locate and parse the dev config per the location rule.

Search