Metadata-Version: 2.4
Name: esys-lpip
Version: 0.1.1
Summary: Git-backed, name-oriented front end to pip for internal Python packages
Author: Project maintainers
License-Expression: MIT
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: platformdirs>=4.0
Requires-Dist: tomlkit>=0.11
Requires-Dist: typer>=0.12
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: ruff>=0.8; extra == "dev"
Requires-Dist: pre-commit>=3.0; extra == "dev"

# lpip

Git-backed, name-oriented front end to `pip` for internal Python packages —
no internal PyPI registry required.

Install from PyPI as **`esys-lpip`** (`pip install esys-lpip`); the command
and import remain **`lpip`**.

## Status

| Item | Value |
|------|-------|
| Workflow | A2C 0.10.0 ([ADR-0000](docs/adr/0000-adopt-a2c-workflow.md)) |
| Profile | `python-pypi` |
| Product | Architecture, ADRs, ASRs, and ACs are Accepted; CLI not implemented yet (`src/lpip` is a version stub) |

## What this is

`lpip` (**local-pip**) resolves a logical package name from a TOML catalog
(`lpip-sources.toml`), validates configuration and prerequisites, and delegates
installation to `python -m pip install ...`. The catalog may be a local file
or a Git-backed checkout in a persistent user cache.

It is a small client, not a package manager replacement, registry, or service
([ADR-0001](docs/adr/0001-pip-delegation.md),
[ADR-0004](docs/adr/0004-cli-first-no-service.md)).

## Non-goals (v1)

- Internal package index or hosted registry
- A dependency resolver other than pip
- Background daemons, lockfile solving, or workspace orchestration

## Quick start

The installable CLI is not available yet. After clone:

```bash
python -m venv .venv
# Windows: .venv\Scripts\activate
# Unix: source .venv/bin/activate
pip install -e ".[dev]"
pytest
```

Re-run `scripts/setup-dev` after clone if you need pre-commit and gitlint
hooks (see [docs/workflow/adoption.md](docs/workflow/adoption.md)).

## Intended configuration

Local catalog:

```toml
[source]
type = "file"
path = "~/company/lpip-sources.toml"
```

Git-backed catalog:

```toml
[source]
type = "git"
url = "ssh://git.company/dev/lpip-catalog.git"
revision = "main"
path = "lpip-sources.toml"
refresh = "auto"
```

Example catalog entry:

```toml
[packages.libfoo]
url = "git+ssh://git.company/libs/libfoo.git"
revision = "main"
subdirectory = "python"
```

Intended commands (not implemented): `lpip install`, `lpip list`,
`lpip show`, `lpip validate`, `lpip doctor`, `lpip catalog …`,
`lpip config …` (including `config init`). Details:
[docs/architecture/cli-and-configuration.md](docs/architecture/cli-and-configuration.md).

## Documentation

| Topic | Location |
|-------|----------|
| Architecture | [docs/architecture/overview.md](docs/architecture/overview.md) |
| Artifact chain | [docs/workflow/documentation-structure.md](docs/workflow/documentation-structure.md) |
| ASRs | [docs/asr/](docs/asr/) |
| ADRs | [docs/adr/INDEX.md](docs/adr/INDEX.md) |
| Acceptance criteria | [docs/ac/](docs/ac/) |
| A2C adoption | [docs/workflow/adoption.md](docs/workflow/adoption.md) |
| Release | [docs/release-pipeline.md](docs/release-pipeline.md) |
| Publishing | [docs/package-publishing.md](docs/package-publishing.md) |
| GitLab CI | [docs/gitlab-ci.md](docs/gitlab-ci.md) |
| Agent entry | [AGENTS.md](AGENTS.md) |

## License

MIT (`pyproject.toml`).
