nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5
6 # build-system
7 pdm-backend,
8
9 # dependencies
10 annotated-doc,
11 starlette,
12 pydantic,
13 typing-extensions,
14
15 # tests
16 anyio,
17 dirty-equals,
18 flask,
19 inline-snapshot,
20 passlib,
21 pwdlib,
22 pyjwt,
23 pytest-asyncio,
24 pytestCheckHook,
25 sqlalchemy,
26 trio,
27
28 # optional-dependencies
29 fastapi-cli,
30 httpx,
31 jinja2,
32 itsdangerous,
33 python-multipart,
34 pyyaml,
35 ujson,
36 orjson,
37 email-validator,
38 uvicorn,
39 pydantic-settings,
40 pydantic-extra-types,
41}:
42
43buildPythonPackage rec {
44 pname = "fastapi";
45 version = "0.128.0";
46 pyproject = true;
47
48 src = fetchFromGitHub {
49 owner = "tiangolo";
50 repo = "fastapi";
51 tag = version;
52 hash = "sha256-qUTSqTe9mQzfuwqsTCQY6u7Tcnh9XNy4tr5o0/qFFLs=";
53 };
54
55 build-system = [ pdm-backend ];
56
57 pythonRelaxDeps = [
58 "anyio"
59 "starlette"
60 ];
61
62 dependencies = [
63 annotated-doc
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 pwdlib
107 pyjwt
108 pytestCheckHook
109 pytest-asyncio
110 trio
111 sqlalchemy
112 ]
113 ++ anyio.optional-dependencies.trio
114 ++ passlib.optional-dependencies.bcrypt
115 ++ optional-dependencies.all;
116
117 pytestFlags = [
118 # ignoring deprecation warnings to avoid test failure from
119 # tests/test_tutorial/test_testing/test_tutorial001.py
120 "-Wignore::DeprecationWarning"
121 "-Wignore::pytest.PytestUnraisableExceptionWarning"
122 ];
123
124 disabledTests = [
125 # Coverage test
126 "test_fastapi_cli"
127 # Likely pydantic compat issue
128 "test_exception_handler_body_access"
129 ];
130
131 disabledTestPaths = [
132 # Don't test docs and examples
133 "docs_src"
134 "tests/test_tutorial/test_sql_databases"
135 # Infinite recursion with strawberry-graphql
136 "tests/test_tutorial/test_graphql/test_tutorial001.py"
137 ];
138
139 pythonImportsCheck = [ "fastapi" ];
140
141 meta = {
142 changelog = "https://github.com/fastapi/fastapi/releases/tag/${src.tag}";
143 description = "Web framework for building APIs";
144 homepage = "https://github.com/fastapi/fastapi";
145 license = lib.licenses.mit;
146 maintainers = with lib.maintainers; [ wd15 ];
147 };
148}