/usr/share/fritzing/parts/scripts/thtsmd.py is in fritzing-parts 0.9.3b-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | # usage:
# thtsms.py -d [fzp folder] -t [tht | smd]
# add or update a package <property> element.
import getopt, sys, os, os.path, re, xml.dom.minidom, xml.dom
def usage():
print """
usage:
thtsmd.py -d [fzp folder] -t [tht | smd]
add or update a package <property> element.
"""
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "hd:t:", ["help", "directory", "type"])
except getopt.GetoptError, err:
# print help information and exit:
print str(err) # will print something like "option -a not recognized"
usage()
sys.exit(2)
dir = None
typ = None
for o, a in opts:
#print o
#print a
if o in ("-d", "--directory"):
dir = a
elif o in ("-t", "--type"):
typ = a
elif o in ("-h", "--help"):
usage()
sys.exit(2)
else:
assert False, "unhandled option"
if not(dir):
usage()
sys.exit(2)
if not(typ):
usage()
sys.exit(2)
for root, dirs, files in os.walk(dir, topdown=False):
for filename in files:
if not filename.endswith(".fzp"):
continue
fzpFilename = os.path.join(root, filename)
infile = open(os.path.join(root, filename), "r")
content = infile.read()
infile.close()
try:
dom = xml.dom.minidom.parseString(content)
except xml.parsers.expat.ExpatError, err:
print str(err), fzpFilename
continue
#print "testing", fzpFilename
fzp = dom.documentElement
properties = None
propertiesNodes = fzp.getElementsByTagName("properties")
if (propertiesNodes.length == 0):
properties = dom.createElement("properties")
fzp.insertBefore(properties, fzp.firstChild)
elif (propertiesNodes.length == 1):
properties = propertiesNodes.item(0)
else:
print "multiple properties elements in", fzpFilename
continue
#print "got properties", properties
propertyNodes = properties.getElementsByTagName("property")
package = None
for property in propertyNodes:
name = property.getAttribute("name")
#print "got name", name
if name == "package":
package = property
break
#print "got package", package
if package == None:
package = dom.createElement("property")
properties.appendChild(package)
package.setAttribute("name", "package")
t = dom.createTextNode(typ)
package.appendChild(t)
else:
package.normalize() #make sure all the text is in one node
t = None
for child in package.childNodes:
if child.nodeType == child.TEXT_NODE:
t = child
break
if t == None:
t = dom.createTextNode(typ)
package.appendChild(t)
else:
if ("SMD" in t.nodeValue):
continue
if ("THT" in t.nodeValue):
continue
t1 = dom.createTextNode(" [" + typ + "]")
package.appendChild(t1)
package.normalize()
print "adding package property " + typ + " to", fzpFilename
outfile = open(fzpFilename, 'wb')
s = dom.toxml("UTF-8")
outfile.write(s)
outfile.flush()
outfile.close()
if __name__ == "__main__":
main()
|