1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 pythonOlder,
6
7 # build-system
8 pdm-backend,
9
10 # dependencies
11 fastapi-cli,
12 starlette,
13 pydantic,
14 typing-extensions,
15
16 # tests
17 dirty-equals,
18 flask,
19 inline-snapshot,
20 passlib,
21 pyjwt,
22 pytest-asyncio,
23 pytestCheckHook,
24 sqlalchemy,
25 trio,
26
27 # optional-dependencies
28 httpx,
29 jinja2,
30 python-multipart,
31 itsdangerous,
32 pyyaml,
33 ujson,
34 orjson,
35 email-validator,
36 uvicorn,
37 pydantic-settings,
38 pydantic-extra-types,
39}:
40
41buildPythonPackage rec {
42 pname = "fastapi";
43 version = "0.115.3";
44 pyproject = true;
45
46 disabled = pythonOlder "3.7";
47
48 src = fetchFromGitHub {
49 owner = "tiangolo";
50 repo = "fastapi";
51 rev = "refs/tags/${version}";
52 hash = "sha256-JIaPgZVbz887liVwd3YtubJm+L4tFCM9Jcn9/smjiKo=";
53 };
54
55 build-system = [ pdm-backend ];
56
57 pythonRelaxDeps = [
58 "anyio"
59 "starlette"
60 ];
61
62 dependencies = [
63 fastapi-cli
64 starlette
65 pydantic
66 typing-extensions
67 ];
68
69 optional-dependencies.all =
70 [
71 httpx
72 jinja2
73 python-multipart
74 itsdangerous
75 pyyaml
76 ujson
77 orjson
78 email-validator
79 uvicorn
80 ]
81 ++ lib.optionals (lib.versionAtLeast pydantic.version "2") [
82 pydantic-settings
83 pydantic-extra-types
84 ]
85 ++ uvicorn.optional-dependencies.standard;
86
87 nativeCheckInputs = [
88 dirty-equals
89 flask
90 inline-snapshot
91 passlib
92 pyjwt
93 pytestCheckHook
94 pytest-asyncio
95 trio
96 sqlalchemy
97 ] ++ optional-dependencies.all;
98
99 pytestFlagsArray = [
100 # ignoring deprecation warnings to avoid test failure from
101 # tests/test_tutorial/test_testing/test_tutorial001.py
102 "-W ignore::DeprecationWarning"
103 "-W ignore::pytest.PytestUnraisableExceptionWarning"
104 ];
105
106 disabledTests = [
107 # Coverage test
108 "test_fastapi_cli"
109 ];
110
111 disabledTestPaths = [
112 # Don't test docs and examples
113 "docs_src"
114 "tests/test_tutorial/test_sql_databases"
115 ];
116
117 pythonImportsCheck = [ "fastapi" ];
118
119 meta = with lib; {
120 changelog = "https://github.com/fastapi/fastapi/releases/tag/${version}";
121 description = "Web framework for building APIs";
122 homepage = "https://github.com/fastapi/fastapi";
123 license = licenses.mit;
124 maintainers = with maintainers; [ wd15 ];
125 };
126}