def send_mail(self, to, subject, body, attachments=None): msg = MIMEMultipart() msg['From'] = self.user msg['To'] = ', '.join(to) msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject msg.attach(MIMEText(body, 'plain')) if attachments is not None: for attachment in attachments: part = MIMEBase('application', 'octet-stream') part.set_payload(attachment[1].read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename = ' + attachment[0]) msg.attach(part) content = msg.as_string() try: self.server.sendmail(self.user, to, content) except Exception as error: logger = Logger() logger.send( f'An Error occurred while sending the mail! ERROR: {error}') sys.exit(6)
def SalesForceConnector(): try: conf = get_config() _sf = Salesforce(username=conf['SF_USER'], password=conf['SF_PWD'], security_token=conf['SF_TOKEN']) except Exception as error: logger = Logger() logger.send( f"It was not possible to generate a connection with SalesForce! Error: {error}" ) sys.exit(7) return _sf
def get_data() -> pd.DataFrame: sf = SalesForceConnector() with open('./queries/sf_query.sql', 'r') as file_query: sf_query = file_query.read() try: _df = pd.DataFrame( sf.query_all(sf_query)['records']).drop(columns='attributes') except Exception as error: logger = Logger() logger.send( f"It was not possible to get data from SalesForce! Error: {error}") sys.exit(5) return _df
def get_config(): _config = defaultdict(lambda: False) _keys = [ 'SF_USER', 'SF_PWD', 'SF_TOKEN', 'MAIL_USER', 'MAIL_PASS', 'RUNNING_TIME' ] for _key in _keys: if _key in os.environ.keys(): _config[_key] = os.getenv(_key) else: logger = Logger() logger.send( f"The key {_key} is not set in environment, exiting...") raise Exception return _config
def generate_file(data: pd.DataFrame): chip_multi = data chip_multi['StoneCode'] = chip_multi['Opportunity__r'].map( lambda row: row['StoneCode__c']) chip_multi['Account'] = chip_multi['Opportunity__r'].map( lambda row: row['Account']['Id']) chip_multi['Polo'] = chip_multi['Opportunity__r'].map( lambda row: row['Account']['Grupo_3_SF__c']) chip_multi['Comercial'] = chip_multi['Opportunity__r'].map( lambda row: row['Account']['Grupo_4_SF__c']) chip_multi['CreatedDate'] = chip_multi['Opportunity__r'].map( lambda row: row['CreatedDate']) chip_multi['CreatedDate'] = pd.to_datetime( chip_multi['CreatedDate']).map(lambda x: x.replace(tzinfo=None)) chip_multi.drop(columns='Opportunity__r', inplace=True) chip_multi.sort_values('CreatedDate', ascending=False, inplace=True) today_work = chip_multi[ chip_multi['CreatedDate'] > f'{date.today().strftime(date_format)}'] cred = chip_multi.dropna(subset=['StoneCode']) ncred = chip_multi.loc[chip_multi['StoneCode'].isna()] file_name = f'files/{today_str}_Credenciamento_Chip_Multi.xlsx' try: with pd.ExcelWriter(file_name) as writer: today_work.to_excel(writer, sheet_name='Hoje', index=False) cred.to_excel(writer, sheet_name='Credenciados', index=False) ncred.to_excel(writer, sheet_name='Não Credenciados', index=False) except Exception as error: logger = Logger() logger.send( f'An Error occurred generating attach file! ERROR: {error}') sys.exit(6) return file_name
def job(): logger = Logger() logger.send('Starting Job') logger.send('Collecting Data') cm = get_data() chip_multi_url = generate_file(data=cm) logger.send('Sending e-mail') gmail = Email() gmail.login() _body, _subject, _recipients, _attachs = format_mail( attachs=[chip_multi_url]) gmail.send_mail(to=_recipients, subject=_subject, body=_body, attachments=_attachs) gmail.logout() logger.send('Finish Processing') return True