Exemple #1
0
def get_logger_from_func(func):
    """Get logger from func's module"""
    try:
        log = getlog(get_func_name(func))
    except:
        # ^ no evidence of this ever failing
        log = base_log
        log.warning('Failed to get logger for func.')

    return log
Exemple #2
0
from smseventlog import delta
from smseventlog import errors as er
from smseventlog import functions as f
from smseventlog import getlog, users
from smseventlog.data import factorycampaign as fc
from smseventlog.data.units import update_comp_smr
from smseventlog.database import db
from smseventlog.gui import _global as gbl
from smseventlog.gui import dialogs as dlgs
from smseventlog.gui import tables as tbls
from smseventlog.gui.multithread import Worker
from smseventlog.gui.update import Updater
from smseventlog.utils import fileops as fl
from smseventlog.utils.credentials import CredentialManager

log = getlog(__name__)


class MainWindow(QMainWindow):
    """Main application window"""
    minesite_changed = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.app = QApplication.instance()
        self.setWindowTitle(gbl.title)
        self.setMinimumSize(QSize(1000, 400))
        self.minesite_changed.connect(self.update_minesite_label)
        self.minesite_label = QLabel(
            self
        )  # permanent label for status bar so it isnt changed by statusTips
Exemple #3
0
def log_error(msg: str = None,
              exc: Exception = None,
              display: bool = False,
              log: logging.Logger = None,
              prnt: bool = False,
              func: Callable = None,
              func_name: str = None,
              exc_info: tuple = None,
              discord: bool = False,
              **kw):
    """Base func to log/handle errors
    - eg, ignore things like 'NoInternetError' or 'NoRowSelectedError'

    Parameters
    ----------
    msg : str, optional
        Simple message to add to start of traceback, by default None\n
    exc : Exception, optional
        Exception object used to check exc time to add extra info to display msg, by default None\n
    display : bool, optional\n
    log : logging.Logger, optional
        Logger, passed from calling module, by default None\n
    prnt : bool, optional
        Msg will be printed if not running in frozen app, by default False\n
    func: optional
        Function object\n
        Already formatted traceback string, may have been passed in from different thread, so cant build here
    exc_info : tuple
        comes from sys.excepthook, (exc_type, exc_value, exc_traceback)
    discord : bool
        send message to discord err channel
    """
    if prnt:
        print_error(msg)

    # err came from excepthook, extract info
    if not exc_info is None:
        kw['tb_msg'] = ''.join(traceback.format_exception(*exc_info))
        exc_type, exc, tb = exc_info
        func_name = get_func_name_from_tb(tb=tb)

        if log is None:
            try:
                log = getlog(inspect.getmodule(
                    tb).__name__)  # 'smseventlog.gui.my_module'
            except:
                log = base_log
                log.warning('failed to get logger from tb')

    if func_name is None:
        func_name = get_func_name(func)

    if exc is None:
        exc = sys.exc_info()[
            1]  # doesnt work if comes from excepthook, but all good

    # get extra errors if raised with 'from'
    excs = [exc]
    if hasattr(exc, '__cause__'):
        excs.append(exc.__cause__)

    # Suppress error if 'expected' (NoInternet, NoRowSelected)
    for _exc in excs:
        if issubclass(type(_exc), ExpectedError):
            return

    if display:
        display_error(exc=exc, func_name=func_name, msg=msg, **kw)

    if discord:
        from smseventlog import functions as f
        f.discord(msg=format_traceback(exc_info=sys.exc_info()), channel='err')

    if not log is None:
        # exc_info = True makes sentry/logger collect it
        if exc_info is None:
            exc_info = True

        if msg is None:
            msg = str(exc)

        log.error(msg, exc_info=exc_info)
        return

    # unhandled exception, pass back to sentry if we don't handle - doesn't ever get here
    if not exc_info is None:
        sys.sentry_excepthook(*exc_info)
Exemple #4
0
import functools
import inspect
import logging
import sys
import traceback
import types
from typing import *

import sentry_sdk
from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration

from smseventlog import VERSION, getlog
from smseventlog.config import AZURE_WEB, IS_QT_APP, SYS_FROZEN

base_log = getlog(__name__)


def global_exception_hook(*exc_info) -> None:
    """Custom exception hook to catch all errors in central location

    Parameters
    ---------
    exc_info : tuple
        Comes from sys.exc_info() - (exc_type, exc, exc_traceback)
    """
    try:
        log_error(display=True, exc_info=exc_info)
    except:
        # if any issues with custom err handling, always try pass back to sentry, then base
        base_log.error('Custom excepthook failed, falling back to sentry',
                       exc_info=True)