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