Python Forum
Variable reported as not set, though I"ve set it before...
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Variable reported as not set, though I"ve set it before...
#3
I've added some comments... "line <number<=> so where you find #line 128 that means that comment line is on line 128

added #line numbers for 128, before the variable is set, #line 441 where GetEFTDBConnection() is defined and #line 572 where the error originates from.

G


Error stack

* Running on http://0.0.0.0:5003/ (Press CTRL+C to quit)
[2018-04-18 21:39:21,207] ERROR in app: Exception on /eftdashboard [GET]
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "opswatchflask.py", line 573, in eftdashboard
if gotEFTConnection == False:
UnboundLocalError: local variable 'gotEFTConnection' referenced before assignment
127.0.0.1 - - [18/Apr/2018 21:39:21] "GET /eftdashboard HTTP/1.1" 500 -


#
#
#
from flask import Flask, request, render_template
import cx_Oracle
import os
import time
import sys
import datetime



EXIT_FAILURE=1                                      # Exit variable for sys.exit

# Set these to defaults, we'll get the actual values from OS environment in a second, (line 131 onwards)
eft_connectString = ''                              # Empty variable to be used for connection string
FLASK_DEBUG = False                                 # FLASK Debug mode by default disabled, it can either be enabled by changing this or by setting DEBUG > 0
DEBUGLEVEL = 1                                      # My Debug level/s -> To Screen/terminal
                                                    # > 0 print basic connection and cursor details out
                                                    # >= 2 print sql statements to be executed
                                                    # >= 3 print variable values from queries to screen,
                                                    # ... not all data though as the data sets can be large, so only single row results sets
PORT=5000                                           # Default port - we change this below depending on environment argument passed in.

# these are Global variables, values from =>: OPS_WATCHER_PARAMETERS, populated in eft_refresettings()
delivery_date           = ''
next_output_date        = ''
timeC                   = ''

# line 128
gotEFTConnection        = False                     # PLANNED - We start with no connection for all the sub pages, as the page is called the first time then
                                                    # we connect to the relevant target database



########## EFT Queries

# This is where we're going to get the Warning and Alert values out of the ops_watcher_parameters table and then populate
# the global variables with
statement_globalvars = "select eftdelivery_elapse_warning, eftdelivery_elapse_alert, eftload_elapse_warning, eftload_elapse_alert, eftvalidate_elapse_warning, eftvalidate_elapse_alert, refreshtime from ops_watcher_parameters"

# EFT Delivery - Prepare - ( Get todays processing date from ops_system_parameters.process_active_ind = 'Y' )
statement_date = "Select max(to_char(process_date, 'DD/MON/YYYY')) from ops_system_parameters"

# EFT Delivery -  ( xmit_ind = 'Y' and trim(queue_file_name) in ('INQUE', 'ONLREC', 'ONLUNP') )
statement_delivery = "select filename, to_char(created_date, 'YYYY/MM/DD HH24:MM:SS') CREATED_DATE, case when((extract(DAY from DIFF)) * 24 * 60 * 60 + (extract(HOUR from DIFF) ) *60 * 60 + (extract(MINUTE from DIFF))*60 + extract(SECOND from DIFF)) > :eftdelivery_elapse_alert then 'ALERT' when((extract(DAY from DIFF)) * 24 * 60 * 60 + (extract(HOUR from DIFF) ) *60 * 60 + (extract(MINUTE from DIFF))*60 + extract(SECOND from DIFF)) > :eftdelivery_elapse_warning then 'WARNING' else '' end as STATUS from (select filename, created_date, (systimestamp - created_date) DIFF from del_delivery_files where filename is not null and xmit_ind = 'Y' and trim(queue_file_name) in ('INQUE', 'ONLREC', 'ONLUNP') order by created_date asc)"

# EFT Loading - ( process_status = '2' )
statement_load      = "Select workunit_ref_number, to_char(load_start_time, 'YYYY/MM/DD HH24:MM:SS'), case when((extract(DAY from DIFF)) * 24 * 60 * 60 + (extract(HOUR from DIFF) ) *60 * 60 + (extract(MINUTE from DIFF))*60 + extract(SECOND from DIFF)) > :eftload_elapse_alert then 'ALERT' when((extract(DAY from DIFF)) * 24 * 60 * 60 + (extract(HOUR from DIFF) ) *60 * 60 + (extract(MINUTE from DIFF))*60 + extract(SECOND from DIFF)) > :eftload_elapse_warning then 'WARNING' else '' end as STATUS from (select workunit_ref_number, load_start_time, (systimestamp - load_start_time) DIFF from ops_watcher_details where process_status = '2' order by load_start_time desc)"

# EFT Validating - ( validate_start_date is not null and validate_end_date is null )
statement_validate = "select workunit_ref_number, process_status, to_char(load_end_time, 'YYYY/MM/DD HH24:MM:SS'), to_char(validate_start_time, 'YYYY/MM/DD HH24:MM:SS'), record_count, case when((extract(DAY from DIFF)) * 24 * 60 * 60 + (extract(HOUR from DIFF) ) *60 * 60 + (extract(MINUTE from DIFF))*60 + extract(SECOND from DIFF)) > :eftvalidate_elapse_alert then 'ALERT' when((extract(DAY from DIFF)) * 24 * 60 * 60 + (extract(HOUR from DIFF) ) *60 * 60 + (extract(MINUTE from DIFF))*60 + extract(SECOND from DIFF)) > :eftvalidate_elapse_warning  then 'WARNING' else '' end as STATUS from (select workunit_ref_number, process_status, load_end_time, validate_start_time, record_count, (systimestamp - nvl(validate_start_time, load_end_time )) DIFF from ops_watcher_details where validate_start_time is not null and validate_end_time is null order by validate_start_time asc)"

# EFT Aggregates
statement_aggregates = "select workunit_ref_number as wrkunit, dataset_ref_number as dtset, installation_code as icode from Ops_user_hdrs where user_limits_exceeded_indicator in ('Y','B','C','D') order by installation_code asc"

# EFT Reporting
statement_efvetrpt   = "select 'efvetrpt',   count(*) from ops_vet_report_parameters where vet_report_produced_ind = 'N'"
statement_efpdistrib = "select 'efpdistrib', count(*) from ops_z1_z9_input_outputs where internal_indicator = 'N' and distributed_indicator = 'N'"
statement_efpaxd020  = "select 'efpaxd020',  count(*) from ops_z1_z9_input_outputs where internal_indicator = 'N' and distributed_indicator = 'Y' and axd_created_indicator = 'N' and TRANSMIT_INDICATOR = 'Y'"

    # EFT Extract - Prepare
statement_nextoutputdate = "Select max(to_char(process_date, 'DD/MON/YY')) from ops_system_parameters"

# EFT Extract
statement_efconman      = "select /*+ INDEX_ASC(OPS_USER_HDRS OUH_PK)*/ 'efconman', count(1) FROM OPS_USER_HDRS WHERE PROCESS_STATUS = '7' AND OPS_STATUS     = 'A' AND UNPAIDS_INCLUDED_INDICATOR    = 'Y'"
statement_efextract     = "select 'efextract', count(*) from ops_user_hdrs where process_status = 'A' and ops_status != 'F' and next_output_date = :next_output_date"
statement_efval001      = "select 'efval001',count(1) from ops_installation_hdrs where process_status = '3'"

# Number Files to process in each of the program stream
statement_delivery_cnt      = "select count(1) from del_delivery_files where filename is not null and xmit_ind = 'Y' and trim(queue_file_name) in ('INQUE', 'ONLREC', 'ONLUNP') "
statement_load_cnt          = "select count(1) from ops_watcher_details where process_status = '2'"
statement_validate_cnt      = "select count(1) from ops_watcher_details where validate_start_time is not null and validate_end_time is null"
statement_aggregates_cnt    = "select count(1) from Ops_user_hdrs where user_limits_exceeded_indicator in ('Y','B','C','D')"



def correctusage():
	print ''
	print 'Welcome to OPSWatcher'
	print ''
	print '  OPSWatcher needs to be run with a input parameter specifying the desired environment to dashboard:'
	print ''
	print '  ./opswacthflask.py <environment>'
	print ''
	print '  Valid environment inputs are: prd  uat  iat  dev'
	print ''
	print ''
	sys.exit(EXIT_FAILURE)

# end correctusage()


def getAppEnvVariables(opswatchenv):
    if opswatchenv == 'prd':
        eft_connectString   = os.getenv('DBCON_EFTP')                           # Whats the database connection string
        FLASK_DEBUG         = os.getenv('OPSW_EFTP_FLASK_DEBUG')                # Flask Debug True/False
        DEBUGLEVEL          = os.getenv('OPSW_EFTP_DEBUGLEVEL')                 # Screen based Debug level
        PORT                = os.getenv('OPSW_EFTP_PORT')                       # Flask port to listen on

        opswatchenv = 'Production'

    elif opswatchenv =='uat':
        eft_connectString   = os.getenv('DBCON_EFTU')
        FLASK_DEBUG         = os.getenv('OPSW_EFTU_FLASK_DEBUG')
        DEBUGLEVEL          = os.getenv('OPSW_EFTP_DEBUGLEVEL')
        PORT                = os.getenv('OPSW_EFTU_PORT')

        opswatchenv = 'UAT'

    elif opswatchenv =='iat':
        eft_connectString   = os.getenv('DBCON_EFTI')
        FLASK_DEBUG         = os.getenv('OPSW_EFTI_FLASK_DEBUG')
        DEBUGLEVEL          = os.getenv('OPSW_EFTP_DEBUGLEVEL')
        PORT                = os.getenv('OPSW_EFTI_PORT')

        opswatchenv = 'IAT'

    elif opswatchenv =='dev':
        eft_connectString   = os.getenv('DBCON_EFTD')
        FLASK_DEBUG         = os.getenv('OPSW_EFTD_FLASK_DEBUG')
        DEBUGLEVEL          = os.getenv('OPSW_EFTP_DEBUGLEVEL')
        PORT                = os.getenv('OPSW_EFTD_PORT')

        opswatchenv = 'Development'

    elif opswatchenv =='orcl':
        eft_connectString   = os.getenv('DBCON_ORCL')
        FLASK_DEBUG         = os.getenv('OPSW_ORCL_FLASK_DEBUG')
        DEBUGLEVEL          = os.getenv('OPSW_ORCL_DEBUGLEVEL')
        PORT                = os.getenv('OPSW_ORCL_PORT')

        opswatchenv = 'George : orcl'

    else:
        print correctusage()


    if FLASK_DEBUG == 'True': FLASK_DEBUG = True
    else: FLASK_DEBUG = False

    DEBUGLEVEL = int(DEBUGLEVEL)

    PORT = int(PORT)

    # end opswatchenv == 'prd'
    return opswatchenv, eft_connectString, FLASK_DEBUG, DEBUGLEVEL, PORT

# end getAppEnvVariables():


def eft_refreshsettings(eft_cursor):

    # get values from ops_watcher_parameters
    try:
        eft_cursor.execute(statement_globalvars)
        configurationsettings = eft_cursor.fetchone()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    # Next Delivery date from ops_system_parameters
    try:
        eft_cursor.execute(statement_date)
        res = eft_cursor.fetchone()
        delivery_date = res[0]

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    # Next Delivery date from ops_system_parameters, same date as above, just formated different
    try:
        eft_cursor.execute(statement_nextoutputdate)
        res = eft_cursor.fetchone()
        next_output_date = res[0]

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return configurationsettings, delivery_date, next_output_date
#end refreshsettings


def eft_delivery(eft_cursor, delivery_date, configurationsettings):

    try:

        eft_cursor.execute(statement_delivery_cnt)
        results = eft_cursor.fetchone()
        results_delivery_cnt = results[0]

        eft_cursor.execute(statement_delivery, { 'eftdelivery_elapse_alert': configurationsettings[0], 'eftdelivery_elapse_warning': configurationsettings[1]})
        results_delivery = eft_cursor.fetchall()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return results_delivery_cnt, results_delivery
#end eft_delivery


def eft_load(eft_cursor, configurationsettings):
    try:

        eft_cursor.execute(statement_load_cnt )
        results = eft_cursor.fetchone()
        results_load_cnt = results[0]

        eft_cursor.execute(statement_load, {'eftload_elapse_warning':configurationsettings[2] ,'eftload_elapse_alert':configurationsettings[3]})
        results_load = eft_cursor.fetchall()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return results_load_cnt, results_load
#end eft_load


def eft_validate(eft_cursor, configurationsettings):
    try:

        eft_cursor.execute(statement_validate_cnt)
        results = eft_cursor.fetchone()
        results_validate_cnt = results[0]

        eft_cursor.execute(statement_validate, {'eftvalidate_elapse_warning':configurationsettings[4] ,'eftvalidate_elapse_alert':configurationsettings[5] })
        results_validate = eft_cursor.fetchall()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return results_validate_cnt, results_validate
#end eft_validate


def eft_aggregates(eft_cursor):
    try:

        eft_cursor.execute(statement_aggregates_cnt)
        results = eft_cursor.fetchone()
        results_aggregates_cnt = results[0]

        eft_cursor.execute(statement_aggregates)
        results_aggregates = eft_cursor.fetchall()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return results_aggregates_cnt, results_aggregates
#end eft_finance


def eft_efvetrpt(eft_cursor):
    try:

        eft_cursor.execute(statement_efvetrpt)
        results_efvetrpt = eft_cursor.fetchall()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return results_efvetrpt
#end eft_efvetrpt


def eft_efpdistrib(eft_cursor):
    try:

        eft_cursor.execute(statement_efpdistrib)
        results_efpdistrib = eft_cursor.fetchall()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return results_efpdistrib
#end eft_efpdistrib


def eft_efpaxd020(eft_cursor):
    try:

        eft_cursor.execute(statement_efpaxd020)
        results_efpaxd020 = eft_cursor.fetchall()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return results_efpaxd020
#end eft_efpaxd020


def eft_efconman(eft_cursor):
    try:

        eft_cursor.execute(statement_efconman)
        results_efconman = eft_cursor.fetchall()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return results_efconman
#end eft_efconman


def eft_efextract(eft_cursor, next_output_date):
    try:

        eft_cursor.execute(statement_efextract, {'next_output_date': next_output_date})
        results_efextract = eft_cursor.fetchall()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return results_efextract
#end eft_efextract


def eft_validate_efval001(eft_cursor):
    try:

        eft_cursor.execute(statement_efval001)
        results_validate_efval001 = eft_cursor.fetchall()

    except cx_Oracle.DatabaseError as e:
        error, = e.args
        print 'Oracle Error:', error

    return results_validate_efval001
#end eft_validate_tobeval

#line 441
def GetEFTDBConnection(eft_connectString, opswatchenv):

    # Get the connection to the database
    try:

        ########## EFT Database Connection and Cursor

        eft_connection = cx_Oracle.connect(eft_connectString)

        # Query all rows
        eft_cursor = eft_connection.cursor()

        if DEBUGLEVEL > 0:
            print "** ", opswatchenv, " - EFT ConnectString   :", eft_connectString
            print "** ", opswatchenv, " - Connected to EFT DB :", eft_connection
            print "** ", opswatchenv, " - EFT Query Cursor    :", eft_cursor
        # end if DEBUG > 0:

        return eft_cursor

    except Exception, e:
        print "** ", opswatchenv, "Exception :", e
        print ''
        # end DEBUG > 0:

    # end try

# end GetEFTDBConnection():


###################################################################################################
#                                        OK Lets START
###################################################################################################

if len(sys.argv) <> 2:
    correctusage()

# end if len(sys.argv) <> 2

opswatchenv = sys.argv[1]

opswatchenv, eft_connectString, FLASK_DEBUG, DEBUG, PORT = getAppEnvVariables(opswatchenv)


if DEBUGLEVEL > 0:
    os.system('clear')
    print '*******************************************'
    print '*                                         *'
    print '*         Welcome to OPSWatcher:          *'
    print '*                                         *'
    print '*    ', time.strftime('%Y/%m/%d %H:%M:%S'),'                *'
    print '*                                         *'
    print '*    by [email protected]        *'
    print '*******************************************'
    print ''
    print "** " , opswatchenv       , " - FLASK_DEBUG         : " , FLASK_DEBUG
    print "** " , opswatchenv       , " - OPSW_*_DEBUGLEVEL   : " , DEBUGLEVEL
    print "** " , opswatchenv       , " - PORT                : " , PORT
    print ""

# end if DEBUGLEVEL > 0


if DEBUGLEVEL >= 2:
    print ""
    print "******************************"
    print "*    Defined Queries         *"
    print "******************************"
    print ""
    print "** " , opswatchenv       , " - statement_globalvars     :", statement_globalvars
    print ''
    print "** " , opswatchenv       , " - statement_date           :", statement_date
    print ''
    print "** " , opswatchenv       , " - statement_delivery       : +delivery_date ", statement_delivery
    print ''
    print "** " , opswatchenv       , " - statement_load           :", statement_load
    print ''
    print "** " , opswatchenv       , " - statement_validate       :", statement_validate
    print ''
    print "** " , opswatchenv       , " - statement_aggregates     :", statement_aggregates
    print ''
    print "** " , opswatchenv       , " - statement_efvetrpt       :", statement_efvetrpt
    print ''
    print "** " , opswatchenv       , " - statement_efpdistrib     :", statement_efpdistrib
    print ''
    print "** " , opswatchenv       , " - statement_efpaxd020      :", statement_efpaxd020
    print ''
    print "** " , opswatchenv       , " - statement_nextoutputdate :", statement_nextoutputdate
    print ''
    print "** " , opswatchenv       , " - statement_efconman       :", statement_efconman
    print ''
    print "** " , opswatchenv       , " - statement_efextract      :", statement_efextract
    print ''
    print "** " , opswatchenv       , " - statement_efval001       :", statement_efval001
    print ''
    print "** " , opswatchenv       , " - statement_delivery_cnt   : +delivery_date ",  statement_delivery_cnt
    print ''
    print "** " , opswatchenv       , " - statement_load_cnt       :", statement_load_cnt
    print ''
    print "** " , opswatchenv       , " - statement_validate_cnt   :", statement_validate_cnt
    print ''
    print "** " , opswatchenv       , " - statement_aggregates_cnt :", statement_aggregates_cnt
    print ''

# end DEBUGLEVEL >= 2:


# Start the FLASK Application
app = Flask(__name__)

# Little waste of time for now... this will always fire at this point, idea is to later move this so that it only fires
# once for the first time the EFT Dashboard is called.
#if gotEFTConnection == False:
#    #   eft_cursor = GetEFTDBConnection(eft_connectString, opswatchenv)
#    gotEFTConnection = True

# end gotEFTConnection == False:


@app.route("/")
def main():

	return render_template("index.html")
#end main

# line 567
@app.route("/eftdashboard")
def eftdashboard( ):

    # One Single Dashboard with all the EFT information

    if gotEFTConnection == False:
        eft_cursor = GetEFTDBConnection(eft_connectString, opswatchenv)
        gotEFTConnection = True

    # end if gotEFTConnection:

    configurationsettings, delivery_date, next_output_date = eft_refreshsettings(eft_cursor)

    timeC = time.strftime('%Y/%m/%d %H:%M:%S')

    # Refresh the settings to use before we continue, just in case somethign has changed in the parameter tables.
    configurationsettings, delivery_date, next_output_date = eft_refreshsettings(eft_cursor)

    # Delivery
    results_delivery_cnt, results_delivery = eft_delivery(eft_cursor, delivery_date, configurationsettings)

    # Load
    results_load_cnt, results_load = eft_load(eft_cursor, configurationsettings)

    # Validate
    results_validate_cnt, results_validate = eft_validate(eft_cursor, configurationsettings)

    # Finance
    results_aggregates_cnt, results_aggregates = eft_aggregates(eft_cursor)

    # efvetrpt
    results_efvetrpt = eft_efvetrpt(eft_cursor)

    # efpdistrib
    results_efpdistrib = eft_efpdistrib(eft_cursor)

    # efpaxd020
    results_efpaxd020 = eft_efpaxd020(eft_cursor)

    # efconman
    results_efconman = eft_efconman(eft_cursor)

    # efextract
    results_efextract = eft_efextract(eft_cursor, next_output_date)

    # validate_tobeval
    results_validate_efval001 = eft_validate_efval001(eft_cursor)


    return render_template( "eftdashboard.html",
                            dt=timeC,
                            eftenvironment=opswatchenv,
                            configsettings=configurationsettings,
                            delivery_date=delivery_date,
                            next_output_date=next_output_date,
                            delivery_result=results_delivery,
                            load_result=results_load,
                            validate_result=results_validate,
                            aggregates_result=results_aggregates,
                            efvetrpt_result=results_efvetrpt,
                            efpdistrib_result=results_efpdistrib,
                            efpaxd020_result=results_efpaxd020,
                            efconman_result=results_efconman,
                            efextract_result=results_efextract,
                            validate_result_efval001=results_validate_efval001,
                            delivery_result_cnt=results_delivery_cnt,
                            load_result_cnt=results_load_cnt,
                            validate_result_cnt=results_validate_cnt,
                            aggregates_result_cnt=results_aggregates_cnt)
#end eftdashboard


if __name__ == "__main__":
 	app.run(host='0.0.0.0', debug=FLASK_DEBUG, port=PORT)
Reply


Messages In This Thread
RE: Variable reported as not set, though I"ve set it before... - by georgelza - Apr-18-2018, 07:44 PM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020