132 lines
4.2 KiB
Python
132 lines
4.2 KiB
Python
import argparse
|
|
import configparser
|
|
import yaml
|
|
|
|
"""
|
|
This script provides helper functions for processing NASA table data and merging YAML files.
|
|
Functions:
|
|
parse_arguments():
|
|
Parses command-line arguments to get the function name to execute.
|
|
nasatable2dict():
|
|
Reads data from 'nasa_table.txt' and 'nasa_type_table.txt', processes it, and writes the output to 'nasa_data2.yaml'.
|
|
yaml_merge():
|
|
Merges data from 'nasa_data.yaml' and 'nasa_data2.yaml', and writes the merged output to 'nasa_data3.yaml'.
|
|
main():
|
|
Main function that calls the appropriate function based on the command-line argument.
|
|
"""
|
|
def parse_arguments():
|
|
parser = argparse.ArgumentParser(description="EHS2MQTT Helper Script")
|
|
parser.add_argument('functionname', type=str, help='Put the function name here')
|
|
|
|
arg = parser.parse_args()
|
|
|
|
|
|
return arg.functionname
|
|
|
|
def nasatable2dict():
|
|
with open('nasa_table.txt', 'r') as file:
|
|
lines = file.readlines()
|
|
|
|
data = {}
|
|
for line in lines:
|
|
parts = line.strip().split('||')
|
|
valid_name = parts[1].strip()
|
|
if valid_name.endswith('?') or len(parts[1].strip()) == 0:
|
|
valid_name = parts[2].strip()
|
|
|
|
if valid_name.endswith('?'):
|
|
valid_name = ''
|
|
|
|
if len(valid_name) > 0:
|
|
data[parts[0].strip()] = {
|
|
'label': parts[1].strip() if (len(parts[2].strip()) == 0 and not parts[2].strip().endswith('??')) else parts[2].strip(),
|
|
'description': parts[3].strip(),
|
|
'remarks': parts[4].strip(),
|
|
'type': '',
|
|
'signed': '',
|
|
'unit': '',
|
|
'arithmetic': '',
|
|
}
|
|
|
|
with open('nasa_type_table.txt', 'r') as file:
|
|
lines = file.readlines()
|
|
|
|
types = {}
|
|
for line in lines:
|
|
parts = line.strip().split('||')
|
|
types[parts[0].strip()] = {
|
|
'type': parts[1].strip(),
|
|
'signed': parts[2].strip(),
|
|
'unit': parts[3].strip(),
|
|
'arithmetic': parts[4].strip()
|
|
}
|
|
|
|
for key in data:
|
|
if key in types:
|
|
data[key]['type'] = types[key]['type']
|
|
data[key]['signed'] = types[key]['signed']
|
|
data[key]['unit'] = types[key]['unit']
|
|
data[key]['arithmetic'] = types[key]['arithmetic']
|
|
|
|
config = {}
|
|
for key, value in data.items():
|
|
print(f"Adding {value['label']} with address {value}")
|
|
if len(value['label']) > 0:
|
|
config[value['label']] = {
|
|
'address': key,
|
|
'description': value['description'],
|
|
'remarks': value['remarks'],
|
|
'type': value['type'],
|
|
'signed': value['signed'],
|
|
'unit': value['unit'],
|
|
'arithmetic': value['arithmetic']
|
|
}
|
|
|
|
with open('nasa_data2.yaml', 'w') as configfile:
|
|
yaml.dump(config, configfile, default_flow_style=False)
|
|
|
|
print(data)
|
|
|
|
def yaml_merge():
|
|
with open('nasa_data.yaml', 'r') as configfile:
|
|
yaml1 = yaml.safe_load(configfile)
|
|
|
|
with open('nasa_data2.yaml', 'r') as configfile:
|
|
yaml2 = yaml.safe_load(configfile)
|
|
yaml3 = {}
|
|
for key2, value2 in yaml2.items():
|
|
found = False
|
|
for key, value in yaml1.items():
|
|
if(value['address'] == value2['address']):
|
|
found = True
|
|
if key2 != key:
|
|
print(f"Key {key} rewrite with {key2}")
|
|
yaml3[key2] = value
|
|
else:
|
|
yaml3[key] = value
|
|
break
|
|
if key2 == key:
|
|
print(f"Key {key2} already exists")
|
|
break
|
|
if not found:
|
|
print(f"Adding {key2} with address {value2['address']}")
|
|
yaml3[key2] = value2
|
|
|
|
with open('nasa_data3.yaml', 'w') as configfile:
|
|
yaml.dump(yaml3, configfile, default_flow_style=False)
|
|
|
|
def main():
|
|
funktion = parse_arguments()
|
|
|
|
if funktion.lower() == "nasatable2dict":
|
|
print("Calling nasatable2dict")
|
|
nasatable2dict()
|
|
|
|
if funktion.lower() == "yaml_merge":
|
|
print("Calling yaml_merge")
|
|
yaml_merge()
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |