castor-extractor 0.22.5__py3-none-any.whl → 0.23.1__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 +8 -1
- castor_extractor/commands/extract_confluence.py +1 -1
- castor_extractor/file_checker/file.py +1 -1
- castor_extractor/knowledge/confluence/client/client.py +1 -1
- castor_extractor/knowledge/confluence/client/credentials.py +1 -1
- castor_extractor/knowledge/notion/client/client.py +1 -1
- castor_extractor/utils/validation_test.py +3 -3
- castor_extractor/visualization/looker_studio/client/looker_studio_api_client.py +28 -4
- castor_extractor/visualization/powerbi/assets.py +2 -12
- castor_extractor/visualization/powerbi/extract.py +2 -2
- castor_extractor/warehouse/abstract/extract.py +1 -1
- castor_extractor/warehouse/bigquery/client.py +3 -3
- {castor_extractor-0.22.5.dist-info → castor_extractor-0.23.1.dist-info}/METADATA +12 -5
- {castor_extractor-0.22.5.dist-info → castor_extractor-0.23.1.dist-info}/RECORD +17 -17
- {castor_extractor-0.22.5.dist-info → castor_extractor-0.23.1.dist-info}/LICENCE +0 -0
- {castor_extractor-0.22.5.dist-info → castor_extractor-0.23.1.dist-info}/WHEEL +0 -0
- {castor_extractor-0.22.5.dist-info → castor_extractor-0.23.1.dist-info}/entry_points.txt +0 -0
CHANGELOG.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
|
|
2
1
|
# Changelog
|
|
3
2
|
|
|
3
|
+
## 0.23.1 - 2025-02-10
|
|
4
|
+
|
|
5
|
+
* change command for Confluence from password to token to reflect better their documentation
|
|
6
|
+
|
|
7
|
+
## 0.22.6 - 2025-01-21
|
|
8
|
+
|
|
9
|
+
* bump dependencies: looker, databricks, deptry, ...
|
|
10
|
+
|
|
4
11
|
## 0.22.5 - 2025-01-09
|
|
5
12
|
|
|
6
13
|
* Databricks: validate and deduplicate lineage links
|
|
@@ -13,7 +13,7 @@ def main():
|
|
|
13
13
|
parser.add_argument("-a", "--account_id", help="Confluence account id")
|
|
14
14
|
parser.add_argument("-b", "--base_url", help="Confluence account base url")
|
|
15
15
|
parser.add_argument("-o", "--output", help="Directory to write to")
|
|
16
|
-
parser.add_argument("-
|
|
16
|
+
parser.add_argument("-t", "--token", help="Confluence API token")
|
|
17
17
|
parser.add_argument("-u", "--username", help="Confluence username")
|
|
18
18
|
|
|
19
19
|
confluence.extract_all(**parse_filled_arguments(parser))
|
|
@@ -123,7 +123,7 @@ class FileCheckerRun:
|
|
|
123
123
|
"""
|
|
124
124
|
if not self.verbose:
|
|
125
125
|
return
|
|
126
|
-
header = f"Issues detected on Row #{index+1}\n"
|
|
126
|
+
header = f"Issues detected on Row #{index + 1}\n"
|
|
127
127
|
for k, v in row.items():
|
|
128
128
|
header += f"{str(k):<20} {str(v):<100}\n"
|
|
129
129
|
self.logger.info(header + _SEPARATOR + issue_log + _SEPARATOR)
|
|
@@ -37,7 +37,7 @@ class ConfluenceClient(APIClient):
|
|
|
37
37
|
):
|
|
38
38
|
self.account_id = credentials.account_id
|
|
39
39
|
auth = BasicAuth(
|
|
40
|
-
username=credentials.username, password=credentials.
|
|
40
|
+
username=credentials.username, password=credentials.token
|
|
41
41
|
)
|
|
42
42
|
super().__init__(
|
|
43
43
|
auth=auth,
|
|
@@ -11,7 +11,7 @@ from .endpoints import NotionEndpointFactory
|
|
|
11
11
|
from .pagination import NotionPagination
|
|
12
12
|
|
|
13
13
|
VOLUME_IGNORED = 10
|
|
14
|
-
IGNORED_ERROR_CODES = (HTTPStatus.BAD_GATEWAY,)
|
|
14
|
+
IGNORED_ERROR_CODES = (HTTPStatus.BAD_GATEWAY, HTTPStatus.NOT_FOUND)
|
|
15
15
|
NOTION_SAFE_MODE = RequestSafeMode(
|
|
16
16
|
max_errors=VOLUME_IGNORED,
|
|
17
17
|
status_codes=IGNORED_ERROR_CODES,
|
|
@@ -37,10 +37,10 @@ def test_validate_baseurl():
|
|
|
37
37
|
validate_baseurl("")
|
|
38
38
|
|
|
39
39
|
with pytest.raises(ValueError):
|
|
40
|
-
validate_baseurl("ftp://
|
|
40
|
+
validate_baseurl("ftp://timber.looker.eu")
|
|
41
41
|
|
|
42
42
|
with pytest.raises(ValueError):
|
|
43
|
-
validate_baseurl("https://
|
|
43
|
+
validate_baseurl("https://timber.looker.eu:19999?query=params")
|
|
44
44
|
|
|
45
45
|
with pytest.raises(ValueError):
|
|
46
|
-
validate_baseurl("https://
|
|
46
|
+
validate_baseurl("https://timber.looker.eu:19999#fragment")
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
from contextlib import contextmanager
|
|
1
2
|
from functools import partial
|
|
3
|
+
from http import HTTPStatus
|
|
2
4
|
from typing import Iterator, Optional
|
|
3
5
|
|
|
4
6
|
from google.auth.transport.requests import Request
|
|
@@ -7,6 +9,7 @@ from google.oauth2.service_account import Credentials
|
|
|
7
9
|
from ....utils import (
|
|
8
10
|
APIClient,
|
|
9
11
|
BearerAuth,
|
|
12
|
+
RequestSafeMode,
|
|
10
13
|
fetch_all_pages,
|
|
11
14
|
)
|
|
12
15
|
from .credentials import LookerStudioCredentials
|
|
@@ -16,6 +19,22 @@ from .pagination import LookerStudioPagination
|
|
|
16
19
|
from .scopes import SCOPES
|
|
17
20
|
|
|
18
21
|
|
|
22
|
+
@contextmanager
|
|
23
|
+
def temporary_safe_request(client: APIClient):
|
|
24
|
+
"""
|
|
25
|
+
Allows applying the safe mode only to specific requests instead of all
|
|
26
|
+
API calls.
|
|
27
|
+
"""
|
|
28
|
+
client._safe_mode = RequestSafeMode(
|
|
29
|
+
max_errors=float("inf"),
|
|
30
|
+
status_codes=(HTTPStatus.UNAUTHORIZED,),
|
|
31
|
+
)
|
|
32
|
+
try:
|
|
33
|
+
yield client
|
|
34
|
+
finally:
|
|
35
|
+
client._safe_mode = RequestSafeMode()
|
|
36
|
+
|
|
37
|
+
|
|
19
38
|
class LookerStudioAPIAuth(BearerAuth):
|
|
20
39
|
def __init__(
|
|
21
40
|
self,
|
|
@@ -56,9 +75,14 @@ class LookerStudioAPIClient(APIClient):
|
|
|
56
75
|
|
|
57
76
|
See also https://developers.google.com/looker-studio/integrate/api/reference/types#Permissions
|
|
58
77
|
"""
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
78
|
+
with temporary_safe_request(self):
|
|
79
|
+
data = self._get(LookerStudioAPIEndpoint.permissions(asset_name))
|
|
80
|
+
permissions = data.get("permissions")
|
|
81
|
+
|
|
82
|
+
if not permissions:
|
|
83
|
+
return True
|
|
84
|
+
|
|
85
|
+
return len(permissions.keys()) == 1
|
|
62
86
|
|
|
63
87
|
def _user_assets(
|
|
64
88
|
self, asset_type: LookerStudioAssetType, user_email: str
|
|
@@ -76,7 +100,7 @@ class LookerStudioAPIClient(APIClient):
|
|
|
76
100
|
|
|
77
101
|
for asset in assets:
|
|
78
102
|
asset_name = asset["name"]
|
|
79
|
-
owner = asset
|
|
103
|
+
owner = asset.get("owner", "")
|
|
80
104
|
if owner == user_email and not self._is_private_asset(asset_name):
|
|
81
105
|
yield asset
|
|
82
106
|
|
|
@@ -8,6 +8,7 @@ class PowerBiAsset(ExternalAsset):
|
|
|
8
8
|
DASHBOARDS = "dashboards"
|
|
9
9
|
DATASETS = "datasets"
|
|
10
10
|
DATASET_FIELDS = "dataset_fields"
|
|
11
|
+
DATASET_RELATIONSHIPS = "dataset_relationships"
|
|
11
12
|
METADATA = "metadata"
|
|
12
13
|
PAGES = "pages"
|
|
13
14
|
REPORTS = "reports"
|
|
@@ -19,20 +20,9 @@ class PowerBiAsset(ExternalAsset):
|
|
|
19
20
|
def optional(cls) -> set["PowerBiAsset"]:
|
|
20
21
|
return {
|
|
21
22
|
PowerBiAsset.DATASET_FIELDS,
|
|
23
|
+
PowerBiAsset.DATASET_RELATIONSHIPS,
|
|
22
24
|
PowerBiAsset.PAGES,
|
|
23
25
|
PowerBiAsset.TABLES,
|
|
24
26
|
PowerBiAsset.TILES,
|
|
25
27
|
PowerBiAsset.USERS,
|
|
26
28
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
# Assets extracted from the Metadata file
|
|
30
|
-
# They are not directly fetched from the PowerBi api.
|
|
31
|
-
METADATA_ASSETS = (
|
|
32
|
-
PowerBiAsset.DATASET_FIELDS,
|
|
33
|
-
PowerBiAsset.TABLES,
|
|
34
|
-
PowerBiAsset.TILES,
|
|
35
|
-
PowerBiAsset.USERS,
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
REPORTS_ASSETS = (PowerBiAsset.PAGES,)
|
|
@@ -11,7 +11,7 @@ from ...utils import (
|
|
|
11
11
|
write_json,
|
|
12
12
|
write_summary,
|
|
13
13
|
)
|
|
14
|
-
from .assets import
|
|
14
|
+
from .assets import PowerBiAsset
|
|
15
15
|
from .client import PowerbiClient, PowerbiCredentials
|
|
16
16
|
|
|
17
17
|
logger = logging.getLogger(__name__)
|
|
@@ -21,7 +21,7 @@ def iterate_all_data(
|
|
|
21
21
|
client: PowerbiClient,
|
|
22
22
|
) -> Iterable[tuple[PowerBiAsset, Union[list, dict]]]:
|
|
23
23
|
for asset in PowerBiAsset:
|
|
24
|
-
if asset in
|
|
24
|
+
if asset in PowerBiAsset.optional:
|
|
25
25
|
continue
|
|
26
26
|
|
|
27
27
|
logger.info(f"Extracting {asset.name} from API")
|
|
@@ -60,7 +60,7 @@ class SQLExtractionProcessor:
|
|
|
60
60
|
total = len(queries)
|
|
61
61
|
|
|
62
62
|
for i, query in enumerate(queries):
|
|
63
|
-
logger.info(f"Extracting {asset.value}: query {i+1}/{total}")
|
|
63
|
+
logger.info(f"Extracting {asset.value}: query {i + 1}/{total}")
|
|
64
64
|
# concatenate results of all queries
|
|
65
65
|
data = chain(data, self._fetch(query))
|
|
66
66
|
|
|
@@ -66,9 +66,9 @@ class BigQueryClient(SqlalchemyClient):
|
|
|
66
66
|
return BIGQUERY_URI
|
|
67
67
|
|
|
68
68
|
def _credentials(self) -> Credentials:
|
|
69
|
-
assert (
|
|
70
|
-
|
|
71
|
-
)
|
|
69
|
+
assert CREDENTIALS_INFO_KEY in self._options, (
|
|
70
|
+
"Missing BigQuery credentials in engine's options"
|
|
71
|
+
)
|
|
72
72
|
credentials = self._options[CREDENTIALS_INFO_KEY]
|
|
73
73
|
return Credentials.from_service_account_info(credentials)
|
|
74
74
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: castor-extractor
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.23.1
|
|
4
4
|
Summary: Extract your metadata assets.
|
|
5
5
|
Home-page: https://www.castordoc.com/
|
|
6
6
|
License: EULA
|
|
@@ -30,7 +30,7 @@ Provides-Extra: snowflake
|
|
|
30
30
|
Provides-Extra: sqlserver
|
|
31
31
|
Provides-Extra: tableau
|
|
32
32
|
Requires-Dist: cryptography (>=43.0.0,<44.0.0) ; extra == "snowflake"
|
|
33
|
-
Requires-Dist: databricks-sql-connector (
|
|
33
|
+
Requires-Dist: databricks-sql-connector (==3.6.0) ; extra == "databricks" or extra == "all"
|
|
34
34
|
Requires-Dist: google-api-core (>=2.1.1,<3.0.0)
|
|
35
35
|
Requires-Dist: google-api-python-client (>=2.121.0,<3.0.0) ; extra == "lookerstudio" or extra == "all"
|
|
36
36
|
Requires-Dist: google-auth (>=2,<3)
|
|
@@ -38,7 +38,7 @@ Requires-Dist: google-cloud-core (>=2.1.0,<3.0.0)
|
|
|
38
38
|
Requires-Dist: google-cloud-storage (>=2,<3)
|
|
39
39
|
Requires-Dist: google-resumable-media (>=2.0.3,<3.0.0)
|
|
40
40
|
Requires-Dist: googleapis-common-protos (>=1.53.0,<2.0.0)
|
|
41
|
-
Requires-Dist: looker-sdk (>=
|
|
41
|
+
Requires-Dist: looker-sdk (>=25.0.0,<26.0.0) ; extra == "looker" or extra == "all"
|
|
42
42
|
Requires-Dist: msal (>=1.20.0,<2.0.0) ; extra == "powerbi" or extra == "all"
|
|
43
43
|
Requires-Dist: numpy (<2) ; extra == "bigquery" or extra == "databricks" or extra == "all"
|
|
44
44
|
Requires-Dist: numpy (>=1.26) ; (python_version >= "3.12" and python_version < "3.13") and (extra == "bigquery" or extra == "databricks" or extra == "all")
|
|
@@ -57,7 +57,7 @@ Requires-Dist: snowflake-sqlalchemy (!=1.2.5,<2.0.0) ; extra == "snowflake" or e
|
|
|
57
57
|
Requires-Dist: sqlalchemy (>=1.4,<1.5)
|
|
58
58
|
Requires-Dist: sqlalchemy-bigquery[bqstorage] (>=1.0.0,<=2.0.0) ; extra == "bigquery" or extra == "all"
|
|
59
59
|
Requires-Dist: sqlalchemy-redshift (>=0.8.14,<0.9.0) ; extra == "redshift" or extra == "all"
|
|
60
|
-
Requires-Dist: tableauserverclient (
|
|
60
|
+
Requires-Dist: tableauserverclient (>=0.25.0,<0.26.0) ; extra == "tableau" or extra == "all"
|
|
61
61
|
Requires-Dist: tqdm (>=4.0.0,<5.0.0)
|
|
62
62
|
Requires-Dist: typing-extensions (>=4,<5)
|
|
63
63
|
Requires-Dist: websocket-client (>=1,<2) ; extra == "qlik" or extra == "all"
|
|
@@ -204,9 +204,16 @@ For any questions or bug report, contact us at [support@castordoc.com](mailto:su
|
|
|
204
204
|
|
|
205
205
|
[Castor](https://castordoc.com) helps you find, understand, use your data assets
|
|
206
206
|
|
|
207
|
-
|
|
208
207
|
# Changelog
|
|
209
208
|
|
|
209
|
+
## 0.23.1 - 2025-02-10
|
|
210
|
+
|
|
211
|
+
* change command for Confluence from password to token to reflect better their documentation
|
|
212
|
+
|
|
213
|
+
## 0.22.6 - 2025-01-21
|
|
214
|
+
|
|
215
|
+
* bump dependencies: looker, databricks, deptry, ...
|
|
216
|
+
|
|
210
217
|
## 0.22.5 - 2025-01-09
|
|
211
218
|
|
|
212
219
|
* Databricks: validate and deduplicate lineage links
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
CHANGELOG.md,sha256=
|
|
1
|
+
CHANGELOG.md,sha256=uItbpd54X3IEvlXwXFbSLqCgkY3lwgOoNrhIu_VaJk8,15530
|
|
2
2
|
Dockerfile,sha256=xQ05-CFfGShT3oUqaiumaldwA288dj9Yb_pxofQpufg,301
|
|
3
3
|
DockerfileUsage.md,sha256=2hkJQF-5JuuzfPZ7IOxgM6QgIQW7l-9oRMFVwyXC4gE,998
|
|
4
4
|
LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
|
|
@@ -6,7 +6,7 @@ README.md,sha256=uF6PXm9ocPITlKVSh9afTakHmpLx3TvawLf-CbMP3wM,3578
|
|
|
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
|
|
9
|
-
castor_extractor/commands/extract_confluence.py,sha256=
|
|
9
|
+
castor_extractor/commands/extract_confluence.py,sha256=xQjC0VZdz8jFHnugqQ0fQGjzGq34v49cqcP4ONeVYNs,748
|
|
10
10
|
castor_extractor/commands/extract_databricks.py,sha256=SVKyoa-BBUQAM6HRHf1Wdg9-tpICic2yyvXQwHcNBhA,1264
|
|
11
11
|
castor_extractor/commands/extract_domo.py,sha256=jvAawUsUTHrwCn_koK6StmQr4n_b5GyvJi6uu6WS0SM,1061
|
|
12
12
|
castor_extractor/commands/extract_looker.py,sha256=cySLiolLCgrREJ9d0kMrJ7P8K3efHTBTzShalWVfI3A,1214
|
|
@@ -33,7 +33,7 @@ castor_extractor/file_checker/column.py,sha256=6bJhcW1snYwgHKkqlS0Ak7XLHZr4YBwO4
|
|
|
33
33
|
castor_extractor/file_checker/column_test.py,sha256=1j8PxvmvmJgpd-mk30iMYOme32ovPSIn4yCXywFoXrg,1935
|
|
34
34
|
castor_extractor/file_checker/constants.py,sha256=X9UvTqcKKZf0pkJErngq0UH_e9PL0dXUlS1g_Lbo5q8,289
|
|
35
35
|
castor_extractor/file_checker/enums.py,sha256=Js8YN8hAoPChH1j2I7Mmk1yHsSNh8WjndHv4gz7c9KA,536
|
|
36
|
-
castor_extractor/file_checker/file.py,sha256=
|
|
36
|
+
castor_extractor/file_checker/file.py,sha256=WXcnsqnDA5mF26sPuMPnCVtusNe3IIM8QVJdqXRiqrA,6537
|
|
37
37
|
castor_extractor/file_checker/file_test.py,sha256=gFcXiRdzX7q5gWEJ2JaywRCHP6Kq1OH2yk5gh92V6KY,2124
|
|
38
38
|
castor_extractor/file_checker/file_test_users.csv,sha256=ftw4T_RBg71c8_DAxnd9fHG3FNg4mwbEQKe1DuEn3ps,547
|
|
39
39
|
castor_extractor/file_checker/file_test_users_valid.csv,sha256=Ek3q7DjUS0neOu1LQaNmObINdEIR3qeHvI4IuKuHLSA,286
|
|
@@ -43,15 +43,15 @@ 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=
|
|
47
|
-
castor_extractor/knowledge/confluence/client/credentials.py,sha256=
|
|
46
|
+
castor_extractor/knowledge/confluence/client/client.py,sha256=lGLRBbAOkEXcEKwHwdBhgG5cvAUkzpSL-7pPcmZpsE8,2114
|
|
47
|
+
castor_extractor/knowledge/confluence/client/credentials.py,sha256=tqUMw-SVoAi4o6I6OeGk4MeDiIPU3-ihhaomXv4CQ64,419
|
|
48
48
|
castor_extractor/knowledge/confluence/client/endpoints.py,sha256=b7PIvw9_W942L4zsEZa__KhZDTo4yt-CdIO0eas69TE,736
|
|
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
|
|
52
52
|
castor_extractor/knowledge/notion/assets.py,sha256=QHv1-pomt5UeN_prP2L6t_zJ-tDSqB8LgopkGAODYPQ,164
|
|
53
53
|
castor_extractor/knowledge/notion/client/__init__.py,sha256=CDPorBCethuNTEtpjvHGcWnWeVfqkEq-IbakWjDKATw,76
|
|
54
|
-
castor_extractor/knowledge/notion/client/client.py,sha256=
|
|
54
|
+
castor_extractor/knowledge/notion/client/client.py,sha256=fUjdmQXVBA0Dn75s10-umjCovEavXt_qAdiXjUuYizM,3727
|
|
55
55
|
castor_extractor/knowledge/notion/client/client_test.py,sha256=fo3_WgCIUfeF3nMfHTSB6wjxIW_dHp1XZL41tNzBisQ,1976
|
|
56
56
|
castor_extractor/knowledge/notion/client/constants.py,sha256=dZCpSrxFlLbR_cFPJKz4M5wcMVcY4UfWFG0N5S22Fhw,147
|
|
57
57
|
castor_extractor/knowledge/notion/client/credentials.py,sha256=-mBY6IhAb9z2RP1MilzIyS3BW39J__u_M5n9uIuUlxA,398
|
|
@@ -139,7 +139,7 @@ castor_extractor/utils/time.py,sha256=jmP1QWg4lv21Jp_Oy71lfJ47hjNOSgHiBOFf964RMP
|
|
|
139
139
|
castor_extractor/utils/time_test.py,sha256=pH8DSosNlwDYZXZNNjYDcL0WbmZc_c212LEEn88Oqew,647
|
|
140
140
|
castor_extractor/utils/type.py,sha256=Sd8JlEgbGkBUZnRqCUDtREeBkOMTXtlNMyCph90_J0Q,328
|
|
141
141
|
castor_extractor/utils/validation.py,sha256=kQAFtqt3gfy7YqYQ0u-60vyNYUF_96he5QDVUQnZmDo,1896
|
|
142
|
-
castor_extractor/utils/validation_test.py,sha256=
|
|
142
|
+
castor_extractor/utils/validation_test.py,sha256=A7P6VmI0kYX2aGIeEN12y7LsY7Kpm8pE4bdVFhbBAMw,1184
|
|
143
143
|
castor_extractor/utils/write.py,sha256=Z_RYm47XeHiUPPUMYMuAjQrVZ18CAkL3daQHQG1XPlM,2148
|
|
144
144
|
castor_extractor/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
145
145
|
castor_extractor/visualization/domo/__init__.py,sha256=1axOCPm4RpdIyUt9LQEvlMvbOPllW8rk63h6EjVgJ0Y,111
|
|
@@ -176,7 +176,7 @@ castor_extractor/visualization/looker_studio/client/client.py,sha256=AYdR46NOdn_
|
|
|
176
176
|
castor_extractor/visualization/looker_studio/client/credentials.py,sha256=yzTaiJQ5cArTnbybUPF6fZZXbX9XQ0SBq-jVI2ECovA,521
|
|
177
177
|
castor_extractor/visualization/looker_studio/client/endpoints.py,sha256=5eY-ffqNDdlDBOOpiF7LpjyHMrzeClJktidCr1pTDUs,669
|
|
178
178
|
castor_extractor/visualization/looker_studio/client/enums.py,sha256=fHgemTaQpnwee8cw1YQVDsVnH--vTyFwT4Px8aVYYHQ,167
|
|
179
|
-
castor_extractor/visualization/looker_studio/client/looker_studio_api_client.py,sha256=
|
|
179
|
+
castor_extractor/visualization/looker_studio/client/looker_studio_api_client.py,sha256=oySC6rsppj67RSifxwSCw4bFrz1Irx6IFJhX7tc_v1E,4087
|
|
180
180
|
castor_extractor/visualization/looker_studio/client/pagination.py,sha256=9HQ3Rkdiz2VB6AvYtZ0F-WouiD0pMmdZyAmkv-3wh08,783
|
|
181
181
|
castor_extractor/visualization/looker_studio/client/scopes.py,sha256=824cqqgZuGq4L-rPNoHJe0ibXsxkRwB0CLG_kqw9Q0g,256
|
|
182
182
|
castor_extractor/visualization/metabase/__init__.py,sha256=3E36cmkMyEgBB6Ot5rWk-N75i0G-7k24QTlc-Iol4pM,193
|
|
@@ -215,7 +215,7 @@ castor_extractor/visualization/mode/client/credentials.py,sha256=ptIpCCpoNt06yYa
|
|
|
215
215
|
castor_extractor/visualization/mode/errors.py,sha256=SKpFT2AiLOuWx2VRLyO7jbAiKcGDFXXrsebpNEKtr0E,1495
|
|
216
216
|
castor_extractor/visualization/mode/extract.py,sha256=PmLWWjUwplQh3TNMemiGwyFdxMcKVMvumZPxSMLJAwk,1625
|
|
217
217
|
castor_extractor/visualization/powerbi/__init__.py,sha256=AJnmfdmm2mGaInWJkUfZxRqrI7dBkTUSebpow05g5zo,135
|
|
218
|
-
castor_extractor/visualization/powerbi/assets.py,sha256=
|
|
218
|
+
castor_extractor/visualization/powerbi/assets.py,sha256=IB_XKwgdN1pZYGZ4RfeHrLjflianTzWf_6tg-4CIwu0,742
|
|
219
219
|
castor_extractor/visualization/powerbi/client/__init__.py,sha256=8Bzhd9Z0ebVg2gDchXCOPa80Yqlq_9oCjbGi8u1M6J0,93
|
|
220
220
|
castor_extractor/visualization/powerbi/client/authentication.py,sha256=fz0v9qxeADwA1jiS9UzAQN5mA5kmZT53onlcWon2RGw,892
|
|
221
221
|
castor_extractor/visualization/powerbi/client/client.py,sha256=Y_rwkyPO3GbTAtaOClqnGVEK5iWmREIuDKDJx0LefHs,7203
|
|
@@ -225,7 +225,7 @@ castor_extractor/visualization/powerbi/client/credentials.py,sha256=sVi4ecJP8ydf
|
|
|
225
225
|
castor_extractor/visualization/powerbi/client/credentials_test.py,sha256=TzFqxsWVQ3sXR_n0bJsexK9Uz7ceXCEPVqDGWTJzW60,993
|
|
226
226
|
castor_extractor/visualization/powerbi/client/endpoints.py,sha256=DrAFpYHhp9Z7fxebdy_Ir6LFfFluHRBJId4tVCYTUVs,2051
|
|
227
227
|
castor_extractor/visualization/powerbi/client/pagination.py,sha256=OZMjoDQPRGMoWd9QcKKrPh3aErJR20SHlrTqY_siLkk,755
|
|
228
|
-
castor_extractor/visualization/powerbi/extract.py,sha256=
|
|
228
|
+
castor_extractor/visualization/powerbi/extract.py,sha256=Z5KbqMhMnqjWcnzged2G1-Gf6GYWJobTL9_TpAdgb8o,1309
|
|
229
229
|
castor_extractor/visualization/qlik/__init__.py,sha256=u6lIfm_WOykBwt6SlaB7C0Dtx37XBliUbM5oWv26gC8,177
|
|
230
230
|
castor_extractor/visualization/qlik/assets.py,sha256=Ab_kG61mHcK8GoGZbfQW7RSWyd7D9bVga9DOqnm0iSE,1625
|
|
231
231
|
castor_extractor/visualization/qlik/client/__init__.py,sha256=5O5N9Jrt3d99agFEJ28lKWs2KkDaXK-lZ07IUtLj56M,130
|
|
@@ -318,12 +318,12 @@ castor_extractor/warehouse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
|
|
|
318
318
|
castor_extractor/warehouse/abstract/__init__.py,sha256=Fdfa026tgOo64MvzVRLHM_F2G-JmcehrF0mh3dHgb7s,419
|
|
319
319
|
castor_extractor/warehouse/abstract/asset.py,sha256=JiFRohZfPkQrgJJ8gTirD69snY1ubjPr5_Mg3vM--RY,2647
|
|
320
320
|
castor_extractor/warehouse/abstract/asset_test.py,sha256=_kd4ybNlWSAdSdEgJKC-jhJTa1nMRa9i8RO3YbqKLM4,758
|
|
321
|
-
castor_extractor/warehouse/abstract/extract.py,sha256=
|
|
321
|
+
castor_extractor/warehouse/abstract/extract.py,sha256=9Y2fUn3y2-2WjiHnrabjvAvOA8UETJeTYr18zcM7bdI,2924
|
|
322
322
|
castor_extractor/warehouse/abstract/query.py,sha256=20vGhKKX0Kdprj0pbyt0A7L82hwVPezovx38h8seEfA,2614
|
|
323
323
|
castor_extractor/warehouse/abstract/time_filter.py,sha256=bggIONfMmUxffkA6TwM3BsjfS2l9WFxPq8krfsau5pw,935
|
|
324
324
|
castor_extractor/warehouse/abstract/time_filter_test.py,sha256=PIkegB7KOKBdpc6zIvmyl_CeQyADeFDplyQ8HTNU5LA,448
|
|
325
325
|
castor_extractor/warehouse/bigquery/__init__.py,sha256=PCGNYdi7dHv-SyanUWzRuBp-ypuQ01PkDaQjVnaNhbM,170
|
|
326
|
-
castor_extractor/warehouse/bigquery/client.py,sha256=
|
|
326
|
+
castor_extractor/warehouse/bigquery/client.py,sha256=lPAn6WUwDq0rIPNaMOcabet8C4TYJ93EWZUxX72XrZc,5595
|
|
327
327
|
castor_extractor/warehouse/bigquery/client_test.py,sha256=Ym8e4d--0YQwiVcNUnXLx0X-X6ZznwNMBMbMaDS5oEA,1514
|
|
328
328
|
castor_extractor/warehouse/bigquery/credentials.py,sha256=oCZ8H7qpudKzwM7PRMpVAmWXt7bjIRa8Harmp-ysQJ4,425
|
|
329
329
|
castor_extractor/warehouse/bigquery/extract.py,sha256=TAxpdwZ6kfSe7xv22vcFwAE3-Rr1VF9UnX0DM_IPdF8,2934
|
|
@@ -436,8 +436,8 @@ castor_extractor/warehouse/sqlserver/queries/table.sql,sha256=kbBQP-TdG5px1IVgyx
|
|
|
436
436
|
castor_extractor/warehouse/sqlserver/queries/user.sql,sha256=gOrZsMVypusR2dc4vwVs4E1a-CliRsr_UjnD2EbXs-A,94
|
|
437
437
|
castor_extractor/warehouse/sqlserver/query.py,sha256=g0hPT-RmeGi2DyenAi3o72cTlQsLToXIFYojqc8E5fQ,533
|
|
438
438
|
castor_extractor/warehouse/synapse/queries/column.sql,sha256=lNcFoIW3Y0PFOqoOzJEXmPvZvfAsY0AP63Mu2LuPzPo,1351
|
|
439
|
-
castor_extractor-0.
|
|
440
|
-
castor_extractor-0.
|
|
441
|
-
castor_extractor-0.
|
|
442
|
-
castor_extractor-0.
|
|
443
|
-
castor_extractor-0.
|
|
439
|
+
castor_extractor-0.23.1.dist-info/LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
|
|
440
|
+
castor_extractor-0.23.1.dist-info/METADATA,sha256=6yGEAuCwBKELYaRnIf8hZAXsJMOAlJqPlJiNYWhEmok,22546
|
|
441
|
+
castor_extractor-0.23.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
442
|
+
castor_extractor-0.23.1.dist-info/entry_points.txt,sha256=7aVSxc-_2dicp28Ow-S4y0p4wGoTm9zGmVptMvfLdw8,1649
|
|
443
|
+
castor_extractor-0.23.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|