55import pathlib
66import warnings
77import xml .etree .ElementTree as ET
8- from dataclasses import dataclass
98from enum import Enum
109from io import BytesIO
1110from typing import Dict , Optional , Type
1211from unittest .mock import patch
1312from urllib .parse import urlencode
1413
15- import attr
1614import httpx
1715import morecantile
1816import numpy
1917import pytest
18+ from attrs import define , field
2019from fastapi import Depends , FastAPI , HTTPException , Path , Query , security , status
2120from morecantile .defaults import TileMatrixSets
2221from rasterio .crs import CRS
3130from titiler .core .errors import DEFAULT_STATUS_CODES , add_exception_handlers
3231from titiler .core .factory import (
3332 AlgorithmFactory ,
34- BaseTilerFactory ,
33+ BaseFactory ,
3534 ColorMapFactory ,
3635 MultiBandTilerFactory ,
3736 MultiBaseTilerFactory ,
4948def test_TilerFactory ():
5049 """Test TilerFactory class."""
5150 cog = TilerFactory ()
52- assert len (cog .router .routes ) == 27
51+ assert len (cog .router .routes ) == 20
5352 assert len (cog .supported_tms .list ()) == NB_DEFAULT_TMS
5453
5554 cog = TilerFactory (router_prefix = "something" , supported_tms = WEB_TMS )
@@ -76,7 +75,7 @@ def test_TilerFactory():
7675 assert response .status_code == 422
7776
7877 cog = TilerFactory (add_preview = False , add_part = False , add_viewer = False )
79- assert len (cog .router .routes ) == 18
78+ assert len (cog .router .routes ) == 12
8079
8180 app = FastAPI ()
8281 cog = TilerFactory ()
@@ -723,7 +722,7 @@ def test_MultiBaseTilerFactory(rio):
723722 rio .open = mock_rasterio_open
724723
725724 stac = MultiBaseTilerFactory (reader = STACReader )
726- assert len (stac .router .routes ) == 29
725+ assert len (stac .router .routes ) == 22
727726
728727 app = FastAPI ()
729728 app .include_router (stac .router )
@@ -1045,20 +1044,20 @@ def test_MultiBaseTilerFactory(rio):
10451044 assert "(B09 - B01) / (B09 + B01)" in props
10461045
10471046
1048- @attr . s
1047+ @define
10491048class BandFileReader (MultiBandReader ):
10501049 """Test MultiBand"""
10511050
1052- input : str = attr . ib ()
1053- tms : morecantile .TileMatrixSet = attr . ib (
1051+ input : str = field ()
1052+ tms : morecantile .TileMatrixSet = field (
10541053 default = morecantile .tms .get ("WebMercatorQuad" )
10551054 )
1056- reader_options : Dict = attr . ib (factory = dict )
1055+ reader_options : Dict = field (factory = dict )
10571056
1058- reader : Type [BaseReader ] = attr . ib (default = Reader )
1057+ reader : Type [BaseReader ] = field (default = Reader )
10591058
1060- minzoom : int = attr . ib ()
1061- maxzoom : int = attr . ib ()
1059+ minzoom : int = field ()
1060+ maxzoom : int = field ()
10621061
10631062 @minzoom .default
10641063 def _minzoom (self ):
@@ -1093,7 +1092,7 @@ def test_MultiBandTilerFactory():
10931092 bands = MultiBandTilerFactory (
10941093 reader = BandFileReader , path_dependency = CustomPathParams
10951094 )
1096- assert len (bands .router .routes ) == 28
1095+ assert len (bands .router .routes ) == 21
10971096
10981097 app = FastAPI ()
10991098 app .include_router (bands .router )
@@ -1465,7 +1464,7 @@ def must_be_bob(credentials: security.HTTPBasicCredentials = Depends(http_basic)
14651464 ],
14661465 router_prefix = "something" ,
14671466 )
1468- assert len (cog .router .routes ) == 27
1467+ assert len (cog .router .routes ) == 20
14691468
14701469 app = FastAPI ()
14711470 app .include_router (cog .router , prefix = "/something" )
@@ -1614,8 +1613,8 @@ def test_algorithm():
16141613def test_path_param_in_prefix ():
16151614 """Test path params in prefix."""
16161615
1617- @dataclass
1618- class EndpointFactory (BaseTilerFactory ):
1616+ @define
1617+ class EndpointFactory (BaseFactory ):
16191618 def register_routes (self ):
16201619 """register endpoints."""
16211620
@@ -1632,7 +1631,7 @@ def route1(param1: int = Path(...), param2: str = Path(...)):
16321631 return {"value" : param2 }
16331632
16341633 app = FastAPI ()
1635- endpoints = EndpointFactory (reader = Reader , router_prefix = "/prefixed/{param1}" )
1634+ endpoints = EndpointFactory (router_prefix = "/prefixed/{param1}" )
16361635 app .include_router (endpoints .router , prefix = "/prefixed/{param1}" )
16371636 client = TestClient (app )
16381637
0 commit comments