Metadata-Version: 2.5
Name: dander-connector-servicenow
Version: 0.2.3
Summary: ServiceNow Table API connector plugin for Dander.
Project-URL: Homepage, https://github.com/harrisonoconnorhover/dander-connector-servicenow
Project-URL: Issues, https://github.com/harrisonoconnorhover/dander-connector-servicenow/issues
Project-URL: Repository, https://github.com/harrisonoconnorhover/dander-connector-servicenow.git
Author: Harrison O'Connor-Hoover
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: dander,etl,servicenow,table-api
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Database
Requires-Python: >=3.12
Requires-Dist: dander-platform<0.10,>=0.5.0
Requires-Dist: httpx>=0.27
Provides-Extra: dev
Requires-Dist: fastapi>=0.115; extra == 'dev'
Requires-Dist: mypy>=1.11; extra == 'dev'
Requires-Dist: pytest>=8.3; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Requires-Dist: types-pyyaml; extra == 'dev'
Requires-Dist: uvicorn>=0.30; extra == 'dev'
Description-Content-Type: text/markdown

# Dander ServiceNow Connector

First-party ServiceNow Table API connector plugin for
[Dander](https://github.com/harrisonoconnorhover/dander).

> **Alpha:** pin Dander and this plugin exactly. The connector is read-only and supports one
> stably ordered, full-read incident pipeline. It does not propagate source deletions.
> The connector is simulator- and live-validated against a disposable ServiceNow tenant.

## Dander compatibility

This release supports `dander-platform>=0.5.0,<0.10` through plugin API v1. Pin both
packages exactly in deployments. CI installs the built connector wheel into a fresh environment
and runs the complete connector test suite with Dander `0.5.0`, `0.7.1`, and `0.9.0rc20`.
The normal development lock uses stable Dander `0.7.1`; release candidates must be selected
explicitly. These checks use synthetic data and do not certify every ServiceNow
configuration.

## Install

Declare the exact plugin version in `dander.yaml`:

```yaml
plugins:
  servicenow:
    distribution: dander-connector-servicenow
    version: 0.2.3
```

Then install exactly what the manifest declares:

```console
dander plugins install
```

Copy
[`servicenow.example.yaml`](src/dander_connector_servicenow/templates/servicenow.example.yaml)
into the project's `connectors/` directory, replace `INSTANCE`, and keep the OAuth client ID and
secret in Dander's configured secret store.

## Runtime contract

- Engine: `servicenow_table`
- Authentication: Dander core's `oauth2_client_credentials` strategy
- API: ServiceNow Table API
- Endpoint: read-only `incident`
- Publication: Dander's existing SCD1 writer
- Pagination: stable full reads ordered by `(sys_updated_on, sys_id)` with bounded offset pages
- Memory: each response page is consumed through Dander's generic dlt REST runtime
- Optional reads: exact Aggregate API count and one incident lookup by validated `sys_id`
- Connection check: authenticated Aggregate API probe that returns no incident records

With a supported Dander version, inspect and check an installed pipeline without running ingestion:

```console
dander connector inspect PIPELINE_ID
dander connector check PIPELINE_ID
```

The ServiceNow OAuth user must have read access to both the incident Table API and its Aggregate
API. Targeted lookups request only the fields declared in the connector schema.

The existing Dander `engine: dlt` ServiceNow configuration remains a compatibility fallback. An
explicitly pinned plugin uses the plugin-owned `servicenow_table` engine without duplicating the
generic REST transport in a system-specific package.

## Development

```console
uv sync --extra dev
uv run ruff check .
uv run mypy src tests
uv run pytest
```

Apache-2.0 licensed.
