11"""Common response models."""
22
3- from typing import List , Literal , Optional , Tuple
3+ from typing import Annotated , Dict , List , Literal , Optional , Tuple
44
55from pydantic import BaseModel , Field , model_validator
66
77
8- class TileJSON (BaseModel ):
8+ class LayerJSON (BaseModel ):
9+ """
10+ https://github.com/mapbox/tilejson-spec/tree/master/3.0.0#33-vector_layers
11+ """
12+
13+ id : str
14+ fields : Annotated [Dict , Field (default_factory = dict )]
15+ description : Optional [str ] = None
16+ minzoom : Optional [int ] = None
17+ maxzoom : Optional [int ] = None
18+
19+
20+ class TileJSON (BaseModel , extra = "allow" ):
921 """
1022 TileJSON model.
1123
12- Based on https://github.com/mapbox/tilejson-spec/tree/master/2.2 .0
24+ Based on https://github.com/mapbox/tilejson-spec/tree/master/3.0 .0
1325
1426 """
1527
16- tilejson : str = "2.2 .0"
28+ tilejson : str = "3.0 .0"
1729 name : Optional [str ] = None
1830 description : Optional [str ] = None
1931 version : str = "1.0.0"
@@ -22,11 +34,13 @@ class TileJSON(BaseModel):
2234 legend : Optional [str ] = None
2335 scheme : Literal ["xyz" , "tms" ] = "xyz"
2436 tiles : List [str ]
37+ vector_layers : Optional [List [LayerJSON ]] = None
2538 grids : Optional [List [str ]] = None
2639 data : Optional [List [str ]] = None
27- minzoom : int = Field (0 , ge = 0 , le = 30 )
28- maxzoom : int = Field (30 , ge = 0 , le = 30 )
29- bounds : List [float ] = [- 180 , - 90 , 180 , 90 ]
40+ minzoom : int = Field (0 )
41+ maxzoom : int = Field (30 )
42+ fillzoom : Optional [int ] = None
43+ bounds : List [float ] = [- 180 , - 85.0511287798066 , 180 , 85.0511287798066 ]
3044 center : Optional [Tuple [float , float , int ]] = None
3145
3246 @model_validator (mode = "after" )
0 commit comments