import intake
import hvplot.pandas
import hvplot.xarray
import cook_inlet_catalogs as cic
import holoviews as hv

Moorings (NOAA): across Cook Inlet

Moorings from NOAA

Geese Island, Sitkalidak Island, Bear Cove, Anchorage, Kodiak Island, Alitak, Seldovia, Old Harbor, Boulder Point, Albatross Banks, Shelikof Strait

cat = intake.open_catalog(cic.utils.cat_path("moorings_noaa"))

Plot all datasets in catalog

dd, ddlabels = cic.utils.combine_datasets_for_map(cat)
dd.hvplot(**cat.metadata["map"]) * ddlabels.hvplot(**cat.metadata["maplabels"])

List available datasets in the catalog

dataset_ids = list(cat)
dataset_ids
['boulder-point',
 'geese-island-gps-tide-buoy',
 'noaa_nos_co_ops_9455500',
 'noaa_nos_co_ops_9455595',
 'noaa_nos_co_ops_9455920',
 'noaa_nos_co_ops_9457292',
 'noaa_nos_co_ops_9457804',
 'old-harbor-1',
 'sitkalidak-island-gps-tide-bu',
 'wmo_46077']

Select one dataset to investigate

try:
    dataset_id = dataset_ids[2]
except:
    dataset_id = dataset_ids[0]
print(dataset_id)

dd = cat[dataset_id].read()
dd
noaa_nos_co_ops_9455500
---------------------------------------------------------------------------
HTTPStatusError                           Traceback (most recent call last)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/erddapy/core/url.py:71, in _urlopen(url, auth, **kwargs)
     70 try:
---> 71     response.raise_for_status()
     72 except httpx.HTTPError as err:

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/httpx/_models.py:829, in Response.raise_for_status(self)
    828 message = message.format(self, error_type=error_type)
--> 829 raise HTTPStatusError(message, request=request, response=self)

HTTPStatusError: Server error '502 Bad Gateway' for url 'https://erddap.aoos.org/erddap/tabledap/noaa_nos_co_ops_9455500.csv?time%2Clatitude%2Clongitude%2Cz%2Csea_water_temperature%2Cwater_surface_above_station_datum%26time%3E%3D915148800.0'
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/502

The above exception was the direct cause of the following exception:

HTTPError                                 Traceback (most recent call last)
Cell In[5], line 7
      4     dataset_id = dataset_ids[0]
      5 print(dataset_id)
----> 7 dd = cat[dataset_id].read()
      8 dd

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/readers.py:121, in BaseReader.read(self, *args, **kwargs)
    119 kw.update(kwargs)
    120 args = kw.pop("args", ()) or args
--> 121 return self._read(*args, **kw)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake_erddap/erddap.py:187, in TableDAPReader._read(self, server, dataset_id, variables, mask_failed_qartod, dropna, cache_kwargs, open_kwargs, constraints, **kw)
    182         print(
    183             "If your filenames are too long, input only a few variables"
    184             "to return or input into cache kwargs `same_names=False`"
    185         )
    186 else:
--> 187     dataframe: pd.DataFrame = e.to_pandas(
    188         requests_kwargs={"timeout": 60}, **open_kwargs
    189     )
    190 if mask_failed_qartod:
    191     dataframe = self.run_mask_failed_qartod(dataframe)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/erddapy/erddapy.py:420, in ERDDAP.to_pandas(self, requests_kwargs, **kw)
    418 distinct = kw.pop("distinct", False)
    419 url = self.get_download_url(response=response, distinct=distinct)
--> 420 return to_pandas(
    421     url,
    422     requests_kwargs=requests_kwargs,
    423     pandas_kwargs=dict(**kw),
    424 )

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/erddapy/core/interfaces.py:37, in to_pandas(url, requests_kwargs, pandas_kwargs)
     26 def to_pandas(
     27     url: str,
     28     requests_kwargs: dict | None = None,
     29     pandas_kwargs: dict | None = None,
     30 ) -> pd.DataFrame:
     31     """Convert a URL to Pandas DataFrame.
     32 
     33     url: URL to request data from.
     34     requests_kwargs: arguments to be passed to urlopen method.
     35     **pandas_kwargs: kwargs to be passed to third-party library (pandas).
     36     """
---> 37     data = urlopen(url, requests_kwargs or {})
     38     try:
     39         return pd.read_csv(data, **(pandas_kwargs or {}))

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/erddapy/core/url.py:101, in urlopen(url, requests_kwargs)
     99 if requests_kwargs is None:
    100     requests_kwargs = {}
--> 101 data = _urlopen(url, **requests_kwargs)
    102 data.seek(0)
    103 return data

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/erddapy/core/url.py:74, in _urlopen(url, auth, **kwargs)
     72 except httpx.HTTPError as err:
     73     msg = f"{response.content.decode()}"
---> 74     raise httpx.HTTPError(msg) from err
     75 return io.BytesIO(response.content)

HTTPError: <html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.22.1</center>
</body>
</html>

Plot one dataset

keys = list(cat[dataset_id].metadata["plots"].keys())
print(keys)

plots = []
for key in keys:
    plot_kwargs = cat[dataset_id].metadata["plots"][key]
    if "clim" in plot_kwargs and isinstance(plot_kwargs["clim"], list):
        plot_kwargs["clim"] = tuple(plot_kwargs["clim"])
    if "dynamic" in plot_kwargs:
        plot_kwargs["dynamic"] = False
    plots.append(cat[dataset_id].ToHvPlot(**plot_kwargs).read())
hv.Layout(plots).cols(1)