h1. Blurps Exemple d'affichage attendu: * la liste des catégories d'un site wcs, choisi parmi une liste * la liste des catégories d'un ensemble de sites wcs, groupées par site * la liste de toutes les demandes en cours sur un ensemble de sites wcs, triées par * les informations d'un compte fédéré d'un système externe (ex: compte lecteur) * flux RSS ; aggrégation de flux RSS → 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) h1. Principe Un "blurp" : # obtient des informations (datas) depuis un ensemble de sources # génère un contexte (Django) avec ces datas (en liste, en dico, chaînées, combinées, etc.) # envoie le contexte à un template h1. 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 ... },

]
h1. 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: * si une seule source dans la définition du blurp, on renvoie @data@ directement, pas d'agrégation, bien sûr * aggregator list
context = [data1, data2, data3]
* aggregator dict
context = {'slug1': data1, 'slug2': data2, 'slug3': data3}
* aggregator chain
context = [] + data1 + data2 + data3  # non lazy
* d'autres idées ?... Point à éclaircir : le fonctionnement des initial_data h1. Instanciation des Blurps Une cellule BlurpCell indique : * le slug d'un settings.COMBO_BLURP * une liste des slug des sources, si ce blurp l'accepte (sources_choice=true) (si besoin de plus de paramétres => une classe fille) h1. 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: * les catégories des wcs (tous, ou un sous-ensemble) / aggregator=list * les formulaires des wcs (tous, ou un sous-ensemble) / aggregator=list * les demandes en cours / aggregator=chain (puis tri et limitation dans le template html) * les infos d'un user