Commit a8e4e415 authored by Matthieu Boileau's avatar Matthieu Boileau
Browse files

Fix deadlinks #110

parent 91344dca
......@@ -18,7 +18,7 @@
Face au besoin croissant de puissance de calcul et à des applications numériques toujours plus complexes, s'exécutant sur des architectures parallèles en constante évolution (many-coeurs, GPU, machines hybrides, ...), il est nécessaire de pouvoir mieux contrôler l'efficacité et la performance de nos applications.
Pour cela, le Groupe Calcul et la Maison de la Simulation organisent, dans le cadre d'`Equip@meso <http://www.genci.fr/fr/content/equipmeso-0>`__, une école sur l'optimisation qui se déroulera du 7 au 11 juillet 2014 à l'Espe de `l'Université de Strasbourg <http://www.unistra.fr>`__, qui héberge le `méso-centre de l'Université <http://hpc.unistra.fr>`__.
Pour cela, le Groupe Calcul et la Maison de la Simulation organisent, dans le cadre d'`Equip@meso <http://www.genci.fr/fr/content/equipmeso>`__, une école sur l'optimisation qui se déroulera du 7 au 11 juillet 2014 à l'Espe de `l'Université de Strasbourg <http://www.unistra.fr>`__, qui héberge le `méso-centre de l'Université <http://hpc.unistra.fr>`__.
La formation a eu lieu à l'Espe Alsace, 141 Avenue de Colmar, 67100 Strasbourg. Accès : Tram A/E, Arrêt "Krimmeri/Stade de la Meinau".
......
......@@ -15,7 +15,7 @@
.. section:: Description
:class: description
La journée aura lieu le 19 Septembre 2013, `Institut Henri Poincaré <http:///www.ihp.fr>`_ à Paris.
La journée aura lieu le 19 Septembre 2013, `Institut Henri Poincaré <http://www.ihp.fr>`_ à Paris.
Notez que le lendemain se tiendra dans le même lieu une `journée Equip@Meso dédiée à des "mésos-challenges" <http://genci.fr/fr/node/378>`_.
.. section:: Programme
......
......@@ -16,7 +16,7 @@
.. section:: Description
:class: description
Le 7 octobre 2014, à l'`Institut Henri Poincaré <http:///www.ihp.fr>`__, Paris
Le 7 octobre 2014, à l'`Institut Henri Poincaré <http://www.ihp.fr>`__, Paris
Comme chaque année, nous aurons des présentations en lien avec le calcul
haute performance des acteurs majeurs en France (Genci, le ministère
......
......@@ -12,4 +12,6 @@ dependencies:
- python-gitlab
- Jinja2
- maya
- urllib3
- requests
- pelican
......@@ -54,13 +54,14 @@ PLUGINS = ['ipynb.markup', 'pelican_dynamic', 'rst_directives', 'extract_toc', '
RST_GLOBAL_INCLUDES = ['../plugins/rst_include/include.rst']
# For pelican-deadlinks plugin
DEADLINK_VALIDATION = False
DEADLINK_VALIDATION = True
DEADLINK_OPTS = {
'archive': True,
'classes': ['custom-class1', 'disabled'],
'labels': True,
'timeout_duration_ms': 1000,
'timeout_duration_ms': 3000,
'timeout_is_error': False,
'request_verify': False
}
MENUITEMS = [('Le groupe', '/pages/presentation_groupe.html'),
......
# -*- coding: utf8 -*-
from logging import info, debug, warn
from logging import info, debug, warning
from bs4 import BeautifulSoup
from pelican import signals
import requests
from requests.exceptions import Timeout, RequestException
import os
import urllib3
UNKNOWN = None
MS_IN_SECOND = 1000.0
......@@ -15,6 +17,7 @@ DEFAULT_OPTS = {
'labels': False,
'timeout_duration_ms': 1000,
'timeout_is_error': False,
'request_verify': True
}
SPAN_WARNING = u'<span class="label label-warning"></span>'
......@@ -27,12 +30,17 @@ def get_status_code(url, opts):
Open connection to the given url and check status code.
:param url: URL of the website to be checked
:param opts: Option to be checked
:return: (availibility, success, HTTP code)
"""
availibility, success, code = (False, False, None)
timeout_duration_seconds = get_opt(opts, 'timeout_duration_ms') / MS_IN_SECOND
verify = get_opt(opts, 'request_verify')
if not verify:
urllib3.disable_warnings()
try:
r = requests.get(url, timeout=timeout_duration_seconds)
r = requests.get(url, timeout=timeout_duration_seconds, verify=verify)
code = r.status_code
availibility = True
success = code == requests.codes.ok
......@@ -42,7 +50,7 @@ def get_status_code(url, opts):
except RequestException:
availibility = UNKNOWN
success = False
return (availibility, success, code)
return availibility, success, code
def user_enabled(inst, opt):
......@@ -50,7 +58,7 @@ def user_enabled(inst, opt):
Check whether the option is enabled.
:param inst: instance from content object init
:param url: Option to be checked
:param opt: Option to be checked
:return: True if enabled, False if disabled or non present
"""
return opt in inst.settings and inst.settings[opt]
......@@ -133,6 +141,10 @@ def content_object_init(instance):
"""
Pelican callback
"""
def get_markdown_formatted_msg():
filepath = os.path.join('content', instance.get_relative_source_path())
return "- [ ] {msg}: [{filepath}]({filepath})".format(msg=msg, filepath=filepath)
if instance._content is None:
return
if not user_enabled(instance, 'DEADLINK_VALIDATION'):
......@@ -173,15 +185,17 @@ def content_object_init(instance):
if not avail:
timeout_is_error = get_opt(opts, 'timeout_is_error')
if timeout_is_error:
warn('Dead link: %s (not available)', url)
msg = 'Dead link: {} (not available)'.format(url)
on_connection_error(anchor, opts)
else:
warn('Skipping: %s (not available)', url)
msg = 'Skipping: {} (not available)'.format(url)
warning(get_markdown_formatted_msg())
continue
elif not success:
if code >= 400 and code < 500:
warn('Dead link: %s (error code: %d)', url, code)
if 400 <= code < 500:
msg = 'Dead link: {} (error code: {})'.format(url, code)
warning(get_markdown_formatted_msg())
on_access_error(anchor, code, opts)
continue
else:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment