BOM python plugins: fix some issues related to python2/3 and utf-8 chars.

This commit is contained in:
jean-pierre charras 2021-05-31 10:00:38 +02:00
parent 3100cd3599
commit 35f9cd2634
5 changed files with 46 additions and 9 deletions

View File

@ -24,6 +24,14 @@ import kicad_netlist_reader
import csv import csv
import sys 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): def myEqu(self, other):
"""myEqu is a more advanced equivalence function for components which is """myEqu is a more advanced equivalence function for components which is
used by component grouping. Normal operation is to group components based 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 ): def writerow( acsvwriter, columns ):
utf8row = [] utf8row = []
for col in columns: for col in columns:
utf8row.append( str(col) ) # currently, no change utf8row.append( fromNetlistText( str(col) ) )
acsvwriter.writerow( utf8row ) acsvwriter.writerow( utf8row )
# Output a set of rows as a header providing general information # Output a set of rows as a header providing general information

View File

@ -20,6 +20,14 @@ import kicad_netlist_reader
import csv import csv
import sys 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 # 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 # the command line option. If the file doesn't exist, execution will stop
net = kicad_netlist_reader.netlist(sys.argv[1]) net = kicad_netlist_reader.netlist(sys.argv[1])
@ -34,7 +42,7 @@ except IOError:
f = sys.stdout f = sys.stdout
# Create a new csv writer object to use as the output formatter # 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 # Output a set of rows for a header providing general information
out.writerow(['Source:', net.getSource()]) out.writerow(['Source:', net.getSource()])
@ -44,6 +52,7 @@ out.writerow( ['Generator:', sys.argv[0]] )
out.writerow(['Component Count:', len(net.components)]) out.writerow(['Component Count:', len(net.components)])
out.writerow(['Ref', 'Qnty', 'Value', 'Cmp name', 'Footprint', 'Description', 'Vendor']) out.writerow(['Ref', 'Qnty', 'Value', 'Cmp name', 'Footprint', 'Description', 'Vendor'])
# Get all of the components in groups of matching parts + values # Get all of the components in groups of matching parts + values
# (see ky_generic_netlist_reader.py) # (see ky_generic_netlist_reader.py)
grouped = net.groupComponents() grouped = net.groupComponents()
@ -55,11 +64,15 @@ for group in grouped:
# Add the reference of every component in the group and keep a reference # 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 # to the component so that the other data can be filled in once per group
for component in group: for component in group:
refs += component.getRef() + ", " refs += fromNetlistText( component.getRef() ) + ", "
c = component c = component
# Fill in the component groups common data # Fill in the component groups common data
out.writerow([refs, len(group), c.getValue(), c.getPartName(), c.getFootprint(), out.writerow([refs, len(group),
c.getDescription(), c.getField("Vendor")]) fromNetlistText( c.getValue() ),
fromNetlistText( c.getPartName() ),
fromNetlistText( c.getFootprint() ),
fromNetlistText( c.getDescription() ),
fromNetlistText( c.getField("Vendor") )])

View File

@ -22,6 +22,14 @@ import kicad_netlist_reader
import csv import csv
import sys 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 # 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 # the command line option. If the file doesn't exist, execution will stop
net = kicad_netlist_reader.netlist(sys.argv[1]) 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 ): def writerow( acsvwriter, columns ):
utf8row = [] utf8row = []
for col in columns: for col in columns:
utf8row.append( str(col) ) utf8row.append( fromNetlistText( str(col) ) )
acsvwriter.writerow( utf8row ) acsvwriter.writerow( utf8row )
components = net.getInterestingComponents() components = net.getInterestingComponents()

View File

@ -63,7 +63,8 @@ html = html.replace('<!--TOOL-->', net.getTool())
html = html.replace('<!--COMPCOUNT-->', "<b>Component Count:</b>" + \ html = html.replace('<!--COMPCOUNT-->', "<b>Component Count:</b>" + \
str(len(components))) str(len(components)))
row = "<tr><th style='width:640px'>Ref</th>" row =""
row += "<tr><th>Ref</th>"
row += "<th>Qnty</th>" row += "<th>Qnty</th>"
row += "<th>Value</th>" + "<th>Part</th>" + "<th>Datasheet</th>" row += "<th>Value</th>" + "<th>Part</th>" + "<th>Datasheet</th>"
row += "<th>Description</th>" + "<th>Vendor</th></tr>" 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.getDatasheet()
row += "</td><td>" + c.getDescription() row += "</td><td>" + c.getDescription()
row += "</td><td>" + c.getField("Vendor")+ "</td></tr>" row += "</td><td>" + c.getField("Vendor")+ "</td></tr>"
row += "\n"
html = html.replace('<!--TABLEROW-->', row + "<!--TABLEROW-->") html = html.replace('<!--TABLEROW-->', row + "<!--TABLEROW-->")
# Print the formatted html to the file # 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)

View File

@ -128,4 +128,7 @@ for group in grouped:
html = html.replace('<!--TABLEROW-->', row + "<!--TABLEROW-->") html = html.replace('<!--TABLEROW-->', row + "<!--TABLEROW-->")
# Print the formatted html to output file # 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)