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.
- fractal_server/__init__.py +1 -1
- fractal_server/app/models/__init__.py +0 -2
- fractal_server/app/models/linkuserproject.py +0 -9
- fractal_server/app/models/v2/dataset.py +0 -4
- fractal_server/app/models/v2/workflowtask.py +0 -4
- fractal_server/app/routes/aux/_job.py +1 -3
- fractal_server/app/runner/executors/slurm/ssh/executor.py +9 -6
- fractal_server/app/runner/executors/slurm/sudo/executor.py +1 -5
- fractal_server/app/runner/filenames.py +0 -2
- fractal_server/app/runner/shutdown.py +3 -27
- fractal_server/app/schemas/_validators.py +0 -19
- fractal_server/config.py +1 -15
- fractal_server/main.py +1 -12
- fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +67 -0
- fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +54 -0
- fractal_server/string_tools.py +0 -21
- fractal_server/tasks/utils.py +0 -28
- {fractal_server-2.11.0a10.dist-info → fractal_server-2.12.0.dist-info}/METADATA +1 -1
- {fractal_server-2.11.0a10.dist-info → fractal_server-2.12.0.dist-info}/RECORD +22 -66
- fractal_server/app/models/v1/__init__.py +0 -13
- fractal_server/app/models/v1/dataset.py +0 -71
- fractal_server/app/models/v1/job.py +0 -101
- fractal_server/app/models/v1/project.py +0 -29
- fractal_server/app/models/v1/state.py +0 -34
- fractal_server/app/models/v1/task.py +0 -85
- fractal_server/app/models/v1/workflow.py +0 -133
- fractal_server/app/routes/admin/v1.py +0 -377
- fractal_server/app/routes/api/v1/__init__.py +0 -26
- fractal_server/app/routes/api/v1/_aux_functions.py +0 -478
- fractal_server/app/routes/api/v1/dataset.py +0 -554
- fractal_server/app/routes/api/v1/job.py +0 -195
- fractal_server/app/routes/api/v1/project.py +0 -475
- fractal_server/app/routes/api/v1/task.py +0 -203
- fractal_server/app/routes/api/v1/task_collection.py +0 -239
- fractal_server/app/routes/api/v1/workflow.py +0 -355
- fractal_server/app/routes/api/v1/workflowtask.py +0 -187
- fractal_server/app/runner/async_wrap_v1.py +0 -27
- fractal_server/app/runner/v1/__init__.py +0 -415
- fractal_server/app/runner/v1/_common.py +0 -620
- fractal_server/app/runner/v1/_local/__init__.py +0 -186
- fractal_server/app/runner/v1/_local/_local_config.py +0 -105
- fractal_server/app/runner/v1/_local/_submit_setup.py +0 -48
- fractal_server/app/runner/v1/_local/executor.py +0 -100
- fractal_server/app/runner/v1/_slurm/__init__.py +0 -312
- fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -81
- fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -163
- fractal_server/app/runner/v1/common.py +0 -117
- fractal_server/app/runner/v1/handle_failed_job.py +0 -141
- fractal_server/app/schemas/v1/__init__.py +0 -37
- fractal_server/app/schemas/v1/applyworkflow.py +0 -161
- fractal_server/app/schemas/v1/dataset.py +0 -165
- fractal_server/app/schemas/v1/dumps.py +0 -64
- fractal_server/app/schemas/v1/manifest.py +0 -126
- fractal_server/app/schemas/v1/project.py +0 -66
- fractal_server/app/schemas/v1/state.py +0 -18
- fractal_server/app/schemas/v1/task.py +0 -167
- fractal_server/app/schemas/v1/task_collection.py +0 -110
- fractal_server/app/schemas/v1/workflow.py +0 -212
- fractal_server/data_migrations/2_11_0.py +0 -168
- fractal_server/tasks/v1/_TaskCollectPip.py +0 -103
- fractal_server/tasks/v1/__init__.py +0 -0
- fractal_server/tasks/v1/background_operations.py +0 -352
- fractal_server/tasks/v1/endpoint_operations.py +0 -156
- fractal_server/tasks/v1/get_collection_data.py +0 -14
- fractal_server/tasks/v1/utils.py +0 -67
- {fractal_server-2.11.0a10.dist-info → fractal_server-2.12.0.dist-info}/LICENSE +0 -0
- {fractal_server-2.11.0a10.dist-info → fractal_server-2.12.0.dist-info}/WHEEL +0 -0
- {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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
245
|
-
fractal_server-2.
|
246
|
-
fractal_server-2.
|
247
|
-
fractal_server-2.
|
248
|
-
fractal_server-2.
|
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
|