ms-salesforce-api 3.1.1__tar.gz → 3.3.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.3.0}/PKG-INFO +4 -2
  2. ms_salesforce_api-3.3.0/ms_salesforce_api/salesforce/api/addtech_onboarding/__init__.py +55 -0
  3. ms_salesforce_api-3.3.0/ms_salesforce_api/salesforce/api/addtech_onboarding/constants.py +25 -0
  4. ms_salesforce_api-3.3.0/ms_salesforce_api/salesforce/api/addtech_onboarding/dto/AddTechOnboarding.py +161 -0
  5. ms_salesforce_api-3.3.0/ms_salesforce_api/salesforce/api/addtech_onboarding/export_data/Bigquery.py +85 -0
  6. ms_salesforce_api-3.3.0/ms_salesforce_api/salesforce/api/project/export_data/__tests__/__init__.py +0 -0
  7. ms_salesforce_api-3.3.0/ms_salesforce_api/salesforce/helpers/__init__.py +0 -0
  8. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/pyproject.toml +1 -1
  9. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/LICENSE +0 -0
  10. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/README.md +0 -0
  11. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/__init__.py +0 -0
  12. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/Auth.py +0 -0
  13. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/JWTGenerator.py +0 -0
  14. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/SalesforceQueryExecutor.py +0 -0
  15. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/__init__.py +0 -0
  16. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/__tests__/__init__.py +0 -0
  17. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/__tests__/test_Auth.py +0 -0
  18. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/__tests__/test_JWTGenerator.py +0 -0
  19. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/__tests__/test_SalesforceRequester.py +0 -0
  20. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/__init__.py +0 -0
  21. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/account/__init__.py +0 -0
  22. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/account/constants.py +0 -0
  23. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/account/dto/AccountDTO.py +0 -0
  24. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/account/dto/__init__.py +0 -0
  25. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/account/export_data/Bigquery.py +0 -0
  26. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.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.3.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.3.0}/ms_salesforce_api/salesforce/api/contact/__init__.py +0 -0
  30. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/contact/constants.py +0 -0
  31. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/contact}/dto/__init__.py +0 -0
  33. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/contact}/export_data/__init__.py +0 -0
  35. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/lead/__init__.py +0 -0
  36. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/lead/constants.py +0 -0
  37. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/lead}/dto/__init__.py +0 -0
  39. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/lead}/export_data/__init__.py +0 -0
  41. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/opportunity/__init__.py +0 -0
  42. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/opportunity/constants.py +0 -0
  43. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/opportunity/dto}/__init__.py +0 -0
  45. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/opportunity/export_data/Bigquery.py +0 -0
  46. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.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.3.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.3.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.3.0}/ms_salesforce_api/salesforce/api/opportunity/helpers.py +0 -0
  51. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/opportunity_contact_role/__init__.py +0 -0
  52. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/opportunity_contact_role/constants.py +0 -0
  53. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.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.3.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.3.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.3.0}/ms_salesforce_api/salesforce/api/opportunity_history/__init__.py +0 -0
  58. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/opportunity_history/constants.py +0 -0
  59. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/opportunity_history/dto}/__init__.py +0 -0
  61. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.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.3.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.3.0/ms_salesforce_api/salesforce/api/product/__tests__}/__init__.py +0 -0
  65. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/product/__tests__/test_Product.py +0 -0
  66. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/product/constants.py +0 -0
  67. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/product/dto}/__init__.py +0 -0
  69. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/product/export_data}/__init__.py +0 -0
  71. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/profit_center/__tests__}/__init__.py +0 -0
  73. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0}/ms_salesforce_api/salesforce/api/profit_center/constants.py +0 -0
  75. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/profit_center/dto}/__init__.py +0 -0
  77. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.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.3.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.3.0/ms_salesforce_api/salesforce/api/project/__tests__}/__init__.py +0 -0
  81. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/project/__tests__/test_Project.py +0 -0
  82. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/project/constants.py +0 -0
  83. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/project/dto/BillingLineDTO.py +0 -0
  84. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/project/dto/OpportunityDTO.py +0 -0
  85. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/project/dto}/__init__.py +0 -0
  87. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.0}/ms_salesforce_api/salesforce/api/project/export_data/Bigquery.py +0 -0
  88. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0/ms_salesforce_api/salesforce/api/project/export_data}/__init__.py +0 -0
  90. {ms_salesforce_api-3.1.1 → ms_salesforce_api-3.3.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.3.0}/ms_salesforce_api/salesforce/helpers/string.py +0 -0
@@ -1,7 +1,8 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: ms-salesforce-api
3
- Version: 3.1.1
3
+ Version: 3.3.0
4
4
  Summary: Python library used to extract data from Salesforce API and migrate it to Bigquery and Postgres.
5
+ License-File: LICENSE
5
6
  Author: Making Science
6
7
  Requires-Python: >=3.8.1,<4.0.0
7
8
  Classifier: Programming Language :: Python :: 3
@@ -10,6 +11,7 @@ Classifier: Programming Language :: Python :: 3.10
10
11
  Classifier: Programming Language :: Python :: 3.11
11
12
  Classifier: Programming Language :: Python :: 3.12
12
13
  Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Python :: 3.14
13
15
  Requires-Dist: flake8 (>=6.0.0,<7.0.0)
14
16
  Requires-Dist: gc-google-services-api (>=1.2.7,<2.0.0)
15
17
  Requires-Dist: isort (>=5.12.0,<6.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,25 @@
1
+ DEFAULT_ADDTECH_ONBOARDING_QUERY = """
2
+ SELECT
3
+ Id,
4
+ Account_Id__c,
5
+ Advertiser_Id__c,
6
+ Name,
7
+ FRM_ProductName__c,
8
+ FRM_Name__c,
9
+ Opportunity__c,
10
+ Opportunity__r.AccountId,
11
+ Opportunity__r.FRM_ProjectCode__c,
12
+ Opportunity__r.FRM_ProjectName__c,
13
+ Opportunity_Product__r.FRM_ProductName__c,
14
+ Opportunity_Product__r.ProductCode,
15
+ Opportunity_Product__r.CurrencyIsoCode,
16
+ Opportunity_Product__r.Quantity,
17
+ Opportunity_Product__r.FRM_ProfitCenterName__c,
18
+ Partner_Id__c,
19
+ Status__c,
20
+ TXT_EntityID__c,
21
+ TXT_GMPOrgID__c,
22
+ TXT_ManagerId__c,
23
+ TXT_PlatformAccName__c
24
+ FROM Yangtse__c
25
+ """
@@ -0,0 +1,161 @@
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
+ adtech_propduct_name,
27
+ yangtse_name,
28
+ ):
29
+ self.id = id
30
+ self.account_id = account_id
31
+ self.advertiser_id = advertiser_id
32
+ self.name = name
33
+ self.opportunity = opportunity
34
+ self.opportunity_account_id = opportunity_account_id
35
+ self.opportunity_project_code = opportunity_project_code
36
+ self.opportunity_project_name = opportunity_project_name
37
+ self.opportunity_product_name = opportunity_product_name
38
+ self.opportunity_product_code = opportunity_product_code
39
+ self.opportunity_product_currency_iso_code = (
40
+ opportunity_product_currency_iso_code
41
+ )
42
+ self.opportunity__product_quantity = opportunity__product_quantity
43
+ self.opportunity__product_profit_center_name = (
44
+ opportunity__product_profit_center_name
45
+ )
46
+ self.partner_id = partner_id
47
+ self.status = status
48
+ self.txt_entity_id = txt_entity_id
49
+ self.txt_gmp_org_id = txt_gmp_org_id
50
+ self.txt_manager_id = txt_manager_id
51
+ self.txt_platform_acc_name = txt_platform_acc_name
52
+ self.adtech_propduct_name = adtech_propduct_name
53
+ self.yangtse_name = yangtse_name
54
+
55
+ @staticmethod
56
+ def from_salesforce_record(record: dict):
57
+
58
+ def _get_opportunity_account_id():
59
+ try:
60
+ return record["Opportunity__r"]["AccountId"]
61
+ except (KeyError, TypeError):
62
+ return None
63
+
64
+ def _get_opportunity_project_code():
65
+ try:
66
+ return record["Opportunity__r"]["FRM_ProjectCode__c"]
67
+ except (KeyError, TypeError):
68
+ return None
69
+
70
+ def _get_opportunity_project_name():
71
+ try:
72
+ return normalize_value(
73
+ record["Opportunity__r"]["FRM_ProjectName__c"]
74
+ )
75
+ except (KeyError, TypeError):
76
+ return None
77
+
78
+ def _get_opportunity_product_name():
79
+ try:
80
+ return normalize_value(
81
+ record["Opportunity_Product__r"]["FRM_ProductName__c"]
82
+ )
83
+ except (KeyError, TypeError):
84
+ return None
85
+
86
+ def _get_opportunity_product_code():
87
+ try:
88
+ return record["Opportunity_Product__r"]["ProductCode"]
89
+ except (KeyError, TypeError):
90
+ return None
91
+
92
+ def _get_opportunity_product_currency_iso_code():
93
+ try:
94
+ return record["Opportunity_Product__r"]["CurrencyIsoCode"]
95
+ except (KeyError, TypeError):
96
+ return None
97
+
98
+ def _get_opportunity_product_quantity():
99
+ try:
100
+ return record["Opportunity_Product__r"]["Quantity"]
101
+ except (KeyError, TypeError):
102
+ return None
103
+
104
+ def _get_opportunity_product_profit_center_name():
105
+ try:
106
+ return record["Opportunity_Product__r"][
107
+ "FRM_ProfitCenterName__c"
108
+ ]
109
+ except (KeyError, TypeError):
110
+ return None
111
+
112
+ return AddTechOnboardingDTO(
113
+ id=record["Id"],
114
+ account_id=record["Account_Id__c"],
115
+ advertiser_id=record["Advertiser_Id__c"],
116
+ name=normalize_value(record["Name"]),
117
+ opportunity=record["Opportunity__c"],
118
+ adtech_propduct_name=record["FRM_ProductName__c"],
119
+ yangtse_name=record["FRM_Name__c"],
120
+ opportunity_account_id=_get_opportunity_account_id(),
121
+ opportunity_project_code=_get_opportunity_project_code(),
122
+ opportunity_project_name=_get_opportunity_project_name(),
123
+ opportunity_product_name=_get_opportunity_product_name(),
124
+ opportunity_product_code=_get_opportunity_product_code(),
125
+ opportunity_product_currency_iso_code=_get_opportunity_product_currency_iso_code(), # noqa: E501
126
+ opportunity__product_quantity=_get_opportunity_product_quantity(),
127
+ opportunity__product_profit_center_name=_get_opportunity_product_profit_center_name(), # noqa: E501
128
+ partner_id=record["Partner_Id__c"],
129
+ status=normalize_value(record["Status__c"]),
130
+ txt_entity_id=record["TXT_EntityID__c"],
131
+ txt_gmp_org_id=record["TXT_GMPOrgID__c"],
132
+ txt_manager_id=record["TXT_ManagerId__c"],
133
+ txt_platform_acc_name=normalize_value(
134
+ record["TXT_PlatformAccName__c"]
135
+ ),
136
+ )
137
+
138
+ def to_dict(self):
139
+ return {
140
+ "id": self.id,
141
+ "account_id": self.account_id,
142
+ "advertiser_id": self.advertiser_id,
143
+ "name": self.name,
144
+ "opportunity": self.opportunity,
145
+ "opportunity_account_id": self.opportunity_account_id,
146
+ "opportunity_project_code": self.opportunity_project_code,
147
+ "opportunity_project_name": self.opportunity_project_name,
148
+ "opportunity_product_name": self.opportunity_product_name,
149
+ "opportunity_product_code": self.opportunity_product_code,
150
+ "opportunity_product_currency_iso_code": self.opportunity_product_currency_iso_code, # noqa: E501
151
+ "opportunity__product_quantity": self.opportunity__product_quantity, # noqa: E501
152
+ "opportunity__product_profit_center_name": self.opportunity__product_profit_center_name, # noqa: E501
153
+ "partner_id": self.partner_id,
154
+ "status": self.status,
155
+ "txt_entity_id": self.txt_entity_id,
156
+ "txt_gmp_org_id": self.txt_gmp_org_id,
157
+ "txt_manager_id": self.txt_manager_id,
158
+ "txt_platform_acc_name": self.txt_platform_acc_name,
159
+ "adtech_propduct_name": self.adtech_propduct_name,
160
+ "yangtse_name": self.yangtse_name,
161
+ }
@@ -0,0 +1,85 @@
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
+ "adtech_propduct_name": "STRING",
49
+ "yangtse_name": "STRING",
50
+ },
51
+ }
52
+
53
+ for table_name, table_schema in self.schemas.items():
54
+ self.client.create_table_if_not_exists(table_name, table_schema)
55
+
56
+ def _execute_query(self, query, log_id, default_error_value=None):
57
+ custom_error_value = f"{log_id}_custom_error"
58
+
59
+ result = self.client.execute_query(
60
+ query,
61
+ custom_error_value,
62
+ )
63
+
64
+ if result == custom_error_value:
65
+ logging.error(
66
+ f"[ERROR - _execute_query]: Error executing query for {log_id} in BigQuery." # noqa: E501
67
+ )
68
+ result = default_error_value
69
+
70
+ return result
71
+
72
+ def export_data(self, profit_centers):
73
+ self.client.load_massive_data(
74
+ rows_to_insert=profit_centers,
75
+ table_name="addtech_onboarding",
76
+ )
77
+
78
+ def delete_all_rows(self):
79
+ table_names = self.schemas.keys()
80
+ for table_name in table_names:
81
+ delete_query_table = f"DELETE FROM `{self.project_id}.{self.dataset_id}.{table_name}` WHERE true" # noqa: E501
82
+ self._execute_query(
83
+ query=delete_query_table,
84
+ log_id=f"delete_table_{table_name}",
85
+ )
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "ms-salesforce-api"
3
- version = "3.1.1"
3
+ version = "3.3.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"