ApiLogicServer 15.0.65__py3-none-any.whl → 15.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (519) hide show
  1. api_logic_server_cli/api_logic_server.py +2 -2
  2. api_logic_server_cli/database/basic_demo.sqlite +0 -0
  3. api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md +25 -2
  4. api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite +0 -0
  5. api_logic_server_cli/prototypes/basic_demo/iteration/database/db.sqlite +0 -0
  6. api_logic_server_cli/prototypes/manager/.vscode/launch.json +2 -1
  7. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/For_VSCode.dockerfile +10 -0
  8. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/devcontainer.json +64 -0
  9. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/readme.md +1 -0
  10. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/setup.sh +10 -0
  11. api_logic_server_cli/prototypes/manager/samples/basic_demo/.env +4 -0
  12. api_logic_server_cli/prototypes/manager/samples/basic_demo/.github/.copilot-instructions.md +581 -0
  13. api_logic_server_cli/prototypes/manager/samples/basic_demo/.gitignore +9 -0
  14. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/ApiLogicServer.xml +24 -0
  15. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Report_Behave_Logic.xml +24 -0
  16. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Run_Behave.xml +24 -0
  17. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Windows_Run_Behave.xml +24 -0
  18. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/run___No_Security.xml +25 -0
  19. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/run_docker.xml +59 -0
  20. api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/launch.json +314 -0
  21. api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/settings.json +40 -0
  22. api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/venv_init.sh +64 -0
  23. api_logic_server_cli/prototypes/manager/samples/basic_demo/_config.yml +8 -0
  24. api_logic_server_cli/prototypes/manager/samples/basic_demo/_layouts/redirect.html +15 -0
  25. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/__init__.py +0 -0
  26. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/auto_discovery.py +27 -0
  27. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/mcp_discovery.py +97 -0
  28. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/mcp_expose_api_models.py +53 -0
  29. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/new_service.py +21 -0
  30. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/newer_service.py +21 -0
  31. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/ontimize_api.py +495 -0
  32. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/order_b2b_service.py +60 -0
  33. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/system.py +77 -0
  34. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/customize_api.py +63 -0
  35. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/expose_api_models.py +52 -0
  36. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/json_encoder.py +17 -0
  37. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/readme_customize_api.md +103 -0
  38. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/api_utils.py +171 -0
  39. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/custom_endpoint.py +1085 -0
  40. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/expression_parser.py +685 -0
  41. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/gen_csv_report.py +41 -0
  42. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/gen_pdf_report.py +215 -0
  43. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/opt_locking/opt_locking.py +158 -0
  44. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/opt_locking/readme.md +225 -0
  45. api_logic_server_cli/prototypes/manager/samples/basic_demo/api_logic_server_run.py +162 -0
  46. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/__init__.py +0 -0
  47. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/activate_logicbank.py +46 -0
  48. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/config.py +772 -0
  49. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/default.env +16 -0
  50. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/logging-reduced.yml +112 -0
  51. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/logging.yml +123 -0
  52. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/mypy.ini +25 -0
  53. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/server_setup.py +459 -0
  54. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/api/api_discovery/openapi.py +92 -0
  55. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/config/default.env +13 -0
  56. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/database/db.sqlite +0 -0
  57. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/database/models.py +130 -0
  58. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/docs/mcp_learning/mcp_discovery.json +108 -0
  59. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/cocktail-napkin.jpg +0 -0
  60. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/declare_logic.py +106 -0
  61. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/logic_discovery/email_request.py +49 -0
  62. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/logic_discovery/simple_constraints.py +25 -0
  63. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/security/declare_security.py +60 -0
  64. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/admin/admin.yaml +162 -0
  65. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/admin/home.js +48 -0
  66. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/README.md +17 -0
  67. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/README_create_react_app.md +70 -0
  68. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/package-lock.json +18469 -0
  69. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/package.json +47 -0
  70. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/favicon.ico +0 -0
  71. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/index.html +43 -0
  72. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/logo192.png +0 -0
  73. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/logo512.png +0 -0
  74. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/manifest.json +25 -0
  75. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/robots.txt +3 -0
  76. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.css +38 -0
  77. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.js +61 -0
  78. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.test.js +8 -0
  79. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Config-reference.js +527 -0
  80. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Config.js +527 -0
  81. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Customer-reference.js +216 -0
  82. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Customer.js +230 -0
  83. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Item.js +170 -0
  84. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Order.js +207 -0
  85. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Product.js +140 -0
  86. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/SysEmail.js +157 -0
  87. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/SysMcp.js +110 -0
  88. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/app_loader.js +24 -0
  89. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/index.css +13 -0
  90. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/index.js +17 -0
  91. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/logo.svg +1 -0
  92. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.eslintrc +5 -0
  93. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
  94. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.js +25 -0
  95. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.ts +25 -0
  96. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.js +116 -0
  97. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.ts +116 -0
  98. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.test.tsx +7 -0
  99. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.tsx +11 -0
  100. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
  101. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
  102. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.js +124 -0
  103. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
  104. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/styles.module.css +9 -0
  105. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/reportWebVitals.js +13 -0
  106. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/setupTests.js +5 -0
  107. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/__init__.py +0 -0
  108. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/alembic_run.py +98 -0
  109. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/env.py +78 -0
  110. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/readme_alembic.md +36 -0
  111. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/script.py.mako +24 -0
  112. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/versions/ae6a5c2fdc47_autogenerated.py +34 -0
  113. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/versions/readme.md +1 -0
  114. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic.ini +103 -0
  115. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/authentication_db.sqlite +0 -0
  116. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/bind_dbs.py +25 -0
  117. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/customize_models.py +19 -0
  118. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/database_discovery/authentication_models.py +183 -0
  119. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/database_discovery/auto_discovery.py +27 -0
  120. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/db.sqlite +0 -0
  121. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/db_debug/db_debug.py +90 -0
  122. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/mcp_db.sqlite +0 -0
  123. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/mcp_models.py +58 -0
  124. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/models.py +132 -0
  125. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/system/SAFRSBaseX.py +139 -0
  126. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/alp_init.py +40 -0
  127. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/readme.md +13 -0
  128. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/response2code.py +148 -0
  129. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/test_data_preamble.py +83 -0
  130. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_mysql.Dockerfile +65 -0
  131. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_mysql.sql +112 -0
  132. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_postgres.sql +57 -0
  133. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-azure/azure-deploy.sh +98 -0
  134. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-local/docker-compose-dev-local.yml +38 -0
  135. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-local/docker-compose.sh +34 -0
  136. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/build_image.dockerfile +20 -0
  137. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/build_image.sh +67 -0
  138. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/env.list +35 -0
  139. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/run_image.sh +23 -0
  140. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-standard-image/docker-compose-standard-image.yml +33 -0
  141. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-standard-image/env.list +55 -0
  142. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/h2/keycloakdb.mv.db +0 -0
  143. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/h2/keycloakdb.trace.db +236 -0
  144. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/kcals-realm.json +1807 -0
  145. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/kcals-users-0.json +24 -0
  146. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/master-realm.json +1953 -0
  147. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/master-users-0.json +23 -0
  148. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/tmp/kc-gzip-cache/nnbna/js/keycloak.js.gz +0 -0
  149. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose-dev-network.yml +31 -0
  150. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose-nginx.yml +48 -0
  151. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose.yml +24 -0
  152. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/kcals-realm.json +1898 -0
  153. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/kcals-users-0.json +319 -0
  154. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/master-realm.json +1953 -0
  155. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/master-users-0.json +23 -0
  156. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/cert.pem +25 -0
  157. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/key.pem +28 -0
  158. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/nginx.conf +73 -0
  159. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/startup_log_nginx.txt +0 -0
  160. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/startup_log_no_nginx.txt +0 -0
  161. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/unused/auth_provider.py +80 -0
  162. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/unused/unused-docker-compose-keycloak.sh +13 -0
  163. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/python-anywhere/python_anywhere_wsgi.py +116 -0
  164. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/readme-devops.md +31 -0
  165. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/db.dbml +14 -0
  166. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/graphics/readme.md +12 -0
  167. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/logic/readme.md +19 -0
  168. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/logic_suggestions/readme_logic_suggestions.md +3 -0
  169. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/mcp_learning/mcp.prompt +39 -0
  170. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/mcp_learning/mcp_schema.json +30 -0
  171. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/models-not-code.png +0 -0
  172. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/runtime engines.png +0 -0
  173. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/system-creation-vibe.md +158 -0
  174. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_1_context.prompt.md +43 -0
  175. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_2_functionality.prompt.md +69 -0
  176. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_3_architecture.prompt.md +29 -0
  177. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/logic_bank_api.prompt +342 -0
  178. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/logic_example.py +41 -0
  179. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/react_map.prompt.md +13 -0
  180. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/react_tree.prompt.md +10 -0
  181. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_consumer.py +60 -0
  182. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_producer.py +127 -0
  183. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_readme.md +3 -0
  184. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_context_results.txt +142 -0
  185. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_discovery_response.json +150 -0
  186. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_request.prompt +46 -0
  187. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_schema.txt +47 -0
  188. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_tool_context_response.json +34 -0
  189. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_tool_context_response_get.json +18 -0
  190. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/mcp_client_executor.py +545 -0
  191. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/mcp_server_discovery.json +9 -0
  192. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/readme-mcp.md +9 -0
  193. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/N8N_WebHook_from_ApiLogicServer.json +394 -0
  194. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/n8n_producer.py +172 -0
  195. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/n8n_readme.md +67 -0
  196. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/row_dict_maps/OrderB2BMapper.py +54 -0
  197. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/row_dict_maps/row_dict_maps_readme.md +3 -0
  198. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/system/FlaskKafka.py +105 -0
  199. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/system/RowDictMapper.py +416 -0
  200. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/api/api_discovery/order_b2b.py +92 -0
  201. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/database/db.sqlite +0 -0
  202. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/docs/er_diagram.png +0 -0
  203. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/integration/row_dict_maps/OrderB2B.py +36 -0
  204. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/integration/row_dict_maps/OrderShipping.py +30 -0
  205. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/logic/declare_logic.py +147 -0
  206. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/ui/admin/admin.yaml +175 -0
  207. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/declarative-vs-procedural-comparison.html +110 -0
  208. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/declare_logic.py +81 -0
  209. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/load_verify_rules.py +217 -0
  210. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/app_integration.py +23 -0
  211. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/auto_discovery.py +52 -0
  212. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/check_credit.py +44 -0
  213. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/mcp_client_executor_request.py +50 -0
  214. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/readme_logic_discovery.md +9 -0
  215. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/use_case.py +31 -0
  216. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/credit_service.py +204 -0
  217. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/declarative-vs-procedural-comparison.md +295 -0
  218. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/declarative-vs-procedural-comparison.png +0 -0
  219. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/readme_logic.md +249 -0
  220. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme.md +495 -0
  221. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_project.md +43 -0
  222. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_standard.md +492 -0
  223. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_vibe.md +353 -0
  224. api_logic_server_cli/prototypes/manager/samples/basic_demo/requirements.txt +3 -0
  225. api_logic_server_cli/prototypes/manager/samples/basic_demo/run.ps1 +30 -0
  226. api_logic_server_cli/prototypes/manager/samples/basic_demo/run.sh +55 -0
  227. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/__init__.py +0 -0
  228. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/__init__.py +0 -0
  229. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/abstract_authentication_provider.py +34 -0
  230. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/keycloak/auth_provider.py +238 -0
  231. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/memory/auth_provider.py +161 -0
  232. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/memory/auth_provider_no_swagger.py +98 -0
  233. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/sql/auth_provider.py +127 -0
  234. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/declare_security.py +49 -0
  235. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/readme_security.md +16 -0
  236. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/authentication.py +129 -0
  237. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/authorization.py +473 -0
  238. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/custom_swagger.json +62 -0
  239. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/__init__.py +0 -0
  240. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/__init__.py +0 -0
  241. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/behave_logic_report.py +256 -0
  242. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/behave_run.py +64 -0
  243. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/about.feature +12 -0
  244. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/about.py +20 -0
  245. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/test_utils.py +133 -0
  246. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/logs/behave.log +0 -0
  247. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md +4 -0
  248. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Intro.md +75 -0
  249. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Sample.md +1180 -0
  250. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/basic/server_test.py +33 -0
  251. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/readme_test.md +395 -0
  252. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/__init__.py +0 -0
  253. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/admin.yaml +173 -0
  254. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/admin_loader.py +217 -0
  255. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/authentication_admin.yaml +99 -0
  256. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/home.js +48 -0
  257. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/mcp_admin.yaml +53 -0
  258. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.browserslistrc +12 -0
  259. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.dockerignore +47 -0
  260. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.editorconfig +16 -0
  261. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.eslintrc.json +51 -0
  262. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.gitignore +47 -0
  263. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/README.md +42 -0
  264. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/angular.json +206 -0
  265. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/app_model.yaml +303 -0
  266. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/docker-compose-ontimize.yml +54 -0
  267. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/protractor.conf.js +32 -0
  268. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/src/app.e2e-spec.ts +23 -0
  269. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/src/app.po.ts +11 -0
  270. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/tsconfig.json +13 -0
  271. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/karma.conf.js +32 -0
  272. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/nginx/nginx.conf +29 -0
  273. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/ngsw-config.json +29 -0
  274. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/package-lock.json +22651 -0
  275. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/package.json +69 -0
  276. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app-routing.module.ts +25 -0
  277. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.html +1 -0
  278. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.scss +1 -0
  279. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.spec.ts +35 -0
  280. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.ts +9 -0
  281. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.config.ts +43 -0
  282. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.module.ts +37 -0
  283. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login-routing.module.ts +12 -0
  284. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.html +58 -0
  285. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.scss +155 -0
  286. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.ts +81 -0
  287. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.module.ts +18 -0
  288. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.theme.scss +51 -0
  289. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/Customer-routing.module.ts +37 -0
  290. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/Customer.module.ts +19 -0
  291. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.html +90 -0
  292. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.scss +0 -0
  293. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.ts +32 -0
  294. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.html +44 -0
  295. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.scss +0 -0
  296. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.ts +23 -0
  297. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.html +26 -0
  298. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.scss +0 -0
  299. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.ts +18 -0
  300. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/Item-routing.module.ts +30 -0
  301. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/Item.module.ts +19 -0
  302. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.html +72 -0
  303. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.scss +0 -0
  304. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.ts +32 -0
  305. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.html +55 -0
  306. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.scss +0 -0
  307. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.ts +23 -0
  308. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.html +60 -0
  309. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.scss +0 -0
  310. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.ts +18 -0
  311. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/Order-routing.module.ts +37 -0
  312. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/Order.module.ts +19 -0
  313. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.html +114 -0
  314. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.scss +0 -0
  315. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.ts +32 -0
  316. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.html +48 -0
  317. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.scss +0 -0
  318. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.ts +23 -0
  319. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.html +43 -0
  320. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.scss +0 -0
  321. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.ts +18 -0
  322. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/Product-routing.module.ts +37 -0
  323. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/Product.module.ts +19 -0
  324. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.html +91 -0
  325. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.scss +0 -0
  326. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.ts +32 -0
  327. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.html +35 -0
  328. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.scss +0 -0
  329. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.ts +23 -0
  330. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.html +20 -0
  331. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.scss +0 -0
  332. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.ts +18 -0
  333. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about-routing.module.ts +13 -0
  334. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.html +39 -0
  335. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.scss +35 -0
  336. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.ts +17 -0
  337. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.module.ts +18 -0
  338. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.theme.scss +14 -0
  339. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home-routing.module.ts +17 -0
  340. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.html +1 -0
  341. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.scss +3 -0
  342. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.ts +21 -0
  343. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.module.ts +18 -0
  344. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main-routing.module.ts +32 -0
  345. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main-theme.scss +56 -0
  346. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.html +8 -0
  347. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.scss +1 -0
  348. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.ts +20 -0
  349. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.module.ts +22 -0
  350. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings-routing.module.ts +14 -0
  351. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.html +14 -0
  352. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.scss +44 -0
  353. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.ts +46 -0
  354. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.module.ts +18 -0
  355. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.html +1 -0
  356. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.scss +0 -0
  357. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.ts +16 -0
  358. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.html +1 -0
  359. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.scss +0 -0
  360. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.ts +16 -0
  361. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.html +1 -0
  362. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.scss +0 -0
  363. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.ts +16 -0
  364. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.html +1 -0
  365. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.scss +0 -0
  366. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.ts +16 -0
  367. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/app.menu.config.ts +45 -0
  368. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/app.services.config.ts +5 -0
  369. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/constant.ts +4 -0
  370. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/shared.module.ts +15 -0
  371. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/.gitkeep +0 -0
  372. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/css/app.scss +20 -0
  373. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/css/loader.css +173 -0
  374. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/i18n/en.json +44 -0
  375. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/i18n/es.json +42 -0
  376. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize128.png +0 -0
  377. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize16.png +0 -0
  378. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize256.png +0 -0
  379. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize32.png +0 -0
  380. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize48.png +0 -0
  381. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize64.png +0 -0
  382. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize72.png +0 -0
  383. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize96.png +0 -0
  384. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/github.png +0 -0
  385. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/login_bg.png +0 -0
  386. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/no-image-transparent.png +0 -0
  387. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/no-image.png +0 -0
  388. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/ontimize.png +0 -0
  389. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/ontimize_web_log.png +0 -0
  390. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-closed.png +0 -0
  391. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-closed.svg +1 -0
  392. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-opened.png +0 -0
  393. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-opened.svg +1 -0
  394. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/user_profile.png +0 -0
  395. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/js/domchange.js +110 -0
  396. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/js/keyboard.js +24 -0
  397. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/environments/environment.prod.ts +11 -0
  398. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/environments/environment.ts +15 -0
  399. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/favicon.ico +0 -0
  400. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/index.html +30 -0
  401. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/main.ts +15 -0
  402. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/manifest.webmanifest +59 -0
  403. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/polyfills.ts +66 -0
  404. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/styles.scss +1 -0
  405. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/test.ts +16 -0
  406. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.app.json +18 -0
  407. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.json +25 -0
  408. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.spec.json +18 -0
  409. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/andrew.jpg +0 -0
  410. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/anne.jpg +0 -0
  411. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/janet.jpg +0 -0
  412. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/laura.jpg +0 -0
  413. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/margaret.jpg +0 -0
  414. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/michael.jpg +0 -0
  415. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/nancy.jpg +0 -0
  416. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/robert.jpg +0 -0
  417. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/steven.jpg +0 -0
  418. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/beverages.gif +0 -0
  419. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/cereals.gif +0 -0
  420. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/condiments.gif +0 -0
  421. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/confections.gif +0 -0
  422. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/diary.gif +0 -0
  423. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/meat.gif +0 -0
  424. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/produce.gif +0 -0
  425. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/seafood.gif +0 -0
  426. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/README.md +16 -0
  427. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/README_create_react_app.md +70 -0
  428. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/package-lock.json +18469 -0
  429. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/package.json +47 -0
  430. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/favicon.ico +0 -0
  431. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/index.html +43 -0
  432. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/logo192.png +0 -0
  433. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/logo512.png +0 -0
  434. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/manifest.json +25 -0
  435. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/robots.txt +3 -0
  436. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.css +38 -0
  437. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.js +80 -0
  438. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.test.js +8 -0
  439. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Config.js +527 -0
  440. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Customer.js +218 -0
  441. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Item.js +190 -0
  442. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Order.js +189 -0
  443. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Product.js +159 -0
  444. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/app_loader.js +24 -0
  445. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/index.css +13 -0
  446. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/index.js +17 -0
  447. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/logo.svg +1 -0
  448. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/.eslintrc +5 -0
  449. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
  450. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/default-settings.js +25 -0
  451. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/default-settings.ts +25 -0
  452. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/errors.js +116 -0
  453. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/errors.ts +116 -0
  454. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/index.test.tsx +7 -0
  455. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/index.tsx +11 -0
  456. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
  457. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
  458. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.js +124 -0
  459. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
  460. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/styles.module.css +9 -0
  461. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/reportWebVitals.js +13 -0
  462. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/setupTests.js +5 -0
  463. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/README.md +20 -0
  464. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/README_create_react_app.md +72 -0
  465. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/package-lock.json +18469 -0
  466. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/package.json +47 -0
  467. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/product-cards.png +0 -0
  468. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/favicon.ico +0 -0
  469. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/index.html +43 -0
  470. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/logo192.png +0 -0
  471. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/logo512.png +0 -0
  472. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/manifest.json +25 -0
  473. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/robots.txt +3 -0
  474. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.css +38 -0
  475. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.js +80 -0
  476. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.test.js +8 -0
  477. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Config.js +527 -0
  478. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Customer.js +218 -0
  479. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Item.js +190 -0
  480. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Order.js +189 -0
  481. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Product.js +241 -0
  482. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/app_loader.js +24 -0
  483. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/index.css +13 -0
  484. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/index.js +17 -0
  485. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/logo.svg +1 -0
  486. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/.eslintrc +5 -0
  487. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
  488. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.js +25 -0
  489. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.ts +25 -0
  490. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.js +116 -0
  491. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.ts +116 -0
  492. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/index.test.tsx +7 -0
  493. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/index.tsx +11 -0
  494. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
  495. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
  496. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.js +124 -0
  497. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
  498. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/styles.module.css +9 -0
  499. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/reportWebVitals.js +13 -0
  500. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/setupTests.js +5 -0
  501. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/templates/bar_chart.jinja +64 -0
  502. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/templates/content.html +3 -0
  503. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/py.py +121 -0
  504. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/readme_venv.md +20 -0
  505. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/requirements-no-cli.txt +33 -0
  506. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv-linux.sh +28 -0
  507. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv.ps1 +21 -0
  508. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv.sh +28 -0
  509. api_logic_server_cli/prototypes/manager/samples/dbs/readme_dbs.md +4 -4
  510. api_logic_server_cli/prototypes/manager/samples/readme_samples.md +13 -6
  511. api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace +3 -2
  512. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/METADATA +1 -1
  513. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/RECORD +517 -17
  514. api_logic_server_cli/prototypes/manager/.vscode/.copilot-instructions.md +0 -58
  515. api_logic_server_cli/prototypes/manager/.vscode/ApiLogicServer.code-workspace +0 -15
  516. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/WHEEL +0 -0
  517. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/entry_points.txt +0 -0
  518. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/licenses/LICENSE +0 -0
  519. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,772 @@
1
+ """Flask configuration variables."""
2
+ from os import environ, path
3
+ from pathlib import Path
4
+ import os
5
+ import typing
6
+ from dotenv import load_dotenv
7
+ import logging, logging.config
8
+ from enum import Enum
9
+ import socket
10
+ import json
11
+
12
+
13
+ '''
14
+ #als: configuration settings
15
+
16
+ For complete flask_sqlachemy config parameters and session handling,
17
+ see: file flask_sqlalchemy/__init__.py AND flask/config.py
18
+
19
+ app.config.setdefault('SQLALCHEMY_DATABASE_URI', 'sqlite:///:memory:')
20
+ app.config.setdefault('SQLALCHEMY_BINDS', None)
21
+ app.config.setdefault('SQLALCHEMY_NATIVE_UNICODE', None)
22
+ app.config.setdefault('SQLALCHEMY_ECHO', False)
23
+ app.config.setdefault('SQLALCHEMY_RECORD_QUERIES', None)
24
+ app.config.setdefault('SQLALCHEMY_POOL_SIZE', None)
25
+ app.config.setdefault('SQLALCHEMY_POOL_TIMEOUT', None)
26
+ app.config.setdefault('SQLALCHEMY_POOL_RECYCLE', None)
27
+ app.config.setdefault('SQLALCHEMY_MAX_OVERFLOW', None)
28
+ app.config.setdefault('SQLALCHEMY_COMMIT_ON_TEARDOWN', False)
29
+ '''
30
+
31
+ class ExtendedEnum(Enum):
32
+ """
33
+ enum that supports list() to print allowed values
34
+
35
+ Thanks: https://stackoverflow.com/questions/29503339/how-to-get-all-values-from-python-enum-class
36
+ """
37
+
38
+ @classmethod
39
+ def list(cls):
40
+ return list(map(lambda c: c.value, cls))
41
+
42
+ class OptLocking(ExtendedEnum):
43
+ IGNORED = "ignored"
44
+ OPTIONAL = "optional"
45
+ REQUIRED = "required"
46
+
47
+
48
+ basedir = path.abspath(path.dirname(__file__))
49
+ load_dotenv(path.join(basedir, "default.env"))
50
+ project_path = Path(__file__).parent.parent
51
+ app_logger = logging.getLogger('api_logic_server_app')
52
+
53
+ def is_docker() -> bool:
54
+ """ running docker? dir exists: /home/api_logic_server """
55
+ path = '/home/api_logic_server'
56
+ path_result = os.path.isdir(path) # this *should* exist only on docker
57
+ env_result = "DOCKER" == os.getenv('APILOGICSERVER_RUNNING')
58
+ # assert path_result == env_result
59
+ return path_result
60
+
61
+
62
+
63
+ # ==================================
64
+ # LOGGING SETUP
65
+ # ==================================
66
+
67
+ def logging_setup() -> logging.Logger:
68
+ """
69
+ Setup Logging
70
+ """
71
+ import yaml
72
+ global app_logger, debug_value, project_path
73
+ logging_config = f'{project_path}/config/logging.yml'
74
+ if os.getenv('APILOGICPROJECT_LOGGING_CONFIG'):
75
+ logging_config = project_path.joinpath(os.getenv("APILOGICPROJECT_LOGGING_CONFIG"))
76
+ with open(logging_config,'rt') as f: # see also logic/declare_logic.py
77
+ config=yaml.safe_load(f.read())
78
+ f.close()
79
+ logging.config.dictConfig(config) # log levels: notset 0, debug 10, info 20, warn 30, error 40, critical 50
80
+ app_logger = logging.getLogger("api_logic_server_app")
81
+ debug_value = os.getenv('APILOGICPROJECT_DEBUG')
82
+ if debug_value is not None: # > export APILOGICPROJECT_DEBUG=True
83
+ debug_value = debug_value.upper()
84
+ if debug_value.startswith("F") or debug_value.startswith("N"):
85
+ app_logger.setLevel(logging.INFO)
86
+ else:
87
+ app_logger.setLevel(logging.DEBUG)
88
+ app_logger.debug(f'\nDEBUG level set from env\n')
89
+ # app_logger.info(f'\nAPI Logic Project Server Setup ({project_name}) Starting with CLI args: \n.. {args}\n')
90
+ # app_logger.info(f'Created August 03, 2024 09:34:01 at {str(project_path)}\n')
91
+ return app_logger
92
+
93
+
94
+ class Config:
95
+ """
96
+
97
+ Set default Flask configuration from .env file.
98
+
99
+ These values are overridden by api_logic_server_run cli args, and APILOGICPROJECT_ env variables.
100
+
101
+ Code should therefore access these ONLY as described in Args, below.
102
+
103
+ """
104
+ if os.getenv("EXPERIMENT") == '+':
105
+ logging_setup() # set up logging as early as possible so capture critical config logging
106
+
107
+ # Project Creation Defaults (overridden from args, env variables)
108
+ CREATED_API_PREFIX = "/api"
109
+ CREATED_FLASK_HOST = "localhost"
110
+ """ where clients find the API (eg, cloud server addr)"""
111
+
112
+ CREATED_SWAGGER_HOST = "localhost"
113
+ """ where swagger (and other clients) find the API """
114
+ if CREATED_SWAGGER_HOST == "":
115
+ CREATED_SWAGGER_HOST = CREATED_FLASK_HOST #
116
+ if is_docker and CREATED_FLASK_HOST == "localhost":
117
+ CREATED_FLASK_HOST = "0.0.0.0" # enables docker run.sh (where there are no args)
118
+ CREATED_PORT = "5656"
119
+ CREATED_SWAGGER_PORT = CREATED_PORT
120
+ """ for codespaces - see values in launch config """
121
+ CREATED_HTTP_SCHEME = "http"
122
+
123
+
124
+ # General Config
125
+ SECRET_KEY = environ.get("SECRET_KEY")
126
+ FLASK_APP = environ.get("FLASK_APP")
127
+ FLASK_ENV = environ.get("FLASK_ENV")
128
+ DEBUG = environ.get("DEBUG")
129
+
130
+
131
+ # Database
132
+ db_path = str(project_path.joinpath('database/db.sqlite'))
133
+ SQLALCHEMY_DATABASE_URI : typing.Optional[str] = f"sqlite:///{db_path}"
134
+ # override SQLALCHEMY_DATABASE_URI here as required
135
+
136
+ # Python 3.13+ compatibility: Convert PostgreSQL URLs to use psycopg3
137
+ import sys
138
+ if sys.version_info >= (3, 13) and SQLALCHEMY_DATABASE_URI.startswith('postgresql://'):
139
+ SQLALCHEMY_DATABASE_URI = SQLALCHEMY_DATABASE_URI.replace('postgresql://', 'postgresql+psycopg://')
140
+ app_logger.debug(f'config.py - converted PostgreSQL URL for Python 3.13+: {SQLALCHEMY_DATABASE_URI}')
141
+
142
+ BACKTIC_AS_QUOTE = False # use backtic as quote for table names for API Bridge
143
+ if SQLALCHEMY_DATABASE_URI.startswith("mysql") or SQLALCHEMY_DATABASE_URI.startswith("mariadb"):
144
+ BACKTIC_AS_QUOTE = True
145
+
146
+ ONTIMIZE_SERVICE_TYPE = "OntimizeEE" # "OntimizeEE" uses the API Bridge / "JSONAPI" / "LAC" | Args.service_type
147
+
148
+ app_logger.debug(f'config.py - SQLALCHEMY_DATABASE_URI: {SQLALCHEMY_DATABASE_URI}')
149
+
150
+ # as desired, use env variable: export SQLALCHEMY_DATABASE_URI='sqlite:////Users/val/dev/servers/docker_api_logic_project/database/db.sqliteXX'
151
+ if os.getenv('SQLALCHEMY_DATABASE_URI'): # e.g. export SECURITY_ENABLED=true
152
+ SQLALCHEMY_DATABASE_URI = os.getenv('SQLALCHEMY_DATABASE_URI')
153
+ app_logger.debug(f'.. overridden from env variable: {SQLALCHEMY_DATABASE_URI}')
154
+
155
+ # Python 3.13+ compatibility: Convert PostgreSQL URLs to use psycopg3 (for env override)
156
+ if sys.version_info >= (3, 13) and SQLALCHEMY_DATABASE_URI.startswith('postgresql://'):
157
+ SQLALCHEMY_DATABASE_URI = SQLALCHEMY_DATABASE_URI.replace('postgresql://', 'postgresql+psycopg://')
158
+ app_logger.debug(f'config.py - converted PostgreSQL URL for Python 3.13+: {SQLALCHEMY_DATABASE_URI}')
159
+
160
+
161
+ # KEYCLOAK Args
162
+ # https://apilogicserver.github.io/Docs/Security-Activation/
163
+ # als add-auth --provider-type=sql --db-url=
164
+ # als add-auth --provider-type=keycloak --db-url=localhost
165
+ # als add-auth --provider-type=keycloak --db-url=http://10.0.0.77:8080
166
+ kc_base = os.getenv('KEYCLOAK_BASE','https://localhost:8080')
167
+ #kc_base = 'http://localhost:8080'
168
+ ''' keycloak location '''
169
+ KEYCLOAK_REALM = os.getenv('KEYCLOAK_REALM','kcals')
170
+ KEYCLOAK_BASE = os.getenv('KEYCLOAK_BASE',f'{kc_base}')
171
+ KEYCLOAK_BASE_URL = os.getenv('KEYCLOAK_BASE_URL',f'{kc_base}/realms/{KEYCLOAK_REALM}')
172
+ KEYCLOAK_CLIENT_ID = os.getenv('KEYCLOAK_CLIENT_ID','alsclient')
173
+ ''' keycloak client id '''
174
+
175
+ SECURITY_ENABLED = os.getenv("SECURITY_ENABLED",False)
176
+ SECURITY_PROVIDER = os.getenv('SECURITY_PROVIDER', None) # type: ignore # type: str
177
+ if os.getenv('SECURITY_ENABLED'): # e.g. export SECURITY_ENABLED=true
178
+ security_export = os.getenv('SECURITY_ENABLED','false').lower() # type: ignore # type: str
179
+ SECURITY_ENABLED = security_export not in ["false", "no"] # NO SEC
180
+ app_logger.debug(f'Security .. overridden from env variable SECURITY_ENABLED: {SECURITY_ENABLED}')
181
+ if SECURITY_ENABLED:
182
+ from security.authentication_provider.sql.auth_provider import Authentication_Provider as SQL_Authentication_Provider
183
+ from security.authentication_provider.keycloak.auth_provider import Authentication_Provider as KC_Authentication_Provider
184
+ # typically, authentication_provider is [ keycloak | sql ]
185
+ SECURITY_PROVIDER = KC_Authentication_Provider if "keycloak" in str(SECURITY_PROVIDER).lower() else SQL_Authentication_Provider
186
+
187
+ app_logger.info(f'config.py - security enabled: {SECURITY_ENABLED} using SECURITY_PROVIDER: {str(SECURITY_PROVIDER)}\n')
188
+
189
+ # Begin Multi-Database URLs (from ApiLogicServer add-db...)
190
+ auth_db_path = str(project_path.joinpath('database/authentication_db.sqlite'))
191
+ SQLALCHEMY_DATABASE_URI_AUTHENTICATION = f'sqlite:///{auth_db_path}'
192
+ # Python 3.13+ compatibility: Convert PostgreSQL URLs to use psycopg3 (for env override)
193
+ if sys.version_info >= (3, 13) and SQLALCHEMY_DATABASE_URI_AUTHENTICATION.startswith('postgresql://'):
194
+ SQLALCHEMY_DATABASE_URI_AUTHENTICATION = SQLALCHEMY_DATABASE_URI_AUTHENTICATION.replace('postgresql://', 'postgresql+psycopg://')
195
+ app_logger.debug(f'config.py - converted PostgreSQL URL for Python 3.13+: {SQLALCHEMY_DATABASE_URI_AUTHENTICATION}')
196
+ app_logger.info(f'config.py - SQLALCHEMY_DATABASE_URI_AUTHENTICATION: {SQLALCHEMY_DATABASE_URI_AUTHENTICATION}\n')
197
+
198
+ # as desired, use env variable: export SQLALCHEMY_DATABASE_URI='sqlite:////Users/val/dev/servers/docker_api_logic_project/database/db.sqliteXX'
199
+ if os.getenv('SQLALCHEMY_DATABASE_URI_AUTHENTICATION'):
200
+ SQLALCHEMY_DATABASE_URI_AUTHENTICATION = os.getenv('SQLALCHEMY_DATABASE_URI_AUTHENTICATION') # type: ignore # type: str
201
+ app_logger.debug(f'.. overridden from env variable: SQLALCHEMY_DATABASE_URI_AUTHENTICATION')
202
+
203
+ # Single Page App (SPA) Landing Page Database
204
+ landing_db_path = project_path.joinpath('database/db_spa.sqlite')
205
+ SQLALCHEMY_DATABASE_URI_LANDING = f'sqlite:///{landing_db_path}'
206
+ if landing_db_path.exists():
207
+ app_logger.info(f'config.py - SQLALCHEMY_DATABASE_URI_LANDING: {SQLALCHEMY_DATABASE_URI_LANDING}\n')
208
+
209
+
210
+ SQLALCHEMY_DATABASE_URI_MCP = 'sqlite:///../database/mcp_db.sqlite'
211
+ app_logger.info(f'config.py - SQLALCHEMY_DATABASE_URI_MCP: {SQLALCHEMY_DATABASE_URI_MCP}\n')
212
+
213
+ # as desired, use env variable: export SQLALCHEMY_DATABASE_URI='sqlite:////Users/val/dev/servers/docker_api_logic_project/database/db.sqliteXX'
214
+ if os.getenv('SQLALCHEMY_DATABASE_URI_MCP'):
215
+ SQLALCHEMY_DATABASE_URI_MCP = os.getenv('SQLALCHEMY_DATABASE_URI_MCP') # type: ignore # type: str
216
+ app_logger.debug(f'.. overridden from env variable: SQLALCHEMY_DATABASE_URI_MCP')
217
+
218
+ # End Multi-Database URLs (from ApiLogicServer add-db...)
219
+
220
+ # SQLALCHEMY_ECHO = environ.get("SQLALCHEMY_ECHO")
221
+ SQLALCHEMY_TRACK_MODIFICATIONS = False
222
+ PROPAGATE_EXCEPTIONS = False
223
+
224
+ KAFKA_PRODUCER = None
225
+ KAFKA_CONSUMER = None
226
+ KAFKA_CONSUMER_GROUP = None
227
+ KAFKA_SERVER = None
228
+ KAFKA_SERVER = os.getenv('KAFKA_SERVER', None) # 'localhost:9092' # if running locally default
229
+ if KAFKA_SERVER is not None and KAFKA_SERVER != "None" and KAFKA_SERVER != "":
230
+ app_logger.info(f'config.py - KAFKA_SERVER: {KAFKA_SERVER}')
231
+ KAFKA_PRODUCER = os.getenv('KAFKA_PRODUCER',{"bootstrap.servers": f"{KAFKA_SERVER}"}) # , "client.id": "aaa.b.c.d"}'
232
+ KAFKA_CONSUMER_GROUP = os.getenv('KAFKA_CONSUMER_GROUP') #'als-default-group1'
233
+ if KAFKA_CONSUMER_GROUP is not None: # and KAFKA_CONSUMER_GROUP != "None":
234
+ KAFKA_CONSUMER = os.getenv('KAFKA_CONSUMER', {"bootstrap.servers": f"{KAFKA_SERVER}", "group.id": f"{KAFKA_CONSUMER_GROUP}", "enable.auto.commit": "false", "auto.offset.reset": "earliest"})
235
+ else:
236
+ app_logger.info(f'config.py - KAFKA_SERVER: {KAFKA_SERVER} - not set, no kafka producer/consumer')
237
+ producer_is_empty = "" == KAFKA_PRODUCER
238
+ app_logger.info(f'config.py - KAFKA_PRODUCER: {KAFKA_PRODUCER} (is_empty={producer_is_empty})')
239
+ app_logger.info(f'config.py - KAFKA_CONSUMER: {KAFKA_CONSUMER}')
240
+ app_logger.info(f'config.py - KAFKA_CONSUMER_GROUP: {KAFKA_CONSUMER_GROUP}')
241
+ app_logger.info(f'config.py - KAFKA_SERVER: {KAFKA_SERVER}')
242
+ # N8N Webhook Args (for testing)
243
+ # see https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/?utm_source=n8n_app&utm_medium=node_settings_modal-credential_link&utm_campaign=n8n-nodes-base.webhook#path
244
+ # N8N is a workflow automation tool that allows you to connect different applications and automate tasks between them.
245
+ wh_scheme = "http"
246
+ wh_server = "localhost" # or cloud.n8n.io...
247
+ wh_port = 5678
248
+ wh_endpoint = "webhook-test" # This comes from the WebHook node in n8n
249
+ wh_path = "002fa0e8-f7aa-4e04-b4e3-e81aa29c6e69" # This comes from the WebHook node in n8n
250
+ wh_token = "YWRtaW46cA==" # This is the base64 encoded string of username:password (e.g. admin:password)
251
+ N8N_PRODUCER = {"authorization": f"Basic {wh_token}", "n8n_url": f'"{wh_scheme}://{wh_server}:{wh_port}/{wh_endpoint}/{wh_path}"'}
252
+ # Or enter the n8n_url directly:
253
+ #N8N_PRODUCER = {"authorization": f"Basic {wh_token}","n8n_url":"http://localhost:5678/webhook-test/002fa0e8-f7aa-4e04-b4e3-e81aa29c6e69"}
254
+ N8N_PRODUCER = None # comment out to enable N8N producer
255
+ # See integration/n8n/n8n_readme.md for more details
256
+
257
+
258
+ OPT_LOCKING = "optional"
259
+ if os.getenv('OPT_LOCKING'): # e.g. export OPT_LOCKING=required
260
+ opt_locking_export = os.getenv('OPT_LOCKING') # type: ignore # type: str
261
+ opt_locking = opt_locking_export.lower() # type: ignore
262
+ if opt_locking in OptLocking.list():
263
+ OPT_LOCKING = opt_locking
264
+ else:
265
+ print(f'\n{__name__}: Invalid OPT_LOCKING.\n..Valid values are {OptLocking.list()}')
266
+ exit(1)
267
+ app_logger.debug(f'Opt Locking .. overridden from env variable: {OPT_LOCKING}')
268
+
269
+
270
+
271
+ class Args():
272
+ """
273
+
274
+ Singleton class - typed accessors for flask_app.config values.
275
+
276
+ The source of truth is the flask_app.config.
277
+
278
+ Set from created values in Config, overwritten by cli args, then APILOGICPROJECT_ env variables.
279
+
280
+ This class provides **typed** access.
281
+
282
+ eg.
283
+
284
+ Args.instance.kafka_connect # note you need to access the instance
285
+ """
286
+
287
+ values = None
288
+
289
+ def __new__(cls, flask_app):
290
+ if not hasattr(cls, 'instance'):
291
+ cls.instance = super(Args, cls).__new__(cls)
292
+ return cls.instance
293
+
294
+
295
+ def __init__(self, flask_app):
296
+ """
297
+
298
+ Create args object with CREATED_ defaults.
299
+
300
+ Defaults assigned to flask_app.config[name]
301
+
302
+ 1. flask_app.config names do not have suffix (e.g. flask_app.config["FLASK_HOST"])
303
+
304
+ 2. Override with CLI arguments (use -h to see names)
305
+
306
+ 3. Then override with env variables (prefixed, e.g., APILOGICPROJECT_FLASK_HOST)
307
+
308
+ Args:
309
+ flask_app (_type_): created flask_app
310
+ """
311
+ self.flask_app = flask_app
312
+ self.api_prefix = Config.CREATED_API_PREFIX
313
+ self.flask_host = Config.CREATED_FLASK_HOST
314
+ self.swagger_host = Config.CREATED_SWAGGER_HOST
315
+ self.port = Config.CREATED_PORT
316
+ self.swagger_port = Config.CREATED_PORT
317
+ self.http_scheme = Config.CREATED_HTTP_SCHEME
318
+ self.kafka_producer = Config.KAFKA_PRODUCER
319
+ self.kafka_consumer = Config.KAFKA_CONSUMER
320
+ self.kafka_consumer_group = Config.KAFKA_CONSUMER_GROUP
321
+ self.keycloak_base = Config.KEYCLOAK_BASE
322
+ self.keycloak_realm = Config.KEYCLOAK_REALM
323
+ self.keycloak_base_url = Config.KEYCLOAK_BASE_URL
324
+ self.keycloak_client_id = Config.KEYCLOAK_CLIENT_ID
325
+ self.backtic_as_quote = Config.BACKTIC_AS_QUOTE
326
+ self.service_type = Config.ONTIMIZE_SERVICE_TYPE
327
+ self.wh_scheme = Config.wh_scheme
328
+ self.wh_server = Config.wh_server
329
+ self.wh_port = Config.wh_port
330
+ self.wh_endpoint = Config.wh_endpoint
331
+ self.wh_path = Config.wh_path
332
+ self.wh_token = Config.wh_token
333
+ self.n8n_producer = Config.N8N_PRODUCER
334
+ self.verbose = False
335
+ self.create_and_run = False
336
+
337
+ # KEYCLOAK ARGS
338
+ @property
339
+ def keycloak_realm(self) -> str:
340
+ return self.flask_app.config["KEYCLOAK_REALM"]
341
+
342
+ @keycloak_realm.setter
343
+ def keycloak_realm(self, realm):
344
+ self.flask_app.config["KEYCLOAK_REALM"] = realm
345
+
346
+ @property
347
+ def keycloak_base(self) -> str:
348
+ return self.flask_app.config["KEYCLOAK_BASE"]
349
+
350
+ @keycloak_base.setter
351
+ def keycloak_base(self, base):
352
+ self.flask_app.config["KEYCLOAK_BASE"] = base
353
+
354
+ @property
355
+ def keycloak_base_url(self) -> str:
356
+ return self.flask_app.config["KEYCLOAK_BASE_URL"]
357
+
358
+ @keycloak_base_url.setter
359
+ def keycloak_base_url(self, base):
360
+ self.flask_app.config["KEYCLOAK_BASE_URL"] = base
361
+
362
+ @property
363
+ def keycloak_client_id(self) -> str:
364
+ return self.flask_app.config["KEYCLOAK_CLIENT_ID"]
365
+
366
+ @keycloak_client_id.setter
367
+ def keycloak_client_id(self, base):
368
+ self.flask_app.config["KEYCLOAK_CLIENT_ID"] = base
369
+
370
+
371
+ @property
372
+ def port(self) -> str:
373
+ """ port to which flask will be bound """
374
+ return self.flask_app.config["PORT"] # if "PORT" in self.flask_app.config else self.__port
375
+
376
+ @port.setter
377
+ def port(self, a):
378
+ self.flask_app.config["PORT"] = a
379
+
380
+
381
+ @property
382
+ def swagger_port(self) -> str:
383
+ """ swagger port (eg, 443 for codespaces) (APILOGICPROJECT_EXTERNAL_PORT, also SWAGGER_PORT) """
384
+ if os.getenv("APILOGICPROJECT_EXTERNAL_PORT"):
385
+ self.flask_app.config["SWAGGER_PORT"] = os.getenv("APILOGICPROJECT_EXTERNAL_PORT")
386
+ return self.flask_app.config["SWAGGER_PORT"]
387
+
388
+ @swagger_port.setter
389
+ def swagger_port(self, a):
390
+ self.flask_app.config["SWAGGER_PORT"] = a
391
+
392
+
393
+ @property
394
+ def swagger_host(self) -> str:
395
+ """ ip clients use to access API (APILOGICPROJECT_EXTERNAL_HOST, also SWAGGER_HOST) """
396
+ if os.getenv("APILOGICPROJECT_EXTERNAL_HOST"):
397
+ self.flask_app.config["SWAGGER_HOST"] = os.getenv("APILOGICPROJECT_EXTERNAL_HOST")
398
+ return self.flask_app.config["SWAGGER_HOST"]
399
+
400
+ @swagger_host.setter
401
+ def swagger_host(self, a):
402
+ self.flask_app.config["SWAGGER_HOST"] = a
403
+
404
+
405
+ @property
406
+ def flask_host(self) -> str:
407
+ """ ip to which flask will be bound """
408
+ return self.flask_app.config["FLASK_HOST"]
409
+
410
+ @flask_host.setter
411
+ def flask_host(self, a):
412
+ self.flask_app.config["FLASK_HOST"] = a
413
+
414
+
415
+ @property
416
+ def security_enabled(self) -> bool:
417
+ """ is security enabled. Stored as string, returned as bool """
418
+ return_security = self.flask_app.config["SECURITY_ENABLED"]
419
+ if isinstance(return_security, str):
420
+ security = return_security.lower() # type: ignore
421
+ if security in ["false", "no"]: # NO SEC
422
+ return_security = False
423
+ else:
424
+ return_security = True
425
+ return return_security
426
+
427
+
428
+ @security_enabled.setter
429
+ def security_enabled(self, a):
430
+ self.flask_app.config["SECURITY_ENABLED"] = a
431
+
432
+
433
+ @property
434
+ def security_provider(self):
435
+ """ class for auth provider (unused - see auth_provider) """
436
+ return self.flask_app.config["SECURITY_PROVIDER"]
437
+
438
+
439
+ @security_provider.setter
440
+ def security_provider(self, a):
441
+ raise Exception("Sorry, security_provider must be specified in the Config class")
442
+
443
+
444
+ @property
445
+ def api_logic_server_home(self):
446
+ """ location of ApiLogicServer-src (for admin_loader) """
447
+ return self.flask_app.config["APILOGICSERVER_HOME"] if 'APILOGICSERVER_HOME' in self.flask_app.config else None
448
+
449
+
450
+ @api_logic_server_home.setter
451
+ def api_logic_server_home(self, a):
452
+ self.flask_app.config["APILOGICSERVER_HOME"] = a
453
+
454
+
455
+ @property
456
+ def opt_locking(self) -> str:
457
+ """ values: ignored, optional, required """
458
+ return self.flask_app.config["OPT_LOCKING"]
459
+
460
+
461
+ @opt_locking.setter
462
+ def opt_locking(self, a):
463
+ opt_locking_export = self.flask_app.config('OPT_LOCKING') # type: ignore # type: str
464
+ opt_locking = opt_locking_export.lower() # type: ignore
465
+ if opt_locking in OptLocking.list():
466
+ OPT_LOCKING = opt_locking
467
+ else:
468
+ print(f'\n{__name__}: Invalid APILOGICPROJECT_OPT_LOCKING.\n..Valid values are {OptLocking.list()}')
469
+ exit(1)
470
+ app_logger.debug(f'Opt Locking .. overridden from env variable: {OPT_LOCKING}')
471
+
472
+ self.flask_app.config["OPT_LOCKING"] = a
473
+
474
+
475
+ @property
476
+ def api_prefix(self) -> str:
477
+ """ uri node for this project (e.g, /api) """
478
+ return self.flask_app.config["API_PREFIX"]
479
+
480
+ @api_prefix.setter
481
+ def api_prefix(self, a):
482
+ self.flask_app.config["API_PREFIX"] = a
483
+
484
+ @property
485
+ def backtic_as_quote(self) -> bool:
486
+ """ use backtic as quote for table names """
487
+ return self.flask_app.config["BACKTIC_AS_QUOTE"]
488
+
489
+ @backtic_as_quote.setter
490
+ def backtic_as_quote(self, a):
491
+ self.flask_app.config["BACKTIC_AS_QUOTE"] = a
492
+
493
+ @property
494
+ def service_type(self) -> str:
495
+ """ service type for OntimizeEE """
496
+ return self.flask_app.config["ONTIMIZE_SERVICE_TYPE"]
497
+ @service_type.setter
498
+ def service_type(self, a):
499
+ self.flask_app.config["ONTIMIZE_SERVICE_TYPE"] = a
500
+
501
+ @property
502
+ def http_scheme(self) -> str:
503
+ """ http or https """
504
+ return self.flask_app.config["HTTP_SCHEME"]
505
+
506
+ @http_scheme.setter
507
+ def http_scheme(self, a):
508
+ self.flask_app.config["HTTP_SCHEME"] = a
509
+
510
+
511
+ @property
512
+ def create_and_run(self):
513
+ """ internal use: ApiLogicServer create-and-run """
514
+ return self.flask_app.config["CREATE_AND_RUN"]
515
+
516
+ @create_and_run.setter
517
+ def create_and_run(self, a):
518
+ self.flask_app.config["CREATE_AND_RUN"] = a
519
+
520
+
521
+ @property
522
+ def verbose(self):
523
+ """ activate key loggers for debug """
524
+ return self.flask_app.config["VERBOSE"]
525
+
526
+ @verbose.setter
527
+ def verbose(self, a):
528
+ self.flask_app.config["VERBOSE"] = a
529
+
530
+
531
+ @property
532
+ def client_uri(self):
533
+ """ in prod env, port might be omitted (e.g., nginx) """
534
+ return self.flask_app.config["CLIENT_URI"] if "CLIENT_URI" in self.flask_app.config \
535
+ else None
536
+
537
+ @client_uri.setter
538
+ def client_uri(self, a):
539
+ self.flask_app.config["CLIENT_URI"] = a
540
+
541
+ @property
542
+ def kafka_producer(self) -> dict:
543
+ """ kafka connect string """
544
+ if "KAFKA_PRODUCER" in self.flask_app.config and self.flask_app.config["KAFKA_PRODUCER"] is not None:
545
+ if self.flask_app.config["KAFKA_PRODUCER"] is not None:
546
+ value = self.flask_app.config["KAFKA_PRODUCER"]
547
+ if isinstance(value, dict):
548
+ pass # eg, from VSCode Run Config: "APILOGICPROJECT_KAFKA_PRODUCER": "{\"bootstrap.servers\": \"localhost:9092\"}",
549
+ else:
550
+ value = json.loads(self.flask_app.config["KAFKA_PRODUCER"])
551
+ return value
552
+ return None
553
+
554
+ @kafka_producer.setter
555
+ def kafka_producer(self, a: str):
556
+ self.flask_app.config["KAFKA_PRODUCER"] = a
557
+
558
+ @property
559
+ def kafka_consumer(self) -> dict:
560
+ """ kafka enable consumer """
561
+ if "KAFKA_CONSUMER" in self.flask_app.config and self.flask_app.config["KAFKA_CONSUMER"] is not None:
562
+ value = self.flask_app.config["KAFKA_CONSUMER"]
563
+ if isinstance(value, dict):
564
+ pass # eg, from VSCode Run Config: "APILOGICPROJECT_KAFKA_PRODUCER": "{\"bootstrap.servers\": \"localhost:9092\"}",
565
+ else:
566
+ value = json.loads(self.flask_app.config["KAFKA_CONSUMER"])
567
+ return value
568
+ return None
569
+
570
+ @kafka_consumer.setter
571
+ def kafka_consumer(self, a: str):
572
+ self.flask_app.config["KAFKA_CONSUMER"] = a
573
+
574
+
575
+ @property
576
+ def kafka_consumer_group(self) -> dict:
577
+ """ kafka enable consumer group """
578
+ if "KAFKA_CONSUMER_GROUP" in self.flask_app.config:
579
+ if self.flask_app.config["KAFKA_CONSUMER_GROUP"] is not None:
580
+ return self.flask_app.config["KAFKA_CONSUMER_GROUP"]
581
+ return None
582
+
583
+ @kafka_consumer_group.setter
584
+ def kafka_consumer_group(self, a: str):
585
+ self.flask_app.config["KAFKA_CONSUMER_GROUP"] = a
586
+
587
+ @property
588
+ def n8n_producer(self) -> dict:
589
+ """ n8n connect string """
590
+ if "N8N_PRODUCER" in self.flask_app.config:
591
+ if self.flask_app.config["N8N_PRODUCER"] is not None:
592
+ value = self.flask_app.config["N8N_PRODUCER"]
593
+ if isinstance(value, dict):
594
+ pass # eg, from VSCode Run Config: "APILOGICPROJECT_N8N_PRODUCER": "{\"bootstrap.servers\": \"localhost:9092\"}",
595
+ else:
596
+ value = json.loads(self.flask_app.config["N8N_PRODUCER"])
597
+ return value
598
+ return None
599
+
600
+ @n8n_producer.setter
601
+ def n8n_producer(self, a: str):
602
+ self.flask_app.config["N8N_PRODUCER"] = a
603
+
604
+ # WebHook Args (used by N8N producer - see n8n_producer above)
605
+ @property
606
+ def wh_scheme(self) -> str:
607
+ """ n8n connect string """
608
+ return self.flask_app.config["WH_SCHEME"]
609
+ @wh_scheme.setter
610
+ def wh_scheme(self, a: str):
611
+ self.flask_app.config["WH_SCHEME"] = a
612
+
613
+ @property
614
+ def wh_server(self) -> str:
615
+ """ n8n connect string """
616
+ return self.flask_app.config["WH_SERVER"]
617
+ @wh_server.setter
618
+ def wh_server(self, a: str):
619
+ self.flask_app.config["WH_SERVER"] = a
620
+
621
+ @property
622
+ def wh_port(self) -> str:
623
+ """ n8n connect string """
624
+ return self.flask_app.config["WH_PORT"]
625
+
626
+ @wh_port.setter
627
+ def wh_port(self, a: str):
628
+ self.flask_app.config["WH_PORT"] = a
629
+
630
+ @property
631
+ def wh_endpoint(self) -> str:
632
+ """ n8n connect string """
633
+ return self.flask_app.config["WH_ENDPOINT"]
634
+ @wh_endpoint.setter
635
+ def wh_endpoint(self, a: str):
636
+ self.flask_app.config["WH_ENDPOINT"] = a
637
+ @property
638
+ def wh_path(self) -> str:
639
+ """ n8n connect string """
640
+ return self.flask_app.config["WH_PATH"]
641
+
642
+ @wh_path.setter
643
+ def wh_path(self, a: str):
644
+ self.flask_app.config["WH_PATH"] = a
645
+ @property
646
+ def wh_token(self) -> str:
647
+ """ n8n connect string """
648
+ return self.flask_app.config["WH_TOKEN"]
649
+ @wh_token.setter
650
+ def wh_token(self, a: str):
651
+ self.flask_app.config["WH_TOKEN"] = a
652
+
653
+
654
+ def __str__(self) -> str:
655
+ rtn = f'.. flask_host: {self.flask_host}, port: {self.port}, \n'\
656
+ f'.. swagger_host: {self.swagger_host}, swagger_port: {self.swagger_port}, \n'\
657
+ f'.. client_uri: {self.client_uri}, \n'\
658
+ f'.. http_scheme: {self.http_scheme}, api_prefix: {self.api_prefix}, \n'\
659
+ f'.. | verbose: {self.verbose}, create_and_run: {self.create_and_run}'
660
+ return rtn
661
+
662
+
663
+ def get_cli_args(self, args: 'Args', dunder_name: str):
664
+ """
665
+ returns tuple of start args:
666
+
667
+ (flask_host, swagger_host, port, swagger_port, http_scheme, verbose, create_and_run)
668
+ """
669
+
670
+ import socket
671
+ import warnings
672
+ import sys
673
+
674
+ # global flask_host, swagger_host, port, swagger_port, http_scheme, verbose, create_and_run
675
+
676
+ network_diagnostics = True
677
+ hostname = socket.gethostname()
678
+ try:
679
+ local_ip = socket.gethostbyname(hostname)
680
+ except:
681
+ local_ip = f"Warning - Failed local_ip = socket.gethostbyname(hostname) with hostname: {hostname}"
682
+ app_logger.debug(f"Failed local_ip = socket.gethostbyname(hostname) with hostname: {hostname}")
683
+
684
+ app_logger.debug(f"config - get_cli_args: Getting cli args, with hostname={hostname} on local_ip={local_ip}")
685
+ args.verbose = False
686
+ args.create_and_run = False
687
+
688
+ def make_wide(formatter, w=120, h=36):
689
+ """ Return a wider HelpFormatter, if possible."""
690
+ try:
691
+ # https://stackoverflow.com/a/5464440
692
+ # beware: "Only the name of this class is considered a public API."
693
+ kwargs = {'width': w, 'max_help_position': h}
694
+ formatter(None, **kwargs)
695
+ return lambda prog: formatter(prog, **kwargs)
696
+ except TypeError:
697
+ warnings.warn("argparse help formatter failed, falling back.")
698
+ return formatter
699
+
700
+ if dunder_name != "__main__":
701
+ app_logger.debug(f"config - get_cli_args: WSGI - no args, using creation default host/port.. sys.argv = {sys.argv}\n")
702
+ else: # gunicorn-friendly host/port settings ()
703
+ # thanks to https://www.geeksforgeeks.org/command-line-arguments-in-python/#argparse
704
+ import argparse
705
+ # Initialize parser
706
+ if len(sys.argv) == 1:
707
+ app_logger.debug("config - get_cli_args: No arguments - using creation default host/port")
708
+ else:
709
+ app_logger.debug(f"config - get_cli_args [{dunder_name}]: Parse the args")
710
+ msg = "API Logic Project"
711
+ parser = argparse.ArgumentParser(
712
+ formatter_class=make_wide(argparse.ArgumentDefaultsHelpFormatter))
713
+ parser.add_argument("--port",
714
+ help = f'port (Flask)', default = args.port)
715
+ parser.add_argument("--flask_host",
716
+ help = f'ip to which flask will be bound',
717
+ default = args.flask_host)
718
+ parser.add_argument("--swagger_host",
719
+ help = f'ip clients use to access API',
720
+ default = args.swagger_host)
721
+ parser.add_argument("--swagger_port",
722
+ help = f'swagger port (eg, 443 for codespaces)',
723
+ default = args.port)
724
+ parser.add_argument("--http_scheme",
725
+ help = f'http or https',
726
+ default = "http")
727
+ parser.add_argument("--verbose",
728
+ help = f'for more logging',
729
+ default = False)
730
+ parser.add_argument("--create_and_run",
731
+ help = f'system use - log how to open project',
732
+ default = False)
733
+
734
+ parser.add_argument("flask_host_p", nargs='?', default = args.flask_host)
735
+ parser.add_argument("port_p", nargs='?', default = args.port)
736
+ parser.add_argument("swagger_host_p", nargs='?', default = args.swagger_host)
737
+
738
+ parse_args = parser.parse_args()
739
+
740
+ """
741
+ accepting both positional (compatibility) and keyword args...
742
+ cases that matter:
743
+ no args
744
+ kw only: argv[1] starts with -
745
+ pos only
746
+ positional values always override keyword, so decide which parsed values to use...
747
+ """
748
+ if sys.argv[1].startswith("-"): # keyword arguments
749
+ args.port = parse_args.port
750
+ args.flask_host = parse_args.flask_host
751
+ args.swagger_host = parse_args.swagger_host
752
+ args.swagger_port = parse_args.swagger_port
753
+ args.http_scheme = parse_args.http_scheme
754
+ args.verbose = parse_args.verbose in ["True", "true"]
755
+ args.create_and_run = parse_args.create_and_run
756
+ else: # positional arguments (compatibility)
757
+ args.port = parse_args.port_p
758
+ args.flask_host = parse_args.flask_host_p
759
+ args.swagger_host = parse_args.swagger_host_p
760
+ if args.swagger_host.startswith("https://"):
761
+ args.swagger_host = args.swagger_host[8:]
762
+ if args.swagger_host.endswith("/"):
763
+ args.swagger_host = args.swagger_host[0:len(args.swagger_host)-1]
764
+
765
+ use_codespace_defaulting = True # experimental support to run default launch config
766
+ if use_codespace_defaulting and os.getenv('CODESPACES') and args.swagger_host == 'localhost':
767
+ app_logger.info('\n Applying Codespaces default port settings')
768
+ args.swagger_host = os.getenv('CODESPACE_NAME') + '-5656.app.github.dev' # CS 10/10/24: .app, no longer preview
769
+ args.swagger_port = 443
770
+ args.http_scheme = 'https'
771
+
772
+ return