============================= test session starts ==============================
platform linux -- Python 3.12.13, pytest-9.1.1, pluggy-1.6.0
rootdir: /home/runner/work/siphon/siphon
configfile: pyproject.toml
collected 291 items
tests/cdmr/test_cdmremote.py .... [ 1%]
tests/cdmr/test_cdmremotefeature.py ... [ 2%]
tests/cdmr/test_coveragedataset.py .. [ 3%]
tests/cdmr/test_dataset.py .......FF.........F.....FF.FF....FFFFFFFFFF [ 17%]
tests/cdmr/test_ncstream.py ..... [ 19%]
tests/cdmr/test_xarray.py F [ 19%]
tests/test_acis.py ..... [ 21%]
tests/test_catalog.py ....................................F [ 34%]
tests/test_catalog_access.py ................ [ 39%]
tests/test_http_util.py ...................... [ 47%]
tests/test_iastate.py ........ [ 50%]
tests/test_igra2.py .... [ 51%]
tests/test_metadata.py ........................................... [ 66%]
tests/test_ncss.py .................. [ 72%]
tests/test_ncss_dataset.py .......................................... [ 86%]
tests/test_ndbc.py ............ [ 91%]
tests/test_radarsever.py ................... [ 97%]
tests/test_wyoming.py ....... [100%]
=================================== FAILURES ===================================
_______________________________ test_compression _______________________________
@recorder.use_cassette('rap_compressed')
def test_compression():
"""Test that compressed returns are handled."""
ds = Dataset(get_fixed_url())
var = ds.variables['Temperature_isobaric']
tests/cdmr/test_dataset.py:75:
self = <siphon.cdmr.dataset.Variable object at 0x7f54f541a8a0>
ind = [0, 0, slice(None, None, None), slice(None, None, None)]
def __getitem__(self, ind):
"""Access the Variable's underlying data."""
if self._data is not None:
# For scalars, don't slice
return self._data if not self.shape else self._data[ind]
else:
ind, keep_dims = self._process_indices(ind)
# Get the data for our request. We assume we only get 1 message.
messages = self.dataset.cdmr.fetch_data(**{self.path: ind})
arr = messages[0]
# Get the proper byte ordering.
# We handle structures by looking for a structured dtype. By convention,
# this has a single field which is has a void type and the byte order encoded
# in its name. This is because we can't retrieve a useful byte order from
# any of these flexible types.
if arr.dtype == 'O' and hasattr(arr[0], 'dtype'):
byteorder = arr[0].dtype.byteorder
elif arr.dtype.fields and arr.dtype.names[0] in ('>', '<'):
byteorder = arr.dtype.names[0]
else:
byteorder = arr.dtype.byteorder
# Set the dtype on the returned data to our own dtype, with byte ordering set
# based on what was returned. This allows us to handle structures.
dt = self.dtype.newbyteorder(byteorder)
if arr.dtype == 'O':
if hasattr(arr[0], 'dtype') and arr[0].ndim > 0:
for i, subarray in enumerate(arr):
arr[i] = subarray.astype(dt)
else:
arr = arr.astype(dt)
# Don't reset dtype if we've already decoded to struct
elif arr.dtype.fields and arr.dtype.fields == dt.fields:
pass
else:
E DeprecationWarning: Setting the dtype on a NumPy array has been deprecated in NumPy 2.5.
E Instead of changing the dtype on an array x, create a new array with x.view(new_dtype)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/siphon/cdmr/dataset.py:209: DeprecationWarning
_______________________________ test_tds5_basic ________________________________
@recorder.use_cassette('tds5_basic')
def test_tds5_basic():
"""Test basic handling of getting data from TDS 5."""
ds = Dataset('http://localhost:8080/thredds/cdmremote/nc4/tst/nc4_sfc_pres_temp.nc')
temp = ds.variables['temperature']
tests/cdmr/test_dataset.py:85:
self = <siphon.cdmr.dataset.Variable object at 0x7f54f54ac9b0>
ind = [slice(None, None, None), slice(None, None, None)]
def __getitem__(self, ind):
"""Access the Variable's underlying data."""
if self._data is not None:
# For scalars, don't slice
return self._data if not self.shape else self._data[ind]
else:
ind, keep_dims = self._process_indices(ind)
# Get the data for our request. We assume we only get 1 message.
messages = self.dataset.cdmr.fetch_data(**{self.path: ind})
arr = messages[0]
# Get the proper byte ordering.
# We handle structures by looking for a structured dtype. By convention,
# this has a single field which is has a void type and the byte order encoded
# in its name. This is because we can't retrieve a useful byte order from
# any of these flexible types.
if arr.dtype == 'O' and hasattr(arr[0], 'dtype'):
byteorder = arr[0].dtype.byteorder
elif arr.dtype.fields and arr.dtype.names[0] in ('>', '<'):
byteorder = arr.dtype.names[0]
else:
byteorder = arr.dtype.byteorder
# Set the dtype on the returned data to our own dtype, with byte ordering set
# based on what was returned. This allows us to handle structures.
dt = self.dtype.newbyteorder(byteorder)
if arr.dtype == 'O':
if hasattr(arr[0], 'dtype') and arr[0].ndim > 0:
for i, subarray in enumerate(arr):
arr[i] = subarray.astype(dt)
else:
arr = arr.astype(dt)
# Don't reset dtype if we've already decoded to struct
elif arr.dtype.fields and arr.dtype.fields == dt.fields:
pass
else:
E DeprecationWarning: Setting the dtype on a NumPy array has been deprecated in NumPy 2.5.
E Instead of changing the dtype on an array x, create a new array with x.view(new_dtype)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/siphon/cdmr/dataset.py:209: DeprecationWarning
__________________________________ test_enum ___________________________________
@recorder.use_cassette('nc4_enum')
def test_enum():
"""Test reading enumerated types."""
ds = Dataset('http://localhost:8080/thredds/cdmremote/nc4/tst/test_enum_type.nc')
var = ds.variables['primary_cloud'][:]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/cdmr/test_dataset.py:189:
self = <siphon.cdmr.dataset.Variable object at 0x7f54f54aecf0>
ind = [slice(None, None, None)]
def __getitem__(self, ind):
"""Access the Variable's underlying data."""
if self._data is not None:
# For scalars, don't slice
return self._data if not self.shape else self._data[ind]
else:
ind, keep_dims = self._process_indices(ind)
# Get the data for our request. We assume we only get 1 message.
messages = self.dataset.cdmr.fetch_data(**{self.path: ind})
arr = messages[0]
# Get the proper byte ordering.
# We handle structures by looking for a structured dtype. By convention,
# this has a single field which is has a void type and the byte order encoded
# in its name. This is because we can't retrieve a useful byte order from
# any of these flexible types.
if arr.dtype == 'O' and hasattr(arr[0], 'dtype'):
byteorder = arr[0].dtype.byteorder
elif arr.dtype.fields and arr.dtype.names[0] in ('>', '<'):
byteorder = arr.dtype.names[0]
else:
byteorder = arr.dtype.byteorder
# Set the dtype on the returned data to our own dtype, with byte ordering set
# based on what was returned. This allows us to handle structures.
dt = self.dtype.newbyteorder(byteorder)
if arr.dtype == 'O':
if hasattr(arr[0], 'dtype') and arr[0].ndim > 0:
for i, subarray in enumerate(arr):
arr[i] = subarray.astype(dt)
else:
arr = arr.astype(dt)
# Don't reset dtype if we've already decoded to struct
elif arr.dtype.fields and arr.dtype.fields == dt.fields:
pass
else:
E DeprecationWarning: Setting the dtype on a NumPy array has been deprecated in NumPy 2.5.
E Instead of changing the dtype on an array x, create a new array with x.view(new_dtype)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/siphon/cdmr/dataset.py:209: DeprecationWarning
_________________________________ test_struct __________________________________
@recorder.use_cassette('nc4_compound_ref')
def test_struct():
"""Test reading a structured variable."""
ds = Dataset('http://localhost:8080/thredds/cdmremote/nc4/compound/ref_tst_compounds.nc4')
var = ds.variables['obs'][:]
tests/cdmr/test_dataset.py:260:
self = <siphon.cdmr.dataset.Variable object at 0x7f54f54c3290>
ind = [slice(None, None, None)]
def __getitem__(self, ind):
"""Access the Variable's underlying data."""
if self._data is not None:
# For scalars, don't slice
return self._data if not self.shape else self._data[ind]
else:
ind, keep_dims = self._process_indices(ind)
# Get the data for our request. We assume we only get 1 message.
messages = self.dataset.cdmr.fetch_data(**{self.path: ind})
arr = messages[0]
# Get the proper byte ordering.
# We handle structures by looking for a structured dtype. By convention,
# this has a single field which is has a void type and the byte order encoded
# in its name. This is because we can't retrieve a useful byte order from
# any of these flexible types.
if arr.dtype == 'O' and hasattr(arr[0], 'dtype'):
byteorder = arr[0].dtype.byteorder
elif arr.dtype.fields and arr.dtype.names[0] in ('>', '<'):
byteorder = arr.dtype.names[0]
else:
byteorder = arr.dtype.byteorder
# Set the dtype on the returned data to our own dtype, with byte ordering set
# based on what was returned. This allows us to handle structures.
dt = self.dtype.newbyteorder(byteorder)
if arr.dtype == 'O':
if hasattr(arr[0], 'dtype') and arr[0].ndim > 0:
for i, subarray in enumerate(arr):
arr[i] = subarray.astype(dt)
else:
arr = arr.astype(dt)
# Don't reset dtype if we've already decoded to struct
elif arr.dtype.fields and arr.dtype.fields == dt.fields:
pass
else:
E DeprecationWarning: Setting the dtype on a NumPy array has been deprecated in NumPy 2.5.
E Instead of changing the dtype on an array x, create a new array with x.view(new_dtype)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/siphon/cdmr/dataset.py:209: DeprecationWarning
_____________________________ test_struct_deflate ______________________________
@recorder.use_cassette('nc4_compound_ref_deflate')
def test_struct_deflate():
"""Test reading a structured variable with compression turned on."""
ds = Dataset('http://localhost:8080/thredds/cdmremote/nc4/compound/ref_tst_compounds.nc4')
ds.cdmr.deflate = 4
assert ds.variables['obs'][:] is not None
tests/cdmr/test_dataset.py:277:
self = <siphon.cdmr.dataset.Variable object at 0x7f54f54ad910>
ind = [slice(None, None, None)]
def __getitem__(self, ind):
"""Access the Variable's underlying data."""
if self._data is not None:
# For scalars, don't slice
return self._data if not self.shape else self._data[ind]
else:
ind, keep_dims = self._process_indices(ind)
# Get the data for our request. We assume we only get 1 message.
messages = self.dataset.cdmr.fetch_data(**{self.path: ind})
arr = messages[0]
# Get the proper byte ordering.
# We handle structures by looking for a structured dtype. By convention,
# this has a single field which is has a void type and the byte order encoded
# in its name. This is because we can't retrieve a useful byte order from
# any of these flexible types.
if arr.dtype == 'O' and hasattr(arr[0], 'dtype'):
byteorder = arr[0].dtype.byteorder
elif arr.dtype.fields and arr.dtype.names[0] in ('>', '<'):
byteorder = arr.dtype.names[0]
else:
byteorder = arr.dtype.byteorder
# Set the dtype on the returned data to our own dtype, with byte ordering set
# based on what was returned. This allows us to handle structures.
dt = self.dtype.newbyteorder(byteorder)
if arr.dtype == 'O':
if hasattr(arr[0], 'dtype') and arr[0].ndim > 0:
for i, subarray in enumerate(arr):
arr[i] = subarray.astype(dt)
else:
arr = arr.astype(dt)
# Don't reset dtype if we've already decoded to struct
elif arr.dtype.fields and arr.dtype.fields == dt.fields:
pass
else:
E DeprecationWarning: Setting the dtype on a NumPy array has been deprecated in NumPy 2.5.
E Instead of changing the dtype on an array x, create a new array with x.view(new_dtype)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/siphon/cdmr/dataset.py:209: DeprecationWarning
__________________________________ test_char ___________________________________
@recorder.use_cassette('nc4_chararray')
def test_char():
"""Test processing arrays of characters."""
ds = Dataset('http://localhost:8080/thredds/cdmremote/nc4/chararr.nc')
dat = ds.variables['ca'][:]
tests/cdmr/test_dataset.py:299:
self = <siphon.cdmr.dataset.Variable object at 0x7f54f54c35c0>
ind = [slice(None, None, None)]
def __getitem__(self, ind):
"""Access the Variable's underlying data."""
if self._data is not None:
# For scalars, don't slice
return self._data if not self.shape else self._data[ind]
else:
ind, keep_dims = self._process_indices(ind)
# Get the data for our request. We assume we only get 1 message.
messages = self.dataset.cdmr.fetch_data(**{self.path: ind})
arr = messages[0]
# Get the proper byte ordering.
# We handle structures by looking for a structured dtype. By convention,
# this has a single field which is has a void type and the byte order encoded
# in its name. This is because we can't retrieve a useful byte order from
# any of these flexible types.
if arr.dtype == 'O' and hasattr(arr[0], 'dtype'):
byteorder = arr[0].dtype.byteorder
elif arr.dtype.fields and arr.dtype.names[0] in ('>', '<'):
byteorder = arr.dtype.names[0]
else:
byteorder = arr.dtype.byteorder
# Set the dtype on the returned data to our own dtype, with byte ordering set
# based on what was returned. This allows us to handle structures.
dt = self.dtype.newbyteorder(byteorder)
if arr.dtype == 'O':
if hasattr(arr[0], 'dtype') and arr[0].ndim > 0:
for i, subarray in enumerate(arr):
arr[i] = subarray.astype(dt)
else:
arr = arr.astype(dt)
# Don't reset dtype if we've already decoded to struct
elif arr.dtype.fields and arr.dtype.fields == dt.fields:
pass
else:
E DeprecationWarning: Setting the dtype on a NumPy array has been deprecated in NumPy 2.5.
E Instead of changing the dtype on an array x, create a new array with x.view(new_dtype)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/siphon/cdmr/dataset.py:209: DeprecationWarning
_________________________________ test_scalar __________________________________
@recorder.use_cassette('nc4_nested_structure_scalar')
def test_scalar():
"""Test handling a scalar variable."""
ds = Dataset('http://localhost:8080/thredds/cdmremote/nc4/testNestedStructure.nc')
var = ds.variables['x']
tests/cdmr/test_dataset.py:309:
self = <siphon.cdmr.dataset.Variable object at 0x7f54f54e0950>
ind = [slice(None, None, None)]
def __getitem__(self, ind):
"""Access the Variable's underlying data."""
if self._data is not None:
# For scalars, don't slice
return self._data if not self.shape else self._data[ind]
else:
ind, keep_dims = self._process_indices(ind)
# Get the data for our request. We assume we only get 1 message.
messages = self.dataset.cdmr.fetch_data(**{self.path: ind})
arr = messages[0]
# Get the proper byte ordering.
# We handle structures by looking for a structured dtype. By convention,
# this has a single field which is has a void type and the byte order encoded
# in its name. This is because we can't retrieve a useful byte order from
# any of these flexible types.
if arr.dtype == 'O' and hasattr(arr[0], 'dtype'):
byteorder = arr[0].dtype.byteorder
elif arr.dtype.fields and arr.dtype.names[0] in ('>', '<'):
byteorder = arr.dtype.names[0]
else:
byteorder = arr.dtype.byteorder
# Set the dtype on the returned data to our own dtype, with byte ordering set
# based on what was returned. This allows us to handle structures.
dt = self.dtype.newbyteorder(byteorder)
if arr.dtype == 'O':
if hasattr(arr[0], 'dtype') and arr[0].ndim > 0:
for i, subarray in enumerate(arr):
arr[i] = subarray.astype(dt)
else:
arr = arr.astype(dt)
# Don't reset dtype if we've already decoded to struct
elif arr.dtype.fields and arr.dtype.fields == dt.fields:
pass
else:
E
The Nightly workflow is failing.
The tests failed.
Log:
Details
Log:
Details
sphinx-build -b html -d build/doctrees -W . build/html �[01mRunning Sphinx v8.2.3�[39;49;00m �[01mloading translations [en]... �[39;49;00mdone �[01mmaking output directory... �[39;49;00mdone Using Sphinx-Gallery to convert rst text blocks to markdown for .ipynb files. Converting `source_suffix = '.rst'` to `source_suffix = {'.rst': 'restructuredtext'}`. [autosummary] generating autosummary for: CONTRIBUTING.md, api/catalog.rst, api/http_util.rst, api/index.rst, api/metadata.rst, api/ncss.rst, api/ncssdataset.rst, api/radarserver.rst, api/simplewebservice.rst, citing.rst, developerguide.rst, index.rst, installguide.rst loading intersphinx inventory 'python' from https://docs.python.org/3/objects.inv ... loading intersphinx inventory 'numpy' from https://numpy.org/doc/stable/objects.inv ... loading intersphinx inventory 'matplotlib' from https://matplotlib.org/stable/objects.inv ... loading intersphinx inventory 'requests' from https://requests.kennethreitz.org/en/latest/objects.inv ... loading intersphinx inventory 'pandas' from https://pandas.pydata.org/docs/objects.inv ... �[97mgenerating gallery...�[39;49;00m �[2K�[01mgenerating gallery for examples... �[39;49;00m[ 50%] �[32mBasic_Usage.py�[39;49;00m �[2K�[01mgenerating gallery for examples... �[39;49;00m[100%] �[32mRadar_Server_Level_3.py�[39;49;00m Ignoring fixed x limits to fulfill fixed data aspect with adjustable data limits.�[2K�[01mgenerating gallery for examples/acis... �[39;49;00m[ 50%] �[32mBasic_Overview.py�[39;49;00m
�[2K�[01mgenerating gallery for examples/acis... �[39;49;00m[100%] �[32mMapping_Example.py�[39;49;00m
/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/cartopy/io/init.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/10m_physical/ne_10m_land.zip
warnings.warn(f'Downloading: {url}', DownloadWarning)
/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/cartopy/io/init.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/10m_physical/ne_10m_ocean.zip
warnings.warn(f'Downloading: {url}', DownloadWarning)
/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/cartopy/io/init.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/10m_physical/ne_10m_lakes.zip
warnings.warn(f'Downloading: {url}', DownloadWarning)
/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/cartopy/io/init.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/10m_cultural/ne_10m_admin_1_states_provinces_lakes.zip
warnings.warn(f'Downloading: {url}', DownloadWarning)
/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/cartopy/io/init.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/10m_cultural/ne_10m_admin_0_boundary_lines_land.zip
warnings.warn(f'Downloading: {url}', DownloadWarning)
/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/cartopy/io/init.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/110m_physical/ne_110m_coastline.zip
warnings.warn(f'Downloading: {url}', DownloadWarning)
�[2K�[01mgenerating gallery for examples/ncss... �[39;49;00m[ 33%] �[32mNCSS_Timeseries_Examples.py�[39;49;00m
�[2K�[01mgenerating gallery for examples/ncss... �[39;49;00m[ 67%] �[32mNCSS_Example.py�[39;49;00m
�[2K�[01mgenerating gallery for examples/ncss... �[39;49;00m[100%] �[32mNCSS_Cartopy_Example.py�[39;49;00m
/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/cartopy/io/init.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_cultural/ne_50m_admin_1_states_provinces_lakes.zip
warnings.warn(f'Downloading: {url}', DownloadWarning)
�[2K�[01mgenerating gallery for examples/ndbc... �[39;49;00m[ 33%] �[32mbuoy_type_request.py�[39;49;00m
�[2K�[01mgenerating gallery for examples/ndbc... �[39;49;00m[ 67%] �[32mbuoy_met_request.py�[39;49;00m
�[2K�[01mgenerating gallery for examples/ndbc... �[39;49;00m[100%] �[32mlatest_request.py�[39;49;00m
/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/cartopy/io/init.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_physical/ne_50m_ocean.zip
warnings.warn(f'Downloading: {url}', DownloadWarning)
/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/cartopy/io/init.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_physical/ne_50m_land.zip
warnings.warn(f'Downloading: {url}', DownloadWarning)
/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/cartopy/io/init.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_physical/ne_50m_coastline.zip
warnings.warn(f'Downloading: {url}', DownloadWarning)
�[2K�[01mgenerating gallery for examples/upperair... �[39;49;00m[ 50%] �[32mWyoming_Request.py�[39;49;00m
�[91mWARNING:
�[01m�[91m../examples/upperair/Wyoming_Request.py�[39;49;00m�[39;49;00m unexpectedly failed to execute correctly:
�[91m Traceback (most recent call last):
File "/home/runner/work/siphon/siphon/examples/upperair/Wyoming_Request.py", line 25, in
df = WyomingUpperAir.request_data(date, station)
File "/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/siphon/simplewebservice/wyoming.py", line 58, in request_data
df = endpoint._get_data(time, site_id, recalc=recalc)
File "/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/siphon/simplewebservice/wyoming.py", line 81, in _get_data
raw_data = self._get_data_raw(time, site_id, recalc=recalc)
File "/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/siphon/simplewebservice/wyoming.py", line 164, in _get_data_raw
resp = self.get_path(path)
File "/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/siphon/http_util.py", line 453, in get_path
return self.get(self.url_path(path), query)
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/siphon/http_util.py", line 488, in get
raise requests.HTTPError(f'Error accessing {resp.request.url}\n'
f'Server Error ({resp.status_code: d}: {text})')
requests.exceptions.HTTPError: Error accessing https://weather.arcc.uwyo.edu/cgi-bin/sounding/?region=naconf&TYPE=TEXT%3ALIST&YEAR=2024&MONTH=09&FROM=2700&TO=2700&STNM=GSO
Server Error ( 404: Not Found)
�[39;49;00m�[39;49;00m
�[91mExtension error (sphinx_gallery.gen_gallery)!�[39;49;00m
Versions
Last Messages
None.
Loaded Extensions
None.
Traceback
The full traceback has been saved in:
/tmp/sphinx-err-r_1v__ka.log
To report this error to the developers, please open an issue at https://github.com/sphinx-doc/sphinx/issues/. Thanks!
Please also report this if it was a user error, so that a better error message can be provided next time.
make: *** [Makefile:55: html] Error 2
Linkchecker output:
Details