def init_app(self, app): Communication.app = app try: # try telegram import telegram self.__dict__['telegram'] = TelegramBot(app=app, token=Settings.get('telegramsettings')['telegramkey'] or app.config.get('TELEGRAMKEY')) except TypeError: Settings.set('telegramsettings', {'telegramkey': ''}) self.__dict__['telegram'] = None except ImportError: logger.error("error telegram") self.__dict__['telegram'] = None try: # try mail # TODO: add Mail communicator pass self.__dict__['mail'] = Mailer except ImportError: self.__dict__['mail'] = None logger.error("error Mail") # Mail = None app.extensions['communication'] = self logger.info("{} Communicator(s) loaded: {}".format(len(self.__dict__.keys()), ", ".join(self.__dict__.keys()))) events.addHandlerClass('*', 'emonitor.communication.Communication', Communication.handleEvent, ['in.sendertype', 'in.group', 'in.id', 'in.style'])
def getAdminContent(self, **params): """ Deliver admin content of module messages :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if 'saveparameters' in request.form.keys(): # save parameters for modules for k in [k for k in request.form if k != 'saveparameters']: Settings.set("messages.%s" % k, request.form.get(k)) monitorserver.sendMessage('0', 'reset') # refresh monitor layout if len(module) == 2: if module[1] == 'types': # type submodule params.update({'implementations': MessageType.getMessageTypes()}) return render_template('admin.messages.types.html', **params) else: messages = { '1': Messages.getMessages(state=1), '0': Messages.getMessages(state=0) } params.update({'messages': messages}) return render_template('admin.messages.html', **params)
def init_app(self, app): Communication.app = app try: # try telegram import telegram self.__dict__['telegram'] = TelegramBot( app=app, token=Settings.get('telegramsettings')['telegramkey'] or app.config.get('TELEGRAMKEY')) except TypeError: Settings.set('telegramsettings', {'telegramkey': ''}) self.__dict__['telegram'] = None except ImportError: logger.error("error telegram") self.__dict__['telegram'] = None try: # try mail # TODO: add Mail communicator pass self.__dict__['mail'] = Mailer except ImportError: self.__dict__['mail'] = None logger.error("error Mail") # Mail = None app.extensions['communication'] = self logger.info("{} Communicator(s) loaded: {}".format( len(self.__dict__.keys()), ", ".join(self.__dict__.keys()))) events.addHandlerClass( '*', 'emonitor.communication.Communication', Communication.handleEvent, ['in.sendertype', 'in.group', 'in.id', 'in.style'])
def getOCRParams(): """ Get dict with OCR parameters :return: *callstring*, *inputformat*, *inputtextformat* """ ret = {'callstring': '', 'inputformat': '', 'inputtextformat': ''} for v in Settings.query.filter(Settings.name.like('ocr.%')).all(): ret[v.name.split('.')[-1]] = v.value if Settings.query.filter(Settings.name.like('ocr.%')).count() == 0: # use default values db.session.add(Settings.set('ocr.inputformat', DEFAULTINPUTFORMAT)) db.session.add(Settings.set('ocr.inputtextformat', DEFAULTINPUTTEXTFORMAT)) db.session.add(Settings.set('ocr.callstring', DEFAULTCALLSTRING)) db.session.commit() return Ocr.getOCRParams() return ret
def getOCRParams(): """ Get dict with OCR parameters :return: *callstring*, *inputformat*, *inputtextformat* """ ret = {'callstring': '', 'inputformat': '', 'inputtextformat': ''} for v in Settings.query.filter(Settings.name.like('ocr.%')).all(): ret[v.name.split('.')[-1]] = v.value if Settings.query.filter(Settings.name.like( 'ocr.%')).count() == 0: # use default values db.session.add(Settings.set('ocr.inputformat', DEFAULTINPUTFORMAT)) db.session.add( Settings.set('ocr.inputtextformat', DEFAULTINPUTTEXTFORMAT)) db.session.add(Settings.set('ocr.callstring', DEFAULTCALLSTRING)) db.session.commit() return Ocr.getOCRParams() return ret
def getConvertParams(): """ Get dict with configuration parameters for conversion :return: *callstring*, *format* """ ret = {'callstring': '', 'format': ''} for v in Settings.query.filter(Settings.name.like('convert.%')): if v.name == 'convert.format': ret['format'] = v.value elif v.name == 'convert.callstring': ret['callstring'] = v.value if Settings.query.filter(Settings.name.like('convert.%')).count() == 0: # use default values db.session.add(Settings.set('convert.format', DEFAULTIMAGECONVERTFORMAT)) db.session.add(Settings.set('convert.callstring', DEFAULTIMAGECONVERTCALL)) db.session.commit() return Ocr.getConvertParams() return ret
def getAdminContent(self, **params): """ Deliver admin content of module messages :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if 'saveparameters' in request.form.keys(): # save parameters for modules for k in [k for k in request.form if k != 'saveparameters']: Settings.set("messages.%s" % k, request.form.get(k)) monitorserver.sendMessage('0', 'reset') # refresh monitor layout if len(module) == 2: if module[1] == 'types': # type submodule params.update({'implementations': MessageType.getMessageTypes()}) return render_template('admin.messages.types.html', **params) else: messages = {'1': Messages.getMessages(state=1), '0': Messages.getMessages(state=0)} params.update({'messages': messages}) return render_template('admin.messages.html', **params)
def getConvertParams(): """ Get dict with configuration parameters for conversion :return: *callstring*, *format* """ ret = {'callstring': '', 'format': '', 'crop': 'True'} for v in Settings.query.filter(Settings.name.like('convert.%')): if v.name == 'convert.format': ret['format'] = v.value elif v.name == 'convert.callstring': ret['callstring'] = v.value elif v.name == 'convert.crop': ret['crop'] = v.value if Settings.query.filter(Settings.name.like( 'convert.%')).count() == 0: # use default values db.session.add( Settings.set('convert.format', DEFAULTIMAGECONVERTFORMAT)) db.session.add( Settings.set('convert.callstring', DEFAULTIMAGECONVERTCALL)) db.session.add(Settings.set('convert.crop', 'True')) db.session.commit() return Ocr.getConvertParams() return ret
def __init__(self, app): Module.__init__(self, app) # add template path app.jinja_loader.searchpath.append( "%s/emonitor/modules/settings/templates" % app.config.get('PROJECT_ROOT')) self.widgets = [CrestWidget('departmentcrest')] # subnavigation self.adminsubnavigation = [ ('/admin/settings', 'settings.main'), ('/admin/settings/department', 'module.settings.department'), ('/admin/settings/cars', 'module.settings.cars'), ('/admin/settings/communication', 'module.settings.communication'), ('/admin/settings/start', 'module.settings.start') ] # static folders @app.route('/settings/inc/<path:filename>') def settings_static(filename): return send_from_directory( "%s/emonitor/modules/settings/inc/" % app.config.get('PROJECT_ROOT'), filename) # translations babel.gettext(u'module.settings') babel.gettext(u'settings.main') babel.gettext(u'module.settings.department') babel.gettext(u'module.settings.cars') babel.gettext(u'module.settings.communication') babel.gettext(u'module.settings.start') babel.gettext(u'settings.pathtype.pathdone') babel.gettext(u'settings.pathtype.pathtmp') babel.gettext(u'settings.pathtype.pathdata') babel.gettext(u'settings.pathtype.pathincome') babel.gettext(u'departmentcrest') babel.gettext(u'telegram.default.welcomemsg') # add default values if Settings.query.count() == 0: # add default values db.session.add(Settings.set('defaultZoom', 15)) db.session.add(Settings.set('startLat', '')) db.session.add(Settings.set('startLng', '')) db.session.add(Settings.set('homeLat', '')) db.session.add(Settings.set('homeLng', '')) db.session.add( Settings.set( 'alarms.evalfields', '_bab_\r\n_train_\r\n_street_\r\n_default_city_\r\n_interchange_\r\n_kilometer_\r\n_bma_\r\n_bma_main_\r\n_bma_key_\r\n_train_identifier_' )) db.session.add(Settings('cartypes', "- [car, '#ffffff']\n")) db.session.commit()
def __init__(self, app): Module.__init__(self, app) # add template path app.jinja_loader.searchpath.append("%s/emonitor/modules/settings/templates" % app.config.get("PROJECT_ROOT")) # subnavigation self.adminsubnavigation = [ ("/admin/settings", "settings.main"), ("/admin/settings/department", "module.settings.department"), ("/admin/settings/cars", "module.settings.cars"), ("/admin/settings/start", "module.settings.start"), ] # static folders @app.route("/settings/inc/<path:filename>") def settings_static(filename): return send_from_directory("%s/emonitor/modules/settings/inc/" % app.config.get("PROJECT_ROOT"), filename) # translations babel.gettext(u"module.settings") babel.gettext(u"settings.main") babel.gettext(u"module.settings.department") babel.gettext(u"module.settings.cars") babel.gettext(u"module.settings.start") babel.gettext(u"settings.pathtype.pathdone") babel.gettext(u"settings.pathtype.pathtmp") babel.gettext(u"settings.pathtype.pathdata") babel.gettext(u"settings.pathtype.pathincome") # add default values if Settings.query.count() == 0: # add default values db.session.add(Settings.set("defaultZoom", 15)) db.session.add(Settings.set("startLat", "")) db.session.add(Settings.set("startLng", "")) db.session.add(Settings.set("homeLat", "")) db.session.add(Settings.set("homeLng", "")) db.session.add( Settings.set( "alarms.evalfields", "_bab_\r\n_train_\r\n_street_\r\n_default_city_\r\n_interchange_\r\n_kilometer_\r\n_bma_\r\n_bma_main_\r\n_bma_key_\r\n_train_identifier_", ) ) db.session.add(Settings("cartypes", "- [car, '#ffffff']\n")) db.session.commit()
def __init__(self, app): Module.__init__(self, app) # add template path app.jinja_loader.searchpath.append("%s/emonitor/modules/settings/templates" % app.config.get('PROJECT_ROOT')) self.widgets = [CrestWidget('departmentcrest')] # subnavigation self.adminsubnavigation = [('/admin/settings', 'settings.main'), ('/admin/settings/department', 'module.settings.department'), ('/admin/settings/cars', 'module.settings.cars'), ('/admin/settings/communication', 'module.settings.communication'), ('/admin/settings/start', 'module.settings.start')] # static folders @app.route('/settings/inc/<path:filename>') def settings_static(filename): return send_from_directory("%s/emonitor/modules/settings/inc/" % app.config.get('PROJECT_ROOT'), filename) # translations babel.gettext(u'module.settings') babel.gettext(u'settings.main') babel.gettext(u'module.settings.department') babel.gettext(u'module.settings.cars') babel.gettext(u'module.settings.communication') babel.gettext(u'module.settings.start') babel.gettext(u'settings.pathtype.pathdone') babel.gettext(u'settings.pathtype.pathtmp') babel.gettext(u'settings.pathtype.pathdata') babel.gettext(u'settings.pathtype.pathincome') babel.gettext(u'departmentcrest') babel.gettext(u'telegram.default.welcomemsg') # add default values if Settings.query.count() == 0: # add default values db.session.add(Settings.set('defaultZoom', 15)) db.session.add(Settings.set('startLat', '')) db.session.add(Settings.set('startLng', '')) db.session.add(Settings.set('homeLat', '')) db.session.add(Settings.set('homeLng', '')) db.session.add(Settings.set('alarms.evalfields', '_bab_\r\n_train_\r\n_street_\r\n_default_city_\r\n_interchange_\r\n_kilometer_\r\n_bma_\r\n_bma_main_\r\n_bma_key_\r\n_train_identifier_')) db.session.add(Settings('cartypes', "- [car, '#ffffff']\n")) db.session.commit()
def getAdminContent(self, **params): """ Deliver admin content of module mapitems :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) < 2: module.append( current_app.blueprints['admin'].modules['mapitems']. adminsubnavigation[0][0].split('/')[-1]) # get first submenuitem if len(module) >= 2: if module[1] == 'definition': # definition if request.method == 'POST': if request.form.get('action').startswith( 'edititemtype_'): # edit/add definition TODO: fix typename = request.form.get('action').split('_') itemtype = [ d for d in Settings.get('mapitemdefinition') if d['name'] == typename[1] ] if len(itemtype) > 0: itemtype = itemtype[0] if 'parameters' not in itemtype: itemtype['parameters'] = { 'layout': '', 'tileserver': 0 } if 'key' not in itemtype: itemtype['key'] = [] if 'cities' not in itemtype: itemtype['cities'] = [] if 'itemtype' not in itemtype: itemtype['itemtype'] = 'node' else: itemtype = { 'name': '', 'filter': '', 'attributes': [], 'parameters': {'layout', 'tileserver'}, 'key': [], 'cities': [], 'itemtype': 'node' } params.update({ 'itemtype': itemtype, 'cities': City.getCities(), 'layouters': MapItem.getLayouters() }) return render_template( 'admin.mapitems.definition_actions.html', **params) elif request.form.get('action').startswith( 'deleteitemtype_'): # delete definition itemtypes = Settings.get('mapitemdefinition') for itemtype in itemtypes: if itemtype['name'] == request.form.get( 'action').split('_')[1]: del itemtypes[itemtypes.index(itemtype)] Settings.set('mapitemdefinition', itemtypes) db.session.commit() elif request.form.get( 'action') == 'updateitemtypes': # save definition itemtypes = Settings.get('mapitemdefinition') position = -1 for itemtype in itemtypes: if itemtype['name'] == request.form.get('edit_name'): position = itemtypes.index(itemtype) break if position >= 0: # update type itemtypes[position]['filter'] = request.form.get( 'edit_filter') itemtypes[position]['cities'] = [ int(i) for i in request.form.getlist('edit_cityid') ] itemtypes[position]['itemtype'] = request.form.get( 'edit_itemtype') itemtypes[position]['attributes'] = request.form.get( 'edit_attributes').split('\r\n') itemtypes[position]['parameters'] = { 'layout': request.form.get('edit_layout'), 'tileserver': request.form.get('edit_tileserver') } itemtypes[position]['key'] = request.form.get( 'edit_keys').split('\r\n') else: # add new type it = dict() it['name'] = request.form.get('edit_name') it['filter'] = request.form.get('edit_filter') it['cities'] = [ int(i) for i in request.form.getlist('edit_cityid') ] it['itemtype'] = request.form.get('edit_itemtype') it['attributes'] = request.form.get( 'edit_attributes').split('\r\n') it['parameters'] = { 'layout': request.form.get('edit_layout') } if itemtypes == "": itemtypes = [it] else: itemtypes.append(it) it['key'] = request.form.get('edit_keys').split('\r\n') Settings.set('mapitemdefinition', itemtypes) db.session.commit() current_app.blueprints['admin'].modules[ 'mapitems'].updateAdminSubNavigation() params.update({ 'itemtypes': Settings.get('mapitemdefinition', []), 'layouters': MapItem.getLayouters() }) return render_template('admin.mapitems.definition.html', **params) # deliver default list itemdefinition = [ t for t in Settings.get('mapitemdefinition') if t['name'] == module[1] ][0] itemtypes = MapItem.getMapitems(itemtype=module[1]) page = 0 if len(module) == 3: # pagination active page = int(module[2]) pagination = Pagination(page, PER_PAGE, len(itemtypes)) params.update({ 'itemtypes': itemtypes[page:page + PER_PAGE], 'itemdefinition': itemdefinition, 'pagination': pagination }) return render_template('admin.mapitems.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module maps :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) > 1: if module[1] == 'position': if request.method == 'POST': if request.form.get('action') == 'saveposition': # safe default map position and home position Settings.set('defaultLat', request.form.get('default_lat', '')) Settings.set('defaultLng', request.form.get('default_lng', '')) Settings.set('defaultZoom', request.form.get('default_zoom', '')) Settings.set('homeLat', request.form.get('home_lat', '')) Settings.set('homeLng', request.form.get('home_lng', '')) db.session.commit() params.update({'settings': Settings}) return render_template('admin.map.position.html', **params) else: if request.method == 'POST': if request.form.get('action') == 'savemap': # save map if request.form.get('map_id') != 'None': # update _map = Map.getMaps(request.form.get('map_id')) _map.name = request.form.get('map_name') _map.path = request.form.get('map_path') _map.maptype = int(request.form.get('map_type')) _map.tileserver = request.form.get('map_tileserver') _map.default = request.form.get('map_default') else: # add map _map = Map(request.form.get('map_name'), request.form.get('map_path'), int(request.form.get('map_type')), request.form.get('map_tileserver'), int(request.form.get('map_default'))) db.session.add(_map) db.session.commit() elif request.form.get('action') == 'createmap': # add map params.update({'map': Map('', '', 0, '', 0), 'tilebase': current_app.config.get('PATH_TILES'), 'settings': Settings}) return render_template('admin.map_actions.html', **params) elif request.form.get('action').startswith('detailmap_'): # edit map params.update({'map': Map.getMaps(request.form.get('action').split('_')[-1]), 'settings': Settings, 'tilebase': current_app.config.get('PATH_TILES'), 'tiles': '\', \''.join(Settings.getMapTiles(int(request.form.get('action').split('_')[-1])))}) return render_template('admin.map_actions.html', **params) elif request.form.get('action').startswith('deletemap_'): # delete map db.session.delete(Map.getMaps(int(request.form.get('action').split('_')[-1]))) db.session.commit() elif request.form.get('action') == 'ordersetting': # change map order maps = [] for _id in request.form.getlist('mapids'): _map = Map.getMaps(int(_id)) maps.append(dict(name=_map.__dict__['name'], path=_map.__dict__['path'], maptype=_map.__dict__['maptype'], tileserver=_map.__dict__['tileserver'], default=_map.__dict__['default'])) Map.query.delete() # delete all maps for _map in maps: # add maps in new order db.session.add(Map(_map['name'], _map['path'], _map['maptype'], _map['tileserver'], _map['default'])) db.session.commit() params.update({'maps': Map.getMaps()}) return render_template('admin.map.html', **params)
def getAdminContent(self, **params): module = request.view_args['module'].split('/') if len(module) < 2: module.append(u'1') if len(module) > 2 and module[2] == 'upload': # upload persons params.update({'': int(module[1]), 'depid': module[1]}) return render_template('admin.persons.upload.html', **params) if request.method == 'POST': if request.form.get('action') == 'createperson': # add person params.update({'person': Person('', '', '', '', '', '', False, datetime.now(), '', int(module[1])), 'settings': Settings.get('persons.settings')}) return render_template('admin.persons_edit.html', **params) elif request.form.get('action').startswith('editperson_'): # edit person params.update({'person': Person.getPersons(id=request.form.get('action').split('_')[-1]), 'settings': Settings.get('persons.settings')}) return render_template('admin.persons_edit.html', **params) elif request.form.get('action') == 'updateperson': # save person if request.form.get('person_id') != 'None': person = Person.getPersons(id=request.form.get('person_id')) else: person = Person('', '', '', '', '', '', False, datetime.now(), '', int(module[1])) db.session.add(person) person.firstname = request.form.get('firstname') person.lastname = request.form.get('lastname') person.salutation = request.form.get('salutation') person.grade = request.form.get('grade') person._dept = int(request.form.get('dept')) person.position = request.form.get('position') person.active = 'active' in request.form.keys() try: person.birthdate = datetime.strptime('{} 00:00:00'.format(request.form.get('birthdate')), "%d.%m.%Y %H:%M:%S") except ValueError: pass person.identifier = request.form.get('identifier') person.remark = request.form.get('remark') db.session.commit() elif request.form.get('action').startswith('deleteperson_'): db.session.delete(Person.getPersons(id=request.form.get('action').split('_')[-1])) db.session.commit() elif request.form.get('action') == 'updategrades': grades = request.form.getlist('grade') while grades[-1] == grades[-2] == u"": # remove last empty entries grades = grades[:-2] _settings = Settings.get('persons.settings') if 'positions' not in _settings.keys(): _settings['positions'] = [] _settings['grades'] = zip(*[grades[i::2] for i in range(2)]) Settings.set('persons.settings', _settings) db.session.commit() elif request.form.get('action') == 'updatepositions': _settings = Settings.get('persons.settings') if 'grades' not in _settings.keys(): _settings['grades'] = [] _settings['positions'] = request.form.get('positions').replace('\r', '').split('\n') Settings.set('persons.settings', _settings) db.session.commit() if int(module[1]) == 0: params.update({'settings': Settings.get('persons.settings')}) return render_template("admin.persons.settings.html", **params) persons = Person.getPersons(dept=int(module[1])) chars = {} for p in persons: chars[p.fullname[0].upper()] = 0 params.update({'persons': persons, 'chars': sorted(chars), 'depid': module[1]}) return render_template("admin.persons.html", **params)
def getAdminContent(self, **params): """ Deliver admin content of module printers :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) == 2: if module[1] == 'settings': # printer settings if request.method == 'POST': if request.form.get('action') == 'savereprintersparams': Settings.set('printer.callstring', request.form.get('printers_callstring')) _p = dict() _p['callstring'] = Settings.get('printer.callstring') params.update({'params': _p}) return render_template('admin.printers.settings.html', **params) else: def _printernames(callstring): printernames = ['<default>'] if len(callstring.split()) > 0: callstring = '{} -printer "xxx"'.format(callstring.split()[0]) try: subprocess.check_output(callstring, stderr=subprocess.STDOUT, shell=True) except subprocess.CalledProcessError as e: for l in e.output.split('\r\n'): if l.startswith(' "'): printernames.append(l[3:-1].strip()) return printernames #def _callstring(): # get callstring and replace variables # callstring = classes.get('settings').get('printer.callstring') # callstring = callstring.replace('[basepath]', current_app.config.get('PROJECT_ROOT')) # return callstring def _templates(): # get all printer templates templates = {} for root, dirs, files in os.walk("{}/emonitor/modules/".format(current_app.config.get('PROJECT_ROOT'))): mod = root.replace("{}/emonitor/modules/".format(current_app.config.get('PROJECT_ROOT')), '').replace('\\templates', '') for f in files: if f.endswith('.html') and f.startswith('print.'): if mod not in templates: templates[mod] = [] templates[mod].append(PrintLayout('{}.{}'.format(mod, f))) return templates if request.method == 'POST': if request.form.get('action') == 'createprinter': # add printer definition printer = Printers('', '', '', '', "['1']") params.update({'printer': printer, 'templates': _templates(), 'printernames': sorted(_printernames(printer.getCallString()))}) return render_template('admin.printers_actions.html', **params) elif request.form.get('action').startswith('editprinters_'): printer = Printers.getPrinters(int(request.form.get('action').split('_')[-1])) params.update({'printer': printer, 'templates': _templates(), 'printernames': sorted(_printernames(printer.getCallString()))}) return render_template('admin.printers_actions.html', **params) elif request.form.get('action') == 'updateprinter': if request.form.get('printer_id') == 'None': # add new printerdefintion p = Printers('', '', '', '', settings="", state=0) db.session.add(p) else: p = Printers.getPrinters(int(request.form.get('printer_id'))) p.name = request.form.get('printername') p.printer = request.form.get('printerprinter') p.module = request.form.get('template').split('.')[0] p.layout = '.'.join(request.form.get('template').split('.')[1:]) _s = [request.form.get('printersettings'), []] # add settings from template for tparam in [_p for _p in request.form.get('templateparams').split(';') if _p != ""]: _s[1].append('{}={}'.format(tparam[7:], request.form.get(tparam))) _s[1] = ';'.join(_s[1]) p.settings = _s p.state = request.form.get('printerstate') db.session.commit() elif request.form.get('action').startswith('deleteprinters_'): # delete printer definition db.session.delete(Printers.getPrinters(pid=request.form.get('action').split('_')[-1])) db.session.commit() params.update({'printers': Printers.getPrinters()}) return render_template('admin.printers.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module textmod :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) == 2: if module[1] == 'ocr': # ocr settings if request.method == 'POST': if request.form.get( 'action') == 'savereocrparams': # save changes Settings.set('ocr.inputformat', request.form.get('ocr_formats').split('\r\n')) Settings.set( 'ocr.inputtextformat', request.form.get('ocr_textformats').split('\r\n')) Settings.set('ocr.callstring', request.form.get('ocr_callstring')) params.update({'params': Ocr.getOCRParams()}) return render_template('admin.textmod.ocr.html', **params) elif module[1] == 'ocrcustom': if request.method == 'POST': if request.form.get( 'action') == 'savereocrcustom': # save changes if not os.path.exists( '%s/bin/tesseract/tessdata' % current_app.config.get('PROJECT_ROOT')): os.makedirs('%s/bin/tesseract/tessdata/' % current_app.config.get('PROJECT_ROOT')) with codecs.open( '%s/bin/tesseract/tessdata/deu.user-words' % current_app.config.get('PROJECT_ROOT'), 'w', 'utf-8') as f: f.write(request.form.get('ocrcustom', '')) if os.path.exists('%s/bin/tesseract/tessdata/deu.user-words' % current_app.config.get('PROJECT_ROOT')): content = codecs.open( '%s/bin/tesseract/tessdata/deu.user-words' % current_app.config.get('PROJECT_ROOT'), 'r', 'utf-8').read() else: current_app.logger.info('ocr custom wordlist not found') content = "" params.update({'content': content}) return render_template('admin.textmod.ocrcustom.html', **params) elif module[1] == 'convert': # convert image if request.method == 'POST': if request.form.get( 'action') == 'savereconvertparams': # save changes Settings.set('convert.format', request.form.get('convert_format')) Settings.set('convert.callstring', request.form.get('convert_callstring')) Settings.set( 'convert.crop', 'convert_crop' in request.form.get('convert_crop', 'False')) params.update({ 'params': Ocr.getConvertParams(), 'imageformats': ['jpg', 'png'] }) return render_template('admin.textmod.convert.html', **params) else: # replacements if request.method == 'POST': if request.form.get('action') == 'addreplace': # add replacement params.update({'replacement': Replace('', '')}) return render_template('admin.textmod_actions.html', **params) elif request.form.get('action').startswith( 'editreplace_'): # edit existing replacement params.update({ 'replacement': Replace.getReplacements( id=request.form.get('action').split('_')[-1]) }) return render_template('admin.textmod_actions.html', **params) elif request.form.get('action').startswith( 'deletereplace_'): # delete existing replacement db.session.delete( Replace.getReplacements( id=request.form.get('action').split('_')[-1])) db.session.commit() elif request.form.get( 'action') == 'savereplace': # save replacement if request.form.get('replace_id') == 'None': # add new db.session.add( Replace(request.form.get('replace_text'), request.form.get('replace_repl'))) else: # update existing replacement replacement = Replace.getReplacements( id=request.form.get('replace_id')) replacement.text = request.form.get('replace_text') replacement.replace = request.form.get('replace_repl') db.session.commit() params.update({'replacements': Replace.getReplacements()}) return render_template('admin.textmod.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module settings :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') def chunks(l, n): return [l[i:i + n] for i in range(0, len(l), n)] if len(module) == 2: if module[1] == 'department': # department submodule if request.method == 'POST': if request.form.get('action') == 'savedept': # save department if request.form.get('dep_id') != 'None': # update department = Department.getDepartments(request.form.get('dep_id')) l = request.form.get('dep_pos') else: # add l = len(Department.getDepartments()) + 1 department = Department('', '', '', 0) db.session.add(department) department.name = request.form.get('dep_name') department.shortname = request.form.get('dep_shortname') department.color = request.form.get('dep_color') department.set(u'address_name', unicode(request.form.get('dep_address_name'))) department.set(u'address_street', unicode(request.form.get('dep_address_street'))) department.set(u'address_city', unicode(request.form.get('dep_address_city'))) department.set(u'address_phone', unicode(request.form.get('dep_address_phone'))) department.set(u'address_fax', unicode(request.form.get('dep_address_fax'))) department.set(u'address_email', unicode(request.form.get('dep_address_email'))) if len(request.files) > 0: uploadfile = request.files.get('dep_logo') if uploadfile.filename != '': _fname, _fext = os.path.splitext(uploadfile.filename) db.session.flush() # flush to get department id of new department fname = os.path.join(current_app.config.get('PATH_DATA'), 'departmentlogo_{}{}'.format(department.id, _fext)) uploadfile.save(fname) department.set(u'logo', u'departmentlogo_{}{}'.format(department.id, _fext)) # store relative path from data directory elif request.form.get('logoaction') == 'deletelogo': if os.path.exists('{}{}'.format(current_app.config.get('PATH_DATA'), department.attributes['logo'])): os.remove('{}{}'.format(current_app.config.get('PATH_DATA'), department.attributes['logo'])) department.set(u'logo', u'') department.orderpos = l department.defaultcity = request.form.get('dep_city') db.session.commit() elif request.form.get('action') == 'createdepartment': # add department params.update({'department': Department('', '', '', 0), 'cities': City.getCities()}) return render_template('admin.settings.department_actions.html', **params) elif request.form.get('action').startswith('detaildept_'): # edit department params.update({'department': Department.getDepartments(id=request.form.get('action').split('_')[-1]), 'cities': City.getCities()}) return render_template('admin.settings.department_actions.html', **params) elif request.form.get('action').startswith('deletedept_'): # delete department _c = [] for city in City.getCities(): if city.department.id == int(request.form.get('action').split('_')[-1]): _c.append(city.name) if len(_c) == 0: db.session.delete(Department.getDepartments(id=request.form.get('action').split('_')[-1])) db.session.commit() else: params.update({'error': babel.gettext('admin.settings.department_deleteerror1', cities=', '.join(_c))}) elif request.form.get('action') == 'ordersetting': # change department order for _id in request.form.getlist('departmentids'): Department.getDepartments(id=_id).orderpos = request.form.getlist('departmentids').index(_id) + 1 db.session.commit() params.update({'departments': Department.getDepartments(), 'cities': City.getCities()}) return render_template('admin.settings.department.html', **params) elif module[1] == 'cars': if request.method == 'POST': if request.form.get('action') == 'updatetypes': Settings.set('cartypes', [i for i in chunks(request.form.getlist('cartype'), 2) if i[0] != '']) db.session.commit() params.update({'cartypes': Settings.getCarTypes()}) return render_template('admin.settings.cars.html', **params) elif module[1] == 'communication': from emonitor.extensions import communication if request.method == 'POST': if request.form.get('action') == 'telegramsettings': vals = Settings.get('telegramsettings') vals['telegramkey'] = request.form.get('telegrambot').strip() vals['welcomemsg'] = request.form.get('welcometext') vals['helpmsg'] = request.form.get('helptext') Settings.set('telegramsettings', vals) db.session.commit() tb = communication.telegram if not tb: communication.init_app(app=communication.app) tb = communication.telegram else: tb.stop() try: tb.updateToken(vals['telegramkey']) except AttributeError: pass elif request.form.get('action') == 'telegramgroups': vals = Settings.get('telegramsettings') g = {} for f in filter(lambda x: x.startswith('groupname_'), request.form): _id = f.split('_')[-1] # fieldname in form if request.form.get('groupname_' + _id) in ['newgroup', '']: continue g[request.form.get('groupname_' + _id)] = request.form.get('members_selectable_' + _id).split(';') vals['groups'] = g Settings.set('telegramsettings', vals) db.session.commit() params.update({'bot': communication.telegram, 'settings': Settings.getYaml('telegramsettings'), 'configtelegramkey': current_app.config.get('TELEGRAMKEY', '')}) return render_template('admin.settings.communication.html', **params) elif module[1] == 'start': if request.method == 'POST': if request.form.get('action') == 'updatestart': # update start page definition areas = dict() areas['center'] = {'module': request.form.get('center.module'), 'width': '0', 'visible': 1} areas['west'] = {'module': request.form.get('west.module'), 'moduleadd': request.form.getlist('west.module.add'), 'width': '.%s' % request.form.get('west.width'), 'visible': request.form.get('west.visible')} areas['east'] = {'module': request.form.get('east.module'), 'moduleadd': request.form.getlist('east.module.add'), 'width': '.%s' % request.form.get('east.width'), 'visible': request.form.get('east.visible')} Settings.set('frontend.default', areas) db.session.commit() def modname(obj): # get translation for sorting of module _t = "module.%s" % obj.info['name'] return babel.gettext(_t) params.update({'mods': sorted([m for m in current_app.blueprints['frontend'].modules.values() if m.frontendContent() == 1], key=modname), 'center': Settings.getFrontendSettings('center'), 'west': Settings.getFrontendSettings('west'), 'east': Settings.getFrontendSettings('east')}) return render_template('admin.settings.start.html', **params) else: if request.method == 'POST': # save settings if request.form.get('action') == 'observerstate': Settings.set('observer.interval', request.form.get('observerinterval')) _jobserver = scheduler.get_jobs('observerinterval')[0] if Settings.get('observer.interval', '0') == '0': _jobserver.pause() else: scheduler.reschedule_job(_jobserver.id, trigger=eMonitorIntervalTrigger(seconds=int(Settings.get('observer.interval', current_app.config.get('OBSERVERINTERVAL', 2))))) elif request.form.get('action') == 'monitorping': Settings.set('monitorping', request.form.get('monitorping')) _jping = scheduler.get_jobs('monitorping')[0] if Settings.get('monitorping', '0') == '0': _jping.pause() else: scheduler.reschedule_job(_jping.id, trigger=eMonitorIntervalTrigger(minutes=int(Settings.get('monitorping', current_app.config.get('MONITORPING', 2))))) paths = dict(pathdata=current_app.config.get('PATH_DATA'), pathtmp=current_app.config.get('PATH_TMP'), pathincome=current_app.config.get('PATH_INCOME'), pathdone=current_app.config.get('PATH_DONE')) params.update({'paths': paths, 'observerinterval': Settings.get('observer.interval', current_app.config.get('OBSERVERINTERVAL')), 'monitorping': Settings.get('monitorping', current_app.config.get('MONITORPING')), 'alarmsevalfields': Settings.get('alarms.evalfields'), 'alembic': alembic}) return render_template('admin.settings.html', **params) return redirect("/admin/settings", code=302)
def getAdminContent(self, **params): """ Deliver admin content of module printers :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) == 2: if module[1] == 'settings': # printer settings if request.method == 'POST': if request.form.get('action') == 'savereprintersparams': Settings.set('printer.callstring', request.form.get('printers_callstring')) _p = dict() _p['callstring'] = Settings.get('printer.callstring') params.update({'params': _p}) return render_template('admin.printers.settings.html', **params) else: def _printernames(callstring): printernames = ['<default>'] if len(callstring.split()) > 0: callstring = '{} -printer "xxx"'.format(callstring.split()[0]) try: subprocess.check_output(callstring, stderr=subprocess.STDOUT, shell=True) except subprocess.CalledProcessError as e: for l in e.output.split('\r\n'): if l.startswith(' "'): printernames.append(l[3:-1].strip()) return printernames #def _callstring(): # get callstring and replace variables # callstring = classes.get('settings').get('printer.callstring') # callstring = callstring.replace('[basepath]', current_app.config.get('PROJECT_ROOT')) # return callstring def _templates(): # get all printer templates templates = {} for root, dirs, files in os.walk("{}/emonitor/modules/".format( current_app.config.get('PROJECT_ROOT'))): mod = root.replace( "{}/emonitor/modules/".format( current_app.config.get('PROJECT_ROOT')), '').replace('\\templates', '') for f in files: if f.endswith('.html') and f.startswith('print.'): if mod not in templates: templates[mod] = [] templates[mod].append( PrintLayout('{}.{}'.format(mod, f))) return templates if request.method == 'POST': if request.form.get( 'action') == 'createprinter': # add printer definition printer = Printers('', '', '', '', "['1']") params.update({ 'printer': printer, 'templates': _templates(), 'printernames': sorted(_printernames(printer.getCallString())) }) return render_template('admin.printers_actions.html', **params) elif request.form.get('action').startswith('editprinters_'): printer = Printers.getPrinters( int(request.form.get('action').split('_')[-1])) params.update({ 'printer': printer, 'templates': _templates(), 'printernames': sorted(_printernames(printer.getCallString())) }) return render_template('admin.printers_actions.html', **params) elif request.form.get('action') == 'updateprinter': if request.form.get( 'printer_id') == 'None': # add new printerdefintion p = Printers('', '', '', '', settings="", state=0) db.session.add(p) else: p = Printers.getPrinters( int(request.form.get('printer_id'))) p.name = request.form.get('printername') p.printer = request.form.get('printerprinter') p.module = request.form.get('template').split('.')[0] p.layout = '.'.join( request.form.get('template').split('.')[1:]) _s = [request.form.get('printersettings'), []] # add settings from template for tparam in [ _p for _p in request.form.get('templateparams').split(';') if _p != "" ]: _s[1].append('{}={}'.format(tparam[7:], request.form.get(tparam))) _s[1] = ';'.join(_s[1]) p.settings = _s p.state = request.form.get('printerstate') db.session.commit() elif request.form.get('action').startswith( 'deleteprinters_'): # delete printer definition db.session.delete( Printers.getPrinters( pid=request.form.get('action').split('_')[-1])) db.session.commit() params.update({'printers': Printers.getPrinters()}) return render_template('admin.printers.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module settings :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') def chunks(l, n): return [l[i:i + n] for i in range(0, len(l), n)] if len(module) == 2: if module[1] == 'department': # department submodule if request.method == 'POST': if request.form.get('action') == 'savedept': # save department if request.form.get('dep_id') != 'None': # update department = Department.getDepartments(request.form.get('dep_id')) l = request.form.get('dep_pos') else: # add l = len(Department.getDepartments()) + 1 department = Department('', '', '', 0) db.session.add(department) department.name = request.form.get('dep_name') department.shortname = request.form.get('dep_shortname') department.color = request.form.get('dep_color') department.set(u'address_name', unicode(request.form.get('dep_address_name'))) department.set(u'address_street', unicode(request.form.get('dep_address_street'))) department.set(u'address_city', unicode(request.form.get('dep_address_city'))) department.set(u'address_phone', unicode(request.form.get('dep_address_phone'))) department.set(u'address_fax', unicode(request.form.get('dep_address_fax'))) department.set(u'address_email', unicode(request.form.get('dep_address_email'))) if len(request.files) > 0: uploadfile = request.files.get('dep_logo') if uploadfile.filename != '': _fname, _fext = os.path.splitext(uploadfile.filename) db.session.flush() # flush to get department id of new department fname = os.path.join(current_app.config.get('PATH_DATA'), 'departmentlogo_{}{}'.format(department.id, _fext)) uploadfile.save(fname) department.set(u'logo', u'departmentlogo_{}{}'.format(department.id, _fext)) # store relative path from data directory elif request.form.get('logoaction') == 'deletelogo': if os.path.exists('{}{}'.format(current_app.config.get('PATH_DATA'), department.attributes['logo'])): os.remove('{}{}'.format(current_app.config.get('PATH_DATA'), department.attributes['logo'])) department.set(u'logo', u'') department.orderpos = l department.defaultcity = request.form.get('dep_city') db.session.commit() elif request.form.get('action') == 'createdepartment': # add department params.update({'department': Department('', '', '', 0), 'cities': City.getCities()}) return render_template('admin.settings.department_actions.html', **params) elif request.form.get('action').startswith('detaildept_'): # edit department params.update({'department': Department.getDepartments(id=request.form.get('action').split('_')[-1]), 'cities': City.getCities()}) return render_template('admin.settings.department_actions.html', **params) elif request.form.get('action').startswith('deletedept_'): # delete department _c = [] for city in City.getCities(): if city.department.id == int(request.form.get('action').split('_')[-1]): _c.append(city.name) if len(_c) == 0: db.session.delete(Department.getDepartments(id=request.form.get('action').split('_')[-1])) db.session.commit() else: params.update({'error': babel.gettext('admin.settings.department_deleteerror1', cities=', '.join(_c))}) elif request.form.get('action') == 'ordersetting': # change department order for _id in request.form.getlist('departmentids'): Department.getDepartments(id=_id).orderpos = request.form.getlist('departmentids').index(_id) + 1 db.session.commit() params.update({'departments': Department.getDepartments(), 'cities': City.getCities()}) return render_template('admin.settings.department.html', **params) elif module[1] == 'cars': if request.method == 'POST': if request.form.get('action') == 'updatetypes': Settings.set('cartypes', [i for i in chunks(request.form.getlist('cartype'), 2) if i[0] != '']) db.session.commit() params.update({'cartypes': Settings.getCarTypes()}) return render_template('admin.settings.cars.html', **params) elif module[1] == 'communication': from emonitor.extensions import communication if request.method == 'POST': if request.form.get('action') == 'telegramsettings': vals = Settings.get('telegramsettings') vals['telegramkey'] = request.form.get('telegrambot').strip() vals['welcomemsg'] = request.form.get('welcometext') vals['helpmsg'] = request.form.get('helptext') Settings.set('telegramsettings', vals) db.session.commit() tb = communication.telegram if not tb: communication.init_app(app=communication.app) tb = communication.telegram #else: # tb.stop() try: tb.updateToken(vals['telegramkey']) except AttributeError: pass elif request.form.get('action') == 'telegramgroups': vals = Settings.get('telegramsettings') g = {} for f in filter(lambda x: x.startswith('groupname_'), request.form): _id = f.split('_')[-1] # fieldname in form if request.form.get('groupname_' + _id) in ['newgroup', '']: continue g[request.form.get('groupname_' + _id)] = request.form.get('members_selectable_' + _id).split(';') vals['groups'] = g Settings.set('telegramsettings', vals) db.session.commit() params.update({'bot': communication.telegram, 'settings': Settings.getYaml('telegramsettings'), 'configtelegramkey': current_app.config.get('TELEGRAMKEY', '')}) return render_template('admin.settings.communication.html', **params) elif module[1] == 'start': if request.method == 'POST': if request.form.get('action') == 'updatestart': # update start page definition areas = dict() areas['center'] = {'module': request.form.get('center.module'), 'width': '0', 'visible': 1} areas['west'] = {'module': request.form.get('west.module'), 'moduleadd': request.form.getlist('west.module.add'), 'width': '.%s' % request.form.get('west.width'), 'visible': request.form.get('west.visible')} areas['east'] = {'module': request.form.get('east.module'), 'moduleadd': request.form.getlist('east.module.add'), 'width': '.%s' % request.form.get('east.width'), 'visible': request.form.get('east.visible')} Settings.set('frontend.default', areas) db.session.commit() def modname(obj): # get translation for sorting of module _t = "module.%s" % obj.info['name'] return babel.gettext(_t) params.update({'mods': sorted([m for m in current_app.blueprints['frontend'].modules.values() if m.frontendContent() == 1], key=modname), 'center': Settings.getFrontendSettings('center'), 'west': Settings.getFrontendSettings('west'), 'east': Settings.getFrontendSettings('east')}) return render_template('admin.settings.start.html', **params) else: if request.method == 'POST': # save settings if request.form.get('action') == 'observerstate': Settings.set('observer.interval', request.form.get('observerinterval')) if 'observerinterval' in [j.name for j in scheduler.get_jobs()]: # use file _jobserver = scheduler.get_jobs('observerinterval')[0] if Settings.get('observer.interval', '0') == '0': _jobserver.pause() else: scheduler.reschedule_job(_jobserver.id, trigger=eMonitorIntervalTrigger(seconds=int(Settings.get('observer.interval', current_app.config.get('OBSERVERINTERVAL', 2))))) elif request.form.get('action') == 'monitorping': Settings.set('monitorping', request.form.get('monitorping')) _jping = scheduler.get_jobs('monitorping')[0] if Settings.get('monitorping', '0') == '0': _jping.pause() else: scheduler.reschedule_job(_jping.id, trigger=eMonitorIntervalTrigger(minutes=int(Settings.get('monitorping', current_app.config.get('MONITORPING', 2))))) paths = dict(pathdata=current_app.config.get('PATH_DATA'), pathtmp=current_app.config.get('PATH_TMP'), pathincome=current_app.config.get('PATH_INCOME'), pathdone=current_app.config.get('PATH_DONE')) params.update({'paths': paths, 'observerinterval': Settings.get('observer.interval', current_app.config.get('OBSERVERINTERVAL')), 'watchdog': 'observerinterval' not in [j.name for j in scheduler.get_jobs()], 'monitorping': Settings.get('monitorping', current_app.config.get('MONITORPING')), 'alarmsevalfields': Settings.get('alarms.evalfields'), 'alembic': alembic}) return render_template('admin.settings.html', **params) return redirect("/admin/settings", code=302)
def getAdminContent(self, **params): module = request.view_args['module'].split('/') if len(module) < 2: module.append(u'1') if len(module) > 2 and module[2] == 'upload': # upload persons params.update({'': int(module[1]), 'depid': module[1]}) return render_template('admin.persons.upload.html', **params) if request.method == 'POST': if request.form.get('action') == 'createperson': # add person params.update({ 'person': Person('', '', '', '', '', '', False, datetime.now(), '', int(module[1])), 'settings': Settings.get('persons.settings') }) return render_template('admin.persons_edit.html', **params) elif request.form.get('action').startswith( 'editperson_'): # edit person params.update({ 'person': Person.getPersons( id=request.form.get('action').split('_')[-1]), 'settings': Settings.get('persons.settings') }) return render_template('admin.persons_edit.html', **params) elif request.form.get('action') == 'updateperson': # save person if request.form.get('person_id') != 'None': person = Person.getPersons(id=request.form.get('person_id')) else: person = Person('', '', '', '', '', '', False, datetime.now(), '', int(module[1])) db.session.add(person) person.firstname = request.form.get('firstname') person.lastname = request.form.get('lastname') person.salutation = request.form.get('salutation') person.grade = request.form.get('grade') person._dept = int(request.form.get('dept')) person.position = request.form.get('position') person.active = 'active' in request.form.keys() try: person.birthdate = datetime.strptime( '{} 00:00:00'.format(request.form.get('birthdate')), "%d.%m.%Y %H:%M:%S") except ValueError: pass person.identifier = request.form.get('identifier') person.remark = request.form.get('remark') _additional = {} for field in Settings.get('persons.settings', {}).get('additional', []): if field.split('=')[0] in request.form.keys( ) and request.form.get(field.split('=')[0]).strip() != '': _additional[field.split('=')[0]] = request.form.get( field.split('=')[0]) person._options = yaml.safe_dump(_additional, encoding='utf-8') db.session.commit() elif request.form.get('action').startswith('deleteperson_'): db.session.delete( Person.getPersons( id=request.form.get('action').split('_')[-1])) db.session.commit() elif request.form.get('action') == 'updategrades': grades = request.form.getlist('grade') while grades[-1] == grades[-2] == u"": # remove last empty entries grades = grades[:-2] _settings = Settings.get('persons.settings', {}) if 'positions' not in _settings.keys(): _settings['positions'] = [] _settings['grades'] = zip(*[grades[i::2] for i in range(2)]) Settings.set('persons.settings', _settings) db.session.commit() elif request.form.get('action') == 'updatepositions': _settings = Settings.get('persons.settings', {}) if 'grades' not in _settings.keys(): _settings['grades'] = [] _settings['positions'] = request.form.get('positions').replace( '\r', '').split('\n') Settings.set('persons.settings', _settings) db.session.commit() elif request.form.get('action') == 'updateadditional': _settings = Settings.get('persons.settings', {}) if 'additional' not in _settings.keys(): _settings['additional'] = [] _settings['additional'] = request.form.get('additional').replace( '\r', '').split('\n') Settings.set('persons.settings', _settings) db.session.commit() if int(module[1]) == 0: params.update({'settings': Settings.get('persons.settings')}) return render_template("admin.persons.settings.html", **params) persons = Person.getPersons(dept=int(module[1])) chars = {} for p in persons: chars[p.fullname[0].upper()] = 0 params.update({ 'persons': persons, 'chars': sorted(chars), 'depid': module[1] }) return render_template("admin.persons.html", **params)
def getAdminContent(self, **params): """ Deliver admin content of module alarms :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) > 1: if module[1] == 'types': impl = [] # load implementations of faxchecker for f in [f for f in os.listdir('%s/emonitor/modules/alarms/inc/' % current_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/%s' % f) if isinstance(getattr(cls, cls.__all__[0])(), AlarmFaxChecker): impl.append((f, getattr(cls, cls.__all__[0])(), AlarmType.getAlarmTypeByClassname(f))) if request.method == 'POST': if request.form.get('action') == 'createtype': # add type params.update({'alarmtype': AlarmType('', ''), 'interpreter': impl}) return render_template('admin.alarms.type_actions.html', **params) elif request.form.get('action').startswith('deleteinterpreter_'): # delete checker for cls in impl: if cls[0] == request.form.get('action')[18:]: if os.path.exists('%s/emonitor/modules/alarms/inc/%s' % (current_app.config.get('PROJECT_ROOT'), cls[0])): os.remove('%s/emonitor/modules/alarms/inc/%s' % (current_app.config.get('PROJECT_ROOT'), cls[0])) if os.path.exists('%s/emonitor/modules/alarms/inc/%sc' % (current_app.config.get('PROJECT_ROOT'), cls[0])): os.remove('%s/emonitor/modules/alarms/inc/%sc' % (current_app.config.get('PROJECT_ROOT'), cls[0])) impl.remove(cls) elif request.form.get('action').startswith('editalarmtype_'): # edit type params.update({'alarmtype': AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1])), 'interpreter': impl}) return render_template('admin.alarms.type_actions.html', **params) elif request.form.get('action').startswith('deletetype_'): # delete type atype = AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1])) for e in [e for e in events.events if e.name in ['alarm_added.{}'.format(atype.name), 'alarm_changestate.{}'.format(atype.name)]]: # delete event handlers and monitor layout for eh in Eventhandler.getEventhandlers(event=e.name): for ml in MonitorLayout.query.filter(MonitorLayout.trigger.like('%{}%'.format(eh.event))).all(): if ';' in ml.trigger: _tr = ml.trigger.split(';') del _tr[_tr.index(e.name)] ml.trigger = ";".join(_tr) else: db.session.remove(ml) db.session.delete(eh) # delete event del events.events[events.events.index(e)] db.session.delete(atype) db.session.commit() elif request.form.get('action') == 'updatetype': # update type if request.form.get('type_id') == 'None': # add type atype = AlarmType('', '') db.session.add(atype) events.addEvent('alarm_added.{}'.format(request.form.get('edit_name')), handlers=[], parameters=[]) events.addEvent('alarm_changestate.{}'.format(request.form.get('edit_name')), handlers=[], parameters=[]) else: # update type atype = AlarmType.getAlarmTypes(id=int(request.form.get('type_id'))) for e in [e for e in events.events if e.name in ['alarm_added.{}'.format(atype.name), 'alarm_changestate.{}'.format(atype.name)]]: # update event handler and monitor layout newname = '{}.{}'.format(e.name.split('.')[0], request.form.get('edit_name')) for eh in Eventhandler.getEventhandlers(event=e.name): for ml in MonitorLayout.query.filter(MonitorLayout.trigger.like('%{}%'.format(eh.event))).all(): ml.trigger = ml.trigger.replace(e.name, newname) eh.event = newname # update event e.name = newname atype.name = request.form.get('edit_name') atype.keywords = request.form.get('edit_keywords') atype.interpreter = request.form.get('edit_interpreter') atype.attributes = dict(zip(request.form.getlist('attribute_name'), request.form.getlist('attribute_value'))) atype.translations = dict(zip(request.form.getlist('alarmtypevariables'), request.form.getlist('alarmtypetranslation'))) db.session.commit() if request.form.get('type_id') == 'None': # add predefined keywords and sections # add pre-defined sections for checker in [i for i in impl if i[0] == request.form.get('edit_interpreter')]: if request.form.get('edit_keywords') == "": atype.keywords = "\n".join(checker[1].getDefaultConfig()['keywords']) sections = checker[1].getDefaultConfig()['sections'] i = 1 for key in sections: db.session.add(AlarmSection(atype.id, key, sections[key][0], 1, sections[key][1], i)) i += 1 db.session.commit() elif request.form.get('action').startswith('createsection_'): # add section alarmtype = AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1])) params.update({'alarmtype': alarmtype, 'section': AlarmSection(alarmtype.id, '', '', 0, '', 0), 'functions': alarmtype.interpreterclass().getEvalMethods()}) return render_template('admin.alarms.sections_actions.html', **params) elif request.form.get('action') == 'updatesection': # save section db.session.rollback() if request.form.get('section_id') == 'None': # add section = AlarmSection(request.form.get('edit_tid'), '', '', '', '', '') section.orderpos = 1 + len(AlarmSection.getSections()) db.session.add(section) else: # update section = AlarmSection.getSections(id=int(request.form.get('section_id'))) section.orderpos = request.form.get('edit_orderpos') section.tid = request.form.get('edit_tid') section.name = request.form.get('edit_name') section.key = request.form.get('edit_key') section.method = request.form.get('edit_method') section.active = request.form.get('edit_active') alarmtype = AlarmType.getAlarmTypes(request.form.get('edit_tid')) if alarmtype.interpreterclass().configtype == 'generic': attrs = {'start': request.form.get('edit_start'), 'end': request.form.get('edit_end')} if 'edit_multiline' in request.form.keys(): attrs['multiline'] = 'True' section.attributes = attrs db.session.commit() elif request.form.get('action') == 'updateorder': for item in [i for i in request.form if i.startswith('position_')]: ids = request.form.getlist(item) for _id in ids: AlarmSection.getSections(id=_id).orderpos = ids.index(_id) + 1 db.session.commit() elif request.form.get('action').startswith('editalarmsection_'): # edit section section = AlarmSection.getSections(id=int(request.form.get('action').split('_')[-1])) params.update({'section': section, 'functions': section.alarmtype.interpreterclass().getEvalMethods(), 'alarmtype': AlarmType.getAlarmTypes(section.tid)}) return render_template('admin.alarms.sections_actions.html', **params) elif request.form.get('action').startswith('deletealarmsection_'): # delete section section = AlarmSection.getSections(id=int(request.form.get('action').split('_')[-1])) db.session.delete(section) db.session.commit() params.update({'alarmtypes': AlarmType.getAlarmTypes(), 'interpreters': impl}) return render_template('admin.alarms.type.html', **params) elif module[1] == 'report': if request.method == 'POST': if request.form.get('action') == 'createreport': # add report params.update({'report': AlarmReport('', '', '', 1, []), 'departments': Department.getDepartments(), 'reporttypes': AlarmReport.getReportTypes()}) return render_template('admin.alarms.report_action.html', **params) elif request.form.get('action') == 'updatereport': if request.form.get('report_id') == 'None': # add new report report = AlarmReport('', '', '', '') db.session.add(report) else: report = AlarmReport.getReports(request.form.get('report_id')) report.name = request.form.get('edit_name') if not request.form.get('template').startswith(current_app.config.get('PATH_DATA')): # internal template report._reporttype = 'internal' report.filename = request.form.get('template').replace("{}/emonitor/modules/alarms/templates/".format(current_app.config.get('PROJECT_ROOT')).replace('\\', '/'), "") else: report._reporttype = 'external' report.filename = request.form.get('template').replace("{}".format(current_app.config.get('PATH_DATA')), "") report.fields = json.loads(request.form.get('fielddefinition')) report.departments = request.form.getlist('edit_department') db.session.commit() elif request.form.get('action').startswith('editreport_'): # edit report report = AlarmReport.getReports(request.form.get('action').split('_')[-1]) params.update({'report': report, 'departments': Department.getDepartments(), 'reporttypes': AlarmReport.getReportTypes(), 'alarmfields': AlarmField.getAlarmFields()}) return render_template('admin.alarms.report_action.html', **params) elif request.form.get('action').startswith('deletereport_'): # delete report report = AlarmReport.getReports(request.form.get('action').split('_')[-1]) if AlarmReport.query.filter(AlarmReport.filename == report.filename).count() == 1 and os.path.exists(report.filename): os.remove(report.filename) db.session.delete(report) db.session.commit() params.update({'reports': AlarmReport.getReports(), 'departments': Department.getDepartments()}) return render_template('admin.alarms.report.html', **params) elif module[1] == 'config': if request.method == 'POST': if request.form.get('action') == 'alarmcarsprio': for k in Alarm.ALARMSTATES.keys(): if 'used_cars{}'.format(k) in request.form.keys(): Settings.set('alarms.spc_cars.{}'.format(k), request.form.get('used_cars{}'.format(k))) db.session.commit() elif request.form.get('action') == 'alarmsettings': Settings.set('alarms.autoclose', request.form.get('settings.autoclose')) for aalarm in [a for a in Alarm.getAlarms() if a.state == 1]: # only active alarms aalarm.updateSchedules(reference=1) # use alarmtime as refernce elif request.form.get('action') == 'archivesettings': Settings.set('alarms.autoarchive', request.form.get('settings.autoarchive')) for aalarm in [a for a in Alarm.getAlarms() if a.state == 2]: # only closed alarms aalarm.updateSchedules(reference=1) # use alarmtime as refernce elif request.form.get('action').startswith('save_'): if request.form.get('fieldid') == 'None': field = AlarmField.getAlarmFieldForType(request.form.get('action').split('_')[1], dept=request.form.get('action').split('_')[2]) db.session.add(field) else: field = AlarmField.getAlarmFields(id=request.form.get('fieldid')) field.saveConfigForm(request) db.session.commit() elif request.form.get('action').startswith('field_delete_'): # delete definition of field db.session.delete(AlarmField.getAlarmFields(id=request.form.get('action').split('_')[-1])) db.session.commit() elif request.form.get('action').startswith('field_add_'): # add field for department field = AlarmField.getAlarmFieldForType(request.form.get('action').split('_')[-2], dept=request.form.get('action').split('_')[-1]) field.name = babel.gettext(field.name) db.session.add(field) db.session.commit() fields = {} for dept in Department.getDepartments(): fields[dept.id] = AlarmField.getAlarmFieldsForDepartment(dept.id) params.update({'cars': Car.getCars(), 'alarmstates': Alarm.ALARMSTATES, 'settings': Settings, 'departments': Department.getDepartments(), 'fields': fields}) return render_template('admin.alarms.config.html', **params) elif module[1] == 'test': params.update({'uploadfileformat': filter(None, sum([Settings.get('ocr.inputformat', []), Settings.get('ocr.inputtextformat', [])], []))}) return render_template('admin.alarms.test.html', **params) else: params.update({'alarms': dict(Alarm.getAlarmCount()), 'alarmstates': Alarm.ALARMSTATES, 'help': self.hasHelp('admin')}) return render_template('admin.alarms.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module mapitems :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) < 2: module.append(current_app.blueprints['admin'].modules['mapitems'].adminsubnavigation[0][0].split('/')[-1]) # get first submenuitem if len(module) >= 2: if module[1] == 'definition': # definition if request.method == 'POST': if request.form.get('action').startswith('edititemtype_'): # edit/add definition TODO: fix typename = request.form.get('action').split('_') itemtype = [d for d in Settings.get('mapitemdefinition') if d['name'] == typename[1]] if len(itemtype) > 0: itemtype = itemtype[0] if 'parameters' not in itemtype: itemtype['parameters'] = {'layout': '', 'tileserver': 0} if 'key' not in itemtype: itemtype['key'] = [] if 'cities' not in itemtype: itemtype['cities'] = [] if 'itemtype' not in itemtype: itemtype['itemtype'] = 'node' else: itemtype = {'name': '', 'filter': '', 'attributes': [], 'parameters': {'layout', 'tileserver'}, 'key': [], 'cities': [], 'itemtype': 'node'} params.update({'itemtype': itemtype, 'cities': City.getCities(), 'layouters': MapItem.getLayouters()}) return render_template('admin.mapitems.definition_actions.html', **params) elif request.form.get('action').startswith('deleteitemtype_'): # delete definition itemtypes = Settings.get('mapitemdefinition') for itemtype in itemtypes: if itemtype['name'] == request.form.get('action').split('_')[1]: del itemtypes[itemtypes.index(itemtype)] Settings.set('mapitemdefinition', itemtypes) db.session.commit() elif request.form.get('action') == 'updateitemtypes': # save definition itemtypes = Settings.get('mapitemdefinition') position = -1 for itemtype in itemtypes: if itemtype['name'] == request.form.get('edit_name'): position = itemtypes.index(itemtype) break if position >= 0: # update type itemtypes[position]['filter'] = request.form.get('edit_filter') itemtypes[position]['cities'] = [int(i) for i in request.form.getlist('edit_cityid')] itemtypes[position]['itemtype'] = request.form.get('edit_itemtype') itemtypes[position]['attributes'] = request.form.get('edit_attributes').split('\r\n') itemtypes[position]['parameters'] = {'layout': request.form.get('edit_layout'), 'tileserver': request.form.get('edit_tileserver')} itemtypes[position]['key'] = request.form.get('edit_keys').split('\r\n') else: # add new type it = dict() it['name'] = request.form.get('edit_name') it['filter'] = request.form.get('edit_filter') it['cities'] = [int(i) for i in request.form.getlist('edit_cityid')] it['itemtype'] = request.form.get('edit_itemtype') it['attributes'] = request.form.get('edit_attributes').split('\r\n') it['parameters'] = {'layout': request.form.get('edit_layout')} if itemtypes == "": itemtypes = [it] else: itemtypes.append(it) it['key'] = request.form.get('edit_keys').split('\r\n') Settings.set('mapitemdefinition', itemtypes) db.session.commit() current_app.blueprints['admin'].modules['mapitems'].updateAdminSubNavigation() params.update({'itemtypes': Settings.get('mapitemdefinition', []), 'layouters': MapItem.getLayouters()}) return render_template('admin.mapitems.definition.html', **params) # deliver default list itemdefinition = [t for t in Settings.get('mapitemdefinition') if t['name'] == module[1]][0] itemtypes = MapItem.getMapitems(itemtype=module[1]) page = 0 if len(module) == 3: # pagination active page = int(module[2]) pagination = Pagination(page, PER_PAGE, len(itemtypes)) params.update({'itemtypes': itemtypes[page:page + PER_PAGE], 'itemdefinition': itemdefinition, 'pagination': pagination}) return render_template('admin.mapitems.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module maps :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) > 1: if module[1] == 'position': if request.method == 'POST': if request.form.get( 'action' ) == 'saveposition': # safe default map position and home position Settings.set('defaultLat', request.form.get('default_lat', '')) Settings.set('defaultLng', request.form.get('default_lng', '')) Settings.set('defaultZoom', request.form.get('default_zoom', '')) Settings.set('homeLat', request.form.get('home_lat', '')) Settings.set('homeLng', request.form.get('home_lng', '')) db.session.commit() params.update({'settings': Settings}) return render_template('admin.map.position.html', **params) else: if request.method == 'POST': if request.form.get('action') == 'savemap': # save map if request.form.get('map_id') != 'None': # update _map = Map.getMaps(request.form.get('map_id')) _map.name = request.form.get('map_name') _map.path = request.form.get('map_path') _map.maptype = int(request.form.get('map_type')) _map.tileserver = request.form.get('map_tileserver') _map.default = request.form.get('map_default') else: # add map _map = Map(request.form.get('map_name'), request.form.get('map_path'), int(request.form.get('map_type')), request.form.get('map_tileserver'), int(request.form.get('map_default'))) db.session.add(_map) db.session.commit() elif request.form.get('action') == 'createmap': # add map params.update({ 'map': Map('', '', 0, '', 0), 'tilebase': current_app.config.get('PATH_TILES'), 'settings': Settings }) return render_template('admin.map_actions.html', **params) elif request.form.get('action').startswith( 'detailmap_'): # edit map params.update({ 'map': Map.getMaps(request.form.get('action').split('_')[-1]), 'settings': Settings, 'tilebase': current_app.config.get('PATH_TILES'), 'tiles': '\', \''.join( Settings.getMapTiles( int(request.form.get('action').split('_')[-1]))) }) return render_template('admin.map_actions.html', **params) elif request.form.get('action').startswith( 'deletemap_'): # delete map db.session.delete( Map.getMaps(int( request.form.get('action').split('_')[-1]))) db.session.commit() elif request.form.get( 'action') == 'ordersetting': # change map order maps = [] for _id in request.form.getlist('mapids'): _map = Map.getMaps(int(_id)) maps.append( dict(name=_map.__dict__['name'], path=_map.__dict__['path'], maptype=_map.__dict__['maptype'], tileserver=_map.__dict__['tileserver'], default=_map.__dict__['default'])) Map.query.delete() # delete all maps for _map in maps: # add maps in new order db.session.add( Map(_map['name'], _map['path'], _map['maptype'], _map['tileserver'], _map['default'])) db.session.commit() params.update({'maps': Map.getMaps()}) return render_template('admin.map.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module textmod :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) == 2: if module[1] == 'ocr': # ocr settings if request.method == 'POST': if request.form.get('action') == 'savereocrparams': # save changes Settings.set('ocr.inputformat', request.form.get('ocr_formats').split('\r\n')) Settings.set('ocr.inputtextformat', request.form.get('ocr_textformats').split('\r\n')) Settings.set('ocr.callstring', request.form.get('ocr_callstring')) params.update({'params': Ocr.getOCRParams()}) return render_template('admin.textmod.ocr.html', **params) elif module[1] == 'ocrcustom': if request.method == 'POST': if request.form.get('action') == 'savereocrcustom': # save changes if not os.path.exists('%s/bin/tesseract/tessdata' % current_app.config.get('PROJECT_ROOT')): os.makedirs('%s/bin/tesseract/tessdata/' % current_app.config.get('PROJECT_ROOT')) with codecs.open('%s/bin/tesseract/tessdata/deu.user-words' % current_app.config.get('PROJECT_ROOT'), 'w', 'utf-8') as f: f.write(request.form.get('ocrcustom', '')) if os.path.exists('%s/bin/tesseract/tessdata/deu.user-words' % current_app.config.get('PROJECT_ROOT')): content = codecs.open('%s/bin/tesseract/tessdata/deu.user-words' % current_app.config.get('PROJECT_ROOT'), 'r', 'utf-8').read() else: current_app.logger.info('ocr custom wordlist not found') content = "" params.update({'content': content}) return render_template('admin.textmod.ocrcustom.html', **params) elif module[1] == 'convert': # convert image if request.method == 'POST': if request.form.get('action') == 'savereconvertparams': # save changes Settings.set('convert.format', request.form.get('convert_format')) Settings.set('convert.callstring', request.form.get('convert_callstring')) Settings.set('convert.crop', 'convert_crop' in request.form.get('convert_crop', 'False')) params.update({'params': Ocr.getConvertParams(), 'imageformats': ['jpg', 'png']}) return render_template('admin.textmod.convert.html', **params) else: # replacements if request.method == 'POST': if request.form.get('action') == 'addreplace': # add replacement params.update({'replacement': Replace('', '')}) return render_template('admin.textmod_actions.html', **params) elif request.form.get('action').startswith('editreplace_'): # edit existing replacement params.update({'replacement': Replace.getReplacements(id=request.form.get('action').split('_')[-1])}) return render_template('admin.textmod_actions.html', **params) elif request.form.get('action').startswith('deletereplace_'): # delete existing replacement db.session.delete(Replace.getReplacements(id=request.form.get('action').split('_')[-1])) db.session.commit() elif request.form.get('action') == 'savereplace': # save replacement if request.form.get('replace_id') == 'None': # add new db.session.add(Replace(request.form.get('replace_text'), request.form.get('replace_repl'))) else: # update existing replacement replacement = Replace.getReplacements(id=request.form.get('replace_id')) replacement.text = request.form.get('replace_text') replacement.replace = request.form.get('replace_repl') db.session.commit() params.update({'replacements': Replace.getReplacements()}) return render_template('admin.textmod.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module alarmobjects :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') def chunks(l, n): return [l[i:i + n] for i in range(0, len(l), n)] if len(module) > 1: # type definition if module[1] == 'types': if request.method == 'POST': if request.form.get( 'action') == 'createalarmobjecttype': # add type params.update({'alarmobjecttype': AlarmObjectType('', '')}) return render_template( 'admin.alarmobjects.types_action.html', **params) elif request.form.get( 'action') == 'savealarmobjecttype': # save type if request.form.get( 'alarmobjecttype_id') == 'None': # add new type alarmobjecttype = AlarmObjectType('', '') db.session.add(alarmobjecttype) else: # update existing alarmobjecttype = AlarmObjectType.getAlarmObjectTypes( id=int(request.form.get('alarmobjecttype_id'))) alarmobjecttype.name = request.form.get( 'alarmobjecttype_name') alarmobjecttype.remark = request.form.get( 'alarmobjecttype_remark') db.session.commit() elif request.form.get('action').startswith( 'detailobjecttype'): # edit type alarmobjecttype = AlarmObjectType.getAlarmObjectTypes( id=int(request.form.get('action').split('_')[-1])) params.update({'alarmobjecttype': alarmobjecttype}) return render_template( 'admin.alarmobjects.types_action.html', **params) elif request.form.get('action').startswith( 'deleteobjecttype_'): # delete type db.session.delete( AlarmObjectType.getAlarmObjectTypes( id=int(request.form.get('action').split('_')[-1]))) db.session.commit() params.update( {'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()}) return render_template('admin.alarmobjects.types.html', **params) elif module[1] == 'fields': if request.method == 'POST': if request.form.get( 'action') == 'updatefield': # update fields Settings.set('alarmobjectfields', [ i for i in chunks(request.form.getlist('fieldname'), 2) if i[0] != '' ]) db.session.commit() params.update({'fields': Settings.get('alarmobjectfields', [])}) return render_template('admin.alarmobjects.fields.html', **params) else: # base view if request.method == 'POST': streets = Street.getStreets() if request.form.get( 'action') == 'createalarmobject': # add alarmobject params.update({ 'alarmobject': AlarmObject('', 0, '', Settings.get('defaultLat'), Settings.get('defaultLng'), Settings.get('defaultZoom'), '', '', '', 0, 0), 'streets': streets, 'selectedstreet': '', 'map': Map.getDefaultMap(), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes() }) return render_template('admin.alarmobjects_actions.html', **params) elif request.form.get('action') == 'savealarmobject': # save if request.form.get('alarmobject_id') == 'None': # add new alarmobject = AlarmObject('', 0, '', 0, 0, 0, '', '', '', 0, 0) db.session.add(alarmobject) else: # update existing alarmobject = AlarmObject.getAlarmObjects( id=request.form.get('alarmobject_id')) alarmobject.name = request.form.get('edit_name') alarmobject._streetid = request.form.get('streetid') alarmobject._objecttype = int( request.form.get('edit_objecttype')) alarmobject.remark = request.form.get('edit_remark') if request.form.get('edit_position') == '1': alarmobject.lat = request.form.get('edit_lat') alarmobject.lng = request.form.get('edit_lng') alarmobject.zoom = request.form.get('edit_zoom') alarmobject.streetno = request.form.get('edit_streetno') alarmobject.alarmplan = request.form.get('edit_alarmplan') alarmobject.bma = request.form.get('edit_bma') alarmobject.active = int(request.form.get('edit_active', '0')) db.session.commit() elif request.form.get( 'action' ) == 'savealarmobjectattributes': # save attributes alarmobject = AlarmObject.getAlarmObjects( id=request.form.get('alarmobject_id')) for field in Settings.get('alarmobjectfields', []): # store attributes if 'edit_%s' % field[0] in request.form: alarmobject.set(field[0], request.form.get('edit_%s' % field[0])) db.session.commit() elif request.form.get( 'action') == 'savealarmobjectaao': # save aao alarmobject = AlarmObject.getAlarmObjects( id=request.form.get('alarmobject_id')) if alarmobject: alarmobject.set('cars1', [ c for c in request.form.get('cars1').split(';') if c != '' ]) alarmobject.set('cars2', [ c for c in request.form.get('cars2').split(';') if c != '' ]) alarmobject.set('material', [ c for c in request.form.get('material').split(';') if c != '' ]) db.session.commit() elif request.form.get('action').startswith( 'editalarmobject_'): # edit alarmobject alarmobject = AlarmObject.getAlarmObjects( id=int(request.form.get('action').split('_')[-1])) params.update({ 'alarmobject': alarmobject, 'streets': streets, 'selectedstreet': '%s (%s)' % (alarmobject.street.name, alarmobject.street.city.name), 'map': Map.getDefaultMap(), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes(), 'fields': Settings.get('alarmobjectfields', []), 'cars': Car.getCars(deptid=Department.getDefaultDepartment().id) }) return render_template('admin.alarmobjects_actions.html', **params) elif request.form.get('action').startswith( 'deletealarmobject_'): # delete alarmobject db.session.delete( AlarmObject.getAlarmObjects( id=int(request.form.get('action').split('_')[-1]))) db.session.commit() params.update({ 'alarmobjects': AlarmObject.getAlarmObjects(active=0), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes() }) return render_template('admin.alarmobjects.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module alarmobjects :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') def chunks(l, n): return [l[i:i + n] for i in range(0, len(l), n)] if len(module) > 1: # type definition if module[1] == 'types': if request.method == 'POST': if request.form.get('action') == 'createalarmobjecttype': # add type params.update({'alarmobjecttype': AlarmObjectType('', '')}) return render_template('admin.alarmobjects.types_action.html', **params) elif request.form.get('action') == 'savealarmobjecttype': # save type if request.form.get('alarmobjecttype_id') == 'None': # add new type alarmobjecttype = AlarmObjectType('', '') db.session.add(alarmobjecttype) else: # update existing alarmobjecttype = AlarmObjectType.getAlarmObjectTypes(id=int(request.form.get('alarmobjecttype_id'))) alarmobjecttype.name = request.form.get('alarmobjecttype_name') alarmobjecttype.remark = request.form.get('alarmobjecttype_remark') db.session.commit() elif request.form.get('action').startswith('detailobjecttype'): # edit type alarmobjecttype = AlarmObjectType.getAlarmObjectTypes(id=int(request.form.get('action').split('_')[-1])) params.update({'alarmobjecttype': alarmobjecttype}) return render_template('admin.alarmobjects.types_action.html', **params) elif request.form.get('action').startswith('deleteobjecttype_'): # delete type db.session.delete(AlarmObjectType.getAlarmObjectTypes(id=int(request.form.get('action').split('_')[-1]))) db.session.commit() params.update({'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()}) return render_template('admin.alarmobjects.types.html', **params) elif module[1] == 'fields': if request.method == 'POST': if request.form.get('action') == 'updatefield': # update fields Settings.set('alarmobjectfields', [i for i in chunks(request.form.getlist('fieldname'), 2) if i[0] != '']) db.session.commit() params.update({'fields': Settings.get('alarmobjectfields', [])}) return render_template('admin.alarmobjects.fields.html', **params) else: # base view if request.method == 'POST': streets = Street.getStreets() if request.form.get('action') == 'createalarmobject': # add alarmobject params.update({'alarmobject': AlarmObject('', 0, '', Settings.get('defaultLat'), Settings.get('defaultLng'), Settings.get('defaultZoom'), '', '', '', 0, 0), 'streets': streets, 'selectedstreet': '', 'map': Map.getDefaultMap(), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()}) return render_template('admin.alarmobjects_actions.html', **params) elif request.form.get('action') == 'savealarmobject': # save if request.form.get('alarmobject_id') == 'None': # add new alarmobject = AlarmObject('', 0, '', 0, 0, 0, '', '', '', 0, 0) db.session.add(alarmobject) else: # update existing alarmobject = AlarmObject.getAlarmObjects(id=request.form.get('alarmobject_id')) alarmobject.name = request.form.get('edit_name') alarmobject._streetid = request.form.get('streetid') alarmobject._objecttype = int(request.form.get('edit_objecttype')) alarmobject.remark = request.form.get('edit_remark') if request.form.get('edit_position') == '1': alarmobject.lat = request.form.get('edit_lat') alarmobject.lng = request.form.get('edit_lng') alarmobject.zoom = request.form.get('edit_zoom') alarmobject.streetno = request.form.get('edit_streetno') alarmobject.alarmplan = request.form.get('edit_alarmplan') alarmobject.bma = request.form.get('edit_bma') alarmobject.active = int(request.form.get('edit_active', '0')) db.session.commit() elif request.form.get('action') == 'savealarmobjectattributes': # save attributes alarmobject = AlarmObject.getAlarmObjects(id=request.form.get('alarmobject_id')) for field in Settings.get('alarmobjectfields', []): # store attributes if 'edit_%s' % field[0] in request.form: alarmobject.set(field[0], request.form.get('edit_%s' % field[0])) db.session.commit() elif request.form.get('action') == 'savealarmobjectaao': # save aao alarmobject = AlarmObject.getAlarmObjects(id=request.form.get('alarmobject_id')) if alarmobject: alarmobject.set('cars1', [c for c in request.form.get('cars1').split(';') if c != '']) alarmobject.set('cars2', [c for c in request.form.get('cars2').split(';') if c != '']) alarmobject.set('material', [c for c in request.form.get('material').split(';') if c != '']) db.session.commit() elif request.form.get('action').startswith('editalarmobject_'): # edit alarmobject alarmobject = AlarmObject.getAlarmObjects(id=int(request.form.get('action').split('_')[-1])) params.update({'alarmobject': alarmobject, 'streets': streets, 'selectedstreet': '%s (%s)' % (alarmobject.street.name, alarmobject.street.city.name), 'map': Map.getDefaultMap(), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes(), 'fields': Settings.get('alarmobjectfields', []), 'cars': Car.getCars(deptid=Department.getDefaultDepartment().id)}) return render_template('admin.alarmobjects_actions.html', **params) elif request.form.get('action').startswith('deletealarmobject_'): # delete alarmobject db.session.delete(AlarmObject.getAlarmObjects(id=int(request.form.get('action').split('_')[-1]))) db.session.commit() params.update({'alarmobjects': AlarmObject.getAlarmObjects(active=0), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()}) return render_template('admin.alarmobjects.html', **params)