zenml-nightly 0.84.0.dev20250729__py3-none-any.whl → 0.84.1.dev20250731__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.
- zenml/VERSION +1 -1
- zenml/client.py +6 -1
- zenml/constants.py +28 -2
- zenml/integrations/gcp/__init__.py +4 -1
- zenml/logging/__init__.py +0 -11
- zenml/logging/step_logging.py +255 -149
- zenml/models/__init__.py +4 -0
- zenml/models/v2/core/service_account.py +87 -1
- zenml/models/v2/core/user.py +20 -6
- zenml/models/v2/misc/external_user.py +4 -1
- zenml/orchestrators/step_launcher.py +2 -4
- zenml/zen_server/auth.py +138 -27
- zenml/zen_server/dashboard/assets/{404-B5cfnwZ1.js → 404-CMbwR10f.js} +1 -1
- zenml/zen_server/dashboard/assets/{@radix-C_LirfyT.js → @radix-B1sy0Lhr.js} +1 -1
- zenml/zen_server/dashboard/assets/{@react-router-BSsrkPOd.js → @react-router-CHjLNlgw.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-D9hglKLF.js → @reactflow-gbyyU3kq.js} +2 -2
- zenml/zen_server/dashboard/assets/{@tanstack-C0SeHZng.js → @tanstack-Dwlisomv.js} +1 -1
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-BpLj419i.js +1 -0
- zenml/zen_server/dashboard/assets/ButtonGroup-DVhzbQxV.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-D8iBqOVv.js → CodeSnippet-B7Wd4R8u.js} +1 -1
- zenml/zen_server/dashboard/assets/{CollapsibleCard-D0-pQi1n.js → CollapsibleCard-DSZzbjx5.js} +1 -1
- zenml/zen_server/dashboard/assets/{ComponentBadge-mw2Ja_ON.js → ComponentBadge-MVT08kBV.js} +1 -1
- zenml/zen_server/dashboard/assets/{ComponentIcon-BXgpt-jw.js → ComponentIcon-C9AY8usJ.js} +1 -1
- zenml/zen_server/dashboard/assets/DeleteAlertDialog-CzhTVQaC.js +1 -0
- zenml/zen_server/dashboard/assets/{DialogItem-DeME0oSt.js → DialogItem-DD_7v3UY.js} +1 -1
- zenml/zen_server/dashboard/assets/{DisplayDate-v3KW7oez.js → DisplayDate-57lUNS79.js} +1 -1
- zenml/zen_server/dashboard/assets/{EmptyState-DG0m-CGv.js → EmptyState-BMA34iVR.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-DcVLcrLs.js → Error-Cakgjexo.js} +1 -1
- zenml/zen_server/dashboard/assets/{ExecutionStatus-C4tlFnlh.js → ExecutionStatus-CQbWovhV.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-C-RGHz3S.js → Helpbox-7FZpmsHB.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-DFCWPbMb.js → Infobox-DnduZjNU.js} +1 -1
- zenml/zen_server/dashboard/assets/{LeftSideMenu-Czev0KCA.js → LeftSideMenu-D5UEs4vB.js} +1 -1
- zenml/zen_server/dashboard/assets/{Lock-CRP5J_su.js → Lock-u8WOoTTd.js} +1 -1
- zenml/zen_server/dashboard/assets/NestedCollapsible-0yviIfaA.js +1 -0
- zenml/zen_server/dashboard/assets/{NumberBox-CoQjQYDJ.js → NumberBox-C2Pju4PR.js} +1 -1
- zenml/zen_server/dashboard/assets/{Pagination-CcDD5yHh.js → Pagination-C1sE5Nzn.js} +1 -1
- zenml/zen_server/dashboard/assets/{Partials-DlMzfKgs.js → Partials-DosysQMU.js} +1 -1
- zenml/zen_server/dashboard/assets/{PasswordChecker-BZwoeQIm.js → PasswordChecker-DOPLfvg7.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProCta-CU2ycJDo.js → ProCta-CUkpV3PJ.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderIcon-BMAn9Jld.js → ProviderIcon-aQjTuTRX.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderRadio-D_q9tE3G.js → ProviderRadio-C6pLVNxC.js} +1 -1
- zenml/zen_server/dashboard/assets/RunsBody-CZAiSxYK.js +1 -0
- zenml/zen_server/dashboard/assets/{SearchField-D_0-uAPj.js → SearchField-Byv1PtST.js} +1 -1
- zenml/zen_server/dashboard/assets/{SecretTooltip-BcWMKb9f.js → SecretTooltip-CErfhVgF.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-CaKVSqAL.js → SetPassword-C4OH-cn1.js} +1 -1
- zenml/zen_server/dashboard/assets/{SheetHeader-7vwlsY_i.js → SheetHeader-Bb3v9rha.js} +1 -1
- zenml/zen_server/dashboard/assets/StackComponentList-D85oab98.js +1 -0
- zenml/zen_server/dashboard/assets/StackList-DSAjbVb5.js +1 -0
- zenml/zen_server/dashboard/assets/Tabs-2uwqXsdL.js +1 -0
- zenml/zen_server/dashboard/assets/Tick-BQ7_xDBl.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-Da5RndbV.js → UpdatePasswordSchemas-DNkYgzN6.js} +1 -1
- zenml/zen_server/dashboard/assets/{Wizard-8aJzxUjb.js → Wizard-2FIi8JNY.js} +1 -1
- zenml/zen_server/dashboard/assets/WizardFooter-DQEnlDmZ.js +1 -0
- zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-gorNNEaT.js → all-pipeline-runs-query-CdvWtiAY.js} +1 -1
- zenml/zen_server/dashboard/assets/{arrow-left-hcj2H8HY.js → arrow-left-BFB2mgJo.js} +1 -1
- zenml/zen_server/dashboard/assets/{bar-chart-square-check-9siI9icm.js → bar-chart-square-check-_m-oYysN.js} +1 -1
- zenml/zen_server/dashboard/assets/{bulk-delete-B5RTlnD_.js → bulk-delete-wdObjfps.js} +2 -2
- zenml/zen_server/dashboard/assets/{check-D1bHMJkL.js → check-C9Nye5lR.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-mnEgPhPF.js → check-circle-CG6XAdk-.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-Z3nUe-0U.js → chevron-down-Bl7WwQAL.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-CbRQKN4Q.js → chevron-right-double-CbMG1dOM.js} +1 -1
- zenml/zen_server/dashboard/assets/{clock-BMjHXT3f.js → clock-BnPvxp3D.js} +1 -1
- zenml/zen_server/dashboard/assets/{code-browser-DftoiCIg.js → code-browser-CzWvJ4S6.js} +1 -1
- zenml/zen_server/dashboard/assets/configuration-form-BbcNBQTO.js +1 -0
- zenml/zen_server/dashboard/assets/constants-DfvsDtcH.js +1 -0
- zenml/zen_server/dashboard/assets/{create-stack-BruqH_6X.js → create-stack-D4Sf7QpF.js} +1 -1
- zenml/zen_server/dashboard/assets/{credit-card-CH1BHrXY.js → credit-card-DfBA6dBb.js} +1 -1
- zenml/zen_server/dashboard/assets/{dataflow-2-qHjWt7zp.js → dataflow-2-BLkaTH0Q.js} +1 -1
- zenml/zen_server/dashboard/assets/{delete-run-ibBtciMR.js → delete-run-XSre8ru-.js} +1 -1
- zenml/zen_server/dashboard/assets/{expand-full-CD4fFvM-.js → expand-full-C8p_0jQv.js} +1 -1
- zenml/zen_server/dashboard/assets/{eye-CLNgIh_K.js → eye-BXcQevds.js} +1 -1
- zenml/zen_server/dashboard/assets/{file-text-CltVhgwZ.js → file-text-TdPXNd7s.js} +1 -1
- zenml/zen_server/dashboard/assets/form-C1jJgRy1.js +1 -0
- zenml/zen_server/dashboard/assets/{form-schemas-B9XgTS1V.js → form-schemas-BjWDRvGd.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-B0CvBhCm.js → help-CRPfbPTO.js} +1 -1
- zenml/zen_server/dashboard/assets/{icon-hDriJUXY.js → icon--Tp6obFZ.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-mA8kL088.js → index-B4ZeIaPd.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-dCcVgFNl.js → index-BYHxFvoG.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-BQWlHo1Y.js → index-BYzR7YrM.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-BacoJBEQ.js → index-CO6UN3UX.js} +11 -11
- zenml/zen_server/dashboard/assets/{index-B7CRNU8l.js → index-d_QrPL-8.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-BRhKF2z-.js → index-g7wOyc86.js} +1 -1
- zenml/zen_server/dashboard/assets/index-n_sn2ITN.css +1 -0
- zenml/zen_server/dashboard/assets/{index.es-DcVFDpJU.js → index.es-CZMSrR6z.js} +1 -1
- zenml/zen_server/dashboard/assets/{index.esm-COnaHLSh.js → index.esm-SBF9nn_P.js} +1 -1
- zenml/zen_server/dashboard/assets/{info-CyMih3vQ.js → info-CI2szPUG.js} +1 -1
- zenml/zen_server/dashboard/assets/{key-icon-HOx2gazv.js → key-icon-BiV171aI.js} +1 -1
- zenml/zen_server/dashboard/assets/layout-Cyc-V16c.js +1 -0
- zenml/zen_server/dashboard/assets/{layout-C5dgIReC.js → layout-GIiNvS10.js} +1 -1
- zenml/zen_server/dashboard/assets/{login-mutation-CidpsqyH.js → login-mutation-CDgTlQBD.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-DoLoTEfj.js → logs-lNLbZqHL.js} +1 -1
- zenml/zen_server/dashboard/assets/{mail-C160gvB0.js → mail-DBJRSzyu.js} +1 -1
- zenml/zen_server/dashboard/assets/{message-chat-square-DLz6XmPS.js → message-chat-square-C3CRCQvD.js} +1 -1
- zenml/zen_server/dashboard/assets/{package-BhYXGPxF.js → package-pR4bbXJp.js} +1 -1
- zenml/zen_server/dashboard/assets/page-1DXG7hp8.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BCRXJXC9.js → page-43SWdz4k.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-YdWnx9MX.js → page-AOVMuHDc.js} +1 -1
- zenml/zen_server/dashboard/assets/page-B4QBxV0B.js +22 -0
- zenml/zen_server/dashboard/assets/{page-CvllZMBF.js → page-B8ict_cR.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BDre_qCO.js +1 -0
- zenml/zen_server/dashboard/assets/page-BbsvGfyi.js +18 -0
- zenml/zen_server/dashboard/assets/page-Bi4I23Hs.js +1 -0
- zenml/zen_server/dashboard/assets/page-BnAMyQZb.js +1 -0
- zenml/zen_server/dashboard/assets/{page-D6cvOG8w.js → page-BnZEAhNn.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Bncp08FW.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BTDi81N3.js → page-C4Jnp1qP.js} +1 -1
- zenml/zen_server/dashboard/assets/page-C7Z2sDHE.js +1 -0
- zenml/zen_server/dashboard/assets/page-C8t9qLdV.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BByayrO-.js → page-C9IsnFid.js} +2 -2
- zenml/zen_server/dashboard/assets/page-CEHZzQ1Q.js +1 -0
- zenml/zen_server/dashboard/assets/page-CGtll3Jk.js +1 -0
- zenml/zen_server/dashboard/assets/{page-q41JNDWO.js → page-CKPkbOoE.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DF4FVxxW.js → page-CMvcoaSZ.js} +2 -2
- zenml/zen_server/dashboard/assets/page-CVwTAlzd.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DSZfclXt.js → page-ClqRvz_V.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-7CJ4Wq3O.js → page-CzDjN1wE.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BK59rZvf.js → page-D654xHWd.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DcXrWWWh.js → page-DLrYW-Dn.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DOnAInjC.js +1 -0
- zenml/zen_server/dashboard/assets/{page-Cc8owYXQ.js → page-DQncGJeH.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DQzNmXk3.js +1 -0
- zenml/zen_server/dashboard/assets/{page-FQxi1Otg.js → page-DSn1Jcvs.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DZ5hcS1o.js +1 -0
- zenml/zen_server/dashboard/assets/page-DerIbaqa.js +1 -0
- zenml/zen_server/dashboard/assets/{page-8U20Tu_8.js → page-DgOEl3Bc.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DgldL5UB.js → page-DgSu4pTE.js} +2 -2
- zenml/zen_server/dashboard/assets/page-DgblJuXC.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CY0LPcAJ.js → page-Dpw-xP4q.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DsFXol8x.js +1 -0
- zenml/zen_server/dashboard/assets/page-Du6bFZTS.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CeGBDh1Q.js → page-DznxxpKA.js} +1 -1
- zenml/zen_server/dashboard/assets/page-E9Mx9_rn.js +1 -0
- zenml/zen_server/dashboard/assets/page-HrebZOAM.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BX67x4iL.js → page-O5xnz_nW.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DDWW21kl.js → page-hX7NkNdA.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-BKKcL1Kp.js → persist-B3Hb8HDW.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-DxiyfAax.js → persist-Dkbp9MFP.js} +1 -1
- zenml/zen_server/dashboard/assets/{pipeline-BJ8liDnl.js → pipeline-CDJSAXrb.js} +1 -1
- zenml/zen_server/dashboard/assets/{plus-cI8zD2xh.js → plus-DOrkJCmy.js} +1 -1
- zenml/zen_server/dashboard/assets/primary-role-CjkpP9fL.js +1 -0
- zenml/zen_server/dashboard/assets/{react-error-boundary.esm-DoXxY4pT.js → react-error-boundary.esm-DgOYA0wh.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-3EF2R7ja.js → refresh-C8BXS3Fb.js} +1 -1
- zenml/zen_server/dashboard/assets/{resource-tyes-list-B5rkZcbc.js → resource-tyes-list-CugyWUAE.js} +1 -1
- zenml/zen_server/dashboard/assets/{resource-type-tooltip-E97WGqfk.js → resource-type-tooltip-V-zdiLKz.js} +1 -1
- zenml/zen_server/dashboard/assets/{service-B9aVzfAF.js → service-FjqYTmBw.js} +2 -2
- zenml/zen_server/dashboard/assets/{service-connectors-DL2-k_E2.js → service-connectors-nF4-OXB9.js} +1 -1
- zenml/zen_server/dashboard/assets/{sharedSchema-DyUO09BR.js → sharedSchema-Br1JPr8d.js} +1 -1
- zenml/zen_server/dashboard/assets/{slash-circle-D2Lb2FyR.js → slash-circle-B0xMh8q6.js} +1 -1
- zenml/zen_server/dashboard/assets/{stack-detail-query-Bc4QKlWg.js → stack-detail-query-DnyMCdVE.js} +1 -1
- zenml/zen_server/dashboard/assets/{terminal-BObrvDlO.js → terminal-C2tAF2XG.js} +1 -1
- zenml/zen_server/dashboard/assets/{terminal-square-BObrvDlO.js → terminal-square-C2tAF2XG.js} +1 -1
- zenml/zen_server/dashboard/assets/{transform-DFpKTKgF.js → transform-S7omcvTm.js} +1 -1
- zenml/zen_server/dashboard/assets/{trash-HKxXWbSG.js → trash-D9LA4VFD.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-current-user-mutation-DSyUyHVj.js → update-current-user-mutation-B3Dpv3u6.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-CdM-Sdds.js → update-server-settings-mutation-s7tlHN8s.js} +1 -1
- zenml/zen_server/dashboard/assets/{zod-DgEcN9jD.js → zod-D48zuELD.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/rbac/zenml_cloud_rbac.py +8 -4
- zenml/zen_server/routers/service_accounts_endpoints.py +71 -12
- zenml/zen_stores/base_zen_store.py +0 -19
- zenml/zen_stores/migrations/versions/0.84.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/8d4b9ba22c1f_add_user_avatar.py +39 -0
- zenml/zen_stores/schemas/user_schemas.py +16 -5
- zenml/zen_stores/sql_zen_store.py +5 -1
- {zenml_nightly-0.84.0.dev20250729.dist-info → zenml_nightly-0.84.1.dev20250731.dist-info}/METADATA +1 -1
- {zenml_nightly-0.84.0.dev20250729.dist-info → zenml_nightly-0.84.1.dev20250731.dist-info}/RECORD +169 -167
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-druRNuO2.js +0 -1
- zenml/zen_server/dashboard/assets/ButtonGroup-SF2DlzHV.js +0 -1
- zenml/zen_server/dashboard/assets/DeleteAlertDialog-BbyFVnVI.js +0 -1
- zenml/zen_server/dashboard/assets/NestedCollapsible-CN9scBUn.js +0 -1
- zenml/zen_server/dashboard/assets/RunsBody-BToytB8e.js +0 -1
- zenml/zen_server/dashboard/assets/StackComponentList-s7eSfm8o.js +0 -1
- zenml/zen_server/dashboard/assets/StackList-Dt0FrIkM.js +0 -1
- zenml/zen_server/dashboard/assets/Tabs-B27AHUfo.js +0 -1
- zenml/zen_server/dashboard/assets/Tick-DDeDgTuT.js +0 -1
- zenml/zen_server/dashboard/assets/WizardFooter-Bt7_UE14.js +0 -1
- zenml/zen_server/dashboard/assets/configuration-form-Yz8m0QIG.js +0 -1
- zenml/zen_server/dashboard/assets/constants-DeV48DuZ.js +0 -1
- zenml/zen_server/dashboard/assets/form-6aSt3tIl.js +0 -1
- zenml/zen_server/dashboard/assets/index-eggipFZS.css +0 -1
- zenml/zen_server/dashboard/assets/layout-CFLL6-CM.js +0 -1
- zenml/zen_server/dashboard/assets/page-6huxSHEu.js +0 -1
- zenml/zen_server/dashboard/assets/page-BMpXak4U.js +0 -1
- zenml/zen_server/dashboard/assets/page-Bjmcdg64.js +0 -1
- zenml/zen_server/dashboard/assets/page-BsAn8p4m.js +0 -1
- zenml/zen_server/dashboard/assets/page-BwjPRuaY.js +0 -1
- zenml/zen_server/dashboard/assets/page-CDtSVkNc.js +0 -1
- zenml/zen_server/dashboard/assets/page-CEDU0L2T.js +0 -1
- zenml/zen_server/dashboard/assets/page-COJK90rG.js +0 -1
- zenml/zen_server/dashboard/assets/page-C_XMn4GU.js +0 -1
- zenml/zen_server/dashboard/assets/page-Cb3KGsPK.js +0 -22
- zenml/zen_server/dashboard/assets/page-CiGOVsj3.js +0 -1
- zenml/zen_server/dashboard/assets/page-CmLSFMkW.js +0 -1
- zenml/zen_server/dashboard/assets/page-CnfCptXq.js +0 -1
- zenml/zen_server/dashboard/assets/page-CxzglV3-.js +0 -1
- zenml/zen_server/dashboard/assets/page-DVLez4R1.js +0 -1
- zenml/zen_server/dashboard/assets/page-Dg7-H_9i.js +0 -1
- zenml/zen_server/dashboard/assets/page-Dw7XuiSo.js +0 -18
- zenml/zen_server/dashboard/assets/page-XrmOHHg7.js +0 -1
- zenml/zen_server/dashboard/assets/page-oRm7D4TC.js +0 -1
- zenml/zen_server/dashboard/assets/page-x2GXC8sI.js +0 -1
- zenml/zen_server/dashboard/assets/page-z2FXP4GY.js +0 -1
- zenml/zen_server/dashboard/assets/primary-role-CPGHymjN.js +0 -1
- {zenml_nightly-0.84.0.dev20250729.dist-info → zenml_nightly-0.84.1.dev20250731.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.84.0.dev20250729.dist-info → zenml_nightly-0.84.1.dev20250731.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.84.0.dev20250729.dist-info → zenml_nightly-0.84.1.dev20250731.dist-info}/entry_points.txt +0 -0
@@ -52,8 +52,6 @@ from zenml.models import (
|
|
52
52
|
ServerModel,
|
53
53
|
StackFilter,
|
54
54
|
StackResponse,
|
55
|
-
UserFilter,
|
56
|
-
UserResponse,
|
57
55
|
)
|
58
56
|
from zenml.utils.pydantic_utils import before_validator_handler
|
59
57
|
from zenml.zen_stores.zen_store_interface import ZenStoreInterface
|
@@ -470,23 +468,6 @@ class BaseZenStore(
|
|
470
468
|
raise KeyError("No default stack found.")
|
471
469
|
return default_stacks.items[0]
|
472
470
|
|
473
|
-
def get_external_user(self, user_id: UUID) -> UserResponse:
|
474
|
-
"""Get a user by external ID.
|
475
|
-
|
476
|
-
Args:
|
477
|
-
user_id: The external ID of the user.
|
478
|
-
|
479
|
-
Returns:
|
480
|
-
The user with the supplied external ID.
|
481
|
-
|
482
|
-
Raises:
|
483
|
-
KeyError: If the user doesn't exist.
|
484
|
-
"""
|
485
|
-
users = self.list_users(UserFilter(external_user_id=user_id))
|
486
|
-
if users.total == 0:
|
487
|
-
raise KeyError(f"User with external ID '{user_id}' not found.")
|
488
|
-
return users.items[0]
|
489
|
-
|
490
471
|
model_config = ConfigDict(
|
491
472
|
# Validate attributes when assigning them. We need to set this in order
|
492
473
|
# to have a mix of mutable and immutable attributes
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"""Release [0.84.1].
|
2
|
+
|
3
|
+
Revision ID: 0.84.1
|
4
|
+
Revises: 8d4b9ba22c1f
|
5
|
+
Create Date: 2025-07-29 08:56:44.756559
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
# revision identifiers, used by Alembic.
|
10
|
+
revision = "0.84.1"
|
11
|
+
down_revision = "8d4b9ba22c1f"
|
12
|
+
branch_labels = None
|
13
|
+
depends_on = None
|
14
|
+
|
15
|
+
|
16
|
+
def upgrade() -> None:
|
17
|
+
"""Upgrade database schema and/or data, creating a new revision."""
|
18
|
+
pass
|
19
|
+
|
20
|
+
|
21
|
+
def downgrade() -> None:
|
22
|
+
"""Downgrade database schema and/or data back to the previous revision."""
|
23
|
+
pass
|
@@ -0,0 +1,39 @@
|
|
1
|
+
"""add user avatar [8d4b9ba22c1f].
|
2
|
+
|
3
|
+
Revision ID: 8d4b9ba22c1f
|
4
|
+
Revises: d4591f95ac07
|
5
|
+
Create Date: 2025-07-18 17:13:54.513273
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
import sqlalchemy as sa
|
10
|
+
import sqlmodel
|
11
|
+
from alembic import op
|
12
|
+
|
13
|
+
# revision identifiers, used by Alembic.
|
14
|
+
revision = "8d4b9ba22c1f"
|
15
|
+
down_revision = "d4591f95ac07"
|
16
|
+
branch_labels = None
|
17
|
+
depends_on = None
|
18
|
+
|
19
|
+
|
20
|
+
def upgrade() -> None:
|
21
|
+
"""Upgrade database schema and/or data, creating a new revision."""
|
22
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
23
|
+
with op.batch_alter_table("user", schema=None) as batch_op:
|
24
|
+
batch_op.add_column(
|
25
|
+
sa.Column(
|
26
|
+
"avatar_url", sqlmodel.sql.sqltypes.AutoString(), nullable=True
|
27
|
+
)
|
28
|
+
)
|
29
|
+
|
30
|
+
# ### end Alembic commands ###
|
31
|
+
|
32
|
+
|
33
|
+
def downgrade() -> None:
|
34
|
+
"""Downgrade database schema and/or data back to the previous revision."""
|
35
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
36
|
+
with op.batch_alter_table("user", schema=None) as batch_op:
|
37
|
+
batch_op.drop_column("avatar_url")
|
38
|
+
|
39
|
+
# ### end Alembic commands ###
|
@@ -14,13 +14,14 @@
|
|
14
14
|
"""SQLModel implementation of user tables."""
|
15
15
|
|
16
16
|
import json
|
17
|
-
from typing import TYPE_CHECKING, Any, List, Optional
|
17
|
+
from typing import TYPE_CHECKING, Any, List, Optional, Union
|
18
18
|
from uuid import UUID
|
19
19
|
|
20
20
|
from sqlalchemy import TEXT, Column, UniqueConstraint
|
21
21
|
from sqlmodel import Field, Relationship
|
22
22
|
|
23
23
|
from zenml.models import (
|
24
|
+
ServiceAccountInternalRequest,
|
24
25
|
ServiceAccountRequest,
|
25
26
|
ServiceAccountResponse,
|
26
27
|
ServiceAccountResponseBody,
|
@@ -76,6 +77,7 @@ class UserSchema(NamedSchema, table=True):
|
|
76
77
|
full_name: str
|
77
78
|
description: Optional[str] = Field(sa_column=Column(TEXT, nullable=True))
|
78
79
|
email: Optional[str] = Field(nullable=True)
|
80
|
+
avatar_url: Optional[str] = Field(default=None, nullable=True)
|
79
81
|
active: bool
|
80
82
|
password: Optional[str] = Field(nullable=True)
|
81
83
|
activation_token: Optional[str] = Field(nullable=True)
|
@@ -184,6 +186,7 @@ class UserSchema(NamedSchema, table=True):
|
|
184
186
|
return cls(
|
185
187
|
name=model.name,
|
186
188
|
full_name=model.full_name,
|
189
|
+
avatar_url=model.avatar_url,
|
187
190
|
active=model.active,
|
188
191
|
password=model.create_hashed_password(),
|
189
192
|
activation_token=model.create_hashed_activation_token(),
|
@@ -199,25 +202,29 @@ class UserSchema(NamedSchema, table=True):
|
|
199
202
|
|
200
203
|
@classmethod
|
201
204
|
def from_service_account_request(
|
202
|
-
cls, model: ServiceAccountRequest
|
205
|
+
cls, model: Union[ServiceAccountRequest, ServiceAccountInternalRequest]
|
203
206
|
) -> "UserSchema":
|
204
207
|
"""Create a `UserSchema` from a Service Account request.
|
205
208
|
|
206
209
|
Args:
|
207
|
-
model: The `ServiceAccountRequest`
|
208
|
-
schema.
|
210
|
+
model: The `ServiceAccountRequest` or `ServiceAccountInternalRequest`
|
211
|
+
from which to create the schema.
|
209
212
|
|
210
213
|
Returns:
|
211
214
|
The created `UserSchema`.
|
212
215
|
"""
|
213
216
|
return cls(
|
214
217
|
name=model.name,
|
218
|
+
full_name=model.full_name,
|
215
219
|
description=model.description or "",
|
220
|
+
external_user_id=model.external_user_id
|
221
|
+
if isinstance(model, ServiceAccountInternalRequest)
|
222
|
+
else None,
|
216
223
|
active=model.active,
|
217
224
|
is_service_account=True,
|
218
225
|
email_opted_in=False,
|
219
|
-
full_name="",
|
220
226
|
is_admin=False,
|
227
|
+
avatar_url=model.avatar_url,
|
221
228
|
)
|
222
229
|
|
223
230
|
def update_user(self, user_update: UserUpdate) -> "UserSchema":
|
@@ -310,6 +317,7 @@ class UserSchema(NamedSchema, table=True):
|
|
310
317
|
updated=self.updated,
|
311
318
|
is_admin=self.is_admin,
|
312
319
|
default_project_id=self.default_project_id,
|
320
|
+
avatar_url=self.avatar_url,
|
313
321
|
),
|
314
322
|
metadata=metadata,
|
315
323
|
)
|
@@ -330,12 +338,15 @@ class UserSchema(NamedSchema, table=True):
|
|
330
338
|
if include_metadata:
|
331
339
|
metadata = ServiceAccountResponseMetadata(
|
332
340
|
description=self.description or "",
|
341
|
+
external_user_id=self.external_user_id,
|
333
342
|
)
|
334
343
|
|
335
344
|
body = ServiceAccountResponseBody(
|
345
|
+
full_name=self.full_name,
|
336
346
|
created=self.created,
|
337
347
|
updated=self.updated,
|
338
348
|
active=self.active,
|
349
|
+
avatar_url=self.avatar_url,
|
339
350
|
)
|
340
351
|
|
341
352
|
return ServiceAccountResponse(
|
@@ -260,6 +260,7 @@ from zenml.models import (
|
|
260
260
|
ServerSettingsResponse,
|
261
261
|
ServerSettingsUpdate,
|
262
262
|
ServiceAccountFilter,
|
263
|
+
ServiceAccountInternalRequest,
|
263
264
|
ServiceAccountRequest,
|
264
265
|
ServiceAccountResponse,
|
265
266
|
ServiceAccountUpdate,
|
@@ -7296,7 +7297,10 @@ class SqlZenStore(BaseZenStore):
|
|
7296
7297
|
|
7297
7298
|
@track_decorator(AnalyticsEvent.CREATED_SERVICE_ACCOUNT)
|
7298
7299
|
def create_service_account(
|
7299
|
-
self,
|
7300
|
+
self,
|
7301
|
+
service_account: Union[
|
7302
|
+
ServiceAccountRequest, ServiceAccountInternalRequest
|
7303
|
+
],
|
7300
7304
|
) -> ServiceAccountResponse:
|
7301
7305
|
"""Creates a new service account.
|
7302
7306
|
|