|
1 | 1 | """Provider registration.""" |
2 | 2 |
|
| 3 | +from __future__ import annotations |
| 4 | + |
| 5 | +from typing import TYPE_CHECKING |
| 6 | + |
3 | 7 | from sqlit.domains.connections.providers.adapter_provider import build_adapter_provider |
4 | 8 | from sqlit.domains.connections.providers.bigquery.schema import SCHEMA |
5 | 9 | from sqlit.domains.connections.providers.catalog import register_provider |
| 10 | +from sqlit.domains.connections.providers.docker import DockerCredentials, DockerDetector |
6 | 11 | from sqlit.domains.connections.providers.model import DatabaseProvider, ProviderSpec |
7 | 12 |
|
| 13 | +if TYPE_CHECKING: |
| 14 | + from collections.abc import Mapping |
| 15 | + |
8 | 16 |
|
9 | 17 | def _provider_factory(spec: ProviderSpec) -> DatabaseProvider: |
10 | 18 | from sqlit.domains.connections.providers.bigquery.adapter import BigQueryAdapter |
11 | 19 |
|
12 | 20 | return build_adapter_provider(spec, SCHEMA, BigQueryAdapter()) |
13 | 21 |
|
| 22 | + |
| 23 | +def _bigquery_docker_post_process( |
| 24 | + creds: DockerCredentials, env_vars: Mapping[str, str] |
| 25 | +) -> DockerCredentials: |
| 26 | + """Extract project ID from emulator command args or use default.""" |
| 27 | + # The emulator typically uses --project flag, but env vars take precedence |
| 28 | + # Default to 'test-project' which is common for local development |
| 29 | + return DockerCredentials( |
| 30 | + user=creds.user, |
| 31 | + password=creds.password, |
| 32 | + database=env_vars.get("BIGQUERY_DATASET", creds.database) or "test_sqlit", |
| 33 | + ) |
| 34 | + |
| 35 | + |
14 | 36 | SPEC = ProviderSpec( |
15 | 37 | db_type="bigquery", |
16 | 38 | display_name="Google BigQuery", |
17 | 39 | schema_path=("sqlit.domains.connections.providers.bigquery.schema", "SCHEMA"), |
18 | 40 | supports_ssh=False, |
19 | 41 | is_file_based=False, |
20 | 42 | has_advanced_auth=True, |
21 | | - default_port="", |
| 43 | + default_port="9050", |
22 | 44 | requires_auth=False, |
23 | 45 | badge_label="BQ", |
24 | 46 | url_schemes=("bigquery",), |
25 | 47 | provider_factory=_provider_factory, |
| 48 | + docker_detector=DockerDetector( |
| 49 | + image_patterns=("bigquery-emulator", "goccy/bigquery-emulator"), |
| 50 | + env_vars={ |
| 51 | + "user": (), |
| 52 | + "password": (), |
| 53 | + "database": ("BIGQUERY_DATASET",), |
| 54 | + }, |
| 55 | + default_user="", |
| 56 | + default_database="test_sqlit", |
| 57 | + preferred_host="test-project", # Use as project ID, not actual host |
| 58 | + post_process=_bigquery_docker_post_process, |
| 59 | + ), |
26 | 60 | ) |
27 | 61 |
|
28 | 62 | register_provider(SPEC) |
0 commit comments