castor-extractor 0.25.2__py3-none-any.whl → 0.25.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of castor-extractor might be problematic. Click here for more details.

CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.25.6 - 2025-10-06
4
+
5
+ * PowerBi: Support additional authentication methods
6
+
7
+ ## 0.25.5 - 2025-10-06
8
+
9
+ * Snowflake: remove extraction of roles and grants
10
+
11
+ ## 0.25.4 - 2025-10-02
12
+
13
+ * SqlServer: switch database to support clients running their instance on Azure
14
+
15
+ ## 0.25.3 - 2025-10-01
16
+
17
+ * Sigma: sleep between sources requests to avoid rate limit errors
18
+
3
19
  ## 0.25.2 - 2025-09-30
4
20
 
5
21
  * PowerBi: Support auth with private_key
@@ -21,8 +21,12 @@ def main():
21
21
  auth_group.add_argument(
22
22
  "-cert",
23
23
  "--certificate",
24
- help="file path to json certificate file with"
25
- "keys: private_key, thumbprint, public_certificate",
24
+ help=(
25
+ "Path to certificate file for authentication. "
26
+ "Accepts: X.509 certificates (.pem, .crt), "
27
+ "PKCS#12 files (.p12, .pfx), or JSON files containing "
28
+ "certificate data or custom authentication secrets."
29
+ ),
26
30
  )
27
31
  parser.add_argument(
28
32
  "-sc",
@@ -26,6 +26,17 @@ class AbstractSourceClient(ABC):
26
26
  def execute(self, query: ExtractionQuery) -> Iterator[dict]:
27
27
  pass
28
28
 
29
+ def set_database(self, database: Optional[str]) -> None:
30
+ """
31
+ Set the active database for this client.
32
+
33
+ Some source technologies require establishing a new connection
34
+ or using a different connection URI when switching databases.
35
+
36
+ Default behaviour is to do nothing.
37
+ """
38
+ pass
39
+
29
40
 
30
41
  class SqlalchemyClient(AbstractSourceClient, ABC):
31
42
  def __init__(self, credentials: dict):
@@ -58,7 +58,7 @@ class PaginationModel(BaseModel):
58
58
  def fetch_all_pages(
59
59
  request: Callable,
60
60
  pagination_model: type[PaginationModel],
61
- rate_limit: Optional[int] = None,
61
+ rate_limit: Optional[float] = None,
62
62
  ) -> Iterator:
63
63
  """
64
64
  Method to return all results of a Paginated API based on the
@@ -11,9 +11,17 @@ REST_API_BASE_PATH = "https://api.powerbi.com/v1.0/myorg"
11
11
 
12
12
 
13
13
  class PowerbiCertificate(BaseModel):
14
+ """
15
+ Supports all dict credentials formats supported by PowerBI
16
+ https://learn.microsoft.com/en-us/python/api/msal/msal.application.confidentialclientapplication
17
+ """
18
+
19
+ client_assertion: Optional[str] = None
20
+ passphrase: Optional[str] = None
21
+ private_key: Optional[str] = None
22
+ private_key_pfx_path: Optional[str] = None
14
23
  public_certificate: Optional[str] = None
15
- private_key: str
16
- thumbprint: str
24
+ thumbprint: Optional[str] = None
17
25
 
18
26
 
19
27
  class PowerbiCredentials(BaseSettings):
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  from http import HTTPStatus
3
+ from time import sleep
3
4
  from typing import TYPE_CHECKING, Callable, Iterator
4
5
 
5
6
  from ....utils import fetch_all_pages, retry_request
@@ -13,6 +14,7 @@ logger = logging.getLogger(__name__)
13
14
 
14
15
  SIGMA_CONNECTION_PATH_MAX_RETRY = 1
15
16
  SIGMA_CONNECTION_PATH_SLEEP_MS = 30_000 # 30 seconds
17
+ SIGMA_SOURCES_SLEEP_MS = 2 / 1000 # 0.2 seconds
16
18
 
17
19
 
18
20
  class SigmaSourcesTransformer:
@@ -84,6 +86,29 @@ class SigmaSourcesTransformer:
84
86
  "sources": enhanced_sources,
85
87
  }
86
88
 
89
+ def _fetch_asset_sources(
90
+ self,
91
+ asset_id: str,
92
+ endpoint: Callable[[str], str],
93
+ with_pagination: bool,
94
+ ) -> dict:
95
+ """Fetches sources for a single asset."""
96
+ endpoint_url = endpoint(asset_id)
97
+
98
+ if with_pagination:
99
+ request = self.api_client._get_paginated(endpoint=endpoint_url)
100
+ pages_generator = fetch_all_pages(
101
+ request=request,
102
+ pagination_model=SigmaTokenPagination,
103
+ rate_limit=SIGMA_SOURCES_SLEEP_MS,
104
+ )
105
+ sources = list(pages_generator)
106
+ else:
107
+ sources = self.api_client._get(endpoint=endpoint_url)
108
+ sleep(SIGMA_SOURCES_SLEEP_MS)
109
+
110
+ return {"asset_id": asset_id, "sources": sources}
111
+
87
112
  def _get_all_sources(
88
113
  self,
89
114
  endpoint: Callable[[str], str],
@@ -91,16 +116,10 @@ class SigmaSourcesTransformer:
91
116
  with_pagination: bool = False,
92
117
  ) -> Iterator[dict]:
93
118
  """Returns transformed sources for the given assets"""
94
- all_sources = []
95
-
96
- for asset_id in asset_ids:
97
- endpoint_url = endpoint(asset_id)
98
- if with_pagination:
99
- request = self.api_client._get_paginated(endpoint=endpoint_url)
100
- sources = list(fetch_all_pages(request, SigmaTokenPagination))
101
- else:
102
- sources = self.api_client._get(endpoint=endpoint_url)
103
- all_sources.append({"asset_id": asset_id, "sources": sources})
119
+ all_sources = [
120
+ self._fetch_asset_sources(asset_id, endpoint, with_pagination)
121
+ for asset_id in asset_ids
122
+ ]
104
123
 
105
124
  table_to_path = self._map_table_id_to_connection_path(all_sources)
106
125
 
@@ -51,6 +51,7 @@ class SQLExtractionProcessor:
51
51
  def _fetch(self, query: ExtractionQuery) -> Iterator[dict]:
52
52
  default: Callable[[], Iterator] = lambda: iter(()) # type: ignore
53
53
  decorator = safe_mode(self._safe_mode, default)
54
+ self._client.set_database(query.database)
54
55
  decorated_execute = decorator(self._client.execute)
55
56
  return decorated_execute(query)
56
57
 
@@ -21,11 +21,22 @@ class AssetNotSupportedError(NotImplementedError):
21
21
 
22
22
 
23
23
  class ExtractionQuery:
24
- """contains both statement and parameters for the query"""
24
+ """
25
+ Contains useful context to run the query:
26
+ - the sql statement itself
27
+ - parameters { ... }
28
+ - optionally, the target database (can be used to change the engine's URI)
29
+ """
25
30
 
26
- def __init__(self, statement: str, params: dict):
31
+ def __init__(
32
+ self,
33
+ statement: str,
34
+ params: dict,
35
+ database: Optional[str] = None,
36
+ ):
27
37
  self.statement = statement
28
38
  self.params = params
39
+ self.database = database
29
40
 
30
41
 
31
42
  class AbstractQueryBuilder(ABC):
@@ -24,12 +24,7 @@ SNOWFLAKE_ASSETS: SupportedAssets = {
24
24
  WarehouseAssetGroup.FUNCTION: FUNCTIONS_ASSETS,
25
25
  WarehouseAssetGroup.QUERY: QUERIES_ASSETS,
26
26
  WarehouseAssetGroup.VIEW_DDL: VIEWS_ASSETS,
27
- WarehouseAssetGroup.ROLE: (
28
- WarehouseAsset.GRANT_TO_ROLE,
29
- WarehouseAsset.GRANT_TO_USER,
30
- WarehouseAsset.ROLE,
31
- WarehouseAsset.USER,
32
- ),
27
+ WarehouseAssetGroup.ROLE: (WarehouseAsset.USER,),
33
28
  WarehouseAssetGroup.SNOWFLAKE_LINEAGE: (WarehouseAsset.COLUMN_LINEAGE,),
34
29
  WarehouseAssetGroup.EXTERNAL_LINEAGE: EXTERNAL_LINEAGE_ASSETS,
35
30
  }
@@ -1,7 +1,8 @@
1
1
  import logging
2
2
  from collections.abc import Iterator
3
+ from typing import Optional
3
4
 
4
- from sqlalchemy import text
5
+ from sqlalchemy import create_engine, text
5
6
 
6
7
  from ...utils import ExtractionQuery, SqlalchemyClient, uri_encode
7
8
 
@@ -63,6 +64,18 @@ class MSSQLClient(SqlalchemyClient):
63
64
  finally:
64
65
  self.close()
65
66
 
67
+ def set_database(self, database: Optional[str]) -> None:
68
+ """
69
+ To support SQL Server running on Azure, we must change the engine's
70
+ URI for each database-scoped query
71
+ https://chatgpt.com/share/68de93c3-9550-8001-9d54-c5da86faa43c
72
+ """
73
+ if not database:
74
+ return
75
+ self.close()
76
+ database_uri = f"{self._uri}/{database}"
77
+ self._engine = create_engine(database_uri, **self._options)
78
+
66
79
  def get_databases(self) -> list[str]:
67
80
  result = self.execute(
68
81
  ExtractionQuery("SELECT name FROM sys.databases", {})
@@ -40,10 +40,14 @@ class MSSQLQueryBuilder(AbstractQueryBuilder):
40
40
  self._databases = databases
41
41
 
42
42
  @staticmethod
43
- def _format(query: ExtractionQuery, values: dict) -> ExtractionQuery:
43
+ def _format(
44
+ query: ExtractionQuery,
45
+ database: str,
46
+ ) -> ExtractionQuery:
44
47
  return ExtractionQuery(
45
- statement=query.statement.format(**values),
48
+ statement=query.statement.format(database=database),
46
49
  params=query.params,
50
+ database=database,
47
51
  )
48
52
 
49
53
  def build(self, asset: WarehouseAsset) -> list[ExtractionQuery]:
@@ -58,7 +62,4 @@ class MSSQLQueryBuilder(AbstractQueryBuilder):
58
62
  logger.info(
59
63
  f"\tWill run queries with following database params: {self._databases}",
60
64
  )
61
- return [
62
- self._format(query, {"database": database})
63
- for database in self._databases
64
- ]
65
+ return [self._format(query, database) for database in self._databases]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: castor-extractor
3
- Version: 0.25.2
3
+ Version: 0.25.6
4
4
  Summary: Extract your metadata assets.
5
5
  Home-page: https://www.castordoc.com/
6
6
  License: EULA
@@ -216,6 +216,22 @@ For any questions or bug report, contact us at [support@coalesce.io](mailto:supp
216
216
 
217
217
  # Changelog
218
218
 
219
+ ## 0.25.6 - 2025-10-06
220
+
221
+ * PowerBi: Support additional authentication methods
222
+
223
+ ## 0.25.5 - 2025-10-06
224
+
225
+ * Snowflake: remove extraction of roles and grants
226
+
227
+ ## 0.25.4 - 2025-10-02
228
+
229
+ * SqlServer: switch database to support clients running their instance on Azure
230
+
231
+ ## 0.25.3 - 2025-10-01
232
+
233
+ * Sigma: sleep between sources requests to avoid rate limit errors
234
+
219
235
  ## 0.25.2 - 2025-09-30
220
236
 
221
237
  * PowerBi: Support auth with private_key
@@ -1,4 +1,4 @@
1
- CHANGELOG.md,sha256=nBloUrrG3Tt7TDnWCZqsNS0x6uIBYG7TFQHoTP8Q8a8,21086
1
+ CHANGELOG.md,sha256=_zH2Mm-Bn_xdVUaseScAbBos3i0Ae_MspceXsG-5vjc,21437
2
2
  Dockerfile,sha256=xQ05-CFfGShT3oUqaiumaldwA288dj9Yb_pxofQpufg,301
3
3
  DockerfileUsage.md,sha256=2hkJQF-5JuuzfPZ7IOxgM6QgIQW7l-9oRMFVwyXC4gE,998
4
4
  LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
@@ -18,7 +18,7 @@ castor_extractor/commands/extract_mode.py,sha256=Q4iO-VAKMg4zFPejhAO-foZibL5Ht3j
18
18
  castor_extractor/commands/extract_mysql.py,sha256=7AH5qMzeLTsENCOeJwtesrWg8Vo8MCEq8fx2YT74Mcw,1034
19
19
  castor_extractor/commands/extract_notion.py,sha256=uaxcF3_bT7D_-JxnIW0F7VVDphI_ZgOfQQxZzoLXo_M,504
20
20
  castor_extractor/commands/extract_postgres.py,sha256=pX0RnCPi4nw6QQ6wiAuZ_Xt3ZbDuMUG9aQKuqFgJtAU,1154
21
- castor_extractor/commands/extract_powerbi.py,sha256=tM9fnQaU69zJ7E_uS1S432jprRi9WnpDJdm2NtyLjUg,1242
21
+ castor_extractor/commands/extract_powerbi.py,sha256=4q_brV5hEG8RINCquvZCtQ9G2v4nzqQClIUlP0Pdef4,1402
22
22
  castor_extractor/commands/extract_qlik.py,sha256=VBe_xFKh_nR0QSFFIncAaC8yDqBeMa6VunBAga7AeGg,891
23
23
  castor_extractor/commands/extract_redshift.py,sha256=zRBg2D_ft4GLdPSdmetRcgQVAA80DXtdRSYsQhAWIik,1334
24
24
  castor_extractor/commands/extract_salesforce.py,sha256=3j3YTmMkPAwocR-B1ozJQai0UIZPtpmAyWj-hHvdWn4,1226
@@ -102,13 +102,13 @@ castor_extractor/utils/argument_parser_test.py,sha256=wnyLFJ74iEiPxxLSbwFtckR7FI
102
102
  castor_extractor/utils/batch.py,sha256=SFlLmJgVjV2nVhIrjVIEp8wJ9du4dKKHq8YVYubnwQQ,448
103
103
  castor_extractor/utils/batch_test.py,sha256=84JYXOxiTkZFAceVh0mzN6VtKxcqoFPbxkZfIDyLGlg,606
104
104
  castor_extractor/utils/client/__init__.py,sha256=h5gm8UNNCCkAqhjYK5f6BY7k0cHFOyAvkmlktqwpir0,392
105
- castor_extractor/utils/client/abstract.py,sha256=CWF7_afNpEZ3jor-22wXbKIvM20ukHkaDy_uknKz8B0,2075
105
+ castor_extractor/utils/client/abstract.py,sha256=OyTpb_SBgxaZd-4QFUV3n7yTzszAbyxY89fHsdAGKS8,2410
106
106
  castor_extractor/utils/client/api/__init__.py,sha256=vlG7WXznYgLTn3XyMGsyUkgRkup8FbKM14EXJ8mv-b0,264
107
107
  castor_extractor/utils/client/api/auth.py,sha256=lq0K3UEl1vwIIa_vKTdlpIQPdE5K1-5DXmCwO4dKzng,1890
108
108
  castor_extractor/utils/client/api/auth_test.py,sha256=LlyXytnatg6ZzR4Zkvzk0BH99FYhHX7qn_nyr2MSnDI,1305
109
109
  castor_extractor/utils/client/api/client.py,sha256=qmj7KoNqt6F-cmpdaMiz_aVxzwMCgbDNcgzXSbCdu1Y,5183
110
110
  castor_extractor/utils/client/api/client_test.py,sha256=FM3ZxsLLfMOBn44cXX6FIgnA31-5TTNIyp9D4LBwtXE,1222
111
- castor_extractor/utils/client/api/pagination.py,sha256=tNL89bvgnMJd0ajJA07wTTReH3PJOQm3xsa93SKHFss,2499
111
+ castor_extractor/utils/client/api/pagination.py,sha256=SFO841ItRxPrQzhusx9JZiX5V394VujaB69YQJN1z2M,2501
112
112
  castor_extractor/utils/client/api/pagination_test.py,sha256=jCOgXFXrH-jrCxe2dfk80ZksJF-EtmpJPU11BGabsqk,1385
113
113
  castor_extractor/utils/client/api/safe_request.py,sha256=5pvI2WPRDtitX9F1aYcXTIMPNmDikRK9dKTD3ctoeoQ,1774
114
114
  castor_extractor/utils/client/api/safe_request_test.py,sha256=LqS5FBxs6lLLcTkcgxIoLb6OinxShHXR5y4CWZpwmwg,2005
@@ -253,7 +253,7 @@ castor_extractor/visualization/powerbi/client/authentication.py,sha256=1pST-w7ce
253
253
  castor_extractor/visualization/powerbi/client/client.py,sha256=Q_WHYGFpHT4wJ6nZvJa96nBVcpUGv7E2WnyZHBftsJM,8340
254
254
  castor_extractor/visualization/powerbi/client/client_test.py,sha256=zWgfc8fOHSRn3hxiX8ujJysmNHeypIoKin9h8_h178k,6668
255
255
  castor_extractor/visualization/powerbi/client/constants.py,sha256=88R_aGachNNUZh6OSH2fkDwZtY4KTStzKm_g7HNCqqo,387
256
- castor_extractor/visualization/powerbi/client/credentials.py,sha256=Mqb9e9jbJrawE00xvLyej1i4tFM8VNiRnA0LpfqORd0,1565
256
+ castor_extractor/visualization/powerbi/client/credentials.py,sha256=Z6wJkevG3MvqTK54p3lxKnw7aUZ1mxPZqwuG44cOB_Q,1907
257
257
  castor_extractor/visualization/powerbi/client/credentials_test.py,sha256=TzFqxsWVQ3sXR_n0bJsexK9Uz7ceXCEPVqDGWTJzW60,993
258
258
  castor_extractor/visualization/powerbi/client/endpoints.py,sha256=38ZETzSSnNq3vA9O6nLZQ8T1BVE01R9CjMC03-PRXsM,1911
259
259
  castor_extractor/visualization/powerbi/client/pagination.py,sha256=OZMjoDQPRGMoWd9QcKKrPh3aErJR20SHlrTqY_siLkk,755
@@ -290,7 +290,7 @@ castor_extractor/visualization/sigma/client/client_test.py,sha256=ae0ZOvKutCm44j
290
290
  castor_extractor/visualization/sigma/client/credentials.py,sha256=XddAuQSmCKpxJ70TQgRnOj0vMPYVtiStk_lMMQ1AiNM,693
291
291
  castor_extractor/visualization/sigma/client/endpoints.py,sha256=by9VIFml2whlzQT66f2m56RYBsqPrWdAmIP4JkTaBV4,1799
292
292
  castor_extractor/visualization/sigma/client/pagination.py,sha256=9kCYQpO7hAH2qvYmnVjnGVUDLkpkEM6BgYlv-JTY8AE,1241
293
- castor_extractor/visualization/sigma/client/sources_transformer.py,sha256=2f7REl70wYitopftMtYQU-E8kISVck67i7rGYgf3tkk,4552
293
+ castor_extractor/visualization/sigma/client/sources_transformer.py,sha256=ofjBVxeaTDnawB_PoblLQ2Q_b5FdbqPEHk8arVEyx_o,5086
294
294
  castor_extractor/visualization/sigma/client/sources_transformer_test.py,sha256=06yUHXyv65amXLKXhix6K3kkVc1kpBqSjIYcxbyMI4Y,2766
295
295
  castor_extractor/visualization/sigma/extract.py,sha256=iRmRUzSnq_ObG9fxpOI5Rs07EKKT-VRLcyiti5-8D4c,2986
296
296
  castor_extractor/visualization/strategy/__init__.py,sha256=HOMv4JxqF5ZmViWi-pDE-PSXJRLTdXal_jtpHG_rlR8,123
@@ -326,8 +326,8 @@ castor_extractor/warehouse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
326
326
  castor_extractor/warehouse/abstract/__init__.py,sha256=Fdfa026tgOo64MvzVRLHM_F2G-JmcehrF0mh3dHgb7s,419
327
327
  castor_extractor/warehouse/abstract/asset.py,sha256=wR5mJxAHBcqJ86HRb_Y8x3mDN4uUgSg8jMToLNu0jTM,2740
328
328
  castor_extractor/warehouse/abstract/asset_test.py,sha256=_kd4ybNlWSAdSdEgJKC-jhJTa1nMRa9i8RO3YbqKLM4,758
329
- castor_extractor/warehouse/abstract/extract.py,sha256=9Y2fUn3y2-2WjiHnrabjvAvOA8UETJeTYr18zcM7bdI,2924
330
- castor_extractor/warehouse/abstract/query.py,sha256=20vGhKKX0Kdprj0pbyt0A7L82hwVPezovx38h8seEfA,2614
329
+ castor_extractor/warehouse/abstract/extract.py,sha256=T_GwXO4_IFSVdBuMmnKvsftl549y43nzE5uN4He4G80,2974
330
+ castor_extractor/warehouse/abstract/query.py,sha256=MSOou0F5BlTths1TsAxv9tcyOB013aJc1TegN4q7jfM,2852
331
331
  castor_extractor/warehouse/abstract/time_filter.py,sha256=bggIONfMmUxffkA6TwM3BsjfS2l9WFxPq8krfsau5pw,935
332
332
  castor_extractor/warehouse/abstract/time_filter_test.py,sha256=PIkegB7KOKBdpc6zIvmyl_CeQyADeFDplyQ8HTNU5LA,448
333
333
  castor_extractor/warehouse/bigquery/__init__.py,sha256=PCGNYdi7dHv-SyanUWzRuBp-ypuQ01PkDaQjVnaNhbM,170
@@ -418,23 +418,20 @@ castor_extractor/warehouse/snowflake/client.py,sha256=RB72bbl_k91wDU76yrggPK6oeE
418
418
  castor_extractor/warehouse/snowflake/client_test.py,sha256=ihWtOOAQfh8pu5JTr_EWfqefKOVIaJXznACURzaU1Qs,1432
419
419
  castor_extractor/warehouse/snowflake/credentials.py,sha256=u0sZ6xPtcZmmvnUsAejJk-YxGl8BTzX_BlRjRk92BYU,932
420
420
  castor_extractor/warehouse/snowflake/credentials_test.py,sha256=Lkc-DHXOvr50KrqAW4nt_x0IA0Mu_CsBVu6ATnzQB6I,673
421
- castor_extractor/warehouse/snowflake/extract.py,sha256=3yc9kcVtt2c1uWJOJJgeZchV4VmRr9EeYM3W6gl8zQQ,3201
421
+ castor_extractor/warehouse/snowflake/extract.py,sha256=eGtIqW5kKJl-e36viqYQzkXn39CJkmMBR4oSt-B0ud4,3082
422
422
  castor_extractor/warehouse/snowflake/queries/.sqlfluff,sha256=vttrwcr64JVIuvc7WIg9C54cbOkjg_VjXNR7YnTGOPE,31
423
423
  castor_extractor/warehouse/snowflake/queries/column.sql,sha256=Ru-yC0s76I9LehOA4aCZ--xz6D9H1Hyr3OZdILOBHAw,1882
424
424
  castor_extractor/warehouse/snowflake/queries/column_lineage.sql,sha256=YKBiZ6zySSNcXLDXwm31EjGIIkkkZc0-S6hI1SRM80o,1179
425
425
  castor_extractor/warehouse/snowflake/queries/database.sql,sha256=yxHzV2oQfW0bo2dJVqJkyZy-GruudTi6ObmLaJ505hE,559
426
426
  castor_extractor/warehouse/snowflake/queries/function.sql,sha256=8LRh0ybhd-RldJ8UZspWUm3yv52evq11O2uqIO4KqeQ,372
427
- castor_extractor/warehouse/snowflake/queries/grant_to_role.sql,sha256=O7AJ1LzoXGDFmiVvQ8EMJ5x8FSAnaxRPdmRyAlEmkUM,272
428
- castor_extractor/warehouse/snowflake/queries/grant_to_user.sql,sha256=7AalVajU5vRRpIiys1igSwmDXirbwpMTvJr2ihSz2NE,143
429
427
  castor_extractor/warehouse/snowflake/queries/query.sql,sha256=w4T6-TgwUozDgaF3Fk-qex7bDdEIHLkkB5XEe2VJXZQ,1992
430
- castor_extractor/warehouse/snowflake/queries/role.sql,sha256=D0VvGxLZMwug2SvefhAsNR9YIun0fZvcDWkz891xSYM,96
431
428
  castor_extractor/warehouse/snowflake/queries/schema.sql,sha256=iLn6_y5rn63KigjE4GEAMp8ZuZZofhMXYGb8saPDGUc,776
432
429
  castor_extractor/warehouse/snowflake/queries/table.sql,sha256=CbSLfJAylyyyD3mkGPSLLE7BHrGjlY499kzO9RN0e4Y,1473
433
430
  castor_extractor/warehouse/snowflake/queries/user.sql,sha256=88V8eRj1NDaD_ufclsKOHHlqCtBMQHOV54yy6RKJaXk,570
434
431
  castor_extractor/warehouse/snowflake/queries/view_ddl.sql,sha256=eWsci_50cxiYIv3N7BKkbXVM3RoIzqSDtohqRnE5kg4,673
435
432
  castor_extractor/warehouse/snowflake/query.py,sha256=C2LTdPwBzMQ_zMncg0Kq4_WkoY7K9as5tvxBDrIOlwI,1763
436
433
  castor_extractor/warehouse/sqlserver/__init__.py,sha256=PdOuYznmvKAbfWAm8UdN47MfEsd9jqPi_dDi3WEo1KY,116
437
- castor_extractor/warehouse/sqlserver/client.py,sha256=_rSJOCkp2OkNXQr-4jNLC2_lGJSxw1-qu2L3eaQrpN8,5048
434
+ castor_extractor/warehouse/sqlserver/client.py,sha256=umxTNZ92S2ImtxkPwzXdTzGvym-bjv5xSNK29vawL-8,5549
438
435
  castor_extractor/warehouse/sqlserver/extract.py,sha256=HEJFDM1a4OeQH7OWhYhCOjhkHfGW6qf_qvjFAeMGPYg,2623
439
436
  castor_extractor/warehouse/sqlserver/queries/.sqlfluff,sha256=yy0KQdz8I_67vnXyX8eeWwOWkxTXvHyVKSVwhURktd8,48
440
437
  castor_extractor/warehouse/sqlserver/queries/column.sql,sha256=ojiUQQnHXdWMbgaYOcxKBiwfi7rtu_tyamK6r4t4IBM,2929
@@ -444,10 +441,10 @@ castor_extractor/warehouse/sqlserver/queries/schema.sql,sha256=Fq_8-tCnArayON3fj
444
441
  castor_extractor/warehouse/sqlserver/queries/table.sql,sha256=ggzatJOlOfGkMG1NS-hD-n1-3WLbV9Yh8IsQrEFO5X4,2831
445
442
  castor_extractor/warehouse/sqlserver/queries/user.sql,sha256=MAlnTis43E3Amu1e1Oz_qhaX8Bz-iN0Lrbf9RiohX7Y,99
446
443
  castor_extractor/warehouse/sqlserver/queries/view_ddl.sql,sha256=9rynvx6MWg3iZzrWPB7haZfVKEPkxulzryE2g19x804,315
447
- castor_extractor/warehouse/sqlserver/query.py,sha256=c8f7_SEMR17DhbtzuYphWqWDQ0sCRy-nR442RRBZVYw,1773
444
+ castor_extractor/warehouse/sqlserver/query.py,sha256=gr5lnZSUm-wSYuVnJlg6fc7jXWirbL-sCiQN9RnAiPQ,1789
448
445
  castor_extractor/warehouse/synapse/queries/column.sql,sha256=lNcFoIW3Y0PFOqoOzJEXmPvZvfAsY0AP63Mu2LuPzPo,1351
449
- castor_extractor-0.25.2.dist-info/LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
450
- castor_extractor-0.25.2.dist-info/METADATA,sha256=Lh6TLvQYvBJ0wL4ST5GXkpGX4DUaZzNsThF9ZiBCOzk,28588
451
- castor_extractor-0.25.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
452
- castor_extractor-0.25.2.dist-info/entry_points.txt,sha256=qyTrKNByoq2HYi1xbA79OU7qxg-OWPvle8VwDqt-KnE,1869
453
- castor_extractor-0.25.2.dist-info/RECORD,,
446
+ castor_extractor-0.25.6.dist-info/LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
447
+ castor_extractor-0.25.6.dist-info/METADATA,sha256=ayaVswDaw-D2Zele6ewtVK5inUm9fBOuDik-AGY7yAY,28939
448
+ castor_extractor-0.25.6.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
449
+ castor_extractor-0.25.6.dist-info/entry_points.txt,sha256=qyTrKNByoq2HYi1xbA79OU7qxg-OWPvle8VwDqt-KnE,1869
450
+ castor_extractor-0.25.6.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- SELECT
2
- created_on,
3
- modified_on,
4
- privilege,
5
- granted_on,
6
- name,
7
- table_catalog AS "database",
8
- table_schema AS "schema",
9
- granted_to,
10
- grantee_name,
11
- grant_option,
12
- granted_by,
13
- deleted_on
14
- FROM snowflake.account_usage.grants_to_roles
@@ -1,8 +0,0 @@
1
- SELECT
2
- created_on,
3
- deleted_on,
4
- role,
5
- granted_to,
6
- grantee_name,
7
- granted_by
8
- FROM snowflake.account_usage.grants_to_users
@@ -1,6 +0,0 @@
1
- SELECT
2
- created_on,
3
- deleted_on,
4
- name,
5
- comment
6
- FROM snowflake.account_usage.roles