fractal-server 2.11.0a6__py3-none-any.whl → 2.11.0a8__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.
@@ -1 +1 @@
1
- __VERSION__ = "2.11.0a6"
1
+ __VERSION__ = "2.11.0a8"
@@ -7,12 +7,15 @@ from sqlmodel import select
7
7
  from fractal_server.app.db import get_sync_db
8
8
  from fractal_server.app.models import DatasetV2
9
9
  from fractal_server.app.models import JobV2
10
+ from fractal_server.app.models import ProjectV2
10
11
  from fractal_server.app.models import WorkflowTaskV2
12
+ from fractal_server.app.models import WorkflowV2
11
13
  from fractal_server.app.schemas.v2 import DatasetReadV2
12
14
  from fractal_server.app.schemas.v2 import JobReadV2
13
15
  from fractal_server.app.schemas.v2 import ProjectReadV2
14
16
  from fractal_server.app.schemas.v2 import TaskReadV2
15
17
  from fractal_server.app.schemas.v2 import WorkflowTaskReadV2
18
+ from fractal_server.images.models import AttributeFiltersType
16
19
 
17
20
  logger = logging.getLogger("fix_db")
18
21
  logger.setLevel(logging.INFO)
@@ -21,23 +24,25 @@ logger.setLevel(logging.INFO)
21
24
  def dict_values_to_list(
22
25
  input_dict: dict[str, Union[int, float, bool, str, None]],
23
26
  identifier: str,
24
- ) -> dict[str, list[Union[int, float, bool, str]]]:
27
+ ) -> tuple[AttributeFiltersType, bool]:
28
+ was_there_a_warning = False
25
29
  for k, v in input_dict.items():
26
30
  if not isinstance(v, (int, float, bool, str, type(None))):
27
31
  error_msg = (
28
32
  f"Attribute '{k}' from '{identifier}' "
29
- f"has invalid type '{type(v)}'."
33
+ "has invalid type '{type(v)}'."
30
34
  )
31
35
  logger.error(error_msg)
32
36
  raise RuntimeError(error_msg)
33
37
  elif v is None:
34
38
  logger.warning(
35
- f"Attribute '{k}' from '{identifier}' is None and it "
36
- "will be removed."
39
+ f"Attribute '{k}' from '{identifier}' is "
40
+ "None and it will be removed."
37
41
  )
42
+ was_there_a_warning = True
38
43
  else:
39
44
  input_dict[k] = [v]
40
- return input_dict
45
+ return input_dict, was_there_a_warning
41
46
 
42
47
 
43
48
  def fix_db():
@@ -45,15 +50,28 @@ def fix_db():
45
50
 
46
51
  with next(get_sync_db()) as db:
47
52
  # DatasetV2.filters
48
- # DatasetV2.history[].workflowtask.input_filters
49
53
  stm = select(DatasetV2).order_by(DatasetV2.id)
50
54
  datasets = db.execute(stm).scalars().all()
51
55
  for ds in datasets:
52
56
  logger.info(f"DatasetV2[{ds.id}] START")
53
- ds.attribute_filters = dict_values_to_list(
57
+ if ds.filters is None:
58
+ logger.info(f"DatasetV2[{ds.id}] SKIP")
59
+ continue
60
+
61
+ ds.attribute_filters, warning = dict_values_to_list(
54
62
  ds.filters["attributes"],
55
63
  f"Dataset[{ds.id}].filters.attributes",
56
64
  )
65
+ if warning:
66
+ proj = db.get(ProjectV2, ds.project_id)
67
+ logger.warning(
68
+ "Additional information: "
69
+ f"{proj.id=}, "
70
+ f"{proj.name=}, "
71
+ f"{proj.user_list[0].email=}, "
72
+ f"{ds.id=}, "
73
+ f"{ds.name=}"
74
+ )
57
75
  ds.type_filters = ds.filters["types"]
58
76
  ds.filters = None
59
77
  for i, h in enumerate(ds.history):
@@ -75,12 +93,26 @@ def fix_db():
75
93
  wftasks = db.execute(stm).scalars().all()
76
94
  for wft in wftasks:
77
95
  logger.info(f"WorkflowTaskV2[{wft.id}] START")
96
+ if wft.input_filters is None:
97
+ logger.info(f"WorkflowTaskV2[{wft.id}] SKIP")
98
+ continue
78
99
  wft.type_filters = wft.input_filters["types"]
79
100
  if wft.input_filters["attributes"]:
80
101
  logger.warning(
81
102
  "Removing input_filters['attributes']. "
82
103
  f"(previous value: {wft.input_filters['attributes']})"
83
104
  )
105
+ wf = db.get(WorkflowV2, wft.workflow_id)
106
+ proj = db.get(ProjectV2, wf.project_id)
107
+ logger.warning(
108
+ "Additional information: "
109
+ f"{proj.id=}, "
110
+ f"{proj.name=}, "
111
+ f"{proj.user_list[0].email=}, "
112
+ f"{wf.id=}, "
113
+ f"{wf.name=}, "
114
+ f"{wft.task.name=}"
115
+ )
84
116
  wft.input_filters = None
85
117
  flag_modified(wft, "input_filters")
86
118
  WorkflowTaskReadV2(
@@ -97,13 +129,34 @@ def fix_db():
97
129
  jobs = db.execute(stm).scalars().all()
98
130
  for job in jobs:
99
131
  logger.info(f"JobV2[{job.id}] START")
132
+ if "filters" not in job.dataset_dump.keys():
133
+ logger.info(f"JobV2[{job.id}] SKIP")
134
+ continue
100
135
  job.dataset_dump["type_filters"] = job.dataset_dump["filters"][
101
136
  "types"
102
137
  ]
103
- job.dataset_dump["attribute_filters"] = dict_values_to_list(
138
+ (
139
+ job.dataset_dump["attribute_filters"],
140
+ warning,
141
+ ) = dict_values_to_list(
104
142
  job.dataset_dump["filters"]["attributes"],
105
143
  f"JobV2[{job.id}].dataset_dump.filters.attributes",
106
144
  )
145
+ if warning and job.project_id is not None:
146
+ proj = db.get(ProjectV2, job.project_id)
147
+ logger.warning(
148
+ "Additional information: "
149
+ f"{proj.id=}, "
150
+ f"{proj.name=}, "
151
+ f"{proj.user_list[0].email=}, "
152
+ f"{job.id=}, "
153
+ f"{job.start_timestamp=}, "
154
+ f"{job.end_timestamp=}, "
155
+ f"{job.dataset_id=}, "
156
+ f"{job.workflow_id=}."
157
+ )
158
+ # FIXME
159
+ pass
107
160
  job.dataset_dump.pop("filters")
108
161
  flag_modified(job, "dataset_dump")
109
162
  JobReadV2(**job.model_dump())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fractal-server
3
- Version: 2.11.0a6
3
+ Version: 2.11.0a8
4
4
  Summary: Backend component of the Fractal analytics platform
5
5
  Home-page: https://github.com/fractal-analytics-platform/fractal-server
6
6
  License: BSD-3-Clause
@@ -1,4 +1,4 @@
1
- fractal_server/__init__.py,sha256=aC0yx2HX8xIU9XVrkikksq9g-IXOskfofOk8lZZtKNc,25
1
+ fractal_server/__init__.py,sha256=PK0Z9wSB6mEcd2plsxYsMzHGyRVuGKRbnXG9QlxmJrI,25
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
@@ -165,7 +165,7 @@ fractal_server/app/security/__init__.py,sha256=qn6idYgl-p5HWea0gTVnz4JnkoxGEkmQj
165
165
  fractal_server/app/security/signup_email.py,sha256=DrL51UdTSrgjleynMD5CRZwTSOpPrZ96fasRV0fvxDE,1165
166
166
  fractal_server/app/user_settings.py,sha256=OP1yiYKtPadxwM51_Q0hdPk3z90TCN4z1BLpQsXyWiU,1316
167
167
  fractal_server/config.py,sha256=9rAzw7OO6ZeHEz-I8NJHuGoHf4xCHxfFLyRNZQD9ytY,27019
168
- fractal_server/data_migrations/2_11_0.py,sha256=hkOZsvTWi30TqpSsAWuPyL4XxEJlqLwAv02PkVIk4Rw,4337
168
+ fractal_server/data_migrations/2_11_0.py,sha256=yE4yPed6JtBHSs3GHcv0Bj4Zwhe5O9RtMGA6AC7OVwE,6378
169
169
  fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
170
170
  fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
171
171
  fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
@@ -241,8 +241,8 @@ fractal_server/tasks/v2/utils_templates.py,sha256=07TZpJ0Mh_A4lXVXrrH2o1VLFFGwxe
241
241
  fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
242
242
  fractal_server/utils.py,sha256=PMwrxWFxRTQRl1b9h-NRIbFGPKqpH_hXnkAT3NfZdpY,3571
243
243
  fractal_server/zip_tools.py,sha256=GjDgo_sf6V_DDg6wWeBlZu5zypIxycn_l257p_YVKGc,4876
244
- fractal_server-2.11.0a6.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
245
- fractal_server-2.11.0a6.dist-info/METADATA,sha256=jtJXV-kHK3rf-ha0pEYyhIzwCRKox9fHBQ38M1xti38,4564
246
- fractal_server-2.11.0a6.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
247
- fractal_server-2.11.0a6.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
248
- fractal_server-2.11.0a6.dist-info/RECORD,,
244
+ fractal_server-2.11.0a8.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
245
+ fractal_server-2.11.0a8.dist-info/METADATA,sha256=uWN7MBiLx7IeFtpLKQUFe4hx4bFUHo_KwgYkIXMpE5Q,4564
246
+ fractal_server-2.11.0a8.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
247
+ fractal_server-2.11.0a8.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
248
+ fractal_server-2.11.0a8.dist-info/RECORD,,