예제 #1
0
    def __init__(self, app):
        Module.__init__(self, app)

        # add template path
        app.jinja_loader.searchpath.append("%s/emonitor/modules/monitors/templates" % app.config.get('PROJECT_ROOT'))

        # subnavigation
        self.adminsubnavigation = [('/admin/monitors', 'monitors.definition'), ('/admin/monitors/style', 'module.monitors.style'), ('/admin/monitors/current', 'module.monitors.current'), ('/admin/monitors/actions', 'module.monitors.actions')]
        self.widgets = [PlaceholderWidget('placeholder')]

        signal.connect('monitorserver', 'clientsearchdone', frontendMonitorHandler.handleClientSearch)
        signal.connect('monitorserver', 'clientanswer', frontendMonitorHandler.handleClientAnswer)

        # static folders
        @app.route('/monitors/inc/<path:filename>')
        def monitors_static(filename):
            return send_from_directory("%s/emonitor/modules/monitors/inc/" % app.config.get('PROJECT_ROOT'), filename)
            
        # translations
        babel.gettext(u'module.monitors')
        babel.gettext(u'monitors.definition')
        babel.gettext(u'module.monitors.style')
        babel.gettext(u'module.monitors.current')
        babel.gettext(u'module.monitors.actions')
        babel.gettext(u'monitors.landscape')
        babel.gettext(u'monitors.portrait')
        babel.gettext(u'monitors.orientation.0')
        babel.gettext(u'monitors.orientation.1')
        babel.gettext(u'placeholder')
예제 #2
0
    def __init__(self, app):
        Module.__init__(self, app)
        # add template path
        app.jinja_loader.searchpath.append(
            u"{}/emonitor/modules/streets/templates".format(
                app.config.get('PROJECT_ROOT')))

        # subnavigation
        self.widgets = [StreetWidget('streets_street')]

        signal.addSignal('housenumber', 'osm')
        signal.connect('housenumber', 'osm',
                       adminHousenumberHandler.handleOSMChanged)
        signal.connect('housenumber', 'osmdone',
                       adminHousenumberHandler.handleOSMDone)

        # static folders
        @app.route('/streets/inc/<path:filename>')
        def streets_static(filename):
            return send_from_directory(
                u"{}/emonitor/modules/streets/inc/".format(
                    app.config.get('PROJECT_ROOT')), filename)

        # translations
        babel.gettext(u'module.streets')
        babel.gettext(u'module.streets.0')
        babel.gettext(u'streets_street')  # widget name
예제 #3
0
def init_app(app):
    """
    Do all init operations needed for this blueprint

    :param app: :py:class:`Flask` app
    """
    signal.addSignal('admin', 'processes')
    signal.connect('admin', 'processes', adminHandler.handleProcesses)
예제 #4
0
파일: admin.py 프로젝트: seiferta/eMonitor
def init_app(app):
    """
    Do all init operations needed for this blueprint

    :param app: :py:class:`Flask` app
    """
    signal.addSignal('admin', 'processes')
    signal.connect('admin', 'processes', adminHandler.handleProcesses)
예제 #5
0
    def __init__(self, gconfig=None, **options):
        executors = {'default': ThreadPoolExecutor(5)}
        job_defaults = {
            'coalesce': False,
            'max_instances': 3,
            'timezone': pytz.timezone("EST")
        }
        super(BackgroundScheduler, self).__init__(executors=executors,
                                                  job_defaults=job_defaults)

        signal.connect('scheduler', 'process', handleScheduleSignals.doHandle)
예제 #6
0
    def __init__(self, app):
        """
        Add specific parameters and configuration to app object

        :param app: flask wsgi application
        """
        Module.__init__(self, app)
        # add template path
        app.jinja_loader.searchpath.append("%s/emonitor/modules/maps/templates" % app.config.get('PROJECT_ROOT'))

        # subnavigation
        self.adminsubnavigation = [('/admin/maps', 'maps.base'), ('/admin/maps/position', 'module.maps.position')]

        self.widgets = [MapWidget('maps_map')]

        # signals and handlers
        signal.connect('map', 'tiledownloadstart', adminMapHandler.handleMapDownloadStart)
        signal.connect('map', 'tiledownloadstop', adminMapHandler.handleMapDownloadStop)
        signal.connect('map', 'tiledownloaddone', adminMapHandler.handleMapDownloadDone)
        signal.connect('map', 'tiledownloadprogress', adminMapHandler.handleMapDownloadProgress)

        # static folders
        @app.route('/maps/inc/<path:filename>')
        def maps_static(filename):
            return send_from_directory("%s/emonitor/modules/maps/inc/" % app.config.get('PROJECT_ROOT'), filename)

        # translations
        babel.gettext(u'module.maps')
        babel.gettext(u'maps_map')
        babel.gettext(u'maps.base')
        babel.gettext(u'module.maps.position')
예제 #7
0
    def __init__(self, app):
        Module.__init__(self, app)
        # add template path
        app.jinja_loader.searchpath.append(u"{}/emonitor/modules/streets/templates".format(app.config.get('PROJECT_ROOT')))

        # subnavigation
        self.widgets = [StreetWidget('streets_street')]

        signal.addSignal('housenumber', 'osm')
        signal.connect('housenumber', 'osm', adminHousenumberHandler.handleOSMChanged)
        signal.connect('housenumber', 'osmdone', adminHousenumberHandler.handleOSMDone)

        # static folders
        @app.route('/streets/inc/<path:filename>')
        def streets_static(filename):
            return send_from_directory(u"{}/emonitor/modules/streets/inc/".format(app.config.get('PROJECT_ROOT')), filename)
            
        # translations
        babel.gettext(u'module.streets')
        babel.gettext(u'module.streets.0')
        babel.gettext(u'streets_street')  # widget name
예제 #8
0
    def __init__(self, app):
        Module.__init__(self, app)

        # add template path
        app.jinja_loader.searchpath.append(
            "%s/emonitor/modules/monitors/templates" %
            app.config.get('PROJECT_ROOT'))

        # subnavigation
        self.adminsubnavigation = [
            ('/admin/monitors', 'monitors.definition'),
            ('/admin/monitors/style', 'module.monitors.style'),
            ('/admin/monitors/current', 'module.monitors.current'),
            ('/admin/monitors/actions', 'module.monitors.actions')
        ]
        self.widgets = [PlaceholderWidget('placeholder')]

        signal.connect('monitorserver', 'clientsearchdone',
                       frontendMonitorHandler.handleClientSearch)
        signal.connect('monitorserver', 'clientanswer',
                       frontendMonitorHandler.handleClientAnswer)

        # static folders
        @app.route('/monitors/inc/<path:filename>')
        def monitors_static(filename):
            return send_from_directory(
                "%s/emonitor/modules/monitors/inc/" %
                app.config.get('PROJECT_ROOT'), filename)

        # translations
        babel.gettext(u'module.monitors')
        babel.gettext(u'monitors.definition')
        babel.gettext(u'module.monitors.style')
        babel.gettext(u'module.monitors.current')
        babel.gettext(u'module.monitors.actions')
        babel.gettext(u'monitors.landscape')
        babel.gettext(u'monitors.portrait')
        babel.gettext(u'monitors.orientation.0')
        babel.gettext(u'monitors.orientation.1')
        babel.gettext(u'placeholder')
예제 #9
0
    def __init__(self, app):
        """
        Add specific parameters and configuration to app object

        :param app: flask wsgi application
        """
        Module.__init__(self, app)
        # add template path
        app.jinja_loader.searchpath.append("{}/emonitor/modules/alarms/templates".format(app.config.get('PROJECT_ROOT')))

        # subnavigation
        self.adminsubnavigation = [('/admin/alarms', 'alarms.base'), ('/admin/alarms/types', 'module.alarms.types'), ('/admin/alarms/report', 'module.alarms.report'), ('/admin/alarms/config', 'module.alarms.config'), ('/admin/alarms/test', 'module.alarms.test')]
        
        # create database tables
        from emonitor.modules.alarms.alarm import Alarm
        from emonitor.modules.alarms.alarmhistory import AlarmHistory
        from emonitor.modules.alarms.alarmattribute import AlarmAttribute
        from emonitor.modules.alarms.alarmsection import AlarmSection
        from emonitor.modules.alarms.alarmtype import AlarmType

        self.widgets = [AlarmIncomeWidget('alarms_income'), AlarmWidget('alarms'), AlarmTimerWidget('alarms_timer'), AlarmRemarkWidget('alarms_remark')]
        
        # eventhandlers
        for f in [f for f in os.listdir('{}/emonitor/modules/alarms/inc/'.format(app.config.get('PROJECT_ROOT'))) if f.endswith('.py')]:
            if not f.startswith('__'):
                cls = imp.load_source('emonitor.modules.alarms.inc', '{}/emonitor/modules/alarms/inc/{}'.format(app.config.get('PROJECT_ROOT'), f))
                checker = getattr(cls, cls.__all__[0])()
                if isinstance(checker, AlarmFaxChecker) and checker.getId() != 'Dummy':
                    events.addEvent('alarm_added.{}'.format(checker.getId()), handlers=[], parameters=['out.alarmid'])
                    events.addEvent('alarm_changestate.{}'.format(checker.getId()), handlers=[], parameters=['out.alarmid', 'out.state'])

        events.addEvent('alarm_added', handlers=[], parameters=['out.alarmid'])  # for all checkers
        events.addEvent('alarm_changestate', handlers=[], parameters=['out.alarmid', 'out.state'])  # for all checkers
        
        events.addHandlerClass('file_added', 'emonitor.modules.alarms.alarm.Alarms', Alarm.handleEvent, ['in.text', 'out.id', 'out.fields'])
        events.addHandlerClass('file_added', 'emonitor.modules.alarms.alarmtype.AlarmTypes', AlarmType.handleEvent, ['in.text', 'out.type'])

        # signals and handlers
        signal.addSignal('alarm', 'changestate')
        signal.addSignal('alarm', 'added')
        signal.addSignal('alarm', 'updated')
        signal.connect('alarm', 'changestate', frontendAlarmHandler.handleAlarmChanges)
        signal.connect('alarm', 'added', frontendAlarmHandler.handleAlarmChanges)
        signal.connect('alarm', 'updated', frontendAlarmHandler.handleAlarmChanges)
        signal.connect('alarm', 'deleted', frontendAlarmHandler.handleAlarmChanges)

        signal.connect('alarm', 'testupload_start', adminAlarmHandler.handleAlarmTestUpload)

        # static folders
        @app.route('/alarms/inc/<path:filename>')
        def alarms_static(filename):
            return send_from_directory("{}/emonitor/modules/alarms/inc/".format(app.config.get('PROJECT_ROOT')), filename)

        @app.route('/alarms/export/<path:filename>')  # filename = [id]-[style].pdf
        def export_static(filename):
            filename, extension = os.path.splitext(filename)
            try:
                id, template = filename.split('-')
                if extension not in ['.pdf', '.html', '.png']:
                    abort(404)
                elif extension == '.pdf':
                    return Response(Module.getPdf(Alarm.getExportData('.html', id=id, style=template, args=request.args)), mimetype="application/pdf")
                elif extension == '.html':
                    return Response(Alarm.getExportData(extension, id=id, style=template, args=request.args), mimetype="text/html")
                elif extension == '.png':
                    return Response(Alarm.getExportData(extension, id=id, style=template, filename=filename, args=request.args), mimetype="image/png")
            except ValueError:
                return abort(404)

        # add reportfolder
        if not os.path.exists('{}/alarmreports/'.format(app.config.get('PATH_DATA'))):
            os.makedirs('{}/alarmreports/'.format(app.config.get('PATH_DATA')))
            
        # translations
        babel.gettext(u'module.alarms')
        babel.gettext(u'alarms.base')
        babel.gettext(u'module.alarms.types')
        babel.gettext(u'module.alarms.report')
        babel.gettext(u'module.alarms.config')
        babel.gettext(u'module.alarms.test')
        babel.gettext(u'alarms_income')
        babel.gettext(u'alarms_timer')
        babel.gettext(u'alarms_remark')
        babel.gettext(u'alarms')
        babel.gettext(u'alarms.prio0')
        babel.gettext(u'alarms.prio1')
        babel.gettext(u'alarms.prio2')
        babel.gettext(u'emonitor.modules.alarms.alarm.Alarms')
        babel.gettext(u'emonitor.modules.alarms.alarmtype.AlarmTypes')
        babel.gettext(u'alarms.test.protocol')
        babel.gettext(u'alarms.test.result')
        babel.gettext(u'alarmstate.active')
        babel.gettext(u'alarmstate.created')
        babel.gettext(u'alarmstate.done')
        babel.gettext(u'alarmstate.archive')
        babel.gettext(u'active')
        babel.gettext(u'created')
        babel.gettext(u'done')
        babel.gettext(u'archive')
        babel.gettext(u'alarms.statechangeactivated')
        babel.gettext(u'alarms.prioshort0')
        babel.gettext(u'alarms.prioshort1')
        babel.gettext(u'alarms.prioshort2')
        babel.gettext(u'alarms.carsinuse')
        babel.gettext(u'history.autochangeState')
        babel.gettext(u'history.message')
        babel.gettext(u'trigger.alarm_added')
        babel.gettext(u'trigger.alarm_changestate')

        babel.gettext(u'trigger.alarm_added_sub')
        babel.gettext(u'trigger.alarm_changestate_sub')

        babel.gettext(u'alarms.print.slightleft')
        babel.gettext(u'alarms.print.slightright')
        babel.gettext(u'alarms.print.right')
        babel.gettext(u'alarms.print.left')
        babel.gettext(u'alarms.print.straight')
        babel.gettext(u'alarms.print.exit')
        babel.gettext(u'alarms.print.bus')
        babel.gettext(u'alarms.print.positive')
        babel.gettext(u'alarms.print.negative')

        babel.gettext(u'alarms.filter.0')
        babel.gettext(u'alarms.filter.1')
        babel.gettext(u'alarms.filter.7')
        babel.gettext(u'alarms.filter.31')

        babel.gettext(u'internal')
        babel.gettext(u'external')

        babel.gettext(u'AFAlerting')
        babel.gettext(u'AFCars')
        babel.gettext(u'AFMaterial')
        babel.gettext(u'AFReport')
        babel.gettext(u'AFTime')
        babel.gettext(u'AFDamage')
        babel.gettext(u'AFOthers')
        babel.gettext(u'AFPersons')

        babel.gettext(u'alarms.fields.simple')
        babel.gettext(u'alarms.fields.extended')
        babel.gettext(u'alarms.fields.persons.field.sum')
        babel.gettext(u'alarms.fields.persons.field.house')
        babel.gettext(u'alarms.fields.persons.field.pa_alarm')
        babel.gettext(u'alarms.fields.persons.field.el')
        babel.gettext(u'alarms.fields.persons.field.alarm')
        babel.gettext(u'alarms.fields.persons.field.pa')
        babel.gettext(u'alarms.fields.persons.field.pa_house')
        babel.gettext(u'alarms.fields.persons.field.elgrade')
        babel.gettext(u'alarms.fields.persons.field.style.simple')
        babel.gettext(u'alarms.fields.persons.field.style.extended')

        # init
        # Do init script for alarms at start and add alarms (state = 1 or 2) (active or done)
        for aalarm in Alarm.query.filter(Alarm.state in [1, 2]).all():
            aalarm.updateSchedules(reference=1)
예제 #10
0
    def __init__(self, app):
        """
        Add specific parameters and configuration to app object

        :param app: flask wsgi application
        """
        Module.__init__(self, app)
        # add template path
        app.jinja_loader.searchpath.append(
            "{}/emonitor/modules/alarms/templates".format(
                app.config.get('PROJECT_ROOT')))

        # subnavigation
        self.adminsubnavigation = [
            ('/admin/alarms', 'alarms.base'),
            ('/admin/alarms/types', 'module.alarms.types'),
            ('/admin/alarms/report', 'module.alarms.report'),
            ('/admin/alarms/config', 'module.alarms.config'),
            ('/admin/alarms/test', 'module.alarms.test')
        ]

        # create database tables
        from emonitor.modules.alarms.alarm import Alarm
        from emonitor.modules.alarms.alarmhistory import AlarmHistory
        from emonitor.modules.alarms.alarmattribute import AlarmAttribute
        from emonitor.modules.alarms.alarmsection import AlarmSection
        from emonitor.modules.alarms.alarmtype import AlarmType

        self.widgets = [
            AlarmIncomeWidget('alarms_income'),
            AlarmWidget('alarms'),
            AlarmTimerWidget('alarms_timer'),
            AlarmRemarkWidget('alarms_remark')
        ]

        # eventhandlers
        for f in [
                f for f in os.listdir('{}/emonitor/modules/alarms/inc/'.format(
                    app.config.get('PROJECT_ROOT'))) if f.endswith('.py')
        ]:
            if not f.startswith('__'):
                cls = imp.load_source(
                    'emonitor.modules.alarms.inc',
                    '{}/emonitor/modules/alarms/inc/{}'.format(
                        app.config.get('PROJECT_ROOT'), f))
                checker = getattr(cls, cls.__all__[0])()
                if isinstance(checker,
                              AlarmFaxChecker) and checker.getId() != 'Dummy':
                    for at in AlarmType.getAlarmTypes():
                        if at.interpreter == f:
                            events.addEvent('alarm_added.{}'.format(at.name),
                                            handlers=[],
                                            parameters=['out.alarmid'])
                            events.addEvent(
                                'alarm_changestate.{}'.format(at.name),
                                handlers=[],
                                parameters=['out.alarmid', 'out.state'])

        events.addEvent('alarm_added', handlers=[],
                        parameters=['out.alarmid'])  # for all checkers
        events.addEvent('alarm_changestate',
                        handlers=[],
                        parameters=['out.alarmid',
                                    'out.state'])  # for all checkers

        events.addHandlerClass('file_added',
                               'emonitor.modules.alarms.alarm.Alarms',
                               Alarm.handleEvent,
                               ['in.text', 'out.id', 'out.fields'])
        events.addHandlerClass('file_added',
                               'emonitor.modules.alarms.alarmtype.AlarmTypes',
                               AlarmType.handleEvent, ['in.text', 'out.type'])

        events.addHandlerClass('incoming_serial_data',
                               'emonitor.modules.alarms.alarm.Alarms',
                               Alarm.handleSerialEvent,
                               ['in.text', 'out.id', 'out.fields'])
        events.addHandlerClass('incoming_serial_data',
                               'emonitor.modules.alarms.alarmtype.AlarmTypes',
                               AlarmType.handleEvent, ['in.text', 'out.type'])

        # signals and handlers
        signal.addSignal('alarm', 'changestate')
        signal.addSignal('alarm', 'added')
        signal.addSignal('alarm', 'updated')
        signal.addSignal('alarm', 'error')
        signal.connect('alarm', 'changestate',
                       frontendAlarmHandler.handleAlarmChanges)
        signal.connect('alarm', 'added',
                       frontendAlarmHandler.handleAlarmChanges)
        signal.connect('alarm', 'updated',
                       frontendAlarmHandler.handleAlarmChanges)
        signal.connect('alarm', 'deleted',
                       frontendAlarmHandler.handleAlarmChanges)
        signal.connect('alarm', 'error',
                       frontendAlarmHandler.handleAlarmErrors)

        signal.connect('alarm', 'testupload_start',
                       adminAlarmHandler.handleAlarmTestUpload)

        # static folders
        @app.route('/alarms/inc/<path:filename>')
        def alarms_static(filename):
            if filename.startswith('sample_'):  # deliver sample checker file
                clsname = filename.split('_')[1]
                return Response(AlarmType.getAlarmTypes(
                    clsname).interpreterclass().getSampleLayout(),
                                mimetype="image/jpeg")

            return send_from_directory(
                "{}/emonitor/modules/alarms/inc/".format(
                    app.config.get('PROJECT_ROOT')), filename)

        @app.route('/alarms/export/<path:filename>'
                   )  # filename = [id]-[style].pdf
        def export_static(filename):
            filename, extension = os.path.splitext(filename)
            try:
                id, template = filename.split('-')
                if extension not in ['.pdf', '.html', '.png']:
                    abort(404)
                elif extension == '.pdf':
                    return Response(Module.getPdf(
                        Alarm.getExportData('.html',
                                            id=id,
                                            style=template,
                                            args=request.args)),
                                    mimetype="application/pdf")
                elif extension == '.html':
                    return Response(Alarm.getExportData(extension,
                                                        id=id,
                                                        style=template,
                                                        args=request.args),
                                    mimetype="text/html")
                elif extension == '.png':
                    return Response(Alarm.getExportData(extension,
                                                        id=id,
                                                        style=template,
                                                        filename=filename,
                                                        args=request.args),
                                    mimetype="image/png")
            except ValueError:
                return abort(404)

        # add reportfolder
        if not os.path.exists('{}/alarmreports/'.format(
                app.config.get('PATH_DATA'))):
            os.makedirs('{}/alarmreports/'.format(app.config.get('PATH_DATA')))

        # translations
        babel.gettext(u'module.alarms')
        babel.gettext(u'alarms.base')
        babel.gettext(u'module.alarms.types')
        babel.gettext(u'module.alarms.report')
        babel.gettext(u'module.alarms.config')
        babel.gettext(u'module.alarms.test')
        babel.gettext(u'alarms_income')
        babel.gettext(u'alarms_timer')
        babel.gettext(u'alarms_remark')
        babel.gettext(u'alarms')
        babel.gettext(u'alarms.prio0')
        babel.gettext(u'alarms.prio1')
        babel.gettext(u'alarms.prio2')
        babel.gettext(u'emonitor.modules.alarms.alarm.Alarms')
        babel.gettext(u'emonitor.modules.alarms.alarmtype.AlarmTypes')
        babel.gettext(u'alarms.test.protocol')
        babel.gettext(u'alarms.test.result')
        babel.gettext(u'alarmstate.active')
        babel.gettext(u'alarmstate.created')
        babel.gettext(u'alarmstate.done')
        babel.gettext(u'alarmstate.archive')
        babel.gettext(u'active')
        babel.gettext(u'created')
        babel.gettext(u'done')
        babel.gettext(u'archive')
        babel.gettext(u'alarms.statechangeactivated')
        babel.gettext(u'alarms.prioshort0')
        babel.gettext(u'alarms.prioshort1')
        babel.gettext(u'alarms.prioshort2')
        babel.gettext(u'alarms.carsinuse')
        babel.gettext(u'history.autochangeState')
        babel.gettext(u'history.message')
        babel.gettext(u'trigger.alarm_added')
        babel.gettext(u'trigger.alarm_changestate')

        babel.gettext(u'trigger.alarm_added_sub')
        babel.gettext(u'trigger.alarm_changestate_sub')

        babel.gettext(u'alarms.print.slightleft')
        babel.gettext(u'alarms.print.slightright')
        babel.gettext(u'alarms.print.right')
        babel.gettext(u'alarms.print.left')
        babel.gettext(u'alarms.print.straight')
        babel.gettext(u'alarms.print.exit')
        babel.gettext(u'alarms.print.bus')
        babel.gettext(u'alarms.print.positive')
        babel.gettext(u'alarms.print.negative')

        babel.gettext(u'alarms.filter.0')
        babel.gettext(u'alarms.filter.1')
        babel.gettext(u'alarms.filter.7')
        babel.gettext(u'alarms.filter.31')

        babel.gettext(u'internal')
        babel.gettext(u'external')

        babel.gettext(u'AFAlerting')
        babel.gettext(u'AFCars')
        babel.gettext(u'AFMaterial')
        babel.gettext(u'AFReport')
        babel.gettext(u'AFTime')
        babel.gettext(u'AFDamage')
        babel.gettext(u'AFOthers')
        babel.gettext(u'AFPersons')

        babel.gettext(u'alarms.fields.simple')
        babel.gettext(u'alarms.fields.extended')
        babel.gettext(u'alarms.fields.persons.field.sum')
        babel.gettext(u'alarms.fields.persons.field.house')
        babel.gettext(u'alarms.fields.persons.field.pa_alarm')
        babel.gettext(u'alarms.fields.persons.field.el')
        babel.gettext(u'alarms.fields.persons.field.alarm')
        babel.gettext(u'alarms.fields.persons.field.pa')
        babel.gettext(u'alarms.fields.persons.field.pa_house')
        babel.gettext(u'alarms.fields.persons.field.elgrade')
        babel.gettext(u'alarms.fields.persons.field.style.simple')
        babel.gettext(u'alarms.fields.persons.field.style.extended')

        # init
        # Do init script for alarms at start and add alarms (state = 1 or 2) (active or done)
        for aalarm in Alarm.query.filter(Alarm.state == 1
                                         or Alarm.state == 2).all():
            aalarm.updateSchedules(reference=1)
예제 #11
0
    def __init__(self, gconfig=None, **options):
        executors = {'default': ThreadPoolExecutor(5)}
        job_defaults = {'coalesce': False, 'max_instances': 3, 'timezone': pytz.timezone("EST")}
        super(BackgroundScheduler, self).__init__(executors=executors, job_defaults=job_defaults)

        signal.connect('scheduler', 'process', handleScheduleSignals.doHandle)