|
1 | 1 | from __future__ import annotations
|
2 | 2 |
|
3 | 3 | import warnings
|
4 |
| -from collections.abc import Iterable |
| 4 | +from collections.abc import Iterable, Sequence |
5 | 5 | from copy import deepcopy
|
6 | 6 | from datetime import datetime, timezone
|
7 | 7 | from typing import (
|
@@ -71,7 +71,7 @@ class SpatialExtent:
|
71 | 71 |
|
72 | 72 | def __init__(
|
73 | 73 | self,
|
74 |
| - bboxes: Bboxes | list[float | int], |
| 74 | + bboxes: Bboxes | Sequence[float | int], |
75 | 75 | extra_fields: dict[str, Any] | None = None,
|
76 | 76 | ) -> None:
|
77 | 77 | if not isinstance(bboxes, list):
|
@@ -199,7 +199,7 @@ class TemporalExtent:
|
199 | 199 |
|
200 | 200 | def __init__(
|
201 | 201 | self,
|
202 |
| - intervals: TemporalIntervals | list[datetime | None], |
| 202 | + intervals: TemporalIntervals | Sequence[datetime | None], |
203 | 203 | extra_fields: dict[str, Any] | None = None,
|
204 | 204 | ):
|
205 | 205 | if not isinstance(intervals, list):
|
@@ -652,7 +652,17 @@ def from_dict(
|
652 | 652 | id = d.pop("id")
|
653 | 653 | description = d.pop("description")
|
654 | 654 | license = d.pop("license")
|
655 |
| - extent = Extent.from_dict(d.pop("extent")) |
| 655 | + if extent_dict := d.pop("extent", None): |
| 656 | + extent = Extent.from_dict(extent_dict) |
| 657 | + else: |
| 658 | + warnings.warn( |
| 659 | + "Collection is missing extent, setting default spatial and " |
| 660 | + "temporal extents" |
| 661 | + ) |
| 662 | + extent = Extent( |
| 663 | + spatial=SpatialExtent([-90, -180, 90, 180]), |
| 664 | + temporal=TemporalExtent([None, None]), |
| 665 | + ) |
656 | 666 | title = d.pop("title", None)
|
657 | 667 | stac_extensions = d.pop("stac_extensions", None)
|
658 | 668 | keywords = d.pop("keywords", None)
|
|
0 commit comments