1
1
import os
2
2
3
- from sqlalchemy . orm import sessionmaker
3
+ import structlog
4
4
from simple_salesforce import Salesforce
5
+ from sqlalchemy .orm import sessionmaker
6
+
5
7
from config import engine
6
8
from models import SalesForceContacts
7
9
8
- import structlog
9
10
logger = structlog .get_logger ()
10
11
12
+ TEST_MODE = os .getenv ("TEST_MODE" ) # if not present, has value None
13
+
11
14
def store_contacts_all ():
12
15
Session = sessionmaker (engine )
13
16
with Session () as session :
@@ -16,12 +19,27 @@ def store_contacts_all():
16
19
session .execute ("TRUNCATE TABLE salesforcecontacts" )
17
20
18
21
logger .debug ("retrieving the latest salesforce contacts data" )
19
- sf = Salesforce (domain = os .getenv ('SALESFORCE_DOMAIN' ), password = os .getenv ('SALESFORCE_PW' ), username = os .getenv ('SALESFORCE_USERNAME' ), security_token = os .getenv ('SALESFORCE_SECURITY_TOKEN' ))
22
+
23
+ if os .path .exists ('server/bin/connected-app-secrets.pem' ):
24
+ pem_file = 'server/bin/connected-app-secrets.pem'
25
+ elif os .path .exists ('bin/connected-app-secrets.pem' ):
26
+ pem_file = 'bin/connected-app-secrets.pem'
27
+ else :
28
+ logger .error ("Missing salesforce jwt private key pem file, skipping data pull" )
29
+ return
30
+
31
+ sf = Salesforce (username = os .getenv ('SALESFORCE_USERNAME' ), consumer_key = os .getenv ('SALESFORCE_CONSUMER_KEY' ),
32
+ privatekey_file = pem_file )
20
33
results = sf .query ("SELECT Contact_ID_18__c, FirstName, LastName, Contact.Account.Name, MailingCountry, MailingStreet, MailingCity, MailingState, MailingPostalCode, Phone, MobilePhone, Email FROM Contact" )
21
- logger .debug ("Query returned %d Salesforce contact records" , len (results ['records' ]) )
22
-
34
+ logger .debug ("%d total Salesforce contact records" , results ['totalSize' ])
35
+ if TEST_MODE :
36
+ logger .debug ("running in test mode so only downloading first page of Salesforce contacts" )
37
+
38
+ total_records = 0
23
39
done = False
24
40
while not done :
41
+ total_records += len (results ['records' ])
42
+ logger .debug ("Query returned %d Salesforce contact records, total %d" , len (results ['records' ]), total_records )
25
43
for row in results ['records' ]:
26
44
account_name = row ['Account' ]['Name' ] if row ['Account' ] is not None else None
27
45
contact = SalesForceContacts (contact_id = row ['Contact_ID_18__c' ],
@@ -35,10 +53,12 @@ def store_contacts_all():
35
53
mailing_zip_postal_code = row ['MailingPostalCode' ],
36
54
phone = row ['Phone' ],
37
55
mobile = row ['MobilePhone' ],
38
- email = ['Email' ])
56
+ email = row ['Email' ])
39
57
session .add (contact )
40
- done = results ['done' ]
41
- if not done :
42
- results = sf .query_more (results ['nextRecordsUrl' ])
58
+ # if in test mode only return first page of results
59
+ done = results ['done' ] if not TEST_MODE else True
60
+ if not done :
61
+ results = sf .query_more (results ['nextRecordsUrl' ], True )
62
+ logger .debug ("Committing downloaded contact records" )
43
63
session .commit ()
44
- logger .debug ("finished downloading latest salesforce contacts data" )
64
+ logger .debug ("finished downloading latest salesforce contacts data" )
0 commit comments