How about this?
if os.environ.get("DEBUG"):
MyPlugin.actions.append(MyAction)
How about this?
if os.environ.get("DEBUG"):
MyPlugin.actions.append(MyAction)
Perfect. Only other thing⌠can I get the plug-in instance that it is running on from within the Actionâs process?
Yeah, itâs available via dependency injection alongside context
.
def process(self, context, plugin):
# do things
Added a line about that on the release page, under âDependency Injectedâ.
Actually as I expected! This should be all thatâs necessary. Will have a look later today.
This seems to be a bit harder because of how Pyblish loads the plug-ins dynamically.
An issue has been opened on the Pyblish repository to discuss the possible workarounds.
And @marcus already fixed the issue and with the new version in the repository all should be well doing a inspect.getfile()
on the plug-in. As such creating an Action to show the plug-in in explorer should be roughly similar to
import pyblish.api
import subprocess
import os
import inspect
@pyblish.api.log
class ShowPluginInExplorerAction(pyblish.api.Action):
def process(self, plugin):
# Ensure it's not a registry loaded plug-in
module = plugin.__module__
if module == '__main__':
self.log.error("Action: Can't show file for in-memory plug-in")
return
path = inspect.getfile(plugin)
self.show_in_explorer(path)
def show_in_explorer(self, path):
path = os.path.abspath(str(path))
subprocess.Popen(r'explorer /select, "{0}"'.format(path))
Note that this is untested code!
Hope to have some more time on my hands soon to get this tested and added.
+1 for adding this by default when there is a working version in place:)
Looks good!
Two thoughts.
You could send the file link to the browser;
import webbrowser
url = "file://X:/MiscDev/language_links.html"
webbrowser.open(url,new=2)
Wow, did not know about that one! +1
Was this also recommended as a way to perform Repair? What I like about the old implementation where one defines a repair()
method on the plug-in is that it would show up as a âwrenchâ icon on the plug-in when it failed.
How does one implement that same behavior with Actions?
Currently I donât think Actions are visually represented in the Overview (@marcus?). Would be an interesting feature to add the actions icons to the plugin when appropriate.
Mm, thatâs right.
Have a look at the announcement thread for examples.
Theyâre in the right-click menu, you can assign custom icons to each item as well.
But you canât see whether a plugin has actions associated, without right-clicking on it. If you added the icons of an action to the plugin visually, similar to how the wrench looks now, the user would know whether there are actions on a plugin without knowing in advanced or right-clicking.
Iâd imagine that the user still needs to right-click to execute the action, but they can see in the overview that a certain action is present for a plugin.
I was planning on adding permanent/default actions to all items, such as opening the folder of a particular plug-in and such.
I was specifically looking for a way to have an âiconâ be added to the plug-in in the overview just like the Repair icon did before. So that one doesnât need to right click?
Could the Actions have something like that?
#pseudocode
class MyAction(Action):
icon_in_overview = True
...
No. Just, no.
Haha, well that clears that up.
Will have a go with the actions as is and let you know if I run into problems.
Hehe, yeah. Iâll sound like a broken record, but it doesnât have enough to do with (my view of) publishing. What you guys need are other tools that repairs and modifies things.