Skip to content

Commit 5480fec

Browse files
committed
Add an IntrospectionMode enum
Extra argument for `AddExternalRepositoriesRequest` to determine which tables to reintrospect when running `sgr cloud add` (by default, reintrospect tables without a schema).
1 parent bfb1a23 commit 5480fec

4 files changed

Lines changed: 40 additions & 5 deletions

File tree

splitgraph/cloud/__init__.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
ExportJobStatus,
3737
ExternalResponse,
3838
IngestionJobStatus,
39+
IntrospectionMode,
3940
ListExternalCredentialsResponse,
4041
MetadataResponse,
4142
Plugin,
@@ -530,8 +531,14 @@ def ensure_external_credential(
530531
raise JSONSchemaValidationError(message="[MASKED]")
531532
raise
532533

533-
def bulk_upsert_external(self, repositories: List[AddExternalRepositoryRequest]):
534-
request = AddExternalRepositoriesRequest(repositories=repositories)
534+
def bulk_upsert_external(
535+
self,
536+
repositories: List[AddExternalRepositoryRequest],
537+
introspection_mode: IntrospectionMode = IntrospectionMode.EMPTY,
538+
):
539+
request = AddExternalRepositoriesRequest(
540+
repositories=repositories, introspection_mode=introspection_mode
541+
)
535542
self._perform_request(
536543
"/bulk-add",
537544
self.access_token,

splitgraph/cloud/models.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""
22
Definitions for responses from the cloud GQL/REST APIs
33
"""
4+
import enum
45
import logging
56
from datetime import datetime
67
from typing import Any, Dict, List, Optional
@@ -30,6 +31,16 @@ class Plugin(BaseModel):
3031
supports_sync: bool
3132

3233

34+
class IntrospectionMode(str, enum.Enum):
35+
"""
36+
Which tables to (re)introspect when adding an external.
37+
"""
38+
39+
NONE = "none" # Don't reintrospect any tables
40+
EMPTY = "empty" # Introspect tables with an empty schema
41+
ALL = "all" # Reintrospect all tables
42+
43+
3344
# GQL response for the catalog metadata
3445

3546

@@ -289,3 +300,4 @@ def from_external(
289300

290301
class AddExternalRepositoriesRequest(BaseModel):
291302
repositories: List[AddExternalRepositoryRequest]
303+
introspection_mode: IntrospectionMode = IntrospectionMode.EMPTY

splitgraph/commandline/cloud.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import click
1616
from click import wrap_text
1717

18-
from splitgraph.cloud.models import AddExternalRepositoryRequest
18+
from splitgraph.cloud.models import AddExternalRepositoryRequest, IntrospectionMode
1919
from splitgraph.cloud.project.models import Metadata, SplitgraphYAML
2020
from splitgraph.commandline.common import (
2121
ImageType,
@@ -613,9 +613,22 @@ def dump_c(remote, readme_dir, repositories_file, limit_repositories):
613613
is_flag=True,
614614
help="Only set up the metadata, not the external data source settings",
615615
)
616+
@click.option(
617+
"--introspection-mode",
618+
type=click.Choice(IntrospectionMode),
619+
default=IntrospectionMode.EMPTY,
620+
help="Whether to reintrospect tables. none: never reintrospect. all: reintrospect all tables. "
621+
"empty: only reintrospect tables with an empty schema.",
622+
)
616623
@click.argument("limit_repositories", type=str, nargs=-1)
617624
def load_c(
618-
remote, readme_dir, skip_external, initial_private, repositories_file, limit_repositories
625+
remote,
626+
readme_dir,
627+
skip_external,
628+
initial_private,
629+
repositories_file,
630+
limit_repositories,
631+
introspection_mode,
619632
):
620633
"""
621634
Load a Splitgraph catalog from a YAML file.
@@ -666,7 +679,9 @@ def load_c(
666679
initial_private=initial_private,
667680
)
668681
external_repositories.append(external_repository)
669-
rest_client.bulk_upsert_external(repositories=external_repositories)
682+
rest_client.bulk_upsert_external(
683+
repositories=external_repositories, introspection_mode=introspection_mode
684+
)
670685
logging.info(f"Uploaded images for {pluralise('repository', len(external_repositories))}")
671686

672687
logging.info("Updating metadata...")

test/splitgraph/commandline/http_fixtures.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@ def cb(request, uri, response_headers):
404404
data = json.loads(request.body)
405405

406406
assert data["repositories"] is not None
407+
assert data["introspection_mode"] == "empty"
407408
assert data["repositories"] == [
408409
{
409410
"credential_id": "98765432-aaaa-bbbb-a456-000000000000",

0 commit comments

Comments
 (0)