* exclude `tests/` an `stack/` in titiler python package.
* add `EPSG6933` in TMS
**breaking changes**
* [FACTORY] the `additional_dependency` should be a Callable which return a dict.
python
dataclass type: ignore
class BaseFactory(metaclass=abc.ABCMeta):
"""BaseTiler Factory."""
...
provide custom dependency
additional_dependency: Callable[..., Dict] = field(default=lambda: dict())
python
def AssetsParams(
assets: Optional[str] = Query(
None,
title="Asset indexes",
description="comma (',') delimited asset names (might not be an available options of some readers)",
)
) -> Dict:
"""Assets Dependency."""
kwargs = {}
if assets:
kwargs["assets"] = assets.split(",")
return kwargs
* [FACTORY] remove `_` prefix in factory methods (e.g `_tile` -> `tile`)
* [FACTORY] refactor dependencies to better align with rio_tiler.io.BaseReader method definition.
Example:
In the `metadata`, the `MetadataParams` will be used to pass `pmin` and `pmax` because they are the only
required parameters for the metadata method. All other params will be passed to a `kwargs` dict.
python
dataclass
class MetadataParams(DefaultDependency):
"""Common Metadada parameters."""
Required params
pmin: float = Query(2.0, description="Minimum percentile")
pmax: float = Query(98.0, description="Maximum percentile")
Optional parameters
bidx: Optional[str] = Query(
None, title="Band indexes", description="comma (',') delimited band indexes",
)
...
def __post_init__(self):
"""Post Init."""
if self.bidx is not None:
self.kwargs["indexes"] = tuple(
int(s) for s in re.findall(r"\d+", self.bidx)
)
...
metadata method in factory
def metadata(
src_path=Depends(self.path_dependency),
metadata_params=Depends(self.metadata_dependency),
kwargs: Dict = Depends(self.additional_dependency),
):
"""Return metadata."""
reader = src_path.reader or self.reader
with reader(src_path.url, **self.reader_options) as src_dst:
info = src_dst.metadata(
metadata_params.pmin,
metadata_params.pmax,
**metadata_params.kwargs,
**kwargs,
)
return info
* [FACTORY] refactor dependencies definition
python
dataclass type: ignore
class BaseFactory(metaclass=abc.ABCMeta):
"""BaseTiler Factory."""
reader: default_readers_type = field(default=COGReader)
reader_options: Dict = field(default_factory=dict)
FastAPI router
router: APIRouter = field(default_factory=APIRouter)
Path Dependency
path_dependency: Type[PathParams] = field(default=PathParams)
Rasterio Dataset Options (nodata, unscale, resampling)
dataset_dependency: default_deps_type = field(default=DatasetParams)
Indexes/Expression Dependencies
layer_dependency: default_deps_type = field(default=BidxExprParams)
Image rendering Dependencies
render_dependency: default_deps_type = field(default=RenderParams)
TileMatrixSet dependency
tms_dependency: Callable[..., TileMatrixSet] = WebMercatorTMSParams
provide custom dependency
additional_dependency: Callable[..., Dict] = field(default=lambda: dict())
* remove `PathParams.reader` attribute. This option was not used and would have been technically difficult to use.
python
dataclass
class PathParams:
"""Create dataset path from args"""
url: str = Query(..., description="Dataset URL")