Files
KatKatKateryna 24556105f6 Installing libraries, aligning menu bar and general cleanup (#20)
* don't try to send layers with unsupported data providers

* innocent cleanup

* remove pip and old installer

* risky cleanup

* import library after plugin load

* proper label with clickable btns

* experimental: to uncover title bar

* Fix layout with unblocked header

* all layouts fixed

* removing extras

* update specklepy

* menu logo fixed

* fixed icon and metadata
2025-02-18 07:16:07 +08:00

126 lines
3.3 KiB
Python

"""Logging Utility Module for Speckle QGIS"""
import webbrowser
def display_and_log(
msg: str,
func=None, # name of the function from where logging was called
level: int = 2,
dockwidget=None,
url="",
blue=False,
report=False,
):
# display in Speckle UI: TODO
# log_to_user(msg, func, level, dockwidget, url, blue, report)
# display in QGIS message panel
logger.writeToLog(msg.replace("\n", ". ") + " " + url, level, func)
class Logging:
"""Holds utility methods for logging messages to QGIS"""
qgisInterface = None
def __init__(self, iface) -> None:
self.qgisInterface = iface
def log(self, message: str, level: int = 0):
"""Logs a specific message to the Speckle messages panel."""
try:
from qgis.core import Qgis, QgsMessageLog
if level == 0:
level = Qgis.Info
elif level == 1:
level = Qgis.Warning
elif level == 2:
level = Qgis.Critical
# return
QgsMessageLog.logMessage(message, "Speckle", level=level)
except ImportError or ModuleNotFoundError as e:
print(e)
def btnClicked(url):
try:
if url == "":
return
webbrowser.open(url, new=0, autoraise=True)
except Exception as e:
pass
def logToUserWithAction(
self,
message: str,
action_text: str,
url: str = "",
level: int = 0,
duration: int = 120,
):
self.log(message, level)
if not self.qgisInterface:
return
try:
from qgis.core import Qgis
from qgis.PyQt.QtWidgets import QPushButton
if level == 0:
level = Qgis.Info
elif level == 1:
level = Qgis.Warning
elif level == 2:
level = Qgis.Critical
widget = self.qgisInterface.messageBar().createMessage("Speckle", message)
button = QPushButton(widget)
button.setText(action_text)
button.pressed.connect(lambda: self.btnClicked(url))
widget.layout().addWidget(button)
self.qgisInterface.messageBar().pushWidget(widget, level, duration)
except ImportError:
pass
def logToUserPanel(
self,
message: str,
level: int = 0,
duration: int = 20,
func=None,
plugin=None,
):
"""Logs a specific message to the user in QGIS"""
self.log(message, level)
if not self.qgisInterface:
return
try:
from qgis.core import Qgis
if level == 0:
level = Qgis.Info
if level == 1:
level = Qgis.Warning
if level == 2:
level = Qgis.Critical
if self.qgisInterface:
self.qgisInterface.messageBar().pushMessage(
"Speckle", message, level=level, duration=duration
)
except ImportError:
pass
def writeToLog(self, msg: str = "", level: int = 2, func=None, plugin=None):
msg = str(msg)
if func is not None and func != "None":
msg += "::" + str(func)
self.log(msg, level)
logger = Logging(None)