Skip to content

Commit d488926

Browse files
authored
Align readers.tindex & readers.stac with normal FileSpec (PDAL#4740)
* reader args fix * docs update
1 parent 9f1d233 commit d488926

File tree

4 files changed

+26
-16
lines changed

4 files changed

+26
-16
lines changed

doc/stages/readers.stac.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ reader_args
119119

120120
```bash
121121
--readers.stac.reader_args \
122-
'{"type": "readers.copc", "filespec": {"headers": {"your_header_key": "header_val"}, "query": {"your_query_key": "query_val"}}}'
122+
'{"type": "readers.copc", "filename": {"headers": {"your_header_key": "header_val"}, "query": {"your_query_key": "query_val"}}}'
123123
```
124124

125125
catalog_schema_url

doc/stages/readers.tindex.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ reader_args
7676

7777
```bash
7878
--readers.tindex.reader_args \
79-
'{"type": "readers.copc", "filespec": {"headers": {"your_header_key": "header_val"}, "query": {"your_query_key": "query_val"}}}'
79+
'{"type": "readers.copc", "filename": {"headers": {"your_header_key": "header_val"}, "query": {"your_query_key": "query_val"}}}'
8080
```
8181

8282
srs_column

io/TIndexReader.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,26 +123,28 @@ Options setReaderOptions(const NL::json& readerArgs, const std::string& driver,
123123
const std::string& filename)
124124
{
125125
Options readerOptions;
126-
readerOptions.add("filename", filename);
126+
bool filenameSet = false;
127127
if (readerArgs.contains(driver)) {
128128
NL::json args = readerArgs.at(driver).get<NL::json>();
129129
for (auto& arg : args.items()) {
130-
NL::detail::value_t type = readerArgs.at(driver).at(arg.key()).type();
131-
132-
// We treat the partial FileSpec as a special case
133-
if (arg.key() == "file_spec" || arg.key() == "filespec")
130+
if (arg.key() == "filename")
134131
{
135-
NL::json filespecArg = arg.value();
132+
NL::json filespecArg = arg.value().get<NL::json>();
136133
if (!filespecArg.is_object())
137-
throw pdal_error("value for " + driver + "'file_spec' argument " +
138-
" must be a valid JSON object.");
134+
throw pdal_error("Value for " + driver + " 'filename' argument " +
135+
"expected to be a 'FileSpec' JSON object.");
136+
if (filespecArg.contains("path"))
137+
filespecArg.erase("path");
139138
filespecArg += {"path", filename};
140139

141140
// This doesn't check if the driver supports headers/queries: if not,
142141
// the reader will only use the filename
143-
readerOptions.replace("filename", filespecArg.dump());
142+
readerOptions.add("filename", filespecArg.dump());
143+
filenameSet = true;
144144
continue;
145145
}
146+
147+
NL::detail::value_t type = readerArgs.at(driver).at(arg.key()).type();
146148
switch(type)
147149
{
148150
case NL::detail::value_t::string:
@@ -174,6 +176,9 @@ Options setReaderOptions(const NL::json& readerArgs, const std::string& driver,
174176
}
175177
}
176178
}
179+
if (!filenameSet)
180+
readerOptions.add("filename", filename);
181+
177182

178183
return readerOptions;
179184
}

io/private/stac/Item.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ Options Item::setReaderOptions(const NL::json& readerArgs,
139139
const std::string& driver, const std::string& filename) const
140140
{
141141
Options readerOptions;
142-
readerOptions.add("filename", filename);
142+
bool filenameSet = false;
143143
if (readerArgs.contains(driver)) {
144144
NL::json args = jsonValue(readerArgs, driver);
145145
for (auto& arg : args.items())
@@ -148,16 +148,19 @@ Options Item::setReaderOptions(const NL::json& readerArgs,
148148
NL::json val = arg.value();
149149
NL::detail::value_t type = val.type();
150150
// We treat a partial FileSpec as a special case
151-
if (key == "file_spec" || key == "filespec")
151+
if (key == "filename")
152152
{
153153
if (!val.is_object())
154-
throw pdal_error("value for " + driver + "'file_spec' argument " +
155-
" must be a valid JSON object.");
154+
throw pdal_error("Value for " + driver + " 'filename' argument " +
155+
"expected to be a 'FileSpec' JSON object.");
156+
if (val.contains("path"))
157+
val.erase("path");
156158
val += {"path", filename};
157159

158160
// This doesn't check if the driver supports headers/queries: if not,
159161
// the reader will only use the filename
160-
readerOptions.replace("filename", val.dump());
162+
readerOptions.add("filename", val.dump());
163+
filenameSet = true;
161164
continue;
162165
}
163166

@@ -171,6 +174,8 @@ Options Item::setReaderOptions(const NL::json& readerArgs,
171174
readerOptions.add(key, v);
172175
}
173176
}
177+
if (!filenameSet)
178+
readerOptions.add("filename", filename);
174179

175180
return readerOptions;
176181
}

0 commit comments

Comments
 (0)