Gargantext Annotations web application

Install dependencies

(2016-05-11) Instead of the previously "npm-installable" structure, all the libraries are now permanently installed outside of the app 'annotations', directly in the 'static' dir of the entire gargantext project.

Initial version specifications of the dependencies are:

  • "angular": "~1.2.x",
  • "angular-cookies": "~1.2.x",
  • "angular-loader": "~1.2.x",
  • "angular-resource": "~1.2.x",
  • "bootstrap": "~3.x",
  • "angular-cookies": "1.2",
  • "bootstrap-select": "silviomoreto/bootstrap-select#~1.7.3"
  • "underscore": "1.5.2"

These dependencies are imported via annotations/main.js (js) and main.html (css).

Directory Layout

The layout is :

├── __init__.py
├── README.md
├── static
│   └── annotations
│       ├── activelists.js
│       ├── app.css
│       ├── app.js
│       ├── document.js
│       ├── highlight.js
│       ├── http.js
│       ├── keyword_tpl.html
│       ├── main.js
│       ├── ngramlist.js
│       └── utils.js
├── templates
│   └── annotations
│       └── main.html
├── urls.py
└── views.py

Conception and workflow documentation

TODO : à traduire en anglais

Cette API permet d'éditer les mots-clés miamlistés ou stoplistés associé à un document affiché dans un cadre d'une page web permettant de naviguer à travers un ensemble de document d'un corpus.

Architecture

  • Templates : Django et Angular.js ?
  • Communication entre les modules : évènements Angular ($emit et $broadcast)
  • Pas de routage entre différentes URL, car ici une seule vue principale basée sur le template django corpus.html
  • Modèle d'abstraction de données : côté client (Angular Scopes) et côté serveur (Django Model et SQLAlchemy)
  • Composants : TODO lister et décrire les composants client et serveur
  • Structure de l'application : organisation du client et du serveur
  • Style : Bootstrap et un thème spécifique choisi pour Gargantext
  • Gestion des dépendances :
    • bower, npm pour le développement web et les tests côté client
    • pip requirements pour le côté serveur

Quelles actions execute l'API ?

  • afficher le titre, les auteurs, le résumé, la date de publication et le corps d'un document.
  • lecture des mots-clés miamlistés associés à un document (dans le texte et hors du texte).
  • lecture des mots-clés stoplistés associés à un document (dans le texte et hors du texte).
  • lecture des documents ayant le plus de mots-clés miamlistés associés identiques pour afficher une liste de liens vers de nouveaux documents
  • lecture du groupe de mots-clés auquel appartient un mot-clé (synonymes, différentes formes)
  • modification du groupe de mots-clés auquel appartient un mot-clé donné

On désigne par mot-clé un NGram.

Schéma de l'API

Liste des endpoints

Lecture des données

  • POST '^api/nodes/(\d+)/children/queries$' : liste des NGrams d'un document avec la possibilité de filtrer par NGrams
  • GET '^api/nodes$' : liste des identifiants de mots-clés filtrés par type (NGram ou autre) pour un identifiant de parent (Document ou autre)
  • GET '^api/nodes/(\d+)/ngrams$': liste des termes des mots-clés associés à un Document parent, filtrés par termes
  • GET ^api/nodes/(\d+)/children/metadata$ : liste des metadata d'un Node, c'est-à-dire :
    • pour un document : titre, auteur, etc
    • pour un NGram : stoplisté ou miamlisté ?

Écriture des données

TODO

Workflow

Nous nous fixons sur cette documentation et spécification de l'API

  • en parallèle : développement de l'API et prototypage de l'interface
  • le prototypage de l'interface peut modifier l'API si besoin

Spécifications des fondations de l'interface

  • résolutions d'écran
  • browsers
  • langue: english only
  • SEO: aucun ?
  • collaboratif : oui, les modifications d'un autre utilisateurs seront notifiées à tous les utilisateurs présent sur le même corpus de documents
  • fonctionne offline ?

Working process

Plateforme

  • Python 3.4
  • Django 1.6
  • Postgresql 9.3 + HSTORE
  • SQLAlchemy
  • Bootstrap CSS
  • Angular.js

Outils de qualité de code

  • pylint
  • jshint (voir .jshintrc)
  • indentations : 4 espaces (voir .lvimrc)
  • nettoyage automatique des espaces en fin de ligne

Tests

There are two kinds of tests possible : Unit tests and End to End tests.

  • côté client : étudier karma.js et protractor
  • définir la stratégie de tests : TODO

Déploiement

  • définir le processus de déploiement
  • prévoir un système de monitoring des erreurs du serveur une fois en ligne
    • Sentry ?