.checkignore
.codeclimate.yml
.codecov.yml
.coveragerc
.gitattributes
.github/CODEOWNERS
.github/ISSUE_TEMPLATE/bug_report.md
.github/ISSUE_TEMPLATE/config.yml
.github/ISSUE_TEMPLATE/documentation.md
.github/ISSUE_TEMPLATE/feature_request.md
.github/dependabot.yml
.github/pull_request_template.md
.github/workflows/assign-milestone.yml
.github/workflows/code-analysis.yml
.github/workflows/docs-conda.yml
.github/workflows/docs.yml
.github/workflows/draft-release.yml
.github/workflows/linting.yml
.github/workflows/release.yml
.github/workflows/tests-conda.yml
.github/workflows/tests-pypi.yml
.gitignore
.mailmap
.prospector.yaml
.stickler.yml
AUTHORS.txt
CLA.md
CONTRIBUTING.md
LICENSE
MANIFEST.in
README
README.rst
SUPPORT.md
TODO.md
ci/Minimum
ci/Prerelease
ci/doc_requirements.txt
ci/extra_requirements.txt
ci/gen_versions_json.py
ci/linting_requirements.txt
ci/requirements.txt
ci/test_requirements.txt
docs/CONTRIBUTING.md
docs/Makefile
docs/_static/siphon_150x150.png
docs/_static/siphon_150x150_white_bg.png
docs/_static/tds-logo.png
docs/_static/theme_override.css
docs/_templates/breadcrumbs.html
docs/_templates/footer.html
docs/api/catalog.rst
docs/api/http_util.rst
docs/api/index.rst
docs/api/metadata.rst
docs/api/ncss.rst
docs/api/ncssdataset.rst
docs/api/radarserver.rst
docs/api/simplewebservice.rst
docs/citing.rst
docs/conf.py
docs/developerguide.rst
docs/index.rst
docs/installguide.rst
docs/make.bat
docs/requirements.txt
environment.yml
examples/Basic_Usage.py
examples/README.txt
examples/Radar_Server_Level_3.py
examples/acis/Basic_Overview.py
examples/acis/Mapping_Example.py
examples/acis/readme.txt
examples/ncss/NCSS_Cartopy_Example.py
examples/ncss/NCSS_Example.py
examples/ncss/NCSS_Timeseries_Examples.py
examples/ncss/README.txt
examples/ndbc/README.txt
examples/ndbc/buoy_met_request.py
examples/ndbc/buoy_type_request.py
examples/ndbc/latest_request.py
examples/upperair/IGRA2_Request.py
examples/upperair/README.txt
examples/upperair/Wyoming_Request.py
setup.cfg
setup.py
src/siphon/__init__.py
src/siphon/_tools.py
src/siphon/_version.py
src/siphon/catalog.py
src/siphon/cdmr/__init__.py
src/siphon/cdmr/cdmremote.py
src/siphon/cdmr/cdmremotefeature.py
src/siphon/cdmr/cdmrfeature_pb2.py
src/siphon/cdmr/coveragedataset.py
src/siphon/cdmr/dataset.py
src/siphon/cdmr/ncStream_pb2.py
src/siphon/cdmr/ncstream.py
src/siphon/cdmr/resources.md
src/siphon/cdmr/xarray_support.py
src/siphon/http_util.py
src/siphon/metadata.py
src/siphon/ncss.py
src/siphon/ncss_dataset.py
src/siphon/radarserver.py
src/siphon/simplewebservice/__init__.py
src/siphon/simplewebservice/acis.py
src/siphon/simplewebservice/iastate.py
src/siphon/simplewebservice/igra2.py
src/siphon/simplewebservice/ndbc.py
src/siphon/simplewebservice/wyoming.py
src/siphon/testing.py
talks/AMS-2016_Siphon_Poster_Final.pdf
tests/cdmr/fixtures/cdmr_capabilities
tests/cdmr/fixtures/cdmr_cdl
tests/cdmr/fixtures/cdmr_enable_compression
tests/cdmr/fixtures/cdmr_ncml
tests/cdmr/fixtures/cdmrf_coords
tests/cdmr/fixtures/cdmrf_data
tests/cdmr/fixtures/cdmrf_feature_type
tests/cdmr/fixtures/cdmrf_header
tests/cdmr/fixtures/hrrr_cdmremotefeature
tests/cdmr/fixtures/latest_rap_catalog
tests/cdmr/fixtures/latest_rap_ncstream_header
tests/cdmr/fixtures/nc4_chararray
tests/cdmr/fixtures/nc4_compound_ref
tests/cdmr/fixtures/nc4_compound_ref_deflate
tests/cdmr/fixtures/nc4_enum
tests/cdmr/fixtures/nc4_groups
tests/cdmr/fixtures/nc4_nested_structure_scalar
tests/cdmr/fixtures/nc4_opaque
tests/cdmr/fixtures/nc4_strings
tests/cdmr/fixtures/nc4_unsigned
tests/cdmr/fixtures/nc4_vlen
tests/cdmr/fixtures/rap_compressed
tests/cdmr/fixtures/rap_ncstream_all_indices
tests/cdmr/fixtures/rap_ncstream_decimation
tests/cdmr/fixtures/rap_ncstream_ellipsis_middle
tests/cdmr/fixtures/rap_ncstream_first_index
tests/cdmr/fixtures/rap_ncstream_header
tests/cdmr/fixtures/rap_ncstream_last_index
tests/cdmr/fixtures/rap_ncstream_negative_index
tests/cdmr/fixtures/rap_ncstream_negative_slice
tests/cdmr/fixtures/rap_ncstream_slice_beyond_end
tests/cdmr/fixtures/rap_ncstream_slice_to_end
tests/cdmr/fixtures/rap_ncstream_slices
tests/cdmr/fixtures/tds5_basic
tests/cdmr/fixtures/tds5_compound_ref
tests/cdmr/fixtures/tds5_empty_att
tests/cdmr/fixtures/tds5_nested_structure_scalar
tests/cdmr/fixtures/tds5_opaque
tests/cdmr/fixtures/tds5_strings
tests/cdmr/fixtures/tds5_unsigned
tests/cdmr/fixtures/tds5_vlen
tests/cdmr/fixtures/tds5_vlen_slicing
tests/cdmr/test_cdmremote.py
tests/cdmr/test_cdmremotefeature.py
tests/cdmr/test_coveragedataset.py
tests/cdmr/test_dataset.py
tests/cdmr/test_ncstream.py
tests/cdmr/test_xarray.py
tests/fixtures/GFS_Global_0p5_Grid_Dataset_xml
tests/fixtures/GFS_TDS5
tests/fixtures/Surface_Synoptic_Station_Dataset_xml
tests/fixtures/acis_general
tests/fixtures/acis_griddata
tests/fixtures/acis_multistndata
tests/fixtures/acis_request
tests/fixtures/acis_stndata
tests/fixtures/cat_access_elements
tests/fixtures/cat_non_standard_context_path
tests/fixtures/cat_only_http
tests/fixtures/cat_to_cdmr
tests/fixtures/cat_to_open
tests/fixtures/cat_to_opendap
tests/fixtures/cat_to_subset
tests/fixtures/follow_cat
tests/fixtures/fronts_cat_open
tests/fixtures/gfs-error-no-header
tests/fixtures/gfs-metadata-map
tests/fixtures/gfs-metadata-map-bad
tests/fixtures/html_then_xml_catalog
tests/fixtures/iastate_all_data_all_levels
tests/fixtures/iastate_all_data_single_pressure
tests/fixtures/iastate_high_alt_sounding
tests/fixtures/iastate_no_data
tests/fixtures/iastate_no_future_data
tests/fixtures/iastate_no_future_data_with_pressure
tests/fixtures/iastate_sounding
tests/fixtures/iastate_sounding_with_nans
tests/fixtures/igra2_derived
tests/fixtures/igra2_nodata
tests/fixtures/igra2_sounding
tests/fixtures/latest_rap_catalog
tests/fixtures/latest_resolver_on_latest_dataset
tests/fixtures/ncei_cat_to_subset
tests/fixtures/ncei_embedded_metadata
tests/fixtures/ncss_gfs_csv_point
tests/fixtures/ncss_gfs_netcdf4_point
tests/fixtures/ncss_gfs_netcdf_point
tests/fixtures/ncss_gfs_vertical_level
tests/fixtures/ncss_gfs_xml_point
tests/fixtures/ncss_test_metadata
tests/fixtures/ndbc_buoy_data_types
tests/fixtures/ndbc_latest
tests/fixtures/ndbc_realtime_cwind
tests/fixtures/ndbc_realtime_dart
tests/fixtures/ndbc_realtime_drift
tests/fixtures/ndbc_realtime_ocean
tests/fixtures/ndbc_realtime_rain
tests/fixtures/ndbc_realtime_spec
tests/fixtures/ndbc_realtime_srad
tests/fixtures/ndbc_realtime_supl
tests/fixtures/ndbc_realtime_txt
tests/fixtures/nhc_database
tests/fixtures/nhc_no_data
tests/fixtures/nhc_storm_archive
tests/fixtures/nhc_storm_current_year
tests/fixtures/point_dataset_cat
tests/fixtures/point_feature_dataset_xml
tests/fixtures/radar_dataset_cat
tests/fixtures/radarserver_ds_denied
tests/fixtures/radarserver_toplevel_denied
tests/fixtures/rsmas_ramadda
tests/fixtures/rsmas_ramadda_datasets
tests/fixtures/spc_hail_after_2011_archive
tests/fixtures/spc_hail_archive
tests/fixtures/spc_hail_future
tests/fixtures/spc_torn_after_2011_archive
tests/fixtures/spc_torn_archive
tests/fixtures/spc_torn_future
tests/fixtures/spc_wind_after_2011_archive
tests/fixtures/spc_wind_archive
tests/fixtures/spc_wind_future
tests/fixtures/tds50_catalogref_follow
tests/fixtures/thredds-test-default-5-0
tests/fixtures/thredds-test-latest-gfs-0p5
tests/fixtures/thredds-test-toplevel-catalog
tests/fixtures/thredds_radarserver_level2_single
tests/fixtures/thredds_radarserver_level3_bad
tests/fixtures/thredds_radarserver_level3_catalog
tests/fixtures/thredds_radarserver_level3_good
tests/fixtures/thredds_radarserver_level3_metadata
tests/fixtures/thredds_radarserver_metadata
tests/fixtures/thredds_radarserver_toplevel
tests/fixtures/top_level_20km_rap_catalog
tests/fixtures/top_level_cat
tests/fixtures/top_thredds_catalog
tests/fixtures/wyoming_high_alt_sounding
tests/fixtures/wyoming_no_data
tests/fixtures/wyoming_sounding
tests/fixtures/wyoming_sounding_no_station
tests/test_acis.py
tests/test_catalog.py
tests/test_catalog_access.py
tests/test_http_util.py
tests/test_iastate.py
tests/test_igra2.py
tests/test_metadata.py
tests/test_ncss.py
tests/test_ncss_dataset.py
tests/test_ndbc.py
tests/test_radarsever.py
tests/test_wyoming.py
<<<<<< network
# path=coverage.xml
<<<<<< EOF
# path=tests/cdmr/test_coveragedataset.py
# Copyright (c) 2016 Siphon Contributors.
# Distributed under the terms of the BSD 3-Clause License.
# SPDX-License-Identifier: BSD-3-Clause
"""Test Coverage Dataset."""
import pytest
from siphon.cdmr.coveragedataset import CoverageDataset
from siphon.testing import get_recorder
recorder = get_recorder(__file__)
@pytest.mark.filterwarnings('ignore: CoverageDataset')
@recorder.use_cassette('hrrr_cdmremotefeature')
def test_simple_cdmremotefeature():
"""Smoke test for CDMRemoteFeature."""
cd = CoverageDataset('http://localhost:8080/thredds/cdmrfeature/grid/'
'test/HRRR_CONUS_2p5km_20160309_1600.grib2')
assert cd.grids
@pytest.mark.filterwarnings('ignore: CoverageDataset')
@recorder.use_cassette('hrrr_cdmremotefeature')
def test_simple_cdmremotefeature_str():
"""Smoke test for converting CoverageDataset to str."""
cd = CoverageDataset('http://localhost:8080/thredds/cdmrfeature/grid/'
'test/HRRR_CONUS_2p5km_20160309_1600.grib2')
assert str(cd)
<<<<<< EOF
# path=src/siphon/cdmr/coveragedataset.py
# Copyright (c) 2016 Siphon Contributors.
# Distributed under the terms of the BSD 3-Clause License.
# SPDX-License-Identifier: BSD-3-Clause
"""Provide access to a TDS Coverage Dataset."""
from collections import OrderedDict
import logging
import warnings
from .cdmremotefeature import CDMRemoteFeature
from .dataset import AttributeContainer
logging.basicConfig(level=logging.WARNING)
log = logging.getLogger(__name__)
def reindent_lines(new_leader, source):
"""Re-indent string lines."""
return new_leader + ('\n' + new_leader).join(source.split('\n'))
class CoverageDataset(AttributeContainer):
"""Wrap dataset access using CDMRemoteFeature and Coverages.
This is still experimental.
"""
def __init__(self, url):
"""Initialize CoverageDataset from a url pointing to CDMRemoteFeature endpoint."""
super().__init__()
warnings.warn('CoverageDataset is in early development, unsupported, and API may '
'change at any time.')
self.cdmrf = CDMRemoteFeature(url)
self.name = 'Unnamed'
self.lon_lat_domain = None
self.proj_domain = None
self.date_range = None
self.type = None
self.axes = OrderedDict()
self.coord_systems = OrderedDict()
self.grids = OrderedDict()
self.transforms = OrderedDict()
self._read_header()
def _read_header(self):
"""Get the needed header information to initialize dataset."""
self._header = self.cdmrf.fetch_header()
self.load_from_stream(self._header)
def load_from_stream(self, header):
"""Populate the CoverageDataset from the protobuf information."""
self._unpack_attrs(header.atts)
self.name = header.name
self.lon_lat_domain = header.latlonRect
self.proj_domain = header.projRect
self.date_range = header.dateRange
self.type = header.coverageType
for sys in header.coordSys:
self.coord_systems[sys.name] = sys
for trans in header.coordTransforms:
self.transforms[trans.name] = trans
for ax in header.coordAxes:
self.axes[ax.name] = ax
for cov in header.grids:
self.grids[cov.name] = cov
def __str__(self):
"""Create a string representation of CoverageDataset."""
print_groups = []
if self.name:
print_groups.append(self.name + ' (' + str(self.type) + ')')
print_groups.append(f'Lon/Lat Domain: {self.lon_lat_domain}')
print_groups.append(f'Projected Domain: {self.proj_domain}')
print_groups.append(f'Date Range: {self.date_range}')
indent = ' ' * 4
if self.axes:
print_groups.append('Axes:')
for ax in self.axes.values():
print_groups.append(reindent_lines(indent, str(ax)))
if self.coord_systems:
print_groups.append('Coordinate Systems:')
for sys in self.coord_systems.values():
print_groups.append(reindent_lines(indent, str(sys)))
if self.transforms:
print_groups.append('Coordinate Transforms:')
for trans in self.transforms.values():
print_groups.append(reindent_lines(indent, str(trans)))
if self.grids:
print_groups.append('Grids:')
for grid in self.grids.values():
print_groups.append(reindent_lines(indent, str(grid)))
if self.ncattrs():
print_groups.append('Attributes:')
for att in self.ncattrs():
print_groups.append(f'{indent}{att}: {getattr(self, att)}')
return '\n'.join(print_groups)
<<<<<< EOF
# path=tests/cdmr/__pycache__/test_coveragedataset.cpython-39-pytest-6.2.5.pyc
a
�I�a � @ s� d Z ddlZddlm mZ ddlZddlm Z ddl
mZ ee�Z
ej�d�e
�d�dd� ��Zej�d�e
�d�d d
� ��ZdS )zTest Coverage Dataset.� N)�CoverageDataset)�get_recorderzignore: CoverageDatasetZhrrr_cdmremotefeaturec C s\ t d�} | j}|sTddt�� v s*t�| �r4t�| �ndt�|�d� }tt�|���d}dS )z Smoke test for CDMRemoteFeature.�Xhttp://localhost:8080/thredds/cdmrfeature/grid/test/HRRR_CONUS_2p5km_20160309_1600.grib2z)assert %(py2)s
{%(py2)s = %(py0)s.grids
}�cd)�py0�py2N) r �grids�@py_builtins�locals�
@pytest_ar�_should_repr_global_name� _saferepr�AssertionError�_format_explanation)r �@py_assert1�@py_format3� r �C/Users/runner/work/siphon/siphon/tests/cdmr/test_coveragedataset.py�test_simple_cdmremotefeature s r c C s� t d�} t| �}|sxddt�� v s,t�t�r6t�t�nddt�� v sNt�| �rXt�| �ndt�|�d� }tt�|���d}dS )z1Smoke test for converting CoverageDataset to str.r z,assert %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}�strr )r �py1�py3N) r r r r
r r r
r r )r �@py_assert2�@py_format4r r r � test_simple_cdmremotefeature_str s r )�__doc__�builtinsr �_pytest.assertion.rewrite� assertion�rewriter �pytestZsiphon.cdmr.coveragedatasetr �siphon.testingr �__file__�recorder�mark�filterwarnings�use_cassetter r r r r r � s "
<<<<<< EOF
# path=build/lib/siphon/cdmr/coveragedataset.py
# Copyright (c) 2016 Siphon Contributors.
# Distributed under the terms of the BSD 3-Clause License.
# SPDX-License-Identifier: BSD-3-Clause
"""Provide access to a TDS Coverage Dataset."""
from collections import OrderedDict
import logging
import warnings
from .cdmremotefeature import CDMRemoteFeature
from .dataset import AttributeContainer
logging.basicConfig(level=logging.WARNING)
log = logging.getLogger(__name__)
def reindent_lines(new_leader, source):
"""Re-indent string lines."""
return new_leader + ('\n' + new_leader).join(source.split('\n'))
class CoverageDataset(AttributeContainer):
"""Wrap dataset access using CDMRemoteFeature and Coverages.
This is still experimental.
"""
def __init__(self, url):
"""Initialize CoverageDataset from a url pointing to CDMRemoteFeature endpoint."""
super().__init__()
warnings.warn('CoverageDataset is in early development, unsupported, and API may '
'change at any time.')
self.cdmrf = CDMRemoteFeature(url)
self.name = 'Unnamed'
self.lon_lat_domain = None
self.proj_domain = None
self.date_range = None
self.type = None
self.axes = OrderedDict()
self.coord_systems = OrderedDict()
self.grids = OrderedDict()
self.transforms = OrderedDict()
self._read_header()
def _read_header(self):
"""Get the needed header information to initialize dataset."""
self._header = self.cdmrf.fetch_header()
self.load_from_stream(self._header)
def load_from_stream(self, header):
"""Populate the CoverageDataset from the protobuf information."""
self._unpack_attrs(header.atts)
self.name = header.name
self.lon_lat_domain = header.latlonRect
self.proj_domain = header.projRect
self.date_range = header.dateRange
self.type = header.coverageType
for sys in header.coordSys:
self.coord_systems[sys.name] = sys
for trans in header.coordTransforms:
self.transforms[trans.name] = trans
for ax in header.coordAxes:
self.axes[ax.name] = ax
for cov in header.grids:
self.grids[cov.name] = cov
def __str__(self):
"""Create a string representation of CoverageDataset."""
print_groups = []
if self.name:
print_groups.append(self.name + ' (' + str(self.type) + ')')
print_groups.append(f'Lon/Lat Domain: {self.lon_lat_domain}')
print_groups.append(f'Projected Domain: {self.proj_domain}')
print_groups.append(f'Date Range: {self.date_range}')
indent = ' ' * 4
if self.axes:
print_groups.append('Axes:')
for ax in self.axes.values():
print_groups.append(reindent_lines(indent, str(ax)))
if self.coord_systems:
print_groups.append('Coordinate Systems:')
for sys in self.coord_systems.values():
print_groups.append(reindent_lines(indent, str(sys)))
if self.transforms:
print_groups.append('Coordinate Transforms:')
for trans in self.transforms.values():
print_groups.append(reindent_lines(indent, str(trans)))
if self.grids:
print_groups.append('Grids:')
for grid in self.grids.values():
print_groups.append(reindent_lines(indent, str(grid)))
if self.ncattrs():
print_groups.append('Attributes:')
for att in self.ncattrs():
print_groups.append(f'{indent}{att}: {getattr(self, att)}')
return '\n'.join(print_groups)
<<<<<< EOF