Step by step debugging

Hello,
Does anyone have a workflow or a workaround in order to use a debugger while running plugins ?
It would be really great to be able to jump in the process() code with pdb or pudb…
cheers,

What happens when you try?

Here is the log of pdb when setting a trace in a collector plugin:

Processing CollectSingleFilesInCwd
> <string>(26)process()
(Pdb) l
[EOF]
(Pdb) 

I have a similar issue with pudb where it suggests to use inline_cache module…

Ah, I can’t tell for sure, but my guess is it’s having trouble following a command that doesn’t have a file associated to it. You see when plug-ins are discovered on disk, they are loaded as a block of text, rather than imported directly. This is how they are able to reload themselves interactively. It’s possible this throws off any debugger.

Try running it with a simpler program, like this one.

from pyblish import api, util

class MyPlugin(api.ContextPlugin):
  order = api.CollectorOrder
  def process(self, context):
    context.create_instance("MyInstance")
    self.log.info("Hello world")

util.publish(plugins=[MyPlugin])

This won’t do any of the discovery magic, but rather just run the class as declared.

Hi,
For the moment as I need more the debugging than the autoreload, I’ve switched to using imp module to load the plugins from source. Here is a snippet of my updated code (imp is imported first):

try:
    module = imp.load_source(mod_name, abspath)
except Exception as err:
    log.debug("Skipped: \"%s\" (%s)", mod_name, err)
    continue

Is the autoreload a functionality used within the UI only ?
Would it be interesting to have the ability to switch between the two loading modes ? Using an env var or an argument to api.discover()
cheers,

Yes, that could be interesting. If you’re up for it, I’d be happy to consider PYBLISH_AUTORELOAD as a good canditate for an environment variable.

Did the debugger work with that?

Yep it works like a charm… (python-2.7.5)

I don’t know if imp the correct goto as it might be replaced with importlib with >2.7. We just need to be careful not to have different behaviours with different pythons…

Also there might be some optimisation in loading precompiled python if found in the folder.