cornflow 1.0.11a1__py3-none-any.whl → 1.1.0a2__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.
- cornflow/cli/service.py +4 -0
- cornflow/commands/__init__.py +1 -1
- cornflow/commands/schemas.py +31 -0
- cornflow/config.py +6 -0
- cornflow/endpoints/__init__.py +15 -20
- cornflow/endpoints/example_data.py +64 -13
- cornflow/endpoints/execution.py +2 -1
- cornflow/endpoints/login.py +16 -13
- cornflow/endpoints/user.py +2 -2
- cornflow/migrations/versions/991b98e24225_.py +33 -0
- cornflow/models/user.py +4 -0
- cornflow/schemas/example_data.py +7 -2
- cornflow/schemas/execution.py +8 -1
- cornflow/schemas/solution_log.py +11 -5
- cornflow/schemas/user.py +3 -0
- cornflow/shared/authentication/auth.py +1 -1
- cornflow/shared/licenses.py +17 -54
- cornflow/tests/custom_test_case.py +17 -3
- cornflow/tests/integration/test_cornflowclient.py +20 -14
- cornflow/tests/unit/test_cases.py +95 -6
- cornflow/tests/unit/test_cli.py +5 -5
- cornflow/tests/unit/test_dags.py +48 -1
- cornflow/tests/unit/test_example_data.py +85 -12
- cornflow/tests/unit/test_executions.py +98 -8
- cornflow/tests/unit/test_instances.py +43 -5
- cornflow/tests/unit/test_main_alarms.py +8 -8
- cornflow/tests/unit/test_schemas.py +12 -1
- cornflow/tests/unit/test_token.py +17 -0
- cornflow/tests/unit/test_users.py +16 -0
- {cornflow-1.0.11a1.dist-info → cornflow-1.1.0a2.dist-info}/METADATA +2 -2
- {cornflow-1.0.11a1.dist-info → cornflow-1.1.0a2.dist-info}/RECORD +34 -33
- {cornflow-1.0.11a1.dist-info → cornflow-1.1.0a2.dist-info}/WHEEL +0 -0
- {cornflow-1.0.11a1.dist-info → cornflow-1.1.0a2.dist-info}/entry_points.txt +0 -0
- {cornflow-1.0.11a1.dist-info → cornflow-1.1.0a2.dist-info}/top_level.txt +0 -0
@@ -43,6 +43,21 @@ class TestExecutionsListEndpoint(BaseTestCases.ListFilters):
|
|
43
43
|
self.bad_payload = load_file_fk(BAD_EXECUTION_PATH)
|
44
44
|
self.payloads = [load_file_fk(f) for f in EXECUTIONS_LIST]
|
45
45
|
self.solution = load_file_fk(EXECUTION_SOLUTION_PATH)
|
46
|
+
self.keys_to_check = [
|
47
|
+
"data_hash",
|
48
|
+
"created_at",
|
49
|
+
"config",
|
50
|
+
"state",
|
51
|
+
"message",
|
52
|
+
"schema",
|
53
|
+
"description",
|
54
|
+
"id",
|
55
|
+
"user_id",
|
56
|
+
"log",
|
57
|
+
"instance_id",
|
58
|
+
"name",
|
59
|
+
"indicators",
|
60
|
+
]
|
46
61
|
|
47
62
|
def test_new_execution(self):
|
48
63
|
self.create_new_row(self.url, self.model, payload=self.payload)
|
@@ -115,13 +130,13 @@ class TestExecutionsListEndpoint(BaseTestCases.ListFilters):
|
|
115
130
|
self.assertTrue("error" in response.json)
|
116
131
|
|
117
132
|
def test_get_executions(self):
|
118
|
-
self.get_rows(self.url, self.payloads)
|
133
|
+
self.get_rows(self.url, self.payloads, keys_to_check=self.keys_to_check)
|
119
134
|
|
120
135
|
def test_get_no_executions(self):
|
121
136
|
self.get_no_rows(self.url)
|
122
137
|
|
123
138
|
def test_get_executions_superadmin(self):
|
124
|
-
self.get_rows(self.url, self.payloads)
|
139
|
+
self.get_rows(self.url, self.payloads, keys_to_check=self.keys_to_check)
|
125
140
|
token = self.create_service_user()
|
126
141
|
rows = self.client.get(
|
127
142
|
self.url, follow_redirects=True, headers=self.get_header_with_auth(token)
|
@@ -275,15 +290,42 @@ class TestExecutionsDetailEndpoint(
|
|
275
290
|
|
276
291
|
def test_create_delete_instance_load(self):
|
277
292
|
idx = self.create_new_row(self.url + "?run=0", self.model, self.payload)
|
293
|
+
keys_to_check = [
|
294
|
+
"message",
|
295
|
+
"id",
|
296
|
+
"schema",
|
297
|
+
"data_hash",
|
298
|
+
"config",
|
299
|
+
"instance_id",
|
300
|
+
"user_id",
|
301
|
+
"indicators",
|
302
|
+
"description",
|
303
|
+
"name",
|
304
|
+
"created_at",
|
305
|
+
"state",
|
306
|
+
]
|
278
307
|
execution = self.get_one_row(
|
279
|
-
self.url + idx,
|
308
|
+
self.url + idx,
|
309
|
+
payload={**self.payload, **dict(id=idx)},
|
310
|
+
keys_to_check=keys_to_check,
|
280
311
|
)
|
281
312
|
self.delete_row(self.url + idx + "/")
|
313
|
+
keys_to_check = [
|
314
|
+
"id",
|
315
|
+
"schema",
|
316
|
+
"description",
|
317
|
+
"name",
|
318
|
+
"user_id",
|
319
|
+
"executions",
|
320
|
+
"created_at",
|
321
|
+
"data_hash",
|
322
|
+
]
|
282
323
|
instance = self.get_one_row(
|
283
324
|
INSTANCE_URL + execution["instance_id"] + "/",
|
284
325
|
payload={},
|
285
326
|
expected_status=200,
|
286
327
|
check_payload=False,
|
328
|
+
keys_to_check=keys_to_check,
|
287
329
|
)
|
288
330
|
executions = [execution["id"] for execution in instance["executions"]]
|
289
331
|
self.assertFalse(idx in executions)
|
@@ -351,20 +393,41 @@ class TestExecutionsDataEndpoint(TestExecutionsDetailEndpointMock):
|
|
351
393
|
super().setUp()
|
352
394
|
self.response_items = {"id", "name", "data"}
|
353
395
|
self.items_to_check = ["name"]
|
396
|
+
self.keys_to_check = [
|
397
|
+
"created_at",
|
398
|
+
"checks",
|
399
|
+
"instance_id",
|
400
|
+
"schema",
|
401
|
+
"data",
|
402
|
+
"user_id",
|
403
|
+
"message",
|
404
|
+
"data_hash",
|
405
|
+
"log",
|
406
|
+
"config",
|
407
|
+
"description",
|
408
|
+
"state",
|
409
|
+
"name",
|
410
|
+
"id",
|
411
|
+
]
|
354
412
|
|
355
413
|
def test_get_one_execution(self):
|
356
414
|
idx = self.create_new_row(EXECUTION_URL_NORUN, self.model, self.payload)
|
357
415
|
self.url = EXECUTION_URL + idx + "/data/"
|
358
416
|
payload = dict(self.payload)
|
359
417
|
payload["id"] = idx
|
360
|
-
self.get_one_row(self.url, payload)
|
418
|
+
self.get_one_row(self.url, payload, keys_to_check=self.keys_to_check)
|
361
419
|
|
362
420
|
def test_get_one_execution_superadmin(self):
|
363
421
|
idx = self.create_new_row(EXECUTION_URL_NORUN, self.model, self.payload)
|
364
422
|
payload = dict(self.payload)
|
365
423
|
payload["id"] = idx
|
366
424
|
token = self.create_service_user()
|
367
|
-
self.get_one_row(
|
425
|
+
self.get_one_row(
|
426
|
+
EXECUTION_URL + idx + "/data/",
|
427
|
+
payload,
|
428
|
+
token=token,
|
429
|
+
keys_to_check=self.keys_to_check,
|
430
|
+
)
|
368
431
|
|
369
432
|
|
370
433
|
class TestExecutionsLogEndpoint(TestExecutionsDetailEndpointMock):
|
@@ -372,19 +435,42 @@ class TestExecutionsLogEndpoint(TestExecutionsDetailEndpointMock):
|
|
372
435
|
super().setUp()
|
373
436
|
self.response_items = {"id", "name", "log", "indicators"}
|
374
437
|
self.items_to_check = ["name"]
|
438
|
+
self.keys_to_check = [
|
439
|
+
"created_at",
|
440
|
+
"id",
|
441
|
+
"log_text",
|
442
|
+
"instance_id",
|
443
|
+
"state",
|
444
|
+
"message",
|
445
|
+
"description",
|
446
|
+
"data_hash",
|
447
|
+
"name",
|
448
|
+
"log",
|
449
|
+
"schema",
|
450
|
+
"user_id",
|
451
|
+
"config",
|
452
|
+
"indicators",
|
453
|
+
]
|
375
454
|
|
376
455
|
def test_get_one_execution(self):
|
377
456
|
idx = self.create_new_row(EXECUTION_URL_NORUN, self.model, self.payload)
|
378
457
|
payload = dict(self.payload)
|
379
458
|
payload["id"] = idx
|
380
|
-
self.get_one_row(
|
459
|
+
self.get_one_row(
|
460
|
+
EXECUTION_URL + idx + "/log/", payload, keys_to_check=self.keys_to_check
|
461
|
+
)
|
381
462
|
|
382
463
|
def test_get_one_execution_superadmin(self):
|
383
464
|
idx = self.create_new_row(EXECUTION_URL_NORUN, self.model, self.payload)
|
384
465
|
payload = dict(self.payload)
|
385
466
|
payload["id"] = idx
|
386
467
|
token = self.create_service_user()
|
387
|
-
self.get_one_row(
|
468
|
+
self.get_one_row(
|
469
|
+
EXECUTION_URL + idx + "/log/",
|
470
|
+
payload,
|
471
|
+
token=token,
|
472
|
+
keys_to_check=self.keys_to_check,
|
473
|
+
)
|
388
474
|
|
389
475
|
|
390
476
|
class TestExecutionsStatusEndpoint(TestExecutionsDetailEndpointMock):
|
@@ -400,8 +486,12 @@ class TestExecutionsStatusEndpoint(TestExecutionsDetailEndpointMock):
|
|
400
486
|
idx = self.create_new_row(EXECUTION_URL, self.model, self.payload)
|
401
487
|
payload = dict(self.payload)
|
402
488
|
payload["id"] = idx
|
489
|
+
keys_to_check = ["state", "message", "id", "data_hash"]
|
403
490
|
data = self.get_one_row(
|
404
|
-
EXECUTION_URL + idx + "/status/",
|
491
|
+
EXECUTION_URL + idx + "/status/",
|
492
|
+
payload,
|
493
|
+
check_payload=False,
|
494
|
+
keys_to_check=keys_to_check,
|
405
495
|
)
|
406
496
|
self.assertEqual(data["state"], 1)
|
407
497
|
|
@@ -36,6 +36,15 @@ class TestInstancesListEndpoint(BaseTestCases.ListFilters):
|
|
36
36
|
|
37
37
|
self.payload = load_file(INSTANCE_PATH)
|
38
38
|
self.payloads = [load_file(f) for f in INSTANCES_LIST]
|
39
|
+
self.keys_to_check = [
|
40
|
+
"data_hash",
|
41
|
+
"created_at",
|
42
|
+
"schema",
|
43
|
+
"description",
|
44
|
+
"id",
|
45
|
+
"user_id",
|
46
|
+
"name",
|
47
|
+
]
|
39
48
|
|
40
49
|
def test_new_instance(self):
|
41
50
|
self.create_new_row(self.url, self.model, self.payload)
|
@@ -65,10 +74,10 @@ class TestInstancesListEndpoint(BaseTestCases.ListFilters):
|
|
65
74
|
self.assertTrue("error" in response.json)
|
66
75
|
|
67
76
|
def test_get_instances(self):
|
68
|
-
self.get_rows(self.url, self.payloads)
|
77
|
+
self.get_rows(self.url, self.payloads, keys_to_check=self.keys_to_check)
|
69
78
|
|
70
79
|
def test_get_instances_superadmin(self):
|
71
|
-
self.get_rows(self.url, self.payloads)
|
80
|
+
self.get_rows(self.url, self.payloads, keys_to_check=self.keys_to_check)
|
72
81
|
token = self.create_service_user()
|
73
82
|
rows = self.client.get(
|
74
83
|
self.url, follow_redirects=True, headers=self.get_header_with_auth(token)
|
@@ -173,7 +182,20 @@ class TestInstancesDataEndpoint(TestInstancesDetailEndpointBase):
|
|
173
182
|
def test_get_one_instance(self):
|
174
183
|
idx = self.create_new_row(self.url, self.model, self.payload)
|
175
184
|
payload = {**self.payload, **dict(id=idx)}
|
176
|
-
|
185
|
+
keys_to_check = [
|
186
|
+
"data",
|
187
|
+
"id",
|
188
|
+
"schema",
|
189
|
+
"data_hash",
|
190
|
+
"user_id",
|
191
|
+
"description",
|
192
|
+
"name",
|
193
|
+
"checks",
|
194
|
+
"created_at",
|
195
|
+
]
|
196
|
+
result = self.get_one_row(
|
197
|
+
INSTANCE_URL + idx + "/data/", payload, keys_to_check=keys_to_check
|
198
|
+
)
|
177
199
|
dif = self.response_items.symmetric_difference(result.keys())
|
178
200
|
self.assertEqual(len(dif), 0)
|
179
201
|
|
@@ -208,6 +230,7 @@ class TestInstancesDataEndpoint(TestInstancesDetailEndpointBase):
|
|
208
230
|
expected_status=404,
|
209
231
|
check_payload=False,
|
210
232
|
token=token,
|
233
|
+
keys_to_check=["error"],
|
211
234
|
)
|
212
235
|
|
213
236
|
def test_get_none_instance_planner_all(self):
|
@@ -232,8 +255,23 @@ class TestAccessPlannerUsers(CustomTestCase):
|
|
232
255
|
idx = self.create_new_row(self.url, self.model, self.payload)
|
233
256
|
token = self.create_planner()
|
234
257
|
payload = {**self.payload, **dict(id=idx)}
|
235
|
-
|
236
|
-
|
258
|
+
keys_to_check = [
|
259
|
+
"data",
|
260
|
+
"id",
|
261
|
+
"schema",
|
262
|
+
"data_hash",
|
263
|
+
"user_id",
|
264
|
+
"description",
|
265
|
+
"name",
|
266
|
+
"checks",
|
267
|
+
"created_at",
|
268
|
+
]
|
269
|
+
self.get_one_row(
|
270
|
+
INSTANCE_URL + idx + "/data/",
|
271
|
+
payload,
|
272
|
+
token=token,
|
273
|
+
keys_to_check=keys_to_check,
|
274
|
+
)
|
237
275
|
|
238
276
|
def test_get_all_instance_planner(self):
|
239
277
|
# Test planner users can access objects of other users
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"""
|
2
2
|
|
3
3
|
"""
|
4
|
+
|
4
5
|
import json
|
5
6
|
|
6
7
|
# Imports from internal modules
|
@@ -19,7 +20,7 @@ class TestMainAlarmsEndpoint(CustomTestCase):
|
|
19
20
|
payload = {
|
20
21
|
"name": "Alarm 1",
|
21
22
|
"description": "Description Alarm 1",
|
22
|
-
"criticality": 1
|
23
|
+
"criticality": 1,
|
23
24
|
}
|
24
25
|
self.id_alarm = self.client.post(
|
25
26
|
ALARMS_URL,
|
@@ -32,7 +33,7 @@ class TestMainAlarmsEndpoint(CustomTestCase):
|
|
32
33
|
payload = {
|
33
34
|
"message": "Message Main Alarm 1",
|
34
35
|
"criticality": 1,
|
35
|
-
"id_alarm": self.id_alarm
|
36
|
+
"id_alarm": self.id_alarm,
|
36
37
|
}
|
37
38
|
self.create_new_row(self.url, self.model, payload)
|
38
39
|
|
@@ -41,23 +42,22 @@ class TestMainAlarmsEndpoint(CustomTestCase):
|
|
41
42
|
{
|
42
43
|
"message": "Message Main Alarm 1",
|
43
44
|
"criticality": 1,
|
44
|
-
"id_alarm": self.id_alarm
|
45
|
+
"id_alarm": self.id_alarm,
|
45
46
|
},
|
46
47
|
{
|
47
48
|
"message": "Message Main Alarm 2",
|
48
49
|
"criticality": 2,
|
49
50
|
"schema": "solve_model_dag",
|
50
|
-
"id_alarm": self.id_alarm
|
51
|
+
"id_alarm": self.id_alarm,
|
51
52
|
},
|
52
53
|
]
|
54
|
+
keys_to_check = ["schema", "id_alarm", "criticality", "id", "message"]
|
53
55
|
rows = self.get_rows(
|
54
|
-
self.url,
|
55
|
-
data,
|
56
|
-
check_data=False
|
56
|
+
self.url, data, check_data=False, keys_to_check=keys_to_check
|
57
57
|
)
|
58
58
|
rows_data = list(rows.json)
|
59
59
|
for i in range(len(data)):
|
60
60
|
for key in self.get_keys_to_check(data[i]):
|
61
61
|
self.assertIn(key, rows_data[i])
|
62
62
|
if key in data[i]:
|
63
|
-
self.assertEqual(rows_data[i][key], data[i][key])
|
63
|
+
self.assertEqual(rows_data[i][key], data[i][key])
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"""
|
2
2
|
|
3
3
|
"""
|
4
|
+
|
4
5
|
# General imports
|
5
6
|
import unittest
|
6
7
|
|
@@ -159,11 +160,20 @@ class TestSchemaEndpoint(CustomTestCase):
|
|
159
160
|
self.schema_name = "solve_model_dag"
|
160
161
|
|
161
162
|
def test_get_schema(self):
|
163
|
+
keys_to_check = [
|
164
|
+
"solution_checks",
|
165
|
+
"instance_checks",
|
166
|
+
"config",
|
167
|
+
"solution",
|
168
|
+
"name",
|
169
|
+
"instance",
|
170
|
+
]
|
162
171
|
schemas = self.get_one_row(
|
163
172
|
self.url + "{}/".format(self.schema_name),
|
164
173
|
{},
|
165
174
|
expected_status=200,
|
166
175
|
check_payload=False,
|
176
|
+
keys_to_check=keys_to_check,
|
167
177
|
)
|
168
178
|
self.assertIn("instance", schemas)
|
169
179
|
self.assertIn("solution", schemas)
|
@@ -178,7 +188,7 @@ class TestNewSchemaEndpointOpen(CustomTestCase):
|
|
178
188
|
self.url = SCHEMA_URL
|
179
189
|
|
180
190
|
def test_get_all_schemas(self):
|
181
|
-
schemas = self.get_one_row(self.url, {}, 200, False)
|
191
|
+
schemas = self.get_one_row(self.url, {}, 200, False, keys_to_check=["name"])
|
182
192
|
dags = [{"name": dag} for dag in ["solve_model_dag", "gc", "timer"]]
|
183
193
|
|
184
194
|
self.assertEqual(dags, schemas)
|
@@ -205,6 +215,7 @@ class TestNewSchemaEndpointNotOpen(CustomTestCase):
|
|
205
215
|
{},
|
206
216
|
expected_status=403,
|
207
217
|
check_payload=False,
|
218
|
+
keys_to_check=["error"],
|
208
219
|
)
|
209
220
|
self.assertEqual(
|
210
221
|
{"error": "User does not have permission to access this dag"}, schema
|
@@ -41,6 +41,23 @@ class TestCheckToken(CheckTokenTestCase.TokenEndpoint):
|
|
41
41
|
self.assertEqual(200, self.response.status_code)
|
42
42
|
self.assertEqual(1, self.response.json["valid"])
|
43
43
|
|
44
|
+
def test_token_duration(self):
|
45
|
+
durations = [0.000000000001, 1]
|
46
|
+
asserts = [0, 1]
|
47
|
+
payload = self.data
|
48
|
+
for i in range(2):
|
49
|
+
current_app.config["TOKEN_DURATION"] = durations[i]
|
50
|
+
self.token = self.client.post(
|
51
|
+
LOGIN_URL,
|
52
|
+
data=json.dumps(payload),
|
53
|
+
follow_redirects=True,
|
54
|
+
headers={"Content-Type": "application/json"},
|
55
|
+
).json["token"]
|
56
|
+
|
57
|
+
self.get_check_token()
|
58
|
+
self.assertEqual(200, self.response.status_code)
|
59
|
+
self.assertEqual(asserts[i], self.response.json["valid"])
|
60
|
+
|
44
61
|
def test_get_invalid_token(self):
|
45
62
|
self.token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2Mzk4MjAwNzMsImlhdCI6MTYzOTczMzY3Mywic3ViIjoxfQ"
|
46
63
|
self.token += ".KzAYFDSrAJoCrnxGqKL2v6fE3oxT2muBgYztF1wcuN8"
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import json
|
2
2
|
|
3
|
+
from flask import current_app
|
3
4
|
from flask_testing import TestCase
|
5
|
+
from datetime import datetime, timedelta
|
4
6
|
from cornflow.app import create_app
|
5
7
|
from cornflow.commands.access import access_init_command
|
6
8
|
from cornflow.commands.dag import register_deployed_dags_command_test
|
@@ -359,6 +361,20 @@ class TestUserEndpoint(TestCase):
|
|
359
361
|
self.assertEqual(200, response.status_code)
|
360
362
|
self.assertIsNotNone(response.json["token"])
|
361
363
|
|
364
|
+
def test_change_password_rotation(self):
|
365
|
+
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)
|
368
|
+
response = self.log_in(self.planner)
|
369
|
+
self.assertEqual(True, response.json["change_password"])
|
370
|
+
|
371
|
+
payload = {"password": "Newtestpassword1!"}
|
372
|
+
self.modify_info(self.planner, self.planner, payload)
|
373
|
+
self.planner.update(payload)
|
374
|
+
print(self.planner)
|
375
|
+
response = self.log_in(self.planner)
|
376
|
+
self.assertEqual(False, response.json["change_password"])
|
377
|
+
|
362
378
|
|
363
379
|
class TestUserModel(TestCase):
|
364
380
|
def create_app(self):
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: cornflow
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.1.0a2
|
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
|
@@ -15,7 +15,7 @@ Requires-Python: >=3.8
|
|
15
15
|
Requires-Dist: alembic ==1.9.2
|
16
16
|
Requires-Dist: apispec <=6.2.0
|
17
17
|
Requires-Dist: click <=8.1.3
|
18
|
-
Requires-Dist: cornflow-client
|
18
|
+
Requires-Dist: cornflow-client ==1.1.0a2
|
19
19
|
Requires-Dist: cryptography <=42.0.5
|
20
20
|
Requires-Dist: disposable-email-domains >=0.0.86
|
21
21
|
Requires-Dist: Flask ==2.3.2
|
@@ -6,7 +6,7 @@ airflow_config/plugins/XCom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
|
|
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
8
|
cornflow/app.py,sha256=3tj9aMOLFzBGS4QFPD0Zt2A7N0C5lssvy8NZ-G4sU9E,6997
|
9
|
-
cornflow/config.py,sha256=
|
9
|
+
cornflow/config.py,sha256=CGG2BMn8l1gCB0Okk-8IRrtqiRIUK09fq3xO397ZHig,4738
|
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
|
@@ -16,7 +16,7 @@ cornflow/cli/migrations.py,sha256=Stc8H99rG8vgo3yRJcck11zBY_EA4WqyVybglfl8zJE,16
|
|
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=
|
19
|
+
cornflow/cli/service.py,sha256=7_va2Gv1qySldWtTHLL0b_Tg6tuYzAVduyeKmoiBgVs,9292
|
20
20
|
cornflow/cli/users.py,sha256=nPnu8rQNLtwmeXLwYtJ_hjlsa_24XOnQLgBJRBP9bJw,2104
|
21
21
|
cornflow/cli/utils.py,sha256=0tF41gTt6LL9XGOizTQg2GXuOXbqLg6gapCr-HWjJ0Q,733
|
22
22
|
cornflow/cli/views.py,sha256=Xyx2l-Sm7panxQEfR3qksCIUoqF7woMKsYgZALkxUXM,636
|
@@ -27,29 +27,29 @@ cornflow/cli/tools/models_tools.py,sha256=GGqO8fmksA37jhP_xm1dMMAJRZ8_k9j-0V2J05
|
|
27
27
|
cornflow/cli/tools/schema_generator.py,sha256=3zfxQUej8BwPwmrGttjpK0R_oSnXIJQWOqoott-E78E,7557
|
28
28
|
cornflow/cli/tools/schemas_tools.py,sha256=56VQfsUC6b1Hm5Ran1X6X4QF4HfTxrcOjWlGUCL7BAw,2245
|
29
29
|
cornflow/cli/tools/tools.py,sha256=Qm0X-wHN12vXYJNRHONGjqDZewwXyXy4R_j4UT_XMLs,929
|
30
|
-
cornflow/commands/__init__.py,sha256=
|
30
|
+
cornflow/commands/__init__.py,sha256=_7mi2Sd8bnaSujU-L78z8Zrswz68NJ2xoocYpsEYmPM,544
|
31
31
|
cornflow/commands/access.py,sha256=NTZJFF9la8TDuMcD_ISQtJTj-wtM2p1dddokQJHtkj0,748
|
32
32
|
cornflow/commands/actions.py,sha256=4AwgAmyI6VeaugkISvTlNGrIzMMU_-ZB3MhwDD_CIEA,1544
|
33
33
|
cornflow/commands/cleanup.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
34
|
cornflow/commands/dag.py,sha256=KwCQwx9yvmjTG_fOsYKuZJluEYjvLOq014657eu7sPA,3715
|
35
35
|
cornflow/commands/permissions.py,sha256=mDPqiY2r2YXlUg4wmZRoI4GAMVFC6AjNT3kqzPEKUw8,6627
|
36
36
|
cornflow/commands/roles.py,sha256=Oux-UkswkQ74zqaMEJYIEsZpQZGBcGaSahVzx9feAHU,1516
|
37
|
-
cornflow/commands/schemas.py,sha256=
|
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=
|
40
|
+
cornflow/endpoints/__init__.py,sha256=RI-cNRxYFCuYELPdM0kDDgJhopMMX88HJe-ArTTilNM,7346
|
41
41
|
cornflow/endpoints/action.py,sha256=ksHK3F919cjkONLcFV2tUIbG-eZw5XbYkqVjYx9iq5I,1359
|
42
42
|
cornflow/endpoints/alarms.py,sha256=3FN7mosBFP_DcJQxfg1h5_phy755FYESXyQ62XpvFbs,1956
|
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
|
46
46
|
cornflow/endpoints/data_check.py,sha256=ZyYR84IT9snjXxUrQfrlv_RzOec_AYeTsijuHYdLAcA,16496
|
47
|
-
cornflow/endpoints/example_data.py,sha256=
|
48
|
-
cornflow/endpoints/execution.py,sha256=
|
47
|
+
cornflow/endpoints/example_data.py,sha256=1_qAtZfp51N9sU8WCFDZCXOQiOlxCKJjWbXxDOFZ0C8,4372
|
48
|
+
cornflow/endpoints/execution.py,sha256=5SWwgbxBUj_gDU6Yb7Z-iKNakr9vr3g5qU82Bw9y5wQ,27998
|
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=
|
52
|
+
cornflow/endpoints/login.py,sha256=HMPBQm_yEBzPCvBU_UHlOkUYgtWJG5rL9euR8Dzxm0w,7864
|
53
53
|
cornflow/endpoints/main_alarms.py,sha256=GUB-UdnvEFi7n6FGFKO9VtZeZb4Ox3NvBMhB7rdqNyI,2006
|
54
54
|
cornflow/endpoints/meta_resource.py,sha256=eqC6U8IpY65Cbk2WpdphRtE6o5kes2lB4LhezfUB7xI,8471
|
55
55
|
cornflow/endpoints/permission.py,sha256=FpEBIucfUl89UaJ80SC0VR6pFAdqdSsS43SdNkcXWtI,3751
|
@@ -58,7 +58,7 @@ cornflow/endpoints/schemas.py,sha256=lHyvSpPj0x7zVYDlEeRrz_Qqyp6WNimibs5gK4BHpKI
|
|
58
58
|
cornflow/endpoints/signup.py,sha256=4Xle2aTd6fiblb2pFcTaBP3ykXSuXsrc7qD0JjpqeZY,3513
|
59
59
|
cornflow/endpoints/tables.py,sha256=KI4sgkBHdiHbOnIRR_yoZ859ea3rnp_6ji_XvQbwsZ8,3071
|
60
60
|
cornflow/endpoints/token.py,sha256=UEnsNNQAd6lJi2aF972d8uUWNJHT4ZcRr0eYpN458R4,1193
|
61
|
-
cornflow/endpoints/user.py,sha256=
|
61
|
+
cornflow/endpoints/user.py,sha256=FudDlINtgqJqqKaDcxCWEvYuL6QL_bZbK5YjGI0OLO0,11775
|
62
62
|
cornflow/endpoints/user_role.py,sha256=RRV2LvyrkfPvb97bFNAdW4e1j-C8eDlrk-CPFf87IjE,6524
|
63
63
|
cornflow/migrations/README,sha256=JL0NrjOrscPcKgRmQh1R3hlv1_rohDot0TvpmdM27Jk,41
|
64
64
|
cornflow/migrations/alembic.ini,sha256=SjYEmJKzz6K8QfuZWtLJAJWcCKOdRbfUhsVlpgv8ock,857
|
@@ -68,6 +68,7 @@ cornflow/migrations/versions/00757b557b02_.py,sha256=PtFD0nIRBHjpDiCrhudxReI6ej6
|
|
68
68
|
cornflow/migrations/versions/1af47a419bbd_.py,sha256=F6XOkxhojBbOSv3EGiWJvvncSMNAUPy2h5-NV2Gd5ak,1926
|
69
69
|
cornflow/migrations/versions/4aac5e0c6e66_.py,sha256=ecWq38w_1vWpbLqsEkTsPw1tGv88OMt9L8JNZHlu7LI,2200
|
70
70
|
cornflow/migrations/versions/7c3ea5ab5501_.py,sha256=TX9Are_ELRweHeGOo3tV4XAB9cFIVH6LAooCvoNfJxU,1569
|
71
|
+
cornflow/migrations/versions/991b98e24225_.py,sha256=oNDQKQw6SfMdAB9HYV9Vb-haz5dJQo9lp3uJR-K9xYk,834
|
71
72
|
cornflow/migrations/versions/a472b5ad50b7_.py,sha256=RpaLV-eTZmOS4BN53F_o0yG6ZGfmfKIJjrn2x2M6THw,1370
|
72
73
|
cornflow/migrations/versions/c2db9409cb5f_.py,sha256=M6udQ0vaIJXEsGpb31ZqAdU_eDwvbHPvWLvNsGQx7yY,1812
|
73
74
|
cornflow/migrations/versions/c8a6c762e818_.py,sha256=6xqEn2860c7HMTZPjgype1bMMFWDQAD2iHZa2KVdtgg,3574
|
@@ -91,7 +92,7 @@ cornflow/models/main_alarms.py,sha256=9S-Ohr2kYFFWB0HomrpSdDIoUr85Eu1rt90Om_Pa8V
|
|
91
92
|
cornflow/models/meta_models.py,sha256=qeliGdpw0_q0GCeZzansF-09Ay5pueaT-QQPVPZ5aj4,12000
|
92
93
|
cornflow/models/permissions.py,sha256=vPHa0A40e18YLzQEzKk9BrqsDQWfguIlsfrSufmW9dY,2804
|
93
94
|
cornflow/models/role.py,sha256=dEASPw8-aLbRRkoyId2zk7lFTq1twpRPMTkwb0zEOIE,2052
|
94
|
-
cornflow/models/user.py,sha256=
|
95
|
+
cornflow/models/user.py,sha256=podqU5Emhe52ytsUnrBcKShk_jSH_0Em0UXZEAmWgjI,8755
|
95
96
|
cornflow/models/user_role.py,sha256=rr-0S4sV5l6xDQIwd94c3bPepDA50NdStwd3MSzRJbU,4974
|
96
97
|
cornflow/models/view.py,sha256=ajDnvKsm-F1uizk1egaLfZDka3fXF8TXC3zUvkktVIo,2066
|
97
98
|
cornflow/schemas/__init__.py,sha256=ijW3cATETq-SbBCWarRtxLMvU2_oVkaqGbP2gH1KX8o,215
|
@@ -100,8 +101,8 @@ cornflow/schemas/alarms.py,sha256=Y-VQ93jbDLtEv49qkNDHwrhwkG7OzEQ0nceqJCqeScQ,54
|
|
100
101
|
cornflow/schemas/case.py,sha256=OXRsDi_sdB47MQJ59S_1eMjDmLlpUtG7kTFNInV2-cI,2909
|
101
102
|
cornflow/schemas/common.py,sha256=QYuxWcOl4smXFZr_vL07OVgH9H50ZywCrXxycVNr1qA,473
|
102
103
|
cornflow/schemas/dag.py,sha256=0ENA75X9L8YqjJW6ZO1Sb4zE8OxB15_O49_nwA6eAVw,901
|
103
|
-
cornflow/schemas/example_data.py,sha256=
|
104
|
-
cornflow/schemas/execution.py,sha256=
|
104
|
+
cornflow/schemas/example_data.py,sha256=hbE8TJakFqOweHXiA3mduNETM6FCX6xLTiQuH3EkSTc,281
|
105
|
+
cornflow/schemas/execution.py,sha256=GSRHzikVPlhxMdiKrGnTuGfen8_Lf4wSfheJwvcavTs,4718
|
105
106
|
cornflow/schemas/health.py,sha256=D2NsP9i6nA1hLema-bvegrrdH4JY7pZlYxPcqRJOvao,141
|
106
107
|
cornflow/schemas/instance.py,sha256=qr4km0AlAhoNf9G1Il-pfHphT_vAiiLDpv7A9S3FKAw,1870
|
107
108
|
cornflow/schemas/main_alarms.py,sha256=cC1_Vb1dmo_vdZpZQrA7jH-hRCjVtLRy6Z2JFBlTrlo,604
|
@@ -111,9 +112,9 @@ cornflow/schemas/permissions.py,sha256=dgHKXLDyB1-q-Ii7cuHLpovlFPthtEV3mNxRgTe42
|
|
111
112
|
cornflow/schemas/query.py,sha256=lQ6lMy0O6RRQLA-9JtQ95p70yd7vra4cGIbLrYO74GE,984
|
112
113
|
cornflow/schemas/role.py,sha256=lZYoLpA0weuDiFgpk3PWrHYJdljvZ3HEIOS-ISNLcCg,469
|
113
114
|
cornflow/schemas/schemas.py,sha256=vNyOwrchuTT3TMR9Jj07pauSr2sFTM-rfIfiKUycOjo,433
|
114
|
-
cornflow/schemas/solution_log.py,sha256=
|
115
|
+
cornflow/schemas/solution_log.py,sha256=jSutvj0-2RJIqzn7ANLFanAD4jrSDvtgqf6DF6UZBhs,2255
|
115
116
|
cornflow/schemas/tables.py,sha256=6uEmG_ddXVPk-itY0aWms568fKroWzv73DtaQ5aeVng,105
|
116
|
-
cornflow/schemas/user.py,sha256=
|
117
|
+
cornflow/schemas/user.py,sha256=J4mbtQx4JWEvIXB3Ug-qHzNNQss5eFn3BkEImAqC9-o,2169
|
117
118
|
cornflow/schemas/user_role.py,sha256=e5y6RgdZZtLqD-h2B3sa5WokI5-pT78tWw85IG34I74,615
|
118
119
|
cornflow/schemas/view.py,sha256=ctq9Y1TmjrWdyOqgDYeEx7qbbuNLKfSiNOlFTlXmpaw,429
|
119
120
|
cornflow/shared/__init__.py,sha256=1ahcBwWOsSjGI4FEm77JBQjitBdBszOncKcEMjzwGYE,29
|
@@ -121,54 +122,54 @@ cornflow/shared/compress.py,sha256=pohQaGs1xbH8CN6URIH6BAHA--pFq7Hmjz8oI3c3B5c,1
|
|
121
122
|
cornflow/shared/const.py,sha256=nRZElCjbuJIpjzVlCfZjTN4mAbqDTXIyAbSMlkNL3n8,3440
|
122
123
|
cornflow/shared/email.py,sha256=QNDDMv86LZObkevSCyUbLQeR2UD3zWScPIr82NDzYHQ,3437
|
123
124
|
cornflow/shared/exceptions.py,sha256=BNbC5hzAoC9vDQ3NLM9uLqI14nwCEP1AT3UjeFghnY0,6979
|
124
|
-
cornflow/shared/licenses.py,sha256=
|
125
|
+
cornflow/shared/licenses.py,sha256=Lc71Jw2NxVTFWtoXdQ9wJX_o3BDfYg1xVoehDXvnCkQ,1328
|
125
126
|
cornflow/shared/log_config.py,sha256=FM2ajjp2MB4BlFbUHklnWInT7-LLjtrqQ0mo3k_HRmE,621
|
126
127
|
cornflow/shared/query_tools.py,sha256=6yGLCWjv-I2a_ZU4A0IymyJq67fZPZdRcCGOGQQpSXg,1199
|
127
128
|
cornflow/shared/utils.py,sha256=g2ZsD3SwsqIHXZ7GWVAVB0F9gX7mT9dQkPgR2Ahsh6M,860
|
128
129
|
cornflow/shared/utils_tables.py,sha256=A7bjpt7Metkb0FP7tKXMqOkak2fgi3O9dejYvoJBpb0,2236
|
129
130
|
cornflow/shared/validators.py,sha256=aFKAAJ2diElUA8WdDyCcXJI6r3FV7HFVzoOTC6t4f8Y,4803
|
130
131
|
cornflow/shared/authentication/__init__.py,sha256=cJIChk5X6hbA_16usEvfHr8g4JDFI6WKo0GPVOOiYHA,137
|
131
|
-
cornflow/shared/authentication/auth.py,sha256=
|
132
|
+
cornflow/shared/authentication/auth.py,sha256=aQ8oUq9nC3FMbCivPFr2aWQXqP_cDeP6f7ljDhTm-wM,18664
|
132
133
|
cornflow/shared/authentication/decorators.py,sha256=_QpwOU1kYzpaK85Dl0Btdj5hG8Ps47PFgySp_gqhlgk,1276
|
133
134
|
cornflow/shared/authentication/ldap.py,sha256=QfdC2X_ZMcIJabKC5pYWDGMhS5pIOJJvdZXuuiruq-M,4853
|
134
135
|
cornflow/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
135
136
|
cornflow/tests/const.py,sha256=_5BYFGN42Xg0PXMR8UU5DBL6dYmYn5rgRBgPyptrKso,2499
|
136
137
|
cornflow/tests/custom_liveServer.py,sha256=I_0YNrcKIwVmRov3zCQMWwcCWkMe5V246Hpa4gS8AZE,3079
|
137
|
-
cornflow/tests/custom_test_case.py,sha256=
|
138
|
+
cornflow/tests/custom_test_case.py,sha256=EeAPnI0F5_0ZAQW0_ku0NdTzYxc8se6fi1FtYNdtLTc,25147
|
138
139
|
cornflow/tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
139
140
|
cornflow/tests/integration/test_commands.py,sha256=FZcoEM-05D4MBMe0L0V-0sxk_L0zMbzQxb9UCd7iBe0,695
|
140
|
-
cornflow/tests/integration/test_cornflowclient.py,sha256=
|
141
|
+
cornflow/tests/integration/test_cornflowclient.py,sha256=ioAQmQKWW6mXVJhdF4LECZcGIOa_N0xPkFaGWGtxOO8,20963
|
141
142
|
cornflow/tests/ldap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
142
143
|
cornflow/tests/ldap/test_ldap_authentication.py,sha256=6Gu1WkF7MQmcV_10IJkpo2qEloZZ9zjpV18ANDD0HRw,4286
|
143
144
|
cornflow/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
144
145
|
cornflow/tests/unit/test_actions.py,sha256=Fg33PyzNTK4B4NjARelMxLQpQl9nE9JppolkkIY9UEo,1755
|
145
146
|
cornflow/tests/unit/test_alarms.py,sha256=J4Hp2xIZqpFrojx_RvQCSU1ilDk-iC0vm2z8wZNXwIw,1343
|
146
147
|
cornflow/tests/unit/test_apiview.py,sha256=G5DpUPaKVXgbCOaXXTCjBAeGeCtfR8niltp7B0NNB6o,2107
|
147
|
-
cornflow/tests/unit/test_cases.py,sha256=
|
148
|
-
cornflow/tests/unit/test_cli.py,sha256=
|
148
|
+
cornflow/tests/unit/test_cases.py,sha256=lXLgvHbNGw8qUoCtYUwwXE_O2AWSmSXxLVlxE-hc9Oc,25974
|
149
|
+
cornflow/tests/unit/test_cli.py,sha256=qYcMGAdLIOhTgWV4q0rGu0bv5Bs7JUIsyRd5qt6pcOI,12578
|
149
150
|
cornflow/tests/unit/test_commands.py,sha256=QwGHTOxBOwiIYYQg8wcmSR11lKQk0I8Ltr3sbFERufw,8776
|
150
|
-
cornflow/tests/unit/test_dags.py,sha256=
|
151
|
+
cornflow/tests/unit/test_dags.py,sha256=5lTJW_fgh7XXE11Zo9yVsQ7wsmbCPxCCRwna2vkPEuA,10350
|
151
152
|
cornflow/tests/unit/test_data_checks.py,sha256=VjB3AAQOHlqnaRT2jI9L2mNLDAcda6llpiZWkW7nnkk,5471
|
152
|
-
cornflow/tests/unit/test_example_data.py,sha256=
|
153
|
-
cornflow/tests/unit/test_executions.py,sha256=
|
153
|
+
cornflow/tests/unit/test_example_data.py,sha256=D-Tgnqw7NZlnBXaDcUU0reNhAca5JlJP2Sdn3KdS4Sw,4127
|
154
|
+
cornflow/tests/unit/test_executions.py,sha256=_hIaiZri7Blyx4DYhBDHh-0peU1HQh66RSPqQJFveE8,17501
|
154
155
|
cornflow/tests/unit/test_generate_from_schema.py,sha256=L1EdnASbDJ8SjrX1V4WnUKKwV0sRTwVnNYnxSpyeSeQ,15376
|
155
156
|
cornflow/tests/unit/test_health.py,sha256=0E0HXMb63_Z8drbLZdxnJwtTbQyaZS9ZEHut6qsDbh8,1033
|
156
|
-
cornflow/tests/unit/test_instances.py,sha256=
|
157
|
+
cornflow/tests/unit/test_instances.py,sha256=RaD9Tue2HODKThBNhciu6krdIvrauDLxOq4Y6a_z8DU,10573
|
157
158
|
cornflow/tests/unit/test_instances_file.py,sha256=zXxSlOM_MMkFvpWNX-iatD40xoIAOGQkinCLf1txb0M,1986
|
158
159
|
cornflow/tests/unit/test_licenses.py,sha256=jgnfE4UMFooGn44HK_KspJXIpmLjUpK_WgsBBeTO5eI,1534
|
159
160
|
cornflow/tests/unit/test_log_in.py,sha256=zwVCNO0sGQhpVcUaJnh8cVv2z-qPEYCdI98y61CNyfE,979
|
160
|
-
cornflow/tests/unit/test_main_alarms.py,sha256=
|
161
|
+
cornflow/tests/unit/test_main_alarms.py,sha256=y--A4Ap2X38TCCRgbimzaZ-QvnTqZY8KHCv7C8kTTwc,2060
|
161
162
|
cornflow/tests/unit/test_permissions.py,sha256=4mLj3GI0Bvhy927eXu_RyAmK8i2XD7raYc6W8lyAO04,8782
|
162
163
|
cornflow/tests/unit/test_roles.py,sha256=xZ3TohL_sv1ZBPvHv_nnYSsKEhBlrzIchx9soaTb5Ow,16581
|
163
164
|
cornflow/tests/unit/test_schema_from_models.py,sha256=7IfycOGO3U06baX8I-OPJfu-3ZAn5cv8RCdj9wvalMk,4421
|
164
|
-
cornflow/tests/unit/test_schemas.py,sha256=
|
165
|
+
cornflow/tests/unit/test_schemas.py,sha256=6SpkeYsS3oWntUZEF3GldLqmNa-hpxg-WrKJVTgc-B4,7468
|
165
166
|
cornflow/tests/unit/test_sign_up.py,sha256=-i6VO9z1FwqRHFvaSrpWAzOZx6qa8mHUEmmsjuMXjn8,3481
|
166
167
|
cornflow/tests/unit/test_tables.py,sha256=dY55YgaCkyqwJnqn0LbZHNeXBoL4ZxXWwKkCoTF4WVE,8947
|
167
|
-
cornflow/tests/unit/test_token.py,sha256=
|
168
|
-
cornflow/tests/unit/test_users.py,sha256=
|
168
|
+
cornflow/tests/unit/test_token.py,sha256=OEVPgG8swSMkUbuGJGfGF5Z27utMLICn1eIyma1cM9E,3760
|
169
|
+
cornflow/tests/unit/test_users.py,sha256=WfaMcybPpR7rspXyvzHGgw25p751hMPAV0DOp_caSPM,22430
|
169
170
|
cornflow/tests/unit/tools.py,sha256=ag3sWv2WLi498R1GL5AOUnXqSsszD3UugzLZLC5NqAw,585
|
170
|
-
cornflow-1.
|
171
|
-
cornflow-1.
|
172
|
-
cornflow-1.
|
173
|
-
cornflow-1.
|
174
|
-
cornflow-1.
|
171
|
+
cornflow-1.1.0a2.dist-info/METADATA,sha256=Q3l-3geC8Y0gRpUe4cqdRz8NTtZ53IZ8eo6s_wdqyNc,9402
|
172
|
+
cornflow-1.1.0a2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
173
|
+
cornflow-1.1.0a2.dist-info/entry_points.txt,sha256=r5wKLHpuyVLMUIZ5I29_tpqYf-RuP-3w_8DhFi8_blQ,47
|
174
|
+
cornflow-1.1.0a2.dist-info/top_level.txt,sha256=Qj9kLFJW1PLb-ZV2s_aCkQ-Wi5W6KC6fFR-LTBrx-rU,24
|
175
|
+
cornflow-1.1.0a2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|