"""
This file contains global options for rioxarray
Credits:
This file was adopted from: https://github.com/pydata/xarray # noqa
Source file: https://github.com/pydata/xarray/blob/2ab0666c1fcc493b1e0ebc7db14500c427f8804e/xarray/core/options.py # noqa
"""
from typing import Any
EXPORT_GRID_MAPPING = "export_grid_mapping"
SKIP_MISSING_SPATIAL_DIMS = "skip_missing_spatial_dims"
OPTIONS = {
EXPORT_GRID_MAPPING: True,
SKIP_MISSING_SPATIAL_DIMS: False,
}
OPTION_NAMES = set(OPTIONS)
VALIDATORS = {
EXPORT_GRID_MAPPING: lambda choice: isinstance(choice, bool),
}
def get_option(key: str) -> Any:
"""
Get the global rioxarray option.
.. versionadded:: 0.3.0
Parameters
----------
key: str
The name of the option.
Returns
-------
Any: the value of the option.
"""
return OPTIONS[key]
[docs]
class set_options: # pylint: disable=invalid-name
"""
Set the global rioxarray option.
.. versionadded:: 0.3.0
.. versionadded:: 0.7.0 skip_missing_spatial_dims
Parameters
----------
export_grid_mapping: bool, default=True
If True, this option will export the full Climate and Forecasts (CF)
grid mapping attributes for the CRS. This is useful if you are exporting
your file to netCDF using :meth:`xarray.Dataset.to_netcdf()`. When disabled,
only the ``crs_wkt`` and ``spatial_ref`` attributes will be written and the
program will be faster due to not needing to use
:meth:`pyproj.CRS.to_cf() <pyproj.crs.CRS.to_cf>`.
skip_missing_spatial_dims: bool, default=False
If True, it will not perform spatial operations on variables
within a :class:`xarray.Dataset` if the spatial dimensions
are not found.
Usage as a context manager::
with rioxarray.set_options(export_grid_mapping=False):
rds = rioxarray.open_rasterio(...)
Usage for global settings::
rioxarray.set_options(export_grid_mapping=False)
"""
def __init__(self, **kwargs):
self.old = OPTIONS.copy()
for key, value in kwargs.items():
if key not in OPTIONS:
raise ValueError(
f"argument name {key} is not in the set of valid options "
f"{OPTION_NAMES}."
)
if key in VALIDATORS and not VALIDATORS[key](value):
raise ValueError(f"option {key!r} gave an invalid value: {value!r}.")
OPTIONS[key] = value
def __enter__(self):
return
def __exit__(self, exc_type, exc_value, traceback):
global OPTIONS # pylint: disable=global-statement
OPTIONS = self.old