101 lines
3.0 KiB
Python
101 lines
3.0 KiB
Python
import icalendar
|
|
|
|
def DumpComponentHeader(file, component):
|
|
fields = []
|
|
inclusiveUnitCounter = 0
|
|
fields += map(lambda x: x + ' - required', component.required)
|
|
fields += map(lambda x: x + ' - singletons', component.singletons)
|
|
for units in component.inclusive:
|
|
fields += map(lambda x: x + ' - inclusive{}'.format(inclusiveUnitCounter), units)
|
|
inclusiveUnitCounter += 1
|
|
fields += ('exclusive - name', 'exclusive - data')
|
|
fields += ('multiple', )
|
|
file.write(','.join(fields))
|
|
file.write('\n')
|
|
|
|
def DumpComponentData(file, component):
|
|
data = []
|
|
gotten_instance = None
|
|
|
|
for item in component.required:
|
|
gotten_instance = component.get(item)
|
|
if gotten_instance is not None:
|
|
data.append(AdvancedFormater(gotten_instance))
|
|
else:
|
|
data.append('')
|
|
for item in component.singletons:
|
|
gotten_instance = component.get(item)
|
|
if gotten_instance is not None:
|
|
data.append(AdvancedFormater(gotten_instance))
|
|
else:
|
|
data.append('')
|
|
for units in component.inclusive:
|
|
for item in units:
|
|
gotten_instance = component.get(item)
|
|
if gotten_instance is not None:
|
|
data.append(AdvancedFormater(gotten_instance))
|
|
else:
|
|
data.append('')
|
|
|
|
gotten_name = ""
|
|
gotten_data = ""
|
|
for item in component.exclusive:
|
|
gotten_instance = component.get(item)
|
|
if gotten_instance is not None:
|
|
gotten_name = item
|
|
gotten_data = AdvancedFormater(gotten_instance)
|
|
break
|
|
data.append(gotten_name)
|
|
data.append(gotten_data)
|
|
|
|
for item in component.multiple:
|
|
gotten_instance = component.get(item)
|
|
if gotten_instance is not None:
|
|
data.append('- {} -'.format(item))
|
|
data.append(AdvancedFormater(gotten_instance))
|
|
else:
|
|
data.append('')
|
|
|
|
file.write(','.join(data))
|
|
file.write('\n')
|
|
|
|
def AdvancedFormater(data):
|
|
if isinstance(data, icalendar.prop.vDDDTypes):
|
|
return str(data.dt)
|
|
else:
|
|
return str(data)
|
|
|
|
# read file
|
|
icsFile = open('test.ics', 'rb')
|
|
cal = icalendar.Calendar.from_ical(icsFile.read())
|
|
icsFile.close()
|
|
|
|
# analyse file
|
|
csvEvent = open('event.csv', 'w')
|
|
csvEventHeader = False
|
|
csvAlarm = open('alarm.csv', 'w')
|
|
csvAlarmHeader = False
|
|
|
|
eventCount = 0
|
|
alarmCount = 0
|
|
miscCount = 0
|
|
for component in cal.walk():
|
|
if component.name == 'VEVENT':
|
|
eventCount += 1
|
|
if not csvEventHeader:
|
|
DumpComponentHeader(csvEvent, component)
|
|
csvEventHeader = True
|
|
DumpComponentData(csvEvent, component)
|
|
elif component.name == 'VALARM':
|
|
alarmCount += 1
|
|
if not csvAlarmHeader:
|
|
DumpComponentHeader(csvAlarm, component)
|
|
csvAlarmHeader = True
|
|
DumpComponentData(csvAlarm, component)
|
|
else:
|
|
miscCount += 1
|
|
|
|
|
|
csvEvent.close()
|
|
csvAlarm.close()
|
|
print('Event count: {}\nAlarm count: {}\nMisc count: {}'.format(eventCount, alarmCount, miscCount)) |