New Contributors
Changes in 1.6.0
Full Changelog: v1.5.1...v1.6.0
Enhancements
-
Includes new xcube Viewer 1.2
-
Added new statistics API to xcube server. The service computes basic
statistical values and a histogram for given data variable, time stamp,
and a GeoJSON geometry. Its endpoint is:
/statistics/{datasetId}/{varName}?time={time}
. Geometry is passed as
request body in form of a GeoJSON geometry object. -
xcube server's tile API can now handle user-defined colormaps from xcube
viewer. Custom color bars are still passed using query parametercmap
to
endpoint/tiles/{datasetId}/{varName}/{z}/{y}/{x}
,
but in the case of custom color bars it is a JSON-encoded object with the
following format:{"name": <str>, "type": <str>, "colors": <list>}
. (#975)
The object properties arename
: a unique name.type
: optional type of control values.colors
: a list of pairs[[<v1>,<c1>], [<v2>,<c2>], [<v3>,<c3>], ...]
that map a control value to a hexadecimal color value using CSS format
"#RRGGBBAA"
.
The
type
values are"node"
: control points are nodes of a continuous color gradient."bound"
: control points form bounds that map to a color, which means
the last color is unused."key"
: control points are keys (integers) that identify a color.
-
xcube server's tile API now allows specifying the data normalisation step
before a color mapping is applied to the variable data to be visualized.
This affects endpoint/tiles/{datasetId}/{varName}/{z}/{y}/{x}
and the WMTS
API. The possible normalisation values arelin
: linear mapping of data values betweenvmin
andvmax
to range 0 to 1
(usesmatplotlib.colors.Normalize(vmin, vmax)
).log
: logarithmic mapping of data values betweenvmin
andvmax
to range 0 to 1
(usesmatplotlib.colors.LogNorm(vmin, vmax)
).cat
: categorical mapping of data values to indices into the color mapping.
(usesmatplotlib.colors.BoundaryNorm(categories)
). This normalisation
currently only works with user-defined colormaps of type
key
orbound
(see above).
The normalisation can be specified in three different ways (in order):
- As query parameter
norm
passed to the tile endpoint. - Property
Norm
in theStyles/ColorMapping
element in xcube server configuration. - Data variable attribute
color_norm
.
-
xcube server can now read SNAP color palette definition files (
*.cpd
) with
alpha values. (#932) -
The class
xcube.webapi.viewer.Viewer
now accepts root paths or URLs that
will each be scanned for datasets. The roots are passed as keyword argument
roots
whose value is a path or URL or an iterable of paths or URLs.
A new keyword argumentmax_depth
defines the maximum subdirectory depths
used to search for datasets in caseroots
is given. It defaults to1
. -
The behaviour of function
resample_in_space()
of module
xcube.core.resampling
changed in this version. (#1001)- A new keyword argument
ref_ds
can now be used to provide
a reference dataset for the reprojection. It can be passed instead
oftarget_rm
. Ifref_ds
is given, it also forces the returned target
dataset to have the same spatial coordinates asref_ds
. - In the case of up-sampling, we no longer recover
NaN
values by default
as it may require considerable CPU overhead.
To enforce the old behaviour, provide thevar_configs
keyword-argument
and setrecover_nan
toTrue
for desired variables.
- A new keyword argument
-
The class
MaskSet()
of modulexcube.core.maskset
now correctly recognises
the variable attributesflag_values
,flag_masks
,flag_meanings
when
their values are lists (ESA CCI LC data encodes them as JSON arrays). (#1002) -
The class
MaskSet()
now provides a methodget_cmap()
which creates
a suitable matplotlib color map for variables that define the
flag_values
CF-attribute and optionally aflag_colors
attribute. (#1011) -
The
Api.route
decorator andApiRoute
constructor in
xcube.server.api
now have aslash
argument which lets a route support an
optional trailing slash.
Fixes
-
When using the
xcube.webapi.viewer.Viewer
class in Jupyter notebooks
multi-level datasets opened from S3 or from deeper subdirectories into
the local filesystem are now fully supported. (#1007) -
Fixed an issue with xcube server
/timeseries
endpoint that returned
status 500 if a given dataset used a CRS other geographic and the
geometry was not a point. (#995) -
Fixed broken table of contents links in dataset convention document.
-
Web API endpoints with an optional trailing slash are no longer listed
twice in the automatically generated OpenAPI documentation (#965) -
Several minor updates to make xcube compatible with NumPy 2.0.0 (#1024)
Incompatible API changes
-
The
get_cmap()
method ofutil.cmaps.ColormapProvider
now returns a
Tuple[matplotlib.colors.Colormap, Colormap]
instead of
Tuple[str, matplotlib.colors.Colormap]
. -
The signatures of functions
resample_in_space()
,rectify_dataset()
, and
affine_transform_dataset()
of modulexcube.core.resampling
changed:- Source dataset must be provided as 1st positional argument.
- Introduced keyword argument
ref_ds
that can be provided instead of
target_gm
. If given, it forces the returned dataset to have the same
coordinates asref_ds
.
-
Removed API deprecated since many releases:
- Removed keyword argument
base
from function
xcube.core.resampling.temporal.resample_in_time()
. - Removed option
base
from CLI commandxcube resample
. - Removed keyword argument
assert_cube
from
xcube.core.timeseries.get_time_series()
. - Removed property
xcube.core.xarray.DatasetAccessor.levels
. - Removed function
xcube.core.tile.parse_non_spatial_labels()
. - Removed keyword argument
tag
from context manager
xcube.util.perf.measure_time()
. - Removed function
xcube.core.geom.convert_geometry()
. - Removed function
xcube.core.geom.is_dataset_y_axis_inverted()
. - Removed function
xcube.util.assertions.assert_condition()
. - Removed function
xcube.util.cmaps.get_cmaps()
. - Removed function
xcube.util.cmaps.get_cmap()
. - Removed function
xcube.util.cmaps.ensure_cmaps_loaded()
. - Removed endpoint
/datasets/{datasetId}/vars/{varName}/tiles2/{z}/{y}/{x}
from xcube server.
- Removed keyword argument
Other changes
-
Make tests compatible with PyTest 8.2.0. (#973)
-
Addressed all warnings from xarray indicating that
Dataset.dims
will
be replaced byDataset.sizes
. (#981) -
NUMBA_DISABLE_JIT set to
0
to enablenumba.jit
in github workflow. (#946) -
Added GitHub workflow to perform an automatic xcube release on PyPI after a GitHub
release. To install xcube via thepip
tool usepip install xcube-core
,
since the name "xcube" is already taken on PyPI by another software. (#982) -
Added project URLs and classifiers to
setup.py
, which will be shown in the
left sidebar on the PyPI xcube-core webpage. -
Refactored xcube workflow to build docker images only on release and deleted the
update xcube tag job. -
Used
pyupgrade
to automatically upgrade
language syntax for Python versions >= 3.9. -
Migrated the xcube project setup from
setup.py
to the modernpyproject.toml
format. -
The functions
mask_dataset_by_geometry()
andclip_dataset_by_geometry()
of modulexcube.core.geom
have a new keyword argument
update_attrs: bool = True
as part of the fix for #995. -
Decreased number of warnings in the xcube workflow step unittest-xcube.
-
Added new data store
"https"
that uses
fsspec.implementations.http.HTTPFileSystem),
so that the upcoming xcube STAC data store will be able to access files from URLs. -
The workflow
.github/workflows/xcube_publish_pypi.yml
changes the line in thepyproject.toml
, where
the package name is defined toname = "xcube-core"
. This allows to release xcube under
the package name "xcube-core" on PyPI where the name "xcube" is already taken. #1010 -
Updated the 'How do I ...' page in the xcube documentation.