BOM python plugins: fix some issues related to python2/3 and utf-8 chars.
This commit is contained in:
parent
3100cd3599
commit
35f9cd2634
|
@ -24,6 +24,14 @@ import kicad_netlist_reader
|
|||
import csv
|
||||
import sys
|
||||
|
||||
# A helper function to convert a UTF8/Unicode/locale string read in netlist
|
||||
# for python2 or python3
|
||||
def fromNetlistText( aText ):
|
||||
try:
|
||||
return aText.encode('utf-8').decode('cp1252')
|
||||
except UnicodeDecodeError:
|
||||
return aText
|
||||
|
||||
def myEqu(self, other):
|
||||
"""myEqu is a more advanced equivalence function for components which is
|
||||
used by component grouping. Normal operation is to group components based
|
||||
|
@ -87,7 +95,7 @@ out = csv.writer( f, lineterminator='\n', delimiter=',', quotechar='\"', quoting
|
|||
def writerow( acsvwriter, columns ):
|
||||
utf8row = []
|
||||
for col in columns:
|
||||
utf8row.append( str(col) ) # currently, no change
|
||||
utf8row.append( fromNetlistText( str(col) ) )
|
||||
acsvwriter.writerow( utf8row )
|
||||
|
||||
# Output a set of rows as a header providing general information
|
||||
|
|
|
@ -20,6 +20,14 @@ import kicad_netlist_reader
|
|||
import csv
|
||||
import sys
|
||||
|
||||
# A helper function to convert a UTF8/Unicode/locale string read in netlist
|
||||
# for python2 or python3
|
||||
def fromNetlistText( aText ):
|
||||
try:
|
||||
return aText.encode('utf-8').decode('cp1252')
|
||||
except UnicodeDecodeError:
|
||||
return aText
|
||||
|
||||
# Generate an instance of a generic netlist, and load the netlist tree from
|
||||
# the command line option. If the file doesn't exist, execution will stop
|
||||
net = kicad_netlist_reader.netlist(sys.argv[1])
|
||||
|
@ -34,7 +42,7 @@ except IOError:
|
|||
f = sys.stdout
|
||||
|
||||
# Create a new csv writer object to use as the output formatter
|
||||
out = csv.writer(f, lineterminator='\n', delimiter=',', quotechar='\"', quoting=csv.QUOTE_ALL)
|
||||
out = csv.writer(f, delimiter=',', quotechar='\"', quoting=csv.QUOTE_ALL)
|
||||
|
||||
# Output a set of rows for a header providing general information
|
||||
out.writerow(['Source:', net.getSource()])
|
||||
|
@ -44,6 +52,7 @@ out.writerow( ['Generator:', sys.argv[0]] )
|
|||
out.writerow(['Component Count:', len(net.components)])
|
||||
out.writerow(['Ref', 'Qnty', 'Value', 'Cmp name', 'Footprint', 'Description', 'Vendor'])
|
||||
|
||||
|
||||
# Get all of the components in groups of matching parts + values
|
||||
# (see ky_generic_netlist_reader.py)
|
||||
grouped = net.groupComponents()
|
||||
|
@ -55,11 +64,15 @@ for group in grouped:
|
|||
# Add the reference of every component in the group and keep a reference
|
||||
# to the component so that the other data can be filled in once per group
|
||||
for component in group:
|
||||
refs += component.getRef() + ", "
|
||||
refs += fromNetlistText( component.getRef() ) + ", "
|
||||
c = component
|
||||
|
||||
# Fill in the component groups common data
|
||||
out.writerow([refs, len(group), c.getValue(), c.getPartName(), c.getFootprint(),
|
||||
c.getDescription(), c.getField("Vendor")])
|
||||
out.writerow([refs, len(group),
|
||||
fromNetlistText( c.getValue() ),
|
||||
fromNetlistText( c.getPartName() ),
|
||||
fromNetlistText( c.getFootprint() ),
|
||||
fromNetlistText( c.getDescription() ),
|
||||
fromNetlistText( c.getField("Vendor") )])
|
||||
|
||||
|
||||
|
|
|
@ -22,6 +22,14 @@ import kicad_netlist_reader
|
|||
import csv
|
||||
import sys
|
||||
|
||||
# A helper function to convert a UTF8/Unicode/locale string read in netlist
|
||||
# for python2 or python3
|
||||
def fromNetlistText( aText ):
|
||||
try:
|
||||
return aText.encode('utf-8').decode('cp1252')
|
||||
except UnicodeDecodeError:
|
||||
return aText
|
||||
|
||||
# Generate an instance of a generic netlist, and load the netlist tree from
|
||||
# the command line option. If the file doesn't exist, execution will stop
|
||||
net = kicad_netlist_reader.netlist(sys.argv[1])
|
||||
|
@ -42,7 +50,7 @@ out = csv.writer(f, lineterminator='\n', delimiter=',', quotechar="\"", quoting=
|
|||
def writerow( acsvwriter, columns ):
|
||||
utf8row = []
|
||||
for col in columns:
|
||||
utf8row.append( str(col) )
|
||||
utf8row.append( fromNetlistText( str(col) ) )
|
||||
acsvwriter.writerow( utf8row )
|
||||
|
||||
components = net.getInterestingComponents()
|
||||
|
|
|
@ -63,7 +63,8 @@ html = html.replace('<!--TOOL-->', net.getTool())
|
|||
html = html.replace('<!--COMPCOUNT-->', "<b>Component Count:</b>" + \
|
||||
str(len(components)))
|
||||
|
||||
row = "<tr><th style='width:640px'>Ref</th>"
|
||||
row =""
|
||||
row += "<tr><th>Ref</th>"
|
||||
row += "<th>Qnty</th>"
|
||||
row += "<th>Value</th>" + "<th>Part</th>" + "<th>Datasheet</th>"
|
||||
row += "<th>Description</th>" + "<th>Vendor</th></tr>"
|
||||
|
@ -92,8 +93,12 @@ for group in grouped:
|
|||
row += "</td><td>" + c.getDatasheet()
|
||||
row += "</td><td>" + c.getDescription()
|
||||
row += "</td><td>" + c.getField("Vendor")+ "</td></tr>"
|
||||
row += "\n"
|
||||
|
||||
html = html.replace('<!--TABLEROW-->', row + "<!--TABLEROW-->")
|
||||
|
||||
# Print the formatted html to the file
|
||||
print(html, file=f)
|
||||
try:
|
||||
print(html.encode('utf-8').decode('cp1252'), file=f)
|
||||
except:
|
||||
print(html, file=f)
|
||||
|
|
|
@ -128,4 +128,7 @@ for group in grouped:
|
|||
html = html.replace('<!--TABLEROW-->', row + "<!--TABLEROW-->")
|
||||
|
||||
# Print the formatted html to output file
|
||||
print(html, file=f)
|
||||
try:
|
||||
print(html.encode('utf-8').decode('cp1252'), file=f)
|
||||
except:
|
||||
print(html, file=f)
|
||||
|
|
Loading…
Reference in New Issue