cornflow 1.2.1__py3-none-any.whl → 1.2.3__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 (52) hide show
  1. cornflow/app.py +4 -2
  2. cornflow/cli/__init__.py +4 -0
  3. cornflow/cli/actions.py +4 -0
  4. cornflow/cli/config.py +4 -0
  5. cornflow/cli/migrations.py +13 -8
  6. cornflow/cli/permissions.py +4 -0
  7. cornflow/cli/roles.py +5 -1
  8. cornflow/cli/schemas.py +5 -0
  9. cornflow/cli/service.py +263 -131
  10. cornflow/cli/tools/api_generator.py +13 -10
  11. cornflow/cli/tools/endpoint_tools.py +191 -196
  12. cornflow/cli/tools/models_tools.py +87 -60
  13. cornflow/cli/tools/schema_generator.py +161 -67
  14. cornflow/cli/tools/schemas_tools.py +4 -5
  15. cornflow/cli/users.py +8 -0
  16. cornflow/cli/views.py +4 -0
  17. cornflow/commands/access.py +14 -3
  18. cornflow/commands/auxiliar.py +106 -0
  19. cornflow/commands/dag.py +3 -2
  20. cornflow/commands/permissions.py +186 -81
  21. cornflow/commands/roles.py +15 -14
  22. cornflow/commands/schemas.py +6 -4
  23. cornflow/commands/users.py +12 -17
  24. cornflow/commands/views.py +171 -41
  25. cornflow/endpoints/dag.py +27 -25
  26. cornflow/endpoints/data_check.py +128 -165
  27. cornflow/endpoints/example_data.py +9 -3
  28. cornflow/endpoints/execution.py +40 -34
  29. cornflow/endpoints/health.py +7 -7
  30. cornflow/endpoints/instance.py +39 -12
  31. cornflow/endpoints/meta_resource.py +4 -5
  32. cornflow/schemas/execution.py +9 -1
  33. cornflow/schemas/health.py +1 -0
  34. cornflow/shared/authentication/auth.py +76 -45
  35. cornflow/shared/const.py +10 -1
  36. cornflow/shared/exceptions.py +3 -1
  37. cornflow/shared/utils_tables.py +36 -8
  38. cornflow/shared/validators.py +1 -1
  39. cornflow/tests/const.py +1 -0
  40. cornflow/tests/custom_test_case.py +4 -4
  41. cornflow/tests/unit/test_alarms.py +1 -2
  42. cornflow/tests/unit/test_cases.py +4 -7
  43. cornflow/tests/unit/test_executions.py +22 -1
  44. cornflow/tests/unit/test_external_role_creation.py +785 -0
  45. cornflow/tests/unit/test_health.py +4 -1
  46. cornflow/tests/unit/test_log_in.py +46 -9
  47. cornflow/tests/unit/test_tables.py +3 -3
  48. {cornflow-1.2.1.dist-info → cornflow-1.2.3.dist-info}/METADATA +2 -2
  49. {cornflow-1.2.1.dist-info → cornflow-1.2.3.dist-info}/RECORD +52 -50
  50. {cornflow-1.2.1.dist-info → cornflow-1.2.3.dist-info}/WHEEL +1 -1
  51. {cornflow-1.2.1.dist-info → cornflow-1.2.3.dist-info}/entry_points.txt +0 -0
  52. {cornflow-1.2.1.dist-info → cornflow-1.2.3.dist-info}/top_level.txt +0 -0
@@ -4,7 +4,7 @@ from cornflow.shared import db
4
4
 
5
5
  from cornflow.app import create_app
6
6
  from cornflow.commands import access_init_command
7
- from cornflow.shared.const import STATUS_HEALTHY
7
+ from cornflow.shared.const import STATUS_HEALTHY, CORNFLOW_VERSION
8
8
  from cornflow.tests.const import HEALTH_URL
9
9
  from cornflow.tests.custom_test_case import CustomTestCase
10
10
 
@@ -29,6 +29,9 @@ class TestHealth(CustomTestCase):
29
29
  self.assertEqual(200, response.status_code)
30
30
  cf_status = response.json["cornflow_status"]
31
31
  af_status = response.json["airflow_status"]
32
+ cf_version = response.json["cornflow_version"]
33
+ expected_version = CORNFLOW_VERSION
32
34
  self.assertEqual(str, type(cf_status))
33
35
  self.assertEqual(str, type(af_status))
34
36
  self.assertEqual(cf_status, STATUS_HEALTHY)
37
+ self.assertEqual(cf_version, expected_version)
@@ -135,11 +135,20 @@ class TestLogInOpenAuth(CustomTestCase):
135
135
  Tests token validation failure when the kid is not found in public keys
136
136
  """
137
137
  # Import the real exceptions to ensure they are preserved
138
- from jwt.exceptions import InvalidTokenError, ExpiredSignatureError
138
+ from jwt.exceptions import (
139
+ InvalidTokenError,
140
+ ExpiredSignatureError,
141
+ InvalidIssuerError,
142
+ InvalidSignatureError,
143
+ DecodeError,
144
+ )
139
145
 
140
146
  # Keep the real exception classes in the mock
141
147
  mock_jwt.ExpiredSignatureError = ExpiredSignatureError
142
148
  mock_jwt.InvalidTokenError = InvalidTokenError
149
+ mock_jwt.InvalidIssuerError = InvalidIssuerError
150
+ mock_jwt.InvalidSignatureError = InvalidSignatureError
151
+ mock_jwt.DecodeError = DecodeError
143
152
 
144
153
  mock_jwt.get_unverified_header.return_value = {"kid": "test_kid"}
145
154
 
@@ -165,7 +174,7 @@ class TestLogInOpenAuth(CustomTestCase):
165
174
 
166
175
  self.assertEqual(400, response.status_code)
167
176
  self.assertEqual(
168
- response.json["error"], "Invalid token: Unknown key identifier (kid)"
177
+ response.json["error"], "Invalid token format, signature, or configuration"
169
178
  )
170
179
 
171
180
  @mock.patch("cornflow.shared.authentication.auth.jwt")
@@ -174,11 +183,20 @@ class TestLogInOpenAuth(CustomTestCase):
174
183
  Tests token validation failure when the token header is missing the kid
175
184
  """
176
185
  # Import the real exceptions to ensure they are preserved
177
- from jwt.exceptions import InvalidTokenError, ExpiredSignatureError
186
+ from jwt.exceptions import (
187
+ InvalidTokenError,
188
+ ExpiredSignatureError,
189
+ InvalidIssuerError,
190
+ InvalidSignatureError,
191
+ DecodeError,
192
+ )
178
193
 
179
194
  # Keep the real exception classes in the mock
180
195
  mock_jwt.ExpiredSignatureError = ExpiredSignatureError
181
196
  mock_jwt.InvalidTokenError = InvalidTokenError
197
+ mock_jwt.InvalidIssuerError = InvalidIssuerError
198
+ mock_jwt.InvalidSignatureError = InvalidSignatureError
199
+ mock_jwt.DecodeError = DecodeError
182
200
 
183
201
  # Mock jwt.get_unverified_header to return a header without kid
184
202
  mock_jwt.get_unverified_header.return_value = {"alg": "RS256"}
@@ -194,8 +212,7 @@ class TestLogInOpenAuth(CustomTestCase):
194
212
 
195
213
  self.assertEqual(400, response.status_code)
196
214
  self.assertEqual(
197
- response.json["error"],
198
- "Invalid token: Missing key identifier (kid) in token header",
215
+ "Invalid token format, signature, or configuration", response.json["error"]
199
216
  )
200
217
 
201
218
  @mock.patch("cornflow.shared.authentication.auth.requests.get")
@@ -205,11 +222,20 @@ class TestLogInOpenAuth(CustomTestCase):
205
222
  Tests failure when trying to fetch public keys from the OIDC provider
206
223
  """
207
224
  # Import the real exceptions to ensure they are preserved
208
- from jwt.exceptions import InvalidTokenError, ExpiredSignatureError
225
+ from jwt.exceptions import (
226
+ InvalidTokenError,
227
+ ExpiredSignatureError,
228
+ InvalidIssuerError,
229
+ InvalidSignatureError,
230
+ DecodeError,
231
+ )
209
232
 
210
233
  # Keep the real exception classes in the mock
211
234
  mock_jwt.ExpiredSignatureError = ExpiredSignatureError
212
235
  mock_jwt.InvalidTokenError = InvalidTokenError
236
+ mock_jwt.InvalidIssuerError = InvalidIssuerError
237
+ mock_jwt.InvalidSignatureError = InvalidSignatureError
238
+ mock_jwt.DecodeError = DecodeError
213
239
 
214
240
  # Clear the cache
215
241
  from cornflow.shared.authentication.auth import public_keys_cache
@@ -240,8 +266,8 @@ class TestLogInOpenAuth(CustomTestCase):
240
266
 
241
267
  self.assertEqual(400, response.status_code)
242
268
  self.assertEqual(
269
+ "Invalid token format, signature, or configuration",
243
270
  response.json["error"],
244
- "Failed to fetch public keys from authentication provider",
245
271
  )
246
272
 
247
273
  @mock.patch("cornflow.shared.authentication.Auth.decode_token")
@@ -289,11 +315,20 @@ class TestLogInOpenAuth(CustomTestCase):
289
315
  the system fetches fresh keys from the provider.
290
316
  """
291
317
  # Import the real exceptions to ensure they are preserved
292
- from jwt.exceptions import InvalidTokenError, ExpiredSignatureError
318
+ from jwt.exceptions import (
319
+ InvalidTokenError,
320
+ ExpiredSignatureError,
321
+ InvalidIssuerError,
322
+ InvalidSignatureError,
323
+ DecodeError,
324
+ )
293
325
 
294
326
  # Keep the real exception classes in the mock
295
327
  mock_jwt.ExpiredSignatureError = ExpiredSignatureError
296
328
  mock_jwt.InvalidTokenError = InvalidTokenError
329
+ mock_jwt.InvalidIssuerError = InvalidIssuerError
330
+ mock_jwt.InvalidSignatureError = InvalidSignatureError
331
+ mock_jwt.DecodeError = DecodeError
297
332
 
298
333
  # Mock jwt to return valid unverified header and payload
299
334
  mock_jwt.get_unverified_header.return_value = {"kid": "test_kid"}
@@ -531,4 +566,6 @@ class TestLogInOpenAuthService(CustomTestCase):
531
566
  )
532
567
 
533
568
  self.assertEqual(400, response.status_code)
534
- self.assertEqual(response.json["error"], "Invalid token format or signature")
569
+ self.assertEqual(
570
+ response.json["error"], "Invalid token format, signature, or configuration"
571
+ )
@@ -11,7 +11,7 @@ from cornflow.app import create_app
11
11
  from cornflow.commands.access import access_init_command
12
12
  from cornflow.models import UserRoleModel
13
13
  from cornflow.shared import db
14
- from cornflow.shared.const import ADMIN_ROLE, SERVICE_ROLE
14
+ from cornflow.shared.const import ADMIN_ROLE, SERVICE_ROLE, DATA_DOES_NOT_EXIST_MSG
15
15
  from cornflow.tests.const import LOGIN_URL, SIGNUP_URL, TABLES_URL
16
16
 
17
17
 
@@ -220,7 +220,7 @@ class TestTablesDetailEndpoint(TestCase):
220
220
  },
221
221
  )
222
222
  self.assertEqual(response.status_code, 404)
223
- self.assertEqual(response.json["error"], "The object does not exist")
223
+ self.assertEqual(response.json["error"], DATA_DOES_NOT_EXIST_MSG)
224
224
 
225
225
 
226
226
  class TestTablesEndpointAdmin(TestCase):
@@ -291,4 +291,4 @@ class TestTablesEndpointAdmin(TestCase):
291
291
  self.assertEqual(response.status_code, 403)
292
292
  self.assertEqual(
293
293
  response.json["error"], "You do not have permission to access this endpoint"
294
- )
294
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cornflow
3
- Version: 1.2.1
3
+ Version: 1.2.3
4
4
  Summary: cornflow is an open source multi-solver optimization server with a REST API built using flask.
5
5
  Home-page: https://github.com/baobabsoluciones/cornflow
6
6
  Author: baobab soluciones
@@ -14,7 +14,7 @@ Requires-Dist: alembic==1.9.2
14
14
  Requires-Dist: apispec<=6.3.0
15
15
  Requires-Dist: cachetools==5.3.3
16
16
  Requires-Dist: click<=8.1.7
17
- Requires-Dist: cornflow-client>=1.2.0
17
+ Requires-Dist: cornflow-client>=1.2.3
18
18
  Requires-Dist: cryptography<=44.0.1
19
19
  Requires-Dist: disposable-email-domains>=0.0.86
20
20
  Requires-Dist: Flask==2.3.2
@@ -5,53 +5,54 @@ airflow_config/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
5
5
  airflow_config/plugins/XCom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  airflow_config/plugins/XCom/gce_xcom_backend.py,sha256=vCGvF2jbfZt5bOv-pk5Q_kUR6LomFUojIymimSJmj3o,1795
7
7
  cornflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- cornflow/app.py,sha256=-RkH3E_gfVadNOGE9V4TOcqAzTIxNh4zydwv55L5DO0,7526
8
+ cornflow/app.py,sha256=5ebZuYTfUFKVQ-lxcTeS0hATPGn3zacYdQ7jkApwmrE,7698
9
9
  cornflow/config.py,sha256=c3CNu6wzm5mDJLF6GjrnBKQSNKsRr69S2vQ9jCSAhYw,5628
10
10
  cornflow/gunicorn.py,sha256=uO-Yk7w7nvQSWh12iDxsVvlG-_2BiKIIjm2UiTk4P9E,480
11
- cornflow/cli/__init__.py,sha256=5jBmSMpaE1S9rDaQjS8VHJ6x4FfJG8MhKzMzfw7G4Zc,743
12
- cornflow/cli/actions.py,sha256=BdTFucT6gZ0QJqo96Zu0C2G9acZ578tLkktKSfTybJ8,414
11
+ cornflow/cli/__init__.py,sha256=2QfFLxLcX5zYt3Ok3QKNWQvUvAeEnLsH7xiGN3GjwFU,853
12
+ cornflow/cli/actions.py,sha256=-vm7hUrRTtJA6y0ZK2cIeTKFQi8Wl2Z6ico2px9Fiuk,524
13
13
  cornflow/cli/arguments.py,sha256=9EEyyny5cJJ1t3WAs6zMgTDvTre0JdQ2N_oZfFQmixs,657
14
- cornflow/cli/config.py,sha256=_7Y6tDo5uu4riymkzMYHnTR9IYxBG_FsjwmB84Du90U,1148
15
- cornflow/cli/migrations.py,sha256=5GuyEsquQZoPW65U7OS_rik6Xe10z16V0So0jDvVYZQ,2334
16
- cornflow/cli/permissions.py,sha256=4KXKysH4g8YYQIZcPuXFS2g0xEErp-e8I_FAqMGaV7U,1006
17
- cornflow/cli/roles.py,sha256=NFG__qrlyOT0h4L4nwo9FSV4DKjGtMVh3gwiJxwM37w,411
18
- cornflow/cli/schemas.py,sha256=sxuJOZf12SBZAXDiAYNPB-n9LSxzSwkB3xyhgS_4K9A,6086
19
- cornflow/cli/service.py,sha256=_LLGespgjf8mnaYDG7Y73TxYCSsphtr5NeFpHItXRS4,9041
20
- cornflow/cli/users.py,sha256=nPnu8rQNLtwmeXLwYtJ_hjlsa_24XOnQLgBJRBP9bJw,2104
14
+ cornflow/cli/config.py,sha256=AWWoLj3AIbKISIJ58Q89OdC_Ocjs_TPLCMF2jTEb5Sw,1258
15
+ cornflow/cli/migrations.py,sha256=nJbmulqwFxuaSPmo9hJiTl1pUSojeXfAdd9aGM_g9ic,2426
16
+ cornflow/cli/permissions.py,sha256=fyIp5M0ZpJWVf_tGZG0DN0Gnk1geruadkdKK11cmRk8,1116
17
+ cornflow/cli/roles.py,sha256=1dvAq1Bp1iEAUUfXFeL8kYjI0ZchYlDwIBQpTtwV6vs,529
18
+ cornflow/cli/schemas.py,sha256=s9IUJWa2G0kpqJaN6PcwbwZtGChTaqq451QqWEyWPBI,6197
19
+ cornflow/cli/service.py,sha256=iAV-RvKpCoUg2Nr4BqatTD6he_2THWuhQdJrUoFlqaI,13303
20
+ cornflow/cli/users.py,sha256=VBUqOrS80qdp9E4XLn4ihocHVNWVhWSt19tp0o8mZII,2324
21
21
  cornflow/cli/utils.py,sha256=p54xJEnYWda6rqSQDoZU2qZrFu9kTs4FoF0y3pJLQvI,1377
22
- cornflow/cli/views.py,sha256=Xyx2l-Sm7panxQEfR3qksCIUoqF7woMKsYgZALkxUXM,636
22
+ cornflow/cli/views.py,sha256=BjJRIQ5T3C8zl3-pVVkToVjQ6xdAGwnuT9LVEnn_jqM,746
23
23
  cornflow/cli/tools/__init__.py,sha256=JtyhYfUfirw78BV1mCsdeY0W25fDPWTmZhNBWdDh0wA,19
24
- cornflow/cli/tools/api_generator.py,sha256=7ZEEGBdL9Anbj5gnPm3m_eHQm0ehz7Y7YaD952mGh58,16344
25
- cornflow/cli/tools/endpoint_tools.py,sha256=Xnv-IQWx6szgMzyD7r3unV050S-J7CxVR5p_cMHMO30,12640
26
- cornflow/cli/tools/models_tools.py,sha256=GGqO8fmksA37jhP_xm1dMMAJRZ8_k9j-0V2J05hJAog,5398
27
- cornflow/cli/tools/schema_generator.py,sha256=3zfxQUej8BwPwmrGttjpK0R_oSnXIJQWOqoott-E78E,7557
28
- cornflow/cli/tools/schemas_tools.py,sha256=56VQfsUC6b1Hm5Ran1X6X4QF4HfTxrcOjWlGUCL7BAw,2245
24
+ cornflow/cli/tools/api_generator.py,sha256=rUafgcpZttjkBkiOv4wwY6JVixo426O18S9VDiWJJZc,16329
25
+ cornflow/cli/tools/endpoint_tools.py,sha256=xGWaR-o67ZECZhWUcVhNjdjRLjyWfo5_Yt9FcnrXEGc,11610
26
+ cornflow/cli/tools/models_tools.py,sha256=ZutiYbv8g_rA38Du3IodpSIDIrGZCl2g_nlqamUYtY0,6041
27
+ cornflow/cli/tools/schema_generator.py,sha256=BQxfB4RvA010BjrXZ4D33AvWU9e7jfZ_m2A-KRupgyg,11219
28
+ cornflow/cli/tools/schemas_tools.py,sha256=cTAM4_-0uu7dNlv95Oo2edM5qWEnfNKzIt_EhP6qx4c,2232
29
29
  cornflow/cli/tools/tools.py,sha256=Qm0X-wHN12vXYJNRHONGjqDZewwXyXy4R_j4UT_XMLs,929
30
30
  cornflow/commands/__init__.py,sha256=_7mi2Sd8bnaSujU-L78z8Zrswz68NJ2xoocYpsEYmPM,544
31
- cornflow/commands/access.py,sha256=NTZJFF9la8TDuMcD_ISQtJTj-wtM2p1dddokQJHtkj0,748
31
+ cornflow/commands/access.py,sha256=4as74PKwcq5VoPnT9Hh2uUEDQLOQo6jAelwmeBIPW3c,1013
32
32
  cornflow/commands/actions.py,sha256=4AwgAmyI6VeaugkISvTlNGrIzMMU_-ZB3MhwDD_CIEA,1544
33
+ cornflow/commands/auxiliar.py,sha256=r73V9Mo43ZvkgTuiz8Hxbx-O9Sfc45vOagdIrmSABjw,3683
33
34
  cornflow/commands/cleanup.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- cornflow/commands/dag.py,sha256=KwCQwx9yvmjTG_fOsYKuZJluEYjvLOq014657eu7sPA,3715
35
- cornflow/commands/permissions.py,sha256=mDPqiY2r2YXlUg4wmZRoI4GAMVFC6AjNT3kqzPEKUw8,6627
36
- cornflow/commands/roles.py,sha256=Oux-UkswkQ74zqaMEJYIEsZpQZGBcGaSahVzx9feAHU,1516
37
- cornflow/commands/schemas.py,sha256=QjLXLw5So3f8ZqTg5_uvXxwpo4vE0dMT4_gFMKZHGvQ,1828
38
- cornflow/commands/users.py,sha256=MEfqMm2ujso0NQgdUm-crOet-G0M43GNqVCx2Ls-2HY,2591
39
- cornflow/commands/views.py,sha256=K2Ld1-l1ZKn9m6e2W1LCxmN44QokwR-8u8rIrviiEf8,2276
35
+ cornflow/commands/dag.py,sha256=AtagFGnB_ucfO0qUawDgd4iRoBCVc-RiOs08DqXSwXM,3786
36
+ cornflow/commands/permissions.py,sha256=5TgKvDotRYciVfN_XKZWFOV5e1rWiztaauVOZdFM-3A,10507
37
+ cornflow/commands/roles.py,sha256=MHMn-nNSgvRww5RNblxXvdG9BBCtMvPtc-KD5EMwseg,1605
38
+ cornflow/commands/schemas.py,sha256=40dZSJ2nEqBa7Crb6DbFmnclT5e8ljAIjscOgHr9lhk,1970
39
+ cornflow/commands/users.py,sha256=2YTbNYY5kZL6ujxGP4fyYgqtv5uuVGdkLR31n7OFFaE,2477
40
+ cornflow/commands/views.py,sha256=yg3vuKoJwusBWm0v9PCGYr1xAbL-dWAi4aDV0aGpMnA,6978
40
41
  cornflow/endpoints/__init__.py,sha256=ZlwhY8MiynQ0BdATkrsikGM2Kqo4DPxkVTc3faNfzRY,7492
41
42
  cornflow/endpoints/action.py,sha256=ksHK3F919cjkONLcFV2tUIbG-eZw5XbYkqVjYx9iq5I,1359
42
43
  cornflow/endpoints/alarms.py,sha256=M-fpRAm5ZgYyZXvcgS0NHkeMGnvcbfQh2O5qQJUaeoM,4372
43
44
  cornflow/endpoints/apiview.py,sha256=cpxZFkWy6yrRHiAq2tseyVAK1r8uvjnFuOgJjGT0rKI,1370
44
45
  cornflow/endpoints/case.py,sha256=80Fpv9p8mwIXzjQFuyq1PnPTz3RaOUk932sCUfw7yGA,18670
45
- cornflow/endpoints/dag.py,sha256=MRthA2pnZCAFfoPbHCLDW2j1BsQ3WdjRGC17Szl4b28,10390
46
- cornflow/endpoints/data_check.py,sha256=ZyYR84IT9snjXxUrQfrlv_RzOec_AYeTsijuHYdLAcA,16496
47
- cornflow/endpoints/example_data.py,sha256=1_qAtZfp51N9sU8WCFDZCXOQiOlxCKJjWbXxDOFZ0C8,4372
48
- cornflow/endpoints/execution.py,sha256=5SWwgbxBUj_gDU6Yb7Z-iKNakr9vr3g5qU82Bw9y5wQ,27998
49
- cornflow/endpoints/health.py,sha256=TWmWjKdQOoDzpqwcfksuaAGOLIb2idxzPQcGMWrdkCY,1610
50
- cornflow/endpoints/instance.py,sha256=WAnloocXFxSW4vunBJo3CIHx4NzC_0GPJh5bj3ETd9U,11615
46
+ cornflow/endpoints/dag.py,sha256=fWDLfo42mtARZBzXqDrK5JMiIOyrEkYGh4GzKYJLGWk,10087
47
+ cornflow/endpoints/data_check.py,sha256=6G2XIoyYn0Xh5Fx6rQIgrtiv6M6_xpxHcdVTNi-n4ug,13532
48
+ cornflow/endpoints/example_data.py,sha256=DiZ7gSilX8XqgJVm4RN5Xto6fWCaMMx12kenfw8pJD0,4427
49
+ cornflow/endpoints/execution.py,sha256=MjiAan8vLcuWh6l4BO1l9rB_uDbEd4EwowN8XFR7z70,27890
50
+ cornflow/endpoints/health.py,sha256=l7Xoh5GiqOJv1CiSKkFikUGnNP1NRAD-2xHzeg3Qyjo,1708
51
+ cornflow/endpoints/instance.py,sha256=KRWXmh5FaCPe-xalbl7fTlb1WUNrEMLSCpK791Dg1eM,12740
51
52
  cornflow/endpoints/licenses.py,sha256=82hHWGYvVIiyw9mlwGtMwJMDJ-ShHOi9rvuM6KvfE4U,873
52
53
  cornflow/endpoints/login.py,sha256=ini7w9kFNoVw981UOvlFIaf45rsnpx6nKFnKrM2uDpo,10698
53
54
  cornflow/endpoints/main_alarms.py,sha256=GUB-UdnvEFi7n6FGFKO9VtZeZb4Ox3NvBMhB7rdqNyI,2006
54
- cornflow/endpoints/meta_resource.py,sha256=XXiNKOs1riFUagy-oj9nOnHo_wqp8atwF3Y5aUzQWCA,8796
55
+ cornflow/endpoints/meta_resource.py,sha256=hqzOgmYFAzGsXVo0BIb5rjS71uNKVMuyLi-QkAQnb34,8639
55
56
  cornflow/endpoints/permission.py,sha256=FpEBIucfUl89UaJ80SC0VR6pFAdqdSsS43SdNkcXWtI,3751
56
57
  cornflow/endpoints/roles.py,sha256=54ra4MQ9JmrHDsiGczDAVqHgAT4zwhdTA1dLBOy66v8,6105
57
58
  cornflow/endpoints/schemas.py,sha256=lHyvSpPj0x7zVYDlEeRrz_Qqyp6WNimibs5gK4BHpKI,2933
@@ -102,8 +103,8 @@ cornflow/schemas/case.py,sha256=OXRsDi_sdB47MQJ59S_1eMjDmLlpUtG7kTFNInV2-cI,2909
102
103
  cornflow/schemas/common.py,sha256=QYuxWcOl4smXFZr_vL07OVgH9H50ZywCrXxycVNr1qA,473
103
104
  cornflow/schemas/dag.py,sha256=0ENA75X9L8YqjJW6ZO1Sb4zE8OxB15_O49_nwA6eAVw,901
104
105
  cornflow/schemas/example_data.py,sha256=hbE8TJakFqOweHXiA3mduNETM6FCX6xLTiQuH3EkSTc,281
105
- cornflow/schemas/execution.py,sha256=GSRHzikVPlhxMdiKrGnTuGfen8_Lf4wSfheJwvcavTs,4718
106
- cornflow/schemas/health.py,sha256=D2NsP9i6nA1hLema-bvegrrdH4JY7pZlYxPcqRJOvao,141
106
+ cornflow/schemas/execution.py,sha256=Qb2is-EfFDG-S4_9i-37-M6jPO6Et4bLqNm5z9byNOw,4939
107
+ cornflow/schemas/health.py,sha256=OpK94HNZomv4as_9cM6vBT9eCkn6NY9RmWswXg2qKcA,177
107
108
  cornflow/schemas/instance.py,sha256=qr4km0AlAhoNf9G1Il-pfHphT_vAiiLDpv7A9S3FKAw,1870
108
109
  cornflow/schemas/main_alarms.py,sha256=cC1_Vb1dmo_vdZpZQrA7jH-hRCjVtLRy6Z2JFBlTrlo,604
109
110
  cornflow/schemas/model_json.py,sha256=qUsdd1XmxhcsAmb1JB0xAsvucZoAeQhAQD_3wiY-rVo,202
@@ -119,23 +120,23 @@ cornflow/schemas/user_role.py,sha256=e5y6RgdZZtLqD-h2B3sa5WokI5-pT78tWw85IG34I74
119
120
  cornflow/schemas/view.py,sha256=ctq9Y1TmjrWdyOqgDYeEx7qbbuNLKfSiNOlFTlXmpaw,429
120
121
  cornflow/shared/__init__.py,sha256=1ahcBwWOsSjGI4FEm77JBQjitBdBszOncKcEMjzwGYE,29
121
122
  cornflow/shared/compress.py,sha256=pohQaGs1xbH8CN6URIH6BAHA--pFq7Hmjz8oI3c3B5c,1347
122
- cornflow/shared/const.py,sha256=ve66GYTgHppnO-oZu0LQpJq-ZjC6xAAJLVgE91Z7jiA,3147
123
+ cornflow/shared/const.py,sha256=wv8gIwCBhO3qHOSBXzpbWaUaca7CB5XDb_qjRJftaB0,3553
123
124
  cornflow/shared/email.py,sha256=QNDDMv86LZObkevSCyUbLQeR2UD3zWScPIr82NDzYHQ,3437
124
- cornflow/shared/exceptions.py,sha256=tjXd4Hl-QPJviE2NviapS1rwd2NImFd3vMzmp6OTg28,6911
125
+ cornflow/shared/exceptions.py,sha256=E82488IiwTXCv8iwrnGvkTonhJcwbeE5ARO4Zsmhl2c,6966
125
126
  cornflow/shared/licenses.py,sha256=Lc71Jw2NxVTFWtoXdQ9wJX_o3BDfYg1xVoehDXvnCkQ,1328
126
127
  cornflow/shared/log_config.py,sha256=FM2ajjp2MB4BlFbUHklnWInT7-LLjtrqQ0mo3k_HRmE,621
127
128
  cornflow/shared/query_tools.py,sha256=6yGLCWjv-I2a_ZU4A0IymyJq67fZPZdRcCGOGQQpSXg,1199
128
129
  cornflow/shared/utils.py,sha256=g2ZsD3SwsqIHXZ7GWVAVB0F9gX7mT9dQkPgR2Ahsh6M,860
129
- cornflow/shared/utils_tables.py,sha256=A7bjpt7Metkb0FP7tKXMqOkak2fgi3O9dejYvoJBpb0,2236
130
- cornflow/shared/validators.py,sha256=aFKAAJ2diElUA8WdDyCcXJI6r3FV7HFVzoOTC6t4f8Y,4803
130
+ cornflow/shared/utils_tables.py,sha256=JnyaQ-5d1alj230nir-6elC2i0QX-u-_32SAs2eDtC0,3298
131
+ cornflow/shared/validators.py,sha256=Iy2jaGzS9ojqlTE_-vKH4oQKD89GN5C0EPEZMg6UZgc,4761
131
132
  cornflow/shared/authentication/__init__.py,sha256=cJIChk5X6hbA_16usEvfHr8g4JDFI6WKo0GPVOOiYHA,137
132
- cornflow/shared/authentication/auth.py,sha256=oCWW3cUxaKYgGi-4--m4sYVBr4T5MzsR_fBQ3bxRIsM,16092
133
+ cornflow/shared/authentication/auth.py,sha256=SiXMCHwyAXHL7Krd5Ubht16NPNXqSvf-85xyiEB2DK4,18247
133
134
  cornflow/shared/authentication/decorators.py,sha256=_QpwOU1kYzpaK85Dl0Btdj5hG8Ps47PFgySp_gqhlgk,1276
134
135
  cornflow/shared/authentication/ldap.py,sha256=QfdC2X_ZMcIJabKC5pYWDGMhS5pIOJJvdZXuuiruq-M,4853
135
136
  cornflow/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
- cornflow/tests/const.py,sha256=x8AfNOHHeU-XWkz3W_wGYidaJ4f6TXokveTR4K4cqfw,2561
137
+ cornflow/tests/const.py,sha256=2TT-i8mB31rbo0U4GKWzUbPJya0hEURME_N3yzGhGM8,2635
137
138
  cornflow/tests/custom_liveServer.py,sha256=I_0YNrcKIwVmRov3zCQMWwcCWkMe5V246Hpa4gS8AZE,3079
138
- cornflow/tests/custom_test_case.py,sha256=gW6S0qwNtMWli-5ZCYzUzkjah3QiybKUJcJXrdR3JLw,37919
139
+ cornflow/tests/custom_test_case.py,sha256=tu8QS_TMdmoPfKQzr9eHSYNC_7T4cmrOjGxxufZ7U04,37797
139
140
  cornflow/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
141
  cornflow/tests/integration/test_commands.py,sha256=FZcoEM-05D4MBMe0L0V-0sxk_L0zMbzQxb9UCd7iBe0,695
141
142
  cornflow/tests/integration/test_cornflowclient.py,sha256=ioAQmQKWW6mXVJhdF4LECZcGIOa_N0xPkFaGWGtxOO8,20963
@@ -143,34 +144,35 @@ cornflow/tests/ldap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
143
144
  cornflow/tests/ldap/test_ldap_authentication.py,sha256=6Gu1WkF7MQmcV_10IJkpo2qEloZZ9zjpV18ANDD0HRw,4286
144
145
  cornflow/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
146
  cornflow/tests/unit/test_actions.py,sha256=plgnzBJnDiZRdVxt1sNJNL2KbW5ijPZ6MHdIUWO0_As,3167
146
- cornflow/tests/unit/test_alarms.py,sha256=PCOibHct8UG1jr014e_s_gJu_VyTxdC1AeqKeuQ2vLs,4556
147
+ cornflow/tests/unit/test_alarms.py,sha256=P1QsbT09HuRWCDOALsvPFux9UJg2PgWmGX6pb2hmTXA,4529
147
148
  cornflow/tests/unit/test_apiview.py,sha256=03M1GsQRVK7zqmslhOJXr4lLDLY2gMAgg86nk1lyaKU,7620
148
149
  cornflow/tests/unit/test_application.py,sha256=ZVmTQDUOkPRxHqt6mWU9G_lQ3jJNMJR0cx7IkLMFGrU,1715
149
- cornflow/tests/unit/test_cases.py,sha256=1EvabDK08K0CovXvReLCfXiO6n_MXdNcwuCrGPbTVw8,37708
150
+ cornflow/tests/unit/test_cases.py,sha256=Ez9dxlZL-SUf9DW9b_A_qPowHqUZ-TA73DMOzeBeLIU,37718
150
151
  cornflow/tests/unit/test_cli.py,sha256=E2w-Lzgx_k__0mYwlbg2z80_z9nwPZKI0CbgyGmpQRY,18775
151
152
  cornflow/tests/unit/test_commands.py,sha256=kvO8Vn60rj3WBG2oXw7NpDSEYoGLNe806txbJPhtNJo,14722
152
153
  cornflow/tests/unit/test_dags.py,sha256=XsOi5bBJQdQz3DmYAVJf1myoAsRyBBdmku-xBr0Bku0,13386
153
154
  cornflow/tests/unit/test_data_checks.py,sha256=6s50d1iuRTUcAYn14oEcRS39ZZ6E9ussU4YpkpYhtC4,8612
154
155
  cornflow/tests/unit/test_example_data.py,sha256=D-Tgnqw7NZlnBXaDcUU0reNhAca5JlJP2Sdn3KdS4Sw,4127
155
- cornflow/tests/unit/test_executions.py,sha256=_hIaiZri7Blyx4DYhBDHh-0peU1HQh66RSPqQJFveE8,17501
156
+ cornflow/tests/unit/test_executions.py,sha256=fC9kMRqU3qMGQ9eH6WXlOkU8CKJe6l-DlAKln4ImCSU,18192
157
+ cornflow/tests/unit/test_external_role_creation.py,sha256=1YZ2Scj6HeoFxFO-KZr1M7pjyWqzjA77gAICSpiF-2g,31310
156
158
  cornflow/tests/unit/test_generate_from_schema.py,sha256=L1EdnASbDJ8SjrX1V4WnUKKwV0sRTwVnNYnxSpyeSeQ,15376
157
- cornflow/tests/unit/test_health.py,sha256=0E0HXMb63_Z8drbLZdxnJwtTbQyaZS9ZEHut6qsDbh8,1033
159
+ cornflow/tests/unit/test_health.py,sha256=xT0OcnpxbxE0QJlyg4r1qCYDn-hwuk0Ynw5JA4cJtsY,1205
158
160
  cornflow/tests/unit/test_instances.py,sha256=Mf9jijQOcDE3ylPfMTnVRocRegcugEdCnoMCqSmKKqQ,11083
159
161
  cornflow/tests/unit/test_instances_file.py,sha256=sbodxnuoT7n7jdELz-wpVXWt76E5UzUrQYyVpvnfbco,1986
160
162
  cornflow/tests/unit/test_licenses.py,sha256=oj1YdqdxzEdRtxyQiFmRyXyvLzNbl6BeiGCCZH_Y42c,1534
161
- cornflow/tests/unit/test_log_in.py,sha256=Wi9bpHC7TsJ4BcjBUL-YGXfS5ZrqmA2bCnhnwyRVEFc,18107
163
+ cornflow/tests/unit/test_log_in.py,sha256=JfAy1GWEL145njCVEf00Eb_MpAzEiyXFwI3H_8prOrw,19289
162
164
  cornflow/tests/unit/test_main_alarms.py,sha256=y--A4Ap2X38TCCRgbimzaZ-QvnTqZY8KHCv7C8kTTwc,2060
163
165
  cornflow/tests/unit/test_permissions.py,sha256=Jd-4PtqBcWGrSZAuTlJD82qE65D9ZtGWBM6sJY1f_yA,8782
164
166
  cornflow/tests/unit/test_roles.py,sha256=1-EON_JsPAM3sVL8AUfgJYLLfb0s1FXL8LJS4nilF-g,18166
165
167
  cornflow/tests/unit/test_schema_from_models.py,sha256=7IfycOGO3U06baX8I-OPJfu-3ZAn5cv8RCdj9wvalMk,4421
166
168
  cornflow/tests/unit/test_schemas.py,sha256=6SpkeYsS3oWntUZEF3GldLqmNa-hpxg-WrKJVTgc-B4,7468
167
169
  cornflow/tests/unit/test_sign_up.py,sha256=-i6VO9z1FwqRHFvaSrpWAzOZx6qa8mHUEmmsjuMXjn8,3481
168
- cornflow/tests/unit/test_tables.py,sha256=7lZsdun8_SWvYO-6ezQeuTxRat_fyP9vCfXoU7zvHBU,8947
170
+ cornflow/tests/unit/test_tables.py,sha256=SW_K8LRLwR1nB0uH8CPQCjeN8Gei-TasAgkOinnAjLk,8969
169
171
  cornflow/tests/unit/test_token.py,sha256=PZ11b46UCQpCESsRiAPhpgWkGAsAwKCVNxVQai_kxXM,4199
170
172
  cornflow/tests/unit/test_users.py,sha256=N5tcF5nSncD0F_ZlBxGuS87p6kNS4hUzRLr3_AcnK-o,22802
171
173
  cornflow/tests/unit/tools.py,sha256=ag3sWv2WLi498R1GL5AOUnXqSsszD3UugzLZLC5NqAw,585
172
- cornflow-1.2.1.dist-info/METADATA,sha256=gx8LFlzTIi93XBJISoaVA3twOA6QS4UQu94xlrW_U-M,9527
173
- cornflow-1.2.1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
174
- cornflow-1.2.1.dist-info/entry_points.txt,sha256=q9cPKAFBsmHkERCqQ2JcOTM-tVBLHTl-DGxwCXowAWM,46
175
- cornflow-1.2.1.dist-info/top_level.txt,sha256=Qj9kLFJW1PLb-ZV2s_aCkQ-Wi5W6KC6fFR-LTBrx-rU,24
176
- cornflow-1.2.1.dist-info/RECORD,,
174
+ cornflow-1.2.3.dist-info/METADATA,sha256=-NhU05aE1j6vPihe10TCHpf3ouiUfpxT1omuL82KnYA,9527
175
+ cornflow-1.2.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
176
+ cornflow-1.2.3.dist-info/entry_points.txt,sha256=q9cPKAFBsmHkERCqQ2JcOTM-tVBLHTl-DGxwCXowAWM,46
177
+ cornflow-1.2.3.dist-info/top_level.txt,sha256=Qj9kLFJW1PLb-ZV2s_aCkQ-Wi5W6KC6fFR-LTBrx-rU,24
178
+ cornflow-1.2.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5