Releases: bcdev/xrlint
0.5.1
- XRLint now also loads default configuration from files named
xrlint-config.yaml
andxrlint-config.json
. (#60) - The command
xrlint --init
now writesxrlint-config.yaml
instead ofxrlint_config.yaml
. - Enhanced documentation by a new page that compiles the code examples in the
examples
folder. - Fixed
Processor.preprocess()
typing to also acceptxarray.DataTree
instances.
Full Changelog: v0.5.0...v0.5.1
0.5.0
What's Changed
Adjustments and Enhancements
-
Added support for validating Zarr and HDF-5 groups and their items.
Rules can now validatexarray.DataTree
objects originating
fromxarray.open_datatree()
by implementing
rule operation methodRuleOp.validate_datatree(ctx, node)
. (#54) -
Added a new core rule
var-missing-data
that checks for the recommended
use of a variable's missing data. -
Added a new core rule
access-latency
that can be used to check the
time it takes to open a dataset. -
Added HTML styling for both CLI output (
--format html
) and rendering
ofResult
objects in Jupyter notebooks. -
Rule
no-empty-chunks
has been taken off the"recommended"
settings
as there is no easy/efficient way to tell whether a dataset has
been written usingwrite_emtpy_chunks
option or not.
The rule message itself has been fixed. (#45) -
Adjusted messages of rules
var-units
andtime-coordinate
to be consistent with messages of other rules. -
Core rule
dataset-title-attr
has been moved intoxcube
plugin
and renamed toxcube/dataset-title
because the core rule
content-desc
covers checking for dataset titles and other descriptive
attributes.
Incompatible API changes
-
Changed general use of term verify into validate:
- prefixed
RuleOp
methods byvalidate_
for clarity. - renamed
XRLint.verify_datasets()
intovalidate_files()
- renamed
Lint.verify_dataset()
intovalidate()
- prefixed
-
Renamed nodes and node properties for clarity and consistency:
- renamed
DataArrayNode
intoVariableNode
- renamed
DataArrayNode.data_array
intoVariableNode.array
- renamed
-
Various changes for improved clarity regarding configuration management:
- introduced type aliases
ConfigLike
andConfigObjectLike
. - renamed
Config
intoConfigObject
- renamed
ConfigList.configs
intoconfig_objects
- renamed
ConfigList
intoConfig
- renamed
ConfigList.compute_config()
intocompute_config_object()
- renamed
Result.config
intoconfig_object
- renamed
XRLint.load_config_list()
intoinit_config()
- added class method
from_config()
toConfigList
. - removed function
xrlint.config.merge_configs
as it was no longer used.
- introduced type aliases
-
Removed class method
Result.new()
as it was no longer used.
Other changes
- XRLint now works with zarr >=2,<3 and zarr >=3.0.2
- Added more tests so we finally reached 100% coverage.
- New
PluginMeta.docs_url
property. - Inserted copyright header into all source files.
Full Changelog: v0.4.1...v0.5.0
0.4.1
Changes
- Added core rule
conventions
that checks for theConventions
attribute. - Added core rule
context-descr
that checks content description - Added core rule
var-descr
that checks data variable description - Renamed rules for consistency:
var-units-attrs
andvar-units
flags
intovar-flags
Fixes
- Fixed an issue that prevented recursively traversing folders referred
to by URLs (such ass3://<bucket>/<path>/
) rather than local directory
paths. (#39)
0.4.0
-
Fixed and enhanced core rule
time-coordinate
. `(#33) -
New xcube rule
no-chunked-coords
. (#29) -
New xcube multi-level dataset rules:
ml-dataset-meta
: verifies that a meta info file exists and is consistent;ml-dataset-xy
: verifies that the levels have expected spatial resolutions;ml-dataset-time
: verifies that the levels have expected time dimension, if any.
-
Now supporting xcube multi-level datasets
*.levels
:- Added xcube plugin processor
"xcube/multi-level-dataset"
that is used
inside the predefined xcube configurations "all" and "recommended".
- Added xcube plugin processor
-
Introduced method
Plugin.define_config
which defines a named plugin
configuration. It takes a name and a configuration object or list of
configuration objects. -
Changed the way how configuration is defined and exported from
Python configuration files:- Renamed function that exports configuration from
export_configs
intoexport_config
. - The returned value should be a list of values that can be
converted into configuration objects: mixedConfig
instances,
dictionary, or a name that refers to a named configuration of a plugin.
- Renamed function that exports configuration from
-
Other changes:
- Property
config
ofLinter
now returns aConfigList
instead
of aConfig
object. - Directories that are recognized by file patterns associated with a non-empty
configuration object are no longer recursively traversed. - Node path names now contain the dataset index if a file path
has been opened by a processor produced multiple
datasets to validate. - Changed type of
Plugin.configs
fromdict[str, Config]
to
dict[str, list[Config]]
. - Inbuilt plugin rules now import their
plugin
instance from
xrlint.plugins.<plugin>.plugin
module. JsonSerializable
now recognizesdataclass
instances and no longer
serializes property values that are also default values.- Pinned zarr dependency to be >=2.18, <3 until test
tests.plugins.xcube.processors.test_mldataset.MultiLevelDatasetProcessorTest
is adjusted orfsspec
's memory filesystem is updated. - Now making use of the
expected
property ofRuleTest
.
- Property
Full Changelog: v0.3.0...v0.4.0
0.3.0
- Added more rules
- Fixed problem where referring to values in modules via the form
"<module>:<attr>"
raised. (#21) - Introduced factory method
new_plugin
which simplifies creating plugin objects. - Refactored out new common mixin class
Operation
which reduces amount of code and simplifies testing of operation classesRule
,Processor
,Formatter
. - Improved overall test coverage.
- Switched to ruff as default linter and formatter.
Full Changelog: v0.2.0...v0.3.0
0.2.0
- Rule description is now your
RuleOp
's docstring
ifdescription
is not explicitly provided. - Supporting virtual plugins: plugins provided by Python
dictionaries with rules defined by theRuleOp
classes. - Added more configuration examples in the
examples
folder. - All
xcube
rules now have references into the
xcube dataset specification. - Introduced mixin classes
ValueConstructible
and
derivedMappingConstructible
which greatly simplify
flexible instantiation of XRLint's configuration objects
and their children from Python and JSON/YAML values. - Made all docstrings comply to google-style.
0.1.0
- Added CLI option
--print-config PATH
, see same option in ESLint - XRLint CLI now outputs single results immediately to console, instead only after all results have been collected.
- Refactored and renamed
CliEngine
intoXRLint
. Documented the class. new_linter()
now uses a config name arg instead of a bool arg.- Split example notebook into two
0.0.3
0.0.2
- more rules
- more tests
- config list item can be config name
- xcube is no longer default plugin
- no rules by default, but no rules configured is an error
- CLI exit code 1 with max warnings exceeded
- CLI exit code 1 with no files given
- new CLI options
--plugin
,--rule
,--init
- markdown rule reference in docs via
mkruleref.py
tool - using
files
config option to specify valid filename extensions, see here - using default filename extensions
["**/*.zarr", "**/*.nc"]
- using subset of minimatch syntax instead of the simple globs used by Python's
fnmatch
- allow the CLI's
FILES
args to contain directories, which are automatically recursively traversed - rule
coords-for-dims
works on dataset level - support for custom processors