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)
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
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:
- 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
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)
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