- Tidy tox.ini Story: 2011201 Change-Id: I62ed4bd045ce49d53b863d63b3d1301fe9ab6b5b Signed-off-by: Ron Stone <ronald.stone@windriver.com>
		
			
				
	
	
		
			125 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
import re
 | 
						|
import os
 | 
						|
import sys
 | 
						|
import pandas as pd
 | 
						|
 | 
						|
from _p_columns import columns, port_index, src_index, net_index
 | 
						|
 | 
						|
df = pd.DataFrame(columns=columns)
 | 
						|
 | 
						|
def convert_to_uppercase(input_string):
 | 
						|
    return input_string.upper()
 | 
						|
 | 
						|
# Look up a port number assigned to a constant in another file
 | 
						|
def find_port_number(filename, search_string):
 | 
						|
    found_port = None
 | 
						|
    with open(filename, 'r') as file:
 | 
						|
        for line in file:
 | 
						|
            match = re.search(rf'{search_string}\s*=\s*(\d+)', line)
 | 
						|
            if match:
 | 
						|
                found_port = int(match.group(1))
 | 
						|
                break
 | 
						|
    return found_port
 | 
						|
 | 
						|
def remove_prefix(input_string):
 | 
						|
    # Find the index of the first period
 | 
						|
    period_index = input_string.find('.')
 | 
						|
    
 | 
						|
    if period_index != -1:
 | 
						|
        return input_string[period_index + 1:]
 | 
						|
    else:
 | 
						|
        # Return the original string
 | 
						|
        return input_string
 | 
						|
 | 
						|
def delete_file(file_path):
 | 
						|
    try:
 | 
						|
        # Check if the file exists
 | 
						|
        if os.path.exists(file_path):
 | 
						|
            # Delete the file
 | 
						|
            os.remove(file_path)
 | 
						|
            print(f"File '{file_path}' deleted successfully.")
 | 
						|
        else:
 | 
						|
            print(f"File '{file_path}' does not exist.")
 | 
						|
    except Exception as e:
 | 
						|
        print(f"An error occurred: {e}")
 | 
						|
 | 
						|
def is_numeric(array, index):
 | 
						|
    array = [element.strip() for element in array]
 | 
						|
    # Check if the array has an integer at the element to be tested
 | 
						|
    if len(array) > index:
 | 
						|
        return array[index].isnumeric()
 | 
						|
    else:
 | 
						|
        return False
 | 
						|
 | 
						|
def prepend_string(main_string, prepend_string):
 | 
						|
    return prepend_string + main_string
 | 
						|
 | 
						|
def append_string(*args, **kwargs):
 | 
						|
    return prepend_string(*args, **kwargs)
 | 
						|
 | 
						|
def extract_docu_comments(input_file, out_file):
 | 
						|
    sect = "N/A"
 | 
						|
    prot = "N/A"
 | 
						|
    with open(input_file, 'r') as file:
 | 
						|
        lines = file.readlines()
 | 
						|
 | 
						|
    for line in lines:
 | 
						|
 | 
						|
        match = re.search(r'^(\S+)\s*=\s*(\{|\\)', line)
 | 
						|
        if match:
 | 
						|
            sect = match.group(1).strip()
 | 
						|
            sect = append_string(',', sect)
 | 
						|
            prot = "N/A, "
 | 
						|
        match = re.search(r'("tcp":|"udp":)', line)
 | 
						|
        if match:
 | 
						|
            prot = match.group(1).strip()
 | 
						|
            prot = prot.replace(':', '').strip()
 | 
						|
            prot = convert_to_uppercase(prot)
 | 
						|
            prot = append_string(',', prot)
 | 
						|
 | 
						|
        # Check if the line contains a comment starting with 'docu' followed by
 | 
						|
        # a colon
 | 
						|
        if '#' in line and 'docu:' in line.lstrip():
 | 
						|
            docu_line = re.sub(r',?\s*#\s*(noqa: E501)?\s+docu:\s*', ',', line).strip()
 | 
						|
            docu_line = docu_line.replace(':', ',').strip()
 | 
						|
            docu_line = prepend_string(docu_line, prot)
 | 
						|
            docu_line = prepend_string(docu_line, sect)
 | 
						|
            docu_line = docu_line.replace('"', '').strip()
 | 
						|
            column_values = docu_line.split(',')
 | 
						|
 | 
						|
            if not is_numeric(column_values, port_index):
 | 
						|
                const =  column_values[port_index]
 | 
						|
                column_values[port_index] = find_port_number(const_file, remove_prefix(column_values[port_index]))
 | 
						|
                print("Replaced " + const.strip() + " with " + str(column_values[port_index]))
 | 
						|
 | 
						|
            if 'OAM' in column_values[src_index]:
 | 
						|
                column_values[net_index] = 'oam'
 | 
						|
 
 | 
						|
            # print("Processing: " + line)
 | 
						|
            df.loc[len(df)] = column_values
 | 
						|
 | 
						|
    ports_column_name = df.columns[port_index]
 | 
						|
    df[ports_column_name] = pd.to_numeric(df[ports_column_name], errors='coerce')
 | 
						|
    df.to_excel(excel_file, index=False)
 | 
						|
    
 | 
						|
    print(f"Ports list successfully extracted to '{excel_file}'.")
 | 
						|
 | 
						|
if len(sys.argv) != 4:
 | 
						|
    print(f"""\
 | 
						|
This script reads a python file to create an Excel sheet of firewall
 | 
						|
port definitions.
 | 
						|
 | 
						|
Usage:  {os.path.basename(__file__)} <ports_file> <constants_file> <excel_file>
 | 
						|
Example: python ./py_2_xlsx.py platform_firewall.py constants.py FW_PORTS.xlsx
 | 
						|
""")
 | 
						|
    sys.exit(1)
 | 
						|
 | 
						|
 | 
						|
input_file = str(sys.argv[1])
 | 
						|
const_file = str(sys.argv[2])
 | 
						|
excel_file = str(sys.argv[3])
 | 
						|
 | 
						|
# Extract lines with docu comments
 | 
						|
extract_docu_comments(input_file, excel_file) 
 | 
						|
 |