eive-obsw/generators/returnvalues/returnvalues_parser.py

124 lines
4.1 KiB
Python
Raw Normal View History

2021-05-18 16:14:11 +02:00
#! /usr/bin/python3
# -*- coding: utf-8 -*-
"""
:file: returnvalues_parser.py
:brief: Part of the MOD export tools for the SOURCE project by KSat.
TODO: Integrate into Parser Structure instead of calling this file (no cpp file generated yet)
:details:
Returnvalue exporter.
To use MySQLdb, run pip install mysqlclient or install in IDE. On Windows, Build Tools installation might be necessary.
:data: 21.11.2019
"""
2021-08-02 12:50:36 +02:00
from fsfwgen.core import get_console_logger
2022-03-04 10:38:39 +01:00
from fsfwgen.utility.file_management import copy_file
2021-06-08 17:10:47 +02:00
from fsfwgen.parserbase.file_list_parser import FileListParser
from fsfwgen.returnvalues.returnvalues_parser import InterfaceParser, ReturnValueParser
from fsfwgen.utility.sql_writer import SqlWriter
2021-08-02 12:50:36 +02:00
from fsfwgen.utility.printer import PrettyPrinter
2021-05-18 16:14:11 +02:00
2021-08-02 12:50:36 +02:00
from definitions import BspType, DATABASE_NAME, ROOT_DIR, OBSW_ROOT_DIR
2021-05-18 16:14:11 +02:00
2021-08-02 12:50:36 +02:00
LOGGER = get_console_logger()
2021-05-18 16:14:11 +02:00
EXPORT_TO_FILE = True
2022-03-04 10:38:39 +01:00
COPY_CSV_FILE = True
2021-05-18 16:14:11 +02:00
EXPORT_TO_SQL = True
PRINT_TABLES = True
2021-05-18 16:16:02 +02:00
2022-02-26 14:08:11 +01:00
FILE_SEPARATOR = ";"
2021-05-18 16:14:11 +02:00
MAX_STRING_LENGTH = 32
BSP_SELECT = BspType.BSP_Q7S
BSP_DIR_NAME = BSP_SELECT.value
2022-02-26 14:08:11 +01:00
CSV_RETVAL_FILENAME = f"{ROOT_DIR}/{BSP_SELECT.value}_returnvalues.csv"
2022-03-04 10:38:39 +01:00
CSV_COPY_DEST = f"{OBSW_ROOT_DIR}/tmtc/config/returnvalues.csv"
2021-05-18 16:14:11 +02:00
ADD_LINUX_FOLDER = False
2021-05-18 16:16:02 +02:00
2021-05-18 16:14:11 +02:00
if BSP_SELECT == BspType.BSP_Q7S or BSP_SELECT == BspType.BSP_LINUX_BOARD:
2022-02-26 14:08:11 +01:00
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/linux/fsfwconfig"
2021-05-18 16:14:11 +02:00
ADD_LINUX_FOLDER = True
else:
2022-02-26 14:08:11 +01:00
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/{BSP_DIR_NAME}/fsfwconfig"
2021-08-02 12:50:36 +02:00
BSP_PATH = f"{OBSW_ROOT_DIR}/{BSP_DIR_NAME}"
2021-05-18 16:14:11 +02:00
INTERFACE_DEFINITION_FILES = [
2022-02-26 14:08:11 +01:00
f"{OBSW_ROOT_DIR}/fsfw/src/fsfw/returnvalues/FwClassIds.h",
f"{OBSW_ROOT_DIR}/common/config/commonClassIds.h",
f"{FSFW_CONFIG_ROOT}/returnvalues/classIds.h",
2021-05-18 16:14:11 +02:00
]
2021-08-02 12:50:36 +02:00
RETURNVALUE_SOURCES = [
2022-02-26 14:08:11 +01:00
f"{OBSW_ROOT_DIR}/mission/",
f"{OBSW_ROOT_DIR}/fsfw/",
f"{BSP_PATH}",
2021-05-18 16:14:11 +02:00
]
if ADD_LINUX_FOLDER:
2022-02-26 14:08:11 +01:00
RETURNVALUE_SOURCES.append(f"{OBSW_ROOT_DIR}/linux")
2021-05-18 16:14:11 +02:00
SQL_DELETE_RETURNVALUES_CMD = """
DROP TABLE IF EXISTS Returnvalues
"""
SQL_CREATE_RETURNVALUES_CMD = """
CREATE TABLE IF NOT EXISTS Returnvalues (
id INTEGER PRIMARY KEY,
code TEXT,
name TEXT,
interface TEXT,
file TEXT,
description TEXT
)
"""
SQL_INSERT_RETURNVALUES_CMD = """
INSERT INTO Returnvalues(code,name,interface,file,description)
VALUES(?,?,?,?,?)
"""
2021-08-02 12:50:36 +02:00
def parse_returnvalues():
returnvalue_table = generate_returnvalue_table()
2021-05-18 16:14:11 +02:00
if EXPORT_TO_FILE:
2022-02-26 14:08:11 +01:00
ReturnValueParser.export_to_file(
CSV_RETVAL_FILENAME, returnvalue_table, FILE_SEPARATOR
)
2022-03-04 10:38:39 +01:00
if COPY_CSV_FILE:
copy_file(
filename=CSV_RETVAL_FILENAME,
destination=CSV_COPY_DEST,
delete_existing_file=True
)
2021-05-18 16:14:11 +02:00
if EXPORT_TO_SQL:
2022-02-26 14:08:11 +01:00
LOGGER.info("ReturnvalueParser: Exporting to SQL")
sql_retval_exporter(
returnvalue_table, db_filename=f"{ROOT_DIR}/{DATABASE_NAME}"
)
2021-05-18 16:14:11 +02:00
2021-08-02 12:50:36 +02:00
def generate_returnvalue_table():
2022-02-26 14:08:11 +01:00
"""Core function to parse for the return values"""
2021-08-02 12:50:36 +02:00
interface_parser = InterfaceParser(
file_list=INTERFACE_DEFINITION_FILES, print_table=PRINT_TABLES
)
2021-05-18 16:14:11 +02:00
interfaces = interface_parser.parse_files()
2021-08-02 12:50:36 +02:00
header_parser = FileListParser(RETURNVALUE_SOURCES)
2021-05-18 16:14:11 +02:00
header_list = header_parser.parse_header_files(True, "Parsing header file list: ")
returnvalue_parser = ReturnValueParser(interfaces, header_list, PRINT_TABLES)
2022-03-04 10:38:39 +01:00
returnvalue_parser.obsw_root_path = OBSW_ROOT_DIR
2021-05-18 16:14:11 +02:00
returnvalue_parser.set_moving_window_mode(moving_window_size=7)
returnvalue_table = returnvalue_parser.parse_files(True)
2021-08-02 12:50:36 +02:00
LOGGER.info(f"ReturnvalueParser: Found {len(returnvalue_table)} returnvalues")
2021-05-18 16:14:11 +02:00
return returnvalue_table
2021-08-02 12:50:36 +02:00
def sql_retval_exporter(returnvalue_table, db_filename: str):
sql_writer = SqlWriter(db_filename=db_filename)
2021-05-18 16:14:11 +02:00
sql_writer.open(SQL_CREATE_RETURNVALUES_CMD)
for entry in returnvalue_table.items():
sql_writer.write_entries(
2022-02-26 14:08:11 +01:00
SQL_INSERT_RETURNVALUES_CMD,
(entry[0], entry[1][2], entry[1][4], entry[1][3], entry[1][1]),
)
2021-05-18 16:14:11 +02:00
sql_writer.commit()
sql_writer.close()