fractal-server 2.11.0a10__py3-none-any.whl → 2.12.0__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.
Files changed (68) hide show
  1. fractal_server/__init__.py +1 -1
  2. fractal_server/app/models/__init__.py +0 -2
  3. fractal_server/app/models/linkuserproject.py +0 -9
  4. fractal_server/app/models/v2/dataset.py +0 -4
  5. fractal_server/app/models/v2/workflowtask.py +0 -4
  6. fractal_server/app/routes/aux/_job.py +1 -3
  7. fractal_server/app/runner/executors/slurm/ssh/executor.py +9 -6
  8. fractal_server/app/runner/executors/slurm/sudo/executor.py +1 -5
  9. fractal_server/app/runner/filenames.py +0 -2
  10. fractal_server/app/runner/shutdown.py +3 -27
  11. fractal_server/app/schemas/_validators.py +0 -19
  12. fractal_server/config.py +1 -15
  13. fractal_server/main.py +1 -12
  14. fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +67 -0
  15. fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +54 -0
  16. fractal_server/string_tools.py +0 -21
  17. fractal_server/tasks/utils.py +0 -28
  18. {fractal_server-2.11.0a10.dist-info → fractal_server-2.12.0.dist-info}/METADATA +1 -1
  19. {fractal_server-2.11.0a10.dist-info → fractal_server-2.12.0.dist-info}/RECORD +22 -66
  20. fractal_server/app/models/v1/__init__.py +0 -13
  21. fractal_server/app/models/v1/dataset.py +0 -71
  22. fractal_server/app/models/v1/job.py +0 -101
  23. fractal_server/app/models/v1/project.py +0 -29
  24. fractal_server/app/models/v1/state.py +0 -34
  25. fractal_server/app/models/v1/task.py +0 -85
  26. fractal_server/app/models/v1/workflow.py +0 -133
  27. fractal_server/app/routes/admin/v1.py +0 -377
  28. fractal_server/app/routes/api/v1/__init__.py +0 -26
  29. fractal_server/app/routes/api/v1/_aux_functions.py +0 -478
  30. fractal_server/app/routes/api/v1/dataset.py +0 -554
  31. fractal_server/app/routes/api/v1/job.py +0 -195
  32. fractal_server/app/routes/api/v1/project.py +0 -475
  33. fractal_server/app/routes/api/v1/task.py +0 -203
  34. fractal_server/app/routes/api/v1/task_collection.py +0 -239
  35. fractal_server/app/routes/api/v1/workflow.py +0 -355
  36. fractal_server/app/routes/api/v1/workflowtask.py +0 -187
  37. fractal_server/app/runner/async_wrap_v1.py +0 -27
  38. fractal_server/app/runner/v1/__init__.py +0 -415
  39. fractal_server/app/runner/v1/_common.py +0 -620
  40. fractal_server/app/runner/v1/_local/__init__.py +0 -186
  41. fractal_server/app/runner/v1/_local/_local_config.py +0 -105
  42. fractal_server/app/runner/v1/_local/_submit_setup.py +0 -48
  43. fractal_server/app/runner/v1/_local/executor.py +0 -100
  44. fractal_server/app/runner/v1/_slurm/__init__.py +0 -312
  45. fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -81
  46. fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -163
  47. fractal_server/app/runner/v1/common.py +0 -117
  48. fractal_server/app/runner/v1/handle_failed_job.py +0 -141
  49. fractal_server/app/schemas/v1/__init__.py +0 -37
  50. fractal_server/app/schemas/v1/applyworkflow.py +0 -161
  51. fractal_server/app/schemas/v1/dataset.py +0 -165
  52. fractal_server/app/schemas/v1/dumps.py +0 -64
  53. fractal_server/app/schemas/v1/manifest.py +0 -126
  54. fractal_server/app/schemas/v1/project.py +0 -66
  55. fractal_server/app/schemas/v1/state.py +0 -18
  56. fractal_server/app/schemas/v1/task.py +0 -167
  57. fractal_server/app/schemas/v1/task_collection.py +0 -110
  58. fractal_server/app/schemas/v1/workflow.py +0 -212
  59. fractal_server/data_migrations/2_11_0.py +0 -168
  60. fractal_server/tasks/v1/_TaskCollectPip.py +0 -103
  61. fractal_server/tasks/v1/__init__.py +0 -0
  62. fractal_server/tasks/v1/background_operations.py +0 -352
  63. fractal_server/tasks/v1/endpoint_operations.py +0 -156
  64. fractal_server/tasks/v1/get_collection_data.py +0 -14
  65. fractal_server/tasks/v1/utils.py +0 -67
  66. {fractal_server-2.11.0a10.dist-info → fractal_server-2.12.0.dist-info}/LICENSE +0 -0
  67. {fractal_server-2.11.0a10.dist-info → fractal_server-2.12.0.dist-info}/WHEEL +0 -0
  68. {fractal_server-2.11.0a10.dist-info → fractal_server-2.12.0.dist-info}/entry_points.txt +0 -0
@@ -1,31 +1,23 @@
1
- fractal_server/__init__.py,sha256=clpVem1dBwk8HjXFnS1878guQBQS-4Cvk0DBQPNJpWQ,26
1
+ fractal_server/__init__.py,sha256=Cs7OGHIY1TASMMCkZvwDDUKr0-65JXg8Ajtkt0Afjtk,23
2
2
  fractal_server/__main__.py,sha256=D2YTmSowmXNyvqOjW_HeItCZT2UliWlySl_owicaZg0,8026
3
3
  fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
4
4
  fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  fractal_server/app/db/__init__.py,sha256=wup2wcOkyOh8Vd0Xm76PZn_naxeMqaL4eF8DHHXTGlI,2889
6
- fractal_server/app/models/__init__.py,sha256=aG7mf1zZbsgzDSp7GHEcZhdjHfW3TGPOLCI8MrvYhPw,500
6
+ fractal_server/app/models/__init__.py,sha256=xJWiGAwpXmCpnFMC4c_HTqoUCzMOXrakoGLUH_uMvdA,415
7
7
  fractal_server/app/models/linkusergroup.py,sha256=LWTUfhH2uAnn_4moK7QdRUIHWtpw-hPZuW-5jClv_OE,610
8
- fractal_server/app/models/linkuserproject.py,sha256=eQaourbGRshvlMVlKzLYJKHEjfsW1CbWws9yW4eHXhA,567
8
+ fractal_server/app/models/linkuserproject.py,sha256=hvaxh3Lkiy2uUCwB8gvn8RorCpvxSSdzWdCS_U1GL7g,315
9
9
  fractal_server/app/models/security.py,sha256=kLvarGwG1CxvtbpV2HkkOobzHU5Ia0PHyNzHghKSEx4,3751
10
10
  fractal_server/app/models/user_settings.py,sha256=Y-ZV-uZAFLZqXxy8c5_Qeh_F7zQuZDWOgLpU6Zs6iqU,1316
11
- fractal_server/app/models/v1/__init__.py,sha256=hUI7dEbPaiZGN0IbHW4RSmSicyvtn_xeuevoX7zvUwI,466
12
- fractal_server/app/models/v1/dataset.py,sha256=99GDgt7njx8yYQApkImqp_7bHA5HH3ElvbR6Oyj9kVI,2017
13
- fractal_server/app/models/v1/job.py,sha256=QLGXcWdVRHaUHQNDapYYlLpEfw4K7QyD8TmcwhrWw2o,3304
14
- fractal_server/app/models/v1/project.py,sha256=JG7b5J9CzVNxua4MaMYpfB57xt2qjbXr5SnR7_oKQ70,819
15
- fractal_server/app/models/v1/state.py,sha256=m9gMZqqnm3oDpJNJp-Lht4kM7oO7pcEI7sL1g7LFvWU,1043
16
- fractal_server/app/models/v1/task.py,sha256=uFXam7eu3Ye1Yt7_g7llCzY8BetmDRilsq5hR2C1Zbg,2640
17
- fractal_server/app/models/v1/workflow.py,sha256=dnY5eMaOe3oZv8arn00RNX9qVkBtTLG-vYdWXcQuyo4,3950
18
11
  fractal_server/app/models/v2/__init__.py,sha256=63THGEZQlxWcosGCI74SEvJU7wOoOn1j1byTjf4NFOI,526
19
- fractal_server/app/models/v2/dataset.py,sha256=gO_V_Fsmw44uB1Nc6MLBVOGxQeutxpDi8nvhhwkggbE,1696
12
+ fractal_server/app/models/v2/dataset.py,sha256=RuqTHXWEgs4A3OSk8Pq9DTq9Xr7w1IJNnyXhOzrDiR0,1509
20
13
  fractal_server/app/models/v2/job.py,sha256=BMmu5oXdZvN7jEIAMZvQMB3PQBcCYzxn6Qm6HdRWre4,1725
21
14
  fractal_server/app/models/v2/project.py,sha256=rAHoh5KfYwIaW7rTX0_O0jvWmxEvfo1BafvmcXuSSRk,786
22
15
  fractal_server/app/models/v2/task.py,sha256=jebD28Pz8tGcsWCItxj6uKjcD8BMMnnU8dqYhvhEB6c,1520
23
16
  fractal_server/app/models/v2/task_group.py,sha256=Sd-fb7EN18eOxrS-RT4ekczLWp-tQcbX5C4LrcmjoIM,3443
24
17
  fractal_server/app/models/v2/workflow.py,sha256=YBgFGCziUgU0aJ5EM3Svu9W2c46AewZO9VBlFCHiSps,1069
25
- fractal_server/app/models/v2/workflowtask.py,sha256=nidHo87GNgMVvL2WDm0HOfGLwGY3m65GTDAInwbqk1Q,1312
18
+ fractal_server/app/models/v2/workflowtask.py,sha256=sBnKiEx9KqhprUaZVY6R8lyfCdwRaX8obYm6bXdn6_E,1119
26
19
  fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
20
  fractal_server/app/routes/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- fractal_server/app/routes/admin/v1.py,sha256=ggJZMeKhRijfVe2h2VzfIcpR15FqkKImANhkTXl0mSk,12908
29
21
  fractal_server/app/routes/admin/v2/__init__.py,sha256=KYrw0COmmMuIMp7c6YcYRXah4tEYplCWeROnPK1VTeg,681
30
22
  fractal_server/app/routes/admin/v2/job.py,sha256=cbkFIRIIXaWmNsUFI7RAu8HpQ0mWn_bgoxtvWZxr-IA,7624
31
23
  fractal_server/app/routes/admin/v2/project.py,sha256=luy-yiGX1JYTdPm1hpIdDUUqPm8xHuipLy9k2X6zu74,1223
@@ -33,15 +25,6 @@ fractal_server/app/routes/admin/v2/task.py,sha256=gShC2EAOYa0qTB69EXTDXz5Y375Qoa
33
25
  fractal_server/app/routes/admin/v2/task_group.py,sha256=DncrOAB4q-v3BAmxg35m4EohleriW_FLGE5gpW_Or08,8120
34
26
  fractal_server/app/routes/admin/v2/task_group_lifecycle.py,sha256=0e0ZJ_k75TVHaT2o8Xk33DPDSgh-eBhZf-y4y7t-Adg,9429
35
27
  fractal_server/app/routes/api/__init__.py,sha256=2IDheFi0OFdsUg7nbUiyahqybvpgXqeHUXIL2QtWrQQ,641
36
- fractal_server/app/routes/api/v1/__init__.py,sha256=Y2HQdG197J0a7DyQEE2jn53IfxD0EHGhzK1I2JZuEck,958
37
- fractal_server/app/routes/api/v1/_aux_functions.py,sha256=P9Q48thGH95w0h5cacYoibxqgiiLW4oqZ8rNJ2LIISY,13219
38
- fractal_server/app/routes/api/v1/dataset.py,sha256=7P2VugyaHDhAhUK2EUDksj7O2SgSxRsR7dMDMQB_dPI,17288
39
- fractal_server/app/routes/api/v1/job.py,sha256=0jGxvu0xNQnWuov2qnoo9yE7Oat37XbcVn4Ute-UsiE,5370
40
- fractal_server/app/routes/api/v1/project.py,sha256=3NsdNXLIsE8QiNgKP1Kp1-B0zYG0Zi5HKBzWA0LjlQg,15551
41
- fractal_server/app/routes/api/v1/task.py,sha256=eW89nMCjpD4G6tHXDo2qGBKqWaPirjH6M3hpdJQhfa0,6528
42
- fractal_server/app/routes/api/v1/task_collection.py,sha256=5EMh3yhS1Z4x25kp5Iaxalrf7RgJh-XD1nBjrFvgwsg,9072
43
- fractal_server/app/routes/api/v1/workflow.py,sha256=2T93DuEnSshaDCue-JPmjuvGCtbk6lt9pFMuPt783t8,11217
44
- fractal_server/app/routes/api/v1/workflowtask.py,sha256=OYYConwJbmNULDw5I3T-UbSJKrbbBiAHbbBeVcpoFKQ,5785
45
28
  fractal_server/app/routes/api/v2/__init__.py,sha256=w4c9WzagaVV5d4TWBX5buu5ENk8jf3YftMQYmhavz9Q,2172
46
29
  fractal_server/app/routes/api/v2/_aux_functions.py,sha256=NJ6_1biN_hhIEK1w8Vj6XhLmdkQ5kMVd_MX5JC_nHLU,11524
47
30
  fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=c8eqPXdMhc3nIixX50B1Ka5n7LgbOZm2JbEs7lICQ04,6767
@@ -70,11 +53,10 @@ fractal_server/app/routes/auth/register.py,sha256=DlHq79iOvGd_gt2v9uwtsqIKeO6i_G
70
53
  fractal_server/app/routes/auth/router.py,sha256=tzJrygXFZlmV_uWelVqTOJMEH-3Fr7ydwlgx1LxRjxY,527
71
54
  fractal_server/app/routes/auth/users.py,sha256=kZv-Ls224WBFiuvVeM584LhYq_BLz6HQ9HpWbWQxRRM,7808
72
55
  fractal_server/app/routes/aux/__init__.py,sha256=LR4bR7RunHAK6jc9IR2bReQd-BdXADdnDccXI4uGeGY,731
73
- fractal_server/app/routes/aux/_job.py,sha256=q-RCiW17yXnZKAC_0La52RLvhqhxuvbgQJ2MlGXOj8A,702
56
+ fractal_server/app/routes/aux/_job.py,sha256=XWyWpOObcV55YyK7uzGRlaslmPDCBZy4hiSZBpoa_bg,616
74
57
  fractal_server/app/routes/aux/_runner.py,sha256=FdCVla5DxGAZ__aB7Z8dEJzD_RIeh5tftjrPyqkr8N8,895
75
58
  fractal_server/app/routes/aux/validate_user_settings.py,sha256=Y8eubau0julkwVYB5nA83nDtxh_7RU9Iq0zAhb_dXLA,2351
76
59
  fractal_server/app/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
- fractal_server/app/runner/async_wrap_v1.py,sha256=g3opE96OsW-kL_YJVCRFOyHISJt8gQwtUnfJzdZPCOQ,832
78
60
  fractal_server/app/runner/components.py,sha256=ZF8ct_Ky5k8IAcrmpYOZ-bc6OBgdELEighYVqFDEbZg,119
79
61
  fractal_server/app/runner/compress_folder.py,sha256=HSc1tv7x2DBjBoXwugZlC79rm9GNBIWtQKK9yWn5ZBI,3991
80
62
  fractal_server/app/runner/exceptions.py,sha256=_qZ_t8O4umAdJ1ikockiF5rDJuxnEskrGrLjZcnQl7A,4159
@@ -86,30 +68,19 @@ fractal_server/app/runner/executors/slurm/remote.py,sha256=wLziIsGdSMiO-jIXM8x77
86
68
  fractal_server/app/runner/executors/slurm/ssh/__init__.py,sha256=Cjn1rYvljddi96tAwS-qqGkNfOcfPzjChdaEZEObCcM,65
87
69
  fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py,sha256=bKo5Ja0IGxJWpPWyh9dN0AG-PwzTDZzD5LyaEHB3YU4,3742
88
70
  fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py,sha256=rwlqZzoGo4SAb4nSlFjsQJdaCgfM1J6YGcjb8yYxlqc,4506
89
- fractal_server/app/runner/executors/slurm/ssh/executor.py,sha256=gtjXKTY0cP3h5AtTXRZChtFOP-tbJTBmvxs_6VnEWao,54082
71
+ fractal_server/app/runner/executors/slurm/ssh/executor.py,sha256=oqXssvcjBiTYxkud-WVQQuQiAKOiBYumz6piFSY5jNg,54316
90
72
  fractal_server/app/runner/executors/slurm/sudo/__init__.py,sha256=Cjn1rYvljddi96tAwS-qqGkNfOcfPzjChdaEZEObCcM,65
91
73
  fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py,sha256=wAgwpVcr6JIslKHOuS0FhRa_6T1KCManyRJqA-fifzw,1909
92
74
  fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py,sha256=uRRyVHQtK9McHCB6OsjYfDnQsu2E8At9K_UYb_pe2pg,4682
93
75
  fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py,sha256=g8wqUjSicN17UZVXlfaMomYZ-xOIbBu1oE7HdJTzfvw,5218
94
- fractal_server/app/runner/executors/slurm/sudo/executor.py,sha256=FVgx2mxqCLOhSoH3UTAeNc0BT0eJaxHMglGzGYePGPM,47439
76
+ fractal_server/app/runner/executors/slurm/sudo/executor.py,sha256=z3_VKolY472GQ9mPr1MipQfRIbjt3XW-X13q-x0gAnE,47272
95
77
  fractal_server/app/runner/executors/slurm/utils_executors.py,sha256=naPyJI0I3lD-sYHbSXbMFGUBK4h_SggA5V91Z1Ch1Xg,1416
96
78
  fractal_server/app/runner/extract_archive.py,sha256=tLpjDrX47OjTNhhoWvm6iNukg8KoieWyTb7ZfvE9eWU,2483
97
- fractal_server/app/runner/filenames.py,sha256=h4iOHD5z_f1y-bFJL-FXAws7k7SwmBmCr8y28m-EGcY,146
79
+ fractal_server/app/runner/filenames.py,sha256=lPnxKHtdRizr6FqG3zOdjDPyWA7GoaJGTtiuJV0gA8E,70
98
80
  fractal_server/app/runner/run_subprocess.py,sha256=c3JbYXq3hX2aaflQU19qJ5Xs6J6oXGNvnTEoAfv2bxc,959
99
81
  fractal_server/app/runner/set_start_and_last_task_index.py,sha256=-q4zVybAj8ek2XlbENKlfOAJ39hT_zoJoZkqzDqiAMY,1254
100
- fractal_server/app/runner/shutdown.py,sha256=I_o2iYKJwzku0L3E85ETjrve3QPECygR5xhhsAo5huM,2910
82
+ fractal_server/app/runner/shutdown.py,sha256=9pfSKHDNdIcm0eY-opgRTi7y0HmvfPmYiu9JR6Idark,2082
101
83
  fractal_server/app/runner/task_files.py,sha256=sd_MpJ01C8c9QTO8GzGMidFGdlq_hXX_ARDRhd_YMnI,3762
102
- fractal_server/app/runner/v1/__init__.py,sha256=VvJFk4agX2X3fQfDcoNmOB2ouNCaQU7dAqaFmpcdP8I,15063
103
- fractal_server/app/runner/v1/_common.py,sha256=MALqlDwvvniBT_z2cuyEHdiOmzSp9lH4BEGGitFggAQ,21561
104
- fractal_server/app/runner/v1/_local/__init__.py,sha256=4u5RWwSDlNnhPC4ZRP7OAW8_UVt7K27fHByoFf37ne4,6938
105
- fractal_server/app/runner/v1/_local/_local_config.py,sha256=hM7SPxR07luXPcXdrWXRpEB2uOyjSSRUdqW3QBKJn9c,3147
106
- fractal_server/app/runner/v1/_local/_submit_setup.py,sha256=XyBDPb4IYdKEEnzLYdcYteIHWVWofJxKMmQCyRkn5Bc,1509
107
- fractal_server/app/runner/v1/_local/executor.py,sha256=QrJlD77G6q4WohoJQO7XXbvi2RlCUsNvMnPDEZIoAqA,3620
108
- fractal_server/app/runner/v1/_slurm/__init__.py,sha256=SsImgL8Agb2Qy98IY8S6N0ZIiXMpZ-eHvFHl7Hlb5tE,10955
109
- fractal_server/app/runner/v1/_slurm/_submit_setup.py,sha256=KO9c694d318adoPQh9UGwxLkw4fRIgybQ5h7QHQKLXQ,2828
110
- fractal_server/app/runner/v1/_slurm/get_slurm_config.py,sha256=6pQNNx997bLIfLp0guF09t_O0ZYRXnbEGLktSAcKnic,5999
111
- fractal_server/app/runner/v1/common.py,sha256=_L-vjLnWato80VdlB_BFN4G8P4jSM07u-5cnl1T3S34,3294
112
- fractal_server/app/runner/v1/handle_failed_job.py,sha256=R8IsM_ucX0_lqFCly8BYuzf-VAVafE5wj_1JXapnxeQ,4696
113
84
  fractal_server/app/runner/v2/__init__.py,sha256=1V4uocFaZQAQ1f01UEV8XjXo_9gNjiWgchsHfsm_TZM,15229
114
85
  fractal_server/app/runner/v2/_local/__init__.py,sha256=QnQ9jfqpzShzjp6H7rfVx9Sqp03J1JB6fCpwNx2MDOw,5119
115
86
  fractal_server/app/runner/v2/_local/_local_config.py,sha256=9oi209Dlp35ANfxb_DISqmMKKc6DPaMsmYVWbZLseME,3630
@@ -135,20 +106,10 @@ fractal_server/app/runner/v2/task_interface.py,sha256=d6HPwPzrytUMVjExTU6fuCEwtv
135
106
  fractal_server/app/runner/versions.py,sha256=dSaPRWqmFPHjg20kTCHmi_dmGNcCETflDtDLronNanU,852
136
107
  fractal_server/app/schemas/__init__.py,sha256=stURAU_t3AOBaH0HSUbV-GKhlPKngnnIMoqWc3orFyI,135
137
108
  fractal_server/app/schemas/_filter_validators.py,sha256=0wJuZzMa-hJsMCEMxtBalW3lSk1Qey25uSVmS7GVcPM,1534
138
- fractal_server/app/schemas/_validators.py,sha256=3dotVxUHWKAmUO3aeoluYDLRKrw1OS-NxcZ4Fg_HOYk,3560
109
+ fractal_server/app/schemas/_validators.py,sha256=wS09d8hX7mN91C8_BF9jfB8rgBbuAmmZ1BAmLKi3BU8,2974
139
110
  fractal_server/app/schemas/user.py,sha256=icjox9gK_invW44Nh_L4CvqfRa92qghyQhmevyg09nQ,2243
140
111
  fractal_server/app/schemas/user_group.py,sha256=t30Kd07PY43G_AqFDb8vjdInTeLeU9WvFZDx8fVLPSI,1750
141
112
  fractal_server/app/schemas/user_settings.py,sha256=re7ZFS8BLjR9MdIoZNRt2DNPc7znCgDpEYFKr8ZsAZg,2980
142
- fractal_server/app/schemas/v1/__init__.py,sha256=CrBGgBhoemCvmZ70ZUchM-jfVAICnoa7AjZBAtL2UB0,1852
143
- fractal_server/app/schemas/v1/applyworkflow.py,sha256=dYArxQAOBdUIEXX_Ejz8b9fBhEYu1nMm6b_Z6_P6TgA,4052
144
- fractal_server/app/schemas/v1/dataset.py,sha256=DWFCxZjApcKt2M6UJMK0tmejXwUT09vjUULf2D7Y-f0,3293
145
- fractal_server/app/schemas/v1/dumps.py,sha256=67VXnyLh_0Ufo7rPM2jZ9P9rk0CnYcVAkilx_cLX6sg,1274
146
- fractal_server/app/schemas/v1/manifest.py,sha256=Yht7guhs0Pcl2U0RMOCbI_UHBZ9YO_YU0H8hxACx3TY,3829
147
- fractal_server/app/schemas/v1/project.py,sha256=Zxd-AguQQG9z2CfJ_sJh5SB9WcHPFbWpLgP_AhjOyZs,1067
148
- fractal_server/app/schemas/v1/state.py,sha256=tBXzp_qW2TNNNPBo-AWEaffEU-1GkMBtUoaMgiN_EL0,302
149
- fractal_server/app/schemas/v1/task.py,sha256=7BxOZ_qoRQ8n3YbQpDvB7VMcxB5fSYQmR5RLIWhuJ5U,3704
150
- fractal_server/app/schemas/v1/task_collection.py,sha256=uvq9bcMaGD_qHsh7YtcpoSAkVAbw12eY4DocIO3MKOg,3057
151
- fractal_server/app/schemas/v1/workflow.py,sha256=oRKamLSuAgrTcv3gMMxGcotDloLL2c3NNgPA39UEmmM,4467
152
113
  fractal_server/app/schemas/v2/__init__.py,sha256=IT2a6fbRx3rt8h6jri_4gZWzTN9EVXewiWoIuBcZ-xA,2618
153
114
  fractal_server/app/schemas/v2/dataset.py,sha256=FKzQyMBAdFo9hnR4HzXQML7VbkM8YlKE4OLKjpo-Pdw,5085
154
115
  fractal_server/app/schemas/v2/dumps.py,sha256=Yiyma6pMnEk1c-Ekf0e-IWgM20_R4qWyHuoqfdc6brE,1635
@@ -164,8 +125,7 @@ fractal_server/app/schemas/v2/workflowtask.py,sha256=xjFTmnKuHSetJvN-9k_GTMbPKwP
164
125
  fractal_server/app/security/__init__.py,sha256=qn6idYgl-p5HWea0gTVnz4JnkoxGEkmQjPzvKpDWT0I,14035
165
126
  fractal_server/app/security/signup_email.py,sha256=DrL51UdTSrgjleynMD5CRZwTSOpPrZ96fasRV0fvxDE,1165
166
127
  fractal_server/app/user_settings.py,sha256=OP1yiYKtPadxwM51_Q0hdPk3z90TCN4z1BLpQsXyWiU,1316
167
- fractal_server/config.py,sha256=9rAzw7OO6ZeHEz-I8NJHuGoHf4xCHxfFLyRNZQD9ytY,27019
168
- fractal_server/data_migrations/2_11_0.py,sha256=Cc-P_eXKnlQxc2AnRzV0K4B4DDeEHEFm1WltFjtRMnA,6400
128
+ fractal_server/config.py,sha256=fIXjjdczTSBuPphQT6FukE3AwhdfIupsbmR38j3HZ_U,26623
169
129
  fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
170
130
  fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
171
131
  fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
@@ -173,12 +133,13 @@ fractal_server/images/__init__.py,sha256=-_wjoKtSX02P1KjDxDP_EXKvmbONTRmbf7iGVTs
173
133
  fractal_server/images/models.py,sha256=t4zcUFmWxhAzGgy7kkxs9Ctq8SAhVs0v910UcXcHIUw,3349
174
134
  fractal_server/images/tools.py,sha256=4kfPAFJJnvg7fM-cL0JMx97Dc1Npva_0ghitEji3JUU,3407
175
135
  fractal_server/logger.py,sha256=5Z3rfsFwl8UysVljTOaaIvt8Pyp6CVH492ez3jE8WAw,5113
176
- fractal_server/main.py,sha256=gStLT9Du5QMpc9SyvRvtKU21EKwp-dG4HL3zGHzE06A,4908
136
+ fractal_server/main.py,sha256=1ZesKY3-ML8BVmVRg_r_aNWoaSea1uR3GP0DlunpE5U,4452
177
137
  fractal_server/migrations/env.py,sha256=9t_OeKVlhM8WRcukmTrLbWNup-imiBGP_9xNgwCbtpI,2730
178
138
  fractal_server/migrations/naming_convention.py,sha256=htbKrVdetx3pklowb_9Cdo5RqeF0fJ740DNecY5de_M,265
179
139
  fractal_server/migrations/versions/034a469ec2eb_task_groups.py,sha256=vrPhC8hfFu1c4HmLHNZyCuqEfecFD8-bWc49bXMNes0,6199
180
140
  fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py,sha256=-BSS9AFTPcu3gYC-sYbawSy4MWQQx8TfMb5BW5EBKmQ,1450
181
141
  fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py,sha256=Q1Gj1cJ0UrdLBJ5AXfFK9QpxTtmcv-4Z3NEGDnxOme4,961
142
+ fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py,sha256=ok8dl4IkI-dfsyE_NZ8IndjQrnQ_g6CDZo4PwozpIwE,1605
182
143
  fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py,sha256=lANgTox0rz459_yo1Rw7fGCT1qw5sUCUXTLUMc_Bzf8,911
183
144
  fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py,sha256=-wHe-fOffmYeAm0JXVl_lxZ7hhDkaEVqxgxpHkb_uL8,954
184
145
  fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py,sha256=Mob8McGYAcmgvrseyyYOa54E6Gsgr-4SiGdC-r9O4_A,1157
@@ -196,6 +157,7 @@ fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py,sha256=0i
196
157
  fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py,sha256=syONdZNf4-OnAcWIsbzXpYwpXPsXZ4SsmjwVvmVG0PU,2256
197
158
  fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py,sha256=4l1AHGUsa0ONoJVZlr3fTXw_xbbQ8O7wlD92Az2aRfM,1849
198
159
  fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py,sha256=ekDUML7ILpmdoqEclKbEUdyLi4uw9HSG_sTjG2hp_JE,867
160
+ fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py,sha256=9sLd0F7nO5chHHm7RZ4wBA-9bvWomS-av_odKwODADM,1551
199
161
  fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py,sha256=HN3_Pk8G81SzdYjg4K1RZAyjKSlsZGvcYE2nWOUbwxQ,3861
200
162
  fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py,sha256=6cHEZFuTXiQg9yu32Y3RH1XAl71av141WQ6UMbiITIg,949
201
163
  fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py,sha256=yGWSA2HIHUybcVy66xBITk08opV2DFYSCIIrulaUZhI,901
@@ -206,16 +168,10 @@ fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.p
206
168
  fractal_server/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
207
169
  fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
208
170
  fractal_server/ssh/_fabric.py,sha256=lNy4IX1I4We6VoWa4Bz4fUPuApLMSoejpyE6I3jDZeM,22869
209
- fractal_server/string_tools.py,sha256=XtMNsr5R7GmgzmFi68zkKMedHs8vjGoVMMCXqWhIk9k,2568
171
+ fractal_server/string_tools.py,sha256=niViRrrZAOo0y6pEFI9L_eUYS1PoOiQZUBtngiLc2_k,1877
210
172
  fractal_server/syringe.py,sha256=3qSMW3YaMKKnLdgnooAINOPxnCOxP7y2jeAQYB21Gdo,2786
211
173
  fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39NHE8,23
212
- fractal_server/tasks/utils.py,sha256=gA9nYAviWKAMJmaF5RtoT2InddU6dCT2qA6fZTYNGO4,1105
213
- fractal_server/tasks/v1/_TaskCollectPip.py,sha256=ARq5AoHYXH0hziEsb-nFAqbsLA-VIddXOdXL38O6_zA,3746
214
- fractal_server/tasks/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
215
- fractal_server/tasks/v1/background_operations.py,sha256=0Zm8TT_RV0BxJCXbruYJCu1eXOkEcHpqnWn_BEe7huw,11829
216
- fractal_server/tasks/v1/endpoint_operations.py,sha256=NQYvgh-_qEI9YhsLiulfOFPDacCd-rgl3cCbPbkJUA0,5103
217
- fractal_server/tasks/v1/get_collection_data.py,sha256=5C22jp356rCH5IIC0J57wOu-DCC_kp3B6p68JooN7IM,508
218
- fractal_server/tasks/v1/utils.py,sha256=HYFyNAyZofmf--mVgdwGC5TJpGShIWIDaS01yRr4HxM,1771
174
+ fractal_server/tasks/utils.py,sha256=V7dj8o2AnoHhGSTYlqJHcRFhCIpmOrMOUhtiE_DvRVA,291
219
175
  fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
220
176
  fractal_server/tasks/v2/local/__init__.py,sha256=9RVItnS7OyLsJOuJjWMCicaky4ASUPQEYD4SzDs0hOE,141
221
177
  fractal_server/tasks/v2/local/_utils.py,sha256=EvhmVwYjqaNyDCUMEsTWYOUXLgEwR1xr6bu32apCEI8,2491
@@ -241,8 +197,8 @@ fractal_server/tasks/v2/utils_templates.py,sha256=07TZpJ0Mh_A4lXVXrrH2o1VLFFGwxe
241
197
  fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
242
198
  fractal_server/utils.py,sha256=PMwrxWFxRTQRl1b9h-NRIbFGPKqpH_hXnkAT3NfZdpY,3571
243
199
  fractal_server/zip_tools.py,sha256=GjDgo_sf6V_DDg6wWeBlZu5zypIxycn_l257p_YVKGc,4876
244
- fractal_server-2.11.0a10.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
245
- fractal_server-2.11.0a10.dist-info/METADATA,sha256=oQdGPsnAFNH-PEtO239jJjVsxCDWPztSto5qizFAxbw,4565
246
- fractal_server-2.11.0a10.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
247
- fractal_server-2.11.0a10.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
248
- fractal_server-2.11.0a10.dist-info/RECORD,,
200
+ fractal_server-2.12.0.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
201
+ fractal_server-2.12.0.dist-info/METADATA,sha256=7MrD3otJLzy2BCt_Ft-6dB515YdnnoO3FNYjdMUcdx8,4562
202
+ fractal_server-2.12.0.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
203
+ fractal_server-2.12.0.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
204
+ fractal_server-2.12.0.dist-info/RECORD,,
@@ -1,13 +0,0 @@
1
- """
2
- `models` module
3
- """
4
- from ..linkuserproject import LinkUserProject # noqa F401
5
- from .dataset import Dataset # noqa F401
6
- from .dataset import Resource # noqa F401
7
- from .job import ApplyWorkflow # noqa F401
8
- from .job import JobStatusTypeV1 # noqa F401
9
- from .project import Project # noqa F401
10
- from .state import State # noqa F401
11
- from .task import Task # noqa F401
12
- from .workflow import Workflow # noqa F401
13
- from .workflow import WorkflowTask # noqa F401
@@ -1,71 +0,0 @@
1
- from datetime import datetime
2
- from typing import Any
3
- from typing import Optional
4
-
5
- from sqlalchemy import Column
6
- from sqlalchemy.ext.orderinglist import ordering_list
7
- from sqlalchemy.types import DateTime
8
- from sqlalchemy.types import JSON
9
- from sqlmodel import Field
10
- from sqlmodel import Relationship
11
- from sqlmodel import SQLModel
12
-
13
- from ....utils import get_timestamp
14
- from ...schemas.v1.dataset import _DatasetBaseV1
15
- from ...schemas.v1.dataset import _ResourceBaseV1
16
-
17
-
18
- class Resource(_ResourceBaseV1, SQLModel, table=True):
19
- id: Optional[int] = Field(default=None, primary_key=True)
20
- dataset_id: int = Field(foreign_key="dataset.id")
21
-
22
-
23
- class Dataset(_DatasetBaseV1, SQLModel, table=True):
24
- """
25
- Represent a dataset
26
-
27
- Attributes:
28
- id:
29
- Primary key
30
- project_id:
31
- ID of the project the workflow belongs to.
32
- meta:
33
- Metadata of the Dataset
34
- history:
35
- History of the Dataset
36
- resource_list:
37
- (Mapper attribute)
38
-
39
- """
40
-
41
- id: Optional[int] = Field(default=None, primary_key=True)
42
- project_id: int = Field(foreign_key="project.id")
43
- project: "Project" = Relationship( # noqa: F821
44
- sa_relationship_kwargs=dict(lazy="selectin"),
45
- )
46
-
47
- resource_list: list[Resource] = Relationship(
48
- sa_relationship_kwargs={
49
- "lazy": "selectin",
50
- "order_by": "Resource.id",
51
- "collection_class": ordering_list("id"),
52
- "cascade": "all, delete-orphan",
53
- }
54
- )
55
-
56
- meta: dict[str, Any] = Field(sa_column=Column(JSON), default={})
57
- history: list[dict[str, Any]] = Field(
58
- sa_column=Column(JSON, server_default="[]", nullable=False)
59
- )
60
-
61
- timestamp_created: datetime = Field(
62
- default_factory=get_timestamp,
63
- sa_column=Column(DateTime(timezone=True), nullable=False),
64
- )
65
-
66
- class Config:
67
- arbitrary_types_allowed = True
68
-
69
- @property
70
- def paths(self) -> list[str]:
71
- return [r.path for r in self.resource_list]
@@ -1,101 +0,0 @@
1
- from datetime import datetime
2
- from typing import Any
3
- from typing import Optional
4
-
5
- from sqlalchemy import Column
6
- from sqlalchemy.types import DateTime
7
- from sqlalchemy.types import JSON
8
- from sqlmodel import Field
9
- from sqlmodel import SQLModel
10
-
11
- from ....utils import get_timestamp
12
- from ...schemas.v1 import JobStatusTypeV1
13
- from ...schemas.v1.applyworkflow import _ApplyWorkflowBaseV1
14
-
15
-
16
- class ApplyWorkflow(_ApplyWorkflowBaseV1, SQLModel, table=True):
17
- """
18
- Represent a workflow run
19
-
20
- This table is responsible for storing the state of a workflow execution in
21
- the database.
22
-
23
- Attributes:
24
- id:
25
- Primary key.
26
- project_id:
27
- ID of the project the workflow belongs to, or `None` if the project
28
- was deleted.
29
- input_dataset_id:
30
- ID of the input dataset, or `None` if the dataset was deleted.
31
- output_dataset_id:
32
- ID of the output dataset, or `None` if the dataset was deleted.
33
- workflow_id:
34
- ID of the workflow being applied, or `None` if the workflow was
35
- deleted.
36
- status:
37
- Job status
38
- workflow_dump:
39
- Copy of the submitted workflow at submission.
40
- input_dataset_dump:
41
- Copy of the input_dataset at submission.
42
- output_dataset_dump:
43
- Copy of the output_dataset at submission.
44
- start_timestamp:
45
- Timestamp of when the run began.
46
- end_timestamp:
47
- Timestamp of when the run ended or failed.
48
- status:
49
- Status of the run.
50
- log:
51
- Forward of the workflow logs.
52
- user_email:
53
- Email address of the user who submitted the job.
54
- slurm_account:
55
- Account to be used when submitting the job to SLURM (see "account"
56
- option in [`sbatch`
57
- documentation](https://slurm.schedmd.com/sbatch.html#SECTION_OPTIONS)).
58
- first_task_index:
59
- last_task_index:
60
- """
61
-
62
- class Config:
63
- arbitrary_types_allowed = True
64
-
65
- id: Optional[int] = Field(default=None, primary_key=True)
66
-
67
- project_id: Optional[int] = Field(foreign_key="project.id")
68
- workflow_id: Optional[int] = Field(foreign_key="workflow.id")
69
- input_dataset_id: Optional[int] = Field(foreign_key="dataset.id")
70
- output_dataset_id: Optional[int] = Field(foreign_key="dataset.id")
71
-
72
- user_email: str = Field(nullable=False)
73
- slurm_account: Optional[str]
74
-
75
- input_dataset_dump: dict[str, Any] = Field(
76
- sa_column=Column(JSON, nullable=False)
77
- )
78
- output_dataset_dump: dict[str, Any] = Field(
79
- sa_column=Column(JSON, nullable=False)
80
- )
81
- workflow_dump: dict[str, Any] = Field(
82
- sa_column=Column(JSON, nullable=False)
83
- )
84
- project_dump: dict[str, Any] = Field(
85
- sa_column=Column(JSON, nullable=False)
86
- )
87
-
88
- working_dir: Optional[str]
89
- working_dir_user: Optional[str]
90
- first_task_index: int
91
- last_task_index: int
92
-
93
- start_timestamp: datetime = Field(
94
- default_factory=get_timestamp,
95
- sa_column=Column(DateTime(timezone=True), nullable=False),
96
- )
97
- end_timestamp: Optional[datetime] = Field(
98
- default=None, sa_column=Column(DateTime(timezone=True))
99
- )
100
- status: str = JobStatusTypeV1.SUBMITTED
101
- log: Optional[str] = None
@@ -1,29 +0,0 @@
1
- from datetime import datetime
2
- from typing import Optional
3
-
4
- from sqlalchemy import Column
5
- from sqlalchemy.types import DateTime
6
- from sqlmodel import Field
7
- from sqlmodel import Relationship
8
- from sqlmodel import SQLModel
9
-
10
- from . import LinkUserProject
11
- from ....utils import get_timestamp
12
- from ...schemas.v1.project import _ProjectBaseV1
13
- from fractal_server.app.models import UserOAuth
14
-
15
-
16
- class Project(_ProjectBaseV1, SQLModel, table=True):
17
-
18
- id: Optional[int] = Field(default=None, primary_key=True)
19
- timestamp_created: datetime = Field(
20
- default_factory=get_timestamp,
21
- sa_column=Column(DateTime(timezone=True), nullable=False),
22
- )
23
-
24
- user_list: list[UserOAuth] = Relationship(
25
- link_model=LinkUserProject,
26
- sa_relationship_kwargs={
27
- "lazy": "selectin",
28
- },
29
- )
@@ -1,34 +0,0 @@
1
- from datetime import datetime
2
- from typing import Any
3
- from typing import Optional
4
-
5
- from sqlalchemy import Column
6
- from sqlalchemy.types import DateTime
7
- from sqlalchemy.types import JSON
8
- from sqlmodel import Field
9
- from sqlmodel import SQLModel
10
-
11
- from ....utils import get_timestamp
12
-
13
-
14
- class State(SQLModel, table=True):
15
- """
16
- Store arbitrary data in the database
17
-
18
- This table is just a state interchange that allows the system to store
19
- arbitrary data for later retrieval. This is particuarly important for long
20
- background tasks, in which it is not possible to return a meaningful
21
- response to the client within a single request lifespan.
22
-
23
- Attributes:
24
- id: Primary key
25
- data: Content of the `State`
26
- timestamp: Timestap of the `State`
27
- """
28
-
29
- id: Optional[int] = Field(default=None, primary_key=True)
30
- data: dict[str, Any] = Field(sa_column=Column(JSON), default={})
31
- timestamp: datetime = Field(
32
- default_factory=get_timestamp,
33
- sa_column=Column(DateTime(timezone=True)),
34
- )
@@ -1,85 +0,0 @@
1
- import json
2
- import logging
3
- from typing import Any
4
- from typing import Optional
5
-
6
- from pydantic import HttpUrl
7
- from sqlalchemy import Column
8
- from sqlalchemy.types import JSON
9
- from sqlmodel import Field
10
- from sqlmodel import SQLModel
11
-
12
- from ...schemas.v1.task import _TaskBaseV1
13
-
14
-
15
- class Task(_TaskBaseV1, SQLModel, table=True):
16
- """
17
- Task model
18
-
19
- Attributes:
20
- id: Primary key
21
- command: Executable command
22
- input_type: Expected type of input `Dataset`
23
- output_type: Expected type of output `Dataset`
24
- meta:
25
- Additional metadata related to execution (e.g. computational
26
- resources)
27
- source: inherited from `_TaskBase`
28
- name: inherited from `_TaskBase`
29
- args_schema: JSON schema of task arguments
30
- args_schema_version:
31
- label pointing at how the JSON schema of task arguments was
32
- generated
33
- """
34
-
35
- id: Optional[int] = Field(default=None, primary_key=True)
36
- name: str
37
- command: str
38
- source: str = Field(unique=True)
39
- input_type: str
40
- output_type: str
41
- meta: Optional[dict[str, Any]] = Field(sa_column=Column(JSON), default={})
42
- owner: Optional[str] = None
43
- version: Optional[str] = None
44
- args_schema: Optional[dict[str, Any]] = Field(
45
- sa_column=Column(JSON), default=None
46
- )
47
- args_schema_version: Optional[str]
48
- docs_info: Optional[str] = None
49
- docs_link: Optional[HttpUrl] = None
50
-
51
- @property
52
- def parallelization_level(self) -> Optional[str]:
53
- try:
54
- return self.meta["parallelization_level"]
55
- except KeyError:
56
- return None
57
-
58
- @property
59
- def is_parallel(self) -> bool:
60
- return bool(self.parallelization_level)
61
-
62
- @property
63
- def default_args_from_args_schema(self) -> dict[str, Any]:
64
- """
65
- Extract default arguments from args_schema
66
- """
67
- # Return {} if there is no args_schema
68
- if self.args_schema is None:
69
- return {}
70
- # Try to construct default_args
71
- try:
72
- default_args = {}
73
- properties = self.args_schema["properties"]
74
- for prop_name, prop_schema in properties.items():
75
- default_value = prop_schema.get("default", None)
76
- if default_value is not None:
77
- default_args[prop_name] = default_value
78
- return default_args
79
- except KeyError as e:
80
- logging.warning(
81
- "Cannot set default_args from args_schema="
82
- f"{json.dumps(self.args_schema)}\n"
83
- f"Original KeyError: {str(e)}"
84
- )
85
- return {}
@@ -1,133 +0,0 @@
1
- from datetime import datetime
2
- from typing import Any
3
- from typing import Optional
4
- from typing import Union
5
-
6
- from pydantic import validator
7
- from sqlalchemy import Column
8
- from sqlalchemy.ext.orderinglist import ordering_list
9
- from sqlalchemy.types import DateTime
10
- from sqlalchemy.types import JSON
11
- from sqlmodel import Field
12
- from sqlmodel import Relationship
13
- from sqlmodel import SQLModel
14
-
15
- from ....utils import get_timestamp
16
- from ...schemas.v1.workflow import _WorkflowBaseV1
17
- from ...schemas.v1.workflow import _WorkflowTaskBaseV1
18
- from .task import Task
19
-
20
-
21
- class WorkflowTask(_WorkflowTaskBaseV1, SQLModel, table=True):
22
- """
23
- A Task as part of a Workflow
24
-
25
- This is a crossing table between Task and Workflow. In addition to the
26
- foreign keys, it allows for parameter overriding and keeps the order
27
- within the list of tasks of the workflow.
28
-
29
-
30
- Attributes:
31
- id:
32
- Primary key
33
- workflow_id:
34
- ID of the `Workflow` the `WorkflowTask` belongs to
35
- task_id:
36
- ID of the task corresponding to the `WorkflowTask`
37
- order:
38
- Positional order of the `WorkflowTask` in `Workflow.task_list`
39
- meta:
40
- Additional parameters useful for execution
41
- args:
42
- Task arguments
43
- task:
44
- `Task` object associated with the current `WorkflowTask`
45
-
46
- """
47
-
48
- class Config:
49
- arbitrary_types_allowed = True
50
- fields = {"parent": {"exclude": True}}
51
-
52
- id: Optional[int] = Field(default=None, primary_key=True)
53
-
54
- workflow_id: int = Field(foreign_key="workflow.id")
55
- task_id: int = Field(foreign_key="task.id")
56
- order: Optional[int]
57
- meta: Optional[dict[str, Any]] = Field(sa_column=Column(JSON))
58
- args: Optional[dict[str, Any]] = Field(sa_column=Column(JSON))
59
- task: Task = Relationship(sa_relationship_kwargs=dict(lazy="selectin"))
60
-
61
- @validator("args")
62
- def validate_args(cls, value: dict = None):
63
- """
64
- Prevent fractal task reserved parameter names from entering args
65
-
66
- Forbidden argument names are `input_paths`, `output_path`, `metadata`,
67
- `component`.
68
- """
69
- if value is None:
70
- return
71
- forbidden_args_keys = {
72
- "input_paths",
73
- "output_path",
74
- "metadata",
75
- "component",
76
- }
77
- args_keys = set(value.keys())
78
- intersect_keys = forbidden_args_keys.intersection(args_keys)
79
- if intersect_keys:
80
- raise ValueError(
81
- "`args` contains the following forbidden keys: "
82
- f"{intersect_keys}"
83
- )
84
- return value
85
-
86
- @property
87
- def is_parallel(self) -> bool:
88
- return self.task.is_parallel
89
-
90
- @property
91
- def parallelization_level(self) -> Union[str, None]:
92
- return self.task.parallelization_level
93
-
94
-
95
- class Workflow(_WorkflowBaseV1, SQLModel, table=True):
96
- """
97
- Workflow
98
-
99
- Attributes:
100
- id:
101
- Primary key
102
- project_id:
103
- ID of the project the workflow belongs to.
104
- task_list:
105
- List of associations to tasks.
106
- """
107
-
108
- id: Optional[int] = Field(default=None, primary_key=True)
109
- project_id: int = Field(foreign_key="project.id")
110
- project: "Project" = Relationship( # noqa: F821
111
- sa_relationship_kwargs=dict(lazy="selectin"),
112
- )
113
-
114
- task_list: list[WorkflowTask] = Relationship(
115
- sa_relationship_kwargs=dict(
116
- lazy="selectin",
117
- order_by="WorkflowTask.order",
118
- collection_class=ordering_list("order"),
119
- cascade="all, delete-orphan",
120
- ),
121
- )
122
- timestamp_created: datetime = Field(
123
- default_factory=get_timestamp,
124
- sa_column=Column(DateTime(timezone=True), nullable=False),
125
- )
126
-
127
- @property
128
- def input_type(self):
129
- return self.task_list[0].task.input_type
130
-
131
- @property
132
- def output_type(self):
133
- return self.task_list[-1].task.output_type