pyworkflow.plugin module

class pyworkflow.plugin.Domain[source]

Bases: object

Class to represent the application domain. It will allow to specify new objects, protocols, viewers and wizards through the registration of new plugins.

classmethod findClass(className)[source]

Find a class object given its name. The search will start with protocols and then with protocols.

classmethod findSubClasses(classDict, className)[source]

Find all subclasses of a give className.

classmethod findViewers(target, environment)[source]

Find the available viewers in this Domain for this target.

Sorting criteria:

1st Will appear those viewers in VIEWERS variable (preferred viewers) in appearance order 2nd Viewers targeting specifically the target and not any super class of it 3rd rest.

In 2nd and 3rd case the order viewers are added depends on the alphabetical order the viewer when discovered. This usually matches the viewer class name, but could be fine tune using import aliases like:

from my_viewer import MyViewer as AAAMyViewer in the viewers folder of the plugin.

In case viewers is a file and not a folder with an __init__, I’m afraid class name is what is taken into account

The import order is not possible to use since python sort them automatically.

classmethod findWizards(protocol, environment)[source]

Find available wizards for this class, in this Domain.

Parameters
  • protocol – Protocol instance for which wizards will be search.

  • environment – The environment name for wizards (e.g TKINTER)

:return A dict with the paramName and wizards for the protocol passed.

classmethod getMapperDict()[source]

Return a dictionary that can be used with subclasses of Mapper to store/retrieve objects (including protocols) defined in this Domain.

classmethod getModuleClasses(module)[source]
classmethod getName()[source]

Return the name of this Domain.

classmethod getObjects()[source]

Return all EMObject subclasses from all plugins for this domain.

classmethod getPlugin(name)[source]
classmethod getPluginModule(name)[source]

Return the root of a plugin module initialized properly

classmethod getPlugins()[source]

Return existing plugins for this Domain.

classmethod getPreferredViewers(className)[source]

Find and import the preferred viewers for this class.

classmethod getProtocols()[source]

Return all Protocol subclasses from all plugins for this domain.

classmethod getViewers()[source]

Return all Viewer subclasses from all plugins for this domain.

classmethod getViewersSorted()[source]

Returns all viewers sorted by its class name

classmethod getWizards()[source]

Return all Wizard subclasses from all plugins for this domain.

static importFromPlugin(module, objects=None, errorMsg='', doRaise=False)[source]

This method try to import either a list of objects from the module/plugin or the whole module/plugin and returns what is imported if not fails. When the import fails (due to the plugin or the object is not found), it prints a common message + optional errorMsg; or it raise an error with the same message, if doRaise is True.

Parameters
  • module – Module name to import

  • objects – Optional, string with objects to return present in module

  • errorMsg – Optional, extra error message to append to the main message.

  • doRaise – If True it will raise an exception instead of tolerating the import error

Usages:

# Import the whole plugin 'plugin1' as 'plug1'
plug1 = importFromPlugin('plugin1')

# Import a plugin's module
pl1Cons = importFromPlugin('plug1.constants')

# Import a single class from a plugin's module
p1prot1 = importFromPlugin('plug1.protocols', 'prot1')

# Import some classes from a plugin's module,
#   the returned tuple has the same length of the second argument
pt1, pt2, ... = importFromPlugin('plugin1.protocols',
                                 ['pt1', 'pt2', ...])
classmethod printInfo()[source]

Simple function (mainly for debugging) that prints basic information about this Domain.

classmethod refreshPlugin(name)[source]

Refresh a given plugin name.

classmethod registerPlugin(name)[source]

Register a new plugin. This function should only be called when creating a class with __metaclass__=PluginMeta that will trigger this.

classmethod viewersLoaded()[source]

Returns true if viewers have been already discovered

class pyworkflow.plugin.Plugin[source]

Bases: object

abstract classmethod defineBinaries(env)[source]

Define required binaries in the given Environment.

classmethod getActiveVersion(home=None, versions=None)[source]

Returns the version of the binaries that are currently active. In the current implementation it will be inferred from the *_HOME variable, so it should contain the version number in it.

classmethod getCondaActivationCmd()[source]

Returns the conda activation command with && at the end if defined otherwise empty

abstract classmethod getEnviron()[source]

Set up the environment variables needed to launch programs.

classmethod getHome(*paths)[source]

Return a path from the “home” of the package if the _homeVar is defined in the plugin.

getName()[source]
getPath()[source]
getPluginDir()[source]
getPluginTemplateDir()[source]
classmethod getSupportedVersions()[source]

Return the list of supported binary versions.

getTemplates()[source]

Get the plugin templates from the templates directory. If more than one template is found or passed, a dialog is raised to choose one.

classmethod getUrl(protClass=None)[source]

Url for the plugin to point users to it

classmethod getVar(varName, defaultValue=None)[source]

Return the value of a given variable.

classmethod getVars()[source]

Return the value of a given variable.

inDevelMode() bool[source]

Returns true if code is not in python’s site-packages folder

classmethod validateInstallation()[source]

Check if the binaries are properly installed and if not, return a list with the error messages.

The default implementation will check if the _pathVars exists.