-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabases.py
More file actions
61 lines (42 loc) · 1.28 KB
/
databases.py
File metadata and controls
61 lines (42 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"""Managed database helpers (Hotdata-owned catalogs with parquet table loads)."""
from __future__ import annotations
from dataclasses import asdict, dataclass
from pathlib import Path
from typing import Any
from hotdata.exceptions import ApiException
DEFAULT_SCHEMA = "public"
@dataclass(frozen=True)
class ManagedDatabase:
id: str
description: str | None
default_connection_id: str
def to_dict(self) -> dict[str, Any]:
return asdict(self)
@dataclass(frozen=True)
class ManagedTable:
full_name: str
schema: str
table: str
synced: bool
last_sync: str | None
def to_dict(self) -> dict[str, Any]:
return asdict(self)
@dataclass(frozen=True)
class LoadManagedTableResult:
connection_id: str
schema_name: str
table_name: str
row_count: int
full_name: str
def to_dict(self) -> dict[str, Any]:
return asdict(self)
def is_parquet_path(path: str) -> bool:
return Path(path).suffix.lower() == ".parquet"
def managed_database_from_detail(detail: Any) -> ManagedDatabase:
return ManagedDatabase(
id=str(detail.id),
description=detail.name,
default_connection_id=str(detail.default_connection_id),
)
def api_error_message(exc: ApiException) -> str:
return exc.reason or str(exc)