castor-extractor 0.23.2__py3-none-any.whl → 0.24.0__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.

Files changed (48) hide show
  1. CHANGELOG.md +8 -0
  2. README.md +8 -6
  3. castor_extractor/commands/extract_snowflake.py +6 -0
  4. castor_extractor/knowledge/confluence/client/client.py +0 -13
  5. castor_extractor/knowledge/confluence/client/endpoints.py +1 -1
  6. castor_extractor/warehouse/snowflake/client.py +17 -7
  7. castor_extractor/warehouse/snowflake/credentials.py +1 -0
  8. castor_extractor/warehouse/snowflake/extract.py +7 -0
  9. {castor_extractor-0.23.2.dist-info → castor_extractor-0.24.0.dist-info}/METADATA +17 -7
  10. {castor_extractor-0.23.2.dist-info → castor_extractor-0.24.0.dist-info}/RECORD +13 -48
  11. castor_extractor/visualization/tableau/__init__.py +0 -3
  12. castor_extractor/visualization/tableau/assets.py +0 -49
  13. castor_extractor/visualization/tableau/client/__init__.py +0 -2
  14. castor_extractor/visualization/tableau/client/client.py +0 -229
  15. castor_extractor/visualization/tableau/client/client_utils.py +0 -75
  16. castor_extractor/visualization/tableau/client/credentials.py +0 -104
  17. castor_extractor/visualization/tableau/client/project.py +0 -28
  18. castor_extractor/visualization/tableau/client/safe_mode.py +0 -70
  19. castor_extractor/visualization/tableau/constants.py +0 -9
  20. castor_extractor/visualization/tableau/errors.py +0 -5
  21. castor_extractor/visualization/tableau/extract.py +0 -121
  22. castor_extractor/visualization/tableau/gql_fields.py +0 -249
  23. castor_extractor/visualization/tableau/tests/__init__.py +0 -0
  24. castor_extractor/visualization/tableau/tests/unit/__init__.py +0 -0
  25. castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_1_get.json +0 -15
  26. castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_2_get.json +0 -15
  27. castor_extractor/visualization/tableau/tests/unit/assets/rest_api/auth.xml +0 -7
  28. castor_extractor/visualization/tableau/tests/unit/assets/rest_api/project_get.xml +0 -9
  29. castor_extractor/visualization/tableau/tests/unit/assets/rest_api/user_get.xml +0 -8
  30. castor_extractor/visualization/tableau/tests/unit/assets/rest_api/view_get_usage.xml +0 -24
  31. castor_extractor/visualization/tableau/tests/unit/assets/rest_api/workbook_get.xml +0 -19
  32. castor_extractor/visualization/tableau/tests/unit/graphql/__init__.py +0 -0
  33. castor_extractor/visualization/tableau/tests/unit/graphql/paginated_object_test.py +0 -63
  34. castor_extractor/visualization/tableau/tests/unit/rest_api/__init__.py +0 -0
  35. castor_extractor/visualization/tableau/tests/unit/rest_api/auth_test.py +0 -39
  36. castor_extractor/visualization/tableau/tests/unit/rest_api/credentials_test.py +0 -13
  37. castor_extractor/visualization/tableau/tests/unit/rest_api/projects_test.py +0 -59
  38. castor_extractor/visualization/tableau/tests/unit/rest_api/usages_test.py +0 -49
  39. castor_extractor/visualization/tableau/tests/unit/rest_api/users_test.py +0 -52
  40. castor_extractor/visualization/tableau/tests/unit/rest_api/workbooks_test.py +0 -60
  41. castor_extractor/visualization/tableau/tests/unit/utils/__init__.py +0 -1
  42. castor_extractor/visualization/tableau/tests/unit/utils/env_key.py +0 -6
  43. castor_extractor/visualization/tableau/tsc_fields.py +0 -46
  44. castor_extractor/visualization/tableau/types.py +0 -11
  45. castor_extractor/visualization/tableau/usage.py +0 -14
  46. {castor_extractor-0.23.2.dist-info → castor_extractor-0.24.0.dist-info}/LICENCE +0 -0
  47. {castor_extractor-0.23.2.dist-info → castor_extractor-0.24.0.dist-info}/WHEEL +0 -0
  48. {castor_extractor-0.23.2.dist-info → castor_extractor-0.24.0.dist-info}/entry_points.txt +0 -0
CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.24.0 - 2025-03-10
4
+
5
+ * Remove legacy Tableau Connector
6
+
7
+ ## 0.23.3 - 2025-02-19
8
+
9
+ * Snowflake : add --insecure-mode option to turn off OCSP checking
10
+
3
11
  ## 0.23.2 - 2025-02-17
4
12
 
5
13
  * support page_size in Tableau extraction command
README.md CHANGED
@@ -34,14 +34,14 @@ It also embeds utilities to help you push your metadata to Castor:
34
34
 
35
35
  ## Installation
36
36
 
37
- Requirements: **python3.8+**
37
+ Requirements: **python3.9+**
38
38
  <img src="https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg" width=20 />
39
39
 
40
40
  ### Create castor-env
41
41
 
42
42
  We advise to create a dedicated [Python environment](https://docs.python.org/3/library/venv.html).
43
43
 
44
- Here's an example using `Pyenv` and Python `3.8.12`:
44
+ Here's an example using `Pyenv`:
45
45
 
46
46
  - Install Pyenv
47
47
 
@@ -58,22 +58,24 @@ eval "$(pyenv init --path)"
58
58
  eval "$(pyenv virtualenv-init -)"
59
59
  ```
60
60
 
61
- - [optional] Install python 3.8+
61
+ - [optional] Install python 3.9+ if needed
62
62
 
63
63
  ```bash
64
64
  pyenv versions # check your local python installations
65
65
 
66
- pyenv install -v 3.8.12 # if none of the installed versions satisfy requirements 8+
66
+ # install Python if none of the installed versions satisfy requirements 3.9+
67
+ # in this example, we will install Python 3.11.9
68
+ pyenv install -v 3.11.9
67
69
  ```
68
70
 
69
71
  - Create your virtual env
70
72
 
71
73
  ```bash
72
- pyenv virtualenv 3.8.12 castor-env # create a dedicated env
74
+ pyenv virtualenv 3.11.9 castor-env # create a dedicated env
73
75
  pyenv shell castor-env # activate the environment
74
76
 
75
77
  # optional checks
76
- python --version # should be `3.8.12`
78
+ python --version # should be `3.11.9`
77
79
  pyenv version # should be `castor-env`
78
80
  ```
79
81
 
@@ -40,6 +40,11 @@ def main():
40
40
  action="store_true",
41
41
  help="Optional: will fetch transients tables if added",
42
42
  )
43
+ parser.add_argument(
44
+ "--insecure-mode",
45
+ action="store_true",
46
+ help="Optional: turns off OCSP checking",
47
+ )
43
48
 
44
49
  parser.add_argument("-o", "--output", help="Directory to write to")
45
50
 
@@ -65,4 +70,5 @@ def main():
65
70
  output_directory=args.output,
66
71
  skip_existing=args.skip_existing,
67
72
  fetch_transient=args.fetch_transient,
73
+ insecure_mode=args.insecure_mode,
68
74
  )
@@ -1,12 +1,9 @@
1
1
  from collections.abc import Iterator
2
2
  from functools import partial
3
- from http import HTTPStatus
4
- from typing import Optional
5
3
 
6
4
  from ....utils import (
7
5
  APIClient,
8
6
  BasicAuth,
9
- RequestSafeMode,
10
7
  fetch_all_pages,
11
8
  )
12
9
  from ..assets import (
@@ -21,19 +18,11 @@ _HEADERS = {
21
18
  "Content-Type": "application/json",
22
19
  }
23
20
 
24
- _MAX_ERROR_IGNORED_COUNT = 10
25
- _IGNORED_ERROR_CODES = (HTTPStatus.BAD_GATEWAY,)
26
- _SAFE_MODE = RequestSafeMode(
27
- max_errors=_MAX_ERROR_IGNORED_COUNT,
28
- status_codes=_IGNORED_ERROR_CODES,
29
- )
30
-
31
21
 
32
22
  class ConfluenceClient(APIClient):
33
23
  def __init__(
34
24
  self,
35
25
  credentials: ConfluenceCredentials,
36
- safe_mode: Optional[RequestSafeMode] = None,
37
26
  ):
38
27
  self.account_id = credentials.account_id
39
28
  auth = BasicAuth(
@@ -43,14 +32,12 @@ class ConfluenceClient(APIClient):
43
32
  auth=auth,
44
33
  host=credentials.base_url,
45
34
  headers=_HEADERS,
46
- safe_mode=safe_mode or _SAFE_MODE,
47
35
  )
48
36
 
49
37
  def pages(self):
50
38
  request = partial(
51
39
  self._get,
52
40
  endpoint=ConfluenceEndpointFactory.pages(),
53
- params={"body-format": "atlas_doc_format"},
54
41
  )
55
42
  yield from fetch_all_pages(request, ConfluencePagination)
56
43
 
@@ -14,7 +14,7 @@ class ConfluenceEndpointFactory:
14
14
  Endpoint to fetch all pages.
15
15
  More: https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-page/#api-pages-get
16
16
  """
17
- return f"{cls.API}{cls.PAGES}"
17
+ return f"{cls.API}{cls.PAGES}?body-format=atlas_doc_format"
18
18
 
19
19
  @classmethod
20
20
  def users(cls) -> str:
@@ -112,6 +112,7 @@ class SnowflakeClient(SqlalchemyClient):
112
112
  role: Optional[str] = None,
113
113
  ):
114
114
  self.private_key = _private_key(credentials.get("private_key"))
115
+ self.insecure_mode = credentials.get("insecure_mode", False)
115
116
  super().__init__(credentials)
116
117
  self._role = role
117
118
  self._warehouse = warehouse
@@ -121,13 +122,22 @@ class SnowflakeClient(SqlalchemyClient):
121
122
  return "Snowflake"
122
123
 
123
124
  def _engine_options(self, credentials: dict) -> dict:
124
- if not self.private_key:
125
- return {}
126
- return {
127
- "connect_args": {
128
- "private_key": self.private_key,
129
- }
130
- }
125
+ """
126
+ Sets the engine options.
127
+ * `insecure_mode` = True turns off OCSP checking.
128
+ See https://community.snowflake.com/s/article/How-to-turn-off-OCSP-checking-in-Snowflake-client-drivers
129
+ * `private_key` = Snowflake private key for key pair authentication.
130
+ See https://docs.snowflake.com/en/user-guide/key-pair-auth
131
+ """
132
+ connection_args: dict = dict()
133
+
134
+ if self.insecure_mode:
135
+ connection_args["insecure_mode"] = True
136
+
137
+ if self.private_key:
138
+ connection_args["private_key"] = self.private_key
139
+
140
+ return {"connect_args": connection_args}
131
141
 
132
142
  def _build_uri(self, credentials: dict) -> str:
133
143
  if self.private_key:
@@ -17,6 +17,7 @@ class SnowflakeCredentials:
17
17
  account: str
18
18
  user: str
19
19
 
20
+ insecure_mode: Optional[bool] = field(default=False)
20
21
  password: Optional[str] = field(metadata={"sensitive": True}, default=None)
21
22
  private_key: Optional[str] = field(
22
23
  metadata={"sensitive": True}, default=None
@@ -38,6 +38,7 @@ SNOWFLAKE_ACCOUNT = "CASTOR_SNOWFLAKE_ACCOUNT"
38
38
  SNOWFLAKE_USER = "CASTOR_SNOWFLAKE_USER"
39
39
  SNOWFLAKE_PASSWORD = "CASTOR_SNOWFLAKE_PASSWORD" # noqa: S105
40
40
  SNOWFLAKE_PRIVATE_KEY = "CASTOR_SNOWFLAKE_PRIVATE_KEY"
41
+ SNOWFLAKE_INSECURE_MODE = "CASTOR_SNOWFLAKE_INSECURE_MODE"
41
42
 
42
43
 
43
44
  def _credentials(params: dict) -> dict:
@@ -46,9 +47,15 @@ def _credentials(params: dict) -> dict:
46
47
  private_key = params.get("private_key") or from_env(
47
48
  SNOWFLAKE_PRIVATE_KEY, True
48
49
  )
50
+ insecure_mode = (
51
+ params.get("insecure_mode")
52
+ or from_env(SNOWFLAKE_INSECURE_MODE, allow_missing=True)
53
+ or False
54
+ )
49
55
  common = {
50
56
  "account": params.get("account") or from_env(SNOWFLAKE_ACCOUNT),
51
57
  "user": params.get("user") or from_env(SNOWFLAKE_USER),
58
+ "insecure_mode": insecure_mode,
52
59
  }
53
60
  if password:
54
61
  return {**common, "password": password}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: castor-extractor
3
- Version: 0.23.2
3
+ Version: 0.24.0
4
4
  Summary: Extract your metadata assets.
5
5
  Home-page: https://www.castordoc.com/
6
6
  License: EULA
@@ -100,14 +100,14 @@ It also embeds utilities to help you push your metadata to Castor:
100
100
 
101
101
  ## Installation
102
102
 
103
- Requirements: **python3.8+**
103
+ Requirements: **python3.9+**
104
104
  <img src="https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg" width=20 />
105
105
 
106
106
  ### Create castor-env
107
107
 
108
108
  We advise to create a dedicated [Python environment](https://docs.python.org/3/library/venv.html).
109
109
 
110
- Here's an example using `Pyenv` and Python `3.8.12`:
110
+ Here's an example using `Pyenv`:
111
111
 
112
112
  - Install Pyenv
113
113
 
@@ -124,22 +124,24 @@ eval "$(pyenv init --path)"
124
124
  eval "$(pyenv virtualenv-init -)"
125
125
  ```
126
126
 
127
- - [optional] Install python 3.8+
127
+ - [optional] Install python 3.9+ if needed
128
128
 
129
129
  ```bash
130
130
  pyenv versions # check your local python installations
131
131
 
132
- pyenv install -v 3.8.12 # if none of the installed versions satisfy requirements 8+
132
+ # install Python if none of the installed versions satisfy requirements 3.9+
133
+ # in this example, we will install Python 3.11.9
134
+ pyenv install -v 3.11.9
133
135
  ```
134
136
 
135
137
  - Create your virtual env
136
138
 
137
139
  ```bash
138
- pyenv virtualenv 3.8.12 castor-env # create a dedicated env
140
+ pyenv virtualenv 3.11.9 castor-env # create a dedicated env
139
141
  pyenv shell castor-env # activate the environment
140
142
 
141
143
  # optional checks
142
- python --version # should be `3.8.12`
144
+ python --version # should be `3.11.9`
143
145
  pyenv version # should be `castor-env`
144
146
  ```
145
147
 
@@ -206,6 +208,14 @@ For any questions or bug report, contact us at [support@castordoc.com](mailto:su
206
208
 
207
209
  # Changelog
208
210
 
211
+ ## 0.24.0 - 2025-03-10
212
+
213
+ * Remove legacy Tableau Connector
214
+
215
+ ## 0.23.3 - 2025-02-19
216
+
217
+ * Snowflake : add --insecure-mode option to turn off OCSP checking
218
+
209
219
  ## 0.23.2 - 2025-02-17
210
220
 
211
221
  * support page_size in Tableau extraction command
@@ -1,8 +1,8 @@
1
- CHANGELOG.md,sha256=s6P_wRcecQhMAvMkLLh7ZI79FCVyK3hs4Hoc_lE_Ers,15605
1
+ CHANGELOG.md,sha256=Ud6kiuDEyG_gu0YAVlp9-oXxriLibyma98FDrlajJJE,15756
2
2
  Dockerfile,sha256=xQ05-CFfGShT3oUqaiumaldwA288dj9Yb_pxofQpufg,301
3
3
  DockerfileUsage.md,sha256=2hkJQF-5JuuzfPZ7IOxgM6QgIQW7l-9oRMFVwyXC4gE,998
4
4
  LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
5
- README.md,sha256=uF6PXm9ocPITlKVSh9afTakHmpLx3TvawLf-CbMP3wM,3578
5
+ README.md,sha256=j8oiToTvFY4eozLUJo4rs0LEqan-G3_eOSP98KFfxfM,3634
6
6
  castor_extractor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  castor_extractor/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  castor_extractor/commands/extract_bigquery.py,sha256=dU4OiYO1V0n32orvZnMh1_xtFKF_VxHNXcVsH3otY-g,1269
@@ -22,7 +22,7 @@ castor_extractor/commands/extract_redshift.py,sha256=zRBg2D_ft4GLdPSdmetRcgQVAA8
22
22
  castor_extractor/commands/extract_salesforce.py,sha256=3j3YTmMkPAwocR-B1ozJQai0UIZPtpmAyWj-hHvdWn4,1226
23
23
  castor_extractor/commands/extract_salesforce_reporting.py,sha256=FdANTNiLkIPdm80XMYxWReHjdycLsIa61pyeCD-sUDk,962
24
24
  castor_extractor/commands/extract_sigma.py,sha256=sxewHcZ1Doq35V2qnpX_zCKKXkrb1_9bYjUMg7BOW-k,643
25
- castor_extractor/commands/extract_snowflake.py,sha256=vYiruxRoo--GeMemOGsSE1w9kcKTh_y4E165HtMVzkM,1982
25
+ castor_extractor/commands/extract_snowflake.py,sha256=GwlrRxwEBjHqGs_3bs5vM9fzmv61_iwvBr1KcIgFgWM,2161
26
26
  castor_extractor/commands/extract_sqlserver.py,sha256=lwhbcNChaXHZgMgSOch3faVr7WJw-sDU6GHl3lzBt_0,1141
27
27
  castor_extractor/commands/extract_tableau.py,sha256=DGQaXS-61rV-uzBtqfvqtyQzjLtrLTzE1ViTXPG1eck,1379
28
28
  castor_extractor/commands/extract_thoughtspot.py,sha256=caAYJlH-vK7u5IUB6OKXxcaWfLgc7d_XqnFDWK6YNS4,639
@@ -43,9 +43,9 @@ castor_extractor/knowledge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
43
43
  castor_extractor/knowledge/confluence/__init__.py,sha256=pRT615pMDlB7Ifs09erVn2EdpZHgkvX5selemWU3VPE,129
44
44
  castor_extractor/knowledge/confluence/assets.py,sha256=zv2G2LB8H0fKDbVJ4kHrAjbqehXI_K-wgd_ghSXGFvs,144
45
45
  castor_extractor/knowledge/confluence/client/__init__.py,sha256=ALAzo0JEhxFzH2FnIO6HmtkAGS2_bGY8KXXMcTGV3aE,84
46
- castor_extractor/knowledge/confluence/client/client.py,sha256=lGLRBbAOkEXcEKwHwdBhgG5cvAUkzpSL-7pPcmZpsE8,2114
46
+ castor_extractor/knowledge/confluence/client/client.py,sha256=F8A_ckZ4ojJC8BnAXeAIHUC2oOQMBWnTfqQwJbAyTns,1689
47
47
  castor_extractor/knowledge/confluence/client/credentials.py,sha256=tqUMw-SVoAi4o6I6OeGk4MeDiIPU3-ihhaomXv4CQ64,419
48
- castor_extractor/knowledge/confluence/client/endpoints.py,sha256=b7PIvw9_W942L4zsEZa__KhZDTo4yt-CdIO0eas69TE,736
48
+ castor_extractor/knowledge/confluence/client/endpoints.py,sha256=eWMKtjDUPGoKR8Nqq18JTIoEq913GNo1Klm9RduIOHM,765
49
49
  castor_extractor/knowledge/confluence/client/pagination.py,sha256=ty4meiMEujDVSiQyOJTibd-ReYyDyGezdFuk7EAGtMA,862
50
50
  castor_extractor/knowledge/confluence/extract.py,sha256=6pA68CmYNC50qCJ7NgZMW0jD4ev0a_ltI5kSyBqSC0U,1565
51
51
  castor_extractor/knowledge/notion/__init__.py,sha256=ZDmh0eNSxHf1zVPm0aYlKPci-vzOXhAgdsWjS2hdjh4,117
@@ -257,41 +257,6 @@ castor_extractor/visualization/sigma/client/credentials.py,sha256=XddAuQSmCKpxJ7
257
257
  castor_extractor/visualization/sigma/client/endpoints.py,sha256=DBFphbgoH78_MZUGM_bKBAq28Nl7LWSZ6VRsbxrxtDg,1162
258
258
  castor_extractor/visualization/sigma/client/pagination.py,sha256=kNEhNq08tTGbypyMjxs0w4uvDtQc_iaWpOZweaa_FsU,690
259
259
  castor_extractor/visualization/sigma/extract.py,sha256=XIT1qsj6g6dgBWP8HPfj_medZexu48EaY9tUwi14gzM,2298
260
- castor_extractor/visualization/tableau/__init__.py,sha256=hDohrWjkorrX01JMc154aa9vi3ZqBKmA1lkfQtMFfYE,114
261
- castor_extractor/visualization/tableau/assets.py,sha256=jid6bPym-h5uMP5NwNVSpsYEn2KOr24tzSjtVuH5o-k,1247
262
- castor_extractor/visualization/tableau/client/__init__.py,sha256=FQX1MdxS8Opn3Oyq8eby7suk3ANbLlpzzCPQ3zqvk0I,78
263
- castor_extractor/visualization/tableau/client/client.py,sha256=0adwnNumC37BmtWsqhRsj8XHkvo-Zc0Eymp5QAuPSP0,7357
264
- castor_extractor/visualization/tableau/client/client_utils.py,sha256=s5jQhCozc1AMldTx-obi7K1Kxm2vS9cYolhc0fGBAB4,2115
265
- castor_extractor/visualization/tableau/client/credentials.py,sha256=kvj8B9fB5DlcVczKEtB3CYO2a82vvwsG4KEjjUBx3tM,3380
266
- castor_extractor/visualization/tableau/client/project.py,sha256=uLlZ5-eZI_4VxBmEB5d1gWy_X_w6uVt2EKoiX9cJ0UA,812
267
- castor_extractor/visualization/tableau/client/safe_mode.py,sha256=jNmEQFcpoJfOWkFEsEk8Gimj7wIeXH3_OXiulwhKD1s,2015
268
- castor_extractor/visualization/tableau/constants.py,sha256=O2CqeviFz122BumNHoJ1N-e1lzyqIHF9OYnGQttg4hg,126
269
- castor_extractor/visualization/tableau/errors.py,sha256=WWvmnp5pdxFJqanPKeDRADZc0URSPxkJqxDI6bwoifQ,91
270
- castor_extractor/visualization/tableau/extract.py,sha256=C32FmEhfFOMvEx1hCgbnOYn_LBiORQwqEt7JH73F1k8,3306
271
- castor_extractor/visualization/tableau/gql_fields.py,sha256=nwG2VAOI1AX75i4sWirNsjEB82hBWeHF1Hce5b2Mz5A,5520
272
- castor_extractor/visualization/tableau/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
273
- castor_extractor/visualization/tableau/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
274
- castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_1_get.json,sha256=4iMvJ_VakDa67xN2ROraAccaz_DDxX6Y5Y1XnTU5F5Y,446
275
- castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_2_get.json,sha256=ZpkJorxFmk9CJRjZReI3qGkoZFKa1GHD3JOxrDgdOrY,447
276
- castor_extractor/visualization/tableau/tests/unit/assets/rest_api/auth.xml,sha256=gAuOdNzLhzqj9EdeCHMLq9tf9-BOe0kC4OjW1cMePeo,450
277
- castor_extractor/visualization/tableau/tests/unit/assets/rest_api/project_get.xml,sha256=Eg2Pvp2VZ3O9rtUZzhak3fEODS007AFIc_konEQGRdg,1018
278
- castor_extractor/visualization/tableau/tests/unit/assets/rest_api/user_get.xml,sha256=q0dT6jiSdTj-T50VD7hlv3cf-acSIK_OlQulKDyZ39U,679
279
- castor_extractor/visualization/tableau/tests/unit/assets/rest_api/view_get_usage.xml,sha256=UHfPPPETt0rrXde6EjsNdrOGdbVqIyeQwDwRU0nP5fY,1415
280
- castor_extractor/visualization/tableau/tests/unit/assets/rest_api/workbook_get.xml,sha256=MLyS2AbnPZxkAClCxOK6_DTVoiK4TQjzcw--lQ2Jug8,1325
281
- castor_extractor/visualization/tableau/tests/unit/graphql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
282
- castor_extractor/visualization/tableau/tests/unit/graphql/paginated_object_test.py,sha256=stFLqx8ifMBe75D62Bq6izn26kLgvxrmyBxGZH2wK4c,1922
283
- castor_extractor/visualization/tableau/tests/unit/rest_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
284
- castor_extractor/visualization/tableau/tests/unit/rest_api/auth_test.py,sha256=L3LfrD9DGISdg0YZL9Ma0ZE_ab2jWfRNLL_mqrh2vM4,1123
285
- castor_extractor/visualization/tableau/tests/unit/rest_api/credentials_test.py,sha256=IXemuC0wO_BYuU-wm_O-NUfm92RnIJeu98sogA3pmf4,331
286
- castor_extractor/visualization/tableau/tests/unit/rest_api/projects_test.py,sha256=ySm56VP4Iy7CZYHUEdrBow9_YKGBc7XwHbvzZRJEKUo,1779
287
- castor_extractor/visualization/tableau/tests/unit/rest_api/usages_test.py,sha256=OdY9OehUEjSsHnOJ7lR906oEvIo5k2RV9y-Zvgy_XMs,1401
288
- castor_extractor/visualization/tableau/tests/unit/rest_api/users_test.py,sha256=-D3mZtnsXQd5xUow8nYo5Ru2Rl9mXDdGGQZ5bVzAmJg,1499
289
- castor_extractor/visualization/tableau/tests/unit/rest_api/workbooks_test.py,sha256=ga5MK2aN0BNw-Vo7g8OJk8ORmIgrIE8VIXG6p5CO748,1979
290
- castor_extractor/visualization/tableau/tests/unit/utils/__init__.py,sha256=IzeQqv7EBwGIBh50y6TEsUVXXpqXLjaeBkZeAb0CisE,26
291
- castor_extractor/visualization/tableau/tests/unit/utils/env_key.py,sha256=fBX8pG1zOJmoUwCTFtDMVinRVlnFDbMI3wBBRNVr_GM,203
292
- castor_extractor/visualization/tableau/tsc_fields.py,sha256=zMlCMCop3ni69So5DjvxKWEG15Kwh-x8gaSwErSVRGY,937
293
- castor_extractor/visualization/tableau/types.py,sha256=EvyTCsBs33Xp3RIJg5MXhbtEF_G2-T2CE-oVDjOBA_U,303
294
- castor_extractor/visualization/tableau/usage.py,sha256=LlFwlbEr-EnYUJjKZha99CRCRrERJ350oAvzBQlp9_s,427
295
260
  castor_extractor/visualization/tableau_revamp/__init__.py,sha256=a3DGjQhaz17gBqW-E84TAgupKbqLC40y5Ajo1yn-ot4,156
296
261
  castor_extractor/visualization/tableau_revamp/assets.py,sha256=8sJsK6Qixao6xVmVaO1usvs16SjNub9sIx7o-adYV14,659
297
262
  castor_extractor/visualization/tableau_revamp/client/__init__.py,sha256=wmS9uLtUiqNYVloi0-DgD8d2qzu3RVZEAtWiaDp6G_M,90
@@ -406,11 +371,11 @@ castor_extractor/warehouse/salesforce/format_test.py,sha256=puTL-Co84jE2SQzKFKGL
406
371
  castor_extractor/warehouse/salesforce/pagination.py,sha256=m1S9JRNf6Oe-6dDghYUY5wwTzGzKW5H9pE60PCXMha0,920
407
372
  castor_extractor/warehouse/salesforce/soql.py,sha256=XB8ohKwHFfC4Xger7Y84DXLW17IJDye_bZ3FL6DCcOI,1188
408
373
  castor_extractor/warehouse/snowflake/__init__.py,sha256=TEGXTyxWp4Tr9gIHb-UFVTRKj6YWmrRtqHruiKSZGiY,174
409
- castor_extractor/warehouse/snowflake/client.py,sha256=XT0QLVNff_586SDuMe40iu8FCwPDh2uBV5aKc1Ql914,5555
374
+ castor_extractor/warehouse/snowflake/client.py,sha256=RB72bbl_k91wDU76yrggPK6oeEm96Uopc8gYSUUB9ZM,6093
410
375
  castor_extractor/warehouse/snowflake/client_test.py,sha256=ihWtOOAQfh8pu5JTr_EWfqefKOVIaJXznACURzaU1Qs,1432
411
- castor_extractor/warehouse/snowflake/credentials.py,sha256=wbUdbx9jVSHzg2kNDhMFuDstbVTyZOcGAwnSeGeFIqs,875
376
+ castor_extractor/warehouse/snowflake/credentials.py,sha256=u0sZ6xPtcZmmvnUsAejJk-YxGl8BTzX_BlRjRk92BYU,932
412
377
  castor_extractor/warehouse/snowflake/credentials_test.py,sha256=Lkc-DHXOvr50KrqAW4nt_x0IA0Mu_CsBVu6ATnzQB6I,673
413
- castor_extractor/warehouse/snowflake/extract.py,sha256=fcze0VBe9OOAFSr25T9L6CY506Vm_xDEvvy8NWuLW1s,2956
378
+ castor_extractor/warehouse/snowflake/extract.py,sha256=3yc9kcVtt2c1uWJOJJgeZchV4VmRr9EeYM3W6gl8zQQ,3201
414
379
  castor_extractor/warehouse/snowflake/queries/.sqlfluff,sha256=vttrwcr64JVIuvc7WIg9C54cbOkjg_VjXNR7YnTGOPE,31
415
380
  castor_extractor/warehouse/snowflake/queries/column.sql,sha256=Wy-arvS_3Dh0HFrzdpRmBsI58mMlN_5U097s5kMNluQ,1781
416
381
  castor_extractor/warehouse/snowflake/queries/column_lineage.sql,sha256=YKBiZ6zySSNcXLDXwm31EjGIIkkkZc0-S6hI1SRM80o,1179
@@ -436,8 +401,8 @@ castor_extractor/warehouse/sqlserver/queries/table.sql,sha256=kbBQP-TdG5px1IVgyx
436
401
  castor_extractor/warehouse/sqlserver/queries/user.sql,sha256=gOrZsMVypusR2dc4vwVs4E1a-CliRsr_UjnD2EbXs-A,94
437
402
  castor_extractor/warehouse/sqlserver/query.py,sha256=g0hPT-RmeGi2DyenAi3o72cTlQsLToXIFYojqc8E5fQ,533
438
403
  castor_extractor/warehouse/synapse/queries/column.sql,sha256=lNcFoIW3Y0PFOqoOzJEXmPvZvfAsY0AP63Mu2LuPzPo,1351
439
- castor_extractor-0.23.2.dist-info/LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
440
- castor_extractor-0.23.2.dist-info/METADATA,sha256=XaEyHkKuPo14vRz6eAIjuvl3lzn6496vYtkefRZMuOA,22621
441
- castor_extractor-0.23.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
442
- castor_extractor-0.23.2.dist-info/entry_points.txt,sha256=7aVSxc-_2dicp28Ow-S4y0p4wGoTm9zGmVptMvfLdw8,1649
443
- castor_extractor-0.23.2.dist-info/RECORD,,
404
+ castor_extractor-0.24.0.dist-info/LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
405
+ castor_extractor-0.24.0.dist-info/METADATA,sha256=HWTKSDx_akRg3FK_dMP5mRxlLg9Oc55uGUYgt2NmYaQ,22828
406
+ castor_extractor-0.24.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
407
+ castor_extractor-0.24.0.dist-info/entry_points.txt,sha256=7aVSxc-_2dicp28Ow-S4y0p4wGoTm9zGmVptMvfLdw8,1649
408
+ castor_extractor-0.24.0.dist-info/RECORD,,
@@ -1,3 +0,0 @@
1
- from .assets import TableauAsset
2
- from .client import ApiClient
3
- from .extract import extract_all, iterate_all_data
@@ -1,49 +0,0 @@
1
- from enum import Enum
2
-
3
- from ...types import ExternalAsset, classproperty
4
-
5
-
6
- class TableauAsset(ExternalAsset):
7
- """
8
- Tableau assets
9
- """
10
-
11
- CUSTOM_SQL_TABLE = "custom_sql_tables"
12
- CUSTOM_SQL_QUERY = "custom_sql_queries"
13
- DASHBOARD = "dashboards"
14
- DASHBOARD_SHEET = "dashboards_sheets"
15
- DATASOURCE = "datasources"
16
- FIELD = "fields"
17
- PROJECT = "projects"
18
- PUBLISHED_DATASOURCE = "published_datasources"
19
- SHEET = "sheets"
20
- USAGE = "views"
21
- USER = "users"
22
- WORKBOOK = "workbooks"
23
- WORKBOOK_TO_DATASOURCE = "workbooks_to_datasource"
24
-
25
- @classproperty
26
- def optional(cls) -> set["TableauAsset"]:
27
- return {
28
- TableauAsset.DASHBOARD,
29
- TableauAsset.DASHBOARD_SHEET,
30
- TableauAsset.FIELD,
31
- TableauAsset.SHEET,
32
- TableauAsset.PUBLISHED_DATASOURCE,
33
- }
34
-
35
-
36
- class TableauGraphqlAsset(Enum):
37
- """
38
- Assets which can be fetched from Tableau
39
- """
40
-
41
- BIN_FIELD = "binFields"
42
- CALCULATED_FIELD = "calculatedFields"
43
- COLUMN_FIELD = "columnFields"
44
- CUSTOM_SQL = "customSQLTables"
45
- DASHBOARD = "dashboards"
46
- DATASOURCE = "datasources"
47
- GROUP_FIELD = "groupFields"
48
- SHEETS = "sheets"
49
- WORKBOOK_TO_DATASOURCE = "workbooks"
@@ -1,2 +0,0 @@
1
- from .client import ApiClient
2
- from .client_utils import get_paginated_objects