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.116.1";
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-sd0SnaxuuF3Zaxx7rffn4ttBpRmWQoOtXln/amx9rII=";
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 fastapi-cli
72 httpx
73 jinja2
74 python-multipart
75 itsdangerous
76 pyyaml
77 ujson
78 orjson
79 email-validator
80 uvicorn
81 ]
82 ++ lib.optionals (lib.versionAtLeast pydantic.version "2") [
83 pydantic-settings
84 pydantic-extra-types
85 ]
86 ++ fastapi-cli.optional-dependencies.standard
87 ++ uvicorn.optional-dependencies.standard;
88 standard = [
89 fastapi-cli
90 httpx
91 jinja2
92 python-multipart
93 email-validator
94 uvicorn
95 ]
96 ++ fastapi-cli.optional-dependencies.standard
97 ++ uvicorn.optional-dependencies.standard;
98 };
99
100 nativeCheckInputs = [
101 anyio
102 dirty-equals
103 flask
104 inline-snapshot
105 passlib
106 pyjwt
107 pytestCheckHook
108 pytest-asyncio
109 trio
110 sqlalchemy
111 ]
112 ++ anyio.optional-dependencies.trio
113 ++ passlib.optional-dependencies.bcrypt
114 ++ optional-dependencies.all;
115
116 pytestFlags = [
117 # ignoring deprecation warnings to avoid test failure from
118 # tests/test_tutorial/test_testing/test_tutorial001.py
119 "-Wignore::DeprecationWarning"
120 "-Wignore::pytest.PytestUnraisableExceptionWarning"
121 ];
122
123 disabledTests = [
124 # Coverage test
125 "test_fastapi_cli"
126 # Likely pydantic compat issue
127 "test_exception_handler_body_access"
128 ];
129
130 disabledTestPaths = [
131 # Don't test docs and examples
132 "docs_src"
133 "tests/test_tutorial/test_sql_databases"
134 ];
135
136 pythonImportsCheck = [ "fastapi" ];
137
138 meta = with lib; {
139 changelog = "https://github.com/fastapi/fastapi/releases/tag/${src.tag}";
140 description = "Web framework for building APIs";
141 homepage = "https://github.com/fastapi/fastapi";
142 license = licenses.mit;
143 maintainers = with maintainers; [ wd15 ];
144 };
145}