castor-extractor 0.24.43__py3-none-any.whl → 0.24.49__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,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.24.49 - 2025-09-12
4
+
5
+ * Tableau: add option to bypass ssl certificate verification
6
+
7
+ ## 0.24.48 - 2025-09-09
8
+
9
+ * SqlServer: handle hyphens in database name
10
+
11
+ ## 0.24.47 - 2025-09-08
12
+
13
+ * SqlServer: extract SQL queries and lineage
14
+
15
+ ## 0.24.46 - 2025-09-03
16
+
17
+ * Sigma: Added `HTTPStatus.FORBIDDEN` to the list of ignored errors
18
+
19
+ ## 0.24.45 - 2025-08-27
20
+
21
+ * Sigma: Increasing pagination limit for Sigma extraction
22
+
23
+ ## 0.24.44 - 2025-08-22
24
+
25
+ * Coalesce: do not skip nodes raising a 500 Server Error
26
+
3
27
  ## 0.24.43 - 2025-08-20
4
28
 
5
29
  * SQLServer:
@@ -15,6 +15,14 @@ def main():
15
15
  parser.add_argument("-u", "--user", help="MSSQL User")
16
16
  parser.add_argument("-p", "--password", help="MSSQL Password")
17
17
 
18
+ parser.add_argument(
19
+ "-s",
20
+ "--skip-queries",
21
+ dest="skip_queries",
22
+ action="store_true",
23
+ help="Skip the extraction of SQL queries",
24
+ )
25
+
18
26
  parser.add_argument("-o", "--output", help="Directory to write to")
19
27
 
20
28
  parser.add_argument(
@@ -55,6 +55,12 @@ def main():
55
55
  dest="ignore_errors",
56
56
  help="Allow partial extraction of Fields and Columns: skip batch in case of Timeout errors",
57
57
  )
58
+ parser.add_argument(
59
+ "--ignore-ssl",
60
+ action="store_true",
61
+ dest="ignore_ssl",
62
+ help="Disable SSL verification",
63
+ )
58
64
 
59
65
  parser.add_argument("-o", "--output", help="Directory to write to")
60
66
 
@@ -3,8 +3,6 @@ from functools import partial
3
3
  from http import HTTPStatus
4
4
  from typing import Callable, Optional
5
5
 
6
- from pydantic import ValidationError
7
-
8
6
  from ....utils import (
9
7
  APIClient,
10
8
  BearerAuth,
@@ -123,13 +121,7 @@ class CoalesceClient(APIClient):
123
121
  for index, env in enumerate(environments):
124
122
  env_id = env["id"]
125
123
  logger.info(f"Fetching nodes for env #{env_id} - {index}/{total}")
126
- try:
127
- nodes.extend(self._fetch_env_nodes(env_id))
128
- except ValidationError as e:
129
- # 500 Server Error: Internal Server Error on Coalesce API
130
- logger.warning(
131
- f"Skipping nodes for {env_id} due to the following Error: {e}"
132
- )
124
+ nodes.extend(self._fetch_env_nodes(env_id))
133
125
  logger.info(f"{len(nodes)} nodes extracted so far")
134
126
  return nodes
135
127
 
@@ -53,6 +53,7 @@ _IGNORED_ERROR_CODES = (
53
53
  HTTPStatus.INTERNAL_SERVER_ERROR,
54
54
  HTTPStatus.CONFLICT,
55
55
  HTTPStatus.NOT_FOUND,
56
+ HTTPStatus.FORBIDDEN,
56
57
  )
57
58
  SIGMA_SAFE_MODE = RequestSafeMode(
58
59
  max_errors=_VOLUME_IGNORED,
@@ -5,7 +5,7 @@ from pydantic.alias_generators import to_camel
5
5
 
6
6
  from ....utils import PaginationModel
7
7
 
8
- SIGMA_API_LIMIT = 200 # default number of records per page
8
+ SIGMA_API_LIMIT = 1_000 # default number of records per page
9
9
  SIGMA_QUERIES_PAGINATION_LIMIT = 50
10
10
 
11
11
 
@@ -102,8 +102,10 @@ def _merge_workbooks(
102
102
  def _server(
103
103
  server_url: str,
104
104
  timeout_sec: int,
105
+ ignore_ssl: bool = False,
105
106
  ) -> TSC.Server:
106
- options = {"verify": True, "timeout": timeout_sec}
107
+ verify = not ignore_ssl
108
+ options = {"verify": verify, "timeout": timeout_sec}
107
109
  server = TSC.Server(server_url, use_server_version=True)
108
110
  server.add_http_options(options)
109
111
  return server
@@ -126,9 +128,14 @@ class TableauClient:
126
128
  with_pulse: bool = False,
127
129
  override_page_size: Optional[int] = None,
128
130
  ignore_errors: bool = False,
131
+ ignore_ssl: bool = False,
129
132
  ):
130
133
  self._credentials = credentials
131
- self._server = _server(credentials.server_url, timeout_sec)
134
+ self._server = _server(
135
+ server_url=credentials.server_url,
136
+ timeout_sec=timeout_sec,
137
+ ignore_ssl=ignore_ssl,
138
+ )
132
139
  self._with_columns = with_columns
133
140
  self._with_fields = with_fields
134
141
  self._with_pulse = with_pulse
@@ -37,6 +37,7 @@ def extract_all(**kwargs) -> None:
37
37
  with_pulse = kwargs.get("with_pulse") or False
38
38
  page_size = kwargs.get("page_size")
39
39
  ignore_errors = kwargs.get("ignore_errors") or False
40
+ ignore_ssl = kwargs.get("ignore_ssl") or False
40
41
  timestamp = current_timestamp()
41
42
 
42
43
  credentials = TableauCredentials(**kwargs)
@@ -47,6 +48,7 @@ def extract_all(**kwargs) -> None:
47
48
  with_pulse=with_pulse,
48
49
  override_page_size=page_size,
49
50
  ignore_errors=ignore_errors,
51
+ ignore_ssl=ignore_ssl,
50
52
  )
51
53
  client.login()
52
54
 
@@ -64,6 +64,11 @@ FUNCTIONS_ASSETS = (WarehouseAsset.FUNCTION,)
64
64
  QUERIES_ASSETS = (WarehouseAsset.QUERY,)
65
65
  VIEWS_ASSETS = (WarehouseAsset.VIEW_DDL,)
66
66
 
67
+ QUERIES_ASSET_GROUPS = (
68
+ WarehouseAssetGroup.QUERY,
69
+ WarehouseAssetGroup.VIEW_DDL,
70
+ )
71
+
67
72
  EXTERNAL_LINEAGE_ASSETS = (
68
73
  WarehouseAsset.EXTERNAL_COLUMN_LINEAGE,
69
74
  WarehouseAsset.EXTERNAL_TABLE_LINEAGE,
@@ -66,3 +66,94 @@ class MSSQLClient(SqlalchemyClient):
66
66
  for row in result
67
67
  if row["name"] not in _SYSTEM_DATABASES
68
68
  ]
69
+
70
+ def _current_database(self) -> str:
71
+ result = self.execute(
72
+ ExtractionQuery("SELECT DB_NAME() AS database_name", {})
73
+ )
74
+ return next(result)["database_name"]
75
+
76
+ def _has_access(self, name: str, object_type: str, permission: str) -> bool:
77
+ query_text = f"""
78
+ SELECT
79
+ HAS_PERMS_BY_NAME('{name}', '{object_type}', '{permission}')
80
+ AS has_permission
81
+ """
82
+ query = ExtractionQuery(query_text, dict())
83
+ result = next(self.execute(query))
84
+ return result["has_permission"] == 1
85
+
86
+ def _has_table_read_access(self, table_name: str) -> bool:
87
+ """
88
+ Check whether we have READ access to the given table
89
+ """
90
+ return self._has_access(
91
+ name=table_name,
92
+ object_type="OBJECT",
93
+ permission="SELECT",
94
+ )
95
+
96
+ def _has_view_database_state(self) -> bool:
97
+ """
98
+ Check whether we have VIEW DATABASE STATE permissions, which
99
+ is necessary to fetch data from the Query Store
100
+ """
101
+ return self._has_access(
102
+ name=self._current_database(),
103
+ object_type="DATABASE",
104
+ permission="VIEW DATABASE STATE",
105
+ )
106
+
107
+ def _has_query_store(self) -> bool:
108
+ """
109
+ Checks whether the Query Store is activated on this instance.
110
+ This is required to extract the SQL queries history.
111
+ https://learn.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-ver17"""
112
+ sql = """
113
+ SELECT
114
+ desired_state
115
+ FROM
116
+ sys.database_query_store_options
117
+ """
118
+ query = ExtractionQuery(sql, {})
119
+ # 2 = READ_WRITE, which means the Query Store is activated
120
+ return next(self.execute(query))["desired_state"] == 2
121
+
122
+ def has_queries_permissions(self) -> bool:
123
+ """
124
+ Verify that we habe the required permissions to extract
125
+ query history and view object definitions (DDL).
126
+
127
+ This check ensures:
128
+ - Query Store is enabled on the database.
129
+ - We have the VIEW DATABASE STATE permissions
130
+ - We have read access to the relevant system tables.
131
+ """
132
+
133
+ tables = (
134
+ # SQL queries
135
+ "sys.query_store_plan",
136
+ "sys.query_store_query",
137
+ "sys.query_store_query_text",
138
+ "sys.query_store_runtime_stats",
139
+ # views DDL
140
+ "sys.schemas",
141
+ "sys.sql_modules",
142
+ "sys.views",
143
+ )
144
+
145
+ has_permissions = True
146
+ for table in tables:
147
+ if not self._has_table_read_access(table):
148
+ logger.info(f"Missing READ permissions for table {table}")
149
+ has_permissions = False
150
+
151
+ if not self._has_view_database_state():
152
+ logger.info("Missing permissions: VIEW DATABASE STATE")
153
+ has_permissions = False
154
+
155
+ if not self._has_query_store():
156
+ logger.info("Missing permissions: Query Store is not activated")
157
+ has_permissions = False
158
+
159
+ return has_permissions
@@ -4,6 +4,8 @@ from ...utils import LocalStorage, filter_items, from_env, write_summary
4
4
  from ..abstract import (
5
5
  CATALOG_ASSETS,
6
6
  EXTERNAL_LINEAGE_ASSETS,
7
+ QUERIES_ASSETS,
8
+ VIEWS_ASSETS,
7
9
  SQLExtractionProcessor,
8
10
  SupportedAssets,
9
11
  WarehouseAsset,
@@ -19,8 +21,10 @@ logger = logging.getLogger(__name__)
19
21
 
20
22
  MSSQL_ASSETS: SupportedAssets = {
21
23
  WarehouseAssetGroup.CATALOG: CATALOG_ASSETS,
22
- WarehouseAssetGroup.ROLE: (WarehouseAsset.USER,),
23
24
  WarehouseAssetGroup.EXTERNAL_LINEAGE: EXTERNAL_LINEAGE_ASSETS,
25
+ WarehouseAssetGroup.QUERY: QUERIES_ASSETS,
26
+ WarehouseAssetGroup.ROLE: (WarehouseAsset.USER,),
27
+ WarehouseAssetGroup.VIEW_DDL: VIEWS_ASSETS,
24
28
  }
25
29
 
26
30
 
@@ -71,7 +75,10 @@ def extract_all(**kwargs) -> None:
71
75
  storage=storage,
72
76
  )
73
77
 
78
+ skip_queries = kwargs.get("skip_queries") or False
74
79
  for group in extractable_asset_groups(MSSQL_ASSETS):
80
+ if group == WarehouseAssetGroup.QUERY and skip_queries:
81
+ continue
75
82
  for asset in group:
76
83
  logger.info(f"Extracting `{asset.value.upper()}` ...")
77
84
  location = extractor.extract(asset, skip_existing)
@@ -11,7 +11,7 @@ WITH extended_tables AS (
11
11
  table_owner_id = principal_id,
12
12
  schema_id
13
13
  FROM
14
- {database}.sys.tables
14
+ [{database}].sys.tables
15
15
 
16
16
  UNION
17
17
 
@@ -21,7 +21,7 @@ WITH extended_tables AS (
21
21
  table_owner_id = principal_id,
22
22
  schema_id
23
23
  FROM
24
- {database}.sys.views
24
+ [{database}].sys.views
25
25
 
26
26
  UNION
27
27
 
@@ -31,7 +31,7 @@ WITH extended_tables AS (
31
31
  table_owner_id = principal_id,
32
32
  schema_id
33
33
  FROM
34
- {database}.sys.external_tables
34
+ [{database}].sys.external_tables
35
35
  ),
36
36
  /*
37
37
  `sys.columns` contains, among others:
@@ -54,11 +54,11 @@ column_ids AS (
54
54
  schema_name = ss.name,
55
55
  schema_id = ss.schema_id,
56
56
  comment = CONVERT(varchar(1024), ep.value)
57
- FROM {database}.sys.columns AS sc
57
+ FROM [{database}].sys.columns AS sc
58
58
  LEFT JOIN extended_tables AS et ON sc.object_id = et.table_id
59
- LEFT JOIN {database}.sys.schemas AS ss ON et.schema_id = ss.schema_id
60
- LEFT JOIN {database}.sys.databases AS sd ON sd.name = '{database}'
61
- LEFT JOIN {database}.sys.extended_properties AS ep
59
+ LEFT JOIN [{database}].sys.schemas AS ss ON et.schema_id = ss.schema_id
60
+ LEFT JOIN [{database}].sys.databases AS sd ON sd.name = '{database}'
61
+ LEFT JOIN [{database}].sys.extended_properties AS ep
62
62
  ON
63
63
  sc.object_id = ep.major_id
64
64
  AND sc.column_id = ep.minor_id
@@ -87,7 +87,7 @@ columns AS (
87
87
  i.comment,
88
88
  column_id = CONCAT(i.table_id, '.', c.column_name)
89
89
  FROM
90
- {database}.INFORMATION_SCHEMA.COLUMNS AS c
90
+ [{database}].INFORMATION_SCHEMA.COLUMNS AS c
91
91
  LEFT JOIN column_ids AS i
92
92
  ON
93
93
  (
@@ -0,0 +1,25 @@
1
+ SELECT
2
+ q.query_id,
3
+ qt.query_sql_text as query_text,
4
+ rs.count_executions,
5
+ rs.last_duration as duration,
6
+ rs.last_execution_time as start_time,
7
+ 'unknown-user' as user_name,
8
+ 'unknown-user' as user_id,
9
+ DATEADD(SECOND, last_duration / 1000000,
10
+ DATEADD(MICROSECOND, last_duration % 1000000, rs.last_execution_time)
11
+ ) AS end_time
12
+ FROM
13
+ sys.query_store_runtime_stats AS rs
14
+ INNER JOIN
15
+ sys.query_store_plan p
16
+ ON rs.plan_id = p.plan_id
17
+ INNER JOIN
18
+ sys.query_store_query q
19
+ ON p.query_id = q.query_id
20
+ INNER JOIN
21
+ sys.query_store_query_text qt
22
+ ON q.query_text_id = qt.query_text_id
23
+ WHERE
24
+ CAST(rs.last_execution_time AS DATE) = :day
25
+ AND DATEPART(HOUR, rs.last_execution_time) BETWEEN :hour_min AND :hour_max
@@ -8,7 +8,7 @@ WITH ids AS (
8
8
  SELECT DISTINCT
9
9
  table_catalog,
10
10
  table_schema
11
- FROM {database}.INFORMATION_SCHEMA.TABLES
11
+ FROM [{database}].INFORMATION_SCHEMA.TABLES
12
12
  )
13
13
 
14
14
  SELECT
@@ -18,10 +18,10 @@ SELECT
18
18
  schema_id = CAST(d.database_id AS VARCHAR(10)) + '_' + CAST(s.schema_id AS VARCHAR(10)),
19
19
  schema_owner = u.name,
20
20
  schema_owner_id = u.uid
21
- FROM {database}.sys.schemas AS s
21
+ FROM [{database}].sys.schemas AS s
22
22
  INNER JOIN ids AS i
23
23
  ON s.name = i.table_schema
24
- LEFT JOIN {database}.sys.sysusers AS u
24
+ LEFT JOIN [{database}].sys.sysusers AS u
25
25
  ON s.principal_id = u.uid
26
- LEFT JOIN {database}.sys.databases AS d
26
+ LEFT JOIN [{database}].sys.databases AS d
27
27
  ON i.table_catalog COLLATE DATABASE_DEFAULT = d.name COLLATE DATABASE_DEFAULT
@@ -11,7 +11,7 @@ WITH extended_tables AS (
11
11
  table_owner_id = principal_id,
12
12
  schema_id
13
13
  FROM
14
- {database}.sys.tables
14
+ [{database}].sys.tables
15
15
 
16
16
  UNION
17
17
 
@@ -21,7 +21,7 @@ WITH extended_tables AS (
21
21
  table_owner_id = principal_id,
22
22
  schema_id
23
23
  FROM
24
- {database}.sys.views
24
+ [{database}].sys.views
25
25
 
26
26
  UNION
27
27
 
@@ -31,14 +31,14 @@ WITH extended_tables AS (
31
31
  table_owner_id = principal_id,
32
32
  schema_id
33
33
  FROM
34
- {database}.sys.external_tables
34
+ [{database}].sys.external_tables
35
35
  ),
36
36
  -- Get the row count per table
37
37
  partitions AS (
38
38
  SELECT
39
39
  object_id,
40
40
  row_count = SUM(rows)
41
- FROM {database}.sys.partitions
41
+ FROM [{database}].sys.partitions
42
42
  GROUP BY object_id
43
43
  ),
44
44
  -- Append row count to table properties
@@ -70,11 +70,11 @@ table_ids AS (
70
70
  row_count,
71
71
  comment = CONVERT(varchar(1024), ep.value)
72
72
  FROM extended_tables_with_row_count AS et
73
- LEFT JOIN {database}.sys.schemas AS ss
73
+ LEFT JOIN [{database}].sys.schemas AS ss
74
74
  ON et.schema_id = ss.schema_id
75
- LEFT JOIN {database}.sys.sysusers AS u
75
+ LEFT JOIN [{database}].sys.sysusers AS u
76
76
  ON et.table_owner_id = u.uid
77
- LEFT JOIN {database}.sys.extended_properties AS ep
77
+ LEFT JOIN [{database}].sys.extended_properties AS ep
78
78
  ON (
79
79
  et.table_id = ep.major_id
80
80
  AND ep.minor_id = 0
@@ -90,8 +90,8 @@ meta AS (
90
90
  t.table_name,
91
91
  t.table_type
92
92
  FROM
93
- {database}.INFORMATION_SCHEMA.TABLES AS t
94
- LEFT JOIN {database}.sys.databases AS db
93
+ [{database}].INFORMATION_SCHEMA.TABLES AS t
94
+ LEFT JOIN [{database}].sys.databases AS db
95
95
  ON t.table_catalog COLLATE DATABASE_DEFAULT = db.name COLLATE DATABASE_DEFAULT
96
96
  )
97
97
 
@@ -0,0 +1,13 @@
1
+ SELECT
2
+ v.name AS view_name,
3
+ m.definition AS view_definition,
4
+ s.name AS schema_name,
5
+ DB_NAME() AS database_name
6
+ FROM
7
+ sys.views v
8
+ INNER JOIN
9
+ sys.schemas s
10
+ ON v.schema_id = s.schema_id
11
+ INNER JOIN
12
+ sys.sql_modules m
13
+ ON v.object_id = m.object_id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: castor-extractor
3
- Version: 0.24.43
3
+ Version: 0.24.49
4
4
  Summary: Extract your metadata assets.
5
5
  Home-page: https://www.castordoc.com/
6
6
  License: EULA
@@ -215,6 +215,30 @@ For any questions or bug report, contact us at [support@coalesce.io](mailto:supp
215
215
 
216
216
  # Changelog
217
217
 
218
+ ## 0.24.49 - 2025-09-12
219
+
220
+ * Tableau: add option to bypass ssl certificate verification
221
+
222
+ ## 0.24.48 - 2025-09-09
223
+
224
+ * SqlServer: handle hyphens in database name
225
+
226
+ ## 0.24.47 - 2025-09-08
227
+
228
+ * SqlServer: extract SQL queries and lineage
229
+
230
+ ## 0.24.46 - 2025-09-03
231
+
232
+ * Sigma: Added `HTTPStatus.FORBIDDEN` to the list of ignored errors
233
+
234
+ ## 0.24.45 - 2025-08-27
235
+
236
+ * Sigma: Increasing pagination limit for Sigma extraction
237
+
238
+ ## 0.24.44 - 2025-08-22
239
+
240
+ * Coalesce: do not skip nodes raising a 500 Server Error
241
+
218
242
  ## 0.24.43 - 2025-08-20
219
243
 
220
244
  * SQLServer:
@@ -1,4 +1,4 @@
1
- CHANGELOG.md,sha256=BP52t2sRBsw161mUbZUgLka80iFSbvhcYPju_bgXLL0,19737
1
+ CHANGELOG.md,sha256=QFu9HzAtRHH5oVOsCIqa3Nf6tmCptJwGuzRpAdH9goA,20227
2
2
  Dockerfile,sha256=xQ05-CFfGShT3oUqaiumaldwA288dj9Yb_pxofQpufg,301
3
3
  DockerfileUsage.md,sha256=2hkJQF-5JuuzfPZ7IOxgM6QgIQW7l-9oRMFVwyXC4gE,998
4
4
  LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
@@ -24,9 +24,9 @@ castor_extractor/commands/extract_salesforce.py,sha256=3j3YTmMkPAwocR-B1ozJQai0U
24
24
  castor_extractor/commands/extract_salesforce_reporting.py,sha256=FdANTNiLkIPdm80XMYxWReHjdycLsIa61pyeCD-sUDk,962
25
25
  castor_extractor/commands/extract_sigma.py,sha256=sxewHcZ1Doq35V2qnpX_zCKKXkrb1_9bYjUMg7BOW-k,643
26
26
  castor_extractor/commands/extract_snowflake.py,sha256=GwlrRxwEBjHqGs_3bs5vM9fzmv61_iwvBr1KcIgFgWM,2161
27
- castor_extractor/commands/extract_sqlserver.py,sha256=-20AlQbJ4W3oQytHLKdN8GX__UkrrQukOgSzy2l1WZY,1483
27
+ castor_extractor/commands/extract_sqlserver.py,sha256=zwPITImztIIyIbZJyE1SioGraVrlRfxgLq_vHX6l5l0,1664
28
28
  castor_extractor/commands/extract_strategy.py,sha256=Q-pUymatPrBFGXobhyUPzFph0-t774-XOpjdCFF1dYo,821
29
- castor_extractor/commands/extract_tableau.py,sha256=LNtI29LbVk1vp4RNrn89GmdW6R_7QBYunRmkowDhbco,1982
29
+ castor_extractor/commands/extract_tableau.py,sha256=cfH-b0Hq9LGrQSJv02Yr_4d6oNqhxwDqUcKraE-5fRc,2134
30
30
  castor_extractor/commands/extract_thoughtspot.py,sha256=caAYJlH-vK7u5IUB6OKXxcaWfLgc7d_XqnFDWK6YNS4,639
31
31
  castor_extractor/commands/file_check.py,sha256=TJx76Ymd0QCECmq35zRJMkPE8DJtSInB28MuSXWk8Ao,2644
32
32
  castor_extractor/commands/upload.py,sha256=sqpEF_qqCNvT_niIrM6jPhzLaFVjtYwpc2iZw540F20,1633
@@ -76,7 +76,7 @@ castor_extractor/transformation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
76
76
  castor_extractor/transformation/coalesce/__init__.py,sha256=CW_qdtEfwgJRsCyBlk5hNlxwEO-VV6mBXZvkRbND_J8,112
77
77
  castor_extractor/transformation/coalesce/assets.py,sha256=pzccYPP66c9PAnVroemx7-6MeRHw7Ft1OlTC6jIamAA,363
78
78
  castor_extractor/transformation/coalesce/client/__init__.py,sha256=VRmVpH29rOghtDQnCN7dAdA0dI0Lxseu4BC8rnwM9dU,80
79
- castor_extractor/transformation/coalesce/client/client.py,sha256=3YB82ibaumeSRd510mlrPXKsWefV3lHQQVis9oEK-LQ,6133
79
+ castor_extractor/transformation/coalesce/client/client.py,sha256=Fm4ozdjosV77AvLVUvOkdMuH2GhepH-AU4xyu7WEgMM,5826
80
80
  castor_extractor/transformation/coalesce/client/credentials.py,sha256=jbJxjbdPspf-dzYKfeb7oqL_8TXd1nvkJrjAcdAnLPc,548
81
81
  castor_extractor/transformation/coalesce/client/endpoint.py,sha256=0uLh7dpA1vsR9qr_50SEYV_-heQE4BwED9oNMgYsL-w,1272
82
82
  castor_extractor/transformation/coalesce/client/pagination.py,sha256=zynyWCMEzUQ7HA1Q5AP4BAOmxRQI6NA5jCPEo0lHn44,705
@@ -272,11 +272,11 @@ castor_extractor/visualization/salesforce_reporting/extract.py,sha256=ScStilebLG
272
272
  castor_extractor/visualization/sigma/__init__.py,sha256=GINql4yJLtjfOJgjHaWNpE13cMtnKNytiFRomwav27Q,114
273
273
  castor_extractor/visualization/sigma/assets.py,sha256=uKGKDaeY1ejc7XGh4eFaNp2ygG7hgca132xsX4eCwKQ,380
274
274
  castor_extractor/visualization/sigma/client/__init__.py,sha256=YQv06FBBQHvBMFg_tN0nUcmUp2NCL2s-eFTXG8rXaBg,74
275
- castor_extractor/visualization/sigma/client/client.py,sha256=VU0BHlug3tCpGA1je0PjEy4hU4TKhCH9UUGi8LRmNy8,11422
275
+ castor_extractor/visualization/sigma/client/client.py,sha256=Hg9IACQyRkYiH19S-LqClArQDOxilt8-l2s7u9o717k,11448
276
276
  castor_extractor/visualization/sigma/client/client_test.py,sha256=ae0ZOvKutCm44jnrJ-0_A5Y6ZGyDkMf9Ml3eEP8dNkY,581
277
277
  castor_extractor/visualization/sigma/client/credentials.py,sha256=XddAuQSmCKpxJ70TQgRnOj0vMPYVtiStk_lMMQ1AiNM,693
278
278
  castor_extractor/visualization/sigma/client/endpoints.py,sha256=i7KTKnl2Os6752CdtJl0vPSC_Z6JxmacodV_saOnce0,1662
279
- castor_extractor/visualization/sigma/client/pagination.py,sha256=2bFA7GiBUUasFtHJKA90516d283p7Pg50-4zw6Fwt8I,726
279
+ castor_extractor/visualization/sigma/client/pagination.py,sha256=1yLpCNps5FnDiPcXCcgHu23cxg15Gfc6FvE3AJleb2c,728
280
280
  castor_extractor/visualization/sigma/client/sources_transformer.py,sha256=n-5mZWSvzfTwpM5VP_bwlcxcaAwCKEEbpMCG_1KRVP4,3748
281
281
  castor_extractor/visualization/sigma/client/sources_transformer_test.py,sha256=06yUHXyv65amXLKXhix6K3kkVc1kpBqSjIYcxbyMI4Y,2766
282
282
  castor_extractor/visualization/sigma/extract.py,sha256=poTh70Xm2D6BwbdGApLkjXy6-t4iZnOoMB5DPfaTLEI,2929
@@ -290,7 +290,7 @@ castor_extractor/visualization/strategy/extract.py,sha256=9Ec48BwiA-5nykhcQiqkSi
290
290
  castor_extractor/visualization/tableau/__init__.py,sha256=eFI_1hjdkxyUiAYiy3szwyuwn3yJ5C_KbpBU0ySJDcQ,138
291
291
  castor_extractor/visualization/tableau/assets.py,sha256=HbCRd8VCj1WBEeqg9jwnygnT7xOFJ6PQD7Lq7sV-XR0,635
292
292
  castor_extractor/visualization/tableau/client/__init__.py,sha256=P8RKFKOC63WkH5hdEytJOwHS9vzQ8GXreLfXZetmMP8,78
293
- castor_extractor/visualization/tableau/client/client.py,sha256=QV-GFS4nEq976JLji57pIfsw2ZZaGTvfCFqy6_HOWMg,8204
293
+ castor_extractor/visualization/tableau/client/client.py,sha256=110snIGR-Qi3c9zLAjhubSMDU9JB_WtfnFZLdByKpZY,8391
294
294
  castor_extractor/visualization/tableau/client/client_metadata_api.py,sha256=eAq9rjrB_2ZCQy9NwREHBOTXZffWdkwtwhzswm1pEfk,7449
295
295
  castor_extractor/visualization/tableau/client/client_metadata_api_test.py,sha256=rikyQKDLFYHLJhHJTF3LwWhKJ80svtTsYp5n7n9oTU8,2665
296
296
  castor_extractor/visualization/tableau/client/client_rest_api.py,sha256=x4dNw4PPJdalTlGowwkANwqiS2ZhGxzpQytkHq3KbpY,3988
@@ -300,7 +300,7 @@ castor_extractor/visualization/tableau/client/errors.py,sha256=ecT8Tit5VtzrOBB9y
300
300
  castor_extractor/visualization/tableau/client/gql_queries.py,sha256=XJAfhpMZ5S7-AhfpOaoHMHCAdil-l5e5xB-CH4NC38M,2177
301
301
  castor_extractor/visualization/tableau/client/rest_fields.py,sha256=ZKYYuMxg9PXhczVXaD4rXNk7dYyWJ1_bVM8FLEXju7s,888
302
302
  castor_extractor/visualization/tableau/constants.py,sha256=lHGB50FgVNO2nXeIhkvQKivD8ZFBIjDrflgD5cTXKJw,104
303
- castor_extractor/visualization/tableau/extract.py,sha256=9mSHFJ2DGlW-cDYiRZlJafAgj4_ObACxO0l9vBBfjUw,1683
303
+ castor_extractor/visualization/tableau/extract.py,sha256=3NaOwEhKA_Oc9mc-uESrjISez4XFQxQaq4X4fUMv_VM,1765
304
304
  castor_extractor/visualization/thoughtspot/__init__.py,sha256=NhTGUk5Kdt54oCjHYoAt0cLBmVLys5lFYiRANL6wCmI,150
305
305
  castor_extractor/visualization/thoughtspot/assets.py,sha256=SAQWPKaD2NTSDg7-GSkcRSSEkKSws0MJfOVcHkdeTSg,276
306
306
  castor_extractor/visualization/thoughtspot/client/__init__.py,sha256=svrE2rMxR-OXctjPeAHMEPePlfcra-9KDevTMcHunAA,86
@@ -311,7 +311,7 @@ castor_extractor/visualization/thoughtspot/client/pagination.py,sha256=iosYUJ7ZM
311
311
  castor_extractor/visualization/thoughtspot/extract.py,sha256=mcXS0jGFpa50td98AVbbTqxchyI5wDCpB-v1o5iRc3g,1354
312
312
  castor_extractor/warehouse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
313
313
  castor_extractor/warehouse/abstract/__init__.py,sha256=Fdfa026tgOo64MvzVRLHM_F2G-JmcehrF0mh3dHgb7s,419
314
- castor_extractor/warehouse/abstract/asset.py,sha256=JiFRohZfPkQrgJJ8gTirD69snY1ubjPr5_Mg3vM--RY,2647
314
+ castor_extractor/warehouse/abstract/asset.py,sha256=wR5mJxAHBcqJ86HRb_Y8x3mDN4uUgSg8jMToLNu0jTM,2740
315
315
  castor_extractor/warehouse/abstract/asset_test.py,sha256=_kd4ybNlWSAdSdEgJKC-jhJTa1nMRa9i8RO3YbqKLM4,758
316
316
  castor_extractor/warehouse/abstract/extract.py,sha256=9Y2fUn3y2-2WjiHnrabjvAvOA8UETJeTYr18zcM7bdI,2924
317
317
  castor_extractor/warehouse/abstract/query.py,sha256=20vGhKKX0Kdprj0pbyt0A7L82hwVPezovx38h8seEfA,2614
@@ -421,18 +421,20 @@ castor_extractor/warehouse/snowflake/queries/user.sql,sha256=88V8eRj1NDaD_ufclsK
421
421
  castor_extractor/warehouse/snowflake/queries/view_ddl.sql,sha256=eWsci_50cxiYIv3N7BKkbXVM3RoIzqSDtohqRnE5kg4,673
422
422
  castor_extractor/warehouse/snowflake/query.py,sha256=C2LTdPwBzMQ_zMncg0Kq4_WkoY7K9as5tvxBDrIOlwI,1763
423
423
  castor_extractor/warehouse/sqlserver/__init__.py,sha256=PdOuYznmvKAbfWAm8UdN47MfEsd9jqPi_dDi3WEo1KY,116
424
- castor_extractor/warehouse/sqlserver/client.py,sha256=Bjfpw96IKAQfWPiU5SZYEDfetwfkqZrnKbQYoStcnZc,2007
425
- castor_extractor/warehouse/sqlserver/extract.py,sha256=C8MubArUUq5r8UyalXzmQycqgQOv_0DYKXmxDYeGpHg,2350
424
+ castor_extractor/warehouse/sqlserver/client.py,sha256=oyHYxp-KPJAJnSnYFwXce5zDH7NO1KbD2thT7bjYHa8,5155
425
+ castor_extractor/warehouse/sqlserver/extract.py,sha256=HEJFDM1a4OeQH7OWhYhCOjhkHfGW6qf_qvjFAeMGPYg,2623
426
426
  castor_extractor/warehouse/sqlserver/queries/.sqlfluff,sha256=yy0KQdz8I_67vnXyX8eeWwOWkxTXvHyVKSVwhURktd8,48
427
- castor_extractor/warehouse/sqlserver/queries/column.sql,sha256=MpIpUGP-oRJEDv6baO34RKg0KtZqK9CHH7e818-_qvY,2913
427
+ castor_extractor/warehouse/sqlserver/queries/column.sql,sha256=ojiUQQnHXdWMbgaYOcxKBiwfi7rtu_tyamK6r4t4IBM,2929
428
428
  castor_extractor/warehouse/sqlserver/queries/database.sql,sha256=4dPeBCn85MEOXr1f-DPXxiI3RvvoE_1n8lsbTs26E0I,150
429
- castor_extractor/warehouse/sqlserver/queries/schema.sql,sha256=sMOrMC2UCqTzRMHiQqQFWozaujrefLBSkwMrpbo-rO4,881
430
- castor_extractor/warehouse/sqlserver/queries/table.sql,sha256=liLvzp6NyrW8vF7TrP5_4Asmw2cyMDu8FCvhEV6Z1jc,2837
429
+ castor_extractor/warehouse/sqlserver/queries/query.sql,sha256=T0eleIygrFvg77vuT5RxTXrMMHXjxqaKwGV4icPsmEs,769
430
+ castor_extractor/warehouse/sqlserver/queries/schema.sql,sha256=6oJ3S-Ql4JMenDNE2hRHUqZ1d3tDGbzjPvR-dDzA5xs,889
431
+ castor_extractor/warehouse/sqlserver/queries/table.sql,sha256=hJOlUCRVoZzRAcNQgPeM0ZFs5SA3_h0rZqC5S3xEOWs,2855
431
432
  castor_extractor/warehouse/sqlserver/queries/user.sql,sha256=gOrZsMVypusR2dc4vwVs4E1a-CliRsr_UjnD2EbXs-A,94
433
+ castor_extractor/warehouse/sqlserver/queries/view_ddl.sql,sha256=5XkVBmJR2zDeutDSEL0h-uCqwuyXuiRQ75qUbUSK8kw,276
432
434
  castor_extractor/warehouse/sqlserver/query.py,sha256=QcGJ3lYbWpGCx-qMytTiEnTqGeEsUZrBLIdg_9jSm8A,1526
433
435
  castor_extractor/warehouse/synapse/queries/column.sql,sha256=lNcFoIW3Y0PFOqoOzJEXmPvZvfAsY0AP63Mu2LuPzPo,1351
434
- castor_extractor-0.24.43.dist-info/LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
435
- castor_extractor-0.24.43.dist-info/METADATA,sha256=05SXgWB7i36oBtLtNbik3yDxf2vliZuYuVYvXHP7bqg,27190
436
- castor_extractor-0.24.43.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
437
- castor_extractor-0.24.43.dist-info/entry_points.txt,sha256=_F-qeZCybjoMkNb9ErEhnyqXuG6afHIFQhakdBHZsr4,1803
438
- castor_extractor-0.24.43.dist-info/RECORD,,
436
+ castor_extractor-0.24.49.dist-info/LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
437
+ castor_extractor-0.24.49.dist-info/METADATA,sha256=XLjmiR7fzLKZGXXjNjCnmTbV7uI_D95_0LIZ3sSZKSs,27680
438
+ castor_extractor-0.24.49.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
439
+ castor_extractor-0.24.49.dist-info/entry_points.txt,sha256=_F-qeZCybjoMkNb9ErEhnyqXuG6afHIFQhakdBHZsr4,1803
440
+ castor_extractor-0.24.49.dist-info/RECORD,,