KiCad PCB EDA Suite
Loading...
Searching...
No Matches
API_PLUGIN_MANAGER Class Reference

Responsible for loading plugin definitions for API-based plugins (ones that do not run inside KiCad itself, but instead are launched as external processes by KiCad) More...

#include <api_plugin_manager.h>

Inheritance diagram for API_PLUGIN_MANAGER:

Classes

struct  JOB
 

Public Member Functions

 API_PLUGIN_MANAGER (wxEvtHandler *aParent)
 
void ReloadPlugins (std::optional< wxString > aDirectoryToScan=std::nullopt, std::shared_ptr< REPORTER > aReporter=nullptr)
 Clears the loaded plugins and actions and re-scans the filesystem to register new ones.
 
bool RecreatePluginEnvironment (const wxString &aIdentifier)
 Removes the given plugin's virtual environment (if any) and schedules a new one to be created with the currently-configured interpreter.
 
void HandlePythonInterpreterChanged ()
 
void InvokeAction (const wxString &aIdentifier, std::shared_ptr< REPORTER > aReporter=nullptr)
 
int InvokeActionSync (const wxString &aIdentifier, std::vector< wxString > aExtraArgs, wxString *aStdout=nullptr, wxString *aStderr=nullptr, std::shared_ptr< REPORTER > aReporter=nullptr)
 Invokes an action synchronously, capturing its output.
 
bool Busy () const
 
std::optional< const PLUGIN_ACTION * > GetAction (const wxString &aIdentifier)
 
std::vector< const PLUGIN_ACTION * > GetActionsForScope (PLUGIN_ACTION_SCOPE aScope)
 
std::map< int, wxString > & ButtonBindings (FRAME_T aFrame)
 
std::map< int, wxString > & MenuBindings (FRAME_T aFrame)
 
std::shared_ptr< REPORTER > GetReporter ()
 

Private Types

enum class  JOB_TYPE { CREATE_ENV , SETUP_ENV , INSTALL_REQUIREMENTS }
 

Private Member Functions

wxString pluginName (const wxString &aIdentifier) const
 
void processPluginDependencies ()
 
void processNextJob (wxCommandEvent &aEvent)
 
bool cancelPluginJobs (const wxString &aIdentifier)
 
void recreateCancelledPlugin (const wxString &aIdentifier)
 
int doInvokeAction (const wxString &aIdentifier, std::vector< wxString > aExtraArgs, bool aSync=false, wxString *aStdout=nullptr, wxString *aStderr=nullptr, std::shared_ptr< REPORTER > aReporter=nullptr)
 

Private Attributes

wxEvtHandler * m_parent
 
std::set< std::unique_ptr< API_PLUGIN >, CompareApiPluginIdentifiers > m_plugins
 
std::map< wxString, const API_PLUGIN * > m_pluginsCache
 
std::map< wxString, const PLUGIN_ACTION * > m_actionsCache
 
std::map< wxString, wxString > m_environmentCache
 Map of plugin identifier to a path for the plugin's virtual environment, if it has one.
 
std::map< FRAME_T, std::map< int, wxString > > m_buttonBindings
 Map of button wx item id to action identifier, per frame.
 
std::map< FRAME_T, std::map< int, wxString > > m_menuBindings
 Map of menu wx item id to action identifier, per frame.
 
std::set< wxString > m_readyPlugins
 
std::set< wxString > m_busyPlugins
 
std::map< wxString, long > m_runningPids
 Map of plugin identifier to the pid of its currently-running setup process, if any.
 
std::set< wxString > m_cancelledPlugins
 Plugins whose setup jobs were cancelled and need their environment recreated.
 
std::deque< JOB > m_jobs
 
std::unique_ptr< JSON_SCHEMA_VALIDATOR > m_schema_validator
 
std::shared_ptr< REPORTER > m_reloadReporter
 
long m_lastPid
 
wxTimer * m_raiseTimer
 

Detailed Description

Responsible for loading plugin definitions for API-based plugins (ones that do not run inside KiCad itself, but instead are launched as external processes by KiCad)

Definition at line 45 of file api_plugin_manager.h.

Member Enumeration Documentation

◆ JOB_TYPE

enum class API_PLUGIN_MANAGER::JOB_TYPE
strongprivate
Enumerator
CREATE_ENV 
SETUP_ENV 
INSTALL_REQUIREMENTS 

Definition at line 135 of file api_plugin_manager.h.

Constructor & Destructor Documentation

◆ API_PLUGIN_MANAGER()

API_PLUGIN_MANAGER::API_PLUGIN_MANAGER ( wxEvtHandler * aParent)

Member Function Documentation

◆ Busy()

bool API_PLUGIN_MANAGER::Busy ( ) const

Definition at line 1187 of file api_plugin_manager.cpp.

References m_busyPlugins, and m_jobs.

Referenced by BOOST_AUTO_TEST_CASE(), processNextJob(), and ReloadPlugins().

◆ ButtonBindings()

std::map< int, wxString > & API_PLUGIN_MANAGER::ButtonBindings ( FRAME_T aFrame)

◆ cancelPluginJobs()

bool API_PLUGIN_MANAGER::cancelPluginJobs ( const wxString & aIdentifier)
private

◆ doInvokeAction()

◆ GetAction()

std::optional< const PLUGIN_ACTION * > API_PLUGIN_MANAGER::GetAction ( const wxString & aIdentifier)

◆ GetActionsForScope()

◆ GetReporter()

std::shared_ptr< REPORTER > API_PLUGIN_MANAGER::GetReporter ( )
inline

Definition at line 96 of file api_plugin_manager.h.

References m_reloadReporter.

◆ HandlePythonInterpreterChanged()

◆ InvokeAction()

void API_PLUGIN_MANAGER::InvokeAction ( const wxString & aIdentifier,
std::shared_ptr< REPORTER > aReporter = nullptr )

Definition at line 716 of file api_plugin_manager.cpp.

References doInvokeAction().

Referenced by EDA_DRAW_FRAME::OnApiPluginInvoke().

◆ InvokeActionSync()

int API_PLUGIN_MANAGER::InvokeActionSync ( const wxString & aIdentifier,
std::vector< wxString > aExtraArgs,
wxString * aStdout = nullptr,
wxString * aStderr = nullptr,
std::shared_ptr< REPORTER > aReporter = nullptr )

Invokes an action synchronously, capturing its output.

Mainly used for things like wizards that have actions that return quickly and pass data to KiCad via stdout.

Parameters
aIdentifieris the plugin action to invoke
aExtraArgsare extra arguments to pass to the action beyond the ones specified in the plugin configuration file
aStdoutis a pointer to a string to fill with the stdout output of the action
aStderris a pointer to a string to fill with the stderr output of the action
aReporteris a REPORTER object to write status information to.
Returns
the exit code from the action process

Definition at line 723 of file api_plugin_manager.cpp.

References doInvokeAction().

Referenced by FOOTPRINT_WIZARD_MANAGER::Generate(), and FOOTPRINT_WIZARD_MANAGER::RefreshInfo().

◆ MenuBindings()

std::map< int, wxString > & API_PLUGIN_MANAGER::MenuBindings ( FRAME_T aFrame)

◆ pluginName()

wxString API_PLUGIN_MANAGER::pluginName ( const wxString & aIdentifier) const
private

Definition at line 749 of file api_plugin_manager.cpp.

References m_pluginsCache.

Referenced by processNextJob().

◆ processNextJob()

◆ processPluginDependencies()

◆ recreateCancelledPlugin()

void API_PLUGIN_MANAGER::recreateCancelledPlugin ( const wxString & aIdentifier)
private

◆ RecreatePluginEnvironment()

bool API_PLUGIN_MANAGER::RecreatePluginEnvironment ( const wxString & aIdentifier)

Removes the given plugin's virtual environment (if any) and schedules a new one to be created with the currently-configured interpreter.

Returns
true if the environment was removed and recreation was scheduled

Definition at line 328 of file api_plugin_manager.cpp.

References API_PLUGIN::BasePath(), CREATE_ENV, API_PLUGIN_MANAGER::JOB::env_path, PYTHON_MANAGER::GetPythonEnvironment(), API_PLUGIN::Identifier(), API_PLUGIN_MANAGER::JOB::identifier, m_jobs, m_pluginsCache, API_PLUGIN_MANAGER::JOB::plugin_path, PYTHON, API_PLUGIN::Runtime(), traceApi, API_PLUGIN_MANAGER::JOB::type, and PLUGIN_RUNTIME::type.

Referenced by PLUGINS_GRID_TRICKS::doPopupSelection(), HandlePythonInterpreterChanged(), processPluginDependencies(), and recreateCancelledPlugin().

◆ ReloadPlugins()

void API_PLUGIN_MANAGER::ReloadPlugins ( std::optional< wxString > aDirectoryToScan = std::nullopt,
std::shared_ptr< REPORTER > aReporter = nullptr )

Clears the loaded plugins and actions and re-scans the filesystem to register new ones.

Parameters
aDirectoryToScancan be provided to scan an arbitrary directory instead of the stock paths; provided for QA testing.
aReporteris a REPORTER object to write status information to.

Definition at line 209 of file api_plugin_manager.cpp.

References Busy(), EDA_EVT_PLUGIN_AVAILABILITY_CHANGED, PATHS::GetDefault3rdPartyPath(), PGM_BASE::GetLocalEnvVariables(), PATHS::GetStockPluginsPath(), PATHS::GetUserPluginsPath(), ENV_VAR::GetVersionedEnvVarValue(), m_actionsCache, m_buttonBindings, m_environmentCache, m_menuBindings, m_parent, m_plugins, m_pluginsCache, m_readyPlugins, m_reloadReporter, m_schema_validator, Pgm(), processPluginDependencies(), reportPluginLoadMessage(), and traceApi.

Referenced by BOOST_AUTO_TEST_CASE(), EDA_BASE_FRAME::CommonSettingsChanged(), PANEL_PCBNEW_ACTION_PLUGINS::OnReloadButtonClick(), and COMMON_CONTROL::ReloadPlugins().

Member Data Documentation

◆ m_actionsCache

std::map<wxString, const PLUGIN_ACTION*> API_PLUGIN_MANAGER::m_actionsCache
private

Definition at line 120 of file api_plugin_manager.h.

Referenced by doInvokeAction(), GetAction(), GetActionsForScope(), and ReloadPlugins().

◆ m_busyPlugins

std::set<wxString> API_PLUGIN_MANAGER::m_busyPlugins
private

◆ m_buttonBindings

std::map<FRAME_T, std::map<int, wxString> > API_PLUGIN_MANAGER::m_buttonBindings
private

Map of button wx item id to action identifier, per frame.

Definition at line 126 of file api_plugin_manager.h.

Referenced by ButtonBindings(), and ReloadPlugins().

◆ m_cancelledPlugins

std::set<wxString> API_PLUGIN_MANAGER::m_cancelledPlugins
private

Plugins whose setup jobs were cancelled and need their environment recreated.

Definition at line 146 of file api_plugin_manager.h.

Referenced by cancelPluginJobs(), processNextJob(), and recreateCancelledPlugin().

◆ m_environmentCache

std::map<wxString, wxString> API_PLUGIN_MANAGER::m_environmentCache
private

Map of plugin identifier to a path for the plugin's virtual environment, if it has one.

Definition at line 123 of file api_plugin_manager.h.

Referenced by processPluginDependencies(), and ReloadPlugins().

◆ m_jobs

std::deque<JOB> API_PLUGIN_MANAGER::m_jobs
private

◆ m_lastPid

long API_PLUGIN_MANAGER::m_lastPid
private

Definition at line 162 of file api_plugin_manager.h.

Referenced by API_PLUGIN_MANAGER(), and doInvokeAction().

◆ m_menuBindings

std::map<FRAME_T, std::map<int, wxString> > API_PLUGIN_MANAGER::m_menuBindings
private

Map of menu wx item id to action identifier, per frame.

Definition at line 129 of file api_plugin_manager.h.

Referenced by MenuBindings(), and ReloadPlugins().

◆ m_parent

wxEvtHandler* API_PLUGIN_MANAGER::m_parent
private

Definition at line 114 of file api_plugin_manager.h.

Referenced by API_PLUGIN_MANAGER(), and ReloadPlugins().

◆ m_plugins

std::set<std::unique_ptr<API_PLUGIN>, CompareApiPluginIdentifiers> API_PLUGIN_MANAGER::m_plugins
private

◆ m_pluginsCache

std::map<wxString, const API_PLUGIN*> API_PLUGIN_MANAGER::m_pluginsCache
private

Definition at line 118 of file api_plugin_manager.h.

Referenced by pluginName(), RecreatePluginEnvironment(), and ReloadPlugins().

◆ m_raiseTimer

wxTimer* API_PLUGIN_MANAGER::m_raiseTimer
private

Definition at line 163 of file api_plugin_manager.h.

Referenced by API_PLUGIN_MANAGER(), and doInvokeAction().

◆ m_readyPlugins

std::set<wxString> API_PLUGIN_MANAGER::m_readyPlugins
private

◆ m_reloadReporter

std::shared_ptr<REPORTER> API_PLUGIN_MANAGER::m_reloadReporter
private

Definition at line 160 of file api_plugin_manager.h.

Referenced by GetReporter(), processNextJob(), and ReloadPlugins().

◆ m_runningPids

std::map<wxString, long> API_PLUGIN_MANAGER::m_runningPids
private

Map of plugin identifier to the pid of its currently-running setup process, if any.

Definition at line 143 of file api_plugin_manager.h.

Referenced by cancelPluginJobs(), and processNextJob().

◆ m_schema_validator

std::unique_ptr<JSON_SCHEMA_VALIDATOR> API_PLUGIN_MANAGER::m_schema_validator
private

Definition at line 158 of file api_plugin_manager.h.

Referenced by API_PLUGIN_MANAGER(), and ReloadPlugins().


The documentation for this class was generated from the following files: