Итерация списка в AWS лямбда-функции для шаблона электронной почты с использованием Python HTML - PullRequest
1 голос
/ 07 мая 2020

Я создаю тело письма, используя AWS lambda_function в Python. Я создал шаблон html, который представлен ниже. Я звоню в базу данных MySQL, чтобы получить данные, используя python. Мне нужно передать данные в шаблон, чтобы заполнить их в теле письма, повторяя этот список в таблице. Как я могу передать его из Python Lambda_function, чтобы я мог отображать, как показано ниже.

QA: Я новичок в интеграции Python и AWS Lambda_function. Не могли бы вы показать мне, как передавать запись в sendemail и динамически заполнять данные в html строках таблицы. Ищете решение на уровне кода, было бы здорово, если бы вы могли помочь. Не стесняйтесь изменять шаблон HTML и код Python по мере необходимости. Спасибо.

Это то, что мне нужно построить - enter image description here

Вот мой HTML Шаблон для таблицы

<tr>
    <td style="padding:35px 70px 30px;" class="em_padd" valign="top" align="center" bgcolor="#f6f7f8">
        <table width="100%%" cellspacing="0" cellpadding="10" border="1" align="center">
            <tbody>
                <tr style="font-weight: bold">
                    <td>Ticker</td>
                    <td>Order Type</td>
                    <td>Creation Units</td>
                    <td>Authorized Participant</td>
                    <td>Payment Type</td>
                    <td>Settlement Date</td>
                    <td>Restricted Securities</td>
                </tr>
                <% var value; for value in list{ %>
                <tr>
                    <td>%(value.ticker)s</td>
                    <td>%(value.orderType)s</td>
                    <td>%(value.creationUnits)d</td>
                    <td>%(value.ap)s</td>
                    <td>%(value.paymentType)s</td>
                    <td>%(value.settlementDate)s</td>
                    <td>%(value.rs)s</td>
                </tr>
          }%>
          </tbody>
        </table>
      </td>
    </tr>

Вот lambda_function.py

import json
import fund_contacts
import client_agreement_contacts
import boto3
import os
import mysql.connector
from mysql.connector import Error
import json
from datetime import datetime

def sendemail(template_name, toAddr, subject, data):
    sns_client = boto3.client(
        'sns',
        region_name=os.environ['REGION'],
        aws_access_key_id=os.environ['ACCESS_KEY_ID'],
        aws_secret_access_key=os.environ['SECRET_ACCESS_KEY'],
    )
    message = {
        "tmpl_id": template_name,
        "to_email": toAddr,
        "subject": subject,
        "data": data
    }
    # Send Event
    sns_client.publish(
        TargetArn=os.environ['EMAIL_ARN'], Message=json.dumps(message))


def getOrderSummary():
    try:
        mySQLConnection = mysql.connector.connect(host='asbc.ueue.rds.amazonaws.com',
                                                  database='QA',
                                                  user='abcd',
                                                  password='random@1')

        cursor = mySQLConnection.cursor(buffered=True)
        sql_select_query = """SELECT    ord.ticker           AS 'Ticker', 
                                ord.transaction_type AS 'Order Type', 
                                ord.unit_quantity    AS 'Creation Units', 
                                apf.legal_name       AS 'Authorized Participant', 
                                ord.payment_method   AS 'Payment Type', 
                                ord.settlement 'Settlement Date', 
                                'No' AS 'Restricted Securities' 
                                FROM      ETP_QA.order ord 
                                LEFT JOIN ETP_QA.apfirm apf 
                                ON        ord.apfirm = apf.id 
                                WHERE     order_time > Curdate() - INTERVAL 1 DAY """
        cursor.execute(sql_select_query)
        record = cursor.fetchall()

        #my_json_string = json.dumps(record)
        # print(my_json_string)

        return record

    except mysql.connector.Error as error:
        print("Failed to get record from MySQL table: {}".format(error))

    finally:
        if (mySQLConnection.is_connected()):
            cursor.close()
            mySQLConnection.close()
            print("MySQL connection is closed")


def lambda_handler(event, context):
    if 'Records' in event:
        message = json.loads(event['Records'][0]['Sns']['Message'])
    else:
        message = event

    records = getOrderSummary()

    if not records:
        templateName = 'ORDER_SUMMARY_NO_DATA'
    else:
        templateName = 'ORDER_SUMMARY_DATA'

    for row in records:
        print("Ticker = ", row[0], )
        print("Order Type = ", row[1])  
        print("Creation Units = ", row[2])
        print("Authorized Participant  = ", row[3])
        print("Settlement Date = ", row[4], )
        print("Restricted Securities = ", row[5], "\n")

    recipient_list = 'SomeEmail@gmail.com'
    current_time = datetime.now()
    subject = 'ABC Investment Series Trust Trade Recap -' + current_time.strftime('%m/%d/%Y')

    # How to set the message so I can itegrate them as per Email Template? 
    # message = records 
    sendemail(templateName, recipient_list, subject, message)

Вот как выглядит набор данных, который я получаю из базы данных -

Ticker =  BTAL
Order Type =  Create
Creation Units =  1
Authorized Participant  =  Hamlin AP Firm
Settlement Date =  Cash
Restricted Securities =  T+1

Ticker =  CFA
Order Type =  Create
Creation Units =  1
Authorized Participant  =  Hamlin AP Firm
Settlement Date =  Cash
Restricted Securities =  T+1

Ticker =  SSUS
Order Type =  Create
Creation Units =  1
Authorized Participant  =  Hamlin AP Firm
Settlement Date =  Cash
Restricted Securities =  T+1

Ticker =  TPHDE
Order Type =  Create
Creation Units =  2
Authorized Participant  =  Hamlin AP Firm
Settlement Date =  Inkind
Restricted Securities =  T+1
...