forked from sdis-cdl/csv2ics
-
Notifications
You must be signed in to change notification settings - Fork 0
/
icsCreator.py
112 lines (97 loc) · 3.43 KB
/
icsCreator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import csv
from datetime import datetime, timedelta
import os
print("CREATEURS DE FICHIERS ICS DEPUIS CALENDRIER")
print("FAIT POUR LE SDIS COEUR DE LAVAUX")
print("(c) MARTIJN SASSEN")
print("Contact: [email protected]")
print("17.12.2021 v1.5")
print("===========================================\n")
c = {} # Dict containing all calendars
cols = {
"cal": "Calendar",
"sub": "Subject",
"sda": "Start Date",
"sti": "Start Time",
"eda": "End Date",
"eti": "End Time",
"day": "All Day",
"dsc": "Description",
"loc": "Location"
}
totalEvents = 0
fCounter = 0 # Counter for ics files created
# open and read file
print('Ouverture du fichier Calendrier.csv...')
try:
csvFile = open('Calendrier.csv', encoding='utf-8-sig')
data = csv.DictReader(csvFile)
except:
print("Erreur lors de l'ouverture du fichier Calendrier.csv")
print("Vérifier la présence dudit fichier et de la dénomination correcte\n")
os.system('pause')
exit()
print("Fichier Calendrier.csv ouvert")
if not all (k in data.fieldnames for k in cols.values()):
print("Erreur : Il manque des colonnes dans le fichier Calendrier.csv")
print("Vous avez : " + ', '.join(data.fieldnames))
print("Il faut : " + ', '.join(cols.values()))
print("L'ordre n'est pas important\n")
os.system('pause')
exit()
# sort events
print("Tri des événements...")
for row in data:
try:
calName = row[cols["cal"]]
if calName not in c:
c[calName] = []
c[calName].append(row)
except:
csvFile.close()
print("Erreur lors du tri des événements")
os.system('pause')
exit()
print("Evénements triés")
print("Création des fichiers ics...")
# create ics files
for key, events in c.items():
f = open('ics/'+key+'.ics', "w", encoding='utf-8', newline='\n')
# file header
f.write('BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//MSASSEN\nCALSCALE:GREGORIAN\n\n')
eCounter = 0
for e in events:
# event header
f.write('BEGIN:VEVENT\n')
# event data
if e[cols["day"]] == "TRUE":
start = datetime.strptime(e[cols["sda"]], '%d.%m.%Y')
end = datetime.strptime(e[cols["eda"]], '%d.%m.%Y') + timedelta(days=1)
f.write('DTSTART;VALUE=DATE:' + start.strftime('%Y%m%d') + '\n')
f.write('DTEND;VALUE=DATE:' + end.strftime('%Y%m%d') + '\n')
else:
start = datetime.strptime(e[cols["sda"]]+' '+e[cols["sti"]], '%d.%m.%Y %H:%M')
end = datetime.strptime(e[cols["eda"]]+' '+e[cols["eti"]], '%d.%m.%Y %H:%M')
f.write('DTSTART:' + start.strftime('%Y%m%dT%H%M%S') + '\n')
f.write('DTEND:' + end.strftime('%Y%m%dT%H%M%S') + '\n')
f.write('SUMMARY:' + e[cols["sub"]] + '\n')
f.write('LOCATION:' + e[cols["loc"]] + '\n')
f.write('STATUS:CONFIRMED' + '\n')
f.write('DESCRIPTION:' + e[cols["dsc"]] + '\n')
# event footer
f.write('END:VEVENT\n\n')
eCounter += 1
# file footer
f.write('END:VCALENDAR')
f.close()
# end of file
totalEvents += eCounter
fCounter += 1
print(f'Fichier {key}.ics crée : {eCounter} événement(s)')
print('Fermeture du fichier Calendrier.csv...')
csvFile.close()
print("Fichier Calendrier.csv fermé")
print('Creation des fichiers ics terminée avec succès')
print(f'{fCounter} fichiers crées avec un total de {totalEvents} événement(s)')
print()
os.system('pause')