summaryrefslogtreecommitdiff
path: root/pkgs/by-name/pr/prefect/package.nix
blob: 5b6e43f81cd6db14ba74ea11124257a283b9bcac (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
{
  lib,
  python3Packages,
  fetchPypi,
  nixosTests,
}:

python3Packages.buildPythonApplication rec {
  pname = "prefect";
  version = "3.2.14";
  pyproject = true;

  # Trying to install from source is challenging
  # the packaging is using versioningit and looking for
  # .git directory
  # Source will be missing sdist, uv.lock, ui artefacts ...
  src = fetchPypi {
    inherit pname version;
    hash = "sha256-DmPpiilxKp8uakcRJGaP1AD4AuOre1okk5h7bb5T2tE=";
  };

  pythonRelaxDeps = [
    "websockets"
  ];

  build-system = with python3Packages; [
    hatchling
    versioningit
  ];

  dependencies =
    with python3Packages;
    [
      aiosqlite
      alembic
      apprise
      asyncpg
      click
      cryptography
      dateparser
      docker
      graphviz
      jinja2
      jinja2-humanize-extension
      humanize
      pytz
      readchar
      sqlalchemy
      typer
      # client dependencies
      anyio
      asgi-lifespan
      cachetools
      cloudpickle
      coolname
      exceptiongroup
      fastapi
      fsspec
      # graphviz already included
      griffe
      httpcore
      httpx
      jsonpatch
      jsonschema
      opentelemetry-api
      orjson
      packaging
      pathspec
      pendulum
      prometheus-client
      pydantic
      pydantic-core
      pydantic-extra-types
      pydantic-settings
      python-dateutil
      python-slugify
      python-socks
      pyyaml
      rfc3339-validator
      rich
      ruamel-yaml
      sniffio
      toml
      typing-extensions
      ujson
      uvicorn
      websockets
      uv
    ]
    ++ sqlalchemy.optional-dependencies.asyncio
    ++ httpx.optional-dependencies.http2
    ++ python-socks.optional-dependencies.asyncio;

  optional-dependencies = with python3Packages; {
    aws = [
      # prefect-aws
    ];
    azure = [
      # prefect-azure
    ];
    bitbucket = [
      # prefect-bitbucket
    ];
    dask = [
      # prefect-dask
    ];
    databricks = [
      # prefect-databricks
    ];
    dbt = [
      # prefect-dbt
    ];
    docker = [
      # prefect-docker
    ];
    email = [
      # prefect-email
    ];
    gcp = [
      # prefect-gcp
    ];
    github = [
      # prefect-github
    ];
    gitlab = [
      # prefect-gitlab
    ];
    kubernetes = [
      # prefect-kubernetes
    ];
    otel = [
      opentelemetry-distro
      opentelemetry-exporter-otlp
      opentelemetry-instrumentation
      opentelemetry-instrumentation-logging
      opentelemetry-test-utils
    ];
    ray = [
      # prefect-ray
    ];
    redis = [
      # prefect-redis
    ];
    shell = [
      # prefect-shell
    ];
    slack = [
      # prefect-slack
    ];
    snowflake = [
      # prefect-snowflake
    ];
    sqlalchemy = [
      # prefect-sqlalchemy
    ];
  };

  makeWrapperArgs = [
    # Add the installed directories to the python path so the worker can find them
    "--prefix PYTHONPATH : ${python3Packages.makePythonPath dependencies}"
    "--prefix PYTHONPATH : $out/${python3Packages.python.sitePackages}"
  ];

  passthru.tests = {
    inherit (nixosTests) prefect;
  };

  # Tests are not included in the pypi source
  doCheck = false;
  # nativeCheckInputs = (
  #   with python3Packages;
  #   [
  #     pytestCheckHook
  #     pytest-asyncio
  #     pytest-cov
  #     pytest-env
  #     # pytest-flakefinder
  #     pytest-mypy-plugins
  #     pytest-timeout
  #     pytest-xdist
  #   ]
  # );

  meta = {
    description = "Prefect is a workflow orchestration framework for building resilient data pipelines in Python";
    homepage = "https://github.com/PrefectHQ/prefect";
    license = lib.licenses.asl20;
    maintainers = with lib.maintainers; [ happysalada ];
    mainProgram = "prefect";
  };
}