Untitled

 avatar
unknown
plain_text
a month ago
3.9 kB
2
Indexable
import os
os.environ['SQLITE_DB_PATH']  = r'/c01/home/lidtd3o/APP_K/app_db_new.db'
def get_parent_child(program_id, var_name):
    """
    Function to get parent and child of the target variable
    """
    #Connect db & set base dict
    conn             = sqlite3.connect(os.getenv('SQLITE_DB_PATH'))
    parent_child_var = {(var_name, var_name, program_id, 'paraname')}
    master_set       = set()
    #While loop to find parent/child
    while parent_child_var:
        current_var  = parent_child_var.pop()
        data         = pd.read_sql_query(
                            sql=f"""
                                 SELECT VARIABLE_PARENT, PROGRAM_NAME FROM BRE_ATTRIBUTE_TBL
                                 WHERE VARIABLE_NAME='{current_var[0]}' AND VARIABLE_PARENT<>'N/A' AND PROGRAM_NAME='{program_id}'
                                 """,
                            con=conn
                        ).drop_duplicates()
        work_set     = set(
                        [
                            (d['VARIABLE_PARENT'], current_var[0], d['PROGRAM_NAME']) for i,d in data.iterrows() if (d['VARIABLE_PARENT'], current_var[0], d['PROGRAM_NAME']) not in master_set
                        ]
                    )

        master_set       = master_set.union(work_set)
        parent_child_var = work_set.union(parent_child_var)

        data = pd.read_sql_query(
                    sql=f"""
                        SELECT VARIABLE_NAME, PROGRAM_NAME FROM BRE_ATTRIBUTE_TBL
                            WHERE VARIABLE_PARENT='{current_var[0]}' AND VARIABLE_NAME<>'N/A' AND PROGRAM_NAME='{program_id}'
                        """,
                    con=conn
                ).drop_duplicates()
        work_set = set(
            [
                (current_var[0], d['VARIABLE_NAME'], d['PROGRAM_NAME']) for i,d in data.iterrows() if (current_var[0], d['VARIABLE_NAME'], d['PROGRAM_NAME']) not in master_set
            ]
        )

        master_set = master_set.union(work_set)
        parent_child_var = work_set.union(parent_child_var)

    conn.close()
    return master_set




# input
res = get_parent_child('PAJSFN20','ERROR-PCB-AREA')

# output
{('ERROR-PCB-AREA', 'ERROR-PCB', 'PAJSFN20'),
 ('ERROR-PCB-AREA', 'FILLER', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-CCT-ACCESS', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-CCT-FUNC', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-CCT-MODE', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-CCT-RTN', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-CNTL-DATA-FIELD', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-CNTL-LGTH', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-CNTL-NAME', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-DBVAL-FIELD', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-DBVAL-LGTH', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-DLPS-CODE', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-DLPS-PROG', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-FLD-NAME', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-ID', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-MESSAGE', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-PARM-6', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-PARM-7', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-PARM-8', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-PARM-9', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-PCB-AREA', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-PCB-ERR-DATA', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-PROGRAM-ID', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-SEARCH-ARG-LENGTH', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-SEARCH-ARGUMENTS', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-SQL-AREA', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-TABLE-OVERNAME', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-TABLE-OVEROCC', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-TYPE', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-VIR-STOR-NAME', 'PAJSFN20'),
 ('WS-SCOPE-YCERR0E1', 'ERROR-VIR-STOR-SIZE', 'PAJSFN20')}
Leave a Comment