# dsayling/pytest-configurex architecture

> Architecture diagram of the GitHub repository dsayling/pytest-configurex, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dsayling/pytest-configurex
- Repository: https://github.com/dsayling/pytest-configurex

## Overview

pytest-configurex is a small pytest plugin that loads typed settings from environment and .env files, then applies them unless standard CLI options override them. Its workflow is pytest hook → settings-class discovery/loading → pytest configuration; tests can retrieve the loaded settings through the `configurex` fixture. The source excerpts establish this wiring, but do not show every setting mapping or validation detail.

Main entry points: [`src/pytest_configurex/settings.py`](https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/settings.py) (Typed settings), [`src/pytest_configurex/plugin.py`](https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/plugin.py) (Settings fixture), [`src/pytest_configurex/discovery.py`](https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/discovery.py) (Class discovery), [`src/pytest_configurex/cli_detection.py`](https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/cli_detection.py) (CLI detection)

## Diagram (Mermaid)

```mermaid
flowchart TD

node_developer(("Test author"))
node_pytest(("pytest runner"))
node_envfiles["Environment inputs"]
node_plugin["Plugin hooks<br/>[plugin.py]"]
node_discovery["Class discovery<br/>[discovery.py]"]
node_settings["Typed settings<br/>[settings.py]"]
node_cli["CLI detection<br/>[cli_detection.py]"]
node_config["Pytest config"]
node_fixture["Settings fixture<br/>[plugin.py]"]

node_developer -->|"provides values"| node_envfiles
node_developer -->|"runs tests"| node_pytest
node_pytest -->|"calls hooks"| node_plugin
node_plugin -->|"loads settings"| node_discovery
node_discovery -->|"selects and loads"| node_settings
node_envfiles -->|"supplies values"| node_settings
node_settings -->|"checks overrides"| node_cli
node_config -->|"provides arguments"| node_cli
node_settings -->|"applies options"| node_config
node_settings -->|"stores instance"| node_config
node_pytest -->|"requests fixture"| node_fixture
node_fixture -->|"reads stored settings"| node_config
node_developer -->|"uses in tests"| node_fixture

click node_plugin "https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/plugin.py"
click node_discovery "https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/discovery.py"
click node_settings "https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/settings.py"
click node_cli "https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/cli_detection.py"
click node_fixture "https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/plugin.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_developer,node_pytest,node_envfiles,node_config toneIndigo
class node_plugin,node_discovery,node_settings,node_cli,node_fixture toneTeal
```

## Components

### Other components

- **Test author**
- **pytest runner**
- **Environment inputs**
- [Plugin hooks](https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/plugin.py): `src/pytest_configurex/plugin.py`
- [Class discovery](https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/discovery.py): `src/pytest_configurex/discovery.py`
- [Typed settings](https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/settings.py): `src/pytest_configurex/settings.py`
- [CLI detection](https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/cli_detection.py): `src/pytest_configurex/cli_detection.py`
- **Pytest config**
- [Settings fixture](https://github.com/dsayling/pytest-configurex/blob/main/src/pytest_configurex/plugin.py): `src/pytest_configurex/plugin.py`

## Connections

- Test author → Environment inputs: provides values
- Test author → pytest runner: runs tests
- pytest runner → Plugin hooks: calls hooks
- Plugin hooks → Class discovery: loads settings
- Class discovery → Typed settings: selects and loads
- Environment inputs → Typed settings: supplies values
- Typed settings → CLI detection: checks overrides
- Pytest config → CLI detection: provides arguments
- Typed settings → Pytest config: applies options
- Typed settings → Pytest config: stores instance
- pytest runner → Settings fixture: requests fixture
- Settings fixture → Pytest config: reads stored settings
- Test author → Settings fixture: uses in tests
