mdk.fr/content/pages/supinternet_python_weblint.md
2018-12-05 12:33:01 +01:00

2.0 KiB

status: hidden title: Python — Weblint slug: EiN8shae-weblint robots: noindex

Web Linter

Développez un programme, s'utilisant dans un shell uniquement (pas d'interface graphique, pas d'interface web, pas de curses, que du text dans un émulateur de terminal) prenant une (ou plusieurs) URL en paramètre et effectuant une batterie de tests dessus, l'idée est de pouvoir l'utiliser dans une CI comme un jslint, csslint, des tests unitaires, etc... ou comme outil de monitoring branché sur un nagios like.

Le projet s'appelle weblint.

Les tests à implémenter sont libres, le nombre de tests, la variété des tests, et la qualité de l'implémentation feront partie de la note. Voici quelques idées de tests pour vous inspirer :

  • Cohérence des headers (encoding pareil que dans la meta et que dans la page, content type existant) (langue du contenu identique à la langue annoncée,...), Vérifier que la page est bien envoyée compressée si le client le gère, ...
  • Headers à jour : CSP, x-frame-options etc...
  • Vérification orthographique
  • Vérification grammaticales
  • Temps de réponse
  • Présence de 404
  • Présence de liens HTTP alors qu'en face y'a du HTTPS
  • Si présence de flux RSS / Atom : vérifier leur contenu, content types, ...
  • Si présence de CSS / JS externes vérification de leur headers, temps de réponse, contenu, minification
  • Si c'est une Home page, vérifier aussi le robots.txt, le security.txt, ...
  • Si c'est du HTTPS vérifier aussi si c'est bien fait (expiration pas trop proche,...).
  • Si y'a du AMP vérifier via amphtml-validator.

Les erreurs devront être remontées dans un format simple et lisible, une erreur par ligne, aucune ligne ne doit être autre chose qu'une erreur, inspirez vous de pylint, flake8, gcc, php -l, etc…

Vous pouvez implémenter une option "--verbose" et "-v" pour rajouter des informations, éventuellement "-vv" pour rajouter du débug (n'hésitez pas à utiliser les bibliothèque standard logging et argparse).