package.nix (5052B)
1 { 2 lib, 3 fetchFromGitHub, 4 makeWrapper, 5 writeShellScript, 6 python3Packages, 7 cogeo-mosaic, 8 geojson-pydantic, 9 rio-cogeo, 10 rio-stac, 11 starlette-cramjam, 12 }: 13 let 14 pname = "titiler"; 15 version = "2.0.4"; 16 17 src = fetchFromGitHub { 18 owner = "developmentseed"; 19 repo = "titiler"; 20 tag = version; 21 hash = "sha256-E/i7OT5xWJLQbuIOCGyCj9pGU6cdpykT6/EgyeG0iPk="; 22 }; 23 24 meta = { 25 description = "A modern dynamic tile server built on top of FastAPI and Rasterio/GDAL"; 26 homepage = "https://developmentseed.org/titiler/"; 27 license = lib.licenses.mit; 28 maintainers = [ lib.maintainers.sikmir ]; 29 }; 30 31 titiler-core = python3Packages.buildPythonPackage (finalAttrs: { 32 inherit version src meta; 33 pname = "${pname}.core"; 34 sourceRoot = "${src.name}/src/titiler/core"; 35 pyproject = true; 36 37 build-system = with python3Packages; [ hatchling ]; 38 39 pythonRelaxDeps = true; 40 41 dependencies = with python3Packages; [ 42 fastapi 43 geojson-pydantic 44 jinja2 45 numpy 46 pydantic 47 rasterio 48 rio-tiler 49 morecantile 50 simplejson 51 typing-extensions 52 ]; 53 54 optional-dependencies = { 55 telemetry = with python3Packages; [ 56 opentelemetry-api 57 opentelemetry-sdk 58 opentelemetry-instrumentation-fastapi 59 opentelemetry-instrumentation-logging 60 opentelemetry-exporter-otlp 61 ]; 62 }; 63 64 nativeCheckInputs = [ 65 python3Packages.pytestCheckHook 66 ] 67 ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies); 68 }); 69 70 titiler-extensions = python3Packages.buildPythonPackage (finalAttrs: { 71 inherit version src meta; 72 pname = "${pname}.extensions"; 73 sourceRoot = "${src.name}/src/titiler/extensions"; 74 pyproject = true; 75 76 build-system = with python3Packages; [ hatchling ]; 77 78 dependencies = [ titiler-core ]; 79 80 optional-dependencies = { 81 cogeo = [ rio-cogeo ]; 82 stac = [ python3Packages.rio-stac ]; 83 }; 84 85 nativeCheckInputs = 86 with python3Packages; 87 [ 88 jsonschema 89 owslib 90 pytestCheckHook 91 ] 92 ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies); 93 94 disabledTests = [ 95 "test_stacExtension" # requires network 96 ]; 97 }); 98 99 titiler-mosaic = python3Packages.buildPythonPackage (finalAttrs: { 100 inherit version src meta; 101 pname = "${pname}.mosaic"; 102 sourceRoot = "${src.name}/src/titiler/mosaic"; 103 pyproject = true; 104 105 build-system = with python3Packages; [ hatchling ]; 106 107 dependencies = [ 108 cogeo-mosaic 109 titiler-core 110 ]; 111 112 optional-dependencies = { 113 mosaicjson = [ cogeo-mosaic ]; 114 }; 115 116 nativeCheckInputs = 117 with python3Packages; 118 [ 119 owslib 120 pytestCheckHook 121 ] 122 ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies); 123 }); 124 125 titiler-xarray = python3Packages.buildPythonPackage (finalAttrs: { 126 inherit version src meta; 127 pname = "${pname}.xarray"; 128 sourceRoot = "${src.name}/src/titiler/xarray"; 129 pyproject = true; 130 131 build-system = with python3Packages; [ hatchling ]; 132 133 dependencies = with python3Packages; [ 134 titiler-core 135 xarray 136 rioxarray 137 obstore 138 zarr 139 starlette-cramjam 140 pydantic-settings 141 ]; 142 143 optional-dependencies = { 144 fs = with python3Packages; [ 145 h5netcdf 146 h5py 147 fsspec 148 s3fs 149 aiohttp 150 gcsfs 151 requests 152 ]; 153 }; 154 155 nativeCheckInputs = 156 with python3Packages; 157 [ 158 pytestCheckHook 159 ] 160 ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies); 161 162 disabledTests = [ 163 "test_io_fs_open_dataset" 164 "test_io_open_zarr" 165 ]; 166 }); 167 in 168 python3Packages.buildPythonPackage (finalAttrs: { 169 inherit 170 pname 171 version 172 src 173 meta 174 ; 175 sourceRoot = "${src.name}/src/titiler/application"; 176 pyproject = true; 177 178 build-system = with python3Packages; [ hatchling ]; 179 180 nativeBuildInputs = [ makeWrapper ]; 181 182 dependencies = with python3Packages; [ 183 pydantic-settings 184 starlette-cramjam 185 titiler-core 186 titiler-core.optional-dependencies.telemetry 187 titiler-extensions 188 titiler-extensions.optional-dependencies.cogeo 189 titiler-extensions.optional-dependencies.stac 190 titiler-mosaic 191 titiler-mosaic.optional-dependencies.mosaicjson 192 titiler-xarray 193 titiler-xarray.optional-dependencies.fs 194 ]; 195 196 nativeCheckInputs = with python3Packages; [ 197 boto3 198 pytestCheckHook 199 ]; 200 201 disabledTests = [ 202 "test_mosaic_auth_error" # requires network 203 ]; 204 205 postInstall = 206 let 207 start_script = writeShellScript "titiler-serve" '' 208 ${lib.getExe python3Packages.uvicorn} "$@" titiler.application.main:app; 209 ''; 210 in 211 '' 212 makeWrapper ${start_script} $out/bin/titiler-serve \ 213 --prefix PYTHONPATH : "$out/${python3Packages.python.sitePackages}" \ 214 --prefix PYTHONPATH : "${python3Packages.makePythonPath finalAttrs.passthru.dependencies}"; 215 ''; 216 })
