Python Forum

Full Version: if conditional not firing - unable to understand why
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi Folks -
I'm running into a weird issue where when I add two if conditionals, the portion of code following the second if conditional when true does not execute.

For instance, this code works fine:

def sendemail(email, data):
    ret = ''
    try:
        me = '[email protected]'  # You can update the helpdesk mail address.
        my_password = 'pass'  # Mailbox Password
        you = email
        msg = MIMEMultipart('alternative')
        msg['Subject'] = 'WARNING: Unassigned Request Type(s) and/or Catagory(ies) and/or Subcategory(ies)  etc : ' + time.strftime('%c')
        msg['From'] = me
        msg['To'] = email

        html = data
        part2 = MIMEText(html, 'html')

        msg.attach(part2)

        s = smtplib.SMTP_SSL('server')  # Mail Server Host name
        s.login(me, my_password)

        s.sendmail(me, you, msg.as_string())
        s.quit()
        ret = 'success'
    except smtplib.SMTPException as err:
        print ('Unable to Send emails : ', err)
        ret = 'failure'
    return ret


reportJson = str(sys.argv[1])
json_data = open(reportJson).read()
data = json.loads(json_data)
counter = 0
techEmail = ''
message = \
    """<html><html><head><style>table {font-family: arial, sans-serif;border-collapse: collapse;width: 100%;}td, th {border: 1px solid #dddddd;text-align: left;padding: 8px;}tr:nth-child(even) {background-color: #dddddd;}</style></head><body><table><tr><th>RequestID</th><th>Site</th><th>RequestType</th><th>Status</th><th>Requester</th><th>Subject</th></tr>"""
length = len(data)

for dObj in data:
    requestID = dObj.get('requestid')
    site = dObj.get('site')
    RequestType = dObj.get('RequestType')
    status = dObj.get('status')
    requester = dObj.get('requester')
    subject = dObj.get('subject')
    Violated = dObj.get('Violated')
    ApproachingSLA = dObj.get('ApproachingSLA')
    TechnicianUpdated = dObj.get('TechnicianUpdated')
    email = dObj.get('email')

    if RequestType is None:
        RequestType = 'Not Assigned'
            if counter == 0:
                techEmail = email
            counter += 1
            if techEmail == email:
                message += \
                    """<tr><td>""" \
                    + requestID + """</td><td>""" + site + """</td><td>""" + RequestType + """</td><td>""" \
                    + status + """</td><td>""" + requester + """</td><td>""" \
                    + subject + """</td></tr>"""
                if counter == length:
                    message += '</table></body></html>'
                    r = sendemail(techEmail, message)
                    print(techEmail)
            else:
                message += '</table></body></html>'
                r = sendemail(techEmail, message)
                print(techEmail)
                techEmail = email
                message = \
                    """<html><head><style>table {font-family: arial, sans-serif;border-collapse: collapse;width: 100%;}td, th {border: 1px solid #dddddd;text-align: left;padding: 8px;}tr:nth-child(even) {background-color: #dddddd;}</style></head><body><table><tr><th>RequestID</th><th>Site</th><th>RequestType</th><th>Status</th><th>Requester</th><th>Subject</th></tr><tr><td>""" \
                    + requestID + """</td><td>""" + site + """</td><td>""" + RequestType + """</td><td>""" \
                    + status + """</td><td>""" + requester + """</td><td>""" \
                    + subject + """</td></tr>"""
                if counter == length:
                    message = \
                        """<html><head><style>table {font-family: arial, sans-serif;border-collapse: collapse;width: 100%;}td, th {border: 1px solid #dddddd;text-align: left;padding: 8px;}tr:nth-child(even) {background-color: #dddddd;}</style></head><body><table><tr><th>RequestID</th><th>Site</th><th>RequestType</th><th>Status</th><th>Requester</th><th>Subject</th></tr><tr><td>""" \
                        + requestID + """</td><td>""" + site + """</td><td>""" + RequestType + """</td><td>""" \
                        + status + """</td><td>""" + requester + """</td><td>""" \
                        + subject + """</td></tr></table></body></html>"""
                    r = sendemail(techEmail, message)
                    print(techEmail)

if(r=="success"):
	print("Reports sent successfully to the respective techs")
else:
	print("Unable to send reports")
However when I add (2) if conditionals to the beginning of the loop, even though the second if conditional is true, it doesn't continue to execute.

In the interest of space, I've only copied int he portion where I added the if conditionals (Violated & ApproachingSLA).

    if RequestType is None:
        RequestType = 'Not Assigned'
    if Violated == 'No':
        if ApproachingSLA == 'Yes':
            if counter == 0:
                techEmail = email
            counter += 1
            if techEmail == email:
Any idea why? Thanks!
what is the output when you print RequestType, Violated and ApproachingSLA just before the if blocks
What have you tried to debug this. Have you printed the variables to see what they contain, RequestType, Violated, etc? The Python syntax looks OK to me and that is all we can do because we don't have any of the values for the variables.
Hi Folks -

Yes I have printed the variables and all show correctly. That's the weird issue.
I see indentation errors, which wouldn't cause your problem, but it does make me wonder if the code you've posted is indented identically. Could you please post the version with the problematic conditions implemented? Otherwise, we're all just guessing at the logical flow of the code.
(Oct-20-2018, 01:25 AM)stullis Wrote: [ -> ]I see indentation errors, which wouldn't cause your problem, but it does make me wonder if the code you've posted is indented identically. Could you please post the version with the problematic conditions implemented? Otherwise, we're all just guessing at the logical flow of the code.

Sure thing, here you go!

#!/usr/bin/python
# -*- coding: utf-8 -*-

import requests
import sys
import json
import datetime
import smtplib
import time
from pprint import pprint
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


def sendemail(email, data):
    ret = ''
    try:
        me = 'email'  # You can update the helpdesk mail address.
        my_password = 'password'  # Mailbox Password
        you = email
        msg = MIMEMultipart('alternative')
        msg['Subject'] = 'WARNING: Unassigned Request Type(s) and/or Catagory(ies) and/or Subcategory(ies)  etc : ' + time.strftime('%c')
        msg['From'] = me
        msg['To'] = email

        html = data
        part2 = MIMEText(html, 'html')

        msg.attach(part2)

        s = smtplib.SMTP_SSL('mail')  # Mail Server Host name
        s.login(me, my_password)

        s.sendmail(me, you, msg.as_string())
        s.quit()
        ret = 'success'
    except smtplib.SMTPException as err:
        print ('Unable to Send emails : ', err)
        ret = 'failure'
    return ret


reportJson = str(sys.argv[1])
json_data = open(reportJson).read()
data = json.loads(json_data)
counter = 0
techEmail = ''
message = \
    """<html><html><head><style>table {font-family: arial, sans-serif;border-collapse: collapse;width: 100%;}td, th {border: 1px solid #dddddd;text-align: left;padding: 8px;}tr:nth-child(even) {background-color: #dddddd;}</style></head><body><table><tr><th>RequestID</th><th>Site</th><th>RequestType</th><th>Status</th><th>Requester</th><th>Subject</th></tr>"""
length = len(data)

for dObj in data:
    requestID = dObj.get('requestid')
    site = dObj.get('site')
    RequestType = dObj.get('RequestType')
    status = dObj.get('status')
    requester = dObj.get('requester')
    subject = dObj.get('subject')
    email = dObj.get('email')
    if RequestType is None:
        RequestType = 'Not Assigned'
    if Violated == 'No':
        if ApproachingSLA == 'Yes':
            if counter == 0:
                techEmail = email
            counter += 1
            if techEmail == email:
                message += \
                    """<tr><td>""" \
                    + requestID + """</td><td>""" + site + """</td><td>""" + RequestType + """</td><td>""" \
                    + status + """</td><td>""" + requester + """</td><td>""" \
                    + subject + """</td></tr>"""
                if counter == length:
                    message += '</table></body></html>'
                    r = sendemail(techEmail, message)
                    print(techEmail)
            else:
                message += '</table></body></html>'
                r = sendemail(techEmail, message)
                print(techEmail)
                techEmail = email
                message = \
                    """<html><head><style>table {font-family: arial, sans-serif;border-collapse: collapse;width: 100%;}td, th {border: 1px solid #dddddd;text-align: left;padding: 8px;}tr:nth-child(even) {background-color: #dddddd;}</style></head><body><table><tr><th>RequestID</th><th>Site</th><th>RequestType</th><th>Status</th><th>Requester</th><th>Subject</th></tr><tr><td>""" \
                    + requestID + """</td><td>""" + site + """</td><td>""" + RequestType + """</td><td>""" \
                    + status + """</td><td>""" + requester + """</td><td>""" \
                    + subject + """</td></tr>"""
                if counter == length:
                    message = \
                        """<html><head><style>table {font-family: arial, sans-serif;border-collapse: collapse;width: 100%;}td, th {border: 1px solid #dddddd;text-align: left;padding: 8px;}tr:nth-child(even) {background-color: #dddddd;}</style></head><body><table><tr><th>RequestID</th><th>Site</th><th>RequestType</th><th>Status</th><th>Requester</th><th>Subject</th></tr><tr><td>""" \
                        + requestID + """</td><td>""" + site + """</td><td>""" + RequestType + """</td><td>""" \
                        + status + """</td><td>""" + requester + """</td><td>""" \
                        + subject + """</td></tr></table></body></html>"""
                    r = sendemail(techEmail, message)
                    print(techEmail)

if(r=="success"):
	print("Reports sent successfully to the respective techs")
else:
Is it possible to post an example of the JSON data you are using?
I see two problems:

1. Line 66 needs to be indented more.
2. The code does not set Violated or ApproachingSLA before testing them, which should cause an exception.