if __name__ == "__main__": logging.info("Running incremental Zendesk export...") # Create object for Zendesk queries zd = ZendeskTask(config.zenURL, config.zenAgent, config.zenPass, config.zenToken) # Create object for internal database methods (mySQL) zendeskDb = MySqlTask(config.zendeskMySql['username'], config.zendeskMySql['password'], config.zendeskMySql['host'], config.zendeskMySql['database']) zendeskDb.connect() # Grab the last time Accounts were successfully updated start_time = zendeskDb.pull_job_timestamp("INCREMENTAL_EXPORT") logging.info("INCREMENTAL_EXPORT: start_time={0}".format(start_time)) try: tickets = zd.get_tickets(start_time) except Exception, err: logging.exception(err) #print tickets dbQuery = ("INSERT INTO tickets " "VALUES (%(ticket_id)s, %(generated_timestamp)s, " "%(req_name)s, %(req_id)s, %(req_external_id)s, " "%(req_email)s, %(submitter_name)s, %(assignee_name)s, " "%(group_name)s, %(subject)s, %(current_tags)s, " "%(priority)s, %(via)s, %(ticket_type)s, %(created_at)s, "
# Create object for Salesforce methods sfdc = SalesforceTask(config.sfUser, config.sfPass, config.sfApiToken) # Create object for Zendesk methods zd = ZendeskTask(config.zenURL, config.zenAgent, config.zenPass, config.zenToken) ### Pull SFDC Contact Info to Zendesk ### try: sfdcLastModified = sfdc.sfdc_timestamp() logging.info("Current Salesforce Timestamp: {0}".format(sfdcLastModified)) except Exception, err: logging.error(err) sys.exit() # Get the last modified timestamp from internal database startTime = { "startTime" : mysqlDb.pull_job_timestamp('SFDC_CONTACT_LM_PULL') } logging.info("Pulling an internal start time of {0}".format(startTime)) ##### Extract modified SFDC Contacts##### logging.info("Pulling Authorized Support Contacts from Salesforce") sfdcQuery = """ SELECT Email, MailingPostalCode, Phone, Authorized_Support_Contact__c FROM Contact WHERE LastModifiedDate > %(startTime)s """ % startTime sfdcResults = sfdc.sfdc_query(sfdcQuery) for contact in sfdcResults['results']: data = { } data['tags'] = [] user_id = 0
# Create object for Salesforce methods sfdc = SalesforceTask(config['sfUser'], config['sfPass'], config['sfApiToken']) # Create object for Zendesk methods zd = ZendeskTask(config['zenURL'], config['zenAgent'], config['zenPass'], config['zenToken']) ### Pull SFDC Account Info to Zendesk Organizations ### try: sfdcLastModified = sfdc.sfdc_timestamp() logging.info("Current Salesforce Timestamp: {0}".format(sfdcLastModified)) except Exception, err: logging.exception(err) sys.exit() # Get the last modified timestamp from internal database startTime = mysqlDb.pull_job_timestamp('SFDC_ACCOUNTS_LAST_MODIFIED') logging.info("Pulling SFDC_ACCOUNTS_LAST_MODIFIED; start time of {0}".format(startTime)) ##### Extract all SFDC Accounts ##### logging.info("Pulling Accounts from Salesforce") sfdcQuery = """SELECT Id, Name, Subscription_Plan__c, Support_Package__c, Zendesk__Domain_Mapping__c, Account_Owner_Name__c, Named_Support_Engineer__c, Technical_Account_Manager__r.Name, Twitter_Rate_Approval__c, Username_s__c, Account_Status__c, SMB_Enterprise__c, Contracted_MRR__c FROM Account WHERE LastModifiedDate > {0}""".format(startTime) sfdcResults = sfdc.sfdc_query(sfdcQuery) sfdcAccounts = ProcessSfdcAccounts(sfdcResults['results']) # If there are no SFDC Account modified since the last run, update the internal
import re import logging import sys if config.logLevel == "info": logging.basicConfig(format='%(asctime)s | %(levelname)s | %(filename)s | %(message)s', level=logging.INFO, filename=config.logFile) else: logging.basicConfig(format='%(asctime)s | %(levelname)s | %(filename)s | %(message)s', level=logging.DEBUG, filename=config.logFile) sfdc = SalesforceTask(config.sfUser, config.sfPass, config.sfApiToken) mysqlDb = MySqlTask(config.mysql_username, config.mysql_password, config.mysql_host, config.mysql_database) sfdc_update = {} # Get the last modified timestamp from internal database startTime = mysqlDb.pull_job_timestamp('SFDC_DATASIFT_USER_ID') logging.info("Pulling SFDC_DATASIFT_USER_ID; start time of {0}".format(startTime)) # Pull from SFDC query = "Select Id, DataSift_UserID__c, Name FROM Account WHERE Account_Status__c = 'Customer' and DataSift_UserID__c != '' and LastModifiedDate > {0}".format(startTime) results = sfdc.sfdc_query(query) if results['count'] > 0: for account in results['results']: if account['Id'] not in sfdc_update: sfdc_update[account['Id']] = [] ids = re.findall(r'[0-9]+', account['DataSift_UserID__c']) if len(ids): for i in ids: # Query Users table
try: # Create object for internal database methods (mySQL) mysqlDb = MySqlTask(config.mysql_username, config.mysql_password, config.mysql_host, config.mysql_database) # Create object for Salesforce methods sfdc = SalesforceTask(config.sfUser, config.sfPass, config.sfApiToken) logging.info("Logging into SFDC...") ######################## SFDC Accounts ######################## # Get the last modified timestamp sfdcLastModified = sfdc.sfdc_timestamp() # Grab the last time Accounts were successfully updated scriptLastRun = mysqlDb.pull_job_timestamp("SFDC_ACCOUNT_OWNERS_LM") query = "SELECT Id, Name, OwnerId, Owner.Name, Account_Owner_Name__c FROM Account WHERE LastModifiedDate > {0}".format( scriptLastRun ) results = sfdc.sfdc_query(query) accountUpdates = processQueryResults(accountOwnerField, results["results"]) if len(accountUpdates): print "Processing {0} Accounts".format(len(accountUpdates)) sfdc.update_sfdc_object("Account", accountOwnerField, accountUpdates, sf_batchSize) mysqlDb.update_job_timestamp("SFDC_ACCOUNT_OWNERS_LM", sfdcLastModified) ######################## SFDC Leads ######################## # Get the last modified timestamp