#!/usr/bin/python3 """ simple source-code line count script, used for dev metrics only [4.0] """ import os, glob, sys srcenc = 'utf8' # allow for Unicode source files def collect(paths): # [4.1] add sorted() manifest = [] for path in paths: manifest += sorted(glob.glob(path.replace('/', os.sep))) return manifest # the basics sources = ('*.py', '*.pyw', # top-level launchers here 'MailConfigs/*.py', # per-account configs here 'PyMailGui-PP4E/*.py', # PyMailGUI's own files ) # imported tools from PP4E, many updated much for 4.0 sources += ( 'PyMailGui-PP4E/PP4E/Internet/Email/mailtools/mailFetcher.py', 'PyMailGui-PP4E/PP4E/Internet/Email/mailtools/mailSender.py', 'PyMailGui-PP4E/PP4E/Internet/Email/mailtools/mailParser.py', 'PyMailGui-PP4E/PP4E/Gui/Tools/threadtools.py', 'PyMailGui-PP4E/PP4E/Gui/Tools/windows.py', 'PyMailGui-PP4E/PP4E/Gui/Tools/guimaker.py', 'PyMailGui-PP4E/PP4E/Gui/TextEditor/textEditor.py', # really, *.py 'PyMailGui-PP4E/PP4E/Gui/TextEditor/textConfig.py', 'PyMailGui-PP4E/PP4E/Gui/ShellGui/formrows.py', 'PyMailGui-PP4E/PP4E/Gui/Tour/scrolledlist.py', 'PyMailGui-PP4E/PP4E/Tools/find.py', 'PyMailGui-PP4E/PP4E/launchmodes.py' ) # app/exe build scripts count too (but skip iconify.py) sources += ('build/build-app-exe/*/build.py',) sources += ('build/build-source/build.py',) # publish scripts count too [4.1] sources += ('_publish.sh',) sources += ('docetc/docimgs/_publish.sh',) tally = count = 0 for fname in collect(sources): # used files in this tree if not fname.startswith('__'): # skip self and extras in '.' fobj = open(fname, encoding=srcenc) # else do os.path.basename() lcnt = len(fobj.readlines()) tally += lcnt count += 1 print(fname, '=>', lcnt) print('Total sloc in {} files: {:,d}'.format(count, tally)) # now 5 digits! if sys.platform.startswith('win'): input('Press Enter') # if clicked on Windows """ ================================================================================ example output (current counts/manifest): Launch_PyMailGUI.py => 287 fixfrozenpaths.py => 107 Launch_PyEdit.pyw => 73 MailConfigs/mailconfig_Gmail.py => 124 MailConfigs/mailconfig_LearningPython.py => 109 MailConfigs/mailconfig_LearningPython_ssl.py => 34 MailConfigs/mailconfig_Lutzmv.py => 107 MailConfigs/mailconfig_Lutzmv_ssl.py => 42 MailConfigs/mailconfig_Lutzmv_ssl_mail.py => 32 MailConfigs/mailconfig_Lutzmv_ssl_spam.py => 33 MailConfigs/mailconfig_RmiDotNet.py => 108 MailConfigs/mailconfig_RmiDotNet_ssl.py => 32 MailConfigs/mailconfig_defaultbase.py => 15 MailConfigs/mailconfig_testerrors.py => 30 PyMailGui-PP4E/ListWindows.py => 1214 PyMailGui-PP4E/PyMailGui.py => 290 PyMailGui-PP4E/PyMailGuiHelp.py => 774 PyMailGui-PP4E/SharedNames.py => 88 PyMailGui-PP4E/ViewWindows.py => 947 PyMailGui-PP4E/__init__.py => 14 PyMailGui-PP4E/fixTkBMP.py => 92 PyMailGui-PP4E/fixfrozenpaths.py => 99 PyMailGui-PP4E/html2text.py => 93 PyMailGui-PP4E/mailconfig.py => 507 PyMailGui-PP4E/messagecache.py => 181 PyMailGui-PP4E/popuputil.py => 121 PyMailGui-PP4E/py33patch.py => 179 PyMailGui-PP4E/textConfig.py => 172 PyMailGui-PP4E/wraplines.py => 109 PyMailGui-PP4E/PP4E/Internet/Email/mailtools/mailFetcher.py => 426 PyMailGui-PP4E/PP4E/Internet/Email/mailtools/mailSender.py => 400 PyMailGui-PP4E/PP4E/Internet/Email/mailtools/mailParser.py => 328 PyMailGui-PP4E/PP4E/Gui/Tools/threadtools.py => 163 PyMailGui-PP4E/PP4E/Gui/Tools/windows.py => 181 PyMailGui-PP4E/PP4E/Gui/Tools/guimaker.py => 667 PyMailGui-PP4E/PP4E/Gui/TextEditor/textEditor.py => 5105 PyMailGui-PP4E/PP4E/Gui/TextEditor/textConfig.py => 642 PyMailGui-PP4E/PP4E/Gui/ShellGui/formrows.py => 60 PyMailGui-PP4E/PP4E/Gui/Tour/scrolledlist.py => 62 PyMailGui-PP4E/PP4E/Tools/find.py => 32 PyMailGui-PP4E/PP4E/launchmodes.py => 629 build/build-app-exe/linux/build.py => 337 build/build-app-exe/macosx/build.py => 284 build/build-app-exe/windows/build.py => 366 build/build-source/build.py => 137 _publish.sh => 154 docetc/docimgs/_publish.sh => 58 Total sloc in 47 files: 16,044 ================================================================================ """