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.
Files changed (194) hide show
  1. {cornflow-1.3.8rc4/cornflow.egg-info → cornflow-1.3.9}/PKG-INFO +6 -6
  2. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/permissions.py +5 -4
  3. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/dag.py +10 -2
  4. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/const.py +1 -1
  5. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_commands.py +20 -3
  6. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_dags.py +55 -0
  7. {cornflow-1.3.8rc4 → cornflow-1.3.9/cornflow.egg-info}/PKG-INFO +6 -6
  8. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow.egg-info/requires.txt +5 -5
  9. {cornflow-1.3.8rc4 → cornflow-1.3.9}/requirements.txt +5 -5
  10. {cornflow-1.3.8rc4 → cornflow-1.3.9}/setup.py +1 -1
  11. {cornflow-1.3.8rc4 → cornflow-1.3.9}/MANIFEST.in +0 -0
  12. {cornflow-1.3.8rc4 → cornflow-1.3.9}/README.rst +0 -0
  13. {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/__init__.py +0 -0
  14. {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/airflow_local_settings.py +0 -0
  15. {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/plugins/XCom/__init__.py +0 -0
  16. {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/plugins/XCom/gce_xcom_backend.py +0 -0
  17. {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/plugins/__init__.py +0 -0
  18. {cornflow-1.3.8rc4 → cornflow-1.3.9}/airflow_config/webserver_ldap.py +0 -0
  19. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/__init__.py +0 -0
  20. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/app.py +0 -0
  21. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/__init__.py +0 -0
  22. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/actions.py +0 -0
  23. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/arguments.py +0 -0
  24. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/config.py +0 -0
  25. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/migrations.py +0 -0
  26. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/permissions.py +0 -0
  27. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/roles.py +0 -0
  28. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/schemas.py +0 -0
  29. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/service.py +0 -0
  30. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/__init__.py +0 -0
  31. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/api_generator.py +0 -0
  32. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/endpoint_tools.py +0 -0
  33. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/models_tools.py +0 -0
  34. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/schema_generator.py +0 -0
  35. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/schemas_tools.py +0 -0
  36. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/tools/tools.py +0 -0
  37. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/users.py +0 -0
  38. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/utils.py +0 -0
  39. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/cli/views.py +0 -0
  40. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/__init__.py +0 -0
  41. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/access.py +0 -0
  42. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/actions.py +0 -0
  43. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/auxiliar.py +0 -0
  44. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/cleanup.py +0 -0
  45. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/dag.py +0 -0
  46. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/roles.py +0 -0
  47. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/schemas.py +0 -0
  48. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/users.py +0 -0
  49. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/commands/views.py +0 -0
  50. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/config.py +0 -0
  51. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/__init__.py +0 -0
  52. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/action.py +0 -0
  53. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/alarms.py +0 -0
  54. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/apiview.py +0 -0
  55. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/case.py +0 -0
  56. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/data_check.py +0 -0
  57. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/example_data.py +0 -0
  58. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/execution.py +0 -0
  59. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/health.py +0 -0
  60. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/instance.py +0 -0
  61. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/licenses.py +0 -0
  62. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/login.py +0 -0
  63. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/main_alarms.py +0 -0
  64. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/meta_resource.py +0 -0
  65. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/permission.py +0 -0
  66. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/roles.py +0 -0
  67. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/schemas.py +0 -0
  68. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/signup.py +0 -0
  69. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/tables.py +0 -0
  70. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/token.py +0 -0
  71. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/user.py +0 -0
  72. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/endpoints/user_role.py +0 -0
  73. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/gunicorn.py +0 -0
  74. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/README +0 -0
  75. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/alembic.ini +0 -0
  76. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/env.py +0 -0
  77. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/script.py.mako +0 -0
  78. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/00757b557b02_.py +0 -0
  79. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/1af47a419bbd_.py +0 -0
  80. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/4729cd156460_.py +0 -0
  81. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/4aac5e0c6e66_.py +0 -0
  82. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/509d280698e4_.py +0 -0
  83. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/7c3ea5ab5501_.py +0 -0
  84. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/991b98e24225_.py +0 -0
  85. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/999b98e24225.py +0 -0
  86. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/9cacf194fa1c_.py +0 -0
  87. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/a472b5ad50b7_.py +0 -0
  88. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/c2db9409cb5f_.py +0 -0
  89. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/c8a6c762e818_.py +0 -0
  90. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/ca449af8034c_.py +0 -0
  91. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/cef1df240b27_.py +0 -0
  92. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/d0e0700dcd8e_.py +0 -0
  93. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/d1b5be1f0549_.py +0 -0
  94. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/e1a50dae1ac9_.py +0 -0
  95. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/e937a5234ce4_.py +0 -0
  96. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/ebdd955fcc5e_.py +0 -0
  97. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/migrations/versions/f3bee20314a2_.py +0 -0
  98. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/__init__.py +0 -0
  99. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/action.py +0 -0
  100. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/alarms.py +0 -0
  101. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/base_data_model.py +0 -0
  102. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/case.py +0 -0
  103. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/dag.py +0 -0
  104. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/dag_permissions.py +0 -0
  105. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/execution.py +0 -0
  106. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/instance.py +0 -0
  107. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/main_alarms.py +0 -0
  108. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/meta_models.py +0 -0
  109. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/permissions.py +0 -0
  110. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/role.py +0 -0
  111. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/user.py +0 -0
  112. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/user_role.py +0 -0
  113. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/models/view.py +0 -0
  114. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/__init__.py +0 -0
  115. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/action.py +0 -0
  116. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/alarms.py +0 -0
  117. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/case.py +0 -0
  118. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/common.py +0 -0
  119. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/dag.py +0 -0
  120. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/example_data.py +0 -0
  121. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/execution.py +0 -0
  122. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/health.py +0 -0
  123. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/instance.py +0 -0
  124. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/main_alarms.py +0 -0
  125. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/model_json.py +0 -0
  126. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/patch.py +0 -0
  127. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/permissions.py +0 -0
  128. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/query.py +0 -0
  129. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/role.py +0 -0
  130. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/schemas.py +0 -0
  131. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/solution_log.py +0 -0
  132. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/tables.py +0 -0
  133. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/user.py +0 -0
  134. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/user_role.py +0 -0
  135. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/schemas/view.py +0 -0
  136. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/__init__.py +0 -0
  137. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/authentication/__init__.py +0 -0
  138. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/authentication/auth.py +0 -0
  139. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/authentication/decorators.py +0 -0
  140. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/authentication/ldap.py +0 -0
  141. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/compress.py +0 -0
  142. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/email.py +0 -0
  143. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/exceptions.py +0 -0
  144. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/licenses.py +0 -0
  145. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/log_config.py +0 -0
  146. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/query_tools.py +0 -0
  147. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/utils.py +0 -0
  148. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/utils_tables.py +0 -0
  149. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/shared/validators.py +0 -0
  150. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/__init__.py +0 -0
  151. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/base_test_execution.py +0 -0
  152. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/const.py +0 -0
  153. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/custom_liveServer.py +0 -0
  154. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/custom_test_case.py +0 -0
  155. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/integration/__init__.py +0 -0
  156. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/integration/test_commands.py +0 -0
  157. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/integration/test_cornflowclient.py +0 -0
  158. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/integration/test_data_checks_kpis.py +0 -0
  159. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/ldap/__init__.py +0 -0
  160. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/ldap/test_ldap_authentication.py +0 -0
  161. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/__init__.py +0 -0
  162. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_actions.py +0 -0
  163. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_alarms.py +0 -0
  164. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_apiview.py +0 -0
  165. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_application.py +0 -0
  166. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_cases.py +0 -0
  167. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_cli.py +0 -0
  168. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_data_checks.py +0 -0
  169. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_example_data.py +0 -0
  170. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_executions.py +0 -0
  171. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_external_role_creation.py +0 -0
  172. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_generate_from_schema.py +0 -0
  173. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_get_resources.py +0 -0
  174. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_health.py +0 -0
  175. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_instances.py +0 -0
  176. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_instances_file.py +0 -0
  177. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_licenses.py +0 -0
  178. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_log_in.py +0 -0
  179. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_main_alarms.py +0 -0
  180. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_meta_resource.py +0 -0
  181. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_permissions.py +0 -0
  182. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_roles.py +0 -0
  183. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_schema_from_models.py +0 -0
  184. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_schemas.py +0 -0
  185. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_sign_up.py +0 -0
  186. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_tables.py +0 -0
  187. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_token.py +0 -0
  188. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/test_users.py +0 -0
  189. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow/tests/unit/tools.py +0 -0
  190. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow.egg-info/SOURCES.txt +0 -0
  191. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow.egg-info/dependency_links.txt +0 -0
  192. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow.egg-info/entry_points.txt +0 -0
  193. {cornflow-1.3.8rc4 → cornflow-1.3.9}/cornflow.egg-info/top_level.txt +0 -0
  194. {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.8rc4
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.8rc4
18
- Requires-Dist: cryptography==48.0.1
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.13.0
38
+ Requires-Dist: PyJWT==2.15.1
39
39
  Requires-Dist: pytups==0.86.2
40
- Requires-Dist: requests==2.32.4
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==78.1.1
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 and user.is_service_user()
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) > 1:
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) > 1:
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
- return self.post_list(kwargs)
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
- return self.put_detail(data=req_data, idx=idx, track_user=False)
292
+ response = self.put_detail(data=req_data, idx=idx, track_user=False)
293
+ register_dag_permissions_command()
294
+ return response
@@ -7,7 +7,7 @@ AIRFLOW_BACKEND = 1
7
7
  DATABRICKS_BACKEND = 2
8
8
 
9
9
 
10
- CORNFLOW_VERSION = "1.3.8rc4"
10
+ CORNFLOW_VERSION = "1.3.9"
11
11
  INTERNAL_TOKEN_ISSUER = "cornflow"
12
12
 
13
13
  # endpoints responses for health check
@@ -392,22 +392,39 @@ class TestCommands(TestCase):
392
392
  Verifies:
393
393
 
394
394
  - Successful permission assignment
395
- - Restricted access for admin users
396
- - Proper service user permissions
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(0, len(admin_permissions))
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.8rc4
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.8rc4
18
- Requires-Dist: cryptography==48.0.1
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.13.0
38
+ Requires-Dist: PyJWT==2.15.1
39
39
  Requires-Dist: pytups==0.86.2
40
- Requires-Dist: requests==2.32.4
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==78.1.1
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.8rc4
6
- cryptography==48.0.1
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.13.0
24
+ PyJWT==2.15.1
25
25
  pytups==0.86.2
26
- requests==2.32.4
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==78.1.1
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.8rc4
6
- cryptography==48.0.1
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.13.0
26
+ PyJWT==2.15.1
27
27
  pytups==0.86.2
28
- requests==2.32.4
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==78.1.1
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.8rc4",
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