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