Skip to content
Snippets Groups Projects
user avatar
Olivier Le Brouster authored
4d24202a
History
Name Last commit Last update
estimevent
.gitignore
README.md
setup.py
tox.ini

Description

Cette bibliotheque facilite la publication d'événement sur le portail ESTIM (https://www.estim-science.fr/) dans le cadre d'une application python.

Elle contient également une application django.

Installation

pip install -e git+https://dev.webu.coop/shared/estimevent

Utilisation

from estimevent.api import EstimEventAPI

api = EstimEventAPI(user=my_user, password=my_password)

api.save_event({
    'titre': 'mon_titre'                     
    'date_debut': today(),          
    'date_fin': today(),                  
    'id_structure_organisatrice': 12345
    'adresse': '38 rue des Tournelles, 67890' 
    'tranche_dages': AGE_0_A_3_ANS,             
    'thematiques': [THE_AGRI_ALI]
    'publics_cibles': [PUB_CIB_GROUP, PUB_CIB_MEDIA]            
    'types_evenement': [TYP_EVT_SPEC_VIV]          
    'description': 'ma description'
})

api.delete_event({
    'titre': 'mon_titre'                     
    'date_debut': today(),          
    'date_fin': today(),                  
    'id_structure_organisatrice': 12345
    'adresse': '38 rue des Tournelles, 67890' 
})

Django

Mise en place

Ajouter estimevent to INSTALLED_APPS

INSTALLED_APPS = [
    
    'estimevent.contrib.django.estimevent',
    
]

Écrire une classe héritant de EstimEventWrapperBase et la décorer avec estim_wrapper

from estimevent.contrib.django.estimevent.models import estim_wrapper
from estimevent.contrib.django.estimevent.models import EstimEventWrapperBase

@estim_wrapper
class EstimNoteWrapper(EstimEventWrapperBase):
    
    user = getattr(settings, 'ESTIMEVENT_USER')                                                     
    password = getattr(settings, 'ESTIMEVENT_PASSWORD')                                             
    dry_run = getattr(settings, 'ESTIMEVENT_DRY_RUN', False)                                        
                                                                                                     
    @staticmethod                                                                                   
    def titre(note):                                                                                
        return note.name                                

    ...

    @classmethod                                                                                    
    def events_to_sync(cls, until=None):                                                            
        for note in Note.published.all():                                                           
            data = cls.properties(note)                                                             
            for overrided_data in cls.occurences(note, until):                                      
                data = data.copy()                                                                  
                data.update(overrided_data)                                                         
                yield (note, data)                                                                  
                                                                                                    
    @classmethod                                                                                    
    def has_to_keep(cls, event):                                                                    
        if event.status not in [event.STATUS_PUBLISHED, event.STATUS_MODERATE]:                     
            return False                                                                            
        return super(EstimNoteWrapper, cls).has_to_sync(event)                            

Utilisation

Cette application ajoute la commande estimsync qui synchronise l'ensemble des événements, les met à jour au besoin et supprime les évenements à ne pas conserver.

./manage.py estimsync [--dry-run] [event_id event_id ...] 

API

class estimevent.api.EstimEventAPI

Cette classe contient toutes les constantes ESTIM.

__init__(user, password, production=True, host=None, proto=None)

save_event(date, production=True)

Les champs sont nommés à la manière python. Par exemple, trancheDages devient tranche_dages.

delete_event(date, production=True)

class estimevent.contrib.django.estimevent.models.EstimEventWrapperBase

classmethod events_to_sync()

Retourne l'ensemble des événements à synchroniser sous la forme d'une liste de tuple (object, data).

classmethod has_to_keep(event)

Permet de savoir si un évenement doit être conservé sur le portail ESTIM.

classmethod has_to_add(event)

Permet de savoir si un évenement doit être ajouté sur le portail ESTIM.