Blurps

Exemple d'affichage attendu:

→ ces demandes, à l'exception de celle pour "un système externe", doivent être natives dans combo, et pas "blurps". (d'après moi aujourd'hui, Frédéric, 3 avril 2015)

Principe

Un "blurp" :
  1. obtient des informations (datas) depuis un ensemble de sources
  2. génère un contexte (Django) avec ces datas (en liste, en dico, chaînées, combinées, etc.)
  3. envoie le contexte à un template

Configuration

Idées (Thomas) pour déclarer des COMBO_BLURPS dans le settings :

# settings.py

COMBO_BLURPS = [
    {
        'slug': 'slug',
        'template': 'slug.html',
        'title': 'Blurp Title',
        'aggregator': methode sources -> context, # 'list', 'dict', 'chain', ...
        'sources': [
            {
                'slug': 'slug1',
                'title': 'Source Title'
                'url': 'https://wcs/myspace?NameId={{ user.username }}',
                'initial_data': { }, # valeur initiale de la ressource si c'est un dict, pourrait être d'un autre type...?
                'signature': '...?',
                'lazy': true;  # les données sont récupérées aussitôt (cf plus bas)
            },
            {
                'slug': 'slug2', ...
            }
            ],
        'sources_choice': false;  # possibiliter de limiter à un sous-ensemble des sources (false par défaut)
    },

    { blurp2 ... },

]

Génération du contexte

On prend chaque source sélectionnée (ou toutes sinon) → construction d'un contexte

    # (tendance pseudo code)
    datas = {}
    for source in sources:
        data = Data(**source, context)    # le contexte sera utilisé pour calculer l'url
        if not source['lazy']:
            data = data()
            context.update(data.as_dict())
        source['data'] = data

Note : les sources "non lazy" sont récupérées aussitôt et permettent d'augmenter le contexte (ainsi, un premier webservice peut donnes des infos aux suivants)

A partir du sources qui contient donc des source['data'], on construit le contexte qui sera envoyé au template, selon le type d'aggregator défini dans le blurp:

Point à éclaircir : le fonctionnement des initial_data

Instanciation des Blurps

Une cellule BlurpCell indique :

(si besoin de plus de paramétres => une classe fille)

Sur un tenant hobo

On construit le settings.COMBO_BLURPS à partir du hobo.json, c'est donc un TenantSettingsBlurps à écrire.

Exemple de blurps automatisables sur un combo lié à "n" wcs: