On Sun, 15 Mar 2020 at 09:18, Matthias Kuhn <[email protected]> wrote: > > Hi Sebastian, Borys, > > What about the opposite way: moving things to C++ and leaving only a > very thing wrapper for interacting with the plugins in place?
That would be my preference too -- the overall movement in QGIS code is to reduce the overall amount of Python code in master, not the reverse. > The rational is that plugin management is not performance-critical and could > become much more easy to maintain, Actually, over time we've found that the opposite is true -- the Python code in QGIS master is the **most** work to maintain, and a constant source of regressions. That's due to the nature of the Python language itself, not a reflection of the quality of the code... Nyall > > That should get rid of duplicated code and be compatible with everything. > > Best regards > > Matthias > > On 3/14/20 10:52 PM, Borys Jurgiel wrote: > > Hi Sebastian, > > > > The reason the whole infrastructure is split between Plugin Manager and > > Python > > Plugin Installer (and Python utils) is Python support is optional in QGIS. > > > > If QGIS is compiled without Python Support, the Plugin Manager still > > displays > > all C++ plugins, it just lacks Python ones (and of course install/deinstall > > funcions). > > > > I admit the the infrastructure became a bit complicated ;) However, porting > > the Plugin Manager to Python would require making Python a hard dependency > > of > > QGIS GUI (or we should drop C++ plugins by porting them all to core, what is > > discussed from time to time and doesn't seem to may happen). > > > > Regards, > > > > Borys > > > > > > Dnia sobota, 14 marca 2020 21:10:24 CET Sebastian M. Ernst pisze: > >> Hi folks, > >> > >> out of curiosity I have started poking around in QGIS' code related to > >> plugin management. It's an interesting mix of C++ and Python code. Even > >> the plugin management GUI itself is partially C++ (the main window, > >> QgsPluginManager[Interface], and part of its logic) and partially Python > >> (all further dialogs and their logic). As an experiment for now, I am > >> looking into how I could port at least the entire GUI to Python and > >> disentangle some of the knots. The rational is that plugin management is > >> not performance-critical and could become much more easy to maintain, > >> among a lot of other interesting benefits that a potentially fully > >> Python-based solution could offer. But that's a different story. For > >> now, I think I have hit a roadblock and was wondering whether anyone > >> could enlighten me. I'd greatly appreciate any help. > >> > >> I *believe* I have a fairly good understanding of what happens > >> underneath `/python/pyplugin_installer/`. The class `QgsPluginInstaller` > >> from `installer.py` appears to be a Python API that is called from the > >> C++-interface (`QgsPluginManagerInterface`) through `QgsPythonRunner`. > >> Most of the C++ appears to be located underneath > >> `/src/app/pluginmanager/` (with a single ui-file elsewhere, > >> `/src/ui/qgspluginmanagerbase.ui`). Having analyzed the C++ class > >> `QgsPluginManager` I believe most of the interface can easily ported to > >> Python. > >> > >> The tricky bit appears to be `/src/app/qgspluginregistry.cpp`. It offers > >> a class named `QgsPluginRegistry` (which is being used by > >> `QgsPluginManager`). I have not found a way to access this class (or > >> an/the instance of it) from Python. I figure it is required to handle > >> both Python *and* C++ plugins. `QgsPluginRegistry` makes heavy use of > >> `mPythonUtils`, which appears to be a C++ wrapper around > >> `/python/utils.py` (through `/src/python/qgspythonutilsimpl.cpp`). So > >> this portion of `QgsPluginRegistry` (about 50%) can be rewritten in > >> Python rather quickly. Methods such as `loadCppPlugin` or > >> `unloadCppPlugin` are a lot more problematic. As far as I can tell, > >> those would need to remain in C++ and they would need to be exposed to > >> Python somehow (if they are not already). > >> > >> Have I found all relevant components of QGIS responsible for plugin > >> management? Does my analysis contain any major flaws? Is there a way to > >> manage C++ plugins (i.e. to call `loadCppPlugin` and `unloadCppPlugin`) > >> from Python? > >> > >> Best regards, > >> Sebastian > >> _______________________________________________ > >> QGIS-Developer mailing list > >> [email protected] > >> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer > >> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer > > > > > > > > _______________________________________________ > > QGIS-Developer mailing list > > [email protected] > > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer > > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer > > > _______________________________________________ > QGIS-Developer mailing list > [email protected] > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer _______________________________________________ QGIS-Developer mailing list [email protected] List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
