#!/usr/bin/python # -*- coding: UTF-8 -*- """ Kalendereinträge für Alarmierungen @author: baderj @author: Norbert Jahn @author: Bastian Schroll @requires: icalendar https://pypi.org/project/icalendar/ @requires: dateutil https://github.com/dateutil/dateutil/ @requires: pytz https://pypi.org/project/pytz/ """ import logging # Global logger import time import requests import re from icalendar import Calendar, Event from datetime import datetime, timedelta import pytz from includes import globalVars # Global variables from includes.helper import configHandler ## # # onLoad (init) function of plugin # will be called one time by the pluginLoader on start # def onLoad(): """ While loading the plugins by pluginLoader.loadPlugins() this onLoad() routine is called one time for initialize the plugin @requires: nothing @return: nothing """ # nothing to do for this plugin return ## # # Main function of MySQL-plugin # will be called by the alarmHandler # def run(typ,freq,data): """ This function is the implementation of a Calendar-Plugin It will write Alarms in an ics-File. @type typ: string (FMS|ZVEI|POC) @param typ: Typ of the dataset for sending to BosMon @type data: map of data (structure see readme.md in plugin folder) @param data: Contains the parameter for dispatch to BosMon. @type freq: string @keyword freq: frequency is not used in this plugin @requires: @return: nothing """ try: if configHandler.checkConfig("2calendar"): #read and debug the config try: # # Kalender instanzieren # logging.debug("Kalender wird instanziert") cal = Calendar() cal.add('proid', 'BOS') cal.add('version', '2.0') except: logging.error("Kann Kalender nicht erstellen") else: try: # # Erstelle das Event # logging.debug("Insert %s", typ) if typ == "ZVEI": g = open(globalVars.config.get("2calendar", "filepath2calendar")+'alle.ics','rb') gcal = Calendar.from_ical(g.read()) for component in gcal.walk(): if component.name == "VEVENT": logging.debug("Lese Event aus: "+component.get('SUMMARY') ) event = Event() event.add('summary', component.get('SUMMARY')) print(component.get('SUMMARY')) event.add('dtstart', component.get('DTSTART')) print(component.get('DTSTART').dt) event.add('dtend', component.get('dtend')) print(component.get('dtend').dt) event.add('dtstamp', component.get('dtstamp')) print(component.get('dtstamp').dt) event.add('location', component.get('location')) print(component.get('LOCATION')) event['uid'] = component.get('UID') cal.add_component(event) g.close() timestamp = datetime.fromtimestamp(data["timestamp"]) event = Event() event.add('summary', data["description"]) event.add('dtstart',timestamp) event.add('dtend',timestamp) event.add('dtstamp',timestamp) event.add('location', data["zvei"]) event['uid'] = "{0}#{1}".format(timestamp,data["description"]) cal.add_component(event) # logging.debug("Schreibe in ZVEI-spezifische-Datei") # with open(globalVars.config.get("2calendar", "filepath2calendar")+data["description"]+'.ics', 'wb') as f: # f.write(cal.to_ical()) logging.debug("Schreibe in Gesamt-Datei") with open(globalVars.config.get("2calendar", "filepath2calendar")+'alle.ics', 'wb') as f: f.write(cal.to_ical()) else: logging.warning("Nicht unterstützter Typ: %s", typ) except: logging.error("cannot Insert %s", typ) logging.debug("cannot Insert %s", typ, exc_info=True) return except: logging.error("unknown error") logging.debug("unknown error", exc_info=True)