Skip to content

Commit

Permalink
Fix AttributeError whith most recent xarray version (#97)
Browse files Browse the repository at this point in the history
* Fix AttributeError whith most recent xarray version

* Remove workaround
  • Loading branch information
fmaussion committed Apr 5, 2018
1 parent 02a349d commit 7ed7d3b
Showing 1 changed file with 2 additions and 47 deletions.
49 changes: 2 additions & 47 deletions salem/sio.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@

try:
import xarray as xr
from xarray.backends.netCDF4_ import (NetCDF4DataStore, close_on_error,
_nc4_group, is_remote_uri)
from xarray.backends.netCDF4_ import NetCDF4DataStore
from xarray.core.pycompat import basestring
from xarray.backends.api import _MultiFileCloser, _default_lock
has_xarray = True
Expand Down Expand Up @@ -877,50 +876,6 @@ def wrf_plevel(self, varname, levels=None, fill_value=np.NaN,
return out


def _open_netcdf4_group(filename, mode, group=None, ds=None, **kwargs):
"""
This code is adapted from xarray's _open_netcdf4_group func. The xarray
license is reproduced in the salem/licenses directory.
"""
import netCDF4 as nc4

if ds is None:
ds = nc4.Dataset(filename, mode=mode, **kwargs)

with close_on_error(ds):
ds = _nc4_group(ds, group, mode)

for var in ds.variables.values():
# we handle masking and scaling ourselves
var.set_auto_maskandscale(False)
return ds


class _NetCDF4DataStore(NetCDF4DataStore):
"""Just another way to init xarray's datastore.
This code is adapted from xarray's _NetCDF4DataStore class. The xarray
license is reproduced in the salem/licenses directory.
"""
def __init__(self, filename, mode='r', format='NETCDF4', group=None,
writer=None, clobber=True, diskless=False, persist=False,
autoclose=False, ds=None):
if format is None:
format = 'NETCDF4'
opener = partial(_open_netcdf4_group, filename, mode=mode,
group=group, clobber=clobber, diskless=diskless,
persist=persist, format=format, ds=ds)
self.ds = opener()
self._autoclose = autoclose
self._isopen = True
self.format = format
self.is_remote = is_remote_uri(filename)
self._filename = filename
self._mode = 'a' if mode == 'w' else mode
self._opener = partial(opener, mode=self._mode)
super(NetCDF4DataStore, self).__init__(writer)


def open_xr_dataset(file):
"""Thin wrapper around xarray's open_dataset.
Expand Down Expand Up @@ -1001,7 +956,7 @@ def open_wrf_dataset(file, **kwargs):
nc.variables[vn] = cl(nc)

# trick xarray with our custom netcdf
ds = xr.open_dataset(_NetCDF4DataStore(file, ds=nc), **kwargs)
ds = xr.open_dataset(NetCDF4DataStore(nc), **kwargs)

# remove time dimension to lon lat
for vn in ['XLONG', 'XLAT']:
Expand Down

0 comments on commit 7ed7d3b

Please sign in to comment.