cerc_persistence_doc/create_dot.py
2023-11-28 14:27:42 -05:00

44 lines
1.8 KiB
Python

from pathlib import Path
result = list(Path("../cerc_persistence/cerc_persistence/models").rglob("*.[pP][yY]"))
dot_file = './source/uml.dot'
dot = 'digraph { \n ratio="fill"; \nsize="16.6,23.4!";\nmargin=0; \n \n'
class_line = None
for file_path in result:
with open(file_path) as file:
lines = file.readlines()
for line in lines:
if 'class ' == line[0:6]:
line = line.replace('class ', '"')\
.replace(':', '"')\
.replace('(', '" -> "')\
.replace(')', '"[arrowhead="empty"] ')\
.replace(' "', '')\
.replace('->', '-> "')
class_line = line
if ' -> ' in line:
class_line = line.split(' -> ')[0]
if '"City"' == line[0:6]:
line = line[0:6] + ' [pos="0,1!"]\n'
dot += line
if 'def ' in line[2:8]:
if ' -> ' in line:
reference = line.split(' -> ')[1].replace(':', '').strip(' ()[]{},').replace('\n', '')
reference = reference.replace('Union', '').replace('List', '').replace('float', '').replace('str', '')
reference = reference.replace('bool', '').replace('None', '').replace(',', '')
reference = reference.replace(' ', '').replace('np.ndarray', '').replace('dict', '')
reference = reference.replace('[', '').replace(']', '').replace('Path', '').replace('pd.DataFrame', '')
reference = reference.replace('Trimesh', '').replace('}', '').replace('Edge)', '')
reference = reference.replace('(', '').replace(')', '')
if 'Point' not in reference:
reference = reference.replace('int', '')
if reference != '':
dot += f'"{reference}"-> {class_line}[arrowhead="diamond"] '
dot += '}'
with open(dot_file, 'w') as file:
file.write(dot.replace(' \n', ' ').replace('\n', ' ').replace('ABC, ', '').replace(' " ', ' '))