csproj to mermaid visualizer

A python script to turn .csproj files into Mermaid diagrams syntax

import os
import sys
import xml.etree.ElementTree as ET

def get_csproj(path):
    csproj = []

    for (path, dirs, files) in os.walk(path):
        for f in files:
            if f.endswith('csproj'):
                csproj.append(path + '/' + f)

    return csproj

def find_dependencies(csproj):
    dependencies = {}
    for project in csproj:
        references = {'packages': [], 'projects': []}
        tree = ET.parse(project)
        for group in tree.getroot().findall('ItemGroup'):
            for reference in group.findall('PackageReference'):
                references['packages'].append(reference.attrib['Include'])
            for reference in group.findall('ProjectReference'):
                references['projects'].append(package_from_path(reference.attrib['Include']))
        namespace = package_from_path(project)

        dependencies[namespace] = references
    return dependencies

def create_graph(deps):
    graph = 'graph TD\n'
    for namespace, dep in deps.items():
        for package in dep['packages']:
            graph += namespace + '-->' + package + '\n'
        for project in dep['projects']:
            graph += namespace + '-.->' + project + '\n'
    return graph

def package_from_path(path):
    return '.'.join(path.split('/')[-1].split('\\')[-1].split('.')[:-1])

def print_usage():
    print('usage:\n\n\tpython csproj.py [PATH]')

if len(sys.argv) != 2:
    print_usage()
    sys.exit(1)

csproj = get_csproj(sys.argv[1])
deps = find_dependencies(csproj)
graph = create_graph(deps)
print(graph)

It's pretty messy. Stripping out everything but local references (:2,$g!/-\.-/d) and then Tests (:%g/Tests/d) produces something much more readable:

Payments.DatabaseMigrator

Payments.Infrastructure

Payments.EventListener.Worker

Payments.Application

Payments.Domain

Payments.Events

Payments.CommandListener.Worker

Payments.Service