package.nix (4067B)
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 = "1.2.0"; 16 17 src = fetchFromGitHub { 18 owner = "developmentseed"; 19 repo = "titiler"; 20 tag = version; 21 hash = "sha256-SisZc/m3id+E6lGwPsTSezfw2atMop3APYZVXK3LPPI="; 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 dependencies = with python3Packages; [ 40 fastapi 41 geojson-pydantic 42 jinja2 43 numpy 44 pydantic 45 rasterio 46 rio-tiler 47 morecantile 48 simplejson 49 typing-extensions 50 ]; 51 52 optional-dependencies = { 53 telemetry = with python3Packages; [ 54 opentelemetry-api 55 opentelemetry-sdk 56 opentelemetry-instrumentation-fastapi 57 opentelemetry-instrumentation-logging 58 opentelemetry-exporter-otlp 59 ]; 60 }; 61 62 nativeCheckInputs = [ 63 python3Packages.pytestCheckHook 64 ] 65 ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies); 66 }); 67 68 titiler-extensions = python3Packages.buildPythonPackage (finalAttrs: { 69 inherit version src meta; 70 pname = "${pname}.extensions"; 71 sourceRoot = "${src.name}/src/titiler/extensions"; 72 pyproject = true; 73 74 build-system = with python3Packages; [ hatchling ]; 75 76 dependencies = [ titiler-core ]; 77 78 optional-dependencies = { 79 cogeo = [ rio-cogeo ]; 80 stac = [ python3Packages.rio-stac ]; 81 }; 82 83 nativeCheckInputs = 84 with python3Packages; 85 [ 86 jsonschema 87 owslib 88 pytestCheckHook 89 ] 90 ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies); 91 92 disabledTests = [ 93 "test_stacExtension" # requires network 94 ]; 95 }); 96 97 titiler-mosaic = python3Packages.buildPythonPackage (finalAttrs: { 98 inherit version src meta; 99 pname = "${pname}.mosaic"; 100 sourceRoot = "${src.name}/src/titiler/mosaic"; 101 pyproject = true; 102 103 build-system = with python3Packages; [ hatchling ]; 104 105 dependencies = [ 106 cogeo-mosaic 107 titiler-core 108 ]; 109 110 optional-dependencies = { 111 mosaicjson = [ cogeo-mosaic ]; 112 }; 113 114 nativeCheckInputs = 115 with python3Packages; 116 [ 117 owslib 118 pytestCheckHook 119 ] 120 ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies); 121 }); 122 in 123 python3Packages.buildPythonPackage (finalAttrs: { 124 inherit 125 pname 126 version 127 src 128 meta 129 ; 130 sourceRoot = "${src.name}/src/titiler/application"; 131 pyproject = true; 132 133 build-system = with python3Packages; [ hatchling ]; 134 135 nativeBuildInputs = [ makeWrapper ]; 136 137 dependencies = with python3Packages; [ 138 pydantic-settings 139 starlette-cramjam 140 titiler-core 141 titiler-core.optional-dependencies.telemetry 142 titiler-extensions 143 titiler-extensions.optional-dependencies.cogeo 144 titiler-extensions.optional-dependencies.stac 145 titiler-mosaic 146 titiler-mosaic.optional-dependencies.mosaicjson 147 ]; 148 149 nativeCheckInputs = with python3Packages; [ 150 boto3 151 pytestCheckHook 152 ]; 153 154 disabledTests = [ 155 "test_mosaic_auth_error" # requires network 156 ]; 157 158 postInstall = 159 let 160 start_script = writeShellScript "titiler-serve" '' 161 ${lib.getExe python3Packages.uvicorn} "$@" titiler.application.main:app; 162 ''; 163 in 164 '' 165 makeWrapper ${start_script} $out/bin/titiler-serve \ 166 --prefix PYTHONPATH : "$out/${python3Packages.python.sitePackages}" \ 167 --prefix PYTHONPATH : "${python3Packages.makePythonPath finalAttrs.passthru.dependencies}"; 168 ''; 169 })
