cornflow 1.1.5__py3-none-any.whl → 1.2.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 (40) hide show
  1. airflow_config/airflow_local_settings.py +1 -1
  2. cornflow/app.py +8 -3
  3. cornflow/cli/migrations.py +23 -3
  4. cornflow/cli/service.py +17 -15
  5. cornflow/cli/utils.py +16 -1
  6. cornflow/config.py +10 -11
  7. cornflow/endpoints/__init__.py +7 -1
  8. cornflow/endpoints/alarms.py +66 -2
  9. cornflow/endpoints/login.py +81 -63
  10. cornflow/endpoints/meta_resource.py +11 -3
  11. cornflow/models/base_data_model.py +4 -32
  12. cornflow/models/meta_models.py +28 -22
  13. cornflow/models/user.py +7 -10
  14. cornflow/schemas/alarms.py +8 -0
  15. cornflow/schemas/query.py +2 -1
  16. cornflow/schemas/user.py +5 -20
  17. cornflow/shared/authentication/auth.py +201 -264
  18. cornflow/shared/const.py +3 -14
  19. cornflow/tests/const.py +1 -0
  20. cornflow/tests/custom_test_case.py +77 -26
  21. cornflow/tests/unit/test_actions.py +2 -2
  22. cornflow/tests/unit/test_alarms.py +55 -1
  23. cornflow/tests/unit/test_apiview.py +108 -3
  24. cornflow/tests/unit/test_cases.py +20 -29
  25. cornflow/tests/unit/test_cli.py +6 -5
  26. cornflow/tests/unit/test_dags.py +5 -6
  27. cornflow/tests/unit/test_instances.py +14 -2
  28. cornflow/tests/unit/test_instances_file.py +1 -1
  29. cornflow/tests/unit/test_licenses.py +1 -1
  30. cornflow/tests/unit/test_log_in.py +230 -207
  31. cornflow/tests/unit/test_permissions.py +8 -8
  32. cornflow/tests/unit/test_roles.py +48 -10
  33. cornflow/tests/unit/test_tables.py +7 -7
  34. cornflow/tests/unit/test_token.py +19 -5
  35. cornflow/tests/unit/test_users.py +22 -6
  36. {cornflow-1.1.5.dist-info → cornflow-1.2.0.dist-info}/METADATA +13 -12
  37. {cornflow-1.1.5.dist-info → cornflow-1.2.0.dist-info}/RECORD +40 -40
  38. {cornflow-1.1.5.dist-info → cornflow-1.2.0.dist-info}/WHEEL +1 -1
  39. {cornflow-1.1.5.dist-info → cornflow-1.2.0.dist-info}/entry_points.txt +0 -0
  40. {cornflow-1.1.5.dist-info → cornflow-1.2.0.dist-info}/top_level.txt +0 -0
@@ -43,7 +43,7 @@ class TestPermissionsViewRoleEndpoint(CustomTestCase):
43
43
  follow_redirects=True,
44
44
  headers={
45
45
  "Content-Type": "application/json",
46
- "Authorization": "Bearer " + self.token,
46
+ "Authorization": f"Bearer {self.token}",
47
47
  },
48
48
  )
49
49
 
@@ -58,7 +58,7 @@ class TestPermissionsViewRoleEndpoint(CustomTestCase):
58
58
  follow_redirects=True,
59
59
  headers={
60
60
  "Content-Type": "application/json",
61
- "Authorization": "Bearer " + self.token,
61
+ "Authorization": f"Bearer {self.token}",
62
62
  },
63
63
  )
64
64
 
@@ -103,7 +103,7 @@ class TestPermissionViewRolesDetailEndpoint(CustomTestCase):
103
103
  data=json.dumps(self.payload),
104
104
  headers={
105
105
  "Content-Type": "application/json",
106
- "Authorization": "Bearer " + self.token,
106
+ "Authorization": f"Bearer {self.token}",
107
107
  },
108
108
  ).json["id"]
109
109
  view_id = 2
@@ -127,7 +127,7 @@ class TestPermissionViewRolesDetailEndpoint(CustomTestCase):
127
127
  data=json.dumps(self.payload),
128
128
  headers={
129
129
  "Content-Type": "application/json",
130
- "Authorization": "Bearer " + self.token,
130
+ "Authorization": f"Bearer {self.token}",
131
131
  },
132
132
  ).json["id"]
133
133
  for role in ROLES_MAP:
@@ -151,7 +151,7 @@ class TestPermissionViewRolesDetailEndpoint(CustomTestCase):
151
151
  data=json.dumps(self.payload),
152
152
  headers={
153
153
  "Content-Type": "application/json",
154
- "Authorization": "Bearer " + self.token,
154
+ "Authorization": f"Bearer {self.token}",
155
155
  },
156
156
  ).json["id"]
157
157
 
@@ -160,7 +160,7 @@ class TestPermissionViewRolesDetailEndpoint(CustomTestCase):
160
160
  follow_redirects=True,
161
161
  headers={
162
162
  "Content-Type": "application/json",
163
- "Authorization": "Bearer " + self.token,
163
+ "Authorization": f"Bearer {self.token}",
164
164
  },
165
165
  )
166
166
  self.assertEqual(200, response.status_code)
@@ -174,7 +174,7 @@ class TestPermissionViewRolesDetailEndpoint(CustomTestCase):
174
174
  data=json.dumps(self.payload),
175
175
  headers={
176
176
  "Content-Type": "application/json",
177
- "Authorization": "Bearer " + self.token,
177
+ "Authorization": f"Bearer {self.token}",
178
178
  },
179
179
  ).json["id"]
180
180
 
@@ -186,7 +186,7 @@ class TestPermissionViewRolesDetailEndpoint(CustomTestCase):
186
186
  follow_redirects=True,
187
187
  headers={
188
188
  "Content-Type": "application/json",
189
- "Authorization": "Bearer " + self.token,
189
+ "Authorization": f"Bearer {self.token}",
190
190
  },
191
191
  )
192
192
  self.assertEqual(403, response.status_code)
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Unit test for the role endpoints
3
3
  """
4
+
4
5
  import json
5
6
  import logging as log
6
7
  from cornflow.models import PermissionViewRoleModel, RoleModel
@@ -47,7 +48,7 @@ class TestRolesListEndpoint(CustomTestCase):
47
48
  follow_redirects=True,
48
49
  headers={
49
50
  "Content-Type": "application/json",
50
- "Authorization": "Bearer " + self.token,
51
+ "Authorization": f"Bearer {self.token}",
51
52
  },
52
53
  )
53
54
  self.assertEqual(200, response.status_code)
@@ -63,7 +64,7 @@ class TestRolesListEndpoint(CustomTestCase):
63
64
  follow_redirects=True,
64
65
  headers={
65
66
  "Content-Type": "application/json",
66
- "Authorization": "Bearer " + self.token,
67
+ "Authorization": f"Bearer {self.token}",
67
68
  },
68
69
  )
69
70
 
@@ -75,7 +76,7 @@ class TestRolesListEndpoint(CustomTestCase):
75
76
  follow_redirects=True,
76
77
  headers={
77
78
  "Content-Type": "application/json",
78
- "Authorization": "Bearer " + self.token,
79
+ "Authorization": f"Bearer {self.token}",
79
80
  },
80
81
  )
81
82
 
@@ -91,7 +92,7 @@ class TestRolesListEndpoint(CustomTestCase):
91
92
  follow_redirects=True,
92
93
  headers={
93
94
  "Content-Type": "application/json",
94
- "Authorization": "Bearer " + self.token,
95
+ "Authorization": f"Bearer {self.token}",
95
96
  },
96
97
  )
97
98
  self.assertEqual(403, response.status_code)
@@ -157,7 +158,7 @@ class TestRolesDetailEndpoint(CustomTestCase):
157
158
  follow_redirects=True,
158
159
  headers={
159
160
  "Content-Type": "application/json",
160
- "Authorization": "Bearer " + self.token,
161
+ "Authorization": f"Bearer {self.token}",
161
162
  },
162
163
  )
163
164
 
@@ -191,7 +192,7 @@ class TestRolesDetailEndpoint(CustomTestCase):
191
192
  follow_redirects=True,
192
193
  headers={
193
194
  "Content-Type": "application/json",
194
- "Authorization": "Bearer " + self.token,
195
+ "Authorization": f"Bearer {self.token}",
195
196
  },
196
197
  )
197
198
 
@@ -203,7 +204,7 @@ class TestRolesDetailEndpoint(CustomTestCase):
203
204
  follow_redirects=True,
204
205
  headers={
205
206
  "Content-Type": "application/json",
206
- "Authorization": "Bearer " + self.token,
207
+ "Authorization": f"Bearer {self.token}",
207
208
  },
208
209
  )
209
210
 
@@ -246,7 +247,7 @@ class TestUserRolesListEndpoint(CustomTestCase):
246
247
  follow_redirects=True,
247
248
  headers={
248
249
  "Content-Type": "application/json",
249
- "Authorization": "Bearer " + self.token,
250
+ "Authorization": f"Bearer {self.token}",
250
251
  },
251
252
  )
252
253
  self.assertEqual(200, response.status_code)
@@ -261,7 +262,7 @@ class TestUserRolesListEndpoint(CustomTestCase):
261
262
  follow_redirects=True,
262
263
  headers={
263
264
  "Content-Type": "application/json",
264
- "Authorization": "Bearer " + self.token,
265
+ "Authorization": f"Bearer {self.token}",
265
266
  },
266
267
  )
267
268
  self.assertEqual(403, response.status_code)
@@ -431,7 +432,7 @@ class TestRolesModelMethods(CustomTestCase):
431
432
  self.payload = {"name": "test_role"}
432
433
 
433
434
  def test_user_role_delete_cascade(self):
434
- payload = {"user_id": self.user}
435
+ payload = {"user_id": self.user.id}
435
436
  self.token = self.create_user_with_role(ADMIN_ROLE)
436
437
  self.cascade_delete(
437
438
  self.url,
@@ -472,3 +473,40 @@ class TestRolesModelMethods(CustomTestCase):
472
473
  self.token = self.create_user_with_role(ADMIN_ROLE)
473
474
  idx = self.create_new_row(self.url, self.model, self.payload)
474
475
  self.str_method(idx, "<Role test_role>")
476
+
477
+ def test_get_all_objects(self):
478
+ """
479
+ Tests the get_all_objects method
480
+ """
481
+ # We expect 4 roles to be present (from ROLES_MAP constant)
482
+ instances = RoleModel.get_all_objects().all()
483
+ self.assertEqual(len(instances), 4)
484
+
485
+ # Check that all the roles from ROLES_MAP are present
486
+ role_names = [role.name for role in instances]
487
+ expected_names = list(ROLES_MAP.values())
488
+ self.assertCountEqual(role_names, expected_names)
489
+
490
+ # Test offset parameter - should get all except the first role
491
+ instances = RoleModel.get_all_objects(offset=1).all()
492
+ self.assertEqual(len(instances), 3)
493
+
494
+ # Get the names of all roles except the first one
495
+ remaining_roles = [role.name for role in instances]
496
+ # The first role is skipped due to offset=1
497
+ first_role = RoleModel.get_all_objects().first().name
498
+ self.assertNotIn(first_role, remaining_roles)
499
+
500
+ # Test offset and limit parameters
501
+ instances = RoleModel.get_all_objects(offset=1, limit=1).all()
502
+ self.assertEqual(len(instances), 1)
503
+
504
+ # Verify that we get the second role when using offset=1 and limit=1
505
+ second_role = RoleModel.get_all_objects().all()[1]
506
+ self.assertEqual(instances[0].id, second_role.id)
507
+ self.assertEqual(instances[0].name, second_role.name)
508
+
509
+ # Test filtering by name
510
+ instances = RoleModel.get_all_objects(limit=1, name="admin").all()
511
+ self.assertEqual(len(instances), 1)
512
+ self.assertEqual(instances[0].name, "admin")
@@ -81,7 +81,7 @@ class TestTablesListEndpoint(TestCase):
81
81
  follow_redirects=True,
82
82
  headers={
83
83
  "Content-Type": "application/json",
84
- "Authorization": "Bearer " + self.token,
84
+ "Authorization": f"Bearer {self.token}",
85
85
  },
86
86
  )
87
87
  self.assertEqual(response.status_code, 200)
@@ -111,7 +111,7 @@ class TestTablesListEndpoint(TestCase):
111
111
  follow_redirects=True,
112
112
  headers={
113
113
  "Content-Type": "application/json",
114
- "Authorization": "Bearer " + self.token,
114
+ "Authorization": f"Bearer {self.token}",
115
115
  },
116
116
  query_string=dict(limit=3),
117
117
  )
@@ -187,7 +187,7 @@ class TestTablesDetailEndpoint(TestCase):
187
187
  follow_redirects=True,
188
188
  headers={
189
189
  "Content-Type": "application/json",
190
- "Authorization": "Bearer " + self.token,
190
+ "Authorization": f"Bearer {self.token}",
191
191
  },
192
192
  )
193
193
 
@@ -204,7 +204,7 @@ class TestTablesDetailEndpoint(TestCase):
204
204
  follow_redirects=True,
205
205
  headers={
206
206
  "Content-Type": "application/json",
207
- "Authorization": "Bearer " + self.token,
207
+ "Authorization": f"Bearer {self.token}",
208
208
  },
209
209
  )
210
210
  self.assertEqual(response.status_code, 400)
@@ -216,7 +216,7 @@ class TestTablesDetailEndpoint(TestCase):
216
216
  follow_redirects=True,
217
217
  headers={
218
218
  "Content-Type": "application/json",
219
- "Authorization": "Bearer " + self.token,
219
+ "Authorization": f"Bearer {self.token}",
220
220
  },
221
221
  )
222
222
  self.assertEqual(response.status_code, 404)
@@ -270,7 +270,7 @@ class TestTablesEndpointAdmin(TestCase):
270
270
  follow_redirects=True,
271
271
  headers={
272
272
  "Content-Type": "application/json",
273
- "Authorization": "Bearer " + self.token,
273
+ "Authorization": f"Bearer {self.token}",
274
274
  },
275
275
  )
276
276
  self.assertEqual(response.status_code, 403)
@@ -284,7 +284,7 @@ class TestTablesEndpointAdmin(TestCase):
284
284
  follow_redirects=True,
285
285
  headers={
286
286
  "Content-Type": "application/json",
287
- "Authorization": "Bearer " + self.token,
287
+ "Authorization": f"Bearer {self.token}",
288
288
  },
289
289
  )
290
290
 
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Unit test for the token endpoint
3
3
  """
4
+
4
5
  import json
5
6
 
6
7
  from flask import current_app
@@ -87,15 +88,28 @@ class TestUnexpiringToken(CustomTestCase):
87
88
  def test_token_unexpiring(self):
88
89
  auth = BIAuth()
89
90
 
91
+ # Generate token dynamically
90
92
  token = auth.generate_token(1)
91
93
 
94
+ # Verify that the token decodes correctly
92
95
  response = auth.decode_token(token)
93
- self.assertEqual(response, {"user_id": 1})
94
-
95
- token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MDM1OTI1OTIsInN1YiI6MX0.Plvmi02FMfZOTn6bxArELEmDeyuP-2X794c5VtAFgCg"
96
96
 
97
- response = auth.decode_token(token)
98
- self.assertEqual(response, {"user_id": 1})
97
+ self.assertIn("iat", response)
98
+ self.assertIn("iss", response)
99
+ self.assertIn("sub", response)
100
+ self.assertEqual("testname", response["sub"])
101
+ # Don't use hardcoded token, generate another dynamic one
102
+ user = UserModel.get_one_user(1)
103
+ self.assertIsNotNone(user)
104
+
105
+ # Verify that another generated token also works
106
+ token2 = auth.generate_token(1)
107
+ response2 = auth.decode_token(token2)
108
+
109
+ self.assertIn("iat", response2)
110
+ self.assertIn("iss", response2)
111
+ self.assertIn("sub", response2)
112
+ self.assertEqual("testname", response2["sub"])
99
113
 
100
114
  def test_user_not_valid(self):
101
115
  auth = BIAuth()
@@ -1,8 +1,22 @@
1
+ """
2
+ Unit tests for the user endpoints.
3
+
4
+ This module contains tests for the user-related functionalities, including:
5
+ - User authentication and authorization
6
+ - User role management
7
+ - Password handling and rotation
8
+ - User profile operations
9
+
10
+ All tests follow a consistent pattern of setting up test data,
11
+ executing operations, and verifying results against expected outcomes.
12
+ """
13
+
1
14
  import json
15
+ from datetime import datetime, timedelta, timezone
2
16
 
3
17
  from flask import current_app
4
18
  from flask_testing import TestCase
5
- from datetime import datetime, timedelta
19
+
6
20
  from cornflow.app import create_app
7
21
  from cornflow.commands.access import access_init_command
8
22
  from cornflow.commands.dag import register_deployed_dags_command_test
@@ -15,9 +29,8 @@ from cornflow.models import (
15
29
  UserModel,
16
30
  UserRoleModel,
17
31
  )
18
-
19
- from cornflow.shared.const import ADMIN_ROLE, PLANNER_ROLE, SERVICE_ROLE, VIEWER_ROLE
20
32
  from cornflow.shared import db
33
+ from cornflow.shared.const import ADMIN_ROLE, SERVICE_ROLE, PLANNER_ROLE, VIEWER_ROLE
21
34
  from cornflow.tests.const import (
22
35
  CASE_PATH,
23
36
  CASE_URL,
@@ -363,15 +376,18 @@ class TestUserEndpoint(TestCase):
363
376
 
364
377
  def test_change_password_rotation(self):
365
378
  current_app.config["PWD_ROTATION_TIME"] = 1 # in days
366
- payload = {"pwd_last_change": (datetime.utcnow() - timedelta(days=2)).strftime("%Y-%m-%dT%H:%M:%SZ")}
367
- self.modify_info(self.planner, self.planner, payload)
379
+ payload = {"pwd_last_change": (datetime.now(timezone.utc) - timedelta(days=2))}
380
+
381
+ planner = UserModel.get_one_user(self.planner["id"])
382
+ planner.update(payload)
383
+
368
384
  response = self.log_in(self.planner)
369
385
  self.assertEqual(True, response.json["change_password"])
370
386
 
371
387
  payload = {"password": "Newtestpassword1!"}
372
388
  self.modify_info(self.planner, self.planner, payload)
373
389
  self.planner.update(payload)
374
- print(self.planner)
390
+
375
391
  response = self.log_in(self.planner)
376
392
  self.assertEqual(False, response.json["change_password"])
377
393
 
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cornflow
3
- Version: 1.1.5
4
- Summary: Cornflow is an open source multi-solver optimization server with a REST API built using flask.
3
+ Version: 1.2.0
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
7
7
  Author-email: cornflow@baobabsoluciones.es
@@ -12,8 +12,9 @@ Classifier: Development Status :: 5 - Production/Stable
12
12
  Requires-Python: >=3.9
13
13
  Requires-Dist: alembic==1.9.2
14
14
  Requires-Dist: apispec<=6.3.0
15
+ Requires-Dist: cachetools==5.3.3
15
16
  Requires-Dist: click<=8.1.7
16
- Requires-Dist: cornflow-client>=1.1.0
17
+ Requires-Dist: cornflow-client>=1.2.0
17
18
  Requires-Dist: cryptography<=42.0.5
18
19
  Requires-Dist: disposable-email-domains>=0.0.86
19
20
  Requires-Dist: Flask==2.3.2
@@ -49,7 +50,7 @@ Dynamic: requires-dist
49
50
  Dynamic: requires-python
50
51
  Dynamic: summary
51
52
 
52
- Cornflow
53
+ cornflow
53
54
  =========
54
55
 
55
56
  .. image:: https://github.com/baobabsoluciones/cornflow/workflows/build/badge.svg?style=svg
@@ -69,13 +70,13 @@ Cornflow
69
70
 
70
71
  .. image:: https://img.shields.io/badge/License-Apache2.0-blue
71
72
 
72
- Cornflow is an open source multi-solver optimization server with a REST API built using `flask <https://flask.palletsprojects.com>`_, `airflow <https://airflow.apache.org/>`_ and `pulp <https://coin-or.github.io/pulp/>`_.
73
+ cornflow is an open source multi-solver optimization server with a REST API built using `flask <https://flask.palletsprojects.com>`_, `airflow <https://airflow.apache.org/>`_ and `pulp <https://coin-or.github.io/pulp/>`_.
73
74
 
74
- While most deployment servers are based on the solving technique (MIP, CP, NLP, etc.), Cornflow focuses on the optimization problems themselves. However, it does not impose any constraint on the type of problem and solution method to use.
75
+ While most deployment servers are based on the solving technique (MIP, CP, NLP, etc.), cornflow focuses on the optimization problems themselves. However, it does not impose any constraint on the type of problem and solution method to use.
75
76
 
76
- With Cornflow you can deploy a Traveling Salesman Problem solver next to a Knapsack solver or a Nurse Rostering Problem solver. As long as you describe the input and output data, you can upload any solution method for any problem and then use it with any data you want.
77
+ With cornflow you can deploy a Traveling Salesman Problem solver next to a Knapsack solver or a Nurse Rostering Problem solver. As long as you describe the input and output data, you can upload any solution method for any problem and then use it with any data you want.
77
78
 
78
- Cornflow helps you formalize your problem by proposing development guidelines. It also provides a range of functionalities around your deployed solution method, namely:
79
+ cornflow helps you formalize your problem by proposing development guidelines. It also provides a range of functionalities around your deployed solution method, namely:
79
80
 
80
81
  * storage of users, instances, solutions and solution logs.
81
82
  * deployment and maintenance of models, solvers and algorithms.
@@ -91,9 +92,9 @@ Cornflow helps you formalize your problem by proposing development guidelines. I
91
92
  Installation instructions
92
93
  -------------------------------
93
94
 
94
- Cornflow is tested with Ubuntu 20.04, python >= 3.8 and git.
95
+ cornflow is tested with Ubuntu 20.04, python >= 3.8 and git.
95
96
 
96
- Download the Cornflow project and install requirements::
97
+ Download the cornflow project and install requirements::
97
98
 
98
99
  python3 -m venv venv
99
100
  venv/bin/pip3 install cornflow
@@ -109,7 +110,7 @@ initialize the sqlite database::
109
110
  flask create_admin_user -u cornflow -e cornflow_admin@admin.com -p cornflow_admin_password
110
111
 
111
112
 
112
- activate the virtual environment and run Cornflow::
113
+ activate the virtual environment and run cornflow::
113
114
 
114
115
  source venv/bin/activate
115
116
  export FLASK_APP=cornflow.app
@@ -120,7 +121,7 @@ activate the virtual environment and run Cornflow::
120
121
  export AIRFLOW_PWD=airflow_pwd
121
122
  flask run
122
123
 
123
- **Cornflow needs a running installation of Airflow to operate and more configuration**. Check `the installation docs <https://baobabsoluciones.github.io/cornflow/main/install.html>`_ for more details on installing airflow, configuring the application and initializing the database.
124
+ **cornflow needs a running installation of Airflow to operate and more configuration**. Check `the installation docs <https://baobabsoluciones.github.io/cornflow/main/install.html>`_ for more details on installing airflow, configuring the application and initializing the database.
124
125
 
125
126
  Using cornflow to solve a PuLP model
126
127
  ---------------------------------------
@@ -1,24 +1,24 @@
1
1
  airflow_config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- airflow_config/airflow_local_settings.py,sha256=j4N_HMGyvjwP0abvQQjRamoC5ERA6nSpgvMNdrGgx5k,677
2
+ airflow_config/airflow_local_settings.py,sha256=hsvvO_iv2Qqwo5pEqvll2L4T-obVUxr63TYW2XMGAp4,677
3
3
  airflow_config/webserver_ldap.py,sha256=BjtYGIA35pgmInKeFnG0qC65lfGYq5ZKgZMgdTZ6jXA,2595
4
4
  airflow_config/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
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=X73N64o8OGEqVIRWbC13e_4xb1lxzOH_BV3F3fzAmXE,7312
9
- cornflow/config.py,sha256=IJg757HpjRgXdW1nINHMzWRxfGPW5_8ioV9ZW1aPSNs,5585
8
+ cornflow/app.py,sha256=-RkH3E_gfVadNOGE9V4TOcqAzTIxNh4zydwv55L5DO0,7526
9
+ cornflow/config.py,sha256=c3CNu6wzm5mDJLF6GjrnBKQSNKsRr69S2vQ9jCSAhYw,5628
10
10
  cornflow/gunicorn.py,sha256=uO-Yk7w7nvQSWh12iDxsVvlG-_2BiKIIjm2UiTk4P9E,480
11
11
  cornflow/cli/__init__.py,sha256=5jBmSMpaE1S9rDaQjS8VHJ6x4FfJG8MhKzMzfw7G4Zc,743
12
12
  cornflow/cli/actions.py,sha256=BdTFucT6gZ0QJqo96Zu0C2G9acZ578tLkktKSfTybJ8,414
13
13
  cornflow/cli/arguments.py,sha256=9EEyyny5cJJ1t3WAs6zMgTDvTre0JdQ2N_oZfFQmixs,657
14
14
  cornflow/cli/config.py,sha256=_7Y6tDo5uu4riymkzMYHnTR9IYxBG_FsjwmB84Du90U,1148
15
- cornflow/cli/migrations.py,sha256=Stc8H99rG8vgo3yRJcck11zBY_EA4WqyVybglfl8zJE,1624
15
+ cornflow/cli/migrations.py,sha256=5GuyEsquQZoPW65U7OS_rik6Xe10z16V0So0jDvVYZQ,2334
16
16
  cornflow/cli/permissions.py,sha256=4KXKysH4g8YYQIZcPuXFS2g0xEErp-e8I_FAqMGaV7U,1006
17
17
  cornflow/cli/roles.py,sha256=NFG__qrlyOT0h4L4nwo9FSV4DKjGtMVh3gwiJxwM37w,411
18
18
  cornflow/cli/schemas.py,sha256=sxuJOZf12SBZAXDiAYNPB-n9LSxzSwkB3xyhgS_4K9A,6086
19
- cornflow/cli/service.py,sha256=7_va2Gv1qySldWtTHLL0b_Tg6tuYzAVduyeKmoiBgVs,9292
19
+ cornflow/cli/service.py,sha256=_LLGespgjf8mnaYDG7Y73TxYCSsphtr5NeFpHItXRS4,9041
20
20
  cornflow/cli/users.py,sha256=nPnu8rQNLtwmeXLwYtJ_hjlsa_24XOnQLgBJRBP9bJw,2104
21
- cornflow/cli/utils.py,sha256=0tF41gTt6LL9XGOizTQg2GXuOXbqLg6gapCr-HWjJ0Q,733
21
+ cornflow/cli/utils.py,sha256=p54xJEnYWda6rqSQDoZU2qZrFu9kTs4FoF0y3pJLQvI,1377
22
22
  cornflow/cli/views.py,sha256=Xyx2l-Sm7panxQEfR3qksCIUoqF7woMKsYgZALkxUXM,636
23
23
  cornflow/cli/tools/__init__.py,sha256=JtyhYfUfirw78BV1mCsdeY0W25fDPWTmZhNBWdDh0wA,19
24
24
  cornflow/cli/tools/api_generator.py,sha256=7ZEEGBdL9Anbj5gnPm3m_eHQm0ehz7Y7YaD952mGh58,16344
@@ -37,9 +37,9 @@ cornflow/commands/roles.py,sha256=Oux-UkswkQ74zqaMEJYIEsZpQZGBcGaSahVzx9feAHU,15
37
37
  cornflow/commands/schemas.py,sha256=QjLXLw5So3f8ZqTg5_uvXxwpo4vE0dMT4_gFMKZHGvQ,1828
38
38
  cornflow/commands/users.py,sha256=MEfqMm2ujso0NQgdUm-crOet-G0M43GNqVCx2Ls-2HY,2591
39
39
  cornflow/commands/views.py,sha256=K2Ld1-l1ZKn9m6e2W1LCxmN44QokwR-8u8rIrviiEf8,2276
40
- cornflow/endpoints/__init__.py,sha256=RI-cNRxYFCuYELPdM0kDDgJhopMMX88HJe-ArTTilNM,7346
40
+ cornflow/endpoints/__init__.py,sha256=ZlwhY8MiynQ0BdATkrsikGM2Kqo4DPxkVTc3faNfzRY,7492
41
41
  cornflow/endpoints/action.py,sha256=ksHK3F919cjkONLcFV2tUIbG-eZw5XbYkqVjYx9iq5I,1359
42
- cornflow/endpoints/alarms.py,sha256=3FN7mosBFP_DcJQxfg1h5_phy755FYESXyQ62XpvFbs,1956
42
+ cornflow/endpoints/alarms.py,sha256=M-fpRAm5ZgYyZXvcgS0NHkeMGnvcbfQh2O5qQJUaeoM,4372
43
43
  cornflow/endpoints/apiview.py,sha256=cpxZFkWy6yrRHiAq2tseyVAK1r8uvjnFuOgJjGT0rKI,1370
44
44
  cornflow/endpoints/case.py,sha256=80Fpv9p8mwIXzjQFuyq1PnPTz3RaOUk932sCUfw7yGA,18670
45
45
  cornflow/endpoints/dag.py,sha256=MRthA2pnZCAFfoPbHCLDW2j1BsQ3WdjRGC17Szl4b28,10390
@@ -49,9 +49,9 @@ cornflow/endpoints/execution.py,sha256=5SWwgbxBUj_gDU6Yb7Z-iKNakr9vr3g5qU82Bw9y5
49
49
  cornflow/endpoints/health.py,sha256=TWmWjKdQOoDzpqwcfksuaAGOLIb2idxzPQcGMWrdkCY,1610
50
50
  cornflow/endpoints/instance.py,sha256=WAnloocXFxSW4vunBJo3CIHx4NzC_0GPJh5bj3ETd9U,11615
51
51
  cornflow/endpoints/licenses.py,sha256=82hHWGYvVIiyw9mlwGtMwJMDJ-ShHOi9rvuM6KvfE4U,873
52
- cornflow/endpoints/login.py,sha256=rchsQBL60FQXoub4dznB_UjQ5r9CmJBGnI-HnQY37Mk,9413
52
+ cornflow/endpoints/login.py,sha256=ini7w9kFNoVw981UOvlFIaf45rsnpx6nKFnKrM2uDpo,10698
53
53
  cornflow/endpoints/main_alarms.py,sha256=GUB-UdnvEFi7n6FGFKO9VtZeZb4Ox3NvBMhB7rdqNyI,2006
54
- cornflow/endpoints/meta_resource.py,sha256=eqC6U8IpY65Cbk2WpdphRtE6o5kes2lB4LhezfUB7xI,8471
54
+ cornflow/endpoints/meta_resource.py,sha256=XXiNKOs1riFUagy-oj9nOnHo_wqp8atwF3Y5aUzQWCA,8796
55
55
  cornflow/endpoints/permission.py,sha256=FpEBIucfUl89UaJ80SC0VR6pFAdqdSsS43SdNkcXWtI,3751
56
56
  cornflow/endpoints/roles.py,sha256=54ra4MQ9JmrHDsiGczDAVqHgAT4zwhdTA1dLBOy66v8,6105
57
57
  cornflow/endpoints/schemas.py,sha256=lHyvSpPj0x7zVYDlEeRrz_Qqyp6WNimibs5gK4BHpKI,2933
@@ -82,22 +82,22 @@ cornflow/migrations/versions/f3bee20314a2_.py,sha256=pgfAeiPvFvPJXhWlFHq6Y7bjYFG
82
82
  cornflow/models/__init__.py,sha256=hvUe_9Xep1gl8hPKcWxCZN9sORH0Opskj_DnNs3bn24,500
83
83
  cornflow/models/action.py,sha256=8MYzQ2qX5bG0zk28OufypzThkR7AU1J1el-5ABoTurg,1200
84
84
  cornflow/models/alarms.py,sha256=R_g3tkWNSJaAG4gSvthgJlyrueY9VDuIZPoVHk5lDvU,1682
85
- cornflow/models/base_data_model.py,sha256=mVMHJpEoJeH6Wly_ZIfzLfTPd39nSYpCgmtA_ft2VPs,5577
85
+ cornflow/models/base_data_model.py,sha256=AJY_HUW1bTT6bjLeRl21YuKTisriJByr6DevpZOrny4,4472
86
86
  cornflow/models/case.py,sha256=GEs-xeo0bJ5qJETDnIur-2q2IyR3NSj1K0jP3Arz4Xs,9572
87
87
  cornflow/models/dag.py,sha256=DhHpBqJXrLzPoVSyrS_rYI7BotdzITopJDKsql3mQnQ,2930
88
88
  cornflow/models/dag_permissions.py,sha256=QkhPxSLKxH5elIMdf-rnRtV_CEZBQDFFKUOWv15RgwI,1716
89
89
  cornflow/models/execution.py,sha256=9sq_GXSAgFgTpDX3kbJGwsHwNQGXH9E_gfNYIfNtDOk,6022
90
90
  cornflow/models/instance.py,sha256=2E9kBKv1a8soaEAvG8X4qXQ4BVC-IWYD5WQcPmZQw00,3979
91
91
  cornflow/models/main_alarms.py,sha256=9S-Ohr2kYFFWB0HomrpSdDIoUr85Eu1rt90Om_Pa8VY,1748
92
- cornflow/models/meta_models.py,sha256=qeliGdpw0_q0GCeZzansF-09Ay5pueaT-QQPVPZ5aj4,12000
92
+ cornflow/models/meta_models.py,sha256=dW10OCqSPeKsPTHxdEEDM17qW36arPT5pYxIy3vRLKE,12132
93
93
  cornflow/models/permissions.py,sha256=vPHa0A40e18YLzQEzKk9BrqsDQWfguIlsfrSufmW9dY,2804
94
94
  cornflow/models/role.py,sha256=dEASPw8-aLbRRkoyId2zk7lFTq1twpRPMTkwb0zEOIE,2052
95
- cornflow/models/user.py,sha256=podqU5Emhe52ytsUnrBcKShk_jSH_0Em0UXZEAmWgjI,8755
95
+ cornflow/models/user.py,sha256=cv9d10DVAKarcMLTc6PqsmrWzO9ugKrwCvRl5KwllO0,8749
96
96
  cornflow/models/user_role.py,sha256=rr-0S4sV5l6xDQIwd94c3bPepDA50NdStwd3MSzRJbU,4974
97
97
  cornflow/models/view.py,sha256=ajDnvKsm-F1uizk1egaLfZDka3fXF8TXC3zUvkktVIo,2066
98
98
  cornflow/schemas/__init__.py,sha256=ijW3cATETq-SbBCWarRtxLMvU2_oVkaqGbP2gH1KX8o,215
99
99
  cornflow/schemas/action.py,sha256=evR1UGOWH2XqHJ7eQeYGOlTuu2y627w9wDgPaWB86nw,340
100
- cornflow/schemas/alarms.py,sha256=Y-VQ93jbDLtEv49qkNDHwrhwkG7OzEQ0nceqJCqeScQ,541
100
+ cornflow/schemas/alarms.py,sha256=CWqukY4IuOHodgTvOO2cXOZkq1yUdVM4F8RqcPWMu6Q,747
101
101
  cornflow/schemas/case.py,sha256=OXRsDi_sdB47MQJ59S_1eMjDmLlpUtG7kTFNInV2-cI,2909
102
102
  cornflow/schemas/common.py,sha256=QYuxWcOl4smXFZr_vL07OVgH9H50ZywCrXxycVNr1qA,473
103
103
  cornflow/schemas/dag.py,sha256=0ENA75X9L8YqjJW6ZO1Sb4zE8OxB15_O49_nwA6eAVw,901
@@ -109,17 +109,17 @@ cornflow/schemas/main_alarms.py,sha256=cC1_Vb1dmo_vdZpZQrA7jH-hRCjVtLRy6Z2JFBlTr
109
109
  cornflow/schemas/model_json.py,sha256=qUsdd1XmxhcsAmb1JB0xAsvucZoAeQhAQD_3wiY-rVo,202
110
110
  cornflow/schemas/patch.py,sha256=nB6vhmscusfC8tSl4Ded0UwQIbGjGF5_Nwx0kxygKWk,260
111
111
  cornflow/schemas/permissions.py,sha256=dgHKXLDyB1-q-Ii7cuHLpovlFPthtEV3mNxRgTe42ac,1270
112
- cornflow/schemas/query.py,sha256=lQ6lMy0O6RRQLA-9JtQ95p70yd7vra4cGIbLrYO74GE,984
112
+ cornflow/schemas/query.py,sha256=cLgFxJvpmCs7mchHgNbYvKldn3-fGbLtFv3JwuyUfWM,985
113
113
  cornflow/schemas/role.py,sha256=lZYoLpA0weuDiFgpk3PWrHYJdljvZ3HEIOS-ISNLcCg,469
114
114
  cornflow/schemas/schemas.py,sha256=vNyOwrchuTT3TMR9Jj07pauSr2sFTM-rfIfiKUycOjo,433
115
115
  cornflow/schemas/solution_log.py,sha256=jSutvj0-2RJIqzn7ANLFanAD4jrSDvtgqf6DF6UZBhs,2255
116
116
  cornflow/schemas/tables.py,sha256=6uEmG_ddXVPk-itY0aWms568fKroWzv73DtaQ5aeVng,105
117
- cornflow/schemas/user.py,sha256=E5XmdgU318l4n2tS7uvKzhs06MIYtvni5ZOE7-TwkV4,2860
117
+ cornflow/schemas/user.py,sha256=4zOfAhoBjTrcCQoh5OU_OnL1M7iz9q_Ned2wPi9CjLQ,2201
118
118
  cornflow/schemas/user_role.py,sha256=e5y6RgdZZtLqD-h2B3sa5WokI5-pT78tWw85IG34I74,615
119
119
  cornflow/schemas/view.py,sha256=ctq9Y1TmjrWdyOqgDYeEx7qbbuNLKfSiNOlFTlXmpaw,429
120
120
  cornflow/shared/__init__.py,sha256=1ahcBwWOsSjGI4FEm77JBQjitBdBszOncKcEMjzwGYE,29
121
121
  cornflow/shared/compress.py,sha256=pohQaGs1xbH8CN6URIH6BAHA--pFq7Hmjz8oI3c3B5c,1347
122
- cornflow/shared/const.py,sha256=nRZElCjbuJIpjzVlCfZjTN4mAbqDTXIyAbSMlkNL3n8,3440
122
+ cornflow/shared/const.py,sha256=ve66GYTgHppnO-oZu0LQpJq-ZjC6xAAJLVgE91Z7jiA,3147
123
123
  cornflow/shared/email.py,sha256=QNDDMv86LZObkevSCyUbLQeR2UD3zWScPIr82NDzYHQ,3437
124
124
  cornflow/shared/exceptions.py,sha256=tjXd4Hl-QPJviE2NviapS1rwd2NImFd3vMzmp6OTg28,6911
125
125
  cornflow/shared/licenses.py,sha256=Lc71Jw2NxVTFWtoXdQ9wJX_o3BDfYg1xVoehDXvnCkQ,1328
@@ -129,48 +129,48 @@ cornflow/shared/utils.py,sha256=g2ZsD3SwsqIHXZ7GWVAVB0F9gX7mT9dQkPgR2Ahsh6M,860
129
129
  cornflow/shared/utils_tables.py,sha256=A7bjpt7Metkb0FP7tKXMqOkak2fgi3O9dejYvoJBpb0,2236
130
130
  cornflow/shared/validators.py,sha256=aFKAAJ2diElUA8WdDyCcXJI6r3FV7HFVzoOTC6t4f8Y,4803
131
131
  cornflow/shared/authentication/__init__.py,sha256=cJIChk5X6hbA_16usEvfHr8g4JDFI6WKo0GPVOOiYHA,137
132
- cornflow/shared/authentication/auth.py,sha256=VDRQaP9Oarg2i66CPAAQgvhw4uY1Un1SgTAnoMGa_Jc,18800
132
+ cornflow/shared/authentication/auth.py,sha256=oCWW3cUxaKYgGi-4--m4sYVBr4T5MzsR_fBQ3bxRIsM,16092
133
133
  cornflow/shared/authentication/decorators.py,sha256=_QpwOU1kYzpaK85Dl0Btdj5hG8Ps47PFgySp_gqhlgk,1276
134
134
  cornflow/shared/authentication/ldap.py,sha256=QfdC2X_ZMcIJabKC5pYWDGMhS5pIOJJvdZXuuiruq-M,4853
135
135
  cornflow/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
- cornflow/tests/const.py,sha256=_5BYFGN42Xg0PXMR8UU5DBL6dYmYn5rgRBgPyptrKso,2499
136
+ cornflow/tests/const.py,sha256=x8AfNOHHeU-XWkz3W_wGYidaJ4f6TXokveTR4K4cqfw,2561
137
137
  cornflow/tests/custom_liveServer.py,sha256=I_0YNrcKIwVmRov3zCQMWwcCWkMe5V246Hpa4gS8AZE,3079
138
- cornflow/tests/custom_test_case.py,sha256=X1j-cy9QKhF4W6_7jcJsTm-0Jn6lluq6gj-g126dFpQ,35945
138
+ cornflow/tests/custom_test_case.py,sha256=gW6S0qwNtMWli-5ZCYzUzkjah3QiybKUJcJXrdR3JLw,37919
139
139
  cornflow/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
140
  cornflow/tests/integration/test_commands.py,sha256=FZcoEM-05D4MBMe0L0V-0sxk_L0zMbzQxb9UCd7iBe0,695
141
141
  cornflow/tests/integration/test_cornflowclient.py,sha256=ioAQmQKWW6mXVJhdF4LECZcGIOa_N0xPkFaGWGtxOO8,20963
142
142
  cornflow/tests/ldap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
143
  cornflow/tests/ldap/test_ldap_authentication.py,sha256=6Gu1WkF7MQmcV_10IJkpo2qEloZZ9zjpV18ANDD0HRw,4286
144
144
  cornflow/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
- cornflow/tests/unit/test_actions.py,sha256=Lgr_HYVLQ7PnAapC7Sz3oTrv0GWGva_6TAVMi6pERK0,3167
146
- cornflow/tests/unit/test_alarms.py,sha256=GDqCszPgpyEgJ-NZsXWrNid4tzoOywVdPUCYsR_mV5M,2687
147
- cornflow/tests/unit/test_apiview.py,sha256=ws74KU4O1VvKWsgLeFFpgDJxrTFf0cvB4NBX6Gaq7vw,3613
145
+ 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_apiview.py,sha256=03M1GsQRVK7zqmslhOJXr4lLDLY2gMAgg86nk1lyaKU,7620
148
148
  cornflow/tests/unit/test_application.py,sha256=ZVmTQDUOkPRxHqt6mWU9G_lQ3jJNMJR0cx7IkLMFGrU,1715
149
- cornflow/tests/unit/test_cases.py,sha256=KnkvLsEOZXvosuE2fH8_i6iETlvWF3u04363rmmj8mM,38089
150
- cornflow/tests/unit/test_cli.py,sha256=0l1_fYvJg-f_wA1SFgtMTzdBRy6uLhp58xWkNIR-tXQ,18602
149
+ cornflow/tests/unit/test_cases.py,sha256=1EvabDK08K0CovXvReLCfXiO6n_MXdNcwuCrGPbTVw8,37708
150
+ cornflow/tests/unit/test_cli.py,sha256=E2w-Lzgx_k__0mYwlbg2z80_z9nwPZKI0CbgyGmpQRY,18775
151
151
  cornflow/tests/unit/test_commands.py,sha256=kvO8Vn60rj3WBG2oXw7NpDSEYoGLNe806txbJPhtNJo,14722
152
- cornflow/tests/unit/test_dags.py,sha256=-QSQpdQZywGTnCRxhpoe9ilT0D0BLQRfnh_OMD9tx0Q,13401
152
+ cornflow/tests/unit/test_dags.py,sha256=XsOi5bBJQdQz3DmYAVJf1myoAsRyBBdmku-xBr0Bku0,13386
153
153
  cornflow/tests/unit/test_data_checks.py,sha256=6s50d1iuRTUcAYn14oEcRS39ZZ6E9ussU4YpkpYhtC4,8612
154
154
  cornflow/tests/unit/test_example_data.py,sha256=D-Tgnqw7NZlnBXaDcUU0reNhAca5JlJP2Sdn3KdS4Sw,4127
155
155
  cornflow/tests/unit/test_executions.py,sha256=_hIaiZri7Blyx4DYhBDHh-0peU1HQh66RSPqQJFveE8,17501
156
156
  cornflow/tests/unit/test_generate_from_schema.py,sha256=L1EdnASbDJ8SjrX1V4WnUKKwV0sRTwVnNYnxSpyeSeQ,15376
157
157
  cornflow/tests/unit/test_health.py,sha256=0E0HXMb63_Z8drbLZdxnJwtTbQyaZS9ZEHut6qsDbh8,1033
158
- cornflow/tests/unit/test_instances.py,sha256=RaD9Tue2HODKThBNhciu6krdIvrauDLxOq4Y6a_z8DU,10573
159
- cornflow/tests/unit/test_instances_file.py,sha256=zXxSlOM_MMkFvpWNX-iatD40xoIAOGQkinCLf1txb0M,1986
160
- cornflow/tests/unit/test_licenses.py,sha256=jgnfE4UMFooGn44HK_KspJXIpmLjUpK_WgsBBeTO5eI,1534
161
- cornflow/tests/unit/test_log_in.py,sha256=FA08e221NhsFTdLV0n0BMf6SB9bZ2zJppBi7xQ9GlNg,16440
158
+ cornflow/tests/unit/test_instances.py,sha256=Mf9jijQOcDE3ylPfMTnVRocRegcugEdCnoMCqSmKKqQ,11083
159
+ cornflow/tests/unit/test_instances_file.py,sha256=sbodxnuoT7n7jdELz-wpVXWt76E5UzUrQYyVpvnfbco,1986
160
+ cornflow/tests/unit/test_licenses.py,sha256=oj1YdqdxzEdRtxyQiFmRyXyvLzNbl6BeiGCCZH_Y42c,1534
161
+ cornflow/tests/unit/test_log_in.py,sha256=Wi9bpHC7TsJ4BcjBUL-YGXfS5ZrqmA2bCnhnwyRVEFc,18107
162
162
  cornflow/tests/unit/test_main_alarms.py,sha256=y--A4Ap2X38TCCRgbimzaZ-QvnTqZY8KHCv7C8kTTwc,2060
163
- cornflow/tests/unit/test_permissions.py,sha256=4mLj3GI0Bvhy927eXu_RyAmK8i2XD7raYc6W8lyAO04,8782
164
- cornflow/tests/unit/test_roles.py,sha256=xZ3TohL_sv1ZBPvHv_nnYSsKEhBlrzIchx9soaTb5Ow,16581
163
+ cornflow/tests/unit/test_permissions.py,sha256=Jd-4PtqBcWGrSZAuTlJD82qE65D9ZtGWBM6sJY1f_yA,8782
164
+ cornflow/tests/unit/test_roles.py,sha256=1-EON_JsPAM3sVL8AUfgJYLLfb0s1FXL8LJS4nilF-g,18166
165
165
  cornflow/tests/unit/test_schema_from_models.py,sha256=7IfycOGO3U06baX8I-OPJfu-3ZAn5cv8RCdj9wvalMk,4421
166
166
  cornflow/tests/unit/test_schemas.py,sha256=6SpkeYsS3oWntUZEF3GldLqmNa-hpxg-WrKJVTgc-B4,7468
167
167
  cornflow/tests/unit/test_sign_up.py,sha256=-i6VO9z1FwqRHFvaSrpWAzOZx6qa8mHUEmmsjuMXjn8,3481
168
- cornflow/tests/unit/test_tables.py,sha256=dY55YgaCkyqwJnqn0LbZHNeXBoL4ZxXWwKkCoTF4WVE,8947
169
- cornflow/tests/unit/test_token.py,sha256=OEVPgG8swSMkUbuGJGfGF5Z27utMLICn1eIyma1cM9E,3760
170
- cornflow/tests/unit/test_users.py,sha256=WfaMcybPpR7rspXyvzHGgw25p751hMPAV0DOp_caSPM,22430
168
+ cornflow/tests/unit/test_tables.py,sha256=7lZsdun8_SWvYO-6ezQeuTxRat_fyP9vCfXoU7zvHBU,8947
169
+ cornflow/tests/unit/test_token.py,sha256=PZ11b46UCQpCESsRiAPhpgWkGAsAwKCVNxVQai_kxXM,4199
170
+ cornflow/tests/unit/test_users.py,sha256=N5tcF5nSncD0F_ZlBxGuS87p6kNS4hUzRLr3_AcnK-o,22802
171
171
  cornflow/tests/unit/tools.py,sha256=ag3sWv2WLi498R1GL5AOUnXqSsszD3UugzLZLC5NqAw,585
172
- cornflow-1.1.5.dist-info/METADATA,sha256=MRtOwHj41Ls5zLte8PjpFhekW3156LX9bOTKX0KyA3U,9494
173
- cornflow-1.1.5.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
174
- cornflow-1.1.5.dist-info/entry_points.txt,sha256=q9cPKAFBsmHkERCqQ2JcOTM-tVBLHTl-DGxwCXowAWM,46
175
- cornflow-1.1.5.dist-info/top_level.txt,sha256=Qj9kLFJW1PLb-ZV2s_aCkQ-Wi5W6KC6fFR-LTBrx-rU,24
176
- cornflow-1.1.5.dist-info/RECORD,,
172
+ cornflow-1.2.0.dist-info/METADATA,sha256=6Masd6E2TQU8cPeB82r4a9_Eh71z9IK6lrb_J-p9L4k,9527
173
+ cornflow-1.2.0.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
174
+ cornflow-1.2.0.dist-info/entry_points.txt,sha256=q9cPKAFBsmHkERCqQ2JcOTM-tVBLHTl-DGxwCXowAWM,46
175
+ cornflow-1.2.0.dist-info/top_level.txt,sha256=Qj9kLFJW1PLb-ZV2s_aCkQ-Wi5W6KC6fFR-LTBrx-rU,24
176
+ cornflow-1.2.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (76.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5