Development #10639
cellule générique remontée info json
0%
Description
Codée en cours de formation Strasbourg; à reprendre de manière sérieuse.
@register_cell_class class JsonCell(CellBase): title = models.CharField(_('Title'), max_length=150, blank=True) url = models.URLField(_('URL'), blank=True) template_string = models.TextField(_('Template'), blank=True, null=True) template_name = 'combo/json-cell.html' class Meta: verbose_name = _('JSON Feed') def is_visible(self, user=None): return bool(self.url) and super(JsonCell, self).is_visible(user=user) def get_cell_extra_context(self, context): context = super(JsonCell, self).get_cell_extra_context(context) cache_key = hashlib.md5(self.url).hexdigest() feed_content = cache.get(cache_key) if not feed_content: feed_response = requests.get(self.url) if feed_response.status_code == 200: feed_content = feed_response.content cache.set(cache_key, feed_content, 600) if feed_content: context['data'] = json.loads(feed_content) return context def render(self, context): cache_key = hashlib.md5(self.url).hexdigest() feed_content = cache.get(cache_key) if not context.get('synchronous') and feed_content is None: raise NothingInCacheException() context.update(self.get_cell_extra_context(context)) tmpl = Template(self.template_string) return tmpl.render(context)
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a plus de 7 ans
- la signature automatique de l'URL si c'est un site du cercle de confiance hobo
- le paramétrage du délai de cache, parce que 10min c'est long
- la possibilité de poser un NameID ou email dans l'URL : des variables dans URL ? (ou bien une case à cocher "add nameid in querystring")
Mis à jour par Frédéric Péters il y a plus de 7 ans
la signature automatique de l'URL si c'est un site du cercle de confiance hobo
C'est le cas automatiquement avec from combo.utils import requests
.
le paramétrage du délai de cache, parce que 10min c'est long
Ok pour avoir un paramètre là-dessus; les dix minutes ici ça vient juste du copié/collé de FeedCell, et comme à la formation il s'agissait d'afficher les horaires des piscines, c'était bien assez.
la possibilité de poser un NameID ou email dans l'URL : des variables dans URL ? (ou bien une case à cocher "add nameid in querystring")
Un <select> avec comme possibilités : appel anonyme, appel avec l'adresse email de l'usager, appel avec l'identifiant de l'usager ? (ici aussi, pour les piscines, c'était pas vraiment une question).
Aussi, j'ajouterais une sélection dynamique du nom du template, pour un retour en fanfare de http://doc.entrouvert.org/portail-citoyen/dev/ , i.e. si c'est du json avec une clé data, si dedans il y a title/url(/description) comme attributs, alors on prend combo/json-list-cell.html, s'il y a des clés data et columns on prend combo/json-table-cell.html, et ainsi de suite pour d'autres formats qu'on "normaliserait". Liberté laissée bien sûr d'overrider ça en posant un slug et un tempate custom.
Mis à jour par Frédéric Péters il y a environ 7 ans
- Fichier 0001-general-add-new-json-content-cell-10639.patch 0001-general-add-new-json-content-cell-10639.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Un <select> avec comme possibilités : appel anonyme, appel avec l'adresse email de l'usager, appel avec l'identifiant de l'usager ?
J'ai laissé ça sur le côté, me disant aussi qu'on allait prochainement pouvoir se mettre à gérer [email] ou [name_id] dans les URL.
Mis à jour par Frédéric Péters il y a environ 7 ans
- Fichier 0001-general-add-new-json-content-cell-10639.patch 0001-general-add-new-json-content-cell-10639.patch ajouté
Pour que la signature ait bien lieu il faut explicitement passer remote_service='auto', patch adapté.
Mis à jour par Thomas Noël il y a environ 7 ans
- ajouter un accept: application/json lors de l'appel
- ne mettre en cache que si le json.loads n'a pas explosé
- gérer les err!=0 (bon, ça pourrait être dans un patch plus tard, mais sinon déjà renommer json-no-content-cell.html en json-error-cell.html)
- retirer le debug dans json-cell.html
- virer le template_name = 'combo/json-cell.html' parce que y'a la property ensuite
voilà
Mis à jour par Frédéric Péters il y a environ 7 ans
- Fichier 0001-general-add-new-json-content-cell-10639.patch 0001-general-add-new-json-content-cell-10639.patch ajouté
gérer les err!=0 (bon, ça pourrait être dans un patch plus tard, mais sinon déjà renommer json-no-content-cell.html en json-error-cell.html)
J'ai pris l'option de ne rien faire de particulier, à voir à l'usage si c'est intéressant de gérer ça de manière unifiée ou si ça sera mieux géré depuis le template même.
retirer le debug dans json-cell.html
En fait ce template ne devrait pas se trouver être utilisé, il devrait toujours y avoir un vrai template basé sur le slug; en attendant garder le résultat en commentaire peut être un tout petit peu utile quand même.
Mis à jour par Frédéric Péters il y a environ 7 ans
- Statut changé de En cours à Résolu (à déployer)
commit 0820f8870e2e6e386e4f8b6676059047a91db1e4 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Fri Feb 10 08:32:58 2017 +0100 general: add new json content cell (#10639)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
general: add new json content cell (#10639)