Spanner

Integration with Google Cloud Spanner using the Spanner Emulator

This integration uses the official Google Cloud Spanner Python Client for testing against the Spanner Emulator. The emulator provides a local development environment that mimics the behavior of Cloud Spanner, allowing you to test your application without connecting to the actual service.

Installation

pip install pytest-databases[spanner]

Usage Example

from google.cloud import spanner
import contextlib
from pytest_databases.docker.spanner import SpannerService

pytest_plugins = ["pytest_databases.docker.spanner"]

def test(spanner_service: SpannerService) -> None:
    spanner_client = spanner.Client(
        project=spanner_service.project,
        credentials=spanner_service.credentials,
        client_options=spanner_service.client_options,
    )
    instance = spanner_client.instance(spanner_service.instance_name)
    with contextlib.suppress(Exception):
        instance.create()

    database = instance.database(spanner_service.database_name)
    with contextlib.suppress(Exception):
        database.create()

    with database.snapshot() as snapshot:
        resp = next(iter(snapshot.execute_sql("SELECT 1")))
    assert resp[0] == 1

def test(spanner_connection: spanner.Client) -> None:
    assert isinstance(spanner_connection, spanner.Client)

Available Fixtures

  • spanner_image: The Docker image to use for Spanner.

  • spanner_service: A fixture that provides a Spanner service.

  • spanner_connection: A fixture that provides a Spanner connection.

Service API

pytest_databases.docker.spanner.spanner_image()[source]
Return type:

str

class pytest_databases.docker.spanner.SpannerService(host, port, credentials, project, database_name, instance_name)[source]

Bases: ServiceContainer

credentials: Credentials
project: str
database_name: str
instance_name: str
property endpoint: str
property client_options: ClientOptions
__init__(host, port, credentials, project, database_name, instance_name)
pytest_databases.docker.spanner.spanner_service(docker_service, spanner_image)[source]
Return type:

Generator[SpannerService, None, None]

pytest_databases.docker.spanner.spanner_connection(spanner_service)[source]
Return type:

Generator[Client, None, None]