Aller au contenu. | Aller à la navigation

Outils personnels

Navigation
Vous êtes ici : Accueil / Aide pour les responsables / Gérer les événements des calendriers / Générer les événements depuis un csv / Script python pour générer les événements à partir d'un csv (cas plone 4.x normal)

Script python pour générer les événements à partir d'un csv (cas plone 4.x normal)

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

# recupere chaque ligne du fichier voulu (ici 'evenements.csv')

events = context['evenements.csv'].data.split('\n')
nb_lines=len(events)


# facultatif: si on veut detruire tous les evenements contenus dans un repertoire pointé par un path determiné (celui-ci normalement)
#path='/ecg/administration/test_admin/mumuse_csv/'
#existing_events=context.portal_catalog(portal_type='Event',path=path)
#for existing_event in existing_events:
    #resultObject=existing_event.getObject()
    #existing_event_id=resultObject.getId()
    #context.manage_delObjects(existing_event_id)


# 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]:

# chaque ligne est cassée selon le séparateur ";" pour former une liste des propriétés de l'objet evenement
    event_fields= event.split(';')

# "mise à jour": on va supprimer l'élement d'id identique à celui du fichier csv (s'il 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

    context.invokeFactory(type_name="Event",
                      id=event_fields[0],
                      title=event_fields[1],
                      description=event_fields[2],
                      location=event_fields[3],
                      startDate=event_fields[4],
                      endDate=event_fields[5],
                      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])

# il existe aussi start_time (uniquement l'heure), start_date (uniquement la date) ...
# On peut ajouter ou supprimer des champs selon le fichier csv de départ -> label_event_attendees, label_event_type, label_url, label_contact_name, label_contact_email, label_contact_phone, label_categorieslabel_related_items, label_language, label_expiration_date, label_contributors, label_copyrights, label_allow_comments, label_exclude_from_nav