castor-extractor 0.16.1__py3-none-any.whl → 0.16.4__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 +12 -0
- castor_extractor/commands/extract_databricks.py +3 -0
- castor_extractor/commands/extract_salesforce.py +43 -0
- castor_extractor/commands/extract_salesforce_reporting.py +6 -6
- castor_extractor/utils/client/api.py +36 -27
- castor_extractor/utils/salesforce/__init__.py +3 -0
- castor_extractor/utils/salesforce/client.py +84 -0
- castor_extractor/utils/salesforce/client_test.py +21 -0
- castor_extractor/utils/salesforce/constants.py +13 -0
- castor_extractor/utils/salesforce/credentials.py +65 -0
- castor_extractor/{visualization/salesforce_reporting/client → utils/salesforce}/credentials_test.py +3 -2
- castor_extractor/visualization/domo/client/client.py +1 -1
- castor_extractor/visualization/powerbi/client/constants.py +3 -3
- castor_extractor/visualization/powerbi/client/rest.py +14 -8
- castor_extractor/visualization/powerbi/client/rest_test.py +61 -27
- castor_extractor/visualization/salesforce_reporting/__init__.py +1 -2
- castor_extractor/visualization/salesforce_reporting/client/__init__.py +1 -2
- castor_extractor/visualization/salesforce_reporting/client/rest.py +7 -90
- castor_extractor/visualization/salesforce_reporting/extract.py +10 -8
- castor_extractor/visualization/tableau/assets.py +5 -0
- castor_extractor/visualization/tableau/client/client.py +10 -0
- castor_extractor/visualization/tableau/gql_fields.py +30 -9
- castor_extractor/warehouse/databricks/client.py +20 -3
- castor_extractor/warehouse/databricks/client_test.py +14 -0
- castor_extractor/warehouse/databricks/credentials.py +1 -4
- castor_extractor/warehouse/databricks/extract.py +3 -2
- castor_extractor/warehouse/databricks/format.py +5 -4
- castor_extractor/warehouse/salesforce/__init__.py +6 -0
- castor_extractor/warehouse/salesforce/client.py +112 -0
- castor_extractor/warehouse/salesforce/constants.py +2 -0
- castor_extractor/warehouse/salesforce/extract.py +111 -0
- castor_extractor/warehouse/salesforce/format.py +67 -0
- castor_extractor/warehouse/salesforce/format_test.py +32 -0
- castor_extractor/warehouse/salesforce/soql.py +45 -0
- castor_extractor-0.16.4.dist-info/LICENCE +86 -0
- {castor_extractor-0.16.1.dist-info → castor_extractor-0.16.4.dist-info}/METADATA +2 -3
- {castor_extractor-0.16.1.dist-info → castor_extractor-0.16.4.dist-info}/RECORD +39 -27
- {castor_extractor-0.16.1.dist-info → castor_extractor-0.16.4.dist-info}/WHEEL +1 -1
- {castor_extractor-0.16.1.dist-info → castor_extractor-0.16.4.dist-info}/entry_points.txt +2 -1
- castor_extractor/visualization/salesforce_reporting/client/constants.py +0 -2
- castor_extractor/visualization/salesforce_reporting/client/credentials.py +0 -33
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
from typing import Any, Dict, List
|
|
2
|
+
|
|
3
|
+
from .constants import SCHEMA_NAME
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def _clean(raw: str) -> str:
|
|
7
|
+
return raw.strip('"')
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _field_description(field: Dict[str, Any]) -> str:
|
|
11
|
+
context: Dict[str, str] = {}
|
|
12
|
+
|
|
13
|
+
field_definition: Dict[str, str] = field.get("FieldDefinition") or {}
|
|
14
|
+
if description := field_definition.get("Description"):
|
|
15
|
+
context["Description"] = _clean(description)
|
|
16
|
+
if help_text := field.get("InlineHelpText"):
|
|
17
|
+
context["Help Text"] = _clean(help_text)
|
|
18
|
+
if compliance_group := field_definition.get("ComplianceGroup"):
|
|
19
|
+
context["Compliance Categorization"] = _clean(compliance_group)
|
|
20
|
+
if security_level := field_definition.get("SecurityClassification"):
|
|
21
|
+
context["Data Sensitivity Level"] = _clean(security_level)
|
|
22
|
+
|
|
23
|
+
return "\n".join([f"- {k}: {v}" for k, v in context.items()])
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _to_column_payload(field: dict, position: int, table_name: str) -> dict:
|
|
27
|
+
field_name = field["QualifiedApiName"]
|
|
28
|
+
return {
|
|
29
|
+
"id": f"{table_name}.{field_name}",
|
|
30
|
+
"table_id": table_name,
|
|
31
|
+
"column_name": field_name,
|
|
32
|
+
"description": _field_description(field),
|
|
33
|
+
"data_type": field.get("DataType"),
|
|
34
|
+
"ordinal_position": position,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _to_table_payload(table: dict) -> dict:
|
|
39
|
+
return {
|
|
40
|
+
"id": table["QualifiedApiName"],
|
|
41
|
+
"schema_id": SCHEMA_NAME,
|
|
42
|
+
"table_name": table["QualifiedApiName"],
|
|
43
|
+
"description": "",
|
|
44
|
+
"tags": [],
|
|
45
|
+
"type": "TABLE",
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class SalesforceFormatter:
|
|
50
|
+
"""
|
|
51
|
+
Helper functions that format the response in the format to be exported as
|
|
52
|
+
csv.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
@staticmethod
|
|
56
|
+
def tables(sobjects: List[dict]) -> List[dict]:
|
|
57
|
+
"""formats the raw list of sobjects to tables"""
|
|
58
|
+
return [_to_table_payload(s) for s in sobjects]
|
|
59
|
+
|
|
60
|
+
@staticmethod
|
|
61
|
+
def columns(sobject_fields: Dict[str, List[dict]]) -> List[dict]:
|
|
62
|
+
"""formats the raw list of sobject fields to columns"""
|
|
63
|
+
return [
|
|
64
|
+
_to_column_payload(field, idx, table_name)
|
|
65
|
+
for table_name, fields in sobject_fields.items()
|
|
66
|
+
for idx, field in enumerate(fields)
|
|
67
|
+
]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from .format import _field_description
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test__field_description():
|
|
5
|
+
|
|
6
|
+
field = {}
|
|
7
|
+
assert _field_description(field) == ""
|
|
8
|
+
|
|
9
|
+
definition = {}
|
|
10
|
+
field = {"FieldDefinition": definition}
|
|
11
|
+
assert _field_description(field) == ""
|
|
12
|
+
|
|
13
|
+
definition.update({"Description": "foo"})
|
|
14
|
+
assert "foo" in _field_description(field)
|
|
15
|
+
|
|
16
|
+
field.update({"InlineHelpText": "bar"})
|
|
17
|
+
assert "bar" in _field_description(field)
|
|
18
|
+
|
|
19
|
+
definition.update({"ComplianceGroup": "bim"})
|
|
20
|
+
assert "bim" in _field_description(field)
|
|
21
|
+
|
|
22
|
+
definition.update({"SecurityClassification": "bam"})
|
|
23
|
+
description = _field_description(field)
|
|
24
|
+
|
|
25
|
+
assert "bam" in description
|
|
26
|
+
expected = (
|
|
27
|
+
"- Description: foo\n"
|
|
28
|
+
"- Help Text: bar\n"
|
|
29
|
+
"- Compliance Categorization: bim\n"
|
|
30
|
+
"- Data Sensitivity Level: bam"
|
|
31
|
+
)
|
|
32
|
+
assert description == expected
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
SOBJECTS_QUERY_TPL = """
|
|
2
|
+
SELECT
|
|
3
|
+
DeploymentStatus,
|
|
4
|
+
DeveloperName,
|
|
5
|
+
DurableId,
|
|
6
|
+
ExternalSharingModel,
|
|
7
|
+
InternalSharingModel,
|
|
8
|
+
Label,
|
|
9
|
+
PluralLabel,
|
|
10
|
+
QualifiedApiName
|
|
11
|
+
FROM EntityDefinition
|
|
12
|
+
WHERE DurableId > '{start_durable_id}'
|
|
13
|
+
ORDER BY DurableId
|
|
14
|
+
LIMIT {limit}
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
SOBJECT_FIELDS_QUERY_TPL = """
|
|
19
|
+
SELECT
|
|
20
|
+
DataType,
|
|
21
|
+
DeveloperName,
|
|
22
|
+
Digits,
|
|
23
|
+
FieldDefinition.BusinessOwnerId,
|
|
24
|
+
FieldDefinition.ComplianceGroup,
|
|
25
|
+
FieldDefinition.DataType,
|
|
26
|
+
FieldDefinition.Description,
|
|
27
|
+
FieldDefinition.IsIndexed,
|
|
28
|
+
FieldDefinition.LastModifiedBy.Username,
|
|
29
|
+
FieldDefinition.LastModifiedDate,
|
|
30
|
+
FieldDefinition.SecurityClassification,
|
|
31
|
+
InlineHelpText,
|
|
32
|
+
IsComponent,
|
|
33
|
+
IsCompound,
|
|
34
|
+
IsNillable,
|
|
35
|
+
IsUnique,
|
|
36
|
+
Label,
|
|
37
|
+
Length,
|
|
38
|
+
Precision,
|
|
39
|
+
QualifiedApiName,
|
|
40
|
+
ReferenceTo,
|
|
41
|
+
RelationshipName,
|
|
42
|
+
Scale
|
|
43
|
+
FROM EntityParticle
|
|
44
|
+
WHERE EntityDefinitionId='{entity_definition_id}'
|
|
45
|
+
"""
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# End-User License Agreement (EULA) of "Castor Extractor"
|
|
2
|
+
|
|
3
|
+
This End-User License Agreement ("EULA") is a legal agreement between you and Castor. Our EULA was created by EULA Template (https://www.eulatemplate.com) for "Castor Extractor".
|
|
4
|
+
|
|
5
|
+
This EULA agreement governs your acquisition and use of our "Castor Extractor" software ("Software") directly from Castor or indirectly through a Castor authorized reseller or distributor (a "Reseller").
|
|
6
|
+
|
|
7
|
+
Please read this EULA agreement carefully before completing the installation process and using the "Castor Extractor" software. It provides a license to use the "Castor Extractor" software and contains warranty information and liability disclaimers.
|
|
8
|
+
|
|
9
|
+
If you register for a free trial of the "Castor Extractor" software, this EULA agreement will also govern that trial. By clicking "accept" or installing and/or using the "Castor Extractor" software, you are confirming your acceptance of the Software and agreeing to become bound by the terms of this EULA agreement.
|
|
10
|
+
|
|
11
|
+
If you are entering into this EULA agreement on behalf of a company or other legal entity, you represent that you have the authority to bind such entity and its affiliates to these terms and conditions. If you do not have such authority or if you do not agree with the terms and conditions of this EULA agreement, do not install or use the Software, and you must not accept this EULA agreement.
|
|
12
|
+
|
|
13
|
+
This EULA agreement shall apply only to the Software supplied by Castor herewith regardless of whether other software is referred to or described herein. The terms also apply to any Castor updates, supplements, Internet-based services, and support services for the Software, unless other terms accompany those items on delivery. If so, those terms apply.
|
|
14
|
+
|
|
15
|
+
## License Grant
|
|
16
|
+
|
|
17
|
+
Castor hereby grants you a personal, non-transferable, non-exclusive licence to use the "Castor Extractor" software on your devices in accordance with the terms of this EULA agreement.
|
|
18
|
+
|
|
19
|
+
You are permitted to load the "Castor Extractor" software (for example a PC, laptop, mobile or tablet) under your control. You are responsible for ensuring your device meets the minimum requirements of the "Castor Extractor" software.
|
|
20
|
+
|
|
21
|
+
You are not permitted to:
|
|
22
|
+
|
|
23
|
+
- Edit, alter, modify, adapt, translate or otherwise change the whole or any part of the Software nor permit the whole or any part of the Software to be combined with or become incorporated in any other software, nor decompile, disassemble or reverse engineer the Software or attempt to do any such things
|
|
24
|
+
- Reproduce, copy, distribute, resell or otherwise use the Software for any commercial purpose
|
|
25
|
+
- Allow any third party to use the Software on behalf of or for the benefit of any third party
|
|
26
|
+
- Use the Software in any way which breaches any applicable local, national or international law
|
|
27
|
+
- use the Software for any purpose that Castor considers is a breach of this EULA agreement
|
|
28
|
+
|
|
29
|
+
## Intellectual Property and Ownership
|
|
30
|
+
|
|
31
|
+
Castor shall at all times retain ownership of the Software as originally downloaded by you and all subsequent downloads of the Software by you. The Software (and the copyright, and other intellectual property rights of whatever nature in the Software, including any modifications made thereto) are and shall remain the property of Castor.
|
|
32
|
+
|
|
33
|
+
Castor reserves the right to grant licences to use the Software to third parties.
|
|
34
|
+
|
|
35
|
+
## Termination
|
|
36
|
+
|
|
37
|
+
This EULA agreement is effective from the date you first use the Software and shall continue until terminated. You may terminate it at any time upon written notice to Castor.
|
|
38
|
+
|
|
39
|
+
It will also terminate immediately if you fail to comply with any term of this EULA agreement. Upon such termination, the licenses granted by this EULA agreement will immediately terminate and you agree to stop all access and use of the Software. The provisions that by their nature continue and survive will survive any termination of this EULA agreement.
|
|
40
|
+
|
|
41
|
+
## Governing Law
|
|
42
|
+
|
|
43
|
+
This EULA agreement, and any dispute arising out of or in connection with this EULA agreement, shall be governed by and construed in accordance with the laws of France.
|
|
44
|
+
# End-User License Agreement (EULA) of "Castor Extractor"
|
|
45
|
+
|
|
46
|
+
This End-User License Agreement ("EULA") is a legal agreement between you and Castor. Our EULA was created by EULA Template (https://www.eulatemplate.com) for "Castor Extractor".
|
|
47
|
+
|
|
48
|
+
This EULA agreement governs your acquisition and use of our "Castor Extractor" software ("Software") directly from Castor or indirectly through a Castor authorized reseller or distributor (a "Reseller").
|
|
49
|
+
|
|
50
|
+
Please read this EULA agreement carefully before completing the installation process and using the "Castor Extractor" software. It provides a license to use the "Castor Extractor" software and contains warranty information and liability disclaimers.
|
|
51
|
+
|
|
52
|
+
If you register for a free trial of the "Castor Extractor" software, this EULA agreement will also govern that trial. By clicking "accept" or installing and/or using the "Castor Extractor" software, you are confirming your acceptance of the Software and agreeing to become bound by the terms of this EULA agreement.
|
|
53
|
+
|
|
54
|
+
If you are entering into this EULA agreement on behalf of a company or other legal entity, you represent that you have the authority to bind such entity and its affiliates to these terms and conditions. If you do not have such authority or if you do not agree with the terms and conditions of this EULA agreement, do not install or use the Software, and you must not accept this EULA agreement.
|
|
55
|
+
|
|
56
|
+
This EULA agreement shall apply only to the Software supplied by Castor herewith regardless of whether other software is referred to or described herein. The terms also apply to any Castor updates, supplements, Internet-based services, and support services for the Software, unless other terms accompany those items on delivery. If so, those terms apply.
|
|
57
|
+
|
|
58
|
+
## License Grant
|
|
59
|
+
|
|
60
|
+
Castor hereby grants you a personal, non-transferable, non-exclusive licence to use the "Castor Extractor" software on your devices in accordance with the terms of this EULA agreement.
|
|
61
|
+
|
|
62
|
+
You are permitted to load the "Castor Extractor" software (for example a PC, laptop, mobile or tablet) under your control. You are responsible for ensuring your device meets the minimum requirements of the "Castor Extractor" software.
|
|
63
|
+
|
|
64
|
+
You are not permitted to:
|
|
65
|
+
|
|
66
|
+
- Edit, alter, modify, adapt, translate or otherwise change the whole or any part of the Software nor permit the whole or any part of the Software to be combined with or become incorporated in any other software, nor decompile, disassemble or reverse engineer the Software or attempt to do any such things
|
|
67
|
+
- Reproduce, copy, distribute, resell or otherwise use the Software for any commercial purpose
|
|
68
|
+
- Allow any third party to use the Software on behalf of or for the benefit of any third party
|
|
69
|
+
- Use the Software in any way which breaches any applicable local, national or international law
|
|
70
|
+
- use the Software for any purpose that Castor considers is a breach of this EULA agreement
|
|
71
|
+
|
|
72
|
+
## Intellectual Property and Ownership
|
|
73
|
+
|
|
74
|
+
Castor shall at all times retain ownership of the Software as originally downloaded by you and all subsequent downloads of the Software by you. The Software (and the copyright, and other intellectual property rights of whatever nature in the Software, including any modifications made thereto) are and shall remain the property of Castor.
|
|
75
|
+
|
|
76
|
+
Castor reserves the right to grant licences to use the Software to third parties.
|
|
77
|
+
|
|
78
|
+
## Termination
|
|
79
|
+
|
|
80
|
+
This EULA agreement is effective from the date you first use the Software and shall continue until terminated. You may terminate it at any time upon written notice to Castor.
|
|
81
|
+
|
|
82
|
+
It will also terminate immediately if you fail to comply with any term of this EULA agreement. Upon such termination, the licenses granted by this EULA agreement will immediately terminate and you agree to stop all access and use of the Software. The provisions that by their nature continue and survive will survive any termination of this EULA agreement.
|
|
83
|
+
|
|
84
|
+
## Governing Law
|
|
85
|
+
|
|
86
|
+
This EULA agreement, and any dispute arising out of or in connection with this EULA agreement, shall be governed by and construed in accordance with the laws of France.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: castor-extractor
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.4
|
|
4
4
|
Summary: Extract your metadata assets.
|
|
5
5
|
Home-page: https://www.castordoc.com/
|
|
6
6
|
License: EULA
|
|
@@ -27,10 +27,9 @@ Provides-Extra: redshift
|
|
|
27
27
|
Provides-Extra: snowflake
|
|
28
28
|
Provides-Extra: sqlserver
|
|
29
29
|
Provides-Extra: tableau
|
|
30
|
-
Requires-Dist: click (>=8.1,<8.2)
|
|
31
30
|
Requires-Dist: cryptography (>=41.0.5) ; extra == "snowflake"
|
|
32
31
|
Requires-Dist: google-api-core (>=2.1.1,<3.0.0)
|
|
33
|
-
Requires-Dist: google-auth (>=
|
|
32
|
+
Requires-Dist: google-auth (>=2,<3)
|
|
34
33
|
Requires-Dist: google-cloud-core (>=2.1.0,<3.0.0)
|
|
35
34
|
Requires-Dist: google-cloud-storage (>=2,<3)
|
|
36
35
|
Requires-Dist: google-resumable-media (>=2.0.3,<3.0.0)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
CHANGELOG.md,sha256=
|
|
1
|
+
CHANGELOG.md,sha256=6ApRuFb6ZxwvpMFyBRJAU6L7teZ01KK2tD0pXFvsYdw,10026
|
|
2
2
|
Dockerfile,sha256=HcX5z8OpeSvkScQsN-Y7CNMUig_UB6vTMDl7uqzuLGE,303
|
|
3
3
|
LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
|
|
4
4
|
README.md,sha256=uF6PXm9ocPITlKVSh9afTakHmpLx3TvawLf-CbMP3wM,3578
|
|
5
5
|
castor_extractor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
6
|
castor_extractor/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
castor_extractor/commands/extract_bigquery.py,sha256=dU4OiYO1V0n32orvZnMh1_xtFKF_VxHNXcVsH3otY-g,1269
|
|
8
|
-
castor_extractor/commands/extract_databricks.py,sha256=
|
|
8
|
+
castor_extractor/commands/extract_databricks.py,sha256=SVKyoa-BBUQAM6HRHf1Wdg9-tpICic2yyvXQwHcNBhA,1264
|
|
9
9
|
castor_extractor/commands/extract_domo.py,sha256=lwJ7XeYOeLMF2plf5PK3cL56N9n2yjcDsyRM6UFwKTM,1208
|
|
10
10
|
castor_extractor/commands/extract_looker.py,sha256=gwjIQPOHrXevgU_o2l8vDHHQT8Sb-mGdwcceb6wJJbg,1483
|
|
11
11
|
castor_extractor/commands/extract_metabase_api.py,sha256=VPyEKO2VFXzk_OsbQnDhObE9siuBfoegechCZYPZi2k,778
|
|
@@ -16,7 +16,8 @@ castor_extractor/commands/extract_postgres.py,sha256=pX0RnCPi4nw6QQ6wiAuZ_Xt3ZbD
|
|
|
16
16
|
castor_extractor/commands/extract_powerbi.py,sha256=e6MXDNOafdp0w4ZtOnE5z5o_CxvaodUbbQFk__pDiM4,875
|
|
17
17
|
castor_extractor/commands/extract_qlik.py,sha256=mSeyGOprTyBExes-lzp___7tgBS1KeyTVpwKAqMpkiw,989
|
|
18
18
|
castor_extractor/commands/extract_redshift.py,sha256=bdLp7d7ImZoKCkWc3f3NXF1imIzMVT43_KPI-x4UVac,1155
|
|
19
|
-
castor_extractor/commands/
|
|
19
|
+
castor_extractor/commands/extract_salesforce.py,sha256=s2o799ePjQFYsVwZbrGEflzOIwJKtxUMb9pcF4-K90Y,1400
|
|
20
|
+
castor_extractor/commands/extract_salesforce_reporting.py,sha256=rmAo--dl_m2x7TtJ29w1PfsKt9tQDZocTdvwTqj-fnI,1146
|
|
20
21
|
castor_extractor/commands/extract_sigma.py,sha256=agwfKj55C81-kect3K6xSJVBv3TDuPT6fGWSTytkQ2o,703
|
|
21
22
|
castor_extractor/commands/extract_snowflake.py,sha256=vYiruxRoo--GeMemOGsSE1w9kcKTh_y4E165HtMVzkM,1982
|
|
22
23
|
castor_extractor/commands/extract_sqlserver.py,sha256=lwhbcNChaXHZgMgSOch3faVr7WJw-sDU6GHl3lzBt_0,1141
|
|
@@ -46,7 +47,7 @@ castor_extractor/uploader/utils.py,sha256=NCe0tkB28BVhqzOaDhDjaSfODjjcPWB17X6chn
|
|
|
46
47
|
castor_extractor/utils/__init__.py,sha256=cZbvEJ4G2IcJR2BzHwi3oOwDLqJsBx0J9gD71lWE1BQ,1149
|
|
47
48
|
castor_extractor/utils/client/__init__.py,sha256=CRE-xJKm6fVV9dB8ljzB5YoOxX4I1sCD1KSgqs3Y8_Y,161
|
|
48
49
|
castor_extractor/utils/client/abstract.py,sha256=aA5Qcb9TwWDSMq8WpXbGkOB20hehwX2VTpqQAwV76wk,2048
|
|
49
|
-
castor_extractor/utils/client/api.py,sha256=
|
|
50
|
+
castor_extractor/utils/client/api.py,sha256=tHa7eC11sS_eOCXhlnvUa2haRfOLENmjKgjB09Ijt0s,1664
|
|
50
51
|
castor_extractor/utils/client/api_test.py,sha256=NSMdXg1FLc37erqHp2FZsIsogWVv6lFSs7rDXHikr-E,542
|
|
51
52
|
castor_extractor/utils/client/postgres.py,sha256=n6ulaT222WWPY0_6qAZ0MHF0m91HtI9mMqL71nyygo0,866
|
|
52
53
|
castor_extractor/utils/client/query.py,sha256=O6D5EjD1KmBlwa786Uw4D4kzxx97_HH50xIIeSWt0B8,205
|
|
@@ -82,6 +83,12 @@ castor_extractor/utils/retry.py,sha256=vYdJMiM-Nr82H1MuD7_KZdqbFz98ffQGqJ4Owbr6m
|
|
|
82
83
|
castor_extractor/utils/retry_test.py,sha256=nsMttlmyKygVcffX3Hay8U2S1BspkGPiCmzIXPpLKyk,2230
|
|
83
84
|
castor_extractor/utils/safe.py,sha256=jpfIimwdBSVUvU2DPFrhqpKC_DSYwxQqd08MlIkSODY,1967
|
|
84
85
|
castor_extractor/utils/safe_test.py,sha256=IHN1Z761tYMFslYC-2HAfkXmFPh4LYSqNLs4QZwykjk,2160
|
|
86
|
+
castor_extractor/utils/salesforce/__init__.py,sha256=VGD4vd1Se79z2PAaVCvCSL3yhgWlhQFaVDLZ5aERug0,132
|
|
87
|
+
castor_extractor/utils/salesforce/client.py,sha256=Mt9yykAPROFgme5eDqoZQv4u85hxcUoG-tmKFPwLibo,2856
|
|
88
|
+
castor_extractor/utils/salesforce/client_test.py,sha256=s6UTogjC36jrJOnYA-gFuyTQsvROCt9y_eoD2O41xCg,682
|
|
89
|
+
castor_extractor/utils/salesforce/constants.py,sha256=5sph6dbTCp0mAGWP24WTpC1wsIqeG8yI8-BsKrmV_wA,335
|
|
90
|
+
castor_extractor/utils/salesforce/credentials.py,sha256=Wwb-_BlbFBJUl3dhXz72IIqcCfj1F3Zj3JoYr3FYk0A,2045
|
|
91
|
+
castor_extractor/utils/salesforce/credentials_test.py,sha256=FQRyNk2Jsh6KtYiW20oL43CVnGjXLcAjdFATkE7jK0s,586
|
|
85
92
|
castor_extractor/utils/store.py,sha256=D_pVaPsu1MKAJC0K47O_vYTs-Afl6oejravAJdvjmGc,2040
|
|
86
93
|
castor_extractor/utils/string.py,sha256=aW6bbjqEGnh9kT5KZBnMlV6fhdgOJ0ENCkCTDon1xA0,2377
|
|
87
94
|
castor_extractor/utils/string_test.py,sha256=OmRVCJUXMcCTwY-QJDhUViYpxkvQQgNRJLCaXY0iUnk,2535
|
|
@@ -95,7 +102,7 @@ castor_extractor/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
|
|
|
95
102
|
castor_extractor/visualization/domo/__init__.py,sha256=_mAYVfoVLizfLGF_f6ZiwBhdPpvoJY_diySf33dt3Jo,127
|
|
96
103
|
castor_extractor/visualization/domo/assets.py,sha256=bK1urFR2tnlWkVkkhR32mAKMoKbESNlop-CNGx-65PY,206
|
|
97
104
|
castor_extractor/visualization/domo/client/__init__.py,sha256=UDszV3IXNC9Wp_j55NZ-6ey2INo0TYtAg2QNIJOjglE,88
|
|
98
|
-
castor_extractor/visualization/domo/client/client.py,sha256=
|
|
105
|
+
castor_extractor/visualization/domo/client/client.py,sha256=ZJJh0ZWuh1X4_uW6FEcZUUAxgRRVFh9vWUtS5aJly4Q,11075
|
|
99
106
|
castor_extractor/visualization/domo/client/client_test.py,sha256=qGGmpJHnm-o2Ybko5J31nSM9xev5YS0yXjVNM9E92b4,2378
|
|
100
107
|
castor_extractor/visualization/domo/client/credentials.py,sha256=CksQ9W9X6IGjTlYN0okwGAmURMRJKAjctxODAvAJUAo,1148
|
|
101
108
|
castor_extractor/visualization/domo/client/endpoints.py,sha256=_D_gq99d77am4KHeRCkITM_XyYuAOscHagC7t3adscY,2019
|
|
@@ -157,11 +164,11 @@ castor_extractor/visualization/mode/extract.py,sha256=ZmIOmVZ8_fo4qXe15G5Sis_IzZ
|
|
|
157
164
|
castor_extractor/visualization/powerbi/__init__.py,sha256=XSr_fNSsR-EPuGOFo7Ai1r7SttiN7bzD3jyYRFXUWgQ,106
|
|
158
165
|
castor_extractor/visualization/powerbi/assets.py,sha256=SASUjxtoOMag3NAlZfhpCy0sLap7WfENEMaEZuBrw6o,801
|
|
159
166
|
castor_extractor/visualization/powerbi/client/__init__.py,sha256=hU8LE1gV9RttTGJiwVpEa9xDLR4IMkUdshQGthg4zzE,62
|
|
160
|
-
castor_extractor/visualization/powerbi/client/constants.py,sha256=
|
|
167
|
+
castor_extractor/visualization/powerbi/client/constants.py,sha256=gpcWE3Ov2xvZAZCqOsvzLtd3cWmfZBeQWvLnnt7-gac,2356
|
|
161
168
|
castor_extractor/visualization/powerbi/client/credentials.py,sha256=iiYaCa2FM1PBHv4YA0Z1LgdX9gnaQhvHGD0LQb7Tcxw,465
|
|
162
169
|
castor_extractor/visualization/powerbi/client/credentials_test.py,sha256=23ZlLCvsPB_fmqntnzULkv0mMRE8NCzBXtWS6wupJn4,787
|
|
163
|
-
castor_extractor/visualization/powerbi/client/rest.py,sha256=
|
|
164
|
-
castor_extractor/visualization/powerbi/client/rest_test.py,sha256=
|
|
170
|
+
castor_extractor/visualization/powerbi/client/rest.py,sha256=_MhJYa9dKla4bMv01GZLFdAMrr6gwHdSWuc_D63gMF0,9949
|
|
171
|
+
castor_extractor/visualization/powerbi/client/rest_test.py,sha256=yAfsksL-4SZ6gxRjAWGqIGUAX5Gz44j56r-jRlPGDro,8514
|
|
165
172
|
castor_extractor/visualization/powerbi/client/utils.py,sha256=0RcoWcKOdvIGH4f3lYDvufmiMo4tr_ABFlITSrvXjTs,541
|
|
166
173
|
castor_extractor/visualization/powerbi/client/utils_test.py,sha256=ULHL2JLrcv0xjW2r7QF_ce2OaGeeSzajkMDywJ8ZdVA,719
|
|
167
174
|
castor_extractor/visualization/powerbi/extract.py,sha256=0rTvI5CiWTpoJx6bGdpShdl4eMBWjuWbRpKvisuLPbw,1328
|
|
@@ -182,15 +189,12 @@ castor_extractor/visualization/qlik/client/rest.py,sha256=EkHEs3_Vrmy0Ex5b9M_klm
|
|
|
182
189
|
castor_extractor/visualization/qlik/client/rest_test.py,sha256=Z2gBTokUVv-JapBtrY2nZDJzBtOusRq6_lJutVvzqG8,1684
|
|
183
190
|
castor_extractor/visualization/qlik/constants.py,sha256=Pbd1SH3_VI_yEhoDx4PIXBUup-MqXUFjxDkDRr2V4J8,95
|
|
184
191
|
castor_extractor/visualization/qlik/extract.py,sha256=1ulrirDzoKEdsWxztR6MHcUAE8CiEMx75esdUE7PAmY,2397
|
|
185
|
-
castor_extractor/visualization/salesforce_reporting/__init__.py,sha256=
|
|
192
|
+
castor_extractor/visualization/salesforce_reporting/__init__.py,sha256=MvArD0GKNIpCDvLIYcpKrjMjFLhMyDETK6i3k0Fb6Tk,124
|
|
186
193
|
castor_extractor/visualization/salesforce_reporting/assets.py,sha256=2J-iAmJGGDufOcJUgE47M3-dEcjYXcVyVUNcmHrj79w,271
|
|
187
|
-
castor_extractor/visualization/salesforce_reporting/client/__init__.py,sha256=
|
|
188
|
-
castor_extractor/visualization/salesforce_reporting/client/
|
|
189
|
-
castor_extractor/visualization/salesforce_reporting/client/credentials.py,sha256=gJapeUKs8gZSY_YdzX-j0Iv4vcaBzCTAlXMecO8Kk5k,875
|
|
190
|
-
castor_extractor/visualization/salesforce_reporting/client/credentials_test.py,sha256=2qIYZ8QuuarHz5EZ9bU0sGEOvoDLnN0eiwsvnbtgXXY,567
|
|
191
|
-
castor_extractor/visualization/salesforce_reporting/client/rest.py,sha256=_3wa5-bxKGwaNEwh-KLke3O6lbFWzOUAe1bL8n9hH04,4429
|
|
194
|
+
castor_extractor/visualization/salesforce_reporting/client/__init__.py,sha256=DIA6f_vNJZqT89qVYxg98Le7QeDn2y0Qew03V3J9t9o,44
|
|
195
|
+
castor_extractor/visualization/salesforce_reporting/client/rest.py,sha256=hzaXWLcYt0aAHXK46DbsLmzocjRY1llwrNj8_3TObKs,1849
|
|
192
196
|
castor_extractor/visualization/salesforce_reporting/client/soql.py,sha256=DHTi058UEaZKZnxJVmsCouPfA9Lgr3gFY6vY7NiqyMM,1584
|
|
193
|
-
castor_extractor/visualization/salesforce_reporting/extract.py,sha256=
|
|
197
|
+
castor_extractor/visualization/salesforce_reporting/extract.py,sha256=5QwZwP27uXrFJSf00El7Ku592-9fhmCtTdiUGpNkHZM,1678
|
|
194
198
|
castor_extractor/visualization/sigma/__init__.py,sha256=m98AEysUsVHQAWT6m5nvrtLMs22SDQH9G78-IcUwBoY,130
|
|
195
199
|
castor_extractor/visualization/sigma/assets.py,sha256=JZ1Cpxnml8P3mIJoTUM57hvylB18ErECQXaP5FF63O4,268
|
|
196
200
|
castor_extractor/visualization/sigma/client/__init__.py,sha256=sFqsbcwilIxu75njtSbnAIsNlPdRgB39SAInNUf-nbQ,90
|
|
@@ -202,9 +206,9 @@ castor_extractor/visualization/sigma/client/pagination.py,sha256=EZGMaONTzZ15VIN
|
|
|
202
206
|
castor_extractor/visualization/sigma/constants.py,sha256=6oQKTKNQkHP_9GWvSOKeFaXd3pKJLhn9Mfod4nvOLEs,144
|
|
203
207
|
castor_extractor/visualization/sigma/extract.py,sha256=OgjUsc1o6lPPaO5XHgCrgQelBrqbdemxKggF4JBPBUI,2678
|
|
204
208
|
castor_extractor/visualization/tableau/__init__.py,sha256=hDohrWjkorrX01JMc154aa9vi3ZqBKmA1lkfQtMFfYE,114
|
|
205
|
-
castor_extractor/visualization/tableau/assets.py,sha256=
|
|
209
|
+
castor_extractor/visualization/tableau/assets.py,sha256=mfBUzcBCLyiU9gnTB_6rvtiB5yXSDU99nezhGC__HQo,1270
|
|
206
210
|
castor_extractor/visualization/tableau/client/__init__.py,sha256=FQX1MdxS8Opn3Oyq8eby7suk3ANbLlpzzCPQ3zqvk0I,78
|
|
207
|
-
castor_extractor/visualization/tableau/client/client.py,sha256=
|
|
211
|
+
castor_extractor/visualization/tableau/client/client.py,sha256=YqLumujwaX3XkIGSTQMlpxqg7z3_7rm2Qof1HfSbUcY,7381
|
|
208
212
|
castor_extractor/visualization/tableau/client/client_utils.py,sha256=taTCeK41nbwXTZeWCBbFxfCSlNnEq4Qfaxlle7yJVic,2094
|
|
209
213
|
castor_extractor/visualization/tableau/client/credentials.py,sha256=szq2tM6sOZqtdyHZgPCNUAddETrwTZaDizLqp-aVBEw,3386
|
|
210
214
|
castor_extractor/visualization/tableau/client/project.py,sha256=uLlZ5-eZI_4VxBmEB5d1gWy_X_w6uVt2EKoiX9cJ0UA,812
|
|
@@ -212,7 +216,7 @@ castor_extractor/visualization/tableau/client/safe_mode.py,sha256=MF_PTfR3oAA255
|
|
|
212
216
|
castor_extractor/visualization/tableau/constants.py,sha256=O2CqeviFz122BumNHoJ1N-e1lzyqIHF9OYnGQttg4hg,126
|
|
213
217
|
castor_extractor/visualization/tableau/errors.py,sha256=WWvmnp5pdxFJqanPKeDRADZc0URSPxkJqxDI6bwoifQ,91
|
|
214
218
|
castor_extractor/visualization/tableau/extract.py,sha256=tCa5g1_RyhS7OeeEMhLJReMIYfQCF1cwHt8KbZoHFyI,3040
|
|
215
|
-
castor_extractor/visualization/tableau/gql_fields.py,sha256=
|
|
219
|
+
castor_extractor/visualization/tableau/gql_fields.py,sha256=6Esb54CVd4j0Gw-kdCT4eVjwpPlnRF_GC4oxuNJpuas,5532
|
|
216
220
|
castor_extractor/visualization/tableau/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
217
221
|
castor_extractor/visualization/tableau/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
218
222
|
castor_extractor/visualization/tableau/tests/unit/assets/graphql/metadata/metadata_1_get.json,sha256=4iMvJ_VakDa67xN2ROraAccaz_DDxX6Y5Y1XnTU5F5Y,446
|
|
@@ -262,11 +266,11 @@ castor_extractor/warehouse/bigquery/queries/view_ddl.sql,sha256=obCm-IN9V8_YSZTw
|
|
|
262
266
|
castor_extractor/warehouse/bigquery/query.py,sha256=hrFfjd5jW2oQnZ6ozlkn-gDe6sCIzu5zSX19T9W6fIk,4162
|
|
263
267
|
castor_extractor/warehouse/bigquery/types.py,sha256=LZVWSmE57lOemNbB5hBRyYmDk9bFAU4nbRaJWALl6N8,140
|
|
264
268
|
castor_extractor/warehouse/databricks/__init__.py,sha256=bTvDxjGQGM2J3hOnVhfNmFP1y8DK0tySiD_EXe5_xWE,200
|
|
265
|
-
castor_extractor/warehouse/databricks/client.py,sha256=
|
|
266
|
-
castor_extractor/warehouse/databricks/client_test.py,sha256=
|
|
267
|
-
castor_extractor/warehouse/databricks/credentials.py,sha256=
|
|
268
|
-
castor_extractor/warehouse/databricks/extract.py,sha256
|
|
269
|
-
castor_extractor/warehouse/databricks/format.py,sha256=
|
|
269
|
+
castor_extractor/warehouse/databricks/client.py,sha256=FIqHjlGN5EN2dvcZD2941zPAomOye91JmkgPlxGDk0g,8078
|
|
270
|
+
castor_extractor/warehouse/databricks/client_test.py,sha256=ctOQnUXosuuFjWGJKgkxjUcV4vQUBWt2BQ_f0Tyzqe4,2717
|
|
271
|
+
castor_extractor/warehouse/databricks/credentials.py,sha256=PpGv5_GP320UQjV_gvaxSpOw58AmqSznmjGhGfe6bdU,655
|
|
272
|
+
castor_extractor/warehouse/databricks/extract.py,sha256=-vJhAIxSu1lD_xGl-GXZYTmc5BGu0aXM3l-U0UghREM,5773
|
|
273
|
+
castor_extractor/warehouse/databricks/format.py,sha256=LiPGCTPzL3gQQMMl1v6DvpcTk7BWxZFq03jnHdoYnuU,4968
|
|
270
274
|
castor_extractor/warehouse/databricks/format_test.py,sha256=iPmdJof43fBYL1Sa_fBrCWDQHCHgm7IWCZag1kWkj9E,1970
|
|
271
275
|
castor_extractor/warehouse/databricks/types.py,sha256=T2SyLy9pY_olLtstdC77moPxIiikVsuQLMxh92YMJQo,78
|
|
272
276
|
castor_extractor/warehouse/mysql/__init__.py,sha256=2KFDogo9GNbApHqw3Vm5t_uNmIRjdp76nmP_WQQMfQY,116
|
|
@@ -307,6 +311,13 @@ castor_extractor/warehouse/redshift/queries/table_freshness.sql,sha256=l61_ysmTE
|
|
|
307
311
|
castor_extractor/warehouse/redshift/queries/user.sql,sha256=sEXveJAuNvZacvpI6WfwsX6VavoMb2VqYA32f6Dt-_Y,170
|
|
308
312
|
castor_extractor/warehouse/redshift/queries/view_ddl.sql,sha256=Pkyh_QT6d4rhTeyiVcqw6O8CRl7NEhk2p7eM5YIn5kg,719
|
|
309
313
|
castor_extractor/warehouse/redshift/query.py,sha256=0C81rkt2cpkWrJIxxwALDyqr-49vlqQM04y_N6wwStc,540
|
|
314
|
+
castor_extractor/warehouse/salesforce/__init__.py,sha256=NR4aNea5jeE1xYqeZ_29deeN84CkN0_D_Z7CLQdJvFY,137
|
|
315
|
+
castor_extractor/warehouse/salesforce/client.py,sha256=_XiQJJJfELKGmzuBv8Mr_C0FJ-oLg71KbvpehrGvJ_k,3842
|
|
316
|
+
castor_extractor/warehouse/salesforce/constants.py,sha256=GusduVBCPvwpk_Im6F3bDvXeNQ7hRnCMdIAjIg65RnE,52
|
|
317
|
+
castor_extractor/warehouse/salesforce/extract.py,sha256=ZTb58t7mqhavNvErrnw8M0L4Uu3qJpQEIldymurbgl0,3417
|
|
318
|
+
castor_extractor/warehouse/salesforce/format.py,sha256=_BSj_G6C-kPwRubxSx1WuHg-_nYVQVNgAANqNfXL5RM,2154
|
|
319
|
+
castor_extractor/warehouse/salesforce/format_test.py,sha256=6hy0USZH7-PDQt3oZ9_3Nwlr3eHLkqNEchqIM3bIDrU,858
|
|
320
|
+
castor_extractor/warehouse/salesforce/soql.py,sha256=81lAtPpq7ccmi6o1zkwqLKC1esOfSsfNObdizkfgiSM,1089
|
|
310
321
|
castor_extractor/warehouse/snowflake/__init__.py,sha256=TEGXTyxWp4Tr9gIHb-UFVTRKj6YWmrRtqHruiKSZGiY,174
|
|
311
322
|
castor_extractor/warehouse/snowflake/client.py,sha256=XT0QLVNff_586SDuMe40iu8FCwPDh2uBV5aKc1Ql914,5555
|
|
312
323
|
castor_extractor/warehouse/snowflake/client_test.py,sha256=ihWtOOAQfh8pu5JTr_EWfqefKOVIaJXznACURzaU1Qs,1432
|
|
@@ -346,7 +357,8 @@ castor_extractor/warehouse/synapse/queries/schema.sql,sha256=aX9xNrBD_ydwl-znGSF
|
|
|
346
357
|
castor_extractor/warehouse/synapse/queries/table.sql,sha256=mCE8bR1Vb7j7SwZW2gafcXidQ2fo1HwxcybA8wP2Kfs,1049
|
|
347
358
|
castor_extractor/warehouse/synapse/queries/user.sql,sha256=sTb_SS7Zj3AXW1SggKPLNMCd0qoTpL7XI_BJRMaEpBg,67
|
|
348
359
|
castor_extractor/warehouse/synapse/queries/view_ddl.sql,sha256=3EVbp5_yTgdByHFIPLHmnoOnqqLE77SrjAwFDvu4e54,249
|
|
349
|
-
castor_extractor-0.16.
|
|
350
|
-
castor_extractor-0.16.
|
|
351
|
-
castor_extractor-0.16.
|
|
352
|
-
castor_extractor-0.16.
|
|
360
|
+
castor_extractor-0.16.4.dist-info/LICENCE,sha256=sL-IGa4hweyya1HgzMskrRdybbIa2cktzxb5qmUgDg8,8254
|
|
361
|
+
castor_extractor-0.16.4.dist-info/METADATA,sha256=-D39Tmu_LFDHRe3HrZ542JjZxl0puzZr0n8wMkW52P0,6370
|
|
362
|
+
castor_extractor-0.16.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
363
|
+
castor_extractor-0.16.4.dist-info/entry_points.txt,sha256=SbyPk58Gh-FRztfCNnUZQ6w7SatzNJFZ6GIJLNsy7tI,1427
|
|
364
|
+
castor_extractor-0.16.4.dist-info/RECORD,,
|
|
@@ -11,7 +11,8 @@ castor-extract-postgres=castor_extractor.commands.extract_postgres:main
|
|
|
11
11
|
castor-extract-powerbi=castor_extractor.commands.extract_powerbi:main
|
|
12
12
|
castor-extract-qlik=castor_extractor.commands.extract_qlik:main
|
|
13
13
|
castor-extract-redshift=castor_extractor.commands.extract_redshift:main
|
|
14
|
-
castor-extract-salesforce
|
|
14
|
+
castor-extract-salesforce=castor_extractor.commands.extract_salesforce:main
|
|
15
|
+
castor-extract-salesforce-viz=castor_extractor.commands.extract_salesforce_reporting:main
|
|
15
16
|
castor-extract-sigma=castor_extractor.commands.extract_sigma:main
|
|
16
17
|
castor-extract-snowflake=castor_extractor.commands.extract_snowflake:main
|
|
17
18
|
castor-extract-sqlserver=castor_extractor.commands.extract_sqlserver:main
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
from typing import Dict
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class SalesforceCredentials:
|
|
5
|
-
"""
|
|
6
|
-
Class to handle Salesforce rest API permissions
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
def __init__(
|
|
10
|
-
self,
|
|
11
|
-
*,
|
|
12
|
-
username: str,
|
|
13
|
-
password: str,
|
|
14
|
-
security_token: str,
|
|
15
|
-
consumer_key: str,
|
|
16
|
-
consumer_secret: str,
|
|
17
|
-
):
|
|
18
|
-
self.username = username
|
|
19
|
-
self.password = password + security_token
|
|
20
|
-
self.consumer_key = consumer_key
|
|
21
|
-
self.consumer_secret = consumer_secret
|
|
22
|
-
|
|
23
|
-
def token_request_payload(self) -> Dict[str, str]:
|
|
24
|
-
"""
|
|
25
|
-
Params to post to the API in order to retrieve the authentication token
|
|
26
|
-
"""
|
|
27
|
-
return {
|
|
28
|
-
"grant_type": "password",
|
|
29
|
-
"client_id": self.consumer_key,
|
|
30
|
-
"client_secret": self.consumer_secret,
|
|
31
|
-
"username": self.username,
|
|
32
|
-
"password": self.password,
|
|
33
|
-
}
|