prefect-client 3.2.0__py3-none-any.whl → 3.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
prefect/_version.py CHANGED
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-02-07T18:02:21-0800",
11
+ "date": "2025-02-10T15:20:53-0600",
12
12
  "dirty": true,
13
13
  "error": null,
14
- "full-revisionid": "c8986edebb2dde3e2a931adbe24d2eaefcb799cb",
15
- "version": "3.2.0"
14
+ "full-revisionid": "f8b15dfbe4dc668f9048f5199efdd90dc8626859",
15
+ "version": "3.2.1"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
prefect/flow_engine.py CHANGED
@@ -49,12 +49,18 @@ from prefect.context import (
49
49
  )
50
50
  from prefect.exceptions import (
51
51
  Abort,
52
+ MissingFlowError,
52
53
  Pause,
53
54
  PrefectException,
54
55
  TerminationSignal,
55
56
  UpstreamTaskError,
56
57
  )
57
- from prefect.flows import Flow, load_flow_from_entrypoint, load_flow_from_flow_run
58
+ from prefect.flows import (
59
+ Flow,
60
+ load_flow_from_entrypoint,
61
+ load_flow_from_flow_run,
62
+ load_function_and_convert_to_flow,
63
+ )
58
64
  from prefect.futures import PrefectFuture, resolve_futures_to_states
59
65
  from prefect.logging.loggers import (
60
66
  flow_run_logger,
@@ -125,7 +131,10 @@ def load_flow(flow_run: FlowRun) -> Flow[..., Any]:
125
131
 
126
132
  if entrypoint:
127
133
  # we should not accept a placeholder flow at runtime
128
- flow = load_flow_from_entrypoint(entrypoint, use_placeholder_flow=False)
134
+ try:
135
+ flow = load_flow_from_entrypoint(entrypoint, use_placeholder_flow=False)
136
+ except MissingFlowError:
137
+ flow = load_function_and_convert_to_flow(entrypoint)
129
138
  else:
130
139
  flow = run_coro_as_sync(
131
140
  load_flow_from_flow_run(flow_run, use_placeholder_flow=False)
prefect/flows.py CHANGED
@@ -2080,6 +2080,29 @@ def load_flow_from_entrypoint(
2080
2080
  return flow
2081
2081
 
2082
2082
 
2083
+ def load_function_and_convert_to_flow(entrypoint: str) -> Flow[P, Any]:
2084
+ """
2085
+ Loads a function from an entrypoint and converts it to a flow if it is not already a flow.
2086
+ """
2087
+
2088
+ if ":" in entrypoint:
2089
+ # split by the last colon once to handle Windows paths with drive letters i.e C:\path\to\file.py:do_stuff
2090
+ path, func_name = entrypoint.rsplit(":", maxsplit=1)
2091
+ else:
2092
+ path, func_name = entrypoint.rsplit(".", maxsplit=1)
2093
+ try:
2094
+ func = import_object(entrypoint) # pyright: ignore[reportRedeclaration]
2095
+ except AttributeError as exc:
2096
+ raise RuntimeError(
2097
+ f"Function with name {func_name!r} not found in {path!r}."
2098
+ ) from exc
2099
+
2100
+ if isinstance(func, Flow):
2101
+ return func
2102
+ else:
2103
+ return Flow(func, log_prints=True)
2104
+
2105
+
2083
2106
  def serve(
2084
2107
  *args: "RunnerDeployment",
2085
2108
  pause_on_shutdown: bool = True,
@@ -319,6 +319,10 @@ def _get_profiles_path() -> Path:
319
319
  "pyproject.toml", ["tool", "prefect", "profiles_path"]
320
320
  ):
321
321
  return Path(pyproject_path)
322
+
323
+ if os.environ.get("PREFECT_HOME"):
324
+ return Path(os.environ["PREFECT_HOME"]) / "profiles.toml"
325
+
322
326
  if not (DEFAULT_PREFECT_HOME / "profiles.toml").exists():
323
327
  return DEFAULT_PROFILES_PATH
324
328
  return DEFAULT_PREFECT_HOME / "profiles.toml"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prefect-client
3
- Version: 3.2.0
3
+ Version: 3.2.1
4
4
  Summary: Workflow orchestration and management.
5
5
  Home-page: https://www.prefect.io
6
6
  Author: Prefect Technologies, Inc.
@@ -2,7 +2,7 @@ prefect/.prefectignore,sha256=awSprvKT0vI8a64mEOLrMxhxqcO-b0ERQeYpA2rNKVQ,390
2
2
  prefect/__init__.py,sha256=FmdMSNpGH8Mrkn5X0mNZup8_SHdeB_aqEmS5taeOHAQ,3530
3
3
  prefect/__main__.py,sha256=WFjw3kaYJY6pOTA7WDOgqjsz8zUEUZHCcj3P5wyVa-g,66
4
4
  prefect/_result_records.py,sha256=d6VWsJuXEM645kFm3y9J3j1lKGmFY2OihyBp-WEQmQA,7584
5
- prefect/_version.py,sha256=viF6Xk_03snuOWf9cCu1EtURUNo05zbNbxPdxE_biFk,496
5
+ prefect/_version.py,sha256=t1hNzonzGvks3WeozTF7c1ud2j6kgIXJ21ijVHd6gv8,496
6
6
  prefect/agent.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
7
7
  prefect/artifacts.py,sha256=dMBUOAWnUamzjb5HSqwB5-GR2Qb-Gxee26XG5NDCUuw,22720
8
8
  prefect/automations.py,sha256=ZzPxn2tINdlXTQo805V4rIlbXuNWxd7cdb3gTJxZIeY,12567
@@ -11,9 +11,9 @@ prefect/context.py,sha256=iJe4pkFqX6lz8ax1Mde_YqVmBVWmzeBe0ca2_nT6KPQ,23673
11
11
  prefect/engine.py,sha256=g-Hf2FfhMOncLiGhT-rCN142Yx6JmcL-r3zYak_MCX8,2609
12
12
  prefect/exceptions.py,sha256=-nih8qqdxRm6CX-4yrqwePVh8Mcpvla_V6N_KbdJsIU,11593
13
13
  prefect/filesystems.py,sha256=v5YqGB4uXf9Ew2VuB9VCSkawvYMMVvEtZf7w1VmAmr8,18036
14
- prefect/flow_engine.py,sha256=V6GVi1Ocy0Ea_hDJkRK5Dj-V_Hx9Y-PXoHgD8kK-cUY,60033
14
+ prefect/flow_engine.py,sha256=mW95w_fBpEPejYFXuMyjfnhm7J1jMSv_VtAYGD0VlCo,60226
15
15
  prefect/flow_runs.py,sha256=MzjfRFgQwOqUSC3Iuu6E0hWkWdn089Urk6BY3qjEwEE,16113
16
- prefect/flows.py,sha256=pZXBu_JyryycxFNXo-0MaYvnHkFR3i2hjiBbbSSnf74,107410
16
+ prefect/flows.py,sha256=AnMGp25Xb1weSC9iBGinH8k2ro8MaqsQbxLWGoqY9b4,108215
17
17
  prefect/futures.py,sha256=NYWGeC8uRGe1WWB1MxkUshdvAdYibhc32HdFjffdiW0,17217
18
18
  prefect/main.py,sha256=9NFSloSmrOgzXg_Pwh_m31deeZj4jorfpx1pUZqWNi8,2359
19
19
  prefect/plugins.py,sha256=FPRLR2mWVBMuOnlzeiTD9krlHONZH2rtYLD753JQDNQ,2516
@@ -198,7 +198,7 @@ prefect/settings/context.py,sha256=yKxnaDJHX8e2jmAVtw1RF9o7X4V3AOcz61sVeQyPX2c,2
198
198
  prefect/settings/legacy.py,sha256=KG00GwaURl1zbwfCKAjwNRdJjB2UdTyo80gYF7U60jk,5693
199
199
  prefect/settings/profiles.py,sha256=Z8vOgHx2SR_l35SsFLnrFi2qfRY2_Psn0epx5zZD8WI,12392
200
200
  prefect/settings/profiles.toml,sha256=kTvqDNMzjH3fsm5OEI-NKY4dMmipor5EvQXRB6rPEjY,522
201
- prefect/settings/sources.py,sha256=5ZHmPI_ORpYgCbQKgyXBP_TGYYCF7VJNLZWSpDGyaOQ,12953
201
+ prefect/settings/sources.py,sha256=-GTAZiTFjvGCiEGC-oGQhjcwDi_3XDvxQ7MkwEsGIiA,13060
202
202
  prefect/settings/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
203
203
  prefect/settings/models/api.py,sha256=XOxZDtNKeXgOMtvlr6QBJ1_UsvsXad3m0ECgZ0vAfaA,1796
204
204
  prefect/settings/models/cli.py,sha256=U-KwO1mfwj-hsyrR0KfS4eHg1-M1rr6VllqOt-VzoBM,1045
@@ -275,8 +275,8 @@ prefect/workers/cloud.py,sha256=dPvG1jDGD5HSH7aM2utwtk6RaJ9qg13XjkA0lAIgQmY,287
275
275
  prefect/workers/process.py,sha256=6VWon_LK7fQNLlQTjTBFeU4KFUa4faqP4EUuTvrbtbg,20176
276
276
  prefect/workers/server.py,sha256=SEuyScZ5nGm2OotdtbHjpvqJlTRVWCh29ND7FeL_fZA,1974
277
277
  prefect/workers/utilities.py,sha256=VfPfAlGtTuDj0-Kb8WlMgAuOfgXCdrGAnKMapPSBrwc,2483
278
- prefect_client-3.2.0.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
279
- prefect_client-3.2.0.dist-info/METADATA,sha256=_T4YNio1B00yKySqWMnTRQA9Z-S5t078IK6OfDze4So,7286
280
- prefect_client-3.2.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
281
- prefect_client-3.2.0.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
282
- prefect_client-3.2.0.dist-info/RECORD,,
278
+ prefect_client-3.2.1.dist-info/LICENSE,sha256=MCxsn8osAkzfxKC4CC_dLcUkU8DZLkyihZ8mGs3Ah3Q,11357
279
+ prefect_client-3.2.1.dist-info/METADATA,sha256=y0SU-d6cL0dgjIh2tGQ-t4YndTcIdiE0vxh0keXB5aI,7286
280
+ prefect_client-3.2.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
281
+ prefect_client-3.2.1.dist-info/top_level.txt,sha256=MJZYJgFdbRc2woQCeB4vM6T33tr01TmkEhRcns6H_H4,8
282
+ prefect_client-3.2.1.dist-info/RECORD,,