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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.7 - 2023-04-28
4
+
5
+ * Warning message to deprecate python < 3.8
6
+
7
+ ## 0.3.6 - 2023-04-24
8
+
9
+ * Update enum keys for Metabase credentials
10
+
3
11
  ## 0.3.5 - 2023-04-07
4
12
 
5
13
  * Extract metadata from successful dbt runs only
@@ -0,0 +1,3 @@
1
+ from castor_extractor.utils import deprecate_python # type: ignore
2
+
3
+ deprecate_python(min_version_supported=(3, 8))
@@ -18,7 +18,7 @@ def main():
18
18
  args = parser.parse_args()
19
19
 
20
20
  client = metabase.ApiClient(
21
- base_url=args.base_url, username=args.username, password=args.password
21
+ base_url=args.base_url, user=args.username, password=args.password
22
22
  )
23
23
 
24
24
  metabase.extract_all(
@@ -31,7 +31,7 @@ def main():
31
31
  port=args.port,
32
32
  database=args.database,
33
33
  schema=args.schema,
34
- username=args.username,
34
+ user=args.username,
35
35
  password=args.password,
36
36
  encryption_secret_key=args.encryption_secret_key,
37
37
  )
@@ -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".format(str(k), str(v))
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
- for row in csv.DictReader(csvfile):
17
- yield row
16
+ yield from csv.DictReader(csvfile)
18
17
 
19
18
 
20
19
  def _user_template() -> FileTemplate:
@@ -11,4 +11,4 @@ def test__path():
11
11
  file_path = "filename"
12
12
 
13
13
  path = _path(source_id, file_type, file_path)
14
- assert path == "visualization-{}/{}".format(source_id, file_path)
14
+ assert path == f"visualization-{source_id}/{file_path}"
@@ -1,5 +1,6 @@
1
1
  from .collection import group_by
2
2
  from .constants import OUTPUT_DIR
3
+ from .deprecate import deprecate_python
3
4
  from .env import from_env
4
5
  from .files import explode, search_files
5
6
  from .formatter import to_string_array
@@ -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
 
@@ -67,5 +67,5 @@ class LocalStorage(AbstractStorage):
67
67
 
68
68
  def get(self, name: str) -> Iterator[dict]:
69
69
  path = self.path(name)
70
- with open(path) as file:
70
+ with open(path, "r") as file:
71
71
  return self._formatter.deserialize(StringIO(file.read()))
@@ -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
- username=get_value(CredentialsApiKey.USERNAME, kwargs),
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.username,
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
- USERNAME = "username"
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.USERNAME: "CASTOR_METABASE_API_USERNAME",
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, username: str, password: str):
33
+ def __init__(self, base_url: str, user: str, password: str):
34
34
  self.base_url = base_url
35
- self.username = username
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.USERNAME)
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
- username=get_value(CredentialsDbKey.USERNAME, kwargs),
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
- USERNAME = "username"
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.USERNAME: "CASTOR_METABASE_DB_USERNAME",
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
- username: str,
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.username = username
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.USERNAME,
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 set(
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 set((ds.project, ds.dataset_id) for ds in self._list_datasets())
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: castor-extractor
3
- Version: 0.3.5
3
+ Version: 0.3.7
4
4
  Summary: Extract your metadata assets.
5
5
  Home-page: https://www.castordoc.com/
6
6
  License: EULA
@@ -1,12 +1,12 @@
1
- CHANGELOG.md,sha256=DIidPXNKp9icL0ZTvm7mnNSGno2190ncEFar6BoR0Is,4796
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=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
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=Urnnz6_Io92Tt0li260a-DJ8uOSw4hEPtZaL3BuweK8,765
9
- castor_extractor/commands/extract_metabase_db.py,sha256=Pjy254rQZSGAqWtH0gykgky18cyTKKilyHMI3v_ttvo,1239
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=ZqVrgdKigvIe3ojDM4kePJfH4MDg_-y2LOhjDwcPxP8,6547
25
- castor_extractor/file_checker/file_test.py,sha256=JMrznwiV6DgYk6fOIQm2iQSLupXe1jIPPnXlEYGXg4A,2105
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=4DZJa3kzwGqdTY57GUD_UjWetOAAyLuVQvkhTCPuBwM,339
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=Z455aM-LAI4dXl2fT0DfyVZFvYXGH7z0T1TCmKxit44,878
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=rFUFc1lI-VO1qPnxknCAnCxrrQJ_2AERQYf_I8D3wPw,1538
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=ge9Gov50kFiemMMXAvgBvs4OHNkQTvAJCfRSU_DI5hw,2087
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=jxey0PMl9vho4_jmt_HI6Ijwrthr98E441CJXT1LoxE,2081
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=R_N2mtIxdHsvAwvuKBcfmKuvX0xxtC1-_lKDbi5psl8,5621
94
- castor_extractor/visualization/metabase/client/api/credentials.py,sha256=GEUctvcdyGMPncG8avU_KywLBTl1gbft27saV-r3iLA,1362
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=CZApMWnhQKClPw96n6zkHBivsuoHjJvjboWn8NOmemg,4103
97
- castor_extractor/visualization/metabase/client/db/credentials.py,sha256=uW9-xCm6dnmB6UMGm6cReWpe0oz05YBfA1h4blma_ow,1891
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=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
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=7wdI0HGI8KhK82K8DIYTzgcvaswB5dtIOS3qtHavCmQ,3131
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=ONkr3AIdfBMebCX9cRF9tG5YlYjiqnRNF5egSHW1czg,2795
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=BLoUaghXMKd64zOFojz7rgrrEYN2UDG4Z8iR6-P5EJk,4127
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.5.dist-info/entry_points.txt,sha256=kwmxu6k71-dgEuW0G5zD7LUcOsBhPCjp0cGtukkH3OA,915
263
- castor_extractor-0.3.5.dist-info/WHEEL,sha256=vxFmldFsRN_Hx10GDvsdv1wroKq8r5Lzvjp6GZ4OO8c,88
264
- castor_extractor-0.3.5.dist-info/METADATA,sha256=UjUUD5Ule0Pd-WganeadVraVcdTqtlLnWSt5TsbN8PU,6365
265
- castor_extractor-0.3.5.dist-info/RECORD,,
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,,