ms-salesforce-api 3.1.1__tar.gz → 3.2.0__tar.gz

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.
Files changed (91) hide show
  1. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/PKG-INFO +1 -1
  2. ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/addtech_onboarding/__init__.py +55 -0
  3. ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/addtech_onboarding/constants.py +23 -0
  4. ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/addtech_onboarding/dto/AddTechOnboarding.py +153 -0
  5. ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/addtech_onboarding/export_data/Bigquery.py +83 -0
  6. ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/project/export_data/__tests__/__init__.py +0 -0
  7. ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/helpers/__init__.py +0 -0
  8. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/pyproject.toml +1 -1
  9. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/LICENSE +0 -0
  10. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/README.md +0 -0
  11. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/__init__.py +0 -0
  12. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/Auth.py +0 -0
  13. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/JWTGenerator.py +0 -0
  14. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/SalesforceQueryExecutor.py +0 -0
  15. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/__init__.py +0 -0
  16. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/__tests__/__init__.py +0 -0
  17. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/__tests__/test_Auth.py +0 -0
  18. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/__tests__/test_JWTGenerator.py +0 -0
  19. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/__tests__/test_SalesforceRequester.py +0 -0
  20. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/__init__.py +0 -0
  21. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/account/__init__.py +0 -0
  22. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/account/constants.py +0 -0
  23. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/account/dto/AccountDTO.py +0 -0
  24. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/account/dto/__init__.py +0 -0
  25. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/account/export_data/Bigquery.py +0 -0
  26. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/account/export_data/__init__.py +0 -0
  27. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/contact → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/addtech_onboarding}/dto/__init__.py +0 -0
  28. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/contact → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/addtech_onboarding}/export_data/__init__.py +0 -0
  29. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/contact/__init__.py +0 -0
  30. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/contact/constants.py +0 -0
  31. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/contact/dto/ContactDTO.py +0 -0
  32. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/lead → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/contact}/dto/__init__.py +0 -0
  33. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/contact/export_data/Bigquery.py +0 -0
  34. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/lead → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/contact}/export_data/__init__.py +0 -0
  35. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/lead/__init__.py +0 -0
  36. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/lead/constants.py +0 -0
  37. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/lead/dto/LeadDTO.py +0 -0
  38. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/opportunity → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/lead}/dto/__init__.py +0 -0
  39. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/lead/export_data/Bigquery.py +0 -0
  40. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/opportunity → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/lead}/export_data/__init__.py +0 -0
  41. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity/__init__.py +0 -0
  42. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity/constants.py +0 -0
  43. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity/dto/OpportunityDTO.py +0 -0
  44. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/opportunity/export_data/__tests__ → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/opportunity/dto}/__init__.py +0 -0
  45. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity/export_data/Bigquery.py +0 -0
  46. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity/export_data/CloudSQL.py +0 -0
  47. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/opportunity_contact_role/dto → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/opportunity/export_data}/__init__.py +0 -0
  48. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/opportunity_contact_role/export_data → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/opportunity/export_data/__tests__}/__init__.py +0 -0
  49. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity/export_data/__tests__/test_CloudSQL.py +0 -0
  50. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity/helpers.py +0 -0
  51. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity_contact_role/__init__.py +0 -0
  52. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity_contact_role/constants.py +0 -0
  53. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity_contact_role/dto/OpportunityContactDTO.py +0 -0
  54. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/opportunity_history → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/opportunity_contact_role}/dto/__init__.py +0 -0
  55. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity_contact_role/export_data/Bigquery.py +0 -0
  56. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/opportunity_history → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/opportunity_contact_role}/export_data/__init__.py +0 -0
  57. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity_history/__init__.py +0 -0
  58. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity_history/constants.py +0 -0
  59. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity_history/dto/OpportunityDTO.py +0 -0
  60. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/product/__tests__ → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/opportunity_history/dto}/__init__.py +0 -0
  61. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/opportunity_history/export_data/Bigquery.py +0 -0
  62. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/product/dto → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/opportunity_history/export_data}/__init__.py +0 -0
  63. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/product/__init__.py +0 -0
  64. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/product/export_data → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/product/__tests__}/__init__.py +0 -0
  65. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/product/__tests__/test_Product.py +0 -0
  66. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/product/constants.py +0 -0
  67. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/product/dto/ProductDTO.py +0 -0
  68. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/profit_center/__tests__ → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/product/dto}/__init__.py +0 -0
  69. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/product/export_data/Bigquery.py +0 -0
  70. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/profit_center/dto → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/product/export_data}/__init__.py +0 -0
  71. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/profit_center/__init__.py +0 -0
  72. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/profit_center/export_data → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/profit_center/__tests__}/__init__.py +0 -0
  73. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/profit_center/__tests__/test_ProfitCenter.py +0 -0
  74. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/profit_center/constants.py +0 -0
  75. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/profit_center/dto/ProfitCenterDTO.py +0 -0
  76. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/project/__tests__ → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/profit_center/dto}/__init__.py +0 -0
  77. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/profit_center/export_data/Bigquery.py +0 -0
  78. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/project/dto → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/profit_center/export_data}/__init__.py +0 -0
  79. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/project/__init__.py +0 -0
  80. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/project/export_data → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/project/__tests__}/__init__.py +0 -0
  81. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/project/__tests__/test_Project.py +0 -0
  82. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/project/constants.py +0 -0
  83. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/project/dto/BillingLineDTO.py +0 -0
  84. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/project/dto/OpportunityDTO.py +0 -0
  85. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/project/dto/ProjectLineItemDTO.py +0 -0
  86. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/api/project/export_data/__tests__ → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/project/dto}/__init__.py +0 -0
  87. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/project/export_data/Bigquery.py +0 -0
  88. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/project/export_data/CloudSQL.py +0 -0
  89. {ms_salesforce_api-3.1.1/ms_salesforce_api/salesforce/helpers → ms_salesforce_api-3.2.0/ms_salesforce_api/salesforce/api/project/export_data}/__init__.py +0 -0
  90. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/api/project/export_data/__tests__/test_CloudSQL.py +0 -0
  91. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.2.0}/ms_salesforce_api/salesforce/helpers/string.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ms-salesforce-api
3
- Version: 3.1.1
3
+ Version: 3.2.0
4
4
  Summary: Python library used to extract data from Salesforce API and migrate it to Bigquery and Postgres.
5
5
  Author: Making Science
6
6
  Requires-Python: >=3.8.1,<4.0.0
@@ -0,0 +1,55 @@
1
+ import logging
2
+
3
+ from ms_salesforce_api.salesforce.api.addtech_onboarding.constants import (
4
+ DEFAULT_ADDTECH_ONBOARDING_QUERY,
5
+ )
6
+ from ms_salesforce_api.salesforce.api.addtech_onboarding.dto.AddTechOnboarding import ( # noqa: E501
7
+ AddTechOnboardingDTO,
8
+ )
9
+ from ms_salesforce_api.salesforce.SalesforceQueryExecutor import (
10
+ SalesforceQueryExecutor,
11
+ )
12
+
13
+ logging.basicConfig(
14
+ level=logging.INFO,
15
+ format="%(asctime)s - %(levelname)s - %(message)s",
16
+ )
17
+
18
+
19
+ class AddTechOboarding(SalesforceQueryExecutor):
20
+ def get_batches(self, lst, n):
21
+ """Yield successive n-sized chunks from lst."""
22
+ for i in range(0, len(lst), n):
23
+ yield lst[i : i + n] # noqa: E203
24
+
25
+ def get_all(
26
+ self,
27
+ query: str = DEFAULT_ADDTECH_ONBOARDING_QUERY,
28
+ format: str = "json",
29
+ ):
30
+ data = self.fetch_data(query)
31
+ if data is None:
32
+ logging.error(
33
+ "[ERROR - SalesforceAPI]: No addtech onboarding data return from Salesforce API" # noqa: E501
34
+ )
35
+ return []
36
+
37
+ addtech_onboarding = [
38
+ AddTechOnboardingDTO.from_salesforce_record(record)
39
+ for record in data
40
+ ]
41
+ addtech_onboarding_list = list(addtech_onboarding)
42
+
43
+ if format == "json":
44
+ addtech_onboarding_list = [
45
+ addtech.to_dict() for addtech in addtech_onboarding_list
46
+ ]
47
+
48
+ return addtech_onboarding_list
49
+ try:
50
+ pass
51
+ except Exception as e:
52
+ logging.error(
53
+ f"[ERROR - get_all]: Failed to get all addtech_onboarding: {e}"
54
+ )
55
+ return []
@@ -0,0 +1,23 @@
1
+ DEFAULT_ADDTECH_ONBOARDING_QUERY = """
2
+ SELECT
3
+ Id,
4
+ Account_Id__c,
5
+ Advertiser_Id__c,
6
+ Name,
7
+ Opportunity__c,
8
+ Opportunity__r.AccountId,
9
+ Opportunity__r.FRM_ProjectCode__c,
10
+ Opportunity__r.FRM_ProjectName__c,
11
+ Opportunity_Product__r.FRM_ProductName__c,
12
+ Opportunity_Product__r.ProductCode,
13
+ Opportunity_Product__r.CurrencyIsoCode,
14
+ Opportunity_Product__r.Quantity,
15
+ Opportunity_Product__r.FRM_ProfitCenterName__c,
16
+ Partner_Id__c,
17
+ Status__c,
18
+ TXT_EntityID__c,
19
+ TXT_GMPOrgID__c,
20
+ TXT_ManagerId__c,
21
+ TXT_PlatformAccName__c
22
+ FROM Yangtse__c
23
+ """
@@ -0,0 +1,153 @@
1
+ from ms_salesforce_api.salesforce.helpers.string import normalize_value
2
+
3
+
4
+ class AddTechOnboardingDTO(object):
5
+ def __init__(
6
+ self,
7
+ id,
8
+ account_id,
9
+ advertiser_id,
10
+ name,
11
+ opportunity,
12
+ opportunity_account_id,
13
+ opportunity_project_code,
14
+ opportunity_project_name,
15
+ opportunity_product_name,
16
+ opportunity_product_code,
17
+ opportunity_product_currency_iso_code,
18
+ opportunity__product_quantity,
19
+ opportunity__product_profit_center_name,
20
+ partner_id,
21
+ status,
22
+ txt_entity_id,
23
+ txt_gmp_org_id,
24
+ txt_manager_id,
25
+ txt_platform_acc_name,
26
+ ):
27
+ self.id = id
28
+ self.account_id = account_id
29
+ self.advertiser_id = advertiser_id
30
+ self.name = name
31
+ self.opportunity = opportunity
32
+ self.opportunity_account_id = opportunity_account_id
33
+ self.opportunity_project_code = opportunity_project_code
34
+ self.opportunity_project_name = opportunity_project_name
35
+ self.opportunity_product_name = opportunity_product_name
36
+ self.opportunity_product_code = opportunity_product_code
37
+ self.opportunity_product_currency_iso_code = (
38
+ opportunity_product_currency_iso_code
39
+ )
40
+ self.opportunity__product_quantity = opportunity__product_quantity
41
+ self.opportunity__product_profit_center_name = (
42
+ opportunity__product_profit_center_name
43
+ )
44
+ self.partner_id = partner_id
45
+ self.status = status
46
+ self.txt_entity_id = txt_entity_id
47
+ self.txt_gmp_org_id = txt_gmp_org_id
48
+ self.txt_manager_id = txt_manager_id
49
+ self.txt_platform_acc_name = txt_platform_acc_name
50
+
51
+ @staticmethod
52
+ def from_salesforce_record(record: dict):
53
+
54
+ def _get_opportunity_account_id():
55
+ try:
56
+ return record["Opportunity__r"]["AccountId"]
57
+ except (KeyError, TypeError):
58
+ return None
59
+
60
+ def _get_opportunity_project_code():
61
+ try:
62
+ return record["Opportunity__r"]["FRM_ProjectCode__c"]
63
+ except (KeyError, TypeError):
64
+ return None
65
+
66
+ def _get_opportunity_project_name():
67
+ try:
68
+ return normalize_value(
69
+ record["Opportunity__r"]["FRM_ProjectName__c"]
70
+ )
71
+ except (KeyError, TypeError):
72
+ return None
73
+
74
+ def _get_opportunity_product_name():
75
+ try:
76
+ return normalize_value(
77
+ record["Opportunity_Product__r"]["FRM_ProductName__c"]
78
+ )
79
+ except (KeyError, TypeError):
80
+ return None
81
+
82
+ def _get_opportunity_product_code():
83
+ try:
84
+ return record["Opportunity_Product__r"]["ProductCode"]
85
+ except (KeyError, TypeError):
86
+ return None
87
+
88
+ def _get_opportunity_product_currency_iso_code():
89
+ try:
90
+ return record["Opportunity_Product__r"]["CurrencyIsoCode"]
91
+ except (KeyError, TypeError):
92
+ return None
93
+
94
+ def _get_opportunity_product_quantity():
95
+ try:
96
+ return record["Opportunity_Product__r"]["Quantity"]
97
+ except (KeyError, TypeError):
98
+ return None
99
+
100
+ def _get_opportunity_product_profit_center_name():
101
+ try:
102
+ return record["Opportunity_Product__r"][
103
+ "FRM_ProfitCenterName__c"
104
+ ]
105
+ except (KeyError, TypeError):
106
+ return None
107
+
108
+ return AddTechOnboardingDTO(
109
+ id=record["Id"],
110
+ account_id=record["Account_Id__c"],
111
+ advertiser_id=record["Advertiser_Id__c"],
112
+ name=normalize_value(record["Name"]),
113
+ opportunity=record["Opportunity__c"],
114
+ opportunity_account_id=_get_opportunity_account_id(),
115
+ opportunity_project_code=_get_opportunity_project_code(),
116
+ opportunity_project_name=_get_opportunity_project_name(),
117
+ opportunity_product_name=_get_opportunity_product_name(),
118
+ opportunity_product_code=_get_opportunity_product_code(),
119
+ opportunity_product_currency_iso_code=_get_opportunity_product_currency_iso_code(), # noqa: E501
120
+ opportunity__product_quantity=_get_opportunity_product_quantity(),
121
+ opportunity__product_profit_center_name=_get_opportunity_product_profit_center_name(), # noqa: E501
122
+ partner_id=record["Partner_Id__c"],
123
+ status=normalize_value(record["Status__c"]),
124
+ txt_entity_id=record["TXT_EntityID__c"],
125
+ txt_gmp_org_id=record["TXT_GMPOrgID__c"],
126
+ txt_manager_id=record["TXT_ManagerId__c"],
127
+ txt_platform_acc_name=normalize_value(
128
+ record["TXT_PlatformAccName__c"]
129
+ ),
130
+ )
131
+
132
+ def to_dict(self):
133
+ return {
134
+ "id": self.id,
135
+ "account_id": self.account_id,
136
+ "advertiser_id": self.advertiser_id,
137
+ "name": self.name,
138
+ "opportunity": self.opportunity,
139
+ "opportunity_account_id": self.opportunity_account_id,
140
+ "opportunity_project_code": self.opportunity_project_code,
141
+ "opportunity_project_name": self.opportunity_project_name,
142
+ "opportunity_product_name": self.opportunity_product_name,
143
+ "opportunity_product_code": self.opportunity_product_code,
144
+ "opportunity_product_currency_iso_code": self.opportunity_product_currency_iso_code, # noqa: E501
145
+ "opportunity__product_quantity": self.opportunity__product_quantity, # noqa: E501
146
+ "opportunity__product_profit_center_name": self.opportunity__product_profit_center_name, # noqa: E501
147
+ "partner_id": self.partner_id,
148
+ "status": self.status,
149
+ "txt_entity_id": self.txt_entity_id,
150
+ "txt_gmp_org_id": self.txt_gmp_org_id,
151
+ "txt_manager_id": self.txt_manager_id,
152
+ "txt_platform_acc_name": self.txt_platform_acc_name,
153
+ }
@@ -0,0 +1,83 @@
1
+ import logging
2
+
3
+ from gc_google_services_api.bigquery import BigQueryManager
4
+
5
+ logging.basicConfig(
6
+ level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
7
+ )
8
+
9
+
10
+ class BigQueryExporter:
11
+ """
12
+ Initializes the Bigquery exporter with the given project ID and dataset ID.
13
+
14
+ Args:
15
+ project_id (str): The ID of the Google Cloud project.
16
+ dataset_id (str): The ID of the BigQuery dataset.
17
+ """
18
+
19
+ def __init__(self, project_id, dataset_id):
20
+ self.project_id = project_id
21
+ self.dataset_id = dataset_id
22
+ self.client = BigQueryManager(
23
+ project_id=project_id,
24
+ dataset_id=dataset_id,
25
+ )
26
+ self.batch_size = 200
27
+ self.schemas = {
28
+ "addtech_onboarding": {
29
+ "id": "STRING",
30
+ "account_id": "STRING",
31
+ "advertiser_id": "STRING",
32
+ "name": "STRING",
33
+ "opportunity": "STRING",
34
+ "opportunity_account_id": "STRING",
35
+ "opportunity_project_code": "STRING",
36
+ "opportunity_project_name": "STRING",
37
+ "opportunity_product_name": "STRING",
38
+ "opportunity_product_code": "STRING",
39
+ "opportunity_product_currency_iso_code": "STRING",
40
+ "opportunity__product_quantity": "STRING",
41
+ "opportunity__product_profit_center_name": "STRING",
42
+ "partner_id": "STRING",
43
+ "status": "STRING",
44
+ "txt_entity_id": "STRING",
45
+ "txt_gmp_org_id": "STRING",
46
+ "txt_manager_id": "STRING",
47
+ "txt_platform_acc_name": "STRING",
48
+ },
49
+ }
50
+
51
+ for table_name, table_schema in self.schemas.items():
52
+ self.client.create_table_if_not_exists(table_name, table_schema)
53
+
54
+ def _execute_query(self, query, log_id, default_error_value=None):
55
+ custom_error_value = f"{log_id}_custom_error"
56
+
57
+ result = self.client.execute_query(
58
+ query,
59
+ custom_error_value,
60
+ )
61
+
62
+ if result == custom_error_value:
63
+ logging.error(
64
+ f"[ERROR - _execute_query]: Error executing query for {log_id} in BigQuery." # noqa: E501
65
+ )
66
+ result = default_error_value
67
+
68
+ return result
69
+
70
+ def export_data(self, profit_centers):
71
+ self.client.load_massive_data(
72
+ rows_to_insert=profit_centers,
73
+ table_name="addtech_onboarding",
74
+ )
75
+
76
+ def delete_all_rows(self):
77
+ table_names = self.schemas.keys()
78
+ for table_name in table_names:
79
+ delete_query_table = f"DELETE FROM `{self.project_id}.{self.dataset_id}.{table_name}` WHERE true" # noqa: E501
80
+ self._execute_query(
81
+ query=delete_query_table,
82
+ log_id=f"delete_table_{table_name}",
83
+ )
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "ms-salesforce-api"
3
- version = "3.1.1"
3
+ version = "3.2.0"
4
4
  description = "Python library used to extract data from Salesforce API and migrate it to Bigquery and Postgres."
5
5
  authors = ["Making Science"]
6
6
  readme = "README.md"