From 5acb4bad67ec9c878c3e2223f4a427106db26429 Mon Sep 17 00:00:00 2001 From: Lukas Bindreiter Date: Tue, 8 Jul 2025 14:22:22 +0200 Subject: [PATCH 1/8] Change all occurences of load() to query() --- .../tilebox.datasets/Collection.load.mdx | 73 ------------------- .../tilebox.datasets/Collection.query.mdx | 73 +++++++++++++++++++ datasets/delete.mdx | 2 +- datasets/ingest.mdx | 6 +- datasets/query.mdx | 30 ++++---- docs.json | 2 +- guides/datasets/ingest.mdx | 4 +- quickstart.mdx | 2 +- sdks/python/async.mdx | 10 +-- sdks/python/geometries.mdx | 2 +- sdks/python/install.mdx | 2 +- sdks/python/xarray.mdx | 2 +- storage/clients.mdx | 10 +-- vale/styles/docs/bold.yml | 8 -- vale/styles/docs/double-spaces.yml | 1 - vale/styles/docs/empty-lines.yml | 1 - 16 files changed, 110 insertions(+), 118 deletions(-) delete mode 100644 api-reference/python/tilebox.datasets/Collection.load.mdx create mode 100644 api-reference/python/tilebox.datasets/Collection.query.mdx delete mode 100644 vale/styles/docs/bold.yml diff --git a/api-reference/python/tilebox.datasets/Collection.load.mdx b/api-reference/python/tilebox.datasets/Collection.load.mdx deleted file mode 100644 index d44fc66..0000000 --- a/api-reference/python/tilebox.datasets/Collection.load.mdx +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Collection.load -icon: layer-group ---- - -```python -def Collection.load( - time_or_interval: TimeIntervalLike, - skip_data: bool = False, - show_progress: bool = False -) -> xarray.Dataset -``` - -Load a range of data points in this collection in a specified interval. -If no data exists for the requested time or interval, an empty `xarray.Dataset` is returned. - -## Parameters - - - The time or time interval for which to load data. This can be a single time scalar, a tuple of two time scalars, or an array of time scalars. - - Valid time scalars are: `datetime.datetime` objects, strings in ISO 8601 format, or Unix timestamps in seconds. - - Behavior for each input type: - - - **TimeScalar**: If a single time scalar is provided, `load` returns all data points for that exact millisecond. - - - **TimeInterval**: If a time interval is provided, `load` returns all data points in that interval. Intervals can be a tuple of two `TimeScalars` or a `TimeInterval` object. Tuples are interpreted as a half-open interval `[start, end)`. With a `TimeInterval` object, the `start_exclusive` and `end_inclusive` parameters control whether the start and end time are inclusive or exclusive. - - - **Iterable[TimeScalar]**: If an array of time scalars is provided, `load` constructs a time interval from the first and last time scalar in the array. Here, both the `start` and `end` times are inclusive. - - - - - If `True`, the response contains only the [required fields for the dataset type](/datasets/types/timeseries) without the actual dataset-specific fields. Defaults to `False`. - - - - If `True`, a progress bar is displayed when pagination is required. Defaults to `False`. - - -## Returns - -An [`xarray.Dataset`](/sdks/python/xarray) containing the requested data points. - - -```python Python -from datetime import datetime -from tilebox.clients.core.data import TimeInterval - -# loading a specific time -time = "2023-05-01 12:45:33.423" -data = collection.load(time) - -# loading a time interval -interval = ("2023-05-01", "2023-08-01") -data = collection.load(interval, show_progress=True) - -# loading a time interval with TimeInterval -interval = TimeInterval( - start=datetime(2023, 5, 1), - end=datetime(2023, 8, 1), - start_exclusive=False, - end_inclusive=False, -) -data = collection.load(interval, show_progress=True) - -# loading with an iterable -meta_data = collection.load(..., skip_data=True) -first_50 = collection.load(meta_data.time[:50], skip_data=False) -``` - - diff --git a/api-reference/python/tilebox.datasets/Collection.query.mdx b/api-reference/python/tilebox.datasets/Collection.query.mdx new file mode 100644 index 0000000..c5feb42 --- /dev/null +++ b/api-reference/python/tilebox.datasets/Collection.query.mdx @@ -0,0 +1,73 @@ +--- +title: Collection.query +icon: layer-group +--- + +```python +def Collection.query( + temporal_extent: TimeIntervalLike, + skip_data: bool = False, + show_progress: bool = False +) -> xarray.Dataset +``` + +Query a range of data points in this collection in a specified temporal extent. +If no data exists for the requested time or interval, an empty `xarray.Dataset` is returned. + +## Parameters + + + The time or time interval for which to query data. This can be a single time scalar, a tuple of two time scalars, or an array of time scalars. + + Valid time scalars are: `datetime.datetime` objects, strings in ISO 8601 format, or Unix timestamps in seconds. + + Behavior for each input type: + + - **TimeScalar**: If a single time scalar is provided, `query` returns all data points for that exact millisecond. + + - **TimeInterval**: If a time interval is provided, `query` returns all data points in that interval. Intervals can be a tuple of two `TimeScalars` or a `TimeInterval` object. Tuples are interpreted as a half-open interval `[start, end)`. With a `TimeInterval` object, the `start_exclusive` and `end_inclusive` parameters control whether the start and end time are inclusive or exclusive. + + - **Iterable[TimeScalar]**: If an array of time scalars is provided, `query` constructs a time interval from the first and last time scalar in the array. Here, both the `start` and `end` times are inclusive. + + + + + If `True`, the response contains only the [required fields for the dataset type](/datasets/types/timeseries) without the actual dataset-specific fields. Defaults to `False`. + + + + If `True`, a progress bar is displayed when pagination is required. Defaults to `False`. + + +## Returns + +An [`xarray.Dataset`](/sdks/python/xarray) containing the requested data points. + + +```python Python +from datetime import datetime +from tilebox.clients.core.data import TimeInterval + +# querying a specific time +time = "2023-05-01 12:45:33.423" +data = collection.query(temporal_extent=time) + +# querying a time interval +interval = ("2023-05-01", "2023-08-01") +data = collection.query(temporal_extent=interval, show_progress=True) + +# querying a time interval with TimeInterval +interval = TimeInterval( + start=datetime(2023, 5, 1), + end=datetime(2023, 8, 1), + start_exclusive=False, + end_inclusive=False, +) +data = collection.query(temporal_extent=interval, show_progress=True) + +# querying with an iterable +meta_data = collection.query(temporal_extent=..., skip_data=True) +first_50 = collection.query(temporal_extent=meta_data.time[:50], skip_data=False) +``` + + diff --git a/datasets/delete.mdx b/datasets/delete.mdx index 52762ab..9582375 100644 --- a/datasets/delete.mdx +++ b/datasets/delete.mdx @@ -95,7 +95,7 @@ since you only need the datapoint IDs. See [fetching only metadata](/datasets/qu ```python Python -to_delete = collection.load(("2023-05-01", "2023-06-01"), skip_data=True) +to_delete = collection.query(temporal_extent=("2023-05-01", "2023-06-01"), skip_data=True) n_deleted = collection.delete(datapoints) print(f"Deleted {n_deleted} data points.") diff --git a/datasets/ingest.mdx b/datasets/ingest.mdx index 9d82966..cf6be9a 100644 --- a/datasets/ingest.mdx +++ b/datasets/ingest.mdx @@ -84,7 +84,7 @@ Ingestion can be done either in Python or Go. [`collection.ingest`](/api-reference/python/tilebox.datasets/Collection.ingest) supports a wide range of input types. Below is an example of using either a `pandas.DataFrame` or an `xarray.Dataset` as input. -#### pandas.DataFrame +#### pandas DataFrame A [pandas.DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html) is a representation of two-dimensional, potentially heterogeneous tabular data. It's a powerful tool for working with structured data, and Tilebox supports it as input for `ingest`. @@ -145,7 +145,7 @@ Measurements: [2025-03-28T11:44:23.000 UTC, 2025-03-28T11:45:19.000 UTC] (2 data You can now also head on over to the [Tilebox Console](/console) and view the newly ingested data points there. -#### xarray.Dataset +#### xarray Dataset [`xarray.Dataset`](/sdks/python/xarray) is the default format in which Tilebox Datasets returns data when [querying data](/datasets/query) from a collection. @@ -260,7 +260,7 @@ Since `ingest` takes `query`'s output as input, you can easily copy or move data ```python Python src_collection = dataset.collection("Measurements") -data_to_copy = src_collection.load(("2025-03-28", "2025-03-29")) +data_to_copy = src_collection.query(temporal_extent=("2025-03-28", "2025-03-29")) dest_collection = dataset.collection("OtherMeasurements") dest_collection.ingest(data_to_copy) # copy the data to the other collection diff --git a/datasets/query.mdx b/datasets/query.mdx index ffd659e..44ec4cf 100644 --- a/datasets/query.mdx +++ b/datasets/query.mdx @@ -43,18 +43,18 @@ func main() { ``` -To load data points from a dataset collection, use the [load](/api-reference/python/tilebox.datasets/Collection.load) method. It requires a `time_or_interval` parameter to specify the time or time interval for loading. +To query data points from a dataset collection, use the [query](/api-reference/python/tilebox.datasets/Collection.query) method. It requires a `temporal_extent` parameter to specify the time or time interval for querying. ## Filtering by time ### Time interval -To load data for a specific time interval, use a `tuple` in the form `(start, end)` as the `time_or_interval` parameter. Both `start` and `end` must be [TimeScalars](#time-scalars), which can be `datetime` objects or strings in ISO 8601 format. +To query data for a specific time interval, use a `tuple` in the form `(start, end)` as the `temporal_extent` parameter. Both `start` and `end` must be [TimeScalars](#time-scalars), which can be `datetime` objects or strings in ISO 8601 format. ```python Python interval = ("2017-01-01", "2023-01-01") -data = collection.load(interval, show_progress=True) +data = collection.query(temporal_extent=interval, show_progress=True) ``` ```go Go startDate := time.Date(2017, time.January, 1, 0, 0, 0, 0, time.UTC) @@ -112,7 +112,7 @@ import xarray as xr data = [] for year in [2017, 2018, 2019, 2020, 2021, 2022]: interval = (f"{year}-01-01", f"{year + 1}-01-01") - data.append(collection.load(interval, show_progress=True)) + data.append(collection.query(temporal_extent=interval, show_progress=True)) # Concatenate the data into a single dataset, which is equivalent # to the result of the single request in the code example above. @@ -170,7 +170,7 @@ print(f"They are equivalent: {interval1 == interval2}") print(interval2.to_half_open()) # Query data for a time interval -data = collection.load(interval1, show_progress=True) +data = collection.query(temporal_extent=interval1, show_progress=True) ``` ```go Go interval1 := query.TimeInterval{ @@ -217,11 +217,11 @@ You can load all datapoints linked to a specific timestamp by specifying a `Time A collection may contain multiple datapoints for one millisecond, so multiple data points could still be returned. If you want to fetch only a single data point, [query the collection by id](#loading-a-data-point-by-id) instead. -Here's how to load a data point at a specific millisecond from a [collection](/datasets/concepts/collections). +Here's how to query a data point at a specific millisecond from a [collection](/datasets/concepts/collections). ```python Python - data = collection.load("2024-08-01 00:00:01.362") + data = collection.query(temporal_extent="2024-08-01 00:00:01.362") print(data) ``` ```go Go @@ -265,18 +265,18 @@ First datapoint time: 2024-08-01 00:00:01.362 +0000 UTC Tilebox uses millisecond precision for timestamps. To load all data points for a specific second, it's a [time interval](/datasets/query#time-interval) request. Refer to the examples below for details. -The output of the `load` method is an `xarray.Dataset` object. To learn more about Xarray, visit the dedicated [Xarray page](/sdks/python/xarray). +The output of the `query` method is an `xarray.Dataset` object. To learn more about Xarray, visit the dedicated [Xarray page](/sdks/python/xarray). ### Time iterables (Python only) -You can specify a time interval by using an iterable of `TimeScalar`s as the `time_or_interval` parameter. This is especially useful when you want to use the output of a previous `load` call as input for another load. Here's how that works. +You can specify a time interval by using an iterable of `TimeScalar`s as the `temporal_extent` parameter. This is especially useful when you want to use the output of a previous `query` call as input for another query. Here's how that works. ```python Python interval = ("2017-01-01", "2023-01-01") - meta_data = collection.load(interval, skip_data=True) + meta_data = collection.query(temporal_extent=interval, skip_data=True) - first_50_data_points = collection.load(meta_data.time[:50], skip_data=False) + first_50_data_points = collection.query(temporal_extent=meta_data.time[:50], skip_data=False) print(first_50_data_points) ``` @@ -315,7 +315,7 @@ tokyo_time = pytz.timezone('Asia/Tokyo').localize( datetime(2017, 1, 1, 11, 45, 25, 679000) ) print(tokyo_time) -data = collection.load(tokyo_time) +data = collection.query(temporal_extent=tokyo_time) print(data) ``` ```go Go @@ -431,7 +431,7 @@ If this flag is set, the response will only include the required fields for the ```python Python - data = collection.load("2024-08-01 00:00:01.362", skip_data=True) + data = collection.query(temporal_extent="2024-08-01 00:00:01.362", skip_data=True) print(data) ``` ```go Go @@ -473,12 +473,12 @@ First datapoint time: 2024-08-01 00:00:01.362 +0000 UTC ## Empty response -The `load` method always returns an `xarray.Dataset` object, even if there are no data points for the specified query. In such cases, the returned dataset will be empty, but no error will be raised. +The `query` method always returns an `xarray.Dataset` object, even if there are no data points for the specified query. In such cases, the returned dataset will be empty, but no error will be raised. ```python Python time_with_no_data_points = "1997-02-06 10:21:00" - data = collection.load(time_with_no_data_points) + data = collection.query(temporal_extent=time_with_no_data_points) print(data) ``` ```go Go diff --git a/docs.json b/docs.json index 145d840..0ee7fa5 100644 --- a/docs.json +++ b/docs.json @@ -161,7 +161,7 @@ "api-reference/python/tilebox.datasets/Collection.find", "api-reference/python/tilebox.datasets/Collection.info", "api-reference/python/tilebox.datasets/Collection.ingest", - "api-reference/python/tilebox.datasets/Collection.load" + "api-reference/python/tilebox.datasets/Collection.query" ] }, { diff --git a/guides/datasets/ingest.mdx b/guides/datasets/ingest.mdx index 82f4cc8..327aa0f 100644 --- a/guides/datasets/ingest.mdx +++ b/guides/datasets/ingest.mdx @@ -106,6 +106,7 @@ To do so, you'll use the [Tilebox Console](/console), navigate to `My Datasets` Now, to match the given MODIS dataset, you'll specify the following fields: +{/* vale Vale.Spelling = NO */} | Field | Type | Note | | --- | --- | --- | | granule_name | string | MODIS granule name | @@ -120,6 +121,7 @@ Now, to match the given MODIS dataset, you'll specify the following fields: | day_night_flag | int64 | Day / Night / Both | | browse_granule_id | string | Optional granule ID for browsing | | published_at | Timestamp | The time the product was published | +{/* vale Vale.Spelling = YES */} In the console, this will look like the following: @@ -187,7 +189,7 @@ You can now query the newly ingested data. You can query a subset of the data fo ```python Python -data = collection.load(("2015-01-01", "2020-01-01")) +data = collection.query(temporal_extent=("2015-01-01", "2020-01-01")) data ``` diff --git a/quickstart.mdx b/quickstart.mdx index e4823e3..b8cc36a 100644 --- a/quickstart.mdx +++ b/quickstart.mdx @@ -63,7 +63,7 @@ If you prefer to work locally, follow these steps to get started. # and load data from a collection in a given time range collection = dataset.collection("S2A_S2MSI1C") - data_january_2022 = collection.load(("2022-01-01", "2022-02-01")) + data_january_2022 = collection.query(temporal_extent=("2022-01-01", "2022-02-01")) ``` diff --git a/sdks/python/async.mdx b/sdks/python/async.mdx index eb2c3a9..273647b 100644 --- a/sdks/python/async.mdx +++ b/sdks/python/async.mdx @@ -44,7 +44,7 @@ info = collection.info() print(f"Data for My-collection is available for {info.availability}") # Loading data -data = collection.load(("2022-05-01", "2022-06-01"), show_progress=True) +data = collection.query(temporal_extent=("2022-05-01", "2022-06-01"), show_progress=True) # Finding a specific datapoint datapoint_uuid = "01910b3c-8552-7671-3345-b902cc0813f3" @@ -65,7 +65,7 @@ info = await collection.info() print(f"Data for My-collection is available for {info.availability}") # Loading data -data = await collection.load(("2022-05-01", "2022-06-01"), show_progress=True) +data = await collection.query(temporal_extent=("2022-05-01", "2022-06-01"), show_progress=True) # Finding a specific datapoint datapoint_uuid = "01910b3c-8552-7671-3345-b902cc0813f3" @@ -98,7 +98,7 @@ collections = datasets.open_data.copernicus.landsat8_oli_tirs.collections() def stats_for_2020(collection: TimeseriesCollection) -> None: """Fetch data for 2020 and print the number of data points that were loaded.""" - data = collection.load(("2020-01-01", "2021-01-01"), show_progress=True) + data = collection.query(temporal_extent=("2020-01-01", "2021-01-01"), show_progress=True) n = data.sizes['time'] if 'time' in data else 0 return (collection.name, n) @@ -125,7 +125,7 @@ collections = await datasets.open_data.copernicus.landsat8_oli_tirs.collections( async def stats_for_2020(collection: TimeseriesCollection) -> None: """Fetch data for 2020 and print the number of data points that were loaded.""" - data = await collection.load(("2020-01-01", "2021-01-01"), show_progress=True) + data = await collection.query(temporal_extent=("2020-01-01", "2021-01-01"), show_progress=True) n = data.sizes['time'] if 'time' in data else 0 return (collection.name, n) @@ -190,7 +190,7 @@ class FetchData(Task): async def load_data(interval: TimeIntervalLike): datasets = await DatasetsClient().datasets() collections = await datasets.open_data.copernicus.landsat8_oli_tirs.collections() - return await collections["L1T"].load(interval) + return await collections["L1T"].query(temporal_extent=interval) async def load_first_three_months() -> tuple[xr.Dataset, xr.Dataset, xr.Dataset]: jan = load_data(("2020-01-01", "2020-02-01")) diff --git a/sdks/python/geometries.mdx b/sdks/python/geometries.mdx index d98aff9..39a7533 100644 --- a/sdks/python/geometries.mdx +++ b/sdks/python/geometries.mdx @@ -15,7 +15,7 @@ client = Client() datasets = client.datasets() ers_collection = datasets.open_data.asf.ers_sar.collection("ERS-2") -ers_data = ers_collection.load(("2008-02-10T21:00", "2008-02-10T22:00")) +ers_data = ers_collection.query(temporal_extent=("2008-02-10T21:00", "2008-02-10T22:00")) ``` ## Shapely diff --git a/sdks/python/install.mdx b/sdks/python/install.mdx index 4a4574f..5342728 100644 --- a/sdks/python/install.mdx +++ b/sdks/python/install.mdx @@ -69,7 +69,7 @@ client = Client() datasets = client.datasets() collection = datasets.open_data.copernicus.landsat8_oli_tirs.collection("L1T") -data = collection.load(("2015-01-01", "2020-01-01"), show_progress=True) +data = collection.query(temporal_extent=("2015-01-01", "2020-01-01"), show_progress=True) data ``` diff --git a/sdks/python/xarray.mdx b/sdks/python/xarray.mdx index 9a5475b..a231b21 100644 --- a/sdks/python/xarray.mdx +++ b/sdks/python/xarray.mdx @@ -45,7 +45,7 @@ from tilebox.datasets import Client client = Client() datasets = client.datasets() collection = datasets.open_data.copernicus.landsat8_oli_tirs.collection("L1GT") -satellite_data = collection.load(("2022-05-01", "2022-06-01"), show_progress=True) +satellite_data = collection.query(temporal_extent=("2022-05-01", "2022-06-01"), show_progress=True) print(satellite_data) ``` diff --git a/storage/clients.mdx b/storage/clients.mdx index 5cb3621..0aba5f6 100644 --- a/storage/clients.mdx +++ b/storage/clients.mdx @@ -44,7 +44,7 @@ collections = s2_dataset.collections() collection = collections["S2A_S2MSI2A"] # Loading metadata -s2_data = collection.load(("2024-08-01", "2024-08-02"), show_progress=True) +s2_data = collection.query(temporal_extent=("2024-08-01", "2024-08-02"), show_progress=True) # Selecting a data point to download selected = s2_data.isel(time=0) # index 0 selected @@ -79,7 +79,7 @@ For example, a Sentinel-2 L2A product includes many files such as metadata, diff ```python Python {4, 15} collection = datasets.open_data.copernicus.sentinel2_msi.collections()["S2A_S2MSI2A"] -s2_data = collection.load(("2024-08-01", "2024-08-02"), show_progress=True) +s2_data = collection.query(temporal_extent=("2024-08-01", "2024-08-02"), show_progress=True) selected = s2_data.isel(time=0) # download the first granule in the given time range objects = storage_client.list_objects(selected) @@ -137,7 +137,7 @@ collections = ers_dataset.collections() collection = collections["ERS-2"] # Loading metadata -ers_data = collection.load(("2009-01-01", "2009-01-02"), show_progress=True) +ers_data = collection.query(temporal_extent=("2009-01-01", "2009-01-02"), show_progress=True) # Selecting a data point to download selected = ers_data.isel(time=0) # index 0 selected @@ -206,7 +206,7 @@ collections = umbra_dataset.collections() collection = collections["SAR"] # Loading metadata -umbra_data = collection.load(("2024-01-05", "2024-01-06"), show_progress=True) +umbra_data = collection.query(temporal_extent=("2024-01-05", "2024-01-06"), show_progress=True) # Selecting a data point to download selected = umbra_data.isel(time=0) # index 0 selected @@ -239,7 +239,7 @@ The below example shows how to download only the metadata file for a given data ```python Python {4, 15} collection = datasets.open_data.umbra.sar.collections()["SAR"] -umbra_data = collection.load(("2024-01-05", "2024-01-06"), show_progress=True) +umbra_data = collection.query(temporal_extent=("2024-01-05", "2024-01-06"), show_progress=True) # Selecting a data point to download selected = umbra_data.isel(time=0) # index 0 selected diff --git a/vale/styles/docs/bold.yml b/vale/styles/docs/bold.yml deleted file mode 100644 index 4b7e023..0000000 --- a/vale/styles/docs/bold.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "Only use bold for UI elements." -link: "https://developers.google.com/style/ui-elements" -nonword: true -level: suggestion -scope: raw -tokens: - - '\*\*.+\*\*' diff --git a/vale/styles/docs/double-spaces.yml b/vale/styles/docs/double-spaces.yml index 5681180..e77305a 100644 --- a/vale/styles/docs/double-spaces.yml +++ b/vale/styles/docs/double-spaces.yml @@ -2,6 +2,5 @@ extends: existence message: "Don't use double spaces between words." nonword: true level: warning -scope: raw tokens: - '\w \w' diff --git a/vale/styles/docs/empty-lines.yml b/vale/styles/docs/empty-lines.yml index f6d0073..0cdeb13 100644 --- a/vale/styles/docs/empty-lines.yml +++ b/vale/styles/docs/empty-lines.yml @@ -2,6 +2,5 @@ extends: existence message: "Don't use more than one empty line to structure content." nonword: true level: error -scope: raw tokens: - '\n\n\n' From b887cf3cc95f182ce7963a1593b4100f4adc051e Mon Sep 17 00:00:00 2001 From: Lukas Bindreiter Date: Tue, 8 Jul 2025 14:23:13 +0200 Subject: [PATCH 2/8] Upgrade vale to version that supports mdx --- .github/workflows/lint.yml | 1 + .vale.ini | 13 ++----------- guides/datasets/ingest.mdx | 2 -- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 04345c3..d8394ba 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -12,6 +12,7 @@ jobs: - uses: errata-ai/vale-action@reviewdog with: fail_on_error: true + version: 3.2.0 docs-quality: name: Check docs standards runs-on: ubuntu-latest diff --git a/.vale.ini b/.vale.ini index 1ff85c8..ba8c502 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,21 +1,12 @@ StylesPath = "vale/styles" Vocab = docs -Packages = Google +Packages = Google, write-good IgnoredScopes = code, tt, img, url, a, text.frontmatter SkippedScopes = script, style, pre, figure, code MinAlertLevel = warning -# Treat MDX as Markdown -[formats] -mdx = md - -[*.{md,mdx}] - -# Ignore react components starting with export const -# Ignore code blocks in triple backticks -# Ignore inline code blocks in backticks -BlockIgnores = (export const (.|\n)*), (?s).*?, (?s)```.*?```, `.*?`, \[.*\]\(http[^\)]*?\), \(\/.*\) +[*.mdx] BasedOnStyles = Vale, Google, write-good, docs write-good.Passive = NO diff --git a/guides/datasets/ingest.mdx b/guides/datasets/ingest.mdx index 327aa0f..f4d2179 100644 --- a/guides/datasets/ingest.mdx +++ b/guides/datasets/ingest.mdx @@ -106,7 +106,6 @@ To do so, you'll use the [Tilebox Console](/console), navigate to `My Datasets` Now, to match the given MODIS dataset, you'll specify the following fields: -{/* vale Vale.Spelling = NO */} | Field | Type | Note | | --- | --- | --- | | granule_name | string | MODIS granule name | @@ -121,7 +120,6 @@ Now, to match the given MODIS dataset, you'll specify the following fields: | day_night_flag | int64 | Day / Night / Both | | browse_granule_id | string | Optional granule ID for browsing | | published_at | Timestamp | The time the product was published | -{/* vale Vale.Spelling = YES */} In the console, this will look like the following: From 6daba4688e2fda1b854c6f8e97b858d5122193f7 Mon Sep 17 00:00:00 2001 From: Lukas Bindreiter Date: Tue, 8 Jul 2025 14:46:09 +0200 Subject: [PATCH 3/8] Remove write-good style --- .github/workflows/lint.yml | 8 +- .vale.ini | 1 + vale/styles/{write-good => docs}/TooWordy.yml | 1 + vale/styles/write-good/Cliches.yml | 702 ------------------ vale/styles/write-good/E-Prime.yml | 32 - vale/styles/write-good/Illusions.yml | 11 - vale/styles/write-good/Passive.yml | 183 ----- vale/styles/write-good/README.md | 27 - vale/styles/write-good/So.yml | 5 - vale/styles/write-good/ThereIs.yml | 6 - vale/styles/write-good/Weasel.yml | 29 - vale/styles/write-good/meta.json | 4 - 12 files changed, 9 insertions(+), 1000 deletions(-) rename vale/styles/{write-good => docs}/TooWordy.yml (99%) delete mode 100644 vale/styles/write-good/Cliches.yml delete mode 100644 vale/styles/write-good/E-Prime.yml delete mode 100644 vale/styles/write-good/Illusions.yml delete mode 100644 vale/styles/write-good/Passive.yml delete mode 100644 vale/styles/write-good/README.md delete mode 100644 vale/styles/write-good/So.yml delete mode 100644 vale/styles/write-good/ThereIs.yml delete mode 100644 vale/styles/write-good/Weasel.yml delete mode 100644 vale/styles/write-good/meta.json diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index d8394ba..17e6907 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -9,6 +9,12 @@ jobs: - uses: actions/checkout@v4 with: lfs: true + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 22 + - name: Install MDX preprocessor + run: npm install -g mdx2vast - uses: errata-ai/vale-action@reviewdog with: fail_on_error: true @@ -23,7 +29,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 - name: Install Mintlify CLI run: npm install -g mintlify - name: Run Mintlify broken-links diff --git a/.vale.ini b/.vale.ini index ba8c502..166356d 100644 --- a/.vale.ini +++ b/.vale.ini @@ -9,6 +9,7 @@ MinAlertLevel = warning [*.mdx] BasedOnStyles = Vale, Google, write-good, docs +write-good.TooWordy = NO # we have our own list of too wordy as docs.TooWordy write-good.Passive = NO Google.Headings = NO Google.Will = NO diff --git a/vale/styles/write-good/TooWordy.yml b/vale/styles/docs/TooWordy.yml similarity index 99% rename from vale/styles/write-good/TooWordy.yml rename to vale/styles/docs/TooWordy.yml index ff7b887..99c8b97 100644 --- a/vale/styles/write-good/TooWordy.yml +++ b/vale/styles/docs/TooWordy.yml @@ -187,6 +187,7 @@ tokens: - requirement - reside - residence + - retain - satisfy - shall - should you wish diff --git a/vale/styles/write-good/Cliches.yml b/vale/styles/write-good/Cliches.yml deleted file mode 100644 index c953143..0000000 --- a/vale/styles/write-good/Cliches.yml +++ /dev/null @@ -1,702 +0,0 @@ -extends: existence -message: "Try to avoid using clichés like '%s'." -ignorecase: true -level: warning -tokens: - - a chip off the old block - - a clean slate - - a dark and stormy night - - a far cry - - a fine kettle of fish - - a loose cannon - - a penny saved is a penny earned - - a tough row to hoe - - a word to the wise - - ace in the hole - - acid test - - add insult to injury - - against all odds - - air your dirty laundry - - all fun and games - - all in a day's work - - all talk, no action - - all thumbs - - all your eggs in one basket - - all's fair in love and war - - all's well that ends well - - almighty dollar - - American as apple pie - - an axe to grind - - another day, another dollar - - armed to the teeth - - as luck would have it - - as old as time - - as the crow flies - - at loose ends - - at my wits end - - avoid like the plague - - babe in the woods - - back against the wall - - back in the saddle - - back to square one - - back to the drawing board - - bad to the bone - - badge of honor - - bald faced liar - - ballpark figure - - banging your head against a brick wall - - baptism by fire - - barking up the wrong tree - - bat out of hell - - be all and end all - - beat a dead horse - - beat around the bush - - been there, done that - - beggars can't be choosers - - behind the eight ball - - bend over backwards - - benefit of the doubt - - bent out of shape - - best thing since sliced bread - - bet your bottom dollar - - better half - - better late than never - - better mousetrap - - better safe than sorry - - between a rock and a hard place - - beyond the pale - - bide your time - - big as life - - big cheese - - big fish in a small pond - - big man on campus - - bigger they are the harder they fall - - bird in the hand - - bird's eye view - - birds and the bees - - birds of a feather flock together - - bit the hand that feeds you - - bite the bullet - - bite the dust - - bitten off more than he can chew - - black as coal - - black as pitch - - black as the ace of spades - - blast from the past - - bleeding heart - - blessing in disguise - - blind ambition - - blind as a bat - - blind leading the blind - - blood is thicker than water - - blood sweat and tears - - blow off steam - - blow your own horn - - blushing bride - - boils down to - - bolt from the blue - - bone to pick - - bored stiff - - bored to tears - - bottomless pit - - boys will be boys - - bright and early - - brings home the bacon - - broad across the beam - - broken record - - brought back to reality - - bull by the horns - - bull in a china shop - - burn the midnight oil - - burning question - - burning the candle at both ends - - burst your bubble - - bury the hatchet - - busy as a bee - - by hook or by crook - - call a spade a spade - - called onto the carpet - - calm before the storm - - can of worms - - can't cut the mustard - - can't hold a candle to - - case of mistaken identity - - cat got your tongue - - cat's meow - - caught in the crossfire - - caught red-handed - - checkered past - - chomping at the bit - - cleanliness is next to godliness - - clear as a bell - - clear as mud - - close to the vest - - cock and bull story - - cold shoulder - - come hell or high water - - cool as a cucumber - - cool, calm, and collected - - cost a king's ransom - - count your blessings - - crack of dawn - - crash course - - creature comforts - - cross that bridge when you come to it - - crushing blow - - cry like a baby - - cry me a river - - cry over spilt milk - - crystal clear - - curiosity killed the cat - - cut and dried - - cut through the red tape - - cut to the chase - - cute as a bugs ear - - cute as a button - - cute as a puppy - - cuts to the quick - - dark before the dawn - - day in, day out - - dead as a doornail - - devil is in the details - - dime a dozen - - divide and conquer - - dog and pony show - - dog days - - dog eat dog - - dog tired - - don't burn your bridges - - don't count your chickens - - don't look a gift horse in the mouth - - don't rock the boat - - don't step on anyone's toes - - don't take any wooden nickels - - down and out - - down at the heels - - down in the dumps - - down the hatch - - down to earth - - draw the line - - dressed to kill - - dressed to the nines - - drives me up the wall - - dull as dishwater - - dyed in the wool - - eagle eye - - ear to the ground - - early bird catches the worm - - easier said than done - - easy as pie - - eat your heart out - - eat your words - - eleventh hour - - even the playing field - - every dog has its day - - every fiber of my being - - everything but the kitchen sink - - eye for an eye - - face the music - - facts of life - - fair weather friend - - fall by the wayside - - fan the flames - - feast or famine - - feather your nest - - feathered friends - - few and far between - - fifteen minutes of fame - - filthy vermin - - fine kettle of fish - - fish out of water - - fishing for a compliment - - fit as a fiddle - - fit the bill - - fit to be tied - - flash in the pan - - flat as a pancake - - flip your lid - - flog a dead horse - - fly by night - - fly the coop - - follow your heart - - for all intents and purposes - - for the birds - - for what it's worth - - force of nature - - force to be reckoned with - - forgive and forget - - fox in the henhouse - - free and easy - - free as a bird - - fresh as a daisy - - full steam ahead - - fun in the sun - - garbage in, garbage out - - gentle as a lamb - - get a kick out of - - get a leg up - - get down and dirty - - get the lead out - - get to the bottom of - - get your feet wet - - gets my goat - - gilding the lily - - give and take - - go against the grain - - go at it tooth and nail - - go for broke - - go him one better - - go the extra mile - - go with the flow - - goes without saying - - good as gold - - good deed for the day - - good things come to those who wait - - good time was had by all - - good times were had by all - - greased lightning - - greek to me - - green thumb - - green-eyed monster - - grist for the mill - - growing like a weed - - hair of the dog - - hand to mouth - - happy as a clam - - happy as a lark - - hasn't a clue - - have a nice day - - have high hopes - - have the last laugh - - haven't got a row to hoe - - head honcho - - head over heels - - hear a pin drop - - heard it through the grapevine - - heart's content - - heavy as lead - - hem and haw - - high and dry - - high and mighty - - high as a kite - - hit paydirt - - hold your head up high - - hold your horses - - hold your own - - hold your tongue - - honest as the day is long - - horns of a dilemma - - horse of a different color - - hot under the collar - - hour of need - - I beg to differ - - icing on the cake - - if the shoe fits - - if the shoe were on the other foot - - in a jam - - in a jiffy - - in a nutshell - - in a pig's eye - - in a pinch - - in a word - - in hot water - - in the gutter - - in the nick of time - - in the thick of it - - in your dreams - - it ain't over till the fat lady sings - - it goes without saying - - it takes all kinds - - it takes one to know one - - it's a small world - - it's only a matter of time - - ivory tower - - Jack of all trades - - jockey for position - - jog your memory - - joined at the hip - - judge a book by its cover - - jump down your throat - - jump in with both feet - - jump on the bandwagon - - jump the gun - - jump to conclusions - - just a hop, skip, and a jump - - just the ticket - - justice is blind - - keep a stiff upper lip - - keep an eye on - - keep it simple, stupid - - keep the home fires burning - - keep up with the Joneses - - keep your chin up - - keep your fingers crossed - - kick the bucket - - kick up your heels - - kick your feet up - - kid in a candy store - - kill two birds with one stone - - kiss of death - - knock it out of the park - - knock on wood - - knock your socks off - - know him from Adam - - know the ropes - - know the score - - knuckle down - - knuckle sandwich - - knuckle under - - labor of love - - ladder of success - - land on your feet - - lap of luxury - - last but not least - - last hurrah - - last-ditch effort - - law of the jungle - - law of the land - - lay down the law - - leaps and bounds - - let sleeping dogs lie - - let the cat out of the bag - - let the good times roll - - let your hair down - - let's talk turkey - - letter perfect - - lick your wounds - - lies like a rug - - life's a bitch - - life's a grind - - light at the end of the tunnel - - lighter than a feather - - lighter than air - - like clockwork - - like father like son - - like taking candy from a baby - - like there's no tomorrow - - lion's share - - live and learn - - live and let live - - long and short of it - - long lost love - - look before you leap - - look down your nose - - look what the cat dragged in - - looking a gift horse in the mouth - - looks like death warmed over - - loose cannon - - lose your head - - lose your temper - - loud as a horn - - lounge lizard - - loved and lost - - low man on the totem pole - - luck of the draw - - luck of the Irish - - make hay while the sun shines - - make money hand over fist - - make my day - - make the best of a bad situation - - make the best of it - - make your blood boil - - man of few words - - man's best friend - - mark my words - - meaningful dialogue - - missed the boat on that one - - moment in the sun - - moment of glory - - moment of truth - - money to burn - - more power to you - - more than one way to skin a cat - - movers and shakers - - moving experience - - naked as a jaybird - - naked truth - - neat as a pin - - needle in a haystack - - needless to say - - neither here nor there - - never look back - - never say never - - nip and tuck - - nip it in the bud - - no guts, no glory - - no love lost - - no pain, no gain - - no skin off my back - - no stone unturned - - no time like the present - - no use crying over spilled milk - - nose to the grindstone - - not a hope in hell - - not a minute's peace - - not in my backyard - - not playing with a full deck - - not the end of the world - - not written in stone - - nothing to sneeze at - - nothing ventured nothing gained - - now we're cooking - - off the top of my head - - off the wagon - - off the wall - - old hat - - older and wiser - - older than dirt - - older than Methuselah - - on a roll - - on cloud nine - - on pins and needles - - on the bandwagon - - on the money - - on the nose - - on the rocks - - on the spot - - on the tip of my tongue - - on the wagon - - on thin ice - - once bitten, twice shy - - one bad apple doesn't spoil the bushel - - one born every minute - - one brick short - - one foot in the grave - - one in a million - - one red cent - - only game in town - - open a can of worms - - open and shut case - - open the flood gates - - opportunity doesn't knock twice - - out of pocket - - out of sight, out of mind - - out of the frying pan into the fire - - out of the woods - - out on a limb - - over a barrel - - over the hump - - pain and suffering - - pain in the - - panic button - - par for the course - - part and parcel - - party pooper - - pass the buck - - patience is a virtue - - pay through the nose - - penny pincher - - perfect storm - - pig in a poke - - pile it on - - pillar of the community - - pin your hopes on - - pitter patter of little feet - - plain as day - - plain as the nose on your face - - play by the rules - - play your cards right - - playing the field - - playing with fire - - pleased as punch - - plenty of fish in the sea - - point with pride - - poor as a church mouse - - pot calling the kettle black - - pretty as a picture - - pull a fast one - - pull your punches - - pulling your leg - - pure as the driven snow - - put it in a nutshell - - put one over on you - - put the cart before the horse - - put the pedal to the metal - - put your best foot forward - - put your foot down - - quick as a bunny - - quick as a lick - - quick as a wink - - quick as lightning - - quiet as a dormouse - - rags to riches - - raining buckets - - raining cats and dogs - - rank and file - - rat race - - reap what you sow - - red as a beet - - red herring - - reinvent the wheel - - rich and famous - - rings a bell - - ripe old age - - ripped me off - - rise and shine - - road to hell is paved with good intentions - - rob Peter to pay Paul - - roll over in the grave - - rub the wrong way - - ruled the roost - - running in circles - - sad but true - - sadder but wiser - - salt of the earth - - scared stiff - - scared to death - - sealed with a kiss - - second to none - - see eye to eye - - seen the light - - seize the day - - set the record straight - - set the world on fire - - set your teeth on edge - - sharp as a tack - - shoot for the moon - - shoot the breeze - - shot in the dark - - shoulder to the wheel - - sick as a dog - - sigh of relief - - signed, sealed, and delivered - - sink or swim - - six of one, half a dozen of another - - skating on thin ice - - slept like a log - - slinging mud - - slippery as an eel - - slow as molasses - - smart as a whip - - smooth as a baby's bottom - - sneaking suspicion - - snug as a bug in a rug - - sow wild oats - - spare the rod, spoil the child - - speak of the devil - - spilled the beans - - spinning your wheels - - spitting image of - - spoke with relish - - spread like wildfire - - spring to life - - squeaky wheel gets the grease - - stands out like a sore thumb - - start from scratch - - stick in the mud - - still waters run deep - - stitch in time - - stop and smell the roses - - straight as an arrow - - straw that broke the camel's back - - strong as an ox - - stubborn as a mule - - stuff that dreams are made of - - stuffed shirt - - sweating blood - - sweating bullets - - take a load off - - take one for the team - - take the bait - - take the bull by the horns - - take the plunge - - takes one to know one - - takes two to tango - - the more the merrier - - the real deal - - the real McCoy - - the red carpet treatment - - the same old story - - there is no accounting for taste - - thick as a brick - - thick as thieves - - thin as a rail - - think outside of the box - - third time's the charm - - this day and age - - this hurts me worse than it hurts you - - this point in time - - three sheets to the wind - - through thick and thin - - throw in the towel - - tie one on - - tighter than a drum - - time and time again - - time is of the essence - - tip of the iceberg - - tired but happy - - to coin a phrase - - to each his own - - to make a long story short - - to the best of my knowledge - - toe the line - - tongue in cheek - - too good to be true - - too hot to handle - - too numerous to mention - - touch with a ten foot pole - - tough as nails - - trial and error - - trials and tribulations - - tried and true - - trip down memory lane - - twist of fate - - two cents worth - - two peas in a pod - - ugly as sin - - under the counter - - under the gun - - under the same roof - - under the weather - - until the cows come home - - unvarnished truth - - up the creek - - uphill battle - - upper crust - - upset the applecart - - vain attempt - - vain effort - - vanquish the enemy - - vested interest - - waiting for the other shoe to drop - - wakeup call - - warm welcome - - watch your p's and q's - - watch your tongue - - watching the clock - - water under the bridge - - weather the storm - - weed them out - - week of Sundays - - went belly up - - wet behind the ears - - what goes around comes around - - what you see is what you get - - when it rains, it pours - - when push comes to shove - - when the cat's away - - when the going gets tough, the tough get going - - white as a sheet - - whole ball of wax - - whole hog - - whole nine yards - - wild goose chase - - will wonders never cease? - - wisdom of the ages - - wise as an owl - - wolf at the door - - words fail me - - work like a dog - - world weary - - worst nightmare - - worth its weight in gold - - wrong side of the bed - - yanking your chain - - yappy as a dog - - years young - - you are what you eat - - you can run but you can't hide - - you only live once - - you're the boss - - young and foolish - - young and vibrant diff --git a/vale/styles/write-good/E-Prime.yml b/vale/styles/write-good/E-Prime.yml deleted file mode 100644 index 074a102..0000000 --- a/vale/styles/write-good/E-Prime.yml +++ /dev/null @@ -1,32 +0,0 @@ -extends: existence -message: "Try to avoid using '%s'." -ignorecase: true -level: suggestion -tokens: - - am - - are - - aren't - - be - - been - - being - - he's - - here's - - here's - - how's - - i'm - - is - - isn't - - it's - - she's - - that's - - there's - - they're - - was - - wasn't - - we're - - were - - weren't - - what's - - where's - - who's - - you're diff --git a/vale/styles/write-good/Illusions.yml b/vale/styles/write-good/Illusions.yml deleted file mode 100644 index b4f1321..0000000 --- a/vale/styles/write-good/Illusions.yml +++ /dev/null @@ -1,11 +0,0 @@ -extends: repetition -message: "'%s' is repeated!" -level: warning -alpha: true -action: - name: edit - params: - - truncate - - " " -tokens: - - '[^\s]+' diff --git a/vale/styles/write-good/Passive.yml b/vale/styles/write-good/Passive.yml deleted file mode 100644 index f472cb9..0000000 --- a/vale/styles/write-good/Passive.yml +++ /dev/null @@ -1,183 +0,0 @@ -extends: existence -message: "'%s' may be passive voice. Use active voice if you can." -ignorecase: true -level: warning -raw: - - \b(am|are|were|being|is|been|was|be)\b\s* -tokens: - - '[\w]+ed' - - awoken - - beat - - become - - been - - begun - - bent - - beset - - bet - - bid - - bidden - - bitten - - bled - - blown - - born - - bought - - bound - - bred - - broadcast - - broken - - brought - - built - - burnt - - burst - - cast - - caught - - chosen - - clung - - come - - cost - - crept - - cut - - dealt - - dived - - done - - drawn - - dreamt - - driven - - drunk - - dug - - eaten - - fallen - - fed - - felt - - fit - - fled - - flown - - flung - - forbidden - - foregone - - forgiven - - forgotten - - forsaken - - fought - - found - - frozen - - given - - gone - - gotten - - ground - - grown - - heard - - held - - hidden - - hit - - hung - - hurt - - kept - - knelt - - knit - - known - - laid - - lain - - leapt - - learnt - - led - - left - - lent - - let - - lighted - - lost - - made - - meant - - met - - misspelt - - mistaken - - mown - - overcome - - overdone - - overtaken - - overthrown - - paid - - pled - - proven - - put - - quit - - read - - rid - - ridden - - risen - - run - - rung - - said - - sat - - sawn - - seen - - sent - - set - - sewn - - shaken - - shaven - - shed - - shod - - shone - - shorn - - shot - - shown - - shrunk - - shut - - slain - - slept - - slid - - slit - - slung - - smitten - - sold - - sought - - sown - - sped - - spent - - spilt - - spit - - split - - spoken - - spread - - sprung - - spun - - stolen - - stood - - stridden - - striven - - struck - - strung - - stuck - - stung - - stunk - - sung - - sunk - - swept - - swollen - - sworn - - swum - - swung - - taken - - taught - - thought - - thrived - - thrown - - thrust - - told - - torn - - trodden - - understood - - upheld - - upset - - wed - - wept - - withheld - - withstood - - woken - - won - - worn - - wound - - woven - - written - - wrung diff --git a/vale/styles/write-good/README.md b/vale/styles/write-good/README.md deleted file mode 100644 index 3edcc9b..0000000 --- a/vale/styles/write-good/README.md +++ /dev/null @@ -1,27 +0,0 @@ -Based on [write-good](https://github.com/btford/write-good). - -> Naive linter for English prose for developers who can't write good and wanna learn to do other stuff good too. - -``` -The MIT License (MIT) - -Copyright (c) 2014 Brian Ford - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/vale/styles/write-good/So.yml b/vale/styles/write-good/So.yml deleted file mode 100644 index e57f099..0000000 --- a/vale/styles/write-good/So.yml +++ /dev/null @@ -1,5 +0,0 @@ -extends: existence -message: "Don't start a sentence with '%s'." -level: error -raw: - - '(?:[;-]\s)so[\s,]|\bSo[\s,]' diff --git a/vale/styles/write-good/ThereIs.yml b/vale/styles/write-good/ThereIs.yml deleted file mode 100644 index 8b82e8f..0000000 --- a/vale/styles/write-good/ThereIs.yml +++ /dev/null @@ -1,6 +0,0 @@ -extends: existence -message: "Don't start a sentence with '%s'." -ignorecase: false -level: error -raw: - - '(?:[;-]\s)There\s(is|are)|\bThere\s(is|are)\b' diff --git a/vale/styles/write-good/Weasel.yml b/vale/styles/write-good/Weasel.yml deleted file mode 100644 index d1d90a7..0000000 --- a/vale/styles/write-good/Weasel.yml +++ /dev/null @@ -1,29 +0,0 @@ -extends: existence -message: "'%s' is a weasel word!" -ignorecase: true -level: warning -tokens: - - clearly - - completely - - exceedingly - - excellent - - extremely - - fairly - - huge - - interestingly - - is a number - - largely - - mostly - - obviously - - quite - - relatively - - remarkably - - several - - significantly - - substantially - - surprisingly - - tiny - - usually - - various - - vast - - very diff --git a/vale/styles/write-good/meta.json b/vale/styles/write-good/meta.json deleted file mode 100644 index a115d28..0000000 --- a/vale/styles/write-good/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "feed": "https://github.com/errata-ai/write-good/releases.atom", - "vale_version": ">=1.0.0" -} From 2ce30009b28135e589ded3a0cdf5b82bb7c2fba7 Mon Sep 17 00:00:00 2001 From: Lukas Bindreiter Date: Tue, 8 Jul 2025 14:47:34 +0200 Subject: [PATCH 4/8] Add write-good vale style to gitignore --- .gitignore | 1 - .pre-commit-config.yaml | 2 +- vale/styles/.gitignore | 2 ++ 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 vale/styles/.gitignore diff --git a/.gitignore b/.gitignore index c85c9e4..e43b0f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -vale/styles/Google .DS_Store diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6882b72..14035df 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,5 @@ repos: - repo: https://github.com/errata-ai/vale - rev: v3.9.6 + rev: v3.12.0 hooks: - id: vale diff --git a/vale/styles/.gitignore b/vale/styles/.gitignore new file mode 100644 index 0000000..41ae1c3 --- /dev/null +++ b/vale/styles/.gitignore @@ -0,0 +1,2 @@ +Google +write-good From 0d77a294708e54ecade1e06ca752a36cdf78af42 Mon Sep 17 00:00:00 2001 From: Lukas Bindreiter Date: Tue, 8 Jul 2025 14:58:56 +0200 Subject: [PATCH 5/8] Move vale config to .github subdirectory --- {vale => .github}/styles/.gitignore | 0 {vale => .github}/styles/config/vocabularies/docs/accept.txt | 0 {vale => .github}/styles/config/vocabularies/docs/reject.txt | 0 {vale => .github}/styles/docs/TooWordy.yml | 0 {vale => .github}/styles/docs/capitalization.yml | 0 {vale => .github}/styles/docs/double-spaces.yml | 0 {vale => .github}/styles/docs/empty-lines.yml | 0 {vale => .github}/styles/docs/horizontal-line.yml | 0 {vale => .github}/styles/docs/trailing-space.yml | 0 {vale => .github}/styles/docs/word-choice.yml | 0 .github/workflows/lint.yml | 1 + .vale.ini | 2 +- 12 files changed, 2 insertions(+), 1 deletion(-) rename {vale => .github}/styles/.gitignore (100%) rename {vale => .github}/styles/config/vocabularies/docs/accept.txt (100%) rename {vale => .github}/styles/config/vocabularies/docs/reject.txt (100%) rename {vale => .github}/styles/docs/TooWordy.yml (100%) rename {vale => .github}/styles/docs/capitalization.yml (100%) rename {vale => .github}/styles/docs/double-spaces.yml (100%) rename {vale => .github}/styles/docs/empty-lines.yml (100%) rename {vale => .github}/styles/docs/horizontal-line.yml (100%) rename {vale => .github}/styles/docs/trailing-space.yml (100%) rename {vale => .github}/styles/docs/word-choice.yml (100%) diff --git a/vale/styles/.gitignore b/.github/styles/.gitignore similarity index 100% rename from vale/styles/.gitignore rename to .github/styles/.gitignore diff --git a/vale/styles/config/vocabularies/docs/accept.txt b/.github/styles/config/vocabularies/docs/accept.txt similarity index 100% rename from vale/styles/config/vocabularies/docs/accept.txt rename to .github/styles/config/vocabularies/docs/accept.txt diff --git a/vale/styles/config/vocabularies/docs/reject.txt b/.github/styles/config/vocabularies/docs/reject.txt similarity index 100% rename from vale/styles/config/vocabularies/docs/reject.txt rename to .github/styles/config/vocabularies/docs/reject.txt diff --git a/vale/styles/docs/TooWordy.yml b/.github/styles/docs/TooWordy.yml similarity index 100% rename from vale/styles/docs/TooWordy.yml rename to .github/styles/docs/TooWordy.yml diff --git a/vale/styles/docs/capitalization.yml b/.github/styles/docs/capitalization.yml similarity index 100% rename from vale/styles/docs/capitalization.yml rename to .github/styles/docs/capitalization.yml diff --git a/vale/styles/docs/double-spaces.yml b/.github/styles/docs/double-spaces.yml similarity index 100% rename from vale/styles/docs/double-spaces.yml rename to .github/styles/docs/double-spaces.yml diff --git a/vale/styles/docs/empty-lines.yml b/.github/styles/docs/empty-lines.yml similarity index 100% rename from vale/styles/docs/empty-lines.yml rename to .github/styles/docs/empty-lines.yml diff --git a/vale/styles/docs/horizontal-line.yml b/.github/styles/docs/horizontal-line.yml similarity index 100% rename from vale/styles/docs/horizontal-line.yml rename to .github/styles/docs/horizontal-line.yml diff --git a/vale/styles/docs/trailing-space.yml b/.github/styles/docs/trailing-space.yml similarity index 100% rename from vale/styles/docs/trailing-space.yml rename to .github/styles/docs/trailing-space.yml diff --git a/vale/styles/docs/word-choice.yml b/.github/styles/docs/word-choice.yml similarity index 100% rename from vale/styles/docs/word-choice.yml rename to .github/styles/docs/word-choice.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 17e6907..e88db50 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,6 +19,7 @@ jobs: with: fail_on_error: true version: 3.2.0 + reporter: github-check docs-quality: name: Check docs standards runs-on: ubuntu-latest diff --git a/.vale.ini b/.vale.ini index 166356d..8c05a33 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,4 +1,4 @@ -StylesPath = "vale/styles" +StylesPath = ".github/styles" Vocab = docs Packages = Google, write-good From de230232dd3dd511f7de92a1d1bcdcbd0ea8372e Mon Sep 17 00:00:00 2001 From: Lukas Bindreiter Date: Tue, 8 Jul 2025 15:07:25 +0200 Subject: [PATCH 6/8] Run vale manually --- .github/workflows/lint.yml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index e88db50..73c3a11 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -9,17 +9,20 @@ jobs: - uses: actions/checkout@v4 with: lfs: true + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ">=1.24" - name: Setup Node uses: actions/setup-node@v4 with: node-version: 22 + - name: Install Vale + run: go install github.com/errata-ai/vale@v3.12.0 - name: Install MDX preprocessor run: npm install -g mdx2vast - - uses: errata-ai/vale-action@reviewdog - with: - fail_on_error: true - version: 3.2.0 - reporter: github-check + - name: Run vale + run: vale sync && vale . docs-quality: name: Check docs standards runs-on: ubuntu-latest From 08557fb527c4109e2ab8137760d2d8f7d48c2aea Mon Sep 17 00:00:00 2001 From: Lukas Bindreiter Date: Tue, 8 Jul 2025 15:14:22 +0200 Subject: [PATCH 7/8] Install precompiled vale --- .github/workflows/lint.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 73c3a11..dcda5f7 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -9,16 +9,16 @@ jobs: - uses: actions/checkout@v4 with: lfs: true - - name: Setup Go - uses: actions/setup-go@v5 - with: - go-version: ">=1.24" + - name: Install Vale + run: | + VALE_URL="https://github.com/errata-ai/vale/releases/download/v3.12.0/vale_3.12.0_Linux_64-bit.tar.gz" + curl -L "$VALE_URL" -o vale.tar.gz + tar -xzf vale.tar.gz + mv vale /usr/local/bin/ - name: Setup Node uses: actions/setup-node@v4 with: node-version: 22 - - name: Install Vale - run: go install github.com/errata-ai/vale@v3.12.0 - name: Install MDX preprocessor run: npm install -g mdx2vast - name: Run vale From 5a20b271e010e7d7d5d0cc369f6462cba98761dc Mon Sep 17 00:00:00 2001 From: Lukas Bindreiter Date: Tue, 8 Jul 2025 15:17:21 +0200 Subject: [PATCH 8/8] Make field names as code --- guides/datasets/ingest.mdx | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/guides/datasets/ingest.mdx b/guides/datasets/ingest.mdx index f4d2179..01fb045 100644 --- a/guides/datasets/ingest.mdx +++ b/guides/datasets/ingest.mdx @@ -108,18 +108,18 @@ Now, to match the given MODIS dataset, you'll specify the following fields: | Field | Type | Note | | --- | --- | --- | -| granule_name | string | MODIS granule name | -| geometry | Geometry | Tile boundary coordinates of the granule | -| end_time | Timestamp | Measurement end time | -| horizontal_tile_number | int64 | Horizontal modis tile number (0-35) | -| vertical_tile_number | int64 | Vertical modis tile number (0-17) | -| tile_id | int64 | Modis Tile ID | -| file_size | uint64 | File size of the product in bytes | -| checksum | string | Hash checksum of the file | -| checksum_type | string | Checksum algorithm (MD5 / CKSUM) | -| day_night_flag | int64 | Day / Night / Both | -| browse_granule_id | string | Optional granule ID for browsing | -| published_at | Timestamp | The time the product was published | +| `granule_name` | string | MODIS granule name | +| `geometry` | Geometry | Tile boundary coordinates of the granule | +| `end_time` | Timestamp | Measurement end time | +| `horizontal_tile_number` | int64 | Horizontal modis tile number (0-35) | +| `vertical_tile_number` | int64 | Vertical modis tile number (0-17) | +| `tile_id` | int64 | Modis Tile ID | +| `file_size` | uint64 | File size of the product in bytes | +| `checksum` | string | Hash checksum of the file | +| `checksum_type` | string | Checksum algorithm (MD5 / CKSUM) | +| `day_night_flag` | int64 | Day / Night / Both | +| `browse_granule_id` | string | Optional granule ID for browsing | +| `published_at` | Timestamp | The time the product was published | In the console, this will look like the following: