prefect 3.6.16.dev4__py3-none-any.whl → 3.6.16.dev5__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/__init__.py +5 -4
- prefect/_build_info.py +3 -3
- prefect/_experimental/plugins/__init__.py +1 -1
- prefect/cli/deploy/_core.py +8 -1
- prefect/client/orchestration/routes.py +0 -3
- prefect/server/api/admin.py +0 -60
- prefect/server/api/deployments.py +267 -1
- prefect/server/api/flow_runs.py +139 -0
- prefect/server/api/flows.py +49 -1
- prefect/server/models/deployments.py +53 -0
- prefect/server/models/flow_runs.py +42 -0
- prefect/server/models/flows.py +40 -1
- prefect/server/schemas/filters.py +5 -0
- prefect/server/schemas/responses.py +50 -0
- prefect/server/ui/assets/404-DG3AGnT0.js +2 -0
- prefect/server/ui/assets/{404-K6PaZiye.js.map → 404-DG3AGnT0.js.map} +1 -1
- prefect/server/ui/assets/{AppRouterView-DwDQtyvQ.js → AppRouterView-C0FcJnhj.js} +2 -2
- prefect/server/ui/assets/{AppRouterView-DwDQtyvQ.js.map → AppRouterView-C0FcJnhj.js.map} +1 -1
- prefect/server/ui/assets/{Artifact-C7r-iu_n.js → Artifact-sGuFYSde.js} +2 -2
- prefect/server/ui/assets/{Artifact-C7r-iu_n.js.map → Artifact-sGuFYSde.js.map} +1 -1
- prefect/server/ui/assets/{ArtifactKey-BEMo4yoK.js → ArtifactKey-9Q9Vx-fc.js} +2 -2
- prefect/server/ui/assets/{ArtifactKey-BEMo4yoK.js.map → ArtifactKey-9Q9Vx-fc.js.map} +1 -1
- prefect/server/ui/assets/{Artifacts-jFQdgIdh.js → Artifacts-B53vn988.js} +2 -2
- prefect/server/ui/assets/{Artifacts-jFQdgIdh.js.map → Artifacts-B53vn988.js.map} +1 -1
- prefect/server/ui/assets/{Automation-CoPk3WhK.js → Automation-BaE0He4N.js} +2 -2
- prefect/server/ui/assets/{Automation-CoPk3WhK.js.map → Automation-BaE0He4N.js.map} +1 -1
- prefect/server/ui/assets/{AutomationCreate-DC7QapQA.js → AutomationCreate-CYfB5QDE.js} +2 -2
- prefect/server/ui/assets/{AutomationCreate-DC7QapQA.js.map → AutomationCreate-CYfB5QDE.js.map} +1 -1
- prefect/server/ui/assets/{AutomationEdit-DEqdGB6r.js → AutomationEdit-CUrFmfaN.js} +2 -2
- prefect/server/ui/assets/{AutomationEdit-DEqdGB6r.js.map → AutomationEdit-CUrFmfaN.js.map} +1 -1
- prefect/server/ui/assets/{AutomationWizard.vue_vue_type_script_setup_true_lang-Cx_Qey3p.js → AutomationWizard.vue_vue_type_script_setup_true_lang-CRRm91Zq.js} +2 -2
- prefect/server/ui/assets/{AutomationWizard.vue_vue_type_script_setup_true_lang-Cx_Qey3p.js.map → AutomationWizard.vue_vue_type_script_setup_true_lang-CRRm91Zq.js.map} +1 -1
- prefect/server/ui/assets/{Automations-BSljFu5U.js → Automations--PyqO2IS.js} +2 -2
- prefect/server/ui/assets/{Automations-BSljFu5U.js.map → Automations--PyqO2IS.js.map} +1 -1
- prefect/server/ui/assets/{BlockEdit-PBHxWs2I.js → BlockEdit-BnyuldVn.js} +2 -2
- prefect/server/ui/assets/{BlockEdit-PBHxWs2I.js.map → BlockEdit-BnyuldVn.js.map} +1 -1
- prefect/server/ui/assets/{BlockView-D0GWTwFv.js → BlockView-B2WHGgyQ.js} +2 -2
- prefect/server/ui/assets/{BlockView-D0GWTwFv.js.map → BlockView-B2WHGgyQ.js.map} +1 -1
- prefect/server/ui/assets/{Blocks-D_9GkxFk.js → Blocks-CCtj7wrz.js} +2 -2
- prefect/server/ui/assets/{Blocks-D_9GkxFk.js.map → Blocks-CCtj7wrz.js.map} +1 -1
- prefect/server/ui/assets/{BlocksCatalog-kqMThRld.js → BlocksCatalog-CMTvZPfa.js} +2 -2
- prefect/server/ui/assets/{BlocksCatalog-kqMThRld.js.map → BlocksCatalog-CMTvZPfa.js.map} +1 -1
- prefect/server/ui/assets/{BlocksCatalogCreate-DMhVoHqt.js → BlocksCatalogCreate-BvAnp5Nv.js} +2 -2
- prefect/server/ui/assets/{BlocksCatalogCreate-DMhVoHqt.js.map → BlocksCatalogCreate-BvAnp5Nv.js.map} +1 -1
- prefect/server/ui/assets/{BlocksCatalogView-30zvf2Zf.js → BlocksCatalogView-dqnPzpRL.js} +2 -2
- prefect/server/ui/assets/{BlocksCatalogView-30zvf2Zf.js.map → BlocksCatalogView-dqnPzpRL.js.map} +1 -1
- prefect/server/ui/assets/{ConcurrencyLimit-BW7Bnl17.js → ConcurrencyLimit-ontTM1oT.js} +2 -2
- prefect/server/ui/assets/{ConcurrencyLimit-BW7Bnl17.js.map → ConcurrencyLimit-ontTM1oT.js.map} +1 -1
- prefect/server/ui/assets/{ConcurrencyLimits-Ct9fPcPd.js → ConcurrencyLimits-Ctczt53J.js} +2 -2
- prefect/server/ui/assets/{ConcurrencyLimits-Ct9fPcPd.js.map → ConcurrencyLimits-Ctczt53J.js.map} +1 -1
- prefect/server/ui/assets/{Dashboard-C9HbsW9C.js → Dashboard-o-S3xTqz.js} +2 -2
- prefect/server/ui/assets/{Dashboard-C9HbsW9C.js.map → Dashboard-o-S3xTqz.js.map} +1 -1
- prefect/server/ui/assets/{Deployment-BnhoLgTP.js → Deployment-DY8bGLAc.js} +2 -2
- prefect/server/ui/assets/{Deployment-BnhoLgTP.js.map → Deployment-DY8bGLAc.js.map} +1 -1
- prefect/server/ui/assets/{DeploymentDuplicate-B8_LrQLl.js → DeploymentDuplicate-CMMz8lrd.js} +2 -2
- prefect/server/ui/assets/{DeploymentDuplicate-B8_LrQLl.js.map → DeploymentDuplicate-CMMz8lrd.js.map} +1 -1
- prefect/server/ui/assets/{DeploymentEdit-B4W9AHKw.js → DeploymentEdit-BlRSxdKn.js} +2 -2
- prefect/server/ui/assets/{DeploymentEdit-B4W9AHKw.js.map → DeploymentEdit-BlRSxdKn.js.map} +1 -1
- prefect/server/ui/assets/Deployments-lcIIbm1i.js +2 -0
- prefect/server/ui/assets/Deployments-lcIIbm1i.js.map +1 -0
- prefect/server/ui/assets/{Event-DQwLIzdd.js → Event-0j-HIfsu.js} +2 -2
- prefect/server/ui/assets/{Event-DQwLIzdd.js.map → Event-0j-HIfsu.js.map} +1 -1
- prefect/server/ui/assets/{Events-D62-llVt.js → Events-UuQjwz0L.js} +2 -2
- prefect/server/ui/assets/{Events-D62-llVt.js.map → Events-UuQjwz0L.js.map} +1 -1
- prefect/server/ui/assets/{Flow-Cq4u3Hyv.js → Flow-RmpH3LjK.js} +2 -2
- prefect/server/ui/assets/{Flow-Cq4u3Hyv.js.map → Flow-RmpH3LjK.js.map} +1 -1
- prefect/server/ui/assets/{FlowRun-3dhHtN2i.js → FlowRun-C3yAz7L4.js} +2 -2
- prefect/server/ui/assets/{FlowRun-3dhHtN2i.js.map → FlowRun-C3yAz7L4.js.map} +1 -1
- prefect/server/ui/assets/{FlowRunCreate-BwLIWkPS.js → FlowRunCreate-UNkalFWW.js} +2 -2
- prefect/server/ui/assets/{FlowRunCreate-BwLIWkPS.js.map → FlowRunCreate-UNkalFWW.js.map} +1 -1
- prefect/server/ui/assets/{Flows-DDhFukcU.js → Flows-BrSJzZzX.js} +2 -2
- prefect/server/ui/assets/{Flows-DDhFukcU.js.map → Flows-BrSJzZzX.js.map} +1 -1
- prefect/server/ui/assets/{Runs-CAwq35x9.js → Runs-DlwKZ4nz.js} +2 -2
- prefect/server/ui/assets/{Runs-CAwq35x9.js.map → Runs-DlwKZ4nz.js.map} +1 -1
- prefect/server/ui/assets/{RunsPageWithDefaultFilter-VUJP7e64-CnkYar0q.js → RunsPageWithDefaultFilter-VUJP7e64-C4FVTl9j.js} +2 -2
- prefect/server/ui/assets/{RunsPageWithDefaultFilter-VUJP7e64-CnkYar0q.js.map → RunsPageWithDefaultFilter-VUJP7e64-C4FVTl9j.js.map} +1 -1
- prefect/server/ui/assets/{Settings-DBdmXrdg.js → Settings-CrsUm3c9.js} +2 -2
- prefect/server/ui/assets/{Settings-DBdmXrdg.js.map → Settings-CrsUm3c9.js.map} +1 -1
- prefect/server/ui/assets/{TaskRun-DWfpXthA.js → TaskRun-BPnbcZPW.js} +2 -2
- prefect/server/ui/assets/{TaskRun-DWfpXthA.js.map → TaskRun-BPnbcZPW.js.map} +1 -1
- prefect/server/ui/assets/{Unauthenticated-C8GRLLPD.js → Unauthenticated-2pBvXwGA.js} +2 -2
- prefect/server/ui/assets/{Unauthenticated-C8GRLLPD.js.map → Unauthenticated-2pBvXwGA.js.map} +1 -1
- prefect/server/ui/assets/{Variables-EylxYrv9.js → Variables-Bjlboyhp.js} +2 -2
- prefect/server/ui/assets/{Variables-EylxYrv9.js.map → Variables-Bjlboyhp.js.map} +1 -1
- prefect/server/ui/assets/{WorkPool-CfgEuRe7.js → WorkPool-lRyupHlB.js} +2 -2
- prefect/server/ui/assets/{WorkPool-CfgEuRe7.js.map → WorkPool-lRyupHlB.js.map} +1 -1
- prefect/server/ui/assets/{WorkPoolCreate-C4DC7Wtp.js → WorkPoolCreate-_lyGs-1E.js} +2 -2
- prefect/server/ui/assets/{WorkPoolCreate-C4DC7Wtp.js.map → WorkPoolCreate-_lyGs-1E.js.map} +1 -1
- prefect/server/ui/assets/{WorkPoolEdit-D1PFei0l.js → WorkPoolEdit-FAAVeANy.js} +2 -2
- prefect/server/ui/assets/{WorkPoolEdit-D1PFei0l.js.map → WorkPoolEdit-FAAVeANy.js.map} +1 -1
- prefect/server/ui/assets/{WorkPoolQueue-CisaZ0pF.js → WorkPoolQueue-CRctEElk.js} +2 -2
- prefect/server/ui/assets/{WorkPoolQueue-CisaZ0pF.js.map → WorkPoolQueue-CRctEElk.js.map} +1 -1
- prefect/server/ui/assets/{WorkPoolQueueCreate-30kVnfeo.js → WorkPoolQueueCreate-BDTuIRGA.js} +2 -2
- prefect/server/ui/assets/{WorkPoolQueueCreate-30kVnfeo.js.map → WorkPoolQueueCreate-BDTuIRGA.js.map} +1 -1
- prefect/server/ui/assets/{WorkPoolQueueEdit-DBsgToTG.js → WorkPoolQueueEdit-qqk5OXB2.js} +2 -2
- prefect/server/ui/assets/{WorkPoolQueueEdit-DBsgToTG.js.map → WorkPoolQueueEdit-qqk5OXB2.js.map} +1 -1
- prefect/server/ui/assets/{WorkPools-Dt8Bj0YS.js → WorkPools-CLW1U3iu.js} +2 -2
- prefect/server/ui/assets/{WorkPools-Dt8Bj0YS.js.map → WorkPools-CLW1U3iu.js.map} +1 -1
- prefect/server/ui/assets/{WorkQueueToWorkPoolQueueRedirect-DJZTvjVT-D9qSz7kl.js → WorkQueueToWorkPoolQueueRedirect-DJZTvjVT-B__6dQYl.js} +2 -2
- prefect/server/ui/assets/{WorkQueueToWorkPoolQueueRedirect-DJZTvjVT-D9qSz7kl.js.map → WorkQueueToWorkPoolQueueRedirect-DJZTvjVT-B__6dQYl.js.map} +1 -1
- prefect/server/ui/assets/{index-C9FkjDpZ.js → index-DS86r6aC.js} +4 -4
- prefect/server/ui/assets/{index-C9FkjDpZ.js.map → index-DS86r6aC.js.map} +1 -1
- prefect/server/ui/assets/{mapper-NwaeXCHc.js → mapper-Bm5aN_dh.js} +2 -2
- prefect/server/ui/assets/{mapper-NwaeXCHc.js.map → mapper-Bm5aN_dh.js.map} +1 -1
- prefect/server/ui/assets/useCan-DzvhQ1fT.js +2 -0
- prefect/server/ui/assets/{useCan-DDmEnNFg.js.map → useCan-DzvhQ1fT.js.map} +1 -1
- prefect/server/ui/assets/{usePageTitle-B0Hz_El0.js → usePageTitle-BXVkHaWQ.js} +2 -2
- prefect/server/ui/assets/{usePageTitle-B0Hz_El0.js.map → usePageTitle-BXVkHaWQ.js.map} +1 -1
- prefect/server/ui/assets/{usePrefectApi-B2fKZYDa.js → usePrefectApi-Cn-hX9ms.js} +2 -2
- prefect/server/ui/assets/{usePrefectApi-B2fKZYDa.js.map → usePrefectApi-Cn-hX9ms.js.map} +1 -1
- prefect/server/ui/index.html +1 -1
- prefect/utilities/collections.py +5 -1
- {prefect-3.6.16.dev4.dist-info → prefect-3.6.16.dev5.dist-info}/METADATA +1 -1
- {prefect-3.6.16.dev4.dist-info → prefect-3.6.16.dev5.dist-info}/RECORD +117 -117
- prefect/server/ui/assets/404-K6PaZiye.js +0 -2
- prefect/server/ui/assets/Deployments-DAHDVCIs.js +0 -2
- prefect/server/ui/assets/Deployments-DAHDVCIs.js.map +0 -1
- prefect/server/ui/assets/useCan-DDmEnNFg.js +0 -2
- {prefect-3.6.16.dev4.dist-info → prefect-3.6.16.dev5.dist-info}/WHEEL +0 -0
- {prefect-3.6.16.dev4.dist-info → prefect-3.6.16.dev5.dist-info}/entry_points.txt +0 -0
- {prefect-3.6.16.dev4.dist-info → prefect-3.6.16.dev5.dist-info}/licenses/LICENSE +0 -0
|
@@ -606,6 +606,59 @@ async def _delete_related_concurrency_limit(
|
|
|
606
606
|
)
|
|
607
607
|
|
|
608
608
|
|
|
609
|
+
@db_injector
|
|
610
|
+
async def delete_deployments(
|
|
611
|
+
db: PrefectDBInterface,
|
|
612
|
+
session: AsyncSession,
|
|
613
|
+
deployment_ids: list[UUID],
|
|
614
|
+
) -> list[UUID]:
|
|
615
|
+
"""
|
|
616
|
+
Delete multiple deployments by their IDs.
|
|
617
|
+
|
|
618
|
+
Args:
|
|
619
|
+
session: A database session
|
|
620
|
+
deployment_ids: a list of deployment ids to delete
|
|
621
|
+
|
|
622
|
+
Returns:
|
|
623
|
+
List[UUID]: the IDs of the deployments that were deleted
|
|
624
|
+
"""
|
|
625
|
+
if not deployment_ids:
|
|
626
|
+
return []
|
|
627
|
+
|
|
628
|
+
# Get existing deployment IDs
|
|
629
|
+
result = await session.execute(
|
|
630
|
+
select(db.Deployment.id).where(db.Deployment.id.in_(deployment_ids))
|
|
631
|
+
)
|
|
632
|
+
existing_ids = list(result.scalars().all())
|
|
633
|
+
|
|
634
|
+
if not existing_ids:
|
|
635
|
+
return []
|
|
636
|
+
|
|
637
|
+
# Delete scheduled runs for all deployments
|
|
638
|
+
for deployment_id in existing_ids:
|
|
639
|
+
await _delete_scheduled_runs(
|
|
640
|
+
session=session, deployment_id=deployment_id, auto_scheduled_only=False
|
|
641
|
+
)
|
|
642
|
+
|
|
643
|
+
# Delete related concurrency limits
|
|
644
|
+
await session.execute(
|
|
645
|
+
delete(db.ConcurrencyLimitV2).where(
|
|
646
|
+
db.ConcurrencyLimitV2.id.in_(
|
|
647
|
+
select(db.Deployment.concurrency_limit_id).where(
|
|
648
|
+
db.Deployment.id.in_(existing_ids)
|
|
649
|
+
)
|
|
650
|
+
)
|
|
651
|
+
)
|
|
652
|
+
)
|
|
653
|
+
|
|
654
|
+
# Delete all deployments
|
|
655
|
+
await session.execute(
|
|
656
|
+
delete(db.Deployment).where(db.Deployment.id.in_(existing_ids))
|
|
657
|
+
)
|
|
658
|
+
|
|
659
|
+
return existing_ids
|
|
660
|
+
|
|
661
|
+
|
|
609
662
|
@db_injector
|
|
610
663
|
async def schedule_runs(
|
|
611
664
|
db: PrefectDBInterface,
|
|
@@ -504,6 +504,48 @@ async def delete_flow_run(
|
|
|
504
504
|
return result.rowcount > 0
|
|
505
505
|
|
|
506
506
|
|
|
507
|
+
@db_injector
|
|
508
|
+
async def delete_flow_runs(
|
|
509
|
+
db: PrefectDBInterface,
|
|
510
|
+
session: AsyncSession,
|
|
511
|
+
flow_run_ids: List[UUID],
|
|
512
|
+
) -> List[UUID]:
|
|
513
|
+
"""
|
|
514
|
+
Delete multiple flow runs by their IDs, handling concurrency limits.
|
|
515
|
+
|
|
516
|
+
Args:
|
|
517
|
+
session: A database session
|
|
518
|
+
flow_run_ids: a list of flow run ids to delete
|
|
519
|
+
|
|
520
|
+
Returns:
|
|
521
|
+
List[UUID]: the IDs of the flow runs that were deleted
|
|
522
|
+
"""
|
|
523
|
+
if not flow_run_ids:
|
|
524
|
+
return []
|
|
525
|
+
|
|
526
|
+
# Read all flow runs to handle concurrency cleanup
|
|
527
|
+
flow_runs = await session.execute(
|
|
528
|
+
select(db.FlowRun).where(db.FlowRun.id.in_(flow_run_ids))
|
|
529
|
+
)
|
|
530
|
+
flow_run_list = flow_runs.scalars().all()
|
|
531
|
+
|
|
532
|
+
if not flow_run_list:
|
|
533
|
+
return []
|
|
534
|
+
|
|
535
|
+
# Cleanup concurrency slots for each flow run that has a deployment
|
|
536
|
+
for flow_run in flow_run_list:
|
|
537
|
+
if flow_run.deployment_id:
|
|
538
|
+
await cleanup_flow_run_concurrency_slots(session=session, flow_run=flow_run)
|
|
539
|
+
|
|
540
|
+
# Get the IDs of flow runs that exist
|
|
541
|
+
existing_ids = [fr.id for fr in flow_run_list]
|
|
542
|
+
|
|
543
|
+
# Delete all flow runs in one query
|
|
544
|
+
await session.execute(delete(db.FlowRun).where(db.FlowRun.id.in_(existing_ids)))
|
|
545
|
+
|
|
546
|
+
return existing_ids
|
|
547
|
+
|
|
548
|
+
|
|
507
549
|
async def set_flow_run_state(
|
|
508
550
|
session: AsyncSession,
|
|
509
551
|
flow_run_id: UUID,
|
prefect/server/models/flows.py
CHANGED
|
@@ -3,7 +3,7 @@ Functions for interacting with flow ORM objects.
|
|
|
3
3
|
Intended for internal use by the Prefect REST API.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
-
from typing import Optional, Sequence, TypeVar, Union
|
|
6
|
+
from typing import List, Optional, Sequence, TypeVar, Union
|
|
7
7
|
from uuid import UUID
|
|
8
8
|
|
|
9
9
|
import sqlalchemy as sa
|
|
@@ -290,6 +290,45 @@ async def delete_flow(
|
|
|
290
290
|
return result.rowcount > 0
|
|
291
291
|
|
|
292
292
|
|
|
293
|
+
@db_injector
|
|
294
|
+
async def delete_flows(
|
|
295
|
+
db: PrefectDBInterface,
|
|
296
|
+
session: AsyncSession,
|
|
297
|
+
flow_ids: List[UUID],
|
|
298
|
+
) -> List[UUID]:
|
|
299
|
+
"""
|
|
300
|
+
Delete multiple flows by their IDs.
|
|
301
|
+
|
|
302
|
+
This also deletes all associated deployments (hard delete).
|
|
303
|
+
|
|
304
|
+
Args:
|
|
305
|
+
session: A database session
|
|
306
|
+
flow_ids: a list of flow ids to delete
|
|
307
|
+
|
|
308
|
+
Returns:
|
|
309
|
+
List[UUID]: the IDs of the flows that were deleted
|
|
310
|
+
"""
|
|
311
|
+
if not flow_ids:
|
|
312
|
+
return []
|
|
313
|
+
|
|
314
|
+
# Get existing flow IDs
|
|
315
|
+
result = await session.execute(select(db.Flow.id).where(db.Flow.id.in_(flow_ids)))
|
|
316
|
+
existing_ids = list(result.scalars().all())
|
|
317
|
+
|
|
318
|
+
if not existing_ids:
|
|
319
|
+
return []
|
|
320
|
+
|
|
321
|
+
# Delete associated deployments (hard delete - cascade will handle related data)
|
|
322
|
+
await session.execute(
|
|
323
|
+
delete(db.Deployment).where(db.Deployment.flow_id.in_(existing_ids))
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
# Delete the flows
|
|
327
|
+
await session.execute(delete(db.Flow).where(db.Flow.id.in_(existing_ids)))
|
|
328
|
+
|
|
329
|
+
return existing_ids
|
|
330
|
+
|
|
331
|
+
|
|
293
332
|
@db_injector
|
|
294
333
|
async def read_flow_labels(
|
|
295
334
|
db: PrefectDBInterface,
|
|
@@ -92,6 +92,9 @@ class FlowFilterId(PrefectFilterBaseModel):
|
|
|
92
92
|
any_: Optional[list[UUID]] = Field(
|
|
93
93
|
default=None, description="A list of flow ids to include"
|
|
94
94
|
)
|
|
95
|
+
not_any_: Optional[list[UUID]] = Field(
|
|
96
|
+
default=None, description="A list of flow ids to exclude"
|
|
97
|
+
)
|
|
95
98
|
|
|
96
99
|
def _get_filter_list(
|
|
97
100
|
self, db: "PrefectDBInterface"
|
|
@@ -99,6 +102,8 @@ class FlowFilterId(PrefectFilterBaseModel):
|
|
|
99
102
|
filters: list[sa.ColumnExpressionArgument[bool]] = []
|
|
100
103
|
if self.any_ is not None:
|
|
101
104
|
filters.append(db.Flow.id.in_(self.any_))
|
|
105
|
+
if self.not_any_ is not None:
|
|
106
|
+
filters.append(db.Flow.id.not_in(self.not_any_))
|
|
102
107
|
return filters
|
|
103
108
|
|
|
104
109
|
|
|
@@ -665,3 +665,53 @@ SchemaValueError = Union[str, SchemaValuePropertyError, SchemaValueIndexError]
|
|
|
665
665
|
class SchemaValuesValidationResponse(BaseModel):
|
|
666
666
|
errors: List[SchemaValueError]
|
|
667
667
|
valid: bool
|
|
668
|
+
|
|
669
|
+
|
|
670
|
+
# Bulk operation response schemas
|
|
671
|
+
|
|
672
|
+
|
|
673
|
+
class FlowRunBulkDeleteResponse(PrefectBaseModel):
|
|
674
|
+
"""Response from bulk flow run deletion."""
|
|
675
|
+
|
|
676
|
+
deleted: List[UUID] = Field(default_factory=list)
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
class DeploymentBulkDeleteResponse(PrefectBaseModel):
|
|
680
|
+
"""Response from bulk deployment deletion."""
|
|
681
|
+
|
|
682
|
+
deleted: List[UUID] = Field(default_factory=list)
|
|
683
|
+
|
|
684
|
+
|
|
685
|
+
class FlowBulkDeleteResponse(PrefectBaseModel):
|
|
686
|
+
"""Response from bulk flow deletion."""
|
|
687
|
+
|
|
688
|
+
deleted: List[UUID] = Field(default_factory=list)
|
|
689
|
+
|
|
690
|
+
|
|
691
|
+
class FlowRunOrchestrationResult(PrefectBaseModel):
|
|
692
|
+
"""Per-run result for bulk state operations."""
|
|
693
|
+
|
|
694
|
+
flow_run_id: UUID
|
|
695
|
+
status: SetStateStatus
|
|
696
|
+
state: Optional[schemas.states.State] = None
|
|
697
|
+
details: StateResponseDetails
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
class FlowRunBulkSetStateResponse(PrefectBaseModel):
|
|
701
|
+
"""Response from bulk set state operation."""
|
|
702
|
+
|
|
703
|
+
results: List[FlowRunOrchestrationResult] = Field(default_factory=list)
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
class FlowRunCreateResult(PrefectBaseModel):
|
|
707
|
+
"""Per-run result for bulk create operations."""
|
|
708
|
+
|
|
709
|
+
flow_run_id: Optional[UUID] = None
|
|
710
|
+
status: Literal["CREATED", "FAILED"]
|
|
711
|
+
error: Optional[str] = None
|
|
712
|
+
|
|
713
|
+
|
|
714
|
+
class FlowRunBulkCreateResponse(PrefectBaseModel):
|
|
715
|
+
"""Response from bulk flow run creation."""
|
|
716
|
+
|
|
717
|
+
results: List[FlowRunCreateResult] = Field(default_factory=list)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"404-
|
|
1
|
+
{"version":3,"file":"404-DG3AGnT0.js","sources":["../../src/pages/404.vue"],"sourcesContent":["<template>\n <FourZeroFour />\n</template>\n\n<script lang=\"ts\" setup>\n import { FourZeroFour } from '@prefecthq/prefect-ui-library'\n import { usePageTitle } from '@/compositions/usePageTitle'\n usePageTitle('Page Not Found')\n</script>"],"names":["usePageTitle","_createBlock","_unref","FourZeroFour"],"mappings":"qJAOE,OAAAA,EAAa,gBAAgB,cAN7BC,EAAgBC,EAAAC,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as E,K as O,ae as J,V as R,h as c,c as g,o as m,i as n,k as t,B as S,l as V,a as w,n as D,m as e,t as q,J as B,de as K,df as L,I as N,g as U,cB as W,dg as G,dh as Q,di as l,bg as i,G as Y,dj as z,j as H,dk as Z,dl as X,c9 as $,aJ as j,by as ee,dm as te,dn as oe,dp as ne,r as se,aw as ae,dq as le,aS as x,dr as ie,ds as re,dt as ue,du as ce}from"./index-
|
|
2
|
-
//# sourceMappingURL=AppRouterView-
|
|
1
|
+
import{d as E,K as O,ae as J,V as R,h as c,c as g,o as m,i as n,k as t,B as S,l as V,a as w,n as D,m as e,t as q,J as B,de as K,df as L,I as N,g as U,cB as W,dg as G,dh as Q,di as l,bg as i,G as Y,dj as z,j as H,dk as Z,dl as X,c9 as $,aJ as j,by as ee,dm as te,dn as oe,dp as ne,r as se,aw as ae,dq as le,aS as x,dr as ie,ds as re,dt as ue,du as ce}from"./index-DS86r6aC.js";import{u as me,c as pe}from"./useCan-DzvhQ1fT.js";import{u as de,U as _e,a as fe,c as ve,p as ge}from"./usePrefectApi-Cn-hX9ms.js";import"./mapper-Bm5aN_dh.js";const ye={class:"flex gap-x-2 items-center"},we={key:0,class:"text-sm italic"},ke="http://prefect.io/slack?utm_source=oss&utm_medium=oss&utm_campaign=oss_popup&utm_term=none&utm_content=none",T="join-the-community-modal",he="https://getform.io/f/eapderva",be=E({__name:"JoinTheCommunityModal",props:{showModal:{type:Boolean},showModalModifiers:{}},emits:["update:showModal"],setup(a){const s=O(a,"showModal"),u=J(!1),r=J(),{validate:k,state:d}=R(r,[K("Email"),L("Email")]),f=J(!1),v=J("");async function h(){if(await k()){v.value="",f.value=!0;try{await fetch(he,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:r.value}),redirect:"manual"}),s.value=!1,B("Successfully subscribed","success")}catch(b){v.value="An error occurred. Please try again.",console.error(b)}finally{f.value=!1}}}return(b,o)=>{const p=c("p-button"),y=c("p-divider"),_=c("p-text-input"),M=c("p-label"),P=c("p-form"),A=c("p-message"),F=c("p-modal");return m(),g(F,{"show-modal":s.value,"onUpdate:showModal":o[2]||(o[2]=C=>s.value=C),title:"Join the Prefect Community"},{header:n(()=>[...o[3]||(o[3]=[V("h2",null,"Join the Community",-1)])]),default:n(()=>[o[5]||(o[5]=V("p",null," Connect with 25k+ engineers scaling Python with Prefect. Show us your work and be the first to know about new Prefect features. ",-1)),V("div",ye,[t(p,{primary:"",icon:"Slack",to:ke,target:"_blank",onClick:o[0]||(o[0]=C=>u.value=!0)},{default:n(()=>[...o[4]||(o[4]=[S(" Join us on Slack ",-1)])]),_:1}),u.value?(m(),D("span",we," Thanks for joining our community! ")):w("",!0)]),t(y,{class:"-my-3"}),t(P,{id:T,onSubmit:h},{default:n(()=>[t(M,{label:"Notify me about Prefect updates",state:e(d),message:e(d).error},{default:n(({id:C})=>[t(_,{id:C,modelValue:r.value,"onUpdate:modelValue":o[1]||(o[1]=I=>r.value=I),placeholder:"hello@prefect.io",state:e(d)},null,8,["id","modelValue","state"])]),_:1},8,["state","message"])]),_:1}),v.value?(m(),g(A,{key:0,error:""},{default:n(()=>[S(q(v.value),1)]),_:1})):w("",!0)]),cancel:n(C=>[t(p,{class:"sm:order-first",onClick:C.close},{default:n(()=>[...o[6]||(o[6]=[S(" Skip ",-1)])]),_:1},8,["onClick"])]),actions:n(()=>[t(p,{primary:"",type:"submit",form:T,loading:f.value},{default:n(()=>[...o[7]||(o[7]=[S(" Sign up ",-1)])]),_:1},8,["loading"])]),_:1},8,["show-modal"])}}}),Ce={key:0,href:"https://www.prefect.io/cloud-vs-oss?utm_source=oss&utm_medium=oss&utm_campaign=oss&utm_term=none&utm_content=none",target:"_blank"},Se=E({__name:"ContextSidebar",async setup(a){let s,u;const r=me(),k=de(),d=([s,u]=N(()=>k.admin.getSettings()),s=await s,u(),s),f=U(()=>d.server.ui.show_promotional_content);localStorage.setItem("prefect-show-promotional-content",String(f.value));const v=U(()=>r.read.work_pool),{showModal:h,open:b}=W(),{value:o}=G("local","join-the-community-modal-dismissed",!1);function p(y){h.value=y,y||(o.value=!0)}return(y,_)=>{const M=c("p-icon"),P=c("router-link"),A=c("p-button");return m(),g(e(Q),{class:"context-sidebar"},{header:n(()=>[t(P,{to:e(i).root(),class:"context-sidebar__logo-link"},{default:n(()=>[t(M,{icon:"Prefect",class:"context-sidebar__logo-icon"})]),_:1},8,["to"])]),footer:n(()=>[f.value?(m(),D("a",Ce,[t(e(l),null,{default:n(()=>[_[1]||(_[1]=V("div",null," Ready to scale? ",-1)),t(A,{primary:"",small:"",class:"context-sidebar__upgade-button"},{default:n(()=>[..._[0]||(_[0]=[S(" Upgrade ",-1)])]),_:1})]),_:1})])):w("",!0),f.value?(m(),g(e(l),{key:1,onClick:e(b)},{default:n(()=>[_[2]||(_[2]=S(" Join the Community ",-1)),t(be,{"show-modal":e(h)||!e(o),"onUpdate:showModal":p},null,8,["show-modal"])]),_:1},8,["onClick"])):w("",!0),t(e(l),{title:"Settings",to:e(i).settings()},null,8,["to"])]),default:n(()=>[t(e(l),{title:"Dashboard",to:e(i).dashboard()},null,8,["to"]),t(e(l),{title:"Runs",to:e(i).runs()},null,8,["to"]),t(e(l),{title:"Flows",to:e(i).flows()},null,8,["to"]),t(e(l),{title:"Deployments",to:e(i).deployments()},null,8,["to"]),v.value?(m(),g(e(l),{key:0,title:"Work Pools",to:e(i).workPools()},null,8,["to"])):w("",!0),v.value?w("",!0):(m(),g(e(l),{key:1,title:"Work Queues",to:e(i).workQueues()},null,8,["to"])),t(e(l),{title:"Blocks",to:e(i).blocks()},null,8,["to"]),t(e(l),{title:e(Y).info.variables,to:e(i).variables()},null,8,["title","to"]),t(e(l),{title:"Automations",to:e(i).automations()},null,8,["to"]),t(e(l),{title:"Event Feed",to:e(i).events()},null,8,["to"]),t(e(l),{title:"Concurrency",to:e(i).concurrencyLimits()},null,8,["to"])]),_:1})}}});async function Me(){const a=await _e.get("apiUrl"),s={baseUrl:a};return a.startsWith("/")&&z(),{config:s}}function Pe(){const a=H(fe.getFeatureFlags,[]),s=U(()=>[...Z,...a.response??[]]),u=X(s),r=U(()=>a.loading);return{can:u,pending:r}}function xe(){const a=J(!1);function s(){a.value=!a.value}function u(){a.value=!0}function r(){a.value=!1}return{mobileMenuOpen:a,open:u,close:r,toggle:s}}const Je={class:"app-router-view"},je=E({__name:"AppRouterView",async setup(a){let s,u;const{can:r}=Pe(),{config:k}=([s,u]=N(()=>Me()),s=await s,u(),s),d=ve(k),f=ue();x(pe,r),x(ie,r),x(ge,d),x(re,d),x(ce,f),d.admin.authCheck().then(p=>{p==401?$.currentRoute.value.name!=="login"&&(B("Authentication failed.","error",{timeout:!1}),$.push({name:"login",query:{redirect:$.currentRoute.value.fullPath}})):d.health.isHealthy().then(y=>{y||B(`Can't connect to Server API at ${k.baseUrl}. Check that it's accessible from your machine.`,"error",{timeout:!1})})});const{mobileMenuOpen:v,toggle:h,close:b}=xe(),o=U(()=>j.lg||v.value);return ee(()=>document.body.classList.toggle("body-scrolling-disabled",o.value&&!j.lg)),(p,y)=>{const _=c("router-link"),M=c("p-button");return m(),D("div",Je,[!e(j).lg&&!p.$route.meta.public?(m(),g(e(oe),{key:0,class:"app-router-view__mobile-menu"},{"upper-links":n(()=>[t(_,{to:e(i).root()},{default:n(()=>[t(e(te),{icon:"Prefect",class:"app-router-view__prefect-icon"})]),_:1},8,["to"])]),"bottom-links":n(()=>[t(M,{small:"",icon:"Bars3Icon",class:"app-router-view__menu-icon",onClick:e(h)},null,8,["onClick"])]),_:1})):w("",!0),o.value&&!p.$route.meta.public?(m(),g(Se,{key:1,class:"app-router-view__sidebar",onClick:e(b)},null,8,["onClick"])):w("",!0),t(e(le),{class:ae(["app-router-view__view",{"app-router-view__view--public":p.$route.meta.public}])},{default:n(({Component:P})=>[t(ne,{name:"app-router-view-fade",mode:"out-in"},{default:n(()=>[(m(),g(se(P)))]),_:2},1024)]),_:1},8,["class"])])}}});export{je as default};
|
|
2
|
+
//# sourceMappingURL=AppRouterView-C0FcJnhj.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppRouterView-DwDQtyvQ.js","sources":["../../src/components/JoinTheCommunityModal.vue","../../src/components/ContextSidebar.vue","../../src/compositions/useApiConfig.ts","../../src/compositions/useCreateCan.ts","../../src/compositions/useMobileMenuOpen.ts","../../src/pages/AppRouterView.vue"],"sourcesContent":["<template>\n <p-modal v-model:show-modal=\"showModal\" title=\"Join the Prefect Community\">\n <template #header>\n <h2>Join the Community</h2>\n </template>\n\n <template #default>\n <p>\n Connect with 25k+ engineers scaling Python with Prefect. Show us your work and be the first to know about new Prefect features.\n </p>\n\n <div class=\"flex gap-x-2 items-center\">\n <p-button primary icon=\"Slack\" :to=\"joinSlackUrl\" target=\"_blank\" @click=\"showJoinSlackThankYouMessage = true\">\n Join us on Slack\n </p-button>\n\n <span v-if=\"showJoinSlackThankYouMessage\" class=\"text-sm italic\">\n Thanks for joining our community!\n </span>\n </div>\n\n <p-divider class=\"-my-3\" />\n\n <p-form :id=\"formId\" @submit=\"signUpForEmailUpdates\">\n <p-label v-slot=\"{ id }\" label=\"Notify me about Prefect updates\" :state :message=\"state.error\">\n <p-text-input\n :id\n v-model=\"email\"\n placeholder=\"hello@prefect.io\"\n :state\n />\n </p-label>\n </p-form>\n\n <p-message v-if=\"error\" error>\n {{ error }}\n </p-message>\n </template>\n\n <template #cancel=\"scope\">\n <p-button class=\"sm:order-first\" @click=\"scope.close\">\n Skip\n </p-button>\n </template>\n\n <template #actions>\n <p-button primary type=\"submit\" :form=\"formId\" :loading>\n Sign up\n </p-button>\n </template>\n </p-modal>\n</template>\n\n<script setup lang=\"ts\">\n import { showToast } from '@prefecthq/prefect-design'\n import { isEmail, isRequired } from '@prefecthq/prefect-ui-library'\n import { useValidation } from '@prefecthq/vue-compositions'\n import { ref } from 'vue'\n\n const showModal = defineModel<boolean>('showModal')\n\n const joinSlackUrl = 'http://prefect.io/slack?utm_source=oss&utm_medium=oss&utm_campaign=oss_popup&utm_term=none&utm_content=none'\n const showJoinSlackThankYouMessage = ref(false)\n\n const formId = 'join-the-community-modal'\n const email = ref<string>()\n const { validate, state } = useValidation(email, [isRequired('Email'), isEmail('Email')])\n\n const loading = ref(false)\n const error = ref('')\n\n const formEndpoint = 'https://getform.io/f/eapderva'\n async function signUpForEmailUpdates(): Promise<void> {\n if (!await validate()) {\n return\n }\n\n error.value = ''\n loading.value = true\n try {\n await fetch(formEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ email: email.value }),\n // getform redirects to a thank-you page so this cancels that additional request\n redirect: 'manual',\n })\n\n showModal.value = false\n showToast('Successfully subscribed', 'success')\n } catch (err) {\n error.value = 'An error occurred. Please try again.'\n console.error(err)\n } finally {\n loading.value = false\n }\n }\n</script>","<template>\n <p-context-sidebar class=\"context-sidebar\">\n <template #header>\n <router-link :to=\"routes.root()\" class=\"context-sidebar__logo-link\">\n <p-icon icon=\"Prefect\" class=\"context-sidebar__logo-icon\" />\n </router-link>\n </template>\n <p-context-nav-item title=\"Dashboard\" :to=\"routes.dashboard()\" />\n <p-context-nav-item title=\"Runs\" :to=\"routes.runs()\" />\n <p-context-nav-item title=\"Flows\" :to=\"routes.flows()\" />\n <p-context-nav-item title=\"Deployments\" :to=\"routes.deployments()\" />\n <p-context-nav-item v-if=\"canSeeWorkPools\" title=\"Work Pools\" :to=\"routes.workPools()\" />\n <p-context-nav-item v-if=\"!canSeeWorkPools\" title=\"Work Queues\" :to=\"routes.workQueues()\" />\n <p-context-nav-item title=\"Blocks\" :to=\"routes.blocks()\" />\n <p-context-nav-item :title=\"localization.info.variables\" :to=\"routes.variables()\" />\n <p-context-nav-item title=\"Automations\" :to=\"routes.automations()\" />\n <p-context-nav-item title=\"Event Feed\" :to=\"routes.events()\" />\n <p-context-nav-item title=\"Concurrency\" :to=\"routes.concurrencyLimits()\" />\n\n <template #footer>\n <a v-if=\"showPromotionalContent\" href=\"https://www.prefect.io/cloud-vs-oss?utm_source=oss&utm_medium=oss&utm_campaign=oss&utm_term=none&utm_content=none\" target=\"_blank\">\n <p-context-nav-item>\n <div>\n Ready to scale?\n </div>\n <p-button primary small class=\"context-sidebar__upgade-button\">\n Upgrade\n </p-button>\n </p-context-nav-item>\n </a>\n\n <p-context-nav-item v-if=\"showPromotionalContent\" @click=\"openJoinCommunityModal\">\n Join the Community\n <JoinTheCommunityModal :show-modal=\"showJoinCommunityModal || !joinTheCommunityModalDismissed\" @update:show-modal=\"updateShowModal\" />\n </p-context-nav-item>\n\n <p-context-nav-item title=\"Settings\" :to=\"routes.settings()\" />\n </template>\n </p-context-sidebar>\n</template>\n\n<script lang=\"ts\" setup>\n import JoinTheCommunityModal from '@/components/JoinTheCommunityModal.vue'\n import { useCan } from '@/compositions/useCan'\n import { usePrefectApi } from '@/compositions/usePrefectApi'\n import { routes } from '@/router'\n import { PContextNavItem, PContextSidebar } from '@prefecthq/prefect-design'\n import { localization, useShowModal } from '@prefecthq/prefect-ui-library'\n import { useStorage } from '@prefecthq/vue-compositions'\n import { computed } from 'vue'\n\n const can = useCan()\n const api = usePrefectApi()\n const serverSettings = await api.admin.getSettings()\n const showPromotionalContent = computed(() => serverSettings.server.ui.show_promotional_content)\n\n // Cache to localStorage for use in error toasts\n localStorage.setItem('prefect-show-promotional-content', String(showPromotionalContent.value))\n const canSeeWorkPools = computed(() => can.read.work_pool)\n\n const { showModal: showJoinCommunityModal, open: openJoinCommunityModal } = useShowModal()\n const { value: joinTheCommunityModalDismissed } = useStorage('local', 'join-the-community-modal-dismissed', false)\n function updateShowModal(updatedShowModal: boolean): void {\n showJoinCommunityModal.value = updatedShowModal\n if (!updatedShowModal) {\n joinTheCommunityModalDismissed.value = true\n }\n }\n</script>\n\n<style>\n.context-sidebar__logo-link { @apply\n outline-none\n rounded-md\n focus:ring-spacing-focus-ring\n focus:ring-focus-ring\n}\n\n.context-sidebar__logo-link:focus:not(:focus-visible) { @apply\n ring-transparent\n}\n\n.context-sidebar__logo-icon { @apply\n !w-[42px]\n !h-[42px]\n}\n\n.context-sidebar__upgade-button { @apply\n ml-auto\n}\n</style>","import { PrefectConfig } from '@prefecthq/prefect-ui-library'\nimport { UiSettings } from '@/services/uiSettings'\nimport { MODE } from '@/utilities/meta'\n\nexport type UseWorkspaceApiConfig = {\n config: PrefectConfig,\n}\nexport async function useApiConfig(): Promise<UseWorkspaceApiConfig> {\n const baseUrl = await UiSettings.get('apiUrl')\n const config: PrefectConfig = { baseUrl }\n\n if (baseUrl.startsWith('/') && MODE() === 'development') {\n config.baseUrl = `http://127.0.0.1:4200${baseUrl}`\n }\n\n return { config }\n}","import { Can, createCan, workspacePermissions } from '@prefecthq/prefect-ui-library'\nimport { useSubscription } from '@prefecthq/vue-compositions'\nimport { computed, Ref } from 'vue'\nimport { uiSettings } from '@/services/uiSettings'\nimport { Permission } from '@/utilities/permissions'\n\ntype UseCreateCan = {\n can: Can<Permission>,\n pending: Ref<boolean>,\n}\n\nexport function useCreateCan(): UseCreateCan {\n const flagsSubscription = useSubscription(uiSettings.getFeatureFlags, [])\n\n const permissions = computed<Permission[]>(() => [\n ...workspacePermissions,\n ...flagsSubscription.response ?? [],\n ])\n\n const can = createCan(permissions)\n const pending = computed(() => flagsSubscription.loading)\n\n return {\n can,\n pending,\n }\n}","import { Ref, ref } from 'vue'\n\nexport type UseMobileMenuOpen = {\n mobileMenuOpen: Ref<boolean>,\n open: () => void,\n close: () => void,\n toggle: () => void,\n}\n\nexport function useMobileMenuOpen(): UseMobileMenuOpen {\n const mobileMenuOpen = ref(false)\n\n function toggle(): void {\n mobileMenuOpen.value = !mobileMenuOpen.value\n }\n\n function open(): void {\n mobileMenuOpen.value = true\n }\n\n function close(): void {\n mobileMenuOpen.value = false\n }\n\n return {\n mobileMenuOpen,\n open,\n close,\n toggle,\n }\n}","<template>\n <div class=\"app-router-view\">\n <template v-if=\"!media.lg && !$route.meta.public\">\n <PGlobalSidebar class=\"app-router-view__mobile-menu\">\n <template #upper-links>\n <router-link :to=\"appRoutes.root()\">\n <p-icon icon=\"Prefect\" class=\"app-router-view__prefect-icon\" />\n </router-link>\n </template>\n <template #bottom-links>\n <p-button small icon=\"Bars3Icon\" class=\"app-router-view__menu-icon\" @click=\"toggle\" />\n </template>\n </PGlobalSidebar>\n </template>\n <ContextSidebar v-if=\"showMenu && !$route.meta.public\" class=\"app-router-view__sidebar\" @click=\"close\" />\n <router-view :class=\"['app-router-view__view', { 'app-router-view__view--public': $route.meta.public }]\">\n <template #default=\"{ Component }\">\n <transition name=\"app-router-view-fade\" mode=\"out-in\">\n <component :is=\"Component\" />\n </transition>\n </template>\n </router-view>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n import { PGlobalSidebar, PIcon, media, showToast } from '@prefecthq/prefect-design'\n import { workspaceApiKey, canKey as designCanKey, createWorkspaceRoutes, workspaceRoutesKey } from '@prefecthq/prefect-ui-library'\n import { computed, provide, watchEffect } from 'vue'\n import { RouterView } from 'vue-router'\n import ContextSidebar from '@/components/ContextSidebar.vue'\n import { useApiConfig } from '@/compositions/useApiConfig'\n import { useCreateCan } from '@/compositions/useCreateCan'\n import { useMobileMenuOpen } from '@/compositions/useMobileMenuOpen'\n import router, { routes as appRoutes } from '@/router'\n import { createPrefectApi, prefectApiKey } from '@/utilities/api'\n import { canKey } from '@/utilities/permissions'\n import { UiSettings } from '@/services/uiSettings'\n\n const { can } = useCreateCan()\n const { config } = await useApiConfig()\n const api = createPrefectApi(config)\n const routes = createWorkspaceRoutes()\n\n provide(canKey, can)\n provide(designCanKey, can)\n provide(prefectApiKey, api)\n provide(workspaceApiKey, api)\n provide(workspaceRoutesKey, routes)\n\n\n api.admin.authCheck().then(status_code => {\n if (status_code == 401) {\n if (router.currentRoute.value.name !== 'login') {\n showToast('Authentication failed.', 'error', { timeout: false })\n router.push({\n name: 'login', \n query: { redirect: router.currentRoute.value.fullPath }\n })\n }\n } else {\n api.health.isHealthy().then(healthy => {\n if (!healthy) {\n showToast(`Can't connect to Server API at ${config.baseUrl}. Check that it's accessible from your machine.`, 'error', { timeout: false })\n }\n })\n }\n })\n\n const { mobileMenuOpen, toggle, close } = useMobileMenuOpen()\n const showMenu = computed(() => media.lg || mobileMenuOpen.value)\n\n watchEffect(() => document.body.classList.toggle('body-scrolling-disabled', showMenu.value && !media.lg))\n</script>\n\n<style>\n.body-scrolling-disabled { @apply\n overflow-hidden\n}\n\n.app-router-view { @apply\n flex\n flex-col\n bg-no-repeat\n overflow-auto;\n --prefect-scroll-margin: theme('spacing.20');\n height: 100vh;\n background-image: url('/decorative_iso-pixel-grid_light.svg');\n background-attachment: fixed;\n background-position: bottom -140px left -140px;\n}\n\n.dark .app-router-view {\n background-image: url('/decorative_iso-pixel-grid_dark.svg');\n}\n\n.app-router-view__prefect-icon { @apply\n w-7\n h-7\n}\n\n.app-router-view__mobile-menu { @apply\n h-auto\n py-3\n}\n\n.app-router-view__sidebar { @apply\n bg-floating\n top-[54px]\n lg:bg-transparent\n lg:top-0\n}\n\n.app-router-view__sidebar .p-context-sidebar__header { @apply\n hidden\n lg:block\n}\n\n.app-router-view__view {\n /* The 1px flex-basis is important because it allows us to use height: 100% without additional flexing */\n flex: 1 0 1px;\n height: 100%;\n}\n\n.app-router-view__view--public { @apply\n flex\n items-center\n justify-center;\n grid-column: 1 / -1;\n}\n\n@screen lg {\n .app-router-view {\n --prefect-scroll-margin: theme('spacing.2');\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n }\n}\n\n.app-router-view-fade-enter-active,\n.app-router-view-fade-leave-active {\n transition: opacity 0.25s ease;\n}\n\n.app-router-view-fade-enter-from,\n.app-router-view-fade-leave-to {\n opacity: 0;\n}\n</style>"],"names":["joinSlackUrl","formId","formEndpoint","showModal","_useModel","__props","showJoinSlackThankYouMessage","ref","email","validate","state","useValidation","isRequired","isEmail","loading","error","signUpForEmailUpdates","showToast","err","_createBlock","_component_p_modal","$event","_cache","_createElementVNode","_hoisted_1","_createVNode","_component_p_button","_createElementBlock","_hoisted_2","_component_p_divider","_component_p_form","_component_p_label","_unref","_withCtx","id","_component_p_text_input","_component_p_message","scope","can","useCan","api","usePrefectApi","serverSettings","__temp","__restore","_withAsyncContext","showPromotionalContent","computed","canSeeWorkPools","showJoinCommunityModal","openJoinCommunityModal","useShowModal","joinTheCommunityModalDismissed","useStorage","updateShowModal","updatedShowModal","PContextSidebar","_component_router_link","routes","_component_p_icon","_openBlock","PContextNavItem","JoinTheCommunityModal","localization","useApiConfig","baseUrl","UiSettings","config","MODE","useCreateCan","flagsSubscription","useSubscription","uiSettings","permissions","workspacePermissions","createCan","pending","useMobileMenuOpen","mobileMenuOpen","toggle","open","close","createPrefectApi","createWorkspaceRoutes","provide","canKey","designCanKey","prefectApiKey","workspaceApiKey","workspaceRoutesKey","status_code","router","healthy","showMenu","media","watchEffect","$route","PGlobalSidebar","appRoutes","PIcon","ContextSidebar","RouterView","_normalizeClass","Component","_Transition","_resolveDynamicComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AppRouterView-C0FcJnhj.js","sources":["../../src/components/JoinTheCommunityModal.vue","../../src/components/ContextSidebar.vue","../../src/compositions/useApiConfig.ts","../../src/compositions/useCreateCan.ts","../../src/compositions/useMobileMenuOpen.ts","../../src/pages/AppRouterView.vue"],"sourcesContent":["<template>\n <p-modal v-model:show-modal=\"showModal\" title=\"Join the Prefect Community\">\n <template #header>\n <h2>Join the Community</h2>\n </template>\n\n <template #default>\n <p>\n Connect with 25k+ engineers scaling Python with Prefect. Show us your work and be the first to know about new Prefect features.\n </p>\n\n <div class=\"flex gap-x-2 items-center\">\n <p-button primary icon=\"Slack\" :to=\"joinSlackUrl\" target=\"_blank\" @click=\"showJoinSlackThankYouMessage = true\">\n Join us on Slack\n </p-button>\n\n <span v-if=\"showJoinSlackThankYouMessage\" class=\"text-sm italic\">\n Thanks for joining our community!\n </span>\n </div>\n\n <p-divider class=\"-my-3\" />\n\n <p-form :id=\"formId\" @submit=\"signUpForEmailUpdates\">\n <p-label v-slot=\"{ id }\" label=\"Notify me about Prefect updates\" :state :message=\"state.error\">\n <p-text-input\n :id\n v-model=\"email\"\n placeholder=\"hello@prefect.io\"\n :state\n />\n </p-label>\n </p-form>\n\n <p-message v-if=\"error\" error>\n {{ error }}\n </p-message>\n </template>\n\n <template #cancel=\"scope\">\n <p-button class=\"sm:order-first\" @click=\"scope.close\">\n Skip\n </p-button>\n </template>\n\n <template #actions>\n <p-button primary type=\"submit\" :form=\"formId\" :loading>\n Sign up\n </p-button>\n </template>\n </p-modal>\n</template>\n\n<script setup lang=\"ts\">\n import { showToast } from '@prefecthq/prefect-design'\n import { isEmail, isRequired } from '@prefecthq/prefect-ui-library'\n import { useValidation } from '@prefecthq/vue-compositions'\n import { ref } from 'vue'\n\n const showModal = defineModel<boolean>('showModal')\n\n const joinSlackUrl = 'http://prefect.io/slack?utm_source=oss&utm_medium=oss&utm_campaign=oss_popup&utm_term=none&utm_content=none'\n const showJoinSlackThankYouMessage = ref(false)\n\n const formId = 'join-the-community-modal'\n const email = ref<string>()\n const { validate, state } = useValidation(email, [isRequired('Email'), isEmail('Email')])\n\n const loading = ref(false)\n const error = ref('')\n\n const formEndpoint = 'https://getform.io/f/eapderva'\n async function signUpForEmailUpdates(): Promise<void> {\n if (!await validate()) {\n return\n }\n\n error.value = ''\n loading.value = true\n try {\n await fetch(formEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ email: email.value }),\n // getform redirects to a thank-you page so this cancels that additional request\n redirect: 'manual',\n })\n\n showModal.value = false\n showToast('Successfully subscribed', 'success')\n } catch (err) {\n error.value = 'An error occurred. Please try again.'\n console.error(err)\n } finally {\n loading.value = false\n }\n }\n</script>","<template>\n <p-context-sidebar class=\"context-sidebar\">\n <template #header>\n <router-link :to=\"routes.root()\" class=\"context-sidebar__logo-link\">\n <p-icon icon=\"Prefect\" class=\"context-sidebar__logo-icon\" />\n </router-link>\n </template>\n <p-context-nav-item title=\"Dashboard\" :to=\"routes.dashboard()\" />\n <p-context-nav-item title=\"Runs\" :to=\"routes.runs()\" />\n <p-context-nav-item title=\"Flows\" :to=\"routes.flows()\" />\n <p-context-nav-item title=\"Deployments\" :to=\"routes.deployments()\" />\n <p-context-nav-item v-if=\"canSeeWorkPools\" title=\"Work Pools\" :to=\"routes.workPools()\" />\n <p-context-nav-item v-if=\"!canSeeWorkPools\" title=\"Work Queues\" :to=\"routes.workQueues()\" />\n <p-context-nav-item title=\"Blocks\" :to=\"routes.blocks()\" />\n <p-context-nav-item :title=\"localization.info.variables\" :to=\"routes.variables()\" />\n <p-context-nav-item title=\"Automations\" :to=\"routes.automations()\" />\n <p-context-nav-item title=\"Event Feed\" :to=\"routes.events()\" />\n <p-context-nav-item title=\"Concurrency\" :to=\"routes.concurrencyLimits()\" />\n\n <template #footer>\n <a v-if=\"showPromotionalContent\" href=\"https://www.prefect.io/cloud-vs-oss?utm_source=oss&utm_medium=oss&utm_campaign=oss&utm_term=none&utm_content=none\" target=\"_blank\">\n <p-context-nav-item>\n <div>\n Ready to scale?\n </div>\n <p-button primary small class=\"context-sidebar__upgade-button\">\n Upgrade\n </p-button>\n </p-context-nav-item>\n </a>\n\n <p-context-nav-item v-if=\"showPromotionalContent\" @click=\"openJoinCommunityModal\">\n Join the Community\n <JoinTheCommunityModal :show-modal=\"showJoinCommunityModal || !joinTheCommunityModalDismissed\" @update:show-modal=\"updateShowModal\" />\n </p-context-nav-item>\n\n <p-context-nav-item title=\"Settings\" :to=\"routes.settings()\" />\n </template>\n </p-context-sidebar>\n</template>\n\n<script lang=\"ts\" setup>\n import JoinTheCommunityModal from '@/components/JoinTheCommunityModal.vue'\n import { useCan } from '@/compositions/useCan'\n import { usePrefectApi } from '@/compositions/usePrefectApi'\n import { routes } from '@/router'\n import { PContextNavItem, PContextSidebar } from '@prefecthq/prefect-design'\n import { localization, useShowModal } from '@prefecthq/prefect-ui-library'\n import { useStorage } from '@prefecthq/vue-compositions'\n import { computed } from 'vue'\n\n const can = useCan()\n const api = usePrefectApi()\n const serverSettings = await api.admin.getSettings()\n const showPromotionalContent = computed(() => serverSettings.server.ui.show_promotional_content)\n\n // Cache to localStorage for use in error toasts\n localStorage.setItem('prefect-show-promotional-content', String(showPromotionalContent.value))\n const canSeeWorkPools = computed(() => can.read.work_pool)\n\n const { showModal: showJoinCommunityModal, open: openJoinCommunityModal } = useShowModal()\n const { value: joinTheCommunityModalDismissed } = useStorage('local', 'join-the-community-modal-dismissed', false)\n function updateShowModal(updatedShowModal: boolean): void {\n showJoinCommunityModal.value = updatedShowModal\n if (!updatedShowModal) {\n joinTheCommunityModalDismissed.value = true\n }\n }\n</script>\n\n<style>\n.context-sidebar__logo-link { @apply\n outline-none\n rounded-md\n focus:ring-spacing-focus-ring\n focus:ring-focus-ring\n}\n\n.context-sidebar__logo-link:focus:not(:focus-visible) { @apply\n ring-transparent\n}\n\n.context-sidebar__logo-icon { @apply\n !w-[42px]\n !h-[42px]\n}\n\n.context-sidebar__upgade-button { @apply\n ml-auto\n}\n</style>","import { PrefectConfig } from '@prefecthq/prefect-ui-library'\nimport { UiSettings } from '@/services/uiSettings'\nimport { MODE } from '@/utilities/meta'\n\nexport type UseWorkspaceApiConfig = {\n config: PrefectConfig,\n}\nexport async function useApiConfig(): Promise<UseWorkspaceApiConfig> {\n const baseUrl = await UiSettings.get('apiUrl')\n const config: PrefectConfig = { baseUrl }\n\n if (baseUrl.startsWith('/') && MODE() === 'development') {\n config.baseUrl = `http://127.0.0.1:4200${baseUrl}`\n }\n\n return { config }\n}","import { Can, createCan, workspacePermissions } from '@prefecthq/prefect-ui-library'\nimport { useSubscription } from '@prefecthq/vue-compositions'\nimport { computed, Ref } from 'vue'\nimport { uiSettings } from '@/services/uiSettings'\nimport { Permission } from '@/utilities/permissions'\n\ntype UseCreateCan = {\n can: Can<Permission>,\n pending: Ref<boolean>,\n}\n\nexport function useCreateCan(): UseCreateCan {\n const flagsSubscription = useSubscription(uiSettings.getFeatureFlags, [])\n\n const permissions = computed<Permission[]>(() => [\n ...workspacePermissions,\n ...flagsSubscription.response ?? [],\n ])\n\n const can = createCan(permissions)\n const pending = computed(() => flagsSubscription.loading)\n\n return {\n can,\n pending,\n }\n}","import { Ref, ref } from 'vue'\n\nexport type UseMobileMenuOpen = {\n mobileMenuOpen: Ref<boolean>,\n open: () => void,\n close: () => void,\n toggle: () => void,\n}\n\nexport function useMobileMenuOpen(): UseMobileMenuOpen {\n const mobileMenuOpen = ref(false)\n\n function toggle(): void {\n mobileMenuOpen.value = !mobileMenuOpen.value\n }\n\n function open(): void {\n mobileMenuOpen.value = true\n }\n\n function close(): void {\n mobileMenuOpen.value = false\n }\n\n return {\n mobileMenuOpen,\n open,\n close,\n toggle,\n }\n}","<template>\n <div class=\"app-router-view\">\n <template v-if=\"!media.lg && !$route.meta.public\">\n <PGlobalSidebar class=\"app-router-view__mobile-menu\">\n <template #upper-links>\n <router-link :to=\"appRoutes.root()\">\n <p-icon icon=\"Prefect\" class=\"app-router-view__prefect-icon\" />\n </router-link>\n </template>\n <template #bottom-links>\n <p-button small icon=\"Bars3Icon\" class=\"app-router-view__menu-icon\" @click=\"toggle\" />\n </template>\n </PGlobalSidebar>\n </template>\n <ContextSidebar v-if=\"showMenu && !$route.meta.public\" class=\"app-router-view__sidebar\" @click=\"close\" />\n <router-view :class=\"['app-router-view__view', { 'app-router-view__view--public': $route.meta.public }]\">\n <template #default=\"{ Component }\">\n <transition name=\"app-router-view-fade\" mode=\"out-in\">\n <component :is=\"Component\" />\n </transition>\n </template>\n </router-view>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\n import { PGlobalSidebar, PIcon, media, showToast } from '@prefecthq/prefect-design'\n import { workspaceApiKey, canKey as designCanKey, createWorkspaceRoutes, workspaceRoutesKey } from '@prefecthq/prefect-ui-library'\n import { computed, provide, watchEffect } from 'vue'\n import { RouterView } from 'vue-router'\n import ContextSidebar from '@/components/ContextSidebar.vue'\n import { useApiConfig } from '@/compositions/useApiConfig'\n import { useCreateCan } from '@/compositions/useCreateCan'\n import { useMobileMenuOpen } from '@/compositions/useMobileMenuOpen'\n import router, { routes as appRoutes } from '@/router'\n import { createPrefectApi, prefectApiKey } from '@/utilities/api'\n import { canKey } from '@/utilities/permissions'\n import { UiSettings } from '@/services/uiSettings'\n\n const { can } = useCreateCan()\n const { config } = await useApiConfig()\n const api = createPrefectApi(config)\n const routes = createWorkspaceRoutes()\n\n provide(canKey, can)\n provide(designCanKey, can)\n provide(prefectApiKey, api)\n provide(workspaceApiKey, api)\n provide(workspaceRoutesKey, routes)\n\n\n api.admin.authCheck().then(status_code => {\n if (status_code == 401) {\n if (router.currentRoute.value.name !== 'login') {\n showToast('Authentication failed.', 'error', { timeout: false })\n router.push({\n name: 'login', \n query: { redirect: router.currentRoute.value.fullPath }\n })\n }\n } else {\n api.health.isHealthy().then(healthy => {\n if (!healthy) {\n showToast(`Can't connect to Server API at ${config.baseUrl}. Check that it's accessible from your machine.`, 'error', { timeout: false })\n }\n })\n }\n })\n\n const { mobileMenuOpen, toggle, close } = useMobileMenuOpen()\n const showMenu = computed(() => media.lg || mobileMenuOpen.value)\n\n watchEffect(() => document.body.classList.toggle('body-scrolling-disabled', showMenu.value && !media.lg))\n</script>\n\n<style>\n.body-scrolling-disabled { @apply\n overflow-hidden\n}\n\n.app-router-view { @apply\n flex\n flex-col\n bg-no-repeat\n overflow-auto;\n --prefect-scroll-margin: theme('spacing.20');\n height: 100vh;\n background-image: url('/decorative_iso-pixel-grid_light.svg');\n background-attachment: fixed;\n background-position: bottom -140px left -140px;\n}\n\n.dark .app-router-view {\n background-image: url('/decorative_iso-pixel-grid_dark.svg');\n}\n\n.app-router-view__prefect-icon { @apply\n w-7\n h-7\n}\n\n.app-router-view__mobile-menu { @apply\n h-auto\n py-3\n}\n\n.app-router-view__sidebar { @apply\n bg-floating\n top-[54px]\n lg:bg-transparent\n lg:top-0\n}\n\n.app-router-view__sidebar .p-context-sidebar__header { @apply\n hidden\n lg:block\n}\n\n.app-router-view__view {\n /* The 1px flex-basis is important because it allows us to use height: 100% without additional flexing */\n flex: 1 0 1px;\n height: 100%;\n}\n\n.app-router-view__view--public { @apply\n flex\n items-center\n justify-center;\n grid-column: 1 / -1;\n}\n\n@screen lg {\n .app-router-view {\n --prefect-scroll-margin: theme('spacing.2');\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n }\n}\n\n.app-router-view-fade-enter-active,\n.app-router-view-fade-leave-active {\n transition: opacity 0.25s ease;\n}\n\n.app-router-view-fade-enter-from,\n.app-router-view-fade-leave-to {\n opacity: 0;\n}\n</style>"],"names":["joinSlackUrl","formId","formEndpoint","showModal","_useModel","__props","showJoinSlackThankYouMessage","ref","email","validate","state","useValidation","isRequired","isEmail","loading","error","signUpForEmailUpdates","showToast","err","_createBlock","_component_p_modal","$event","_cache","_createElementVNode","_hoisted_1","_createVNode","_component_p_button","_createElementBlock","_hoisted_2","_component_p_divider","_component_p_form","_component_p_label","_unref","_withCtx","id","_component_p_text_input","_component_p_message","scope","can","useCan","api","usePrefectApi","serverSettings","__temp","__restore","_withAsyncContext","showPromotionalContent","computed","canSeeWorkPools","showJoinCommunityModal","openJoinCommunityModal","useShowModal","joinTheCommunityModalDismissed","useStorage","updateShowModal","updatedShowModal","PContextSidebar","_component_router_link","routes","_component_p_icon","_openBlock","PContextNavItem","JoinTheCommunityModal","localization","useApiConfig","baseUrl","UiSettings","config","MODE","useCreateCan","flagsSubscription","useSubscription","uiSettings","permissions","workspacePermissions","createCan","pending","useMobileMenuOpen","mobileMenuOpen","toggle","open","close","createPrefectApi","createWorkspaceRoutes","provide","canKey","designCanKey","prefectApiKey","workspaceApiKey","workspaceRoutesKey","status_code","router","healthy","showMenu","media","watchEffect","$route","PGlobalSidebar","appRoutes","PIcon","ContextSidebar","RouterView","_normalizeClass","Component","_Transition","_resolveDynamicComponent"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as I,S as N,v as h,j,g as p,ae as D,al as R,G as d,aH as T,h as c,c as n,o as l,i as e,n as V,a as i,k as s,m as t,aI as $,aJ as H,aK as _,B as L,t as z,aL as v,a6 as E,aM as m,aN as G}from"./index-
|
|
2
|
-
//# sourceMappingURL=Artifact-
|
|
1
|
+
import{d as I,S as N,v as h,j,g as p,ae as D,al as R,G as d,aH as T,h as c,c as n,o as l,i as e,n as V,a as i,k as s,m as t,aI as $,aJ as H,aK as _,B as L,t as z,aL as v,a6 as E,aM as m,aN as G}from"./index-DS86r6aC.js";import{u as J}from"./usePageTitle-BXVkHaWQ.js";const K={key:0},F=I({__name:"Artifact",setup(M){const y=N(),b=h("artifactId"),k=j(y.artifacts.getArtifact,[b]),a=p(()=>k.response),r=D(!1),w=[{label:"Artifact"},{label:"Details"},{label:"Raw"}],u=R("tab","Artifact"),g=p(()=>a.value?`${d.info.artifact}: ${a.value.key??T(a.value.type)}`:d.info.artifact);return J(g),(P,o)=>{const x=c("p-divider"),A=c("p-button"),C=c("p-content"),S=c("p-tabs"),B=c("p-layout-well");return l(),n(B,{class:"artifact"},{header:e(()=>[a.value?(l(),n(t(G),{key:0,artifact:a.value},null,8,["artifact"])):i("",!0)]),well:e(()=>[a.value?(l(),n(t(m),{key:0,artifact:a.value,alternate:""},null,8,["artifact"])):i("",!0)]),default:e(()=>[a.value?(l(),V("section",K,[s(t($),{artifact:a.value},null,8,["artifact"]),s(x),t(H).xl?(l(),n(C,{key:0},{default:e(()=>[s(t(_),{artifact:a.value},null,8,["artifact"]),s(A,{class:"artifact__raw-data-button",small:"",onClick:o[0]||(o[0]=f=>r.value=!r.value)},{default:e(()=>[L(z(r.value?"Hide":"Show")+" raw data ",1)]),_:1}),r.value?(l(),n(t(v),{key:0,artifact:a.value},null,8,["artifact"])):i("",!0)]),_:1})):(l(),n(S,{key:1,selected:t(u),"onUpdate:selected":o[1]||(o[1]=f=>E(u)?u.value=f:null),tabs:w},{artifact:e(()=>[s(t(_),{artifact:a.value},null,8,["artifact"])]),details:e(()=>[s(t(m),{artifact:a.value},null,8,["artifact"])]),raw:e(()=>[s(t(v),{artifact:a.value},null,8,["artifact"])]),_:1},8,["selected"]))])):i("",!0)]),_:1})}}});export{F as default};
|
|
2
|
+
//# sourceMappingURL=Artifact-sGuFYSde.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Artifact-
|
|
1
|
+
{"version":3,"file":"Artifact-sGuFYSde.js","sources":["../../src/pages/Artifact.vue"],"sourcesContent":["<template>\n <p-layout-well class=\"artifact\">\n <template #header>\n <PageHeadingArtifact v-if=\"artifact\" :artifact=\"artifact\" />\n </template>\n\n <section v-if=\"artifact\">\n <ArtifactDescription :artifact=\"artifact\" />\n\n <p-divider />\n\n <template v-if=\"media.xl\">\n <p-content>\n <ArtifactDataView :artifact=\"artifact\" />\n\n <p-button class=\"artifact__raw-data-button\" small @click=\"showRaw = !showRaw\">\n {{ showRaw ? 'Hide' : 'Show' }} raw data\n </p-button>\n\n <ArtifactDataRaw v-if=\"showRaw\" :artifact=\"artifact\" />\n </p-content>\n </template>\n\n <template v-else>\n <p-tabs v-model:selected=\"tab\" :tabs=\"tabs\">\n <template #artifact>\n <ArtifactDataView :artifact=\"artifact\" />\n </template>\n\n <template #details>\n <ArtifactDetails :artifact=\"artifact\" />\n </template>\n\n <template #raw>\n <ArtifactDataRaw :artifact=\"artifact\" />\n </template>\n </p-tabs>\n </template>\n </section>\n\n <template #well>\n <ArtifactDetails v-if=\"artifact\" :artifact=\"artifact\" alternate />\n </template>\n </p-layout-well>\n</template>\n\n<script lang=\"ts\" setup>\n import { media } from '@prefecthq/prefect-design'\n import {\n PageHeadingArtifact,\n ArtifactDataView,\n ArtifactDescription,\n ArtifactDetails,\n ArtifactDataRaw,\n localization,\n capitalize,\n useWorkspaceApi\n } from '@prefecthq/prefect-ui-library'\n import { useSubscription, useRouteParam, useRouteQueryParam } from '@prefecthq/vue-compositions'\n import { computed, ref } from 'vue'\n import { usePageTitle } from '@/compositions/usePageTitle'\n\n const api = useWorkspaceApi()\n const artifactId = useRouteParam('artifactId')\n\n const artifactSubscription = useSubscription(api.artifacts.getArtifact, [artifactId])\n const artifact = computed(() => artifactSubscription.response)\n\n const showRaw = ref(false)\n\n const tabs = [\n { label: 'Artifact' },\n { label: 'Details' },\n { label: 'Raw' },\n ]\n const tab = useRouteQueryParam('tab', 'Artifact')\n\n const pageTitle = computed<string>(() => {\n if (!artifact.value) {\n return localization.info.artifact\n }\n\n return `${localization.info.artifact}: ${artifact.value.key ?? capitalize(artifact.value.type)}`\n })\n\n usePageTitle(pageTitle)\n</script>\n\n<style>\n.artifact__raw-data-button { @apply\n mt-4\n inline-block\n mx-auto\n}\n</style>"],"names":["api","useWorkspaceApi","artifactId","useRouteParam","artifactSubscription","useSubscription","artifact","computed","showRaw","ref","tabs","tab","useRouteQueryParam","pageTitle","localization","capitalize","usePageTitle","_createBlock","_component_p_layout_well","_unref","PageHeadingArtifact","ArtifactDetails","_createElementBlock","_hoisted_1","_createVNode","ArtifactDescription","_component_p_divider","media","_component_p_content","ArtifactDataView","_component_p_button","_cache","$event","_createTextVNode","_toDisplayString","ArtifactDataRaw","_component_p_tabs"],"mappings":"2TA8DE,MAAMA,EAAMC,EAAA,EACNC,EAAaC,EAAc,YAAY,EAEvCC,EAAuBC,EAAgBL,EAAI,UAAU,YAAa,CAACE,CAAU,CAAC,EAC9EI,EAAWC,EAAS,IAAMH,EAAqB,QAAQ,EAEvDI,EAAUC,EAAI,EAAK,EAEnBC,EAAO,CACX,CAAE,MAAO,UAAA,EACT,CAAE,MAAO,SAAA,EACT,CAAE,MAAO,KAAA,CAAM,EAEXC,EAAMC,EAAmB,MAAO,UAAU,EAE1CC,EAAYN,EAAiB,IAC5BD,EAAS,MAIP,GAAGQ,EAAa,KAAK,QAAQ,KAAKR,EAAS,MAAM,KAAOS,EAAWT,EAAS,MAAM,IAAI,CAAC,GAHrFQ,EAAa,KAAK,QAI5B,EAED,OAAAE,EAAaH,CAAS,gHApFtBI,EA0CgBC,EAAA,CA1CD,MAAM,YAAU,CAClB,SACT,IAA4D,CAAjCZ,EAAA,WAA3BW,EAA4DE,EAAAC,CAAA,EAAA,OAAtB,SAAUd,EAAA,KAAA,mCAqCvC,OACT,IAAkE,CAA3CA,EAAA,WAAvBW,EAAkEE,EAAAE,CAAA,EAAA,OAAhC,SAAUf,EAAA,MAAU,UAAA,EAAA,6CAnCxD,IAgCU,CAhCKA,EAAA,WAAfgB,EAgCU,UAAAC,EAAA,CA/BRC,EAA4CL,EAAAM,CAAA,EAAA,CAAtB,SAAUnB,EAAA,KAAA,EAAQ,KAAA,EAAA,CAAA,UAAA,CAAA,EAExCkB,EAAaE,CAAA,EAEGP,EAAAQ,CAAA,EAAM,QACpBV,EAQYW,EAAA,CAAA,IAAA,GAAA,WAPV,IAAyC,CAAzCJ,EAAyCL,EAAAU,CAAA,EAAA,CAAtB,SAAUvB,EAAA,KAAA,EAAQ,KAAA,EAAA,CAAA,UAAA,CAAA,EAErCkB,EAEWM,EAAA,CAFD,MAAM,4BAA4B,MAAA,GAAO,QAAKC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAExB,EAAA,MAAO,CAAIA,EAAA,MAAA,aACnE,IAA+B,CAA5ByB,EAAAC,EAAA1B,EAAA,qBAA4B,aACjC,CAAA,CAAA,SAEuBA,EAAA,WAAvBS,EAAuDE,EAAAgB,CAAA,EAAA,OAAtB,SAAU7B,EAAA,KAAA,+CAK7CW,EAYSmB,EAAA,OAZO,SAAUjB,EAAAR,CAAA,0CAAAA,EAAG,MAAAqB,EAAA,MAAG,KAAAtB,CAAA,GACnB,WACT,IAAyC,CAAzCc,EAAyCL,EAAAU,CAAA,EAAA,CAAtB,SAAUvB,EAAA,OAAQ,KAAA,EAAA,CAAA,UAAA,CAAA,CAAA,GAG5B,UACT,IAAwC,CAAxCkB,EAAwCL,EAAAE,CAAA,EAAA,CAAtB,SAAUf,EAAA,OAAQ,KAAA,EAAA,CAAA,UAAA,CAAA,CAAA,GAG3B,MACT,IAAwC,CAAxCkB,EAAwCL,EAAAgB,CAAA,EAAA,CAAtB,SAAU7B,EAAA,OAAQ,KAAA,EAAA,CAAA,UAAA,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as m,S as y,v as _,j as k,g as s,G as o,h as v,c as e,o as t,i as n,a as r,n as d,m as c,aI as g,F as h,aO as C,aP as x}from"./index-
|
|
2
|
-
//# sourceMappingURL=ArtifactKey-
|
|
1
|
+
import{d as m,S as y,v as _,j as k,g as s,G as o,h as v,c as e,o as t,i as n,a as r,n as d,m as c,aI as g,F as h,aO as C,aP as x}from"./index-DS86r6aC.js";import{u as B}from"./usePageTitle-BXVkHaWQ.js";const P=m({__name:"ArtifactKey",setup(F){const l=y(),u=_("artifactKey"),i=k(l.artifacts.getArtifactCollection,[u]),a=s(()=>i.response),f=s(()=>a.value?`${o.info.artifact}: ${a.value.key}`:o.info.artifact);return B(f),(K,S)=>{const p=v("p-layout-default");return t(),e(p,{class:"artifact"},{header:n(()=>[a.value?(t(),e(c(x),{key:0,artifact:a.value},null,8,["artifact"])):r("",!0)]),default:n(()=>[a.value?(t(),e(c(g),{key:0,artifact:a.value},null,8,["artifact"])):r("",!0),a.value?(t(),d(h,{key:1},[a.value.key?(t(),e(c(C),{key:0,"artifact-key":a.value.key},null,8,["artifact-key"])):r("",!0)],64)):r("",!0)]),_:1})}}});export{P as default};
|
|
2
|
+
//# sourceMappingURL=ArtifactKey-9Q9Vx-fc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtifactKey-
|
|
1
|
+
{"version":3,"file":"ArtifactKey-9Q9Vx-fc.js","sources":["../../src/pages/ArtifactKey.vue"],"sourcesContent":["<template>\n <p-layout-default class=\"artifact\">\n <template #header>\n <PageHeadingArtifactKey v-if=\"artifact\" :artifact=\"artifact\" />\n </template>\n\n <ArtifactDescription v-if=\"artifact\" :artifact=\"artifact\" />\n\n <template v-if=\"artifact\">\n <ArtifactTimeline v-if=\"artifact.key\" :artifact-key=\"artifact.key\" />\n </template>\n </p-layout-default>\n</template>\n\n<script lang=\"ts\" setup>\n import {\n PageHeadingArtifactKey,\n ArtifactDescription,\n ArtifactTimeline,\n localization,\n useWorkspaceApi\n } from '@prefecthq/prefect-ui-library'\n import { useSubscription, useRouteParam } from '@prefecthq/vue-compositions'\n import { computed } from 'vue'\n import { usePageTitle } from '@/compositions/usePageTitle'\n\n const api = useWorkspaceApi()\n const artifactKey = useRouteParam('artifactKey')\n\n const artifactSubscription = useSubscription(api.artifacts.getArtifactCollection, [artifactKey])\n const artifact = computed(() => artifactSubscription.response)\n\n const pageTitle = computed<string>(() => {\n if (!artifact.value) {\n return localization.info.artifact\n }\n\n return `${localization.info.artifact}: ${artifact.value.key}`\n })\n\n usePageTitle(pageTitle)\n</script>\n"],"names":["api","useWorkspaceApi","artifactKey","useRouteParam","artifactSubscription","useSubscription","artifact","computed","pageTitle","localization","usePageTitle","_createBlock","_component_p_layout_default","_unref","PageHeadingArtifactKey","ArtifactDescription","_createElementBlock","_Fragment","ArtifactTimeline"],"mappings":"mPA0BE,MAAMA,EAAMC,EAAA,EACNC,EAAcC,EAAc,aAAa,EAEzCC,EAAuBC,EAAgBL,EAAI,UAAU,sBAAuB,CAACE,CAAW,CAAC,EACzFI,EAAWC,EAAS,IAAMH,EAAqB,QAAQ,EAEvDI,EAAYD,EAAiB,IAC5BD,EAAS,MAIP,GAAGG,EAAa,KAAK,QAAQ,KAAKH,EAAS,MAAM,GAAG,GAHlDG,EAAa,KAAK,QAI5B,EAED,OAAAC,EAAaF,CAAS,mDAvCtBG,EAUmBC,EAAA,CAVD,MAAM,YAAU,CACrB,SACT,IAA+D,CAAjCN,EAAA,WAA9BK,EAA+DE,EAAAC,CAAA,EAAA,OAAtB,SAAUR,EAAA,KAAA,6CAGrD,IAA4D,CAAjCA,EAAA,WAA3BK,EAA4DE,EAAAE,CAAA,EAAA,OAAtB,SAAUT,EAAA,KAAA,iCAEhCA,EAAA,WAAhBU,EAEWC,EAAA,CAAA,IAAA,GAAA,CADeX,EAAA,MAAS,SAAjCK,EAAqEE,EAAAK,CAAA,EAAA,OAA9B,eAAcZ,EAAA,MAAS,GAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as o,h as r,c,o as n,i as a,k as e,m as t,aQ as _,aR as f}from"./index-
|
|
2
|
-
//# sourceMappingURL=Artifacts-
|
|
1
|
+
import{d as o,h as r,c,o as n,i as a,k as e,m as t,aQ as _,aR as f}from"./index-DS86r6aC.js";import{u as p}from"./usePageTitle-BXVkHaWQ.js";const h=o({__name:"Artifacts",setup(u){return p("Artifacts"),(l,i)=>{const s=r("p-layout-default");return n(),c(s,{class:"artifacts"},{header:a(()=>[e(t(f))]),default:a(()=>[e(t(_))]),_:1})}}});export{h as default};
|
|
2
|
+
//# sourceMappingURL=Artifacts-B53vn988.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Artifacts-
|
|
1
|
+
{"version":3,"file":"Artifacts-B53vn988.js","sources":["../../src/pages/Artifacts.vue"],"sourcesContent":["<template>\n <p-layout-default class=\"artifacts\">\n <template #header>\n <PageHeadingArtifacts />\n </template>\n\n <ArtifactCollections />\n </p-layout-default>\n</template>\n\n<script lang=\"ts\" setup>\n import {\n PageHeadingArtifacts,\n ArtifactCollections\n } from '@prefecthq/prefect-ui-library'\n import { usePageTitle } from '@/compositions/usePageTitle'\n\n usePageTitle('Artifacts')\n</script>\n"],"names":["usePageTitle","_createBlock","_component_p_layout_default","_createVNode","_unref","PageHeadingArtifacts","ArtifactCollections"],"mappings":"mLAiBE,OAAAA,EAAa,WAAW,mDAhBxBC,EAMmBC,EAAA,CAND,MAAM,aAAW,CACtB,SACT,IAAwB,CAAxBC,EAAwBC,EAAAC,CAAA,CAAA,CAAA,aAG1B,IAAuB,CAAvBF,EAAuBC,EAAAE,CAAA,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as B,f as C,u as j,v as D,j as E,g as n,h as s,c as p,a as L,o as l,i as e,k as a,l as _,m as o,M as N,n as T,t as V,p as F,F as I,x as M,E as P,z as U,L as w,A as z}from"./index-
|
|
2
|
-
//# sourceMappingURL=Automation-
|
|
1
|
+
import{d as B,f as C,u as j,v as D,j as E,g as n,h as s,c as p,a as L,o as l,i as e,k as a,l as _,m as o,M as N,n as T,t as V,p as F,F as I,x as M,E as P,z as U,L as w,A as z}from"./index-DS86r6aC.js";import{u as R}from"./usePageTitle-BXVkHaWQ.js";import{u as S}from"./usePrefectApi-Cn-hX9ms.js";import"./mapper-Bm5aN_dh.js";const $={class:"automation-card__label"},Q=B({__name:"Automation",setup(q){const r=C(),d=j(),f=S(),v=D("automationId"),c=E(f.automations.getAutomation,[v]),t=n(()=>c.response),g=n(()=>t.value?.name??""),y=n(()=>[{text:"Automations",to:r.automations()},{text:g.value}]),A=n(()=>t.value?`Automation: ${t.value.name}`:"Automation");R(A);function k(){d.push(r.automations())}return(G,i)=>{const b=s("p-key-value"),u=s("p-content"),h=s("p-card"),x=s("p-layout-default");return t.value?(l(),p(x,{key:0,class:"automation"},{header:e(()=>[a(o(U),{crumbs:y.value},{actions:e(()=>[a(o(w),{automation:t.value,onUpdate:o(c).refresh},null,8,["automation","onUpdate"]),a(o(z),{automation:t.value,onDelete:k},null,8,["automation"])]),_:1},8,["crumbs"])]),default:e(()=>[a(u,null,{default:e(()=>[a(b,{label:"Description",value:t.value.description},null,8,["value"]),a(u,{secondary:""},{default:e(()=>[i[0]||(i[0]=_("span",{class:"automation-card__label"},"Trigger",-1)),a(o(N),{trigger:t.value.trigger},null,8,["trigger"])]),_:1}),a(u,{secondary:""},{default:e(()=>[_("span",$,V(o(F)("Action",t.value.actions.length)),1),(l(!0),T(I,null,M(t.value.actions,m=>(l(),p(h,{key:m.id},{default:e(()=>[a(o(P),{action:m},null,8,["action"])]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})):L("",!0)}}});export{Q as default};
|
|
2
|
+
//# sourceMappingURL=Automation-BaE0He4N.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Automation-
|
|
1
|
+
{"version":3,"file":"Automation-BaE0He4N.js","sources":["../../src/pages/Automation.vue"],"sourcesContent":["<template>\n <p-layout-default v-if=\"automation\" class=\"automation\">\n <template #header>\n <PageHeading :crumbs=\"crumbs\">\n <template #actions>\n <AutomationToggle :automation=\"automation\" @update=\"subscription.refresh\" />\n <AutomationMenu :automation=\"automation\" @delete=\"goToAutomations\" />\n </template>\n </PageHeading>\n </template>\n <p-content>\n <p-key-value label=\"Description\" :value=\"automation.description\" />\n\n <p-content secondary>\n <span class=\"automation-card__label\">Trigger</span>\n <AutomationTriggerDescription :trigger=\"automation.trigger\" />\n </p-content>\n\n <p-content secondary>\n <span class=\"automation-card__label\">{{ toPluralString('Action', automation.actions.length) }}</span>\n <template v-for=\"action in automation.actions\" :key=\"action.id\">\n <p-card><AutomationActionDescription :action=\"action\" /></p-card>\n </template>\n </p-content>\n </p-content>\n </p-layout-default>\n</template>\n\n<script lang=\"ts\" setup>\n import { Crumb } from '@prefecthq/prefect-design'\n import { PageHeading, AutomationMenu, AutomationToggle, AutomationTriggerDescription, AutomationActionDescription, toPluralString, useWorkspaceRoutes } from '@prefecthq/prefect-ui-library'\n import { useRouteParam, useSubscription } from '@prefecthq/vue-compositions'\n import { computed } from 'vue'\n import { useRouter } from 'vue-router'\n import { usePageTitle } from '@/compositions/usePageTitle'\n import { usePrefectApi } from '@/compositions/usePrefectApi'\n\n const routes = useWorkspaceRoutes()\n const router = useRouter()\n const api = usePrefectApi()\n const automationId = useRouteParam('automationId')\n\n const subscription = useSubscription(api.automations.getAutomation, [automationId])\n const automation = computed(() => subscription.response)\n\n const name = computed(() => automation.value?.name ?? '')\n\n const crumbs = computed<Crumb[]>(() => [\n { text: 'Automations', to: routes.automations() },\n { text: name.value },\n ])\n\n const title = computed<string>(() => {\n if (automation.value) {\n return `Automation: ${automation.value.name}`\n }\n\n return 'Automation'\n })\n\n usePageTitle(title)\n\n function goToAutomations(): void {\n router.push(routes.automations())\n }\n</script>"],"names":["routes","useWorkspaceRoutes","router","useRouter","api","usePrefectApi","automationId","useRouteParam","subscription","useSubscription","automation","computed","name","crumbs","title","usePageTitle","goToAutomations","_createBlock","_component_p_layout_default","_createVNode","_unref","PageHeading","AutomationToggle","AutomationMenu","_component_p_content","_component_p_key_value","_cache","_createElementVNode","AutomationTriggerDescription","_hoisted_1","_toDisplayString","toPluralString","_openBlock","_createElementBlock","_Fragment","_renderList","action","_component_p_card","AutomationActionDescription"],"mappings":"gZAqCE,MAAMA,EAASC,EAAA,EACTC,EAASC,EAAA,EACTC,EAAMC,EAAA,EACNC,EAAeC,EAAc,cAAc,EAE3CC,EAAeC,EAAgBL,EAAI,YAAY,cAAe,CAACE,CAAY,CAAC,EAC5EI,EAAaC,EAAS,IAAMH,EAAa,QAAQ,EAEjDI,EAAOD,EAAS,IAAMD,EAAW,OAAO,MAAQ,EAAE,EAElDG,EAASF,EAAkB,IAAM,CACrC,CAAE,KAAM,cAAe,GAAIX,EAAO,aAAY,EAC9C,CAAE,KAAMY,EAAK,KAAA,CAAM,CACpB,EAEKE,EAAQH,EAAiB,IACzBD,EAAW,MACN,eAAeA,EAAW,MAAM,IAAI,GAGtC,YACR,EAEDK,EAAaD,CAAK,EAElB,SAASE,GAAwB,CAC/Bd,EAAO,KAAKF,EAAO,aAAa,CAClC,sGA/DwBU,EAAA,WAAxBO,EAwBmBC,EAAA,OAxBiB,MAAM,YAAA,GAC7B,SACT,IAKc,CALdC,EAKcC,EAAAC,CAAA,EAAA,CALA,OAAQR,EAAA,OAAM,CACf,UACT,IAA4E,CAA5EM,EAA4EC,EAAAE,CAAA,EAAA,CAAzD,WAAYZ,EAAA,MAAa,SAAQU,EAAAZ,CAAA,EAAa,OAAA,oCACjEW,EAAqEC,EAAAG,CAAA,EAAA,CAApD,WAAYb,EAAA,MAAa,SAAQM,CAAA,0DAIxD,IAcY,CAdZG,EAcYK,EAAA,KAAA,WAbV,IAAmE,CAAnEL,EAAmEM,EAAA,CAAtD,MAAM,cAAe,MAAOf,EAAA,MAAW,WAAA,oBAEpDS,EAGYK,EAAA,CAHD,UAAA,IAAS,WAClB,IAAmD,CAAnDE,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAmD,OAAA,CAA7C,MAAM,wBAAA,EAAyB,UAAO,EAAA,GAC5CR,EAA8DC,EAAAQ,CAAA,EAAA,CAA/B,QAASlB,EAAA,MAAW,OAAA,8BAGrDS,EAKYK,EAAA,CALD,UAAA,IAAS,WAClB,IAAqG,CAArGG,EAAqG,OAArGE,EAAqGC,EAA7DV,EAAAW,CAAA,WAAyBrB,EAAA,MAAW,QAAQ,MAAM,CAAA,EAAA,CAAA,GAC1FsB,EAAA,EAAA,EAAAC,EAEWC,EAAA,KAAAC,EAFgBzB,EAAA,MAAW,QAArB0B,QACfnB,EAAiEoB,EAAA,CADd,IAAAD,EAAO,EAAA,aAClD,IAAgD,CAAhDjB,EAAgDC,EAAAkB,CAAA,EAAA,CAAlB,OAAAF,CAAA,EAAc,KAAA,EAAA,CAAA,QAAA,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as x,f as y,u as h,H as w,I as T,h as b,c as k,o as B,i as s,k as r,m as n,z as O,O as P,G as i,B as J,J as m,Y as N}from"./index-
|
|
2
|
-
//# sourceMappingURL=AutomationCreate-
|
|
1
|
+
import{d as x,f as y,u as h,H as w,I as T,h as b,c as k,o as B,i as s,k as r,m as n,z as O,O as P,G as i,B as J,J as m,Y as N}from"./index-DS86r6aC.js";import{_ as V}from"./AutomationWizard.vue_vue_type_script_setup_true_lang-CRRm91Zq.js";import{u as Y}from"./usePageTitle-BXVkHaWQ.js";import{u as j}from"./usePrefectApi-Cn-hX9ms.js";import"./mapper-Bm5aN_dh.js";const R=x({__name:"AutomationCreate",async setup(v){let e,u;Y("Create Automation");const l=j(),c=y(),f=h(),p=[{text:"Automations",to:c.automations()},{text:"Create"}],{getActions:_,getTrigger:d}=w(),g=([e,u]=T(()=>C()),e=await e,u(),e);async function C(){const o={},[t,a]=await Promise.all([d(),_()]);return t&&(o.trigger=t),a&&(o.actions=a),o}async function A(o){try{await l.automations.createAutomation(o),m(i.success.automationCreate),f.push(c.automations())}catch(t){console.error(t);const a=N(t,i.error.automationCreate);m(a,"error",{timeout:!1})}}return(o,t)=>{const a=b("p-layout-default");return B(),k(a,{class:"automation-create"},{header:s(()=>[r(n(O),{crumbs:p},{actions:s(()=>[r(n(P),{to:n(i).docs.automations},{default:s(()=>[...t[0]||(t[0]=[J(" Documentation ",-1)])]),_:1},8,["to"])]),_:1})]),default:s(()=>[r(V,{automation:n(g),onSubmit:A},null,8,["automation"])]),_:1})}}});export{R as default};
|
|
2
|
+
//# sourceMappingURL=AutomationCreate-CYfB5QDE.js.map
|
prefect/server/ui/assets/{AutomationCreate-DC7QapQA.js.map → AutomationCreate-CYfB5QDE.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutomationCreate-
|
|
1
|
+
{"version":3,"file":"AutomationCreate-CYfB5QDE.js","sources":["../../src/pages/AutomationCreate.vue"],"sourcesContent":["<template>\n <p-layout-default class=\"automation-create\">\n <template #header>\n <PageHeading :crumbs>\n <template #actions>\n <DocumentationButton :to=\"localization.docs.automations\">\n Documentation\n </DocumentationButton>\n </template>\n </PageHeading>\n </template>\n\n <AutomationWizard :automation @submit=\"submit\" />\n </p-layout-default>\n</template>\n\n<script lang=\"ts\" setup>\n import { BreadCrumbs, showToast } from '@prefecthq/prefect-design'\n import { PageHeading, DocumentationButton, getApiErrorMessage, localization, useCreateAutomationQueryParams, useWorkspaceRoutes } from '@prefecthq/prefect-ui-library'\n import { useRouter } from 'vue-router'\n import AutomationWizard from '@/components/AutomationWizard.vue'\n import { usePageTitle } from '@/compositions/usePageTitle'\n import { usePrefectApi } from '@/compositions/usePrefectApi'\n import { Automation } from '@/types/automation'\n\n usePageTitle('Create Automation')\n\n const api = usePrefectApi()\n const routes = useWorkspaceRoutes()\n const router = useRouter()\n\n const crumbs: BreadCrumbs = [\n { text: 'Automations', to: routes.automations() },\n { text: 'Create' },\n ]\n\n const { getActions, getTrigger } = useCreateAutomationQueryParams()\n\n const automation = await getAutomationTemplate()\n\n async function getAutomationTemplate(): Promise<Partial<Automation>> {\n const automation: Partial<Automation> = {}\n\n const [trigger, actions] = await Promise.all([\n getTrigger(),\n getActions(),\n ])\n\n if (trigger) {\n automation.trigger = trigger\n }\n\n if (actions) {\n automation.actions = actions\n }\n\n return automation\n }\n\n async function submit(automation: Automation): Promise<void> {\n try {\n await api.automations.createAutomation(automation)\n\n showToast(localization.success.automationCreate)\n\n router.push(routes.automations())\n } catch (error) {\n console.error(error)\n const message = getApiErrorMessage(error, localization.error.automationCreate)\n showToast(message, 'error', { timeout: false })\n }\n }\n</script>"],"names":["usePageTitle","api","usePrefectApi","routes","useWorkspaceRoutes","router","useRouter","crumbs","getActions","getTrigger","useCreateAutomationQueryParams","automation","__temp","__restore","_withAsyncContext","getAutomationTemplate","trigger","actions","submit","showToast","localization","error","message","getApiErrorMessage","_createBlock","_component_p_layout_default","_createVNode","_unref","PageHeading","DocumentationButton","_cache","AutomationWizard"],"mappings":"uaAyBEA,EAAa,mBAAmB,EAEhC,MAAMC,EAAMC,EAAA,EACNC,EAASC,EAAA,EACTC,EAASC,EAAA,EAETC,EAAsB,CAC1B,CAAE,KAAM,cAAe,GAAIJ,EAAO,aAAY,EAC9C,CAAE,KAAM,QAAA,CAAS,EAGb,CAAE,WAAAK,EAAY,WAAAC,CAAA,EAAeC,EAAA,EAE7BC,GAAa,CAAAC,EAAAC,CAAA,EAAAC,EAAA,IAAMC,EAAA,CAAsB,mBAE/C,eAAeA,GAAsD,CACnE,MAAMJ,EAAkC,CAAA,EAElC,CAACK,EAASC,CAAO,EAAI,MAAM,QAAQ,IAAI,CAC3CR,EAAA,EACAD,EAAA,CAAW,CACZ,EAED,OAAIQ,IACFL,EAAW,QAAUK,GAGnBC,IACFN,EAAW,QAAUM,GAGhBN,CACT,CAEA,eAAeO,EAAOP,EAAuC,CAC3D,GAAI,CACF,MAAMV,EAAI,YAAY,iBAAiBU,CAAU,EAEjDQ,EAAUC,EAAa,QAAQ,gBAAgB,EAE/Cf,EAAO,KAAKF,EAAO,aAAa,CAClC,OAASkB,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnB,MAAMC,EAAUC,EAAmBF,EAAOD,EAAa,MAAM,gBAAgB,EAC7ED,EAAUG,EAAS,QAAS,CAAE,QAAS,GAAO,CAChD,CACF,wDAtEAE,EAYmBC,EAAA,CAZD,MAAM,qBAAmB,CAC9B,SACT,IAMc,CANdC,EAMcC,EAAAC,CAAA,EAAA,CANA,OAAArB,GAAM,CACP,UACT,IAEsB,CAFtBmB,EAEsBC,EAAAE,CAAA,EAAA,CAFA,GAAIF,EAAAP,CAAA,EAAa,KAAK,WAAA,aAAa,IAEzD,CAAA,GAAAU,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,GAFyD,kBAEzD,EAAA,CAAA,wCAKN,IAAiD,CAAjDJ,EAAiDK,EAAA,CAA9B,WAAAJ,EAAAhB,CAAA,EAAY,SAAQO,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as A,f as v,u as y,v as b,I as g,g as h,h as w,c as k,o as C,i as a,k as u,m as e,z as B,O as I,G as m,B as E,J as d,Y as J}from"./index-
|
|
2
|
-
//# sourceMappingURL=AutomationEdit-
|
|
1
|
+
import{d as A,f as v,u as y,v as b,I as g,g as h,h as w,c as k,o as C,i as a,k as u,m as e,z as B,O as I,G as m,B as E,J as d,Y as J}from"./index-DS86r6aC.js";import{_ as N}from"./AutomationWizard.vue_vue_type_script_setup_true_lang-CRRm91Zq.js";import{u as O}from"./usePageTitle-BXVkHaWQ.js";import{u as P}from"./usePrefectApi-Cn-hX9ms.js";import"./mapper-Bm5aN_dh.js";const z=A({__name:"AutomationEdit",async setup(T){let o,r;const i=P(),c=v(),_=y(),p=b("automationId"),s=([o,r]=g(()=>i.automations.getAutomation(p.value)),o=await o,r(),o);O(`Edit Automation: ${s.name}`);const f=h(()=>[{text:"Automations",to:c.automations()},{text:s.name}]);async function x(l){try{await i.automations.updateAutomation(p.value,l),d(m.success.automationUpdate),_.push(c.automations())}catch(t){console.error(t);const n=J(t,m.error.automationUpdate);d(n,"error",{timeout:!1})}}return(l,t)=>{const n=w("p-layout-default");return C(),k(n,{class:"workspace-automation-create"},{header:a(()=>[u(e(B),{crumbs:f.value},{actions:a(()=>[u(e(I),{to:e(m).docs.automations},{default:a(()=>[...t[0]||(t[0]=[E(" Documentation ",-1)])]),_:1},8,["to"])]),_:1},8,["crumbs"])]),default:a(()=>[u(N,{automation:e(s),editing:"",onSubmit:x},null,8,["automation"])]),_:1})}}});export{z as default};
|
|
2
|
+
//# sourceMappingURL=AutomationEdit-CUrFmfaN.js.map
|