cornflow 1.3.8rc4__tar.gz → 1.3.9__tar.gz
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-1.3.8rc4/cornflow.egg-info → cornflow-1.3.9}/PKG-INFO +6 -6
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/permissions.py +5 -4
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/dag.py +10 -2
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/const.py +1 -1
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_commands.py +20 -3
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_dags.py +55 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9/cornflow.egg-info}/PKG-INFO +6 -6
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow.egg-info/requires.txt +5 -5
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/requirements.txt +5 -5
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/setup.py +1 -1
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/MANIFEST.in +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/README.rst +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/airflow_local_settings.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/plugins/XCom/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/plugins/XCom/gce_xcom_backend.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/plugins/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/webserver_ldap.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/app.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/actions.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/arguments.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/config.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/migrations.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/permissions.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/roles.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/schemas.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/service.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/api_generator.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/endpoint_tools.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/models_tools.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/schema_generator.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/schemas_tools.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/tools.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/users.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/utils.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/views.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/access.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/actions.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/auxiliar.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/cleanup.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/dag.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/roles.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/schemas.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/users.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/views.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/config.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/action.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/alarms.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/apiview.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/case.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/data_check.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/example_data.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/execution.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/health.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/instance.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/licenses.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/login.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/main_alarms.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/meta_resource.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/permission.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/roles.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/schemas.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/signup.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/tables.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/token.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/user.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/user_role.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/gunicorn.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/README +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/alembic.ini +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/env.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/script.py.mako +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/00757b557b02_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/1af47a419bbd_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/4729cd156460_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/4aac5e0c6e66_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/509d280698e4_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/7c3ea5ab5501_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/991b98e24225_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/999b98e24225.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/9cacf194fa1c_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/a472b5ad50b7_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/c2db9409cb5f_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/c8a6c762e818_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/ca449af8034c_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/cef1df240b27_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/d0e0700dcd8e_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/d1b5be1f0549_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/e1a50dae1ac9_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/e937a5234ce4_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/ebdd955fcc5e_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/f3bee20314a2_.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/action.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/alarms.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/base_data_model.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/case.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/dag.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/dag_permissions.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/execution.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/instance.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/main_alarms.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/meta_models.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/permissions.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/role.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/user.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/user_role.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/view.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/action.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/alarms.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/case.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/common.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/dag.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/example_data.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/execution.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/health.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/instance.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/main_alarms.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/model_json.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/patch.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/permissions.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/query.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/role.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/schemas.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/solution_log.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/tables.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/user.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/user_role.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/view.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/authentication/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/authentication/auth.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/authentication/decorators.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/authentication/ldap.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/compress.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/email.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/exceptions.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/licenses.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/log_config.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/query_tools.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/utils.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/utils_tables.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/validators.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/base_test_execution.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/const.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/custom_liveServer.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/custom_test_case.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/integration/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/integration/test_commands.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/integration/test_cornflowclient.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/integration/test_data_checks_kpis.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/ldap/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/ldap/test_ldap_authentication.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/__init__.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_actions.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_alarms.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_apiview.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_application.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_cases.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_cli.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_data_checks.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_example_data.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_executions.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_external_role_creation.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_generate_from_schema.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_get_resources.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_health.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_instances.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_instances_file.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_licenses.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_log_in.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_main_alarms.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_meta_resource.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_permissions.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_roles.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_schema_from_models.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_schemas.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_sign_up.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_tables.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_token.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_users.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/tools.py +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow.egg-info/SOURCES.txt +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow.egg-info/dependency_links.txt +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow.egg-info/entry_points.txt +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow.egg-info/top_level.txt +0 -0
- {cornflow-1.3.8rc4 → cornflow-1.3.9}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cornflow
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.9
|
|
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,8 +14,8 @@ 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.3.
|
|
18
|
-
Requires-Dist: cryptography==
|
|
17
|
+
Requires-Dist: cornflow-client==1.3.9
|
|
18
|
+
Requires-Dist: cryptography==50.0.2
|
|
19
19
|
Requires-Dist: disposable-email-domains==0.0.162
|
|
20
20
|
Requires-Dist: Flask==2.3.2
|
|
21
21
|
Requires-Dist: flask-apispec==0.11.4
|
|
@@ -35,13 +35,13 @@ Requires-Dist: ldap3==2.9.1
|
|
|
35
35
|
Requires-Dist: marshmallow==3.26.2
|
|
36
36
|
Requires-Dist: PuLP==2.9.0
|
|
37
37
|
Requires-Dist: psycopg2==2.9.9
|
|
38
|
-
Requires-Dist: PyJWT==2.
|
|
38
|
+
Requires-Dist: PyJWT==2.15.1
|
|
39
39
|
Requires-Dist: pytups==0.86.2
|
|
40
|
-
Requires-Dist: requests==2.
|
|
40
|
+
Requires-Dist: requests==2.33.0
|
|
41
41
|
Requires-Dist: SQLAlchemy==1.3.21
|
|
42
42
|
Requires-Dist: webargs==8.3.0
|
|
43
43
|
Requires-Dist: Werkzeug==3.0.6
|
|
44
|
-
Requires-Dist: setuptools==
|
|
44
|
+
Requires-Dist: setuptools==83.0.0
|
|
45
45
|
Dynamic: author
|
|
46
46
|
Dynamic: author-email
|
|
47
47
|
Dynamic: classifier
|
|
@@ -256,7 +256,7 @@ def register_dag_permissions_command(
|
|
|
256
256
|
all_users = UserModel.get_all_users().all()
|
|
257
257
|
all_dags = DeployedWorkflow.get_all_objects().all()
|
|
258
258
|
|
|
259
|
-
if open_deployment == 1:
|
|
259
|
+
if int(open_deployment) == 1:
|
|
260
260
|
|
|
261
261
|
permissions = [
|
|
262
262
|
PermissionsDAG({"dag_id": dag.id, "user_id": user.id})
|
|
@@ -270,10 +270,11 @@ def register_dag_permissions_command(
|
|
|
270
270
|
PermissionsDAG({"dag_id": dag.id, "user_id": user.id})
|
|
271
271
|
for user in all_users
|
|
272
272
|
for dag in all_dags
|
|
273
|
-
if (dag.id, user.id) not in existing_permissions
|
|
273
|
+
if (dag.id, user.id) not in existing_permissions
|
|
274
|
+
and (user.is_service_user() or user.is_admin())
|
|
274
275
|
]
|
|
275
276
|
|
|
276
|
-
if len(permissions) >
|
|
277
|
+
if len(permissions) > 0:
|
|
277
278
|
db.session.bulk_save_objects(permissions)
|
|
278
279
|
|
|
279
280
|
try:
|
|
@@ -300,7 +301,7 @@ def register_dag_permissions_command(
|
|
|
300
301
|
|
|
301
302
|
if verbose:
|
|
302
303
|
click.echo(f"Workflow permissions registered")
|
|
303
|
-
if len(permissions) >
|
|
304
|
+
if len(permissions) > 0:
|
|
304
305
|
current_app.logger.info(
|
|
305
306
|
f"Workflow permissions registered: {len(permissions)}"
|
|
306
307
|
)
|
|
@@ -265,7 +265,11 @@ class DeployedDAGEndpoint(BaseMetaResource):
|
|
|
265
265
|
@marshal_with(DeployedDAGSchema)
|
|
266
266
|
@use_kwargs(DeployedDAGSchema)
|
|
267
267
|
def post(self, **kwargs):
|
|
268
|
-
|
|
268
|
+
from cornflow.commands.permissions import register_dag_permissions_command
|
|
269
|
+
|
|
270
|
+
response = self.post_list(kwargs)
|
|
271
|
+
register_dag_permissions_command()
|
|
272
|
+
return response
|
|
269
273
|
|
|
270
274
|
|
|
271
275
|
class DeployedDagDetailEndpoint(BaseMetaResource):
|
|
@@ -282,5 +286,9 @@ class DeployedDagDetailEndpoint(BaseMetaResource):
|
|
|
282
286
|
@authenticate(auth_class=Auth())
|
|
283
287
|
@use_kwargs(DeployedDAGEditSchema, location="json")
|
|
284
288
|
def put(self, idx, **req_data):
|
|
289
|
+
from cornflow.commands.permissions import register_dag_permissions_command
|
|
290
|
+
|
|
285
291
|
current_app.logger.info(f"Schemas saved for DAG {idx}")
|
|
286
|
-
|
|
292
|
+
response = self.put_detail(data=req_data, idx=idx, track_user=False)
|
|
293
|
+
register_dag_permissions_command()
|
|
294
|
+
return response
|
|
@@ -392,22 +392,39 @@ class TestCommands(TestCase):
|
|
|
392
392
|
Verifies:
|
|
393
393
|
|
|
394
394
|
- Successful permission assignment
|
|
395
|
-
-
|
|
396
|
-
-
|
|
395
|
+
- Service and admin users receive all DAG permissions
|
|
396
|
+
- Base users receive none
|
|
397
397
|
"""
|
|
398
398
|
register_deployed_dags_command_test()
|
|
399
399
|
self.test_service_user_command()
|
|
400
400
|
self.test_admin_user_command()
|
|
401
|
+
self.test_base_user_command()
|
|
401
402
|
self.runner.invoke(register_dag_permissions, ["-o", 0])
|
|
402
403
|
|
|
403
404
|
service = UserModel.get_one_user_by_email("testemail@test.org")
|
|
404
405
|
admin = UserModel.get_one_user_by_email("admin@test.org")
|
|
406
|
+
base = UserModel.get_one_user_by_email("base@test.org")
|
|
405
407
|
|
|
406
408
|
service_permissions = PermissionsDAG.get_user_dag_permissions(service.id)
|
|
407
409
|
admin_permissions = PermissionsDAG.get_user_dag_permissions(admin.id)
|
|
410
|
+
base_permissions = PermissionsDAG.get_user_dag_permissions(base.id)
|
|
408
411
|
|
|
409
412
|
self.assertEqual(4, len(service_permissions))
|
|
410
|
-
self.assertEqual(
|
|
413
|
+
self.assertEqual(4, len(admin_permissions))
|
|
414
|
+
self.assertEqual(0, len(base_permissions))
|
|
415
|
+
|
|
416
|
+
def test_dag_permissions_command_single_missing(self):
|
|
417
|
+
"""
|
|
418
|
+
Test that a single DAG without permissions is picked up by the command.
|
|
419
|
+
"""
|
|
420
|
+
register_deployed_dags_command_test(dags=["solve_model_dag"])
|
|
421
|
+
self.test_service_user_command()
|
|
422
|
+
self.runner.invoke(register_dag_permissions, ["-o", 0])
|
|
423
|
+
|
|
424
|
+
service = UserModel.get_one_user_by_email("testemail@test.org")
|
|
425
|
+
service_permissions = PermissionsDAG.get_user_dag_permissions(service.id)
|
|
426
|
+
|
|
427
|
+
self.assertEqual(1, len(service_permissions))
|
|
411
428
|
|
|
412
429
|
def test_argument_parsing_correct(self):
|
|
413
430
|
"""
|
|
@@ -464,3 +464,58 @@ class TestDeployedDAG(TestCase):
|
|
|
464
464
|
"'id': ['Missing data for required field.']",
|
|
465
465
|
response.json.get("error", ""),
|
|
466
466
|
)
|
|
467
|
+
|
|
468
|
+
def test_post_and_put_create_permissions(self):
|
|
469
|
+
self.app.config["OPEN_DEPLOYMENT"] = 0
|
|
470
|
+
planner = dict(
|
|
471
|
+
username="aPlanner", email="planner@test.org", password="Testpassword1!"
|
|
472
|
+
)
|
|
473
|
+
planner_id = self.client.post(
|
|
474
|
+
SIGNUP_URL,
|
|
475
|
+
data=json.dumps(planner),
|
|
476
|
+
follow_redirects=True,
|
|
477
|
+
headers={"Content-Type": "application/json"},
|
|
478
|
+
).json["id"]
|
|
479
|
+
headers = {
|
|
480
|
+
"Content-Type": "application/json",
|
|
481
|
+
"Authorization": f"Bearer {self.token}",
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
payload = {
|
|
485
|
+
"id": "new_dag",
|
|
486
|
+
"instance_schema": {},
|
|
487
|
+
"solution_schema": {},
|
|
488
|
+
"instance_checks_schema": {},
|
|
489
|
+
"solution_checks_schema": {},
|
|
490
|
+
"config_schema": {},
|
|
491
|
+
"kpis_schema": {},
|
|
492
|
+
}
|
|
493
|
+
response = self.client.post(
|
|
494
|
+
DEPLOYED_DAG_URL,
|
|
495
|
+
data=json.dumps(payload),
|
|
496
|
+
follow_redirects=True,
|
|
497
|
+
headers=headers,
|
|
498
|
+
)
|
|
499
|
+
self.assertEqual(response.status_code, 201)
|
|
500
|
+
self.assertTrue(PermissionsDAG.check_if_has_permissions(self.admin["id"], "new_dag"))
|
|
501
|
+
self.assertFalse(PermissionsDAG.check_if_has_permissions(planner_id, "new_dag"))
|
|
502
|
+
|
|
503
|
+
PermissionsDAG.query.filter_by(dag_id="solve_model_dag").delete()
|
|
504
|
+
db.session.commit()
|
|
505
|
+
self.assertFalse(
|
|
506
|
+
PermissionsDAG.check_if_has_permissions(self.admin["id"], "solve_model_dag")
|
|
507
|
+
)
|
|
508
|
+
payload.pop("id")
|
|
509
|
+
response = self.client.put(
|
|
510
|
+
DEPLOYED_DAG_URL + "solve_model_dag/",
|
|
511
|
+
data=json.dumps(payload),
|
|
512
|
+
follow_redirects=True,
|
|
513
|
+
headers=headers,
|
|
514
|
+
)
|
|
515
|
+
self.assertEqual(response.status_code, 200)
|
|
516
|
+
self.assertTrue(
|
|
517
|
+
PermissionsDAG.check_if_has_permissions(self.admin["id"], "solve_model_dag")
|
|
518
|
+
)
|
|
519
|
+
self.assertFalse(
|
|
520
|
+
PermissionsDAG.check_if_has_permissions(planner_id, "solve_model_dag")
|
|
521
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cornflow
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.9
|
|
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,8 +14,8 @@ 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.3.
|
|
18
|
-
Requires-Dist: cryptography==
|
|
17
|
+
Requires-Dist: cornflow-client==1.3.9
|
|
18
|
+
Requires-Dist: cryptography==50.0.2
|
|
19
19
|
Requires-Dist: disposable-email-domains==0.0.162
|
|
20
20
|
Requires-Dist: Flask==2.3.2
|
|
21
21
|
Requires-Dist: flask-apispec==0.11.4
|
|
@@ -35,13 +35,13 @@ Requires-Dist: ldap3==2.9.1
|
|
|
35
35
|
Requires-Dist: marshmallow==3.26.2
|
|
36
36
|
Requires-Dist: PuLP==2.9.0
|
|
37
37
|
Requires-Dist: psycopg2==2.9.9
|
|
38
|
-
Requires-Dist: PyJWT==2.
|
|
38
|
+
Requires-Dist: PyJWT==2.15.1
|
|
39
39
|
Requires-Dist: pytups==0.86.2
|
|
40
|
-
Requires-Dist: requests==2.
|
|
40
|
+
Requires-Dist: requests==2.33.0
|
|
41
41
|
Requires-Dist: SQLAlchemy==1.3.21
|
|
42
42
|
Requires-Dist: webargs==8.3.0
|
|
43
43
|
Requires-Dist: Werkzeug==3.0.6
|
|
44
|
-
Requires-Dist: setuptools==
|
|
44
|
+
Requires-Dist: setuptools==83.0.0
|
|
45
45
|
Dynamic: author
|
|
46
46
|
Dynamic: author-email
|
|
47
47
|
Dynamic: classifier
|
|
@@ -2,8 +2,8 @@ alembic==1.9.2
|
|
|
2
2
|
apispec==6.3.0
|
|
3
3
|
cachetools==5.3.3
|
|
4
4
|
click==8.1.7
|
|
5
|
-
cornflow-client==1.3.
|
|
6
|
-
cryptography==
|
|
5
|
+
cornflow-client==1.3.9
|
|
6
|
+
cryptography==50.0.2
|
|
7
7
|
disposable-email-domains==0.0.162
|
|
8
8
|
Flask==2.3.2
|
|
9
9
|
flask-apispec==0.11.4
|
|
@@ -21,13 +21,13 @@ ldap3==2.9.1
|
|
|
21
21
|
marshmallow==3.26.2
|
|
22
22
|
PuLP==2.9.0
|
|
23
23
|
psycopg2==2.9.9
|
|
24
|
-
PyJWT==2.
|
|
24
|
+
PyJWT==2.15.1
|
|
25
25
|
pytups==0.86.2
|
|
26
|
-
requests==2.
|
|
26
|
+
requests==2.33.0
|
|
27
27
|
SQLAlchemy==1.3.21
|
|
28
28
|
webargs==8.3.0
|
|
29
29
|
Werkzeug==3.0.6
|
|
30
|
-
setuptools==
|
|
30
|
+
setuptools==83.0.0
|
|
31
31
|
|
|
32
32
|
[:python_version < "3.11"]
|
|
33
33
|
greenlet==2.0.2
|
|
@@ -2,8 +2,8 @@ alembic==1.9.2
|
|
|
2
2
|
apispec==6.3.0
|
|
3
3
|
cachetools==5.3.3
|
|
4
4
|
click==8.1.7
|
|
5
|
-
cornflow-client==1.3.
|
|
6
|
-
cryptography==
|
|
5
|
+
cornflow-client==1.3.9
|
|
6
|
+
cryptography==50.0.2
|
|
7
7
|
disposable-email-domains==0.0.162
|
|
8
8
|
Flask==2.3.2
|
|
9
9
|
flask-apispec==0.11.4
|
|
@@ -23,10 +23,10 @@ ldap3==2.9.1
|
|
|
23
23
|
marshmallow==3.26.2
|
|
24
24
|
PuLP==2.9.0
|
|
25
25
|
psycopg2==2.9.9
|
|
26
|
-
PyJWT==2.
|
|
26
|
+
PyJWT==2.15.1
|
|
27
27
|
pytups==0.86.2
|
|
28
|
-
requests==2.
|
|
28
|
+
requests==2.33.0
|
|
29
29
|
SQLAlchemy==1.3.21
|
|
30
30
|
webargs==8.3.0
|
|
31
31
|
Werkzeug==3.0.6
|
|
32
|
-
setuptools==
|
|
32
|
+
setuptools==83.0.0
|
|
@@ -9,7 +9,7 @@ with open("requirements.txt", "r") as fh:
|
|
|
9
9
|
|
|
10
10
|
setuptools.setup(
|
|
11
11
|
name="cornflow",
|
|
12
|
-
version="1.3.
|
|
12
|
+
version="1.3.9",
|
|
13
13
|
author="baobab soluciones",
|
|
14
14
|
author_email="cornflow@baobabsoluciones.es",
|
|
15
15
|
description="cornflow is an open source multi-solver optimization server with a REST API built using flask.",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|