示例#1
0
def push_to_qgislogging(title: str,
                        text: str = None,
                        level: LogLevel = LogLevel.INFO) -> None:
    """
    Writes the text to QGIS Logging
    :param title: message title
    :param text: message to write to the QGIS messagelog
    :param level: QGIS message level (standard: 0 -> QgsMessageLog.INFO)
    :return: Nothing
    """
    if level == LogLevel.DEBUG:
        return

    loglevel = Qgis.Info
    if level == LogLevel.WARNING:
        loglevel = Qgis.Warning
    elif level == LogLevel.CRITICAL:
        loglevel = Qgis.Critical

    if text is not None:
        msg = "{} - {}".format(text, title)
    else:
        msg = title
    QgsMessageLog().logMessage(msg,
                               tag="GeologicalDataProcessing",
                               level=loglevel,
                               notifyUser=True)
 def sendReport(self, error, tracker_url):
     """ Copies the given stacktrace in a GeoCat support form. """
     payload = {
         "subject": "[Crash Report] GeoCat Bridge for QGIS",
         "message": error
     }
     req = PreparedRequest()
     try:
         req.prepare("GET", tracker_url, params=parse.urlencode(payload, quote_via=parse.quote))
         webbrowser.open_new(req.url)
     except Exception as e:
         QgsMessageLog().logMessage(f"Failed to send crash report: {e}", 'GeoCat Bridge')
示例#3
0
    def __init__(self, parent=None, iface=None, visible=False):
        super(PlanetExplorerDockWidget, self).__init__(parent)

        self.setupUi(self)
        self.setVisible(visible)

        self._iface = iface
        # noinspection PyArgumentList
        self._auth_man = QgsApplication.authManager()

        self.p_client = None
        self.api_key = None
        self._save_creds = bool(
            pluginSetting(SAVE_CREDS_KEY,
                          namespace=SETTINGS_NAMESPACE,
                          typ='bool'))

        self.leUser.addAction(
            QIcon(':/plugins/planet_explorer/envelope-gray.svg'),
            QLineEdit.LeadingPosition)

        self.lblSignUp.linkActivated[str].connect(
            lambda: open_link_with_browser(SIGNUP_URL))
        self.lblTermsOfService.linkActivated[str].connect(
            lambda: open_link_with_browser(TOS_URL))
        self.lblForgotPass.linkActivated[str].connect(
            lambda: open_link_with_browser(FORGOT_PASS_URL))

        self.btn_ok = self.buttonBoxLogin.button(QDialogButtonBox.Ok)
        self.btn_ok.setText('Sign In')
        self.btn_api_key = self.buttonBoxLogin.button(QDialogButtonBox.Abort)
        """:type: QPushButton"""
        self.btn_api_key.setText('Use API key')
        self.btn_api_key.hide()
        self.buttonBoxLogin.accepted.connect(self.login)
        self.buttonBoxLogin.rejected.connect(self.api_key_login)

        self.tabWidgetResourceType.currentChanged[int].connect(
            self._item_group_changed)

        self._setup_daily_images_panel()
        self._setup_mosaics_panel()

        # Set default group type and filter widget
        self.tabWidgetResourceType.setCurrentIndex(0)

        # noinspection PyTypeChecker
        self._terms_browser = None

        self.msg_log = QgsMessageLog()
        # Local QgsMessageBar
        self.msgBar.hide()
    def __init__(self, parent=None, visible=False):
        super(PlanetExplorerDockWidget, self).__init__(parent)

        self.setupUi(self)
        self.setVisible(visible)

        self._auth_man = QgsApplication.authManager()

        self.p_client = None
        self.api_key = None
        self._save_creds = bool(
            QSettings().value(f"{SETTINGS_NAMESPACE}/{SAVE_CREDS_KEY}"))

        self.leUser.addAction(
            QIcon(":/plugins/planet_explorer/envelope-gray.svg"),
            QLineEdit.LeadingPosition,
        )

        self.lblSignUp.linkActivated[str].connect(
            lambda: open_link_with_browser(SIGNUP_URL))
        self.lblTermsOfService.linkActivated[str].connect(
            lambda: open_link_with_browser(TOS_URL))
        self.lblForgotPass.linkActivated[str].connect(
            lambda: open_link_with_browser(FORGOT_PASS_URL))

        self.btn_ok = self.buttonBoxLogin.button(QDialogButtonBox.Ok)
        self.btn_ok.setText("Sign In")
        self.btn_api_key = self.buttonBoxLogin.button(QDialogButtonBox.Abort)
        self.btn_api_key.setText("Use API key")
        self.btn_api_key.hide()
        self.buttonBoxLogin.accepted.connect(self.login)
        self.buttonBoxLogin.rejected.connect(self.api_key_login)

        self.lePass.returnPressed.connect(self.login)

        self.tabWidgetResourceType.currentChanged[int].connect(
            self._item_group_changed)

        self.setWindowTitle(f"Planet Explorer [{plugin_version()}]")

        self.daily_images_widget = None
        # self._setup_daily_images_panel()
        self._setup_mosaics_panel()

        # Set default group type and filter widget
        self.tabWidgetResourceType.setCurrentIndex(0)

        self._terms_browser = None
        self.msg_log = QgsMessageLog()
        self.msgBar.hide()
示例#5
0
def readServers():
    global _servers
    value = QSettings().value(SERVERS_SETTING)
    if value is None:
        return
    stored_servers = json.loads(value)
    for serverDef in stored_servers:
        try:
            s = serverFromDefinition(serverDef)
        except KeyError:
            known_types = ','.join(c.__name__ for c in (GeonetworkServer, GeoserverServer,
                                                        MapserverServer, PostgisServer))
            QgsMessageLog().logMessage(f"Failed to load '{serverDef[0]}' type: expected one of ({known_types})",
                                       meta.getAppName(), Qgis.Critical)
            continue
        _servers[s.name] = s
    def __init__(self, parent=None, iface=None, visible=False):
        super(PlanetExplorerDockWidget, self).__init__(parent)
        # Set up the user interface from Designer.
        # After setupUI you can access any designer object by doing
        # self.<objectname>, and you can use autoconnect slots - see
        # http://doc.qt.io/qt-5/designer-using-a-ui-file.html
        # #widgets-and-dialogs-with-auto-connect
        self.setupUi(self)
        self.setVisible(visible)

        self._iface = iface
        # noinspection PyArgumentList
        self._auth_man = QgsApplication.authManager()

        self.p_client = None
        self.api_key = None
        self._save_creds = bool(
            pluginSetting(SAVE_CREDS_KEY,
                          namespace=SETTINGS_NAMESPACE,
                          typ='bool'))

        self.leUser.addAction(
            QIcon(':/plugins/planet_explorer/envelope-gray.svg'),
            QLineEdit.LeadingPosition)

        self.lblSignUp.linkActivated[str].connect(
            lambda: self._open_link_with_browser(SIGNUP_URL))
        self.lblTermsOfService.linkActivated[str].connect(
            lambda: self._open_link_with_browser(TOS_URL))
        self.lblForgotPass.linkActivated[str].connect(
            lambda: self._open_link_with_browser(FORGOT_PASS_URL))

        self.btn_ok = self.buttonBoxLogin.button(QDialogButtonBox.Ok)
        self.btn_ok.setText('Sign In')
        self.btn_api_key = self.buttonBoxLogin.button(QDialogButtonBox.Abort)
        """:type: QPushButton"""
        self.btn_api_key.setText('Use API key')
        self.btn_api_key.hide()
        self.buttonBoxLogin.accepted.connect(self.login)
        self.buttonBoxLogin.rejected.connect(self.api_key_login)

        self._setup_group_type_selector()

        self.cmbBoxItemGroupType.currentIndexChanged[int].connect(
            self._item_group_changed)

        self._toggle_search_highlight(True)
        self.btnSearch.clicked[bool].connect(self.perform_search)

        # Collected sources/filters, upon search request
        self._sources = None
        self._sort_order = None
        self._filters = None
        self._request = None

        # Set up the mosaics widget
        self._setup_mosaics_panel()

        # Set up AOI, date-range and text filters
        self._setup_main_filters()

        # Non-main, per-item-group control widget filters
        self._filter_widget_registry = {}
        self._setup_filter_widgets()

        # Set default group type and filter widget
        self.cmbBoxItemGroupType.setCurrentIndex(0)
        self.stckdWidgetFilters.setCurrentIndex(0)

        # Set up tabbed widget
        self.tabWidgetResults.tabCloseRequested[int].connect(
            self.tab_close_requested)

        # Set up lower button bar
        self.btnOrder.clicked.connect(self.order_checked)
        self._setup_cog_button()
        # noinspection PyTypeChecker
        self._user_act = None

        # noinspection PyTypeChecker
        self._terms_browser = None
        self._setup_info_button()

        self.msg_log = QgsMessageLog()
        # Local QgsMessageBar
        self.msgBar.hide()

        self.frameResults.setStyleSheet(RESULTS_BKGRD_PE)

        self._checked_queue_set_count = 0
        self._checked_queue_set = set()
        self._checked_item_type_nodes = {}
示例#7
0
文件: Processing.py 项目: ltbam/QGIS
    def runAlgorithm(algOrName, onFinish, *args):
        if isinstance(algOrName, GeoAlgorithm):
            alg = algOrName
        else:
            alg = Processing.getAlgorithm(algOrName)
        if alg is None:
            QgsMessageLog.logMessage(
                Processing.tr('Error: Algorithm {0} not found\n').format(
                    algOrName), Processing.tr("Processing"))
            return
        alg = alg.getCopy()

        if len(args) == 1 and isinstance(args[0], dict):
            # Set params by name and try to run the alg even if not all parameter values are provided,
            # by using the default values instead.
            setParams = []
            for (name, value) in args[0].items():
                param = alg.getParameterFromName(name)
                if param and param.setValue(value):
                    setParams.append(name)
                    continue
                output = alg.getOutputFromName(name)
                if output and output.setValue(value):
                    continue
                QgsMessageLog.logMessage(
                    Processing.tr(
                        'Error: Wrong parameter value {0} for parameter {1}.').
                    format(value, name), Processing.tr("Processing"))
                ProcessingLog.addToLog(
                    ProcessingLog.LOG_ERROR,
                    Processing.
                    tr('Error in %s. Wrong parameter value %s for parameter %s.'
                       ) % (alg.name, value, name))
                return
            # fill any missing parameters with default values if allowed
            for param in alg.parameters:
                if param.name not in setParams:
                    if not param.setValue(None):
                        QgsMessageLog.logMessage(
                            Processing.
                            tr('Error: Missing parameter value for parameter {0}.'
                               ).format(param.name),
                            Processing.tr("Processing"))
                        ProcessingLog.addToLog(
                            ProcessingLog.LOG_ERROR,
                            Processing.
                            tr('Error in %s. Missing parameter value for parameter %s.'
                               ) % (alg.name, param.name))
                        return
        else:
            if len(args) != alg.getVisibleParametersCount(
            ) + alg.getVisibleOutputsCount():
                QgsMessageLog.logMessage(
                    Processing.tr('Error: Wrong number of parameters'),
                    Processing.tr("Processing"))
                processing.alghelp(algOrName)
                return
            i = 0
            for param in alg.parameters:
                if not param.hidden:
                    if not param.setValue(args[i]):
                        QgsMessageLog.logMessage(
                            Processing.tr('Error: Wrong parameter value: ') +
                            unicode(args[i]), Processing.tr("Processing"))
                        return
                    i = i + 1

            for output in alg.outputs:
                if not output.hidden:
                    if not output.setValue(args[i]):
                        QgsMessageLog.logMessage(
                            Processing.tr('Error: Wrong output value: ') +
                            unicode(args[i]), Processing.tr("Processing"))
                        return
                    i = i + 1

        msg = alg._checkParameterValuesBeforeExecuting()
        if msg:
            QgsMessageLog(
                Processing.tr('Unable to execute algorithm\n{0}').format(msg),
                Processing.tr("Processing"))
            return

        if not alg.checkInputCRS():
            QgsMessageLog(
                Processing.
                tr('Warning: Not all input layers use the same CRS.\nThis can cause unexpected results.'
                   ), Processing.tr("Processing"))

        if iface is not None:
            # Don't set the wait cursor twice, because then when you
            # restore it, it will still be a wait cursor.
            cursor = QApplication.overrideCursor()
            if cursor is None or cursor == 0:
                QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
            elif cursor.shape() != Qt.WaitCursor:
                QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))

        progress = None
        if iface is not None:
            progress = MessageBarProgress(alg.name)
        ret = runalg(alg, progress)
        if ret:
            if onFinish is not None:
                onFinish(alg, progress)
        else:
            QgsMessageLog(
                Processing.
                tr("There were errors executing the algorithm.\nCheck the QGIS log to get more information"
                   ), Processing.tr("Processing"))

        if iface is not None:
            QApplication.restoreOverrideCursor()
            progress.close()
        return alg
示例#8
0
from qgis.PyQt.QtCore import QCoreApplication
from qgis.PyQt.QtWidgets import QSizePolicy
from qgis.PyQt.QtWidgets import QMessageBox, QWidget
from qgis.core import Qgis, QgsMessageLog, QgsMessageOutput
from qgis.gui import QgsMessageBar
from qgis.utils import iface

from geocatbridge.utils.meta import getAppName

_LOGGER = QgsMessageLog()


class FeedbackMixin:
    class Buttons:
        OK = QMessageBox.Ok
        NO = QMessageBox.No
        YES = QMessageBox.Yes
        CANCEL = QMessageBox.Cancel

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._errors = []
        self._warnings = []
        self._main_bar = iface.messageBar()
        self._widget_bar = self._main_bar
        if not hasattr(self, 'tr'):
            # Do not reset the translate function if it's already there
            self.tr = None

    def _updateWidgetBar(self):
        """ Updates the _widget_bar property if the widget layout has been initialized. """