import os
import ast
from file_manager.n100.file_manager_buildings import Building_N100
[docs]
def get_enum_members(enum_class):
return {name for name, member in enum_class.__members__.items()}
[docs]
def find_python_files(root_dir):
python_files = []
for subdir, _, files in os.walk(root_dir):
for file in files:
if file.endswith(".py"):
python_files.append(os.path.join(subdir, file))
return python_files
[docs]
def get_used_enum_members_in_file(file_path, enum_class):
used_members = set()
try:
with open(file_path, "r", encoding="utf-8") as file:
source = file.read()
except UnicodeDecodeError:
print(f"Skipping file due to encoding error: {file_path}")
return used_members
tree = ast.parse(source)
class_name = enum_class.__name__
for node in ast.walk(tree):
if isinstance(node, ast.ImportFrom) and node.module == enum_class.__module__:
for alias in node.names:
if alias.name == class_name:
imported_as = alias.asname if alias.asname else alias.name
for node in ast.walk(tree):
if isinstance(node, ast.Attribute) and isinstance(
node.value, ast.Name
):
if node.value.id == imported_as:
used_members.add(node.attr)
elif isinstance(node, ast.Import):
for alias in node.names:
if alias.name == enum_class.__module__:
imported_as = alias.asname if alias.asname else alias.name
for node in ast.walk(tree):
if isinstance(node, ast.Attribute) and isinstance(
node.value, ast.Attribute
):
if (
node.value.value.id == imported_as
and node.value.attr == class_name
):
used_members.add(node.attr)
return used_members
[docs]
def get_used_enum_members_in_project(root_dir, enum_class):
used_members = set()
python_files = find_python_files(root_dir)
for file_path in python_files:
used_members.update(get_used_enum_members_in_file(file_path, enum_class))
return used_members
if __name__ == "__main__":
# Get the directory of the current script file
current_dir = os.path.dirname(os.path.abspath(__file__))
# Set the project root directory relative to the current script directory
project_root = os.path.abspath(os.path.join(current_dir, "../../.."))
all_members = get_enum_members(Building_N100)
used_members = get_used_enum_members_in_project(project_root, Building_N100)
unused_members = all_members - used_members
print(f"Unused members of {Building_N100.__name__}:")
for member in unused_members:
print(member)