Metadata-Version: 2.4
Name: ds-provider-postgresql-py-lib
Version: 0.1.0b2
Summary: A Python package from the DS library collection
Author-email: Grasp Labs AS <hello@grasplabs.com>
Maintainer-email: Grasp Labs AS <hello@grasplabs.com>
License-Expression: Apache-2.0
Project-URL: Documentation, https://grasp-labs.github.io/ds-provider-postgresql-py-lib/
Project-URL: Repository, https://github.com/grasp-labs/ds-provider-postgresql-py-lib/
Project-URL: Issues, https://github.com/grasp-labs/ds-provider-postgresql-py-lib/issues/
Project-URL: Changelog, https://github.com/grasp-labs/ds-provider-postgresql-py-lib/releases
Keywords: ds,python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE-APACHE
Requires-Dist: ds-resource-plugin-py-lib<1.0.0,>=0.1.0rc1
Requires-Dist: ds-common-logger-py-lib<1.0.0,>=0.1.0a1
Requires-Dist: sqlalchemy<3.0.0,>=2.0.0
Requires-Dist: psycopg2-binary<3.0.0,>=2.9.10
Requires-Dist: pandas<3.0.0,>=2.2.0
Provides-Extra: dev
Requires-Dist: bandit>=1.9.3; extra == "dev"
Requires-Dist: ruff>=0.1.8; extra == "dev"
Requires-Dist: mypy>=1.7.0; extra == "dev"
Requires-Dist: pandas-stubs>=2.1.0; extra == "dev"
Requires-Dist: pytest>=7.4.0; extra == "dev"
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
Requires-Dist: pytest-xdist>=3.3.0; extra == "dev"
Requires-Dist: pre-commit>=3.6.0; extra == "dev"
Requires-Dist: build>=1.0.0; extra == "dev"
Requires-Dist: twine>=4.0.0; extra == "dev"
Requires-Dist: sphinx>=7.1.0; extra == "dev"
Requires-Dist: sphinx-autoapi>=3.0.0; extra == "dev"
Requires-Dist: sphinx-material>=0.0.35; extra == "dev"
Provides-Extra: test
Requires-Dist: pytest>=7.4.0; extra == "test"
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
Requires-Dist: pytest-xdist>=3.3.0; extra == "test"
Provides-Extra: docs
Requires-Dist: sphinx>=7.1.0; extra == "docs"
Requires-Dist: sphinx-autoapi>=3.0.0; extra == "docs"
Requires-Dist: sphinx-material>=0.0.35; extra == "docs"
Dynamic: license-file

# ds-provider-postgresql-py-lib

A PostgreSQL provider for the DS resource plugin ecosystem.

## Installation

```bash
pip install ds-provider-postgresql-py-lib
```

## Features

- PostgreSQL linked service with connection pooling and health checks.
- PostgreSQL dataset implementation with support for:
  - `read()`
  - `create()`
  - `update()`
  - `upsert()`
  - `delete()`
  - `purge()`
- DS resource typing via:
  - `ds.resource.linked_service.postgresql`
  - `ds.resource.dataset.postgresql`

## Usage

### Public exports

```python
from ds_provider_postgresql_py_lib import (
    PostgreSQLDataset,
    PostgreSQLDatasetSettings,
    PostgreSQLLinkedService,
    PostgreSQLLinkedServiceSettings,
    __version__,
)
```

### Minimal linked service example

```python
import os
import uuid

from ds_provider_postgresql_py_lib import (
    PostgreSQLLinkedService,
    PostgreSQLLinkedServiceSettings,
)

linked_service = PostgreSQLLinkedService(
    id=uuid.uuid4(),
    name="postgres-linked-service",
    version="1.0.0",
    settings=PostgreSQLLinkedServiceSettings(
        uri=os.getenv("DATABASE_URI", ""),
    ),
)

linked_service.connect()
ok, message = linked_service.test_connection()
print(ok, message)
```

### Minimal dataset read example

```python
import os
import uuid

from ds_provider_postgresql_py_lib import (
    PostgreSQLDataset,
    PostgreSQLDatasetSettings,
    PostgreSQLLinkedService,
    PostgreSQLLinkedServiceSettings,
)
from ds_provider_postgresql_py_lib.dataset.postgresql import ReadSettings

dataset = PostgreSQLDataset(
    id=uuid.uuid4(),
    name="postgres-dataset",
    version="1.0.0",
    linked_service=PostgreSQLLinkedService(
        id=uuid.uuid4(),
        name="postgres-linked-service",
        version="1.0.0",
        settings=PostgreSQLLinkedServiceSettings(
            uri=os.getenv("DATABASE_URI", ""),
        ),
    ),
    settings=PostgreSQLDatasetSettings(
        schema="public",
        table="test",
        read=ReadSettings(limit=10),
    ),
)

dataset.linked_service.connect()
dataset.read()
print(dataset.output)
```

## Requirements

- Python 3.11+
- See `pyproject.toml` for the full dependency set.

## Documentation

- Repository: <https://github.com/grasp-labs/ds-provider-postgresql-py-lib>
- Docs: <https://grasp-labs.github.io/ds-provider-postgresql-py-lib/>

## Development

```bash
git clone https://github.com/grasp-labs/ds-provider-postgresql-py-lib.git
cd ds-provider-postgresql-py-lib
uv sync --all-extras --dev
make test
```

## License

Apache-2.0. See `LICENSE-APACHE`.

## Support

- Issues: <https://github.com/grasp-labs/ds-provider-postgresql-py-lib/issues>
- Releases: <https://github.com/grasp-labs/ds-provider-postgresql-py-lib/releases>
