← Back to team overview

kicad-developers team mailing list archive

Re: Pcbnew Python Interface breakage?

 

Hi,

I solved with a trick
            try:
                board_drawings=board.GetDrawings()
            except:
                board_drawings=board.DrawingsList()

            for drw in board_drawings:

for one plugin, and with a similar trick for the other;
but your solution is cleaner.

is the
diff --git a/pcbnew/swig/module.i b/pcbnew/swig/module.i
correct?

I see there is a block comment before @line 45
/*
%extend MODULE
...

Applying the patch I cannot make any plugins running
but if I de-comment that block it works...


Thx
Maurice


On 06/26/2017 2:24 PM, Maciej Sumiński wrote:
Hi Maurice,

This is due to the recent commit that enables iterators for DLISTs. We
have forgotten that such change impacts the Python interface.

I propose to keep the old interface, otherwise we will face many reports
when a script works correctly with the stable release, but not with
nightlies.

Would you check if the attached patch fixes the problem? If so, I will
push it.

Regards,
Orson

On 06/26/2017 10:23 AM, easyw wrote:
Hi,
I can confirm the same error on windows 10.

I get also an other kind of error in my annular plugin that worked till now

"for pad in module.Pads():
TypeError 'SwigPyObject' object is not iterable"

BR
Maurice

On 06/25/2017 5:46 PM, Simon Küppers wrote:
Hi,
I just updated KiCad on Linux Mint using the Launchpad PPA to test the
new connection algorithm. However, a SWIG error starts to pop up in my
python plugins.
Right now I can produce the error, when calling GetDrawings on the board
object (which worked a few days ago). It looks like the SWIG wrappers
are desynchronized from the C++-code. Is that (at all) possible?

This is the Traceback I get:

----
Traceback (most recent call last):

  File "/home/sk/.kicad_plugins/action_viafence/viafence_action.py",
line 160, in Run
    boardItem = self.boardObj.GetDrawings().GetFirst()

  File "/usr/lib/python2.7/dist-packages/pcbnew.py", line 18508, in
GetDrawings
    def GetDrawings(self):            return self.m_Drawings

  File "/usr/lib/python2.7/dist-packages/pcbnew.py", line 17803, in
<lambda>
    __getattr__ = lambda self, name: _swig_getattr(self, BOARD, name)

  File "/usr/lib/python2.7/dist-packages/pcbnew.py", line 74, in
_swig_getattr
    return _swig_getattr_nondynamic(self, class_type, name, 0)

  File "/usr/lib/python2.7/dist-packages/pcbnew.py", line 69, in
_swig_getattr_nondynamic
    return object.__getattr__(self, name)

AttributeError: type object 'object' has no attribute '__getattr__'

Best Regards
Simon

_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp


_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp



_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp



Follow ups

References