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'] = dataNote : 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