castor-extractor 0.3.5__py3-none-any.whl → 0.3.7__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 -0
- castor_extractor/commands/__init__.py +3 -0
- castor_extractor/commands/extract_metabase_api.py +1 -1
- castor_extractor/commands/extract_metabase_db.py +1 -1
- castor_extractor/file_checker/file.py +1 -1
- castor_extractor/file_checker/file_test.py +1 -2
- castor_extractor/uploader/upload_test.py +1 -1
- castor_extractor/utils/__init__.py +1 -0
- castor_extractor/utils/deprecate.py +27 -0
- castor_extractor/utils/formatter_test.py +1 -1
- castor_extractor/utils/store.py +1 -1
- castor_extractor/utils/write.py +2 -0
- castor_extractor/visualization/metabase/client/api/client.py +2 -2
- castor_extractor/visualization/metabase/client/api/credentials.py +5 -5
- castor_extractor/visualization/metabase/client/db/client.py +1 -1
- castor_extractor/visualization/metabase/client/db/credentials.py +5 -5
- castor_extractor/warehouse/__init__.py +0 -1
- castor_extractor/warehouse/bigquery/client.py +3 -3
- castor_extractor/warehouse/bigquery/extract.py +1 -1
- castor_extractor/warehouse/snowflake/client.py +1 -1
- {castor_extractor-0.3.5.dist-info → castor_extractor-0.3.7.dist-info}/METADATA +1 -1
- {castor_extractor-0.3.5.dist-info → castor_extractor-0.3.7.dist-info}/RECORD +24 -23
- {castor_extractor-0.3.5.dist-info → castor_extractor-0.3.7.dist-info}/WHEEL +0 -0
- {castor_extractor-0.3.5.dist-info → castor_extractor-0.3.7.dist-info}/entry_points.txt +0 -0
CHANGELOG.md
CHANGED
|
@@ -125,7 +125,7 @@ class FileCheckerRun:
|
|
|
125
125
|
return
|
|
126
126
|
header = f"Issues detected on Row #{index+1}\n"
|
|
127
127
|
for k, v in row.items():
|
|
128
|
-
header += "{:<20} {:<100}\n"
|
|
128
|
+
header += f"{str(k):<20} {str(v):<100}\n"
|
|
129
129
|
self.logger.info(header + _SEPARATOR + issue_log + _SEPARATOR)
|
|
130
130
|
|
|
131
131
|
def occurrences(self, name: str) -> Set[str]:
|
|
@@ -13,8 +13,7 @@ _TEST_FILE_VALID = "file_test_users_valid.csv"
|
|
|
13
13
|
def _content(path: str) -> Iterator[Dict]:
|
|
14
14
|
absolute_path = os.path.join(os.path.dirname(__file__), path)
|
|
15
15
|
with open(absolute_path) as csvfile:
|
|
16
|
-
|
|
17
|
-
yield row
|
|
16
|
+
yield from csv.DictReader(csvfile)
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
def _user_template() -> FileTemplate:
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import sys
|
|
3
|
+
import warnings
|
|
4
|
+
from typing import Tuple
|
|
5
|
+
|
|
6
|
+
# DeprecationWarning is filtered by default
|
|
7
|
+
warnings.filterwarnings("once", category=DeprecationWarning)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def deprecate_python(min_version_supported: Tuple[int]):
|
|
11
|
+
"""raises a warning if python version < min_version_supported"""
|
|
12
|
+
|
|
13
|
+
python_version = (
|
|
14
|
+
sys.version_info.major,
|
|
15
|
+
sys.version_info.minor,
|
|
16
|
+
sys.version_info.micro,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
python_version_str = ".".join(map(str, python_version))
|
|
20
|
+
min_supported_str = ".".join(map(str, min_version_supported))
|
|
21
|
+
|
|
22
|
+
if python_version < min_version_supported:
|
|
23
|
+
warnings.warn(
|
|
24
|
+
f"You are using python version {python_version_str}, please upgrade to version {min_supported_str} or higher."
|
|
25
|
+
" Your version will be soon deprecated",
|
|
26
|
+
DeprecationWarning,
|
|
27
|
+
)
|
|
@@ -37,7 +37,7 @@ SAMPLE_FILE = "formatter_test"
|
|
|
37
37
|
def _test(formatter: Formatter) -> None:
|
|
38
38
|
root = os.path.dirname(__file__)
|
|
39
39
|
path = os.path.join(root, f"{SAMPLE_FILE}.{formatter.extension()}")
|
|
40
|
-
with open(path) as file:
|
|
40
|
+
with open(path, "r") as file:
|
|
41
41
|
rows = list(formatter.deserialize(file))
|
|
42
42
|
first = rows[0]
|
|
43
43
|
|
castor_extractor/utils/store.py
CHANGED
castor_extractor/utils/write.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
3
|
import os
|
|
4
|
+
import sys
|
|
4
5
|
from datetime import datetime
|
|
5
6
|
from typing import Any, List
|
|
6
7
|
|
|
@@ -51,6 +52,7 @@ def write_summary(output_directory: str, ts: int, **kwargs):
|
|
|
51
52
|
write_json(
|
|
52
53
|
summary,
|
|
53
54
|
{
|
|
55
|
+
"python_version": sys.version,
|
|
54
56
|
"version": _current_version(),
|
|
55
57
|
"executed_at": datetime.fromtimestamp(ts).isoformat(),
|
|
56
58
|
**kwargs,
|
|
@@ -33,7 +33,7 @@ class ApiClient:
|
|
|
33
33
|
):
|
|
34
34
|
self._credentials = CredentialsApi(
|
|
35
35
|
base_url=get_value(CredentialsApiKey.BASE_URL, kwargs),
|
|
36
|
-
|
|
36
|
+
user=get_value(CredentialsApiKey.USER, kwargs),
|
|
37
37
|
password=get_value(CredentialsApiKey.PASSWORD, kwargs),
|
|
38
38
|
)
|
|
39
39
|
self._session = requests.Session()
|
|
@@ -91,7 +91,7 @@ class ApiClient:
|
|
|
91
91
|
def _login(self) -> str:
|
|
92
92
|
url = self._url("session")
|
|
93
93
|
payload = {
|
|
94
|
-
"username": self._credentials.
|
|
94
|
+
"username": self._credentials.user,
|
|
95
95
|
"password": self._credentials.password,
|
|
96
96
|
}
|
|
97
97
|
response = self._session.post(url, json=payload)
|
|
@@ -6,13 +6,13 @@ from .....utils import from_env
|
|
|
6
6
|
|
|
7
7
|
class CredentialsApiKey(Enum):
|
|
8
8
|
BASE_URL = "base_url"
|
|
9
|
-
|
|
9
|
+
USER = "user"
|
|
10
10
|
PASSWORD = "password"
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
CREDENTIALS_ENV: Dict[CredentialsApiKey, str] = {
|
|
14
14
|
CredentialsApiKey.BASE_URL: "CASTOR_METABASE_API_BASE_URL",
|
|
15
|
-
CredentialsApiKey.
|
|
15
|
+
CredentialsApiKey.USER: "CASTOR_METABASE_API_USERNAME",
|
|
16
16
|
CredentialsApiKey.PASSWORD: "CASTOR_METABASE_API_PASSWORD",
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -30,13 +30,13 @@ def get_value(key: CredentialsApiKey, kwargs: dict) -> str:
|
|
|
30
30
|
class CredentialsApi:
|
|
31
31
|
"""ValueObject for the credentials"""
|
|
32
32
|
|
|
33
|
-
def __init__(self, base_url: str,
|
|
33
|
+
def __init__(self, base_url: str, user: str, password: str):
|
|
34
34
|
self.base_url = base_url
|
|
35
|
-
self.
|
|
35
|
+
self.user = user
|
|
36
36
|
self.password = password
|
|
37
37
|
|
|
38
38
|
def to_dict(self, hide: bool = False) -> Dict[str, str]:
|
|
39
|
-
safe = (CredentialsApiKey.BASE_URL, CredentialsApiKey.
|
|
39
|
+
safe = (CredentialsApiKey.BASE_URL, CredentialsApiKey.USER)
|
|
40
40
|
unsafe = (CredentialsApiKey.PASSWORD,)
|
|
41
41
|
|
|
42
42
|
def val(k: CredentialsApiKey, v: str) -> str:
|
|
@@ -37,7 +37,7 @@ class DbClient:
|
|
|
37
37
|
port=get_value(CredentialsDbKey.PORT, kwargs),
|
|
38
38
|
database=get_value(CredentialsDbKey.DATABASE, kwargs),
|
|
39
39
|
schema=get_value(CredentialsDbKey.SCHEMA, kwargs),
|
|
40
|
-
|
|
40
|
+
user=get_value(CredentialsDbKey.USER, kwargs),
|
|
41
41
|
password=get_value(CredentialsDbKey.PASSWORD, kwargs),
|
|
42
42
|
)
|
|
43
43
|
self.encryption_secret_key = kwargs.get(
|
|
@@ -9,7 +9,7 @@ class CredentialsDbKey(Enum):
|
|
|
9
9
|
PORT = "port"
|
|
10
10
|
DATABASE = "database"
|
|
11
11
|
SCHEMA = "schema"
|
|
12
|
-
|
|
12
|
+
USER = "user"
|
|
13
13
|
PASSWORD = "password"
|
|
14
14
|
|
|
15
15
|
|
|
@@ -18,7 +18,7 @@ CREDENTIALS_ENV: Dict[CredentialsDbKey, str] = {
|
|
|
18
18
|
CredentialsDbKey.PORT: "CASTOR_METABASE_DB_PORT",
|
|
19
19
|
CredentialsDbKey.DATABASE: "CASTOR_METABASE_DB_DATABASE",
|
|
20
20
|
CredentialsDbKey.SCHEMA: "CASTOR_METABASE_DB_SCHEMA",
|
|
21
|
-
CredentialsDbKey.
|
|
21
|
+
CredentialsDbKey.USER: "CASTOR_METABASE_DB_USERNAME",
|
|
22
22
|
CredentialsDbKey.PASSWORD: "CASTOR_METABASE_DB_PASSWORD",
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -42,14 +42,14 @@ class CredentialsDb:
|
|
|
42
42
|
port: str,
|
|
43
43
|
database: str,
|
|
44
44
|
schema: str,
|
|
45
|
-
|
|
45
|
+
user: str,
|
|
46
46
|
password: str,
|
|
47
47
|
):
|
|
48
48
|
self.host = host
|
|
49
49
|
self.port = port
|
|
50
50
|
self.database = database
|
|
51
51
|
self.schema = schema
|
|
52
|
-
self.
|
|
52
|
+
self.user = user
|
|
53
53
|
self.password = password
|
|
54
54
|
|
|
55
55
|
def to_dict(self, hide: bool = False) -> Dict[str, str]:
|
|
@@ -58,7 +58,7 @@ class CredentialsDb:
|
|
|
58
58
|
CredentialsDbKey.PORT,
|
|
59
59
|
CredentialsDbKey.DATABASE,
|
|
60
60
|
CredentialsDbKey.SCHEMA,
|
|
61
|
-
CredentialsDbKey.
|
|
61
|
+
CredentialsDbKey.USER,
|
|
62
62
|
)
|
|
63
63
|
unsafe = (CredentialsDbKey.PASSWORD,)
|
|
64
64
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -86,13 +86,13 @@ class BigQueryClient(SqlalchemyClient):
|
|
|
86
86
|
"""
|
|
87
87
|
Returns distinct (project_id, region) available for the given GCP client
|
|
88
88
|
"""
|
|
89
|
-
return
|
|
89
|
+
return {
|
|
90
90
|
(ds.project, ds._properties["location"])
|
|
91
91
|
for ds in self._list_datasets()
|
|
92
|
-
|
|
92
|
+
}
|
|
93
93
|
|
|
94
94
|
def get_datasets(self) -> Set[Tuple[str, str]]:
|
|
95
95
|
"""
|
|
96
96
|
Returns distinct (project_id, dataset_id) available for the given GCP client
|
|
97
97
|
"""
|
|
98
|
-
return
|
|
98
|
+
return {(ds.project, ds.dataset_id) for ds in self._list_datasets()}
|
|
@@ -38,7 +38,7 @@ def _credentials(params: dict) -> dict:
|
|
|
38
38
|
"""extract GCP credentials"""
|
|
39
39
|
path = params.get("credentials") or from_env(BIGQUERY_CREDENTIALS)
|
|
40
40
|
logger.info(f"Credentials fetched from {path}")
|
|
41
|
-
with open(path) as file:
|
|
41
|
+
with open(path, "r") as file:
|
|
42
42
|
return cast(dict, json.load(file))
|
|
43
43
|
|
|
44
44
|
|
|
@@ -34,7 +34,7 @@ def _use(connection: Connection, resource: UseResource, name: str):
|
|
|
34
34
|
DON'T COPY THIS CODE FOR ANOTHER PURPOSE
|
|
35
35
|
"""
|
|
36
36
|
target = resource.value
|
|
37
|
-
if not re.fullmatch("[\w_-]+", name):
|
|
37
|
+
if not re.fullmatch(r"[\w_-]+", name):
|
|
38
38
|
raise NameError(f"{target} name invalid {name}")
|
|
39
39
|
command = f'USE {target} "{name}"'
|
|
40
40
|
logger.info(f"executing {command}")
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
CHANGELOG.md,sha256=
|
|
1
|
+
CHANGELOG.md,sha256=jhAGgcGOYcL9CDZOQ0Ve5LD7eybG5Cwz1VrOw2I2yME,4932
|
|
2
2
|
LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
|
|
3
3
|
README.md,sha256=_H5aVcA57LLStpQaYm0yYndJRuw7BqQKt46D1xogRJo,3390
|
|
4
4
|
castor_extractor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
castor_extractor/commands/__init__.py,sha256=
|
|
5
|
+
castor_extractor/commands/__init__.py,sha256=NC-BuOBcUesrSJiNVLd5GXef0OQFm-CP2Luf4lQdAXk,116
|
|
6
6
|
castor_extractor/commands/extract_bigquery.py,sha256=3de34xbbk7UISPlCsL2yhkL6yljgYzAuiXfIol3_zNY,1252
|
|
7
7
|
castor_extractor/commands/extract_looker.py,sha256=iGIWLFnAQQ3aFrbd34xOGKXJerU3_grDsqWNJfbLhS8,1075
|
|
8
|
-
castor_extractor/commands/extract_metabase_api.py,sha256=
|
|
9
|
-
castor_extractor/commands/extract_metabase_db.py,sha256=
|
|
8
|
+
castor_extractor/commands/extract_metabase_api.py,sha256=pSkAwgYY0_UXcLF1If51mHdfITFSsDJ5XljwO86PJJg,761
|
|
9
|
+
castor_extractor/commands/extract_metabase_db.py,sha256=gYyz3us8Ha8eH2roixlM7TSsPU6f7el7nDUAEvZz0Bw,1235
|
|
10
10
|
castor_extractor/commands/extract_mode.py,sha256=PqBOQLyfeCK3KIvClKixai85sv2vt9QajNsOkYBEW6w,919
|
|
11
11
|
castor_extractor/commands/extract_postgres.py,sha256=pX0RnCPi4nw6QQ6wiAuZ_Xt3ZbDuMUG9aQKuqFgJtAU,1154
|
|
12
12
|
castor_extractor/commands/extract_powerbi.py,sha256=qQ3R6B5PA3pO97JphI2O_FDjcwytFPvSbcJlBPgFNDI,850
|
|
@@ -21,8 +21,8 @@ castor_extractor/file_checker/column.py,sha256=fMchy5v-Sd-0xuYS0V9mob7wnljslzWLh
|
|
|
21
21
|
castor_extractor/file_checker/column_test.py,sha256=1j8PxvmvmJgpd-mk30iMYOme32ovPSIn4yCXywFoXrg,1935
|
|
22
22
|
castor_extractor/file_checker/constants.py,sha256=X9UvTqcKKZf0pkJErngq0UH_e9PL0dXUlS1g_Lbo5q8,289
|
|
23
23
|
castor_extractor/file_checker/enums.py,sha256=Js8YN8hAoPChH1j2I7Mmk1yHsSNh8WjndHv4gz7c9KA,536
|
|
24
|
-
castor_extractor/file_checker/file.py,sha256=
|
|
25
|
-
castor_extractor/file_checker/file_test.py,sha256=
|
|
24
|
+
castor_extractor/file_checker/file.py,sha256=ZcWcpytKQfo3Xm1HlYe4BnLlLSXWHTmOHGNktFLVBd4,6537
|
|
25
|
+
castor_extractor/file_checker/file_test.py,sha256=Ya4WA_DztKnuY0CeeZN8aaBvAnLftHWOnWJPZD0TbDE,2082
|
|
26
26
|
castor_extractor/file_checker/file_test_users.csv,sha256=ftw4T_RBg71c8_DAxnd9fHG3FNg4mwbEQKe1DuEn3ps,547
|
|
27
27
|
castor_extractor/file_checker/file_test_users_valid.csv,sha256=Ek3q7DjUS0neOu1LQaNmObINdEIR3qeHvI4IuKuHLSA,286
|
|
28
28
|
castor_extractor/file_checker/templates/__init__.py,sha256=StVLm4ZGyGVmPzarxEaDR_k08T3nUnyiv8N99sAz6AQ,60
|
|
@@ -39,18 +39,19 @@ castor_extractor/uploader/constant.py,sha256=hEJlWYx0dyBzgo59XUBKCYIKEODpIc2Dyzw
|
|
|
39
39
|
castor_extractor/uploader/env.py,sha256=5HSniVSOYVg4u38O4k8TB_qaJq9s8yJ1hjedkq_gdVg,878
|
|
40
40
|
castor_extractor/uploader/env_test.py,sha256=ClCWWtwd2N-5ClIDUxVMeKkWfhhOTxpppsXUDmdjxSg,472
|
|
41
41
|
castor_extractor/uploader/upload.py,sha256=NTXF4BlVEsRCA6S-SunyNHkcXN9JaRpK1W65ZeMWAcw,3353
|
|
42
|
-
castor_extractor/uploader/upload_test.py,sha256=
|
|
42
|
+
castor_extractor/uploader/upload_test.py,sha256=WzGtYoe45-Q_AAR_gj7aOZU_C342GdyZxiUHwITi2oU,329
|
|
43
43
|
castor_extractor/uploader/utils.py,sha256=NCe0tkB28BVhqzOaDhDjaSfODjjcPWB17X6chnvyCWs,478
|
|
44
|
-
castor_extractor/utils/__init__.py,sha256=
|
|
44
|
+
castor_extractor/utils/__init__.py,sha256=R8P4994ZN8E7O1uavThDAP1qQO73eii9RfnWOsq3UKE,918
|
|
45
45
|
castor_extractor/utils/collection.py,sha256=uenJvfamphxV5ZFt12BgfsRs99pWffYJIMjAD_Laz2Q,417
|
|
46
46
|
castor_extractor/utils/constants.py,sha256=qBQprS9U66mS-RIBXiLujdTSV3WvGv40Bc0khP4Abdk,39
|
|
47
|
+
castor_extractor/utils/deprecate.py,sha256=TWvdMybi9vD3ujPmSuw1NWASiBNjzHnjPJnL2Jn7_As,843
|
|
47
48
|
castor_extractor/utils/env.py,sha256=78pdgtVJz0yxkT1wMt46Yyz4pn2MzHkuKhK-sbfxFGU,608
|
|
48
49
|
castor_extractor/utils/files.py,sha256=3C_u7P-kSZoOABVaKsuaf8lEhldRRxyxD27-K18_dEU,1545
|
|
49
50
|
castor_extractor/utils/files_test.py,sha256=NstdZefWE4O1_bbjV9mVy_r-ojt591uf9WAi9akgiLc,1514
|
|
50
51
|
castor_extractor/utils/formatter.py,sha256=QGnU0ujzjlyvwY1OXDUyhqUPYZpYrqq4pq25Po3PCk0,4543
|
|
51
52
|
castor_extractor/utils/formatter_test.csv,sha256=UCNqPs8-xrY1AdMSpuctVFXInQe3Z_EABP4rF-Jw5ks,3802
|
|
52
53
|
castor_extractor/utils/formatter_test.json,sha256=yPP_z1ZEavaUskC-Hx33uGlwKoInHYOFKqsJ9NgwIFo,12527
|
|
53
|
-
castor_extractor/utils/formatter_test.py,sha256=
|
|
54
|
+
castor_extractor/utils/formatter_test.py,sha256=kVd5XhvoFj4Gs4TTjEAoqWBlHuuSoK2zEfMMWdJI_pU,1543
|
|
54
55
|
castor_extractor/utils/load.py,sha256=MXwGVB_Dp_VitGwo71sNB_xDmGzQ4oQ13MhaXXyYkS0,265
|
|
55
56
|
castor_extractor/utils/object.py,sha256=_oO9ymbf9FqM6hbNNl9cxDCwYh7ordwXn0rgzRIibFE,1822
|
|
56
57
|
castor_extractor/utils/object_test.py,sha256=P_Sxs6VoIyjUhY18q7E3LK88bwXdQ44J9OiEn9IHsJ0,2514
|
|
@@ -60,7 +61,7 @@ castor_extractor/utils/retry.py,sha256=mA49hApPp4zO7ADkbIXmCdaF4xrmM-WOvMXeY-AjS
|
|
|
60
61
|
castor_extractor/utils/retry_test.py,sha256=-ze3spfkUGmzckSAsEC99t-aJX7DF7DzDYxhi60VPXk,1635
|
|
61
62
|
castor_extractor/utils/safe.py,sha256=TIBq8H05JCtBc5RHbf3pM0tWIZNFCUMzAwOryqz365A,1966
|
|
62
63
|
castor_extractor/utils/safe_test.py,sha256=IHN1Z761tYMFslYC-2HAfkXmFPh4LYSqNLs4QZwykjk,2160
|
|
63
|
-
castor_extractor/utils/store.py,sha256=
|
|
64
|
+
castor_extractor/utils/store.py,sha256=mlfg0sS4azJ1eg28D_cWUWkF-npy3R9d4VPC4EAVNnI,2092
|
|
64
65
|
castor_extractor/utils/string.py,sha256=-fXrp4CLJoECwOaYTuv2d8vatA74EI22URschGD8pvo,1961
|
|
65
66
|
castor_extractor/utils/string_test.py,sha256=5n4leOBxphtnyD0iHajzsTog4vLlYk8h8LDYV4ZMSeM,2206
|
|
66
67
|
castor_extractor/utils/time.py,sha256=8eTRskem2HLbhTGoNPB9R_enKu9ZwvTHMSW8UkxZe2g,430
|
|
@@ -69,7 +70,7 @@ castor_extractor/utils/uri.py,sha256=jmP9hY-6PRqdc3-vAOdtll_U6q9VCqSqmBAN6QRs3ZI
|
|
|
69
70
|
castor_extractor/utils/uri_test.py,sha256=1XKF6qSseCeD4G4ckaNO07JXfGbt7XUVinOZdpEYrDQ,259
|
|
70
71
|
castor_extractor/utils/validation.py,sha256=TkMhZEXM24n889_i5NTs5xS2MBEWEK2_t-Y1sRVujJk,1904
|
|
71
72
|
castor_extractor/utils/validation_test.py,sha256=aSetitOCkH_K-Wto9ISOVGso5jGfTUOBLm3AZnvavO8,1181
|
|
72
|
-
castor_extractor/utils/write.py,sha256=
|
|
73
|
+
castor_extractor/utils/write.py,sha256=CbLMz-mkUFduwogERwe69GXXVO65HEDirVm-kDJkRxg,2135
|
|
73
74
|
castor_extractor/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
75
|
castor_extractor/visualization/looker/__init__.py,sha256=F1DkZQStdmPRc2AwurWL0Hhaz2SRW9ERfZLvMcBJc0g,191
|
|
75
76
|
castor_extractor/visualization/looker/api/__init__.py,sha256=eMtzoMAE7ZnvfwJJAOh9Cooztj4Juzc40wSEHhIYXw4,181
|
|
@@ -90,11 +91,11 @@ castor_extractor/visualization/metabase/__init__.py,sha256=hSIoVgPzhQh-9H8XRUzga
|
|
|
90
91
|
castor_extractor/visualization/metabase/assets.py,sha256=XeP8UzbqsrleBtdv2nJ2LtWC_p3TAL7g0zlrcjt82TM,2814
|
|
91
92
|
castor_extractor/visualization/metabase/client/__init__.py,sha256=ZMn272PqMoHyWkK0fBuXw9YEnc-OeszNn_BDlMc_FSI,52
|
|
92
93
|
castor_extractor/visualization/metabase/client/api/__init__.py,sha256=bWs7daLw2NA9qESCN6anhI_zCjfVmajfKDHFPvjGBz0,30
|
|
93
|
-
castor_extractor/visualization/metabase/client/api/client.py,sha256=
|
|
94
|
-
castor_extractor/visualization/metabase/client/api/credentials.py,sha256=
|
|
94
|
+
castor_extractor/visualization/metabase/client/api/client.py,sha256=n4jV7jjLY4meM2sKsqtHXbw76sNlbeUKd1mbLU_GbeY,5609
|
|
95
|
+
castor_extractor/visualization/metabase/client/api/credentials.py,sha256=HsyJ3X_N-smw_6cwQdi9pQ2Pl3KWoBqZL_Xg8dy7hGo,1334
|
|
95
96
|
castor_extractor/visualization/metabase/client/db/__init__.py,sha256=xmqEI59hvioLxE8LXcH4_njCrBy8_3QjIrZNb6bW6Rs,29
|
|
96
|
-
castor_extractor/visualization/metabase/client/db/client.py,sha256=
|
|
97
|
-
castor_extractor/visualization/metabase/client/db/credentials.py,sha256=
|
|
97
|
+
castor_extractor/visualization/metabase/client/db/client.py,sha256=h8s4mYoN_wsPR7kA7SZBT-f5b_RgJcoJWy1lA-_VM0g,4095
|
|
98
|
+
castor_extractor/visualization/metabase/client/db/credentials.py,sha256=xWTQ6xDBJak7YS13B5kmh26L36VY0XYpCX_DbEAB4QM,1863
|
|
98
99
|
castor_extractor/visualization/metabase/client/db/queries/.sqlfluff,sha256=sOQQOpAa9QMj9cBlulfmt-DZ_kQzMpzSAEnh10QGSB0,76
|
|
99
100
|
castor_extractor/visualization/metabase/client/db/queries/base_url.sql,sha256=p2EL9kdt-hw_yh3aeCE91AXEB4RrYAbG2QrBBNqQjDE,79
|
|
100
101
|
castor_extractor/visualization/metabase/client/db/queries/card.sql,sha256=U4-ZrZP5XS7Kssd3CFlpGrABbHAMK09Bh_yeT3z7Yk8,419
|
|
@@ -182,7 +183,7 @@ castor_extractor/visualization/tableau/tests/unit/utils/env_key.py,sha256=fBX8pG
|
|
|
182
183
|
castor_extractor/visualization/tableau/tsc_fields.py,sha256=BoV6XVu-HUan9hxeYRbvbS9dIMfgDlgfOvdY7DiFiZc,966
|
|
183
184
|
castor_extractor/visualization/tableau/types.py,sha256=_T3fahMHRkV2TVaYcjITh61T0FLzSBYKD21VurzkF5M,322
|
|
184
185
|
castor_extractor/visualization/tableau/usage.py,sha256=LlFwlbEr-EnYUJjKZha99CRCRrERJ350oAvzBQlp9_s,427
|
|
185
|
-
castor_extractor/warehouse/__init__.py,sha256=
|
|
186
|
+
castor_extractor/warehouse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
186
187
|
castor_extractor/warehouse/abstract/__init__.py,sha256=tIZRkvqZt-7ZwxH8mikxbirHpZuHYpbztxJ6vf5r0yg,386
|
|
187
188
|
castor_extractor/warehouse/abstract/asset.py,sha256=BjAf0iXhgFy8mqJl_8VCoifWaA8GQ8tXJtoJjIYdKJo,1182
|
|
188
189
|
castor_extractor/warehouse/abstract/client.py,sha256=257ksjlvKSIjy54LZghc0lTQ2gGC1f0BbexXJj0b9Fs,1947
|
|
@@ -191,9 +192,9 @@ castor_extractor/warehouse/abstract/query.py,sha256=uOmSAtel9Zu_NfPxPASy1UAWa_0V
|
|
|
191
192
|
castor_extractor/warehouse/abstract/time_filter.py,sha256=bggIONfMmUxffkA6TwM3BsjfS2l9WFxPq8krfsau5pw,935
|
|
192
193
|
castor_extractor/warehouse/abstract/time_filter_test.py,sha256=V_nNzEI6RE5UK1sAFKJogrWWnQeHYIX_TZtTb67COaE,449
|
|
193
194
|
castor_extractor/warehouse/bigquery/__init__.py,sha256=cQTw-nkKg3CQemgufknJHPssvUWCPURTMVb6q5hiIcs,125
|
|
194
|
-
castor_extractor/warehouse/bigquery/client.py,sha256=
|
|
195
|
+
castor_extractor/warehouse/bigquery/client.py,sha256=oqb0UhVx91_48hhL2_37d5s7heM_uQiqsibe03Ut5NE,3125
|
|
195
196
|
castor_extractor/warehouse/bigquery/client_test.py,sha256=RmE1ygojFfRmNY_v_Ud4sSsrXcW_XLyZHyn7mYz1EkQ,1567
|
|
196
|
-
castor_extractor/warehouse/bigquery/extract.py,sha256=
|
|
197
|
+
castor_extractor/warehouse/bigquery/extract.py,sha256=iblqnXo0knhmGC8njtgDigR4UoNh7MAw-YSW02CzpWs,2800
|
|
197
198
|
castor_extractor/warehouse/bigquery/queries/.sqlfluff,sha256=ce8UDW2k39v6RBVxgKqjOHHYMoGN9S9f7BCZNHHhox8,30
|
|
198
199
|
castor_extractor/warehouse/bigquery/queries/column.sql,sha256=NxdTnHwomHTEGSc-UoXFKUwg59I9XAOwrSau7JUqGQE,1815
|
|
199
200
|
castor_extractor/warehouse/bigquery/queries/cte/sharded.sql,sha256=kdk7N0qoH6qcLX7m6pgYYkQWIqLtiCvY-6asQpQecUo,1347
|
|
@@ -233,7 +234,7 @@ castor_extractor/warehouse/redshift/queries/user.sql,sha256=sEXveJAuNvZacvpI6Wfw
|
|
|
233
234
|
castor_extractor/warehouse/redshift/queries/view_ddl.sql,sha256=Pkyh_QT6d4rhTeyiVcqw6O8CRl7NEhk2p7eM5YIn5kg,719
|
|
234
235
|
castor_extractor/warehouse/redshift/query.py,sha256=0C81rkt2cpkWrJIxxwALDyqr-49vlqQM04y_N6wwStc,540
|
|
235
236
|
castor_extractor/warehouse/snowflake/__init__.py,sha256=G4PGCtcpNaf33sKcT_ypAITI0zu8NxQhAeBmfL05LZg,128
|
|
236
|
-
castor_extractor/warehouse/snowflake/client.py,sha256=
|
|
237
|
+
castor_extractor/warehouse/snowflake/client.py,sha256=9CzkKVDFsqxamLQXKOxGm-y2HPbHxlJS9lWEhRIpiOQ,4128
|
|
237
238
|
castor_extractor/warehouse/snowflake/client_test.py,sha256=R_9uanPhQH_6oYhFd-urQsl_9AXqy3BbDTOwcL_GUC4,1434
|
|
238
239
|
castor_extractor/warehouse/snowflake/extract.py,sha256=P2mBYuxus8GlgOxvrGdtXtfIQSa5jhjDegm1lS5pQM8,2443
|
|
239
240
|
castor_extractor/warehouse/snowflake/queries/.sqlfluff,sha256=vttrwcr64JVIuvc7WIg9C54cbOkjg_VjXNR7YnTGOPE,31
|
|
@@ -259,7 +260,7 @@ castor_extractor/warehouse/synapse/queries/schema.sql,sha256=aX9xNrBD_ydwl-znGSF
|
|
|
259
260
|
castor_extractor/warehouse/synapse/queries/table.sql,sha256=mCE8bR1Vb7j7SwZW2gafcXidQ2fo1HwxcybA8wP2Kfs,1049
|
|
260
261
|
castor_extractor/warehouse/synapse/queries/user.sql,sha256=sTb_SS7Zj3AXW1SggKPLNMCd0qoTpL7XI_BJRMaEpBg,67
|
|
261
262
|
castor_extractor/warehouse/synapse/queries/view_ddl.sql,sha256=3EVbp5_yTgdByHFIPLHmnoOnqqLE77SrjAwFDvu4e54,249
|
|
262
|
-
castor_extractor-0.3.
|
|
263
|
-
castor_extractor-0.3.
|
|
264
|
-
castor_extractor-0.3.
|
|
265
|
-
castor_extractor-0.3.
|
|
263
|
+
castor_extractor-0.3.7.dist-info/entry_points.txt,sha256=kwmxu6k71-dgEuW0G5zD7LUcOsBhPCjp0cGtukkH3OA,915
|
|
264
|
+
castor_extractor-0.3.7.dist-info/WHEEL,sha256=vxFmldFsRN_Hx10GDvsdv1wroKq8r5Lzvjp6GZ4OO8c,88
|
|
265
|
+
castor_extractor-0.3.7.dist-info/METADATA,sha256=6-wxQhV8lFFyPbnmekmeigAV-n5oaNdItjxAY6COMB4,6365
|
|
266
|
+
castor_extractor-0.3.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|