Skip to content

Instantly share code, notes, and snippets.

@syabro
Last active August 29, 2015 14:21
Show Gist options
  • Save syabro/c2cc1f0237b52e9543df to your computer and use it in GitHub Desktop.
Save syabro/c2cc1f0237b52e9543df to your computer and use it in GitHub Desktop.
Python duplicate classes finder
import os
import re
from pprint import pprint
class_re = r'class (\w+)\((.*)\)'
classes = {}
for root, subdirs, files in os.walk('./homeowners'):
for file in files:
if file.endswith('.py'):
filename = os.path.join(root, file)
with open(filename, 'r') as f:
content = f.read()
for m in re.finditer(class_re, content):
class_name = m.group(1)
if class_name in ['in', 'for', 'Meta', 'Migration', 'is', 'Media', 'Command']:
continue
if 'TestCase' in class_name:
continue
if 'legacy' in filename:
continue
baseclass = m.group(2)
if class_name not in classes:
classes[class_name] = []
if filename not in classes[class_name]:
classes[class_name].append(filename)
cl_items = classes.items()
for class_name, files in cl_items:
if len(files) == 1:
del classes[class_name]
pprint(classes)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment