Files
cpl/clean_init.py
edraft 2d2bb86720
Some checks failed
Build on push / prepare (push) Failing after 6s
Build on push / build (push) Has been skipped
First update towards cpl2
2025-09-15 15:02:47 +02:00

79 lines
2.9 KiB
Python

import os
import re
def clean_init_files(root_dir='.'):
"""
Durchsucht rekursiv alle __init__.py Dateien und entfernt:
- Einzeilige Kommentare
- Mehrzeilige Kommentare/Docstrings
- Variablen, die mit __ beginnen und enden
- VersionInfo- und version_info-Zuweisungen
"""
# Regex-Pattern für zu entfernende Zeilen
comment_pattern = re.compile(r'^\s*#.*$')
dunder_pattern = re.compile(r'^\s*__\w+__\s*=.*$')
version_pattern = re.compile(r'^\s*(VersionInfo|version_info)\s*=.*$')
# Zu ignorierende Verzeichnisse
ignore_dirs = ['venv', '.venv', 'env', '.env']
# Zähle bearbeitete Dateien
processed_files = 0
for dirpath, dirnames, filenames in os.walk(root_dir):
# Ignoriere venv-Verzeichnisse
dirnames[:] = [d for d in dirnames if d not in ignore_dirs]
for filename in filenames:
if filename == '__init__.py':
file_path = os.path.join(dirpath, filename)
# Datei lesen
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# Mehrzeilige Kommentare entfernen
# Entferne Docstrings (''' oder """)
content = re.sub(r'(?:\'\'\'|""")[\s\S]*?(?:\'\'\'|""")', '', content)
# Verarbeite die Zeilen
lines = content.splitlines()
# Zu behaltende Zeilen filtern
filtered_lines = []
for line in lines:
if (not comment_pattern.match(line) and
not dunder_pattern.match(line) and
not version_pattern.match(line)):
filtered_lines.append(line)
# Leere aufeinanderfolgende Zeilen entfernen
clean_lines = []
prev_empty = False
for line in filtered_lines:
is_empty = line.strip() == ''
if not (is_empty and prev_empty):
clean_lines.append(line)
prev_empty = is_empty
# Entferne Leerzeilen am Anfang und Ende
while clean_lines and clean_lines[0].strip() == '':
clean_lines.pop(0)
while clean_lines and clean_lines[-1].strip() == '':
clean_lines.pop()
# Füge eine Leerzeile am Ende hinzu, wenn die Datei nicht leer ist
if clean_lines:
clean_lines.append('')
# Schreibe bereinigte Datei zurück
with open(file_path, 'w', encoding='utf-8') as f:
f.write('\n'.join(clean_lines))
processed_files += 1
print(f"Bereinigt: {file_path}")
print(f"\nAbgeschlossen: {processed_files} __init__.py Dateien bereinigt")
if __name__ == "__main__":
clean_init_files()