schemobs.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import getopt, sys, os, re
  2. def usage():
  3. print """
  4. usage:
  5. schemobs.py -f <fritzing folder> -h <hand drawn schematic folder> -g <generated schematics folder>
  6. in the <parts folder>/svg/core/schematic folder match files from the -h and -g folders
  7. print the list of files unaccounted for in -f and -g
  8. ignore the ones that start with sparkfun-
  9. """
  10. def main():
  11. try:
  12. opts, args = getopt.getopt(sys.argv[1:], "h:g:f:", ["hand", "generated", "fritzing"])
  13. except getopt.GetoptError, err:
  14. # print help information and exit:
  15. print str(err) # will print something like "option -a not recognized"
  16. usage()
  17. sys.exit(2)
  18. fritzingDir = None
  19. handDir = None
  20. generatedDir = None
  21. for o, a in opts:
  22. #print o
  23. #print a
  24. if o in ("-h", "--hand"):
  25. handDir = a
  26. elif o in ("-g", "--generated"):
  27. generatedDir = a
  28. elif o in ("-f", "--fritzing"):
  29. fritzingDir = a
  30. else:
  31. print "unhandled option", o
  32. usage()
  33. return
  34. if not fritzingDir:
  35. usage()
  36. return
  37. if not generatedDir:
  38. usage()
  39. return
  40. if not handDir:
  41. usage()
  42. return
  43. toMatch = []
  44. schemDir = os.path.join(fritzingDir, "parts", "svg", "core", "schematic")
  45. for filename in os.listdir(schemDir):
  46. if filename.startswith("sparkfun-"):
  47. continue
  48. toMatch.append(filename)
  49. for filename in os.listdir(handDir):
  50. if not filename in toMatch:
  51. print "unable to find {0} from hand".format(filename)
  52. else:
  53. toMatch.remove(filename)
  54. for filename in os.listdir(generatedDir):
  55. if not filename in toMatch:
  56. print "unable to find {0} from generated".format(filename)
  57. else:
  58. toMatch.remove(filename)
  59. print ""
  60. pdbDir = os.path.join(fritzingDir, "pdb", "core")
  61. fzps = []
  62. for filename in os.listdir(pdbDir):
  63. infile = open(os.path.join(pdbDir, filename), "r")
  64. txt = infile.read()
  65. infile.close()
  66. for matchName in toMatch:
  67. if matchName in txt:
  68. print "no match for {0} in {1}".format(matchName, filename)
  69. fzps.append(filename)
  70. toMatch.remove(matchName)
  71. break
  72. print ""
  73. for filename in fzps:
  74. print filename
  75. if __name__ == "__main__":
  76. main()