Skip to content

Commit 76d7a9e

Browse files
committed
fix(cli): make geoparquet a feature
1 parent b8d39a1 commit 76d7a9e

File tree

5 files changed

+14
-11
lines changed

5 files changed

+14
-11
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ jobs:
2929
- "-p stac -p stac-api -F geo"
3030
- "-p stac-async"
3131
- "-p stac-cli --no-default-features"
32+
- "-p stac-cli --no-default-features -F geoparquet"
3233
- "-p stac-duckdb -F duckdb/bundled"
3334
- "-p stac-server"
3435
- "-p stac-server -F axum"

cli/Cargo.toml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,20 @@ keywords = ["geospatial", "stac", "metadata", "geo", "raster"]
1111
categories = ["science", "data-structures"]
1212

1313
[features]
14-
default = ["gdal", "pgstac"]
14+
default = ["gdal", "geoparquet", "pgstac"]
1515
duckdb = ["dep:stac-duckdb"]
1616
gdal = ["stac/gdal"]
17+
geoparquet = ["dep:bytes", "stac/geoparquet-compression"]
1718
pgstac = ["stac-server/pgstac"]
1819

1920
[dependencies]
2021
axum = "0.7"
21-
bytes = "1"
22+
bytes = { version = "1", optional = true }
2223
clap = { version = "4", features = ["derive"] }
2324
reqwest = "0.12"
2425
serde = "1"
2526
serde_json = "1"
26-
stac = { version = "0.8", path = "../core", features = [
27-
"geoparquet-compression",
28-
] }
27+
stac = { version = "0.8", path = "../core" }
2928
stac-api = { version = "0.4", path = "../api" }
3029
stac-async = { version = "0.5", path = "../async" }
3130
stac-duckdb = { version = "0.1", path = "../duckdb", optional = true }

cli/src/format.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
use crate::{Error, Result};
2-
use bytes::Bytes;
32
use clap::ValueEnum;
43
use serde::de::DeserializeOwned;
5-
use std::{fs::File, io::Read};
64

75
/// The STAC output format.
86
#[derive(Clone, Copy, Debug, Default, ValueEnum)]
97
pub enum Format {
8+
#[cfg(feature = "geoparquet")]
109
/// stac-geoparquet
1110
Parquet,
1211

@@ -24,11 +23,12 @@ impl Format {
2423
pub(crate) async fn read_href<D: DeserializeOwned>(&self, href: Option<&str>) -> Result<D> {
2524
if let Some(href) = href.and_then(|href| if href == "-" { None } else { Some(href) }) {
2625
match *self {
26+
#[cfg(feature = "geoparquet")]
2727
Format::Parquet => {
2828
let item_collection = if let Some(url) = stac::href_to_url(href) {
2929
stac::geoparquet::from_reader(reqwest::blocking::get(url)?.bytes()?)?
3030
} else {
31-
let file = File::open(href)?;
31+
let file = std::fs::File::open(href)?;
3232
stac::geoparquet::from_reader(file)?
3333
};
3434
serde_json::from_value(serde_json::to_value(item_collection)?)
@@ -38,10 +38,12 @@ impl Format {
3838
}
3939
} else {
4040
match *self {
41+
#[cfg(feature = "geoparquet")]
4142
Format::Parquet => {
43+
use std::io::Read;
4244
let mut buf = Vec::new();
4345
let _ = std::io::stdin().read_to_end(&mut buf)?;
44-
let item_collection = stac::geoparquet::from_reader(Bytes::from(buf))?;
46+
let item_collection = stac::geoparquet::from_reader(bytes::Bytes::from(buf))?;
4547
serde_json::from_value(serde_json::to_value(item_collection)?)
4648
.map_err(Error::from)
4749
}

cli/src/runner.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ where
4646
writeln!(self.writer, "{}", value)?;
4747
}
4848
}
49+
#[cfg(feature = "geoparquet")]
4950
Format::Parquet => {
5051
if let Some(value) = value.to_stac() {
5152
stac::geoparquet::to_writer(&mut self.writer, value)?;

scripts/validate-stac-geoparquet

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def clean_report(report: dict[str, Any]) -> dict[str, Any]:
3737
try:
3838
# Writing
3939
subprocess.check_call(
40-
["cargo", "run", "--no-default-features", "--", "translate", path, parquet_path]
40+
["cargo", "run", "--no-default-features", "-F", "geoparquet", "--", "translate", path, parquet_path]
4141
)
4242
table = pyarrow.parquet.read_table(parquet_path)
4343
after = next(stac_geoparquet.arrow.stac_table_to_items(table))
@@ -55,7 +55,7 @@ try:
5555
table = stac_geoparquet.arrow.parse_stac_items_to_arrow([before])
5656
stac_geoparquet.arrow.to_parquet(table, parquet_path)
5757
item_collection = json.loads(subprocess.check_output(
58-
["cargo", "run", "--no-default-features", "--", "translate", parquet_path]
58+
["cargo", "run", "--no-default-features", "-F", "geoparquet", "--", "translate", parquet_path]
5959
))
6060
assert len(item_collection["features"]) == 1
6161
clean_item(item_collection["features"][0]) # stac-geoparquet writes as a multi-polygon

0 commit comments

Comments
 (0)