diff --git a/.gitignore b/.gitignore index bc9c5f8..a996968 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ -node_modules -__pycache__ -.cache -dist +# Node.js +node_modules/ +.cache/ +dist/ + +# Python +__pycache__/ +*.py[cod] diff --git a/data/fetch/__pycache__/__init__.cpython-38.pyc b/data/fetch/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 60cbb67..0000000 Binary files a/data/fetch/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/data/fetch/__pycache__/http.cpython-38.pyc b/data/fetch/__pycache__/http.cpython-38.pyc deleted file mode 100644 index d763f3a..0000000 Binary files a/data/fetch/__pycache__/http.cpython-38.pyc and /dev/null differ diff --git a/data/fetch/__pycache__/mediawiki_api.cpython-38.pyc b/data/fetch/__pycache__/mediawiki_api.cpython-38.pyc deleted file mode 100644 index 07594c4..0000000 Binary files a/data/fetch/__pycache__/mediawiki_api.cpython-38.pyc and /dev/null differ diff --git a/data/fetch/__pycache__/wikipedia_pageviews.cpython-38.pyc b/data/fetch/__pycache__/wikipedia_pageviews.cpython-38.pyc deleted file mode 100644 index cbd4727..0000000 Binary files a/data/fetch/__pycache__/wikipedia_pageviews.cpython-38.pyc and /dev/null differ diff --git a/data/fetch/http.py b/data/fetch/http.py index 91fdbc1..c06f5c9 100644 --- a/data/fetch/http.py +++ b/data/fetch/http.py @@ -1,15 +1,38 @@ +import logging import requests import urllib3 # Session de requêtage HTTP session = requests.Session() -# Réalise 10 essais de récupération de chaque page, en augmentant -# progressivement le délai entre chaque essai -retry = urllib3.util.Retry(total=10, backoff_factor=0.3) -adapter = requests.adapters.HTTPAdapter(max_retries=retry) -session.mount('http', adapter) -session.mount('https', adapter) +# Objet pour afficher le journal d’exécution +logger = logging.getLogger('fetch.http') + + +class LoggingAdapter(requests.adapters.HTTPAdapter): + """ + Adapteur de requêtes vérifiant le nombre d’accès réalisés par seconde. + """ + def __init__(self): + # Réessaie jusqu’à dix fois la récupération de chaque page, en + # augmentant progressivement le délai entre chaque essai + retry = urllib3.util.Retry(total=10, backoff_factor=0.3) + super(LoggingAdapter, self).__init__(max_retries=retry) + + def send( + self, request, stream=False, timeout=None, verify=True, + cert=None, proxies=None + ): + logger.debug('{} {}'.format(request.method, request.url)) + return super(LoggingAdapter, self).send( + request, stream=stream, timeout=timeout, + verify=verify, cert=cert, proxies=proxies + ) + + +adapter = LoggingAdapter() +session.mount('http://', adapter) +session.mount('https://', adapter) # Identification du robot session.headers['User-Agent'] = ( diff --git a/data/fetch/wikipedia_pageviews.py b/data/fetch/wikipedia_pageviews.py index db07a9c..66d0f1f 100644 --- a/data/fetch/wikipedia_pageviews.py +++ b/data/fetch/wikipedia_pageviews.py @@ -28,12 +28,14 @@ def _year_date_distance(a, b): """ Calcule la distance entre deux jours de l’année. - :example: _year_date_distance(10, 360) == 15 - :example: _year_date_distance(numpy.array([10, 182, 355]), 182) - == [172, 0, 173] :param a: Première valeur (peut être un tableau numpy). :param b: Seconde valeur (peut être un tableau numpy). :return: Valeur de la distance. + + >>> _year_date_distance(10, 360) + 15 + >>> _year_date_distance(numpy.array([10, 182, 355]), 182) + [172, 0, 173] """ return numpy.stack(( numpy.mod(a - b, len(year_all_days)), diff --git a/data/plot_pageviews.py b/data/plot_pageviews.py old mode 100644 new mode 100755 index e63055e..6ff2c59 --- a/data/plot_pageviews.py +++ b/data/plot_pageviews.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python3 import calendar import collections from datetime import datetime @@ -8,7 +9,7 @@ from matplotlib import pyplot import sys # Objet pour afficher le journal d’exécution -logger = logging.getLogger('pageviews') +logger = logging.getLogger('plot_pageviews') logging.basicConfig(level=logging.INFO) if len(sys.argv) < 4: