Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.

## [Unreleased]

- Extend create_stac, include include fiboa data
- Publish command; skip hidden files, generate better texts
- Fix to vecorel: converter.license and provider should be string
- Added a Dockerfile to simplify working with fiboa
Expand Down
21 changes: 21 additions & 0 deletions fiboa_cli/create_stac.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import click
from geopandas import GeoDataFrame
from vecorel_cli.cli.options import JSON_INDENT, VECOREL_FILE_ARG, VECOREL_TARGET_CONSOLE
from vecorel_cli.create_stac import CreateStacCollection
from vecorel_cli.registry import VecorelRegistry
from vecorel_cli.vecorel.collection import Collection

from fiboa_cli.fiboa.version import get_versions


class CreateFiboaStacCollection(CreateStacCollection):
Expand All @@ -24,3 +29,19 @@ def get_cli_args():
# todo: allow additional parameters for missing data in the collection?
# https://stackoverflow.com/questions/36513706/python-click-pass-unspecified-number-of-kwargs
}

def create(self, collection: Collection, gdf: GeoDataFrame, *args, **kwargs) -> dict:
data = super().create(collection, gdf, *args, **kwargs)
vecorel = VecorelRegistry()
data["assets"]["data"]["processing:software"].setdefault(
vecorel.name, vecorel.get_version()
)
schemas = collection.get_schemas()
vecorel_version, _, fiboa_version, _, extensions = get_versions(
next(iter(schemas.values()))
)
data["fiboa_version"] = fiboa_version
data.setdefault("vecorel_version", vecorel_version)
data.setdefault("vecorel_extensions", {k: list(v) for k, v in schemas.items()})

return data
4 changes: 2 additions & 2 deletions fiboa_cli/publish.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
from vecorel_cli.cli.options import VECOREL_TARGET
from vecorel_cli.convert import ConvertData
from vecorel_cli.converters import Converters
from vecorel_cli.create_stac import CreateStacCollection
from vecorel_cli.encoding.auto import create_encoding
from vecorel_cli.validate import ValidateData

from .create_stac import CreateFiboaStacCollection
from .registry import Registry

STAC_EXTENSION = "https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json"
Expand Down Expand Up @@ -364,7 +364,7 @@ def create_stac_collection(self, target, file_name, parquet_file, stac_file):

self.success(f"Creating STAC collection.json for {parquet_file}")
p_stac.parent.mkdir(exist_ok=True)
CreateStacCollection().create_cli(parquet_file, stac_file)
CreateFiboaStacCollection().create_cli(parquet_file, stac_file)

Path(target, "stac").mkdir(parents=True, exist_ok=True)
data = json.load(open(stac_file, "r"))
Expand Down
18 changes: 16 additions & 2 deletions tests/data-files/stac-collection.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,23 @@
"data": {
"roles": ["data"],
"href": "file://C:/Dev/fiboa-cli/tests/data-files/fiboa-example.json",
"processing:software": { "fiboa-cli": "0.20.3" },
"processing:software": {
"fiboa-cli": "0.20.1",
"vecorel-cli": "0.2.3"
},
"type": "application/geo+json"
}
},
"links": []
"links": [],
"fiboa_version": "0.3.0",
"vecorel_version": "0.1.0",
"vecorel_extensions": {
"de_nrw": [
"https://fiboa.org/crop-extension/v0.2.0/schema.yaml",
"https://fiboa.org/flik-extension/v0.2.0/schema.yaml",
"https://vecorel.org/specification/v0.1.0/schema.yaml",
"https://vecorel.org/administrative-division-extension/v0.1.0/schema.yaml",
"https://fiboa.org/specification/v0.3.0/schema.yaml"
]
}
}
39 changes: 19 additions & 20 deletions tests/test_create_stac.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,29 @@ def test_create_stac_collection(tmp_folder: Path):

created_file = load_file(out_file)
expected = load_file(expected_file)

assert isinstance(created_file, dict), "Created file is not a valid JSON dict"

def pop_path(*args, value=None):
c, e = created_file, expected
for index, arg in enumerate(args):
assert arg in c, f"{arg} not in created stac {c}"
assert arg in e, f"{arg} not in expected {e}"
method = dict.pop if index == len(args) - 1 else dict.get
c, e = method(c, arg), method(e, arg)
if value is not None:
assert c == value, f"{c} != {value}"

# Cater for environment differences in paths
assert "assets" in created_file
assert "data" in created_file["assets"]
assert "href" in created_file["assets"]["data"]
del created_file["assets"]["data"]["href"]
del expected["assets"]["data"]["href"]
pop_path("assets", "data", "href")

# Cater for floating point differences
assert "extent" in created_file
assert "spatial" in created_file["extent"]
assert "bbox" in created_file["extent"]["spatial"]
del created_file["extent"]["spatial"]["bbox"]
del expected["extent"]["spatial"]["bbox"]
pop_path("extent", "spatial", "bbox")

# Cater for differences in version numbers
assert "assets" in created_file
assert "data" in created_file["assets"]
assert "processing:software" in created_file["assets"]["data"]
assert "fiboa-cli" in created_file["assets"]["data"]["processing:software"]
assert (
created_file["assets"]["data"]["processing:software"]["fiboa-cli"] == Registry.get_version()
)
del created_file["assets"]["data"]["processing:software"]["fiboa-cli"]
del expected["assets"]["data"]["processing:software"]["fiboa-cli"]
pop_path("assets", "data", "processing:software", "fiboa-cli", value=Registry.get_version())
pop_path("assets", "data", "processing:software", "vecorel-cli")

created_file["vecorel_extensions"]["de_nrw"].sort()
expected["vecorel_extensions"]["de_nrw"].sort()

assert created_file == expected
Loading