|
12 | 12 |
|
13 | 13 | type ProjectName = str |
14 | 14 | type SourceSpec = str |
| 15 | +type SourceConfig = dict[str, str | int | float | bool | None] |
| 16 | +type SourceItem = tuple[SourceSpec, SourceConfig] |
15 | 17 |
|
16 | 18 |
|
17 | 19 | def bqsrc(google_project: str, |
18 | 20 | snapshot: str, |
19 | 21 | flags: int = 0, |
20 | | - ) -> tuple[ProjectName, SourceSpec | None]: |
| 22 | + **config: str | int | float | bool | None |
| 23 | + ) -> tuple[ProjectName, SourceItem | None]: |
21 | 24 | assert len(google_project) == 8, google_project |
22 | 25 | project = 'datarepo-' + google_project |
23 | 26 | # Some snapshots start with AnVIL instead of ANVIL |
24 | 27 | if not snapshot.upper().startswith('ANVIL_'): |
25 | 28 | snapshot = 'ANVIL_' + snapshot |
26 | | - return mksrc('bigquery', project, snapshot, flags) |
| 29 | + return mksrc('bigquery', project, snapshot, flags, **config) |
27 | 30 |
|
28 | 31 |
|
29 | 32 | def mksrc(source_type: Literal['bigquery', 'parquet'], |
30 | 33 | google_project, |
31 | 34 | snapshot, |
32 | 35 | flags: int = 0, |
33 | | - ) -> tuple[ProjectName, SourceSpec | None]: |
| 36 | + **config: str | int | float | bool | None |
| 37 | + ) -> tuple[ProjectName, SourceItem | None]: |
34 | 38 | project = '_'.join(snapshot.split('_')[1:-3]) |
35 | 39 | assert flags <= pop |
36 | | - source = None if flags & pop else ':'.join([ |
| 40 | + source = None if flags & pop else (':'.join([ |
37 | 41 | 'tdr', |
38 | 42 | source_type, |
39 | 43 | 'gcp', |
40 | 44 | google_project, |
41 | 45 | snapshot, |
42 | | - ]) |
| 46 | + ]), config) |
43 | 47 | return project, source |
44 | 48 |
|
45 | 49 |
|
46 | | -def mkdelta(items: list[tuple[ProjectName, SourceSpec | None]] |
47 | | - ) -> dict[ProjectName, SourceSpec | None]: |
| 50 | +def mkdelta(items: list[tuple[ProjectName, SourceItem | None]] |
| 51 | + ) -> dict[ProjectName, SourceItem | None]: |
48 | 52 | result = dict(items) |
49 | 53 | assert len(items) == len(result), 'collisions detected' |
50 | 54 | assert list(result.keys()) == sorted(result.keys()), 'input not sorted' |
51 | 55 | return result |
52 | 56 |
|
53 | 57 |
|
54 | | -def mksrcs(catalog: dict[ProjectName, SourceSpec | None]) -> list[SourceSpec]: |
55 | | - return list(filter(None, catalog.values())) |
| 58 | +def mksrcs(catalog: dict[ProjectName, SourceItem | None] |
| 59 | + ) -> dict[SourceSpec, SourceConfig]: |
| 60 | + return dict(filter(None, catalog.values())) |
56 | 61 |
|
57 | 62 |
|
58 | | -def mkdict(previous_catalog: dict[ProjectName, SourceSpec | None], |
| 63 | +def mkdict(previous_catalog: dict[ProjectName, SourceItem | None], |
59 | 64 | num_expected: int, |
60 | | - delta: dict[ProjectName, SourceSpec | None], |
61 | | - ) -> dict[ProjectName, SourceSpec | None]: |
| 65 | + delta: dict[ProjectName, SourceItem | None], |
| 66 | + ) -> dict[ProjectName, SourceItem | None]: |
62 | 67 | catalog = previous_catalog | delta |
63 | 68 | num_actual = len(mksrcs(catalog)) |
64 | 69 | assert num_expected == num_actual, (num_expected, num_actual) |
|
0 commit comments