Skip to content

Nightly build is failing #1054

Description

@github-actions

The Nightly workflow is failing.
The tests failed.
Log:

Details
============================= 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']
  subset = var[0, 0]
             ^^^^^^^^^

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:
          arr.dtype = dt
            ^^^^^^^^^

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']
  temp_data = temp[:]
                ^^^^^^^

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:
          arr.dtype = dt
            ^^^^^^^^^

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:
          arr.dtype = dt
            ^^^^^^^^^

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:
          arr.dtype = dt
            ^^^^^^^^^

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:
          arr.dtype = dt
            ^^^^^^^^^

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:
          arr.dtype = dt
            ^^^^^^^^^

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']
  data = var[:]
           ^^^^^^

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:
          arr.dtype = dt
            ^^^^^^^^^

E

The documentation build failed.
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

  • Platform: linux; (Linux-6.17.0-1018-azure-x86_64-with-glibc2.39)
  • Python version: 3.14.6 (CPython)
  • Sphinx version: 8.2.3
  • Docutils version: 0.21.2
  • Jinja2 version: 3.1.6
  • Pygments version: 2.20.0

Last Messages

None.

Loaded Extensions

None.

Traceback

  File "/opt/hostedtoolcache/Python/3.14.6/x64/lib/python3.14/site-packages/sphinx/events.py", line 415, in emit
    raise ExtensionError(
    ...<4 lines>...
    ) from exc
sphinx.errors.ExtensionError: Handler <function generate_gallery_rst at 0x7fc8cee82350> for event 'builder-inited' threw an exception (exception: 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))

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions