Esempio n. 1
0
def processMatches(colnames, matches, currentProposal, isFromMatches):
    print(colnames)
    print(matches)
    try:
        index_action_type = colnames.index('action_type')
        index_action_subtype = colnames.index('action_subtype')
        index_action_data = colnames.index('action_data')
        index_trigger_data = colnames.index('trigger_data')
        index_trigger_action_id = colnames.index('trigger_action_id')
        index_unique_id = index_trigger_action_id
        try:
            index_unique_id = colnames.index('unique_id')
        except:
            print("No unique_id found.")
        for match in matches:
            print('match')
            print(match)
            emailAddress = match[index_action_data]['email']
            if (match[index_action_type] == 'notification') and \
                (match[index_action_subtype] == 'send_email'):
                print(f"Sending email to: {emailAddress}")

                coin_upper = match[index_trigger_data]['coin'].upper()
                payload = {
                    "to_name":
                    "",
                    "to_email":
                    emailAddress,
                    "subject":
                    coin_upper + " New Voting Phase Period",
                    "text_line":
                    coin_upper + " New Voting Phase Period",
                    "main_title":
                    coin_upper + " New Voting Phase Period: " +
                    str(currentProposal).capitalize(),
                    "trigger_text":
                    coin_upper + " New Voting Phase Period",
                    "action_text":
                    "send email to " + emailAddress,
                    "id_trigger_action":
                    match[index_unique_id]
                }
                print(payload)
                try:
                    r = requests.post(
                        'https://eqzuf5sfph.execute-api.us-west-1.amazonaws.com/default/general-email-action-test-1_hello',
                        data=json.dumps(payload))
                    print(r.status_code)
                    print(r.text)
                except Exception as e:
                    print(e)

            elif (match[index_action_type] == 'webhook') and \
                (match[index_action_subtype] == 'json'):
                webhookURL = match[index_action_data]['webhook']
                print(f"Sending webhook to: {webhookURL}")
                coin_upper = match[index_trigger_data]['coin'].upper()
                payload = {
                    "dataJson": {
                        "trigger": match[colnames.index('trigger_subtype')],
                        "coin": coin_upper,
                        "chain": match[index_trigger_data]['chain'],
                        "proposal": str(currentProposal).capitalize()
                    }
                }
                print(payload)
                try:
                    params = {}
                    payload["dataJson"] = json.dumps(payload["dataJson"])
                    r = requests.post(url=webhookURL,
                                      params=params,
                                      data=payload)
                    print(r.json())
                    print(r.status_code)
                except Exception as e:
                    print(e)

            elif (match[index_action_type] == 'webhook') and \
                (match[index_action_subtype] == 'rpc'):
                webhookURL = match[index_action_data]['webhook']
                print(f"Sending webhook to: {webhookURL}")
                coin_upper = match[index_trigger_data]['coin'].upper()
                payload = {
                    "dataJson": {
                        "trigger_data": {
                            "trigger":
                            match[colnames.index('trigger_subtype')],
                            "coin": coin_upper,
                            "chain": match[index_trigger_data]['chain'],
                            "proposal": str(currentProposal).capitalize()
                        }
                    }
                }
                print(payload)
                rpc_response = ""

                if match[index_action_data]["function"][
                        "name"] == 'forge_operation':
                    print("getting rpc response")
                    rpc_response = forgeOperation(
                        match[index_action_data]["function"]["data"]
                        ["sourceAddress"], match[index_action_data]["function"]
                        ["data"]["destinationAddress"],
                        match[index_action_data]["function"]["data"]["amount"])
                    payload["dataJson"]["rpc_response"] = rpc_response

                try:
                    params = {}
                    payload["dataJson"] = json.dumps(payload["dataJson"])
                    r = requests.post(url=webhookURL,
                                      params=params,
                                      data=payload)
                    print(r.json())
                    print(r.status_code)
                except Exception as e:
                    print(e)

            elif (match[index_action_type] == 'webhook') and \
                (match[index_action_subtype] == 'api_actions'):
                webhookURL = match[index_action_data]['webhook']
                print(f"Sending webhook to: {webhookURL}")
                coin_upper = match[index_trigger_data]['coin'].upper()
                payload = {
                    "dataJson": {
                        "trigger_data": {
                            "trigger":
                            match[colnames.index('trigger_subtype')],
                            "coin": coin_upper,
                            "chain": match[index_trigger_data]['chain'],
                            "proposal": str(currentProposal).capitalize()
                        }
                    }
                }
                print(payload)
                api_response = {}

                print("getting api action response")
                try:
                    api_response = runApiFunction(
                        match[index_action_data]["api_function"]["url"],
                        match[index_action_data]["api_function"]["path"],
                        match[index_action_data]["api_function"]["method"],
                        match[index_action_data]["api_function"]["data"])
                    payload["dataJson"]["api_response"] = api_response
                except Exception as e:
                    print(e)

                try:
                    params = {}
                    payload["dataJson"] = json.dumps(payload["dataJson"])
                    r = requests.post(url=webhookURL,
                                      params=params,
                                      data=payload)
                    print(r.json())
                    print(r.status_code)
                except Exception as e:
                    print(e)

            elif (match[index_action_type] == 'webhook') and \
                (match[index_action_subtype] == 'google_sheets'):
                webhookURL = match[index_action_data]['webhook']
                print(f"Sending webhook to: {webhookURL}")
                email_to_send = ""
                if webhookURL == "":
                    email_to_send = match[index_action_data]['email']
                    print(f"Update: Sending email to: {email_to_send}")
                coin_upper = match[index_trigger_data]['coin'].upper()
                payload = {
                    "dataJson": {
                        "trigger": match[colnames.index('trigger_subtype')],
                        "coin": coin_upper,
                        "chain": match[index_trigger_data]['chain'],
                        "proposal": str(currentProposal).capitalize()
                    }
                }
                print(payload)
                api_response = {}

                print("getting google sheets response")
                try:
                    api_response = runGSheetsFunction(
                        "https://sheets.googleapis.com/v4/spreadsheets/" +
                        match[index_action_data]["sheets_data"]
                        ["spreadsheetId"] + "/values/" +
                        match[index_action_data]["sheets_data"]["sheetName"] +
                        "!" + match[index_action_data]["sheets_data"]["rows"] +
                        "?key=AIzaSyDKjM9lKCZTTA66_dyTkrSaIThSSBaWu1s", "",
                        "GET", {})
                    payload["dataJson"]["api_response"] = api_response
                except Exception as e:
                    print(e)

                if webhookURL != "":
                    try:
                        params = {}
                        payload["dataJson"] = json.dumps(payload["dataJson"])
                        r = requests.post(url=webhookURL,
                                          params=params,
                                          data=payload)
                        print(r.json())
                        print(r.status_code)
                    except Exception as e:
                        print(e)

                elif email_to_send != "":
                    email_payload = {
                        "to_name":
                        "",
                        "to_email":
                        emailAddress,
                        "subject":
                        coin_upper + " New Voting Phase Period",
                        "text_line":
                        coin_upper + " New Voting Phase Period",
                        "main_title":
                        coin_upper + " New Voting Phase Period: " +
                        str(currentProposal).capitalize() +
                        " Google Sheets Data: " + json.dumps(api_response),
                        "trigger_text":
                        coin_upper + " New Voting Phase Period",
                        "action_text":
                        "send email to " + emailAddress,
                        "id_trigger_action":
                        match[index_unique_id]
                    }
                    print(email_payload)
                    try:
                        r = requests.post(
                            'https://eqzuf5sfph.execute-api.us-west-1.amazonaws.com/default/general-email-action-test-1_hello',
                            data=json.dumps(email_payload))
                        print(r.status_code)
                        print(r.text)
                    except Exception as e:
                        print(e)

    except ValueError as err:
        print("Cannot process matches - actionXXX columns not found: ", err)
        return

    for match in matches:
        pass
def processMatches(colnames, matches, isFromMatches):
    print(colnames)
    print(matches)
    try:
        index_tx_proposals = colnames.index('tx_proposals')
        index_action_type = colnames.index('action_type')
        index_action_subtype = colnames.index('action_subtype')
        index_action_data = colnames.index('action_data')
        index_trigger_data = colnames.index('trigger_data')
        index_trigger_action_id = colnames.index('trigger_action_id')
        index_unique_id = index_trigger_action_id
        try:
            index_unique_id = colnames.index('unique_id')
        except:
            print("No unique_id found.")
        for match in matches:
            print('match')
            print(match)
            if (match[index_action_type] == 'notification') and \
                (match[index_action_subtype] == 'send_email'):
                emailAddress = match[index_action_data]['email']
                print(f"Sending email to: {emailAddress}")

                coin_upper = match[index_trigger_data]['coin'].upper()
                payload = {
                    "to_name":
                    "",
                    "to_email":
                    emailAddress,
                    "subject":
                    coin_upper + " New Governance Proposal",
                    "text_line":
                    coin_upper + " New Governance Proposal",
                    "main_title":
                    coin_upper + " New Governance Proposal: " +
                    str(match[index_tx_proposals]) + " at Operation Hash " +
                    match[colnames.index('tx_hash')],
                    "trigger_text":
                    coin_upper + " New Governance Proposal",
                    "action_text":
                    "send email to " + emailAddress,
                    "id_trigger_action":
                    match[index_unique_id]
                }
                print(payload)
                try:
                    # Create link to call Mailgun or other email provider
                    r = requests.post('EMAIL-URL', data=json.dumps(payload))
                    print(r.status_code)
                    print(r.text)
                except Exception as e:
                    print(e)

            elif (match[index_action_type] == 'webhook') and \
                (match[index_action_subtype] == 'json'):
                webhookURL = match[index_action_data]['webhook']
                print(f"Sending webhook to: {webhookURL}")
                coin_upper = match[index_trigger_data]['coin'].upper()
                payload = {
                    "dataJson": {
                        "trigger": match[colnames.index('trigger_subtype')],
                        "coin": coin_upper,
                        "chain": match[index_trigger_data]['chain'],
                        "proposals": match[index_tx_proposals],
                        "txnHash": match[colnames.index('tx_hash')]
                    }
                }
                print(payload)
                try:
                    params = {}
                    payload["dataJson"] = json.dumps(payload["dataJson"])
                    r = requests.post(url=webhookURL,
                                      params=params,
                                      data=payload)
                    print(r.json())
                    print(r.status_code)
                except Exception as e:
                    print(e)

            elif (match[index_action_type] == 'webhook') and \
                (match[index_action_subtype] == 'rpc'):
                webhookURL = match[index_action_data]['webhook']
                print(f"Sending webhook to: {webhookURL}")
                coin_upper = match[index_trigger_data]['coin'].upper()
                payload = {
                    "dataJson": {
                        "trigger_data": {
                            "trigger":
                            match[colnames.index('trigger_subtype')],
                            "coin": coin_upper,
                            "chain": match[index_trigger_data]['chain'],
                            "proposals": match[index_tx_proposals],
                            "txnHash": match[colnames.index('tx_hash')]
                        }
                    }
                }
                print(payload)
                rpc_response = ""

                if match[index_action_data]["function"][
                        "name"] == 'forge_operation':
                    print("getting rpc response")
                    rpc_response = forgeOperation(
                        match[index_action_data]["function"]["data"]
                        ["sourceAddress"], match[index_action_data]["function"]
                        ["data"]["destinationAddress"],
                        match[index_action_data]["function"]["data"]["amount"])
                    payload["dataJson"]["rpc_response"] = rpc_response

                try:
                    params = {}
                    payload["dataJson"] = json.dumps(payload["dataJson"])
                    r = requests.post(url=webhookURL,
                                      params=params,
                                      data=payload)
                    print(r.json())
                    print(r.status_code)
                except Exception as e:
                    print(e)

            elif (match[index_action_type] == 'webhook') and \
                (match[index_action_subtype] == 'api_actions'):
                webhookURL = match[index_action_data]['webhook']
                print(f"Sending webhook to: {webhookURL}")
                coin_upper = match[index_trigger_data]['coin'].upper()
                payload = {
                    "dataJson": {
                        "trigger_data": {
                            "trigger":
                            match[colnames.index('trigger_subtype')],
                            "coin": coin_upper,
                            "chain": match[index_trigger_data]['chain'],
                            "proposals": match[index_tx_proposals],
                            "txnHash": match[colnames.index('tx_hash')]
                        }
                    }
                }
                print(payload)
                api_response = {}

                print("getting api action response")
                try:
                    api_response = runApiFunction(
                        match[index_action_data]["api_function"]["url"],
                        match[index_action_data]["api_function"]["path"],
                        match[index_action_data]["api_function"]["method"],
                        match[index_action_data]["api_function"]["data"])
                    payload["dataJson"]["api_response"] = api_response
                except Exception as e:
                    print(e)

                try:
                    params = {}
                    payload["dataJson"] = json.dumps(payload["dataJson"])
                    r = requests.post(url=webhookURL,
                                      params=params,
                                      data=payload)
                    print(r.json())
                    print(r.status_code)
                except Exception as e:
                    print(e)

            elif (match[index_action_type] == 'webhook') and \
                (match[index_action_subtype] == 'google_sheets'):
                webhookURL = match[index_action_data]['webhook']
                print(f"Sending webhook to: {webhookURL}")
                email_to_send = ""
                if webhookURL == "":
                    email_to_send = match[index_action_data]['email']
                    print(f"Update: Sending email to: {email_to_send}")
                coin_upper = match[index_trigger_data]['coin'].upper()
                payload = {
                    "dataJson": {
                        "trigger": match[colnames.index('trigger_subtype')],
                        "coin": coin_upper,
                        "chain": match[index_trigger_data]['chain'],
                        "proposals": match[index_tx_proposals],
                        "txnHash": match[colnames.index('tx_hash')]
                    }
                }
                print(payload)
                api_response = {}

                print("getting google sheets response")
                try:
                    api_response = runGSheetsFunction(
                        "https://sheets.googleapis.com/v4/spreadsheets/" +
                        match[index_action_data]["sheets_data"]
                        ["spreadsheetId"] + "/values/" +
                        match[index_action_data]["sheets_data"]["sheetName"] +
                        "!" + match[index_action_data]["sheets_data"]["rows"] +
                        "?key=GOOGLE-SHEETS-API-KEY", "", "GET", {})
                    payload["dataJson"]["api_response"] = api_response
                except Exception as e:
                    print(e)

                if webhookURL != "":
                    try:
                        params = {}
                        payload["dataJson"] = json.dumps(payload["dataJson"])
                        r = requests.post(url=webhookURL,
                                          params=params,
                                          data=payload)
                        print(r.json())
                        print(r.status_code)
                    except Exception as e:
                        print(e)

                elif email_to_send != "":
                    email_payload = {
                        "to_name":
                        "",
                        "to_email":
                        emailAddress,
                        "subject":
                        coin_upper + " New Governance Proposal",
                        "text_line":
                        coin_upper + " New Governance Proposal",
                        "main_title":
                        coin_upper + " New Governance Proposal: " +
                        str(match[index_tx_proposals]) +
                        " Google Sheets Data: " + json.dumps(api_response) +
                        " at Operation Hash " +
                        match[colnames.index('tx_hash')],
                        "trigger_text":
                        coin_upper + " New Governance Proposal",
                        "action_text":
                        "send email to " + emailAddress,
                        "id_trigger_action":
                        match[index_unique_id]
                    }
                    print(email_payload)
                    try:
                        r = requests.post('EMAIL-URL',
                                          data=json.dumps(email_payload))
                        print(r.status_code)
                        print(r.text)
                    except Exception as e:
                        print(e)

    except ValueError:
        print("Cannot process matches - actionXXX columns not found")
        return

    for match in matches:
        pass
def send_webhook(match, index_action_type, index_action_subtype,
                 index_action_data, dataJson):

    if (match[index_action_type] == 'webhook') and \
        (match[index_action_subtype] == 'json'):
        webhookURL = match[index_action_data]['webhook']
        print(f"Sending webhook to: {webhookURL}")
        payload = {"dataJson": dataJson}
        print(payload)
        try:
            params = {}
            payload["dataJson"] = json.dumps(payload["dataJson"])
            r = requests.post(url=webhookURL, params=params, data=payload)
            print(r.json())
            print(r.status_code)
        except Exception as e:
            print(e)

    elif (match[index_action_type] == 'webhook') and \
        (match[index_action_subtype] == 'rpc'):
        webhookURL = match[index_action_data]['webhook']
        print(f"Sending webhook to: {webhookURL}")
        payload = {"dataJson": dataJson}
        print(payload)
        rpc_response = ""

        if match[index_action_data]["function"]["name"] == 'forge_operation':
            print("getting rpc response")
            rpc_response = forgeOperation(
                match[index_action_data]["function"]["data"]["sourceAddress"],
                match[index_action_data]["function"]["data"]
                ["destinationAddress"],
                match[index_action_data]["function"]["data"]["amount"])
            payload["dataJson"]["rpc_response"] = rpc_response

        try:
            params = {}
            payload["dataJson"] = json.dumps(payload["dataJson"])
            r = requests.post(url=webhookURL, params=params, data=payload)
            print(r.json())
            print(r.status_code)
        except Exception as e:
            print(e)

    elif (match[index_action_type] == 'webhook') and \
        (match[index_action_subtype] == 'api_actions'):
        webhookURL = match[index_action_data]['webhook']
        print(f"Sending webhook to: {webhookURL}")
        payload = {"dataJson": dataJson}
        print(payload)
        api_response = {}

        print("getting api action response")
        try:
            api_response = runApiFunction(
                match[index_action_data]["api_function"]["url"],
                match[index_action_data]["api_function"]["path"],
                match[index_action_data]["api_function"]["method"],
                match[index_action_data]["api_function"]["data"])
            payload["dataJson"]["api_response"] = api_response
        except Exception as e:
            print(e)

        try:
            params = {}
            payload["dataJson"] = json.dumps(payload["dataJson"])
            r = requests.post(url=webhookURL, params=params, data=payload)
            print(r.json())
            print(r.status_code)
        except Exception as e:
            print(e)

    elif (match[index_action_type] == 'webhook') and \
        (match[index_action_subtype] == 'google_sheets'):
        webhookURL = match[index_action_data]['webhook']
        print(f"Sending webhook to: {webhookURL}")
        email_to_send = ""
        if webhookURL == "":
            email_to_send = match[index_action_data]['email']
            print(f"Update: Sending email to: {email_to_send}")

        payload = {"dataJson": dataJson}
        print(payload)
        api_response = {}

        print("getting google sheets response")
        try:
            api_response = runGSheetsFunction(
                "https://sheets.googleapis.com/v4/spreadsheets/" +
                match[index_action_data]["sheets_data"]["spreadsheetId"] +
                "/values/" +
                match[index_action_data]["sheets_data"]["sheetName"] + "!" +
                match[index_action_data]["sheets_data"]["rows"] +
                "?key=GOOGLE-SHEETS-API-KEY", "", "GET", {})
            payload["dataJson"]["api_response"] = api_response
        except Exception as e:
            print(e)

        if webhookURL != "":
            try:
                params = {}
                payload["dataJson"] = json.dumps(payload["dataJson"])
                r = requests.post(url=webhookURL, params=params, data=payload)
                print(r.json())
                print(r.status_code)
            except Exception as e:
                print(e)

        elif email_to_send != "":
            try:
                coin_upper = match[colnames.index(
                    'trigger_data')]['coin'].upper()
                trigger_subtype_str = match[colnames.index('trigger_subtype')]
                if trigger_subtype_str == 'pricing':
                    trigger_subtype_str = 'price'
                payload = {
                    "to_name":
                    "",
                    "to_email":
                    email_to_send,
                    "subject":
                    coin_upper +
                    " " + match[colnames.index('trigger_subtype')].replace(
                        '_', ' ').capitalize() + " is " + match[colnames.index(
                            'trigger_data')]['direction'].capitalize() + " $" +
                    str('{0:,.2f}'.format(
                        float(match[colnames.index('trigger_data')]
                              [trigger_subtype_str]))),
                    "text_line":
                    coin_upper +
                    " " + match[colnames.index('trigger_subtype')].replace(
                        '_', ' ').capitalize() + " is " + match[colnames.index(
                            'trigger_data')]['direction'].capitalize() + " $" +
                    str("{0:,.2f}".format(
                        float(match[colnames.index('trigger_data')]
                              [trigger_subtype_str]))),
                    "main_title":
                    coin_upper +
                    " " + match[colnames.index('trigger_subtype')].replace(
                        '_', ' ').capitalize() + " is " + match[colnames.index(
                            'trigger_data')]['direction'].capitalize() + " $" +
                    str("{0:,.2f}".format(
                        float(match[colnames.index('trigger_data')]
                              [trigger_subtype_str]))) +
                    " Google Sheets Data: " + json.dumps(api_response),
                    "trigger_text":
                    coin_upper +
                    " " + match[colnames.index('trigger_subtype')].replace(
                        '_', ' ').capitalize() + " is " + match[colnames.index(
                            'trigger_data')]['direction'].capitalize() + " $" +
                    str("{0:,.2f}".format(
                        float(match[colnames.index('trigger_data')]
                              [trigger_subtype_str]))),
                    "action_text":
                    "send email to " + emailAddress,
                    "id_trigger_action":
                    match[index_trigger_action_id]
                }
                print(payload)
                try:
                    r = requests.post('EMAIL-URL', data=json.dumps(payload))
                    print(r.status_code)
                    print(r.text)
                except Exception as e:
                    print(e)
                return
            except Exception as e:
                print(e)