Metadata-Version: 2.4
Name: pymergetic-common
Version: 0.0.13
Summary: Shared dependency groups + foundational utilities for PymergeticOS
Author-email: PymergeticOS Maintainers <maintainers@example.com>
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/pymergetic/common
Project-URL: Repository, https://github.com/pymergetic/common
Project-URL: Issues, https://github.com/pymergetic/common/issues
Keywords: pymergetic,common,deps,sdk
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Operating System :: POSIX :: Linux
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: pymergetic-common[config]
Provides-Extra: console
Requires-Dist: fire>=0.7.1; extra == "console"
Requires-Dist: rich>=13.0.0; extra == "console"
Requires-Dist: textual>=0.40.0; extra == "console"
Provides-Extra: config
Requires-Dist: pydantic>=2.0.0; extra == "config"
Requires-Dist: pydantic-settings>=2.0.0; extra == "config"
Requires-Dist: pyyaml>=6.0; extra == "config"
Provides-Extra: objects
Requires-Dist: pyzmq>=25.0.0; extra == "objects"
Provides-Extra: pki
Requires-Dist: cryptography>=41.0.0; extra == "pki"
Provides-Extra: builder
Requires-Dist: pyinstaller>=6.0.0; extra == "builder"
Provides-Extra: nanobind
Requires-Dist: nanobind~=2.12.0; extra == "nanobind"
Provides-Extra: bind
Requires-Dist: pymergetic-common[nanobind]; extra == "bind"
Requires-Dist: scikit-build-core>=0.10; extra == "bind"
Requires-Dist: setuptools>=68; extra == "bind"
Requires-Dist: setuptools-scm>=8; extra == "bind"
Provides-Extra: easybind
Requires-Dist: pymergetic-common[bind]; extra == "easybind"
Requires-Dist: pymergetic-easybind~=0.3.1; extra == "easybind"
Provides-Extra: test
Requires-Dist: pytest>=7.0.0; extra == "test"
Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
Provides-Extra: release
Requires-Dist: build>=1.0.0; extra == "release"
Requires-Dist: twine>=5.0.0; extra == "release"
Provides-Extra: all
Requires-Dist: pymergetic-common[builder,config,console,easybind,objects,pki,release,test]; extra == "all"
Provides-Extra: dev
Requires-Dist: pymergetic-common[all]; extra == "dev"

# pymergetic-common

`pymergetic-common` is the PymergeticOS **foundation package**.

It centralizes:

- **Python dependency groups** (extras) used across Pymergetic packages
- Shared low-level Python utilities (e.g., header/impl wiring)

C++ extension builds use **`pymergetic-easybind`** via the `easybind` extra below.

## Dependency groups (extras)

Install with `pip install pymergetic-common[GROUP]` or `uv pip install -e "packages/common[GROUP]"`.

| Extra | Purpose |
|-------|---------|
| `config` | pydantic, pydantic-settings, pyyaml (included in base install) |
| `console` | fire, rich, textual |
| `objects` | pyzmq |
| `pki` | cryptography |
| `builder` | pyinstaller |
| `nanobind` | **`nanobind~=…` pin** |
| `bind` | nanobind + scikit-build stack (no `pymergetic-easybind` — for building easybind itself) |
| `easybind` | **`bind` + `pymergetic-easybind~=…`** — C++ extension consumer stack |
| `test` | pytest, pytest-asyncio |
| `release` | build, twine |
| `all` | all of the above |
| `dev` | alias for `all` |

Other packages should **re-export** these groups instead of duplicating pins, e.g.:

```toml
[project.optional-dependencies]
dev = ["pymergetic-common[dev]"]
```

C++ extension packages (pymergetic-cppdantic, synapse, axon): use `pymergetic-common[easybind]`.

## os-sdk workspace install

From the os-sdk repo root:

```bash
uv sync
```

Or:

```bash
./scripts/dev-install.sh
```

Standalone package install:

```bash
uv pip install -e "packages/common[dev]"
```

## Releasing

Versioning, tagging, and PyPI CI mirror **pymergetic-easybind**. See **[RELEASING.md](RELEASING.md)**.

```bash
pymergetic-release-tag --project-root packages/common --dry-run
pymergetic-release-tag --project-root packages/common
```

Dev CLIs (install **`pymergetic-common[release]`** from PyPI, or `uv sync` in os-sdk). Use **`--project-root`** when not cd'd into the package repo:

- **`pymergetic-release-tag`** — next `v*` tag + push
- **`pymergetic-pin-pyproject`** — bump `{distribution}~=…` pins
- **`pymergetic-wait-pypi`** — poll until a pinned release is on PyPI

Implementation: **`pymergetic.common.devtools`**. See **[RELEASING.md](RELEASING.md)**.
