78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
"""Generic File Parser class
|
|
Used by parse header files. Implemented as class in case header parser becomes more complex
|
|
"""
|
|
import os
|
|
import re
|
|
from pathlib import Path
|
|
from typing import Union, List
|
|
|
|
from fsfwgen.logging import get_console_logger
|
|
|
|
LOGGER = get_console_logger()
|
|
|
|
|
|
# pylint: disable=too-few-public-methods
|
|
class FileListParser:
|
|
"""Generic header parser which takes a directory name or directory name list
|
|
and parses all included header files recursively.
|
|
TODO: Filter functionality for each directory to filter out files or folders
|
|
"""
|
|
|
|
def __init__(self, directory_list_or_name: Union[Path, List[Path]]):
|
|
self.directory_list = []
|
|
if isinstance(directory_list_or_name, Path):
|
|
self.directory_list.append(directory_list_or_name)
|
|
elif isinstance(directory_list_or_name, List):
|
|
self.directory_list.extend(directory_list_or_name)
|
|
else:
|
|
LOGGER.warning(
|
|
"Header Parser: Passed directory list is not a header name or list of header names"
|
|
)
|
|
self.header_files = []
|
|
|
|
def parse_header_files(
|
|
self,
|
|
search_recursively: bool = False,
|
|
printout_string: str = "Parsing header files: ",
|
|
print_current_dir: bool = False,
|
|
) -> List[Path]:
|
|
"""This function is called to get a list of header files
|
|
:param search_recursively:
|
|
:param printout_string:
|
|
:param print_current_dir:
|
|
:return:
|
|
"""
|
|
print(printout_string, end="")
|
|
for directory in self.directory_list:
|
|
self.__get_header_file_list(
|
|
directory, search_recursively, print_current_dir
|
|
)
|
|
print(str(len(self.header_files)) + " header files were found.")
|
|
# g.PP.pprint(self.header_files)
|
|
return self.header_files
|
|
|
|
def __get_header_file_list(
|
|
self,
|
|
base_directory: Path,
|
|
seach_recursively: bool = False,
|
|
print_current_dir: bool = False,
|
|
):
|
|
local_header_files = []
|
|
if print_current_dir:
|
|
print(f"Parsing header files in: {base_directory}")
|
|
# g.PP.pprint(base_list)
|
|
for entry in base_directory.iterdir():
|
|
# header_file_match = re.match(r"[_.]*.*\.h", entry.as_posix())
|
|
if (
|
|
entry.is_file()
|
|
and entry.suffix == ".h"
|
|
and entry.as_posix()[0] not in [".", "_"]
|
|
):
|
|
local_header_files.append(entry)
|
|
if seach_recursively:
|
|
if entry.is_dir():
|
|
self.__get_header_file_list(entry, seach_recursively)
|
|
# print("Files found in: " + base_directory)
|
|
# g.PP.pprint(local_header_files)
|
|
self.header_files.extend(local_header_files)
|