Browserview pour générer les événements (cas schoolsite avec types DX)
# 3) BrowserView class for importing Events
# Functions and constants for the import of events
def cleaning(mot):
# suppression des "
word = mot
if word[1]=='"':
word = word[1:]
if word[-1]=='"':
word = word[:-1]
return word
def multisubject(mot):
# transforme une liste avec virgule en multiligne
sujets = mot.split(',')
word = ''
for s in sujets:
if word :
word += '\n' + s
else:
word = s
return word
def convertCSVEntryToDatetimeObject(entry):
# get datetime obj from a csv column data (string) of the form: 08/26/2013 07:30
first_split = entry.split(' ')
date = first_split[0]
hour_and_min = first_split[1]
second_split = date.split('/')
month = second_split[0]
day = second_split[1]
year = second_split[2]
third_split = hour_and_min.split(':')
hour = third_split[0]
min = third_split[1]
return datetime(int(year), int(month), int(day), int(hour), int(min))
DEFAULT_TIMEZONE = "Europe/Zurich"
CSV_FILE_NAME = 'evenements.csv'
# BrowserView class
class ImportEvents(BrowserView):
"""
"""
def __call__(self):
context = self.context
# recupere chaque ligne du fichier voulu (ici 'evenements')
events_data_file = context[CSV_FILE_NAME]
#return dir(events_data_file.data)
events = events_data_file.data.split('\n')
nb_lines=len(events)
# liste tous les objets du dossier et creation d'une liste avec leur id
existing_objects = context.getFolderContents()
list_objects_id =[]
for existing_object in existing_objects:
this_object=existing_object.getObject()
this_object_id=this_object.getId()
list_objects_id.append(this_object_id)
# boucle sur tous les evenements du fichier CSV, on ne veut pas de la ligne 1 (labels) ni de la derniere (vide a cause du dernier '''\n''')
for event in events[1:nb_lines-1]:
# Parsing de chaque ligne ==> liste des attributs de l'objet evenement
event_fields= event.split(';')
# Supprimer element dont id identique a celui du fichier csv (si existe)
if event_fields[0] in list_objects_id:
context.manage_delObjects(event_fields[0])
# creation de l'evenement, on insere les proprietes de l'evenement selon la structure du fichier CSV de depart
event_id = event_fields[0]
event_start = convertCSVEntryToDatetimeObject(event_fields[4])
event_end = convertCSVEntryToDatetimeObject(event_fields[5])
context.invokeFactory(type_name="Event",
id=event_id,
title=event_fields[1],
description=event_fields[2],
location=event_fields[3],
start=event_start,
end=event_end,
timezone=DEFAULT_TIMEZONE,
text=event_fields[6],
subject=multisubject(event_fields[7]),
# effectiveDate=event_fields[8],
# expirationDate=event_fields[9],
# creation_date=event_fields[10],
# modification_date=event_fields[11],
creators=(event_fields[12],)
)
evt = context[event_id]
evt.reindexObject()
return "DONE"