How to add an image texture to a single face?
The image node must be connected
You create an image node but don't connect it to anything. A node needs to ultimately flow into the output node to have an effect. You need to connect the image node's Color socket to the Principled node's Base Color socket. You can do that with (I also moved the node so its easier to see)
bsdf = mat.node_tree.nodes[&quot;Principled BSDF&quot;]
texImage = mat.node_tree.nodes.new('ShaderNodeTexImage')
texImage.image = bpy.data.images.load(&quot;S:\\roadsigns\\124_67.png&quot;)
texImage.location = -300, 120
mat.node_tree.links.new(bsdf.inputs['Base Color'], texImage.outputs['Color'])

Your shader will now look like

The poly's material_index is an index into the object's material slots
You have
bm.faces[3].material_index = ob.data.materials[&quot;matsign&quot;].pass_index

The pass_index has nothing to do with this and this only works by coincidence because it's 0 by default.
The material_index is an index into the objects' material slots. So since here
if ob.data.materials:
    ob.data.materials[0] = mat
else:
    ob.data.materials.append(mat)

you are ensuring the material is in the 0th slot, all polys with material_index 0 will use that material.
And since 0 is the default value for material_index, all polys will use that material without you having to do anything.