ApiLogicServer 15.0.61__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.
- api_logic_server_cli/api_logic_server.py +4 -3
- api_logic_server_cli/api_logic_server_info.yaml +2 -2
- api_logic_server_cli/cli.py +2 -2
- api_logic_server_cli/database/basic_demo.sqlite +0 -0
- api_logic_server_cli/genai/{genai_admin_app.py → genai_react_app.py} +10 -2
- api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md +321 -2
- api_logic_server_cli/prototypes/base/docs/training/logic_bank_api.prompt +27 -0
- api_logic_server_cli/prototypes/base/logic/logic_discovery/use_case.py +5 -1
- api_logic_server_cli/prototypes/base/test/readme_test.md +395 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/basic_demo/docs/models-not-code.png +0 -0
- api_logic_server_cli/prototypes/basic_demo/docs/runtime engines.png +0 -0
- api_logic_server_cli/prototypes/basic_demo/iteration/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/basic_demo/logic/procedural/credit_service.py +204 -0
- api_logic_server_cli/prototypes/manager/.github/.copilot-instructions.md +1 -12
- api_logic_server_cli/prototypes/manager/.vscode/launch.json +2 -1
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/For_VSCode.dockerfile +10 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/devcontainer.json +64 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/readme.md +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/setup.sh +10 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.env +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.github/.copilot-instructions.md +581 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.gitignore +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/ApiLogicServer.xml +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Report_Behave_Logic.xml +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Run_Behave.xml +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Windows_Run_Behave.xml +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/run___No_Security.xml +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/run_docker.xml +59 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/launch.json +314 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/settings.json +40 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/venv_init.sh +64 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/_config.yml +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/_layouts/redirect.html +15 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/auto_discovery.py +27 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/mcp_discovery.py +97 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/mcp_expose_api_models.py +53 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/new_service.py +21 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/newer_service.py +21 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/ontimize_api.py +495 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/order_b2b_service.py +60 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/system.py +77 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/customize_api.py +63 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/expose_api_models.py +52 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/json_encoder.py +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/readme_customize_api.md +103 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/api_utils.py +171 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/custom_endpoint.py +1085 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/expression_parser.py +685 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/gen_csv_report.py +41 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/gen_pdf_report.py +215 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/opt_locking/opt_locking.py +158 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/opt_locking/readme.md +225 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api_logic_server_run.py +162 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/activate_logicbank.py +46 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/config.py +772 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/default.env +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/logging-reduced.yml +112 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/logging.yml +123 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/mypy.ini +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/server_setup.py +459 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/api/api_discovery/openapi.py +92 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/config/default.env +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/database/models.py +130 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/docs/mcp_learning/mcp_discovery.json +108 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/cocktail-napkin.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/declare_logic.py +106 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/logic_discovery/email_request.py +49 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/logic_discovery/simple_constraints.py +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/security/declare_security.py +60 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/admin/admin.yaml +162 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/admin/home.js +48 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/README.md +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/README_create_react_app.md +70 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/package-lock.json +18469 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/package.json +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/favicon.ico +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/index.html +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/logo192.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/logo512.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/manifest.json +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/robots.txt +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.css +38 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.js +61 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.test.js +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Config-reference.js +527 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Config.js +527 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Customer-reference.js +216 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Customer.js +230 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Item.js +170 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Order.js +207 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Product.js +140 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/SysEmail.js +157 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/SysMcp.js +110 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/app_loader.js +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/index.css +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/index.js +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/logo.svg +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.eslintrc +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.js +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.ts +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.js +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.ts +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.test.tsx +7 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.tsx +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.js +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/styles.module.css +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/reportWebVitals.js +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/setupTests.js +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/alembic_run.py +98 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/env.py +78 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/readme_alembic.md +36 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/script.py.mako +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/versions/ae6a5c2fdc47_autogenerated.py +34 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/versions/readme.md +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic.ini +103 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/authentication_db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/bind_dbs.py +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/customize_models.py +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/database_discovery/authentication_models.py +183 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/database_discovery/auto_discovery.py +27 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/db_debug/db_debug.py +90 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/mcp_db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/mcp_models.py +58 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/models.py +132 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/system/SAFRSBaseX.py +139 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/alp_init.py +40 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/readme.md +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/response2code.py +148 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/test_data_preamble.py +83 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_mysql.Dockerfile +65 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_mysql.sql +112 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_postgres.sql +57 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-azure/azure-deploy.sh +98 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-local/docker-compose-dev-local.yml +38 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-local/docker-compose.sh +34 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/build_image.dockerfile +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/build_image.sh +67 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/env.list +35 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/run_image.sh +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-standard-image/docker-compose-standard-image.yml +33 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-standard-image/env.list +55 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/h2/keycloakdb.mv.db +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/h2/keycloakdb.trace.db +236 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/kcals-realm.json +1807 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/kcals-users-0.json +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/master-realm.json +1953 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/master-users-0.json +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/tmp/kc-gzip-cache/nnbna/js/keycloak.js.gz +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose-dev-network.yml +31 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose-nginx.yml +48 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose.yml +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/kcals-realm.json +1898 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/kcals-users-0.json +319 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/master-realm.json +1953 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/master-users-0.json +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/cert.pem +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/key.pem +28 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/nginx.conf +73 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/startup_log_nginx.txt +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/startup_log_no_nginx.txt +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/unused/auth_provider.py +80 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/unused/unused-docker-compose-keycloak.sh +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/python-anywhere/python_anywhere_wsgi.py +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/readme-devops.md +31 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/db.dbml +14 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/graphics/readme.md +12 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/logic/readme.md +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/logic_suggestions/readme_logic_suggestions.md +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/mcp_learning/mcp.prompt +39 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/mcp_learning/mcp_schema.json +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/models-not-code.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/runtime engines.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/system-creation-vibe.md +158 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_1_context.prompt.md +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_2_functionality.prompt.md +69 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_3_architecture.prompt.md +29 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/logic_bank_api.prompt +342 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/logic_example.py +41 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/react_map.prompt.md +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/react_tree.prompt.md +10 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_consumer.py +60 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_producer.py +127 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_readme.md +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_context_results.txt +142 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_discovery_response.json +150 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_request.prompt +46 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_schema.txt +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_tool_context_response.json +34 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_tool_context_response_get.json +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/mcp_client_executor.py +545 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/mcp_server_discovery.json +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/readme-mcp.md +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/N8N_WebHook_from_ApiLogicServer.json +394 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/n8n_producer.py +172 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/n8n_readme.md +67 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/row_dict_maps/OrderB2BMapper.py +54 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/row_dict_maps/row_dict_maps_readme.md +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/system/FlaskKafka.py +105 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/system/RowDictMapper.py +416 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/api/api_discovery/order_b2b.py +92 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/docs/er_diagram.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/integration/row_dict_maps/OrderB2B.py +36 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/integration/row_dict_maps/OrderShipping.py +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/logic/declare_logic.py +147 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/ui/admin/admin.yaml +175 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/declarative-vs-procedural-comparison.html +110 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/declare_logic.py +81 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/load_verify_rules.py +217 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/app_integration.py +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/auto_discovery.py +52 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/check_credit.py +44 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/mcp_client_executor_request.py +50 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/readme_logic_discovery.md +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/use_case.py +31 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/credit_service.py +204 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/declarative-vs-procedural-comparison.md +295 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/declarative-vs-procedural-comparison.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/readme_logic.md +249 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/readme.md +495 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_project.md +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_standard.md +492 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_vibe.md +353 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/requirements.txt +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/run.ps1 +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/run.sh +55 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/abstract_authentication_provider.py +34 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/keycloak/auth_provider.py +238 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/memory/auth_provider.py +161 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/memory/auth_provider_no_swagger.py +98 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/sql/auth_provider.py +127 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/declare_security.py +49 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/readme_security.md +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/authentication.py +129 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/authorization.py +473 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/custom_swagger.json +62 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/behave_logic_report.py +256 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/behave_run.py +64 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/about.feature +12 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/about.py +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/test_utils.py +133 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/logs/behave.log +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Intro.md +75 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Sample.md +1180 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/basic/server_test.py +33 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/readme_test.md +395 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/admin.yaml +173 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/admin_loader.py +217 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/authentication_admin.yaml +99 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/home.js +48 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/mcp_admin.yaml +53 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.browserslistrc +12 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.dockerignore +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.editorconfig +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.eslintrc.json +51 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.gitignore +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/README.md +42 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/angular.json +206 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/app_model.yaml +303 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/docker-compose-ontimize.yml +54 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/protractor.conf.js +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/src/app.e2e-spec.ts +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/src/app.po.ts +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/tsconfig.json +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/karma.conf.js +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/nginx/nginx.conf +29 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/ngsw-config.json +29 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/package-lock.json +22651 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/package.json +69 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app-routing.module.ts +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.scss +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.spec.ts +35 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.ts +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.config.ts +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.module.ts +37 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login-routing.module.ts +12 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.html +58 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.scss +155 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.ts +81 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.module.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.theme.scss +51 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/Customer-routing.module.ts +37 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/Customer.module.ts +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.html +90 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.ts +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.html +44 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.ts +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.html +26 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/Item-routing.module.ts +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/Item.module.ts +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.html +72 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.ts +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.html +55 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.ts +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.html +60 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/Order-routing.module.ts +37 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/Order.module.ts +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.html +114 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.ts +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.html +48 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.ts +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.html +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/Product-routing.module.ts +37 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/Product.module.ts +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.html +91 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.ts +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.html +35 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.ts +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.html +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about-routing.module.ts +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.html +39 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.scss +35 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.ts +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.module.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.theme.scss +14 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home-routing.module.ts +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.scss +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.ts +21 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.module.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main-routing.module.ts +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main-theme.scss +56 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.html +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.scss +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.ts +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.module.ts +22 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings-routing.module.ts +14 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.html +14 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.scss +44 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.ts +46 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.module.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.ts +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.ts +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.ts +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.ts +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/app.menu.config.ts +45 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/app.services.config.ts +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/constant.ts +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/shared.module.ts +15 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/.gitkeep +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/css/app.scss +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/css/loader.css +173 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/i18n/en.json +44 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/i18n/es.json +42 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize128.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize16.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize256.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize32.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize48.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize64.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize72.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize96.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/github.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/login_bg.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/no-image-transparent.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/no-image.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/ontimize.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/ontimize_web_log.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-closed.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-closed.svg +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-opened.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-opened.svg +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/user_profile.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/js/domchange.js +110 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/js/keyboard.js +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/environments/environment.prod.ts +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/environments/environment.ts +15 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/favicon.ico +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/index.html +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/main.ts +15 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/manifest.webmanifest +59 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/polyfills.ts +66 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/styles.scss +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/test.ts +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.app.json +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.json +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.spec.json +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/andrew.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/anne.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/janet.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/laura.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/margaret.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/michael.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/nancy.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/robert.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/steven.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/beverages.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/cereals.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/condiments.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/confections.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/diary.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/meat.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/produce.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/seafood.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/README.md +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/README_create_react_app.md +70 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/package-lock.json +18469 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/package.json +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/favicon.ico +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/index.html +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/logo192.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/logo512.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/manifest.json +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/robots.txt +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.css +38 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.js +80 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.test.js +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Config.js +527 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Customer.js +218 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Item.js +190 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Order.js +189 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Product.js +159 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/app_loader.js +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/index.css +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/index.js +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/logo.svg +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/.eslintrc +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/default-settings.js +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/default-settings.ts +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/errors.js +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/errors.ts +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/index.test.tsx +7 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/index.tsx +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.js +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/styles.module.css +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/reportWebVitals.js +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/setupTests.js +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/README.md +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/README_create_react_app.md +72 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/package-lock.json +18469 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/package.json +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/product-cards.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/favicon.ico +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/index.html +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/logo192.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/logo512.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/manifest.json +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/robots.txt +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.css +38 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.js +80 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.test.js +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Config.js +527 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Customer.js +218 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Item.js +190 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Order.js +189 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Product.js +241 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/app_loader.js +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/index.css +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/index.js +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/logo.svg +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/.eslintrc +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.js +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.ts +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.js +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.ts +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/index.test.tsx +7 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/index.tsx +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.js +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/styles.module.css +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/reportWebVitals.js +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/setupTests.js +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/templates/bar_chart.jinja +64 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/templates/content.html +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/py.py +121 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/readme_venv.md +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/requirements-no-cli.txt +33 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv-linux.sh +28 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv.ps1 +21 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv.sh +28 -0
- api_logic_server_cli/prototypes/manager/samples/dbs/readme_dbs.md +4 -4
- api_logic_server_cli/prototypes/manager/samples/readme_samples.md +13 -6
- api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace +3 -2
- api_logic_server_cli/prototypes/nw/test/readme_test_nw.md +224 -0
- {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/METADATA +1 -1
- {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/RECORD +528 -24
- api_logic_server_cli/prototypes/manager/.vscode/.copilot-instructions.md +0 -58
- api_logic_server_cli/prototypes/manager/.vscode/ApiLogicServer.code-workspace +0 -15
- api_logic_server_cli/prototypes/nw/test/readme_test.md +0 -13
- {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/WHEEL +0 -0
- {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/entry_points.txt +0 -0
- {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/licenses/LICENSE +0 -0
- {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/top_level.txt +0 -0
|
@@ -8,14 +8,15 @@ ApiLogicServer CLI: given a database url, create [and run] customizable ApiLogic
|
|
|
8
8
|
* api/expose_api_models.py for a safrs api - using introspected models.py
|
|
9
9
|
* Special provisions for NW Sample, to show customizations.
|
|
10
10
|
* See end for key_module_map() quick links
|
|
11
|
-
|
|
11
|
+
;
|
|
12
12
|
Called from api_logic_server_cli.py, by instantiating the ProjectRun object.
|
|
13
13
|
'''
|
|
14
14
|
|
|
15
|
-
__version__ = "15.00
|
|
15
|
+
__version__ = "15.01.00" # last public release: 15.00.65
|
|
16
16
|
recent_changes = \
|
|
17
17
|
f'\n\nRecent Changes:\n' +\
|
|
18
|
-
"\
|
|
18
|
+
"\t08/09/2024 - 15.01.00: improved vibe instructions \n"\
|
|
19
|
+
"\t08/06/2024 - 15.00.65: instructions for custom API endpoints, behave testing \n"\
|
|
19
20
|
"\t07/20/2024 - 15.00.52: Python 3.13 compatibility fixes - psycopg2→psycopg3, SQLAlchemy 2.0+, pkg_resources→importlib.metadata. mgr dbs \n"\
|
|
20
21
|
"\t07/17/2024 - 15.00.49: venv fix+, ext bldr * fix, copilot vibe tweaks - creation, mcp logic, basic_demo autonums \n"\
|
|
21
22
|
"\t07/10/2024 - 15.00.41: copilot vibe support for logic, UI, MCP, bug[98] \n"\
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
last_created_date:
|
|
1
|
+
last_created_date: August 06, 2025 17:34:43
|
|
2
2
|
last_created_project_name: ../../../servers/basic_demo
|
|
3
|
-
last_created_version: 15.00.
|
|
3
|
+
last_created_version: 15.00.65
|
api_logic_server_cli/cli.py
CHANGED
|
@@ -823,8 +823,8 @@ def genai_add_app(ctx, app_name: str, vibe: click.BOOL, retries: int, schema: st
|
|
|
823
823
|
log.info(f'... Error - does not appear to be a project: {str(project.project_directory_path)}')
|
|
824
824
|
log.info(f'... Typical usage - cd into project, use --project_name=. \n')
|
|
825
825
|
exit (1)
|
|
826
|
-
from api_logic_server_cli.genai.
|
|
827
|
-
|
|
826
|
+
from api_logic_server_cli.genai.genai_react_app import GenAIReactApp
|
|
827
|
+
genai_react = GenAIReactApp(project=project, app_name=app_name, vibe=vibe, schema=schema, retries=retries, genai_version=genai_version)
|
|
828
828
|
pass
|
|
829
829
|
log.info("")
|
|
830
830
|
|
|
Binary file
|
|
@@ -37,7 +37,15 @@ class JSResponseFormat(BaseModel): # must match system/genai/prompt_inserts/res
|
|
|
37
37
|
code : str # generated javascript code (only)
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
class
|
|
40
|
+
class GenAIReactApp:
|
|
41
|
+
"""Create a react app:
|
|
42
|
+
1. Clones <mgr>/system/genai/app_templates/react-admin-template
|
|
43
|
+
2. For each data model class, uses creates page with list and show
|
|
44
|
+
* Uses ChatGpt with system/genai/app_templates/app_learning/Admin-App-Resource-Learning-Prompt.md
|
|
45
|
+
* Regrettably, repairs imports
|
|
46
|
+
3. Creates Admin.js
|
|
47
|
+
* Uses ChatGpt with system/genai/app_templates/app_learning/Admin-App-js-Learning-Prompt.md
|
|
48
|
+
"""
|
|
41
49
|
|
|
42
50
|
def __init__(self, project: Project, app_name: str, vibe: bool, schema: str, genai_version: str, retries: int):
|
|
43
51
|
self.start_time = time.time()
|
|
@@ -135,7 +143,7 @@ class GenAIAdminApp:
|
|
|
135
143
|
|
|
136
144
|
def a_generate_resource_files(self):
|
|
137
145
|
|
|
138
|
-
def fix_resource(genai_app:
|
|
146
|
+
def fix_resource(genai_app: GenAIReactApp, raw_source: str) -> str:
|
|
139
147
|
''' Remove occasional begin/end code markers <br>
|
|
140
148
|
And horrific override of ChatGPT refusal to generate imports AS DIRECTED!<br>
|
|
141
149
|
'''
|
|
@@ -4,6 +4,25 @@
|
|
|
4
4
|
|
|
5
5
|
This is a **GenAI-Logic (aka API Logic Server) project** - a complete, working microservice - auto-generated from a database schema.
|
|
6
6
|
|
|
7
|
+
## 🔑 Key Technical Points
|
|
8
|
+
|
|
9
|
+
**Critical Implementation Details:**
|
|
10
|
+
|
|
11
|
+
1. **Discovery Systems**:
|
|
12
|
+
- **Logic Discovery**: Business rules automatically loaded from `logic/logic_discovery/use_case.py` via `logic/logic_discovery/auto_discovery.py`
|
|
13
|
+
- **API Discovery**: Custom APIs automatically loaded from `api/api_discovery/[service_name].py` via `api/api_discovery/auto_discovery.py`
|
|
14
|
+
- Do NOT manually duplicate rule calls or API registrations
|
|
15
|
+
|
|
16
|
+
2. **API Record ID Pattern**: When creating records via custom APIs, use `session.flush()` before accessing the ID to ensure it's generated:
|
|
17
|
+
```python
|
|
18
|
+
session.add(sql_alchemy_row)
|
|
19
|
+
session.flush() # Ensures ID is generated
|
|
20
|
+
record_id = sql_alchemy_row.id
|
|
21
|
+
return {"message": "Success", "record_id": record_id}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
3. **Automatic Business Logic**: All APIs (standard and custom) automatically inherit LogicBank rules without additional code.
|
|
25
|
+
|
|
7
26
|
## ⚠️ IMPORTANT: What's Already Built
|
|
8
27
|
|
|
9
28
|
**DO NOT recreate these - they're already working:**
|
|
@@ -14,6 +33,8 @@ This is a **GenAI-Logic (aka API Logic Server) project** - a complete, working m
|
|
|
14
33
|
4. **Authentication System** - JWT-based auth framework
|
|
15
34
|
5. **Business Logic Engine** - Declarative rules system
|
|
16
35
|
|
|
36
|
+
> **📋 Testing:** For comprehensive testing conventions, patterns, and examples, see `test/readme_test.md`
|
|
37
|
+
|
|
17
38
|
## 🎯 Common Tasks
|
|
18
39
|
|
|
19
40
|
If the user asks "what do I do now?", these subsections are good suggestions.
|
|
@@ -80,14 +101,68 @@ Use case: App Integration
|
|
|
80
101
|
Generally CoPilot solicits Natural Language logic for translation (see logic/readme_logic.md),
|
|
81
102
|
but you can also offer to suggest rules.
|
|
82
103
|
|
|
104
|
+
### Discovery Systems
|
|
105
|
+
|
|
106
|
+
**IMPORTANT**: The project uses automated discovery systems that:
|
|
107
|
+
|
|
108
|
+
**Logic Discovery:**
|
|
109
|
+
1. **Automatically loads business logic** from `logic/logic_discovery/*.py`
|
|
110
|
+
* **CRITICAL: Always create separate files named for each use case** (e.g., `check_credit.py`, `app_integration.py`)
|
|
111
|
+
* **Never put multiple use cases in `use_case.py`** - that file is for templates/examples only
|
|
112
|
+
2. **Discovers rules at startup** via `logic/logic_discovery/auto_discovery.py`
|
|
113
|
+
3. **No manual rule loading required** - the `discover_logic()` function automatically finds and registers rules
|
|
114
|
+
|
|
115
|
+
**API Discovery:**
|
|
116
|
+
1. **Automatically loads custom APIs** from `api/api_discovery/[service_name].py`
|
|
117
|
+
2. **Discovers services at startup** via `api/api_discovery/auto_discovery.py` (called from `api/customize_api.py`)
|
|
118
|
+
3. **No manual API registration required** - services are automatically discovered and exposed
|
|
119
|
+
|
|
120
|
+
**Do NOT duplicate** by calling them manually. The discovery systems handle this automatically.
|
|
121
|
+
|
|
122
|
+
**Implementation Locations**:
|
|
123
|
+
- Business rules: `logic/logic_discovery/use_case.py`
|
|
124
|
+
- Custom APIs: `api/api_discovery/[service_name].py`
|
|
125
|
+
- System automatically discovers and loads both
|
|
126
|
+
|
|
127
|
+
**Pattern**:
|
|
128
|
+
```python
|
|
129
|
+
# logic/logic_discovery/use_case.py
|
|
130
|
+
def declare_logic():
|
|
131
|
+
"""Business logic rules for the application"""
|
|
132
|
+
Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total)
|
|
133
|
+
Rule.constraint(validate=Customer, as_condition=lambda row: row.balance <= row.credit_limit)
|
|
134
|
+
# ... other rules
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**PATTERN RECOGNITION for Business Logic**:
|
|
138
|
+
When users provide natural language with multiple use cases like:
|
|
139
|
+
- "Use case: Check Credit" + "Use case: App Integration"
|
|
140
|
+
|
|
141
|
+
**ALWAYS create separate files**:
|
|
142
|
+
- `logic/logic_discovery/check_credit.py` - for credit checking rules
|
|
143
|
+
- `logic/logic_discovery/app_integration.py` - for integration rules
|
|
144
|
+
|
|
145
|
+
**NEVER put everything in `use_case.py`** - that defeats the discovery system purpose.
|
|
146
|
+
|
|
83
147
|
### Adding MCP
|
|
84
148
|
|
|
85
|
-
The API is automatically MCP-enabled.
|
|
149
|
+
The API is automatically MCP-enabled. The project includes a comprehensive MCP client executor at `integration/mcp/mcp_client_executor.py`, but to enable the **user interface** for MCP requests, you must run this command:
|
|
86
150
|
|
|
87
151
|
```bash
|
|
88
152
|
genai-logic genai-add-mcp-client
|
|
89
153
|
```
|
|
90
154
|
|
|
155
|
+
**CRITICAL DISTINCTION**:
|
|
156
|
+
- **`integration/mcp/mcp_client_executor.py`** = MCP processing engine (already exists)
|
|
157
|
+
- **`genai-logic genai-add-mcp-client`** = Command to add SysMcp table and UI infrastructure (must be run)
|
|
158
|
+
|
|
159
|
+
**When users ask to "Create the MCP client executor"**, they mean run the `genai-logic genai-add-mcp-client` command, NOT recreate the existing processing engine.
|
|
160
|
+
|
|
161
|
+
This command adds:
|
|
162
|
+
1. **SysMcp table** for business users to enter natural language requests
|
|
163
|
+
2. **Admin App integration** for MCP request interface
|
|
164
|
+
3. **Database infrastructure** for MCP client operations
|
|
165
|
+
|
|
91
166
|
### Configuring Admin UI
|
|
92
167
|
|
|
93
168
|
This is built when project is created - no need to add it.
|
|
@@ -105,7 +180,10 @@ resources:
|
|
|
105
180
|
|
|
106
181
|
### Create and Customize React Apps
|
|
107
182
|
|
|
108
|
-
Complete customization is provided by generating a React Application (requires OpenAI key, Node):
|
|
183
|
+
**REQUIRED METHOD**: Complete customization is provided by generating a React Application (requires OpenAI key, Node):
|
|
184
|
+
|
|
185
|
+
**DO NOT use `create-react-app` or `npx create-react-app`**
|
|
186
|
+
**ALWAYS use this command instead:**
|
|
109
187
|
|
|
110
188
|
```bash
|
|
111
189
|
# Create: ui/admin/my-app-name
|
|
@@ -120,6 +198,39 @@ Temporary restriction: security must be disabled.
|
|
|
120
198
|
|
|
121
199
|
Customize using CoPilot chat, with `docs/training`.
|
|
122
200
|
|
|
201
|
+
#### React Component Development Best Practices
|
|
202
|
+
|
|
203
|
+
**Critical Pattern for List/Card Views**: When implementing custom views (like card layouts) in React Admin components:
|
|
204
|
+
|
|
205
|
+
1. **Use `useListContext()` correctly**: Access `data` as an array, not as an object with `ids`
|
|
206
|
+
```javascript
|
|
207
|
+
// CORRECT Pattern:
|
|
208
|
+
const { data, isLoading } = useListContext();
|
|
209
|
+
return (
|
|
210
|
+
<Grid container spacing={2}>
|
|
211
|
+
{data?.map(record => (
|
|
212
|
+
<Grid item key={record.id}>
|
|
213
|
+
<CustomCard record={record} />
|
|
214
|
+
</Grid>
|
|
215
|
+
))}
|
|
216
|
+
</Grid>
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
// AVOID: Trying to use data[id] pattern - this is for older React Admin versions
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
2. **Component Naming Consistency**: Ensure component names match their usage in JSX - mismatched names cause runtime errors.
|
|
223
|
+
|
|
224
|
+
3. **Simple Error Handling**: Use straightforward loading states rather than complex error checking:
|
|
225
|
+
```javascript
|
|
226
|
+
if (isLoading) return <div>Loading...</div>;
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Common Mistakes to Avoid**:
|
|
230
|
+
- Using `{ data, ids }` destructuring and trying to map over `ids` - this pattern is outdated
|
|
231
|
+
- Creating complex error handling when simple loading checks suffice
|
|
232
|
+
- Not referencing existing working implementations before creating new patterns
|
|
233
|
+
|
|
123
234
|
### Security - Role-Based Access Control
|
|
124
235
|
|
|
125
236
|
Configure:
|
|
@@ -149,6 +260,8 @@ Grant(on_entity=Customer, to_role=sales, filter=lambda: Customer.SalesRep == cur
|
|
|
149
260
|
```
|
|
150
261
|
|
|
151
262
|
### Adding Custom API Endpoints
|
|
263
|
+
|
|
264
|
+
For simple endpoints:
|
|
152
265
|
```python
|
|
153
266
|
# Edit: api/customize_api.py
|
|
154
267
|
@app.route('/api/custom-endpoint')
|
|
@@ -156,6 +269,211 @@ def my_endpoint():
|
|
|
156
269
|
return {"message": "Custom endpoint"}
|
|
157
270
|
```
|
|
158
271
|
|
|
272
|
+
### Creating Advanced B2B Integration APIs with Natural Language
|
|
273
|
+
|
|
274
|
+
Users can create sophisticated custom API endpoints for B2B integration using natural language. The system automatically generates and discovers:
|
|
275
|
+
|
|
276
|
+
1. **Custom API Service** (`api/api_discovery/[service_name].py`) - automatically discovered by `api/api_discovery/auto_discovery.py`
|
|
277
|
+
2. **Row Dict Mapper** (`integration/row_dict_maps/[MapperName].py`)
|
|
278
|
+
|
|
279
|
+
**Example Implementation**: This project includes a working **OrderB2B API** that demonstrates the complete pattern:
|
|
280
|
+
- **API**: `api/api_discovery/order_b2b_service.py`
|
|
281
|
+
- **Mapper**: `integration/row_dict_maps/OrderB2BMapper.py`
|
|
282
|
+
- **Test Cases**: `test_requests.http` and `test_b2b_order_api.py`
|
|
283
|
+
|
|
284
|
+
**Pattern Recognition**: When users describe B2B integration scenarios involving:
|
|
285
|
+
- External partner data formats (✅ Account → Customer lookup)
|
|
286
|
+
- Field aliasing/renaming (✅ "Name" → Product.name, "QuantityOrdered" → Item.quantity)
|
|
287
|
+
- Nested data structures (✅ Items array handling)
|
|
288
|
+
- Lookups and joins (✅ Customer by name, Product by name)
|
|
289
|
+
- Data transformation (✅ External format to internal models)
|
|
290
|
+
|
|
291
|
+
Generate both the API service and corresponding Row Dict Mapper following these patterns:
|
|
292
|
+
|
|
293
|
+
**API Service Template** (`api/api_discovery/[service_name].py`) - Keep it concise:
|
|
294
|
+
```python
|
|
295
|
+
from flask import request
|
|
296
|
+
from safrs import jsonapi_rpc
|
|
297
|
+
import safrs
|
|
298
|
+
from integration.row_dict_maps.OrderB2BMapper import OrderB2BMapper
|
|
299
|
+
import logging
|
|
300
|
+
|
|
301
|
+
app_logger = logging.getLogger("api_logic_server_app")
|
|
302
|
+
|
|
303
|
+
def add_service(app, api, project_dir, swagger_host: str, PORT: str, method_decorators = []):
|
|
304
|
+
api.expose_object(OrderB2BEndPoint)
|
|
305
|
+
|
|
306
|
+
class OrderB2BEndPoint(safrs.JABase):
|
|
307
|
+
@classmethod
|
|
308
|
+
@jsonapi_rpc(http_methods=["POST"])
|
|
309
|
+
def OrderB2B(self, *args, **kwargs): # yaml comment => swagger description
|
|
310
|
+
""" # yaml creates Swagger description
|
|
311
|
+
args :
|
|
312
|
+
data:
|
|
313
|
+
Account: "Alice"
|
|
314
|
+
Notes: "Rush order for Q4 promotion"
|
|
315
|
+
Items :
|
|
316
|
+
- Name: "Widget"
|
|
317
|
+
QuantityOrdered: 5
|
|
318
|
+
- Name: "Gadget"
|
|
319
|
+
QuantityOrdered: 3
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
Creates B2B orders from external partner systems with automatic lookups and business logic.
|
|
323
|
+
Features automatic customer/product lookups by name, unit price copying,
|
|
324
|
+
amount calculations, customer balance updates, and credit limit validation.
|
|
325
|
+
"""
|
|
326
|
+
db = safrs.DB
|
|
327
|
+
session = db.session
|
|
328
|
+
|
|
329
|
+
try:
|
|
330
|
+
mapper_def = OrderB2BMapper()
|
|
331
|
+
request_dict_data = request.json["meta"]["args"]["data"]
|
|
332
|
+
|
|
333
|
+
app_logger.info(f"OrderB2B: Processing order for account: {request_dict_data.get('Account')}")
|
|
334
|
+
|
|
335
|
+
sql_alchemy_row = mapper_def.dict_to_row(row_dict=request_dict_data, session=session)
|
|
336
|
+
|
|
337
|
+
session.add(sql_alchemy_row)
|
|
338
|
+
session.flush() # Ensures ID is generated before accessing it
|
|
339
|
+
|
|
340
|
+
order_id = sql_alchemy_row.id
|
|
341
|
+
customer_name = sql_alchemy_row.customer.name if sql_alchemy_row.customer else "Unknown"
|
|
342
|
+
item_count = len(sql_alchemy_row.ItemList)
|
|
343
|
+
|
|
344
|
+
return {
|
|
345
|
+
"message": "B2B Order created successfully",
|
|
346
|
+
"order_id": order_id,
|
|
347
|
+
"customer": customer_name,
|
|
348
|
+
"items_count": item_count
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
except Exception as e:
|
|
352
|
+
app_logger.error(f"OrderB2B: Error creating order: {str(e)}")
|
|
353
|
+
session.rollback()
|
|
354
|
+
return {"error": "Failed to create B2B order", "details": str(e)}, 400
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**IMPORTANT**: The project includes a working B2B integration example:
|
|
358
|
+
- **API Endpoint**: `OrderB2BEndPoint.OrderB2B` - Creates orders from external partner format
|
|
359
|
+
- **Error Handling**: Proper exception handling with session rollback for failed operations
|
|
360
|
+
- **Business Logic**: Automatic inheritance of all LogicBank rules (pricing, calculations, validation)
|
|
361
|
+
- **Testing**: Comprehensive test suite demonstrating success and error scenarios
|
|
362
|
+
- **Documentation**: Professional Swagger docs with YAML examples using real database data
|
|
363
|
+
|
|
364
|
+
When creating new B2B APIs, follow this proven pattern:
|
|
365
|
+
- Use `session.flush()` when you need generated IDs before commit
|
|
366
|
+
- Include proper error handling with try/catch and session.rollback()
|
|
367
|
+
- Provide meaningful success messages with key information (ID, customer, item count)
|
|
368
|
+
- Use YAML format in docstrings for clean Swagger documentation
|
|
369
|
+
- Always use actual database data in examples (check with sqlite3 queries)
|
|
370
|
+
|
|
371
|
+
**AI Anti-Patterns to Avoid**:
|
|
372
|
+
- **Don't assume CRUD operations**: If user asks for "create order API", only implement POST/insert (ask if they need GET/PUT/DELETE)
|
|
373
|
+
- **Don't add "enterprise" features** unless specifically requested:
|
|
374
|
+
- Detailed logging/monitoring beyond basic debugging
|
|
375
|
+
- Complex response objects with metadata
|
|
376
|
+
- Extensive documentation/comments
|
|
377
|
+
- HTTP status code handling beyond defaults
|
|
378
|
+
- **Don't import unused libraries**: Skip `logging`, `jsonify`, etc. unless actually needed
|
|
379
|
+
- **Don't over-engineer**: Simple success messages beat complex response objects
|
|
380
|
+
|
|
381
|
+
**Swagger Examples Must Use Real Data**:
|
|
382
|
+
When creating YAML docstring examples, use actual database data. Check first:
|
|
383
|
+
```bash
|
|
384
|
+
sqlite3 database/db.sqlite "SELECT name FROM customer LIMIT 3;"
|
|
385
|
+
sqlite3 database/db.sqlite "SELECT name FROM product LIMIT 3;"
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
**Getting Sample Data for Tests**:
|
|
389
|
+
```bash
|
|
390
|
+
# Check actual customer names
|
|
391
|
+
sqlite3 database/db.sqlite "SELECT name FROM customer LIMIT 5;"
|
|
392
|
+
|
|
393
|
+
# Check actual product names
|
|
394
|
+
sqlite3 database/db.sqlite "SELECT name FROM product LIMIT 5;"
|
|
395
|
+
```
|
|
396
|
+
Never assume data from other databases (like Northwind's "ALFKI") - always use the current project's actual data.
|
|
397
|
+
|
|
398
|
+
**Row Dict Mapper Template** (`integration/row_dict_maps/[MapperName].py`):
|
|
399
|
+
```python
|
|
400
|
+
from integration.system.RowDictMapper import RowDictMapper
|
|
401
|
+
from database import models
|
|
402
|
+
|
|
403
|
+
class OrderB2BMapper(RowDictMapper):
|
|
404
|
+
def __init__(self):
|
|
405
|
+
"""
|
|
406
|
+
B2B Order API Mapper for external partner integration.
|
|
407
|
+
|
|
408
|
+
Maps external B2B format to internal Order/Item structure:
|
|
409
|
+
- 'Account' field maps to Customer lookup by name
|
|
410
|
+
- 'Notes' field maps directly to Order notes
|
|
411
|
+
- 'Items' array with 'Name' and 'QuantityOrdered' maps to Item records
|
|
412
|
+
"""
|
|
413
|
+
mapper = super(OrderB2BMapper, self).__init__(
|
|
414
|
+
model_class=models.Order,
|
|
415
|
+
alias="Order",
|
|
416
|
+
fields=[
|
|
417
|
+
(models.Order.notes, "Notes"),
|
|
418
|
+
# customer_id will be set via parent lookup
|
|
419
|
+
# amount_total will be calculated by business logic
|
|
420
|
+
# CreatedOn will be set by business logic
|
|
421
|
+
],
|
|
422
|
+
parent_lookups=[
|
|
423
|
+
(models.Customer, [(models.Customer.name, 'Account')])
|
|
424
|
+
],
|
|
425
|
+
related=[
|
|
426
|
+
ItemB2BMapper()
|
|
427
|
+
]
|
|
428
|
+
)
|
|
429
|
+
return mapper
|
|
430
|
+
|
|
431
|
+
class ItemB2BMapper(RowDictMapper):
|
|
432
|
+
def __init__(self):
|
|
433
|
+
"""
|
|
434
|
+
B2B Item Mapper for order line items.
|
|
435
|
+
|
|
436
|
+
Maps external item format to internal Item structure:
|
|
437
|
+
- 'Name' field maps to Product lookup by name
|
|
438
|
+
- 'QuantityOrdered' maps to Item quantity
|
|
439
|
+
"""
|
|
440
|
+
mapper = super(ItemB2BMapper, self).__init__(
|
|
441
|
+
model_class=models.Item,
|
|
442
|
+
alias="Items",
|
|
443
|
+
fields=[
|
|
444
|
+
(models.Item.quantity, "QuantityOrdered"),
|
|
445
|
+
# unit_price will be copied from product by business logic
|
|
446
|
+
# amount will be calculated by business logic (quantity * unit_price)
|
|
447
|
+
],
|
|
448
|
+
parent_lookups=[
|
|
449
|
+
(models.Product, [(models.Product.name, 'Name')])
|
|
450
|
+
],
|
|
451
|
+
isParent=False
|
|
452
|
+
)
|
|
453
|
+
return mapper
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
**Key Components for Natural Language Processing**:
|
|
457
|
+
- **Field Aliasing**: `(models.Table.field, "ExternalName")`
|
|
458
|
+
- **Parent Lookups**: `(models.ParentTable, [(models.ParentTable.lookup_field, 'ExternalKey')])`
|
|
459
|
+
- **Related Entities**: Nested RowDictMapper instances for child records
|
|
460
|
+
- **Automatic Joins**: System handles foreign key relationships automatically
|
|
461
|
+
|
|
462
|
+
**Business Logic Integration**: All generated APIs automatically inherit the full LogicBank rule engine through the discovery systems (`logic/logic_discovery/auto_discovery.py` and `api/api_discovery/auto_discovery.py`), ensuring data integrity, calculations, and constraints without additional code. Rules are automatically loaded from `logic/logic_discovery/use_case.py` and APIs from `api/api_discovery/[service_name].py` at startup.
|
|
463
|
+
|
|
464
|
+
**Testing B2B APIs**: The project includes comprehensive testing infrastructure:
|
|
465
|
+
- **REST Client Tests**: `test_requests.http` - Test directly in VS Code with REST Client extension
|
|
466
|
+
- **Python Test Suite**: `test_b2b_order_api.py` - Automated testing with requests library
|
|
467
|
+
- **Swagger UI**: `http://localhost:5656/api` - Interactive API testing and documentation
|
|
468
|
+
- **Sample Requests**: `sample_b2b_request.json` - Copy-paste examples for testing
|
|
469
|
+
|
|
470
|
+
**Working Example Results**: The OrderB2B API demonstrates:
|
|
471
|
+
- ✅ External format mapping (Account → Customer, Name → Product)
|
|
472
|
+
- ✅ Automatic lookups with error handling (missing customer/product detection)
|
|
473
|
+
- ✅ Business logic inheritance (unit price copying, amount calculations, balance updates)
|
|
474
|
+
- ✅ Professional Swagger documentation with YAML examples
|
|
475
|
+
- ✅ Complete test coverage (success cases and error scenarios)
|
|
476
|
+
|
|
159
477
|
### Customize Models - Add Tables, Attributes
|
|
160
478
|
|
|
161
479
|
To add tables / columns to the database (highly impactful - request permission):
|
|
@@ -260,3 +578,4 @@ All events receive `(row, old_row, logic_row)` parameters and should use `logic_
|
|
|
260
578
|
- Business logic uses LogicBank (declarative rule engine)
|
|
261
579
|
- Everything is auto-generated from database introspection
|
|
262
580
|
- Focus on CUSTOMIZATION, not re-creation
|
|
581
|
+
- Use CoPilot to assist with logic translation and API generation
|
|
@@ -8,6 +8,8 @@ If you create sum, count or formula LogicBank rules, you MUST create a correspon
|
|
|
8
8
|
|
|
9
9
|
Use only the methods provided below.
|
|
10
10
|
|
|
11
|
+
IMPORTANT: Keep it simple! Use the built-in Rule methods with their parameters (like if_condition) rather than creating custom functions. The Rule methods are designed to handle common patterns directly.
|
|
12
|
+
|
|
11
13
|
|
|
12
14
|
class Rule:
|
|
13
15
|
""" Invoke these functions to declare rules """
|
|
@@ -131,6 +133,11 @@ class Rule:
|
|
|
131
133
|
if_condition: any = None,
|
|
132
134
|
when_condition: any = None,
|
|
133
135
|
with_args: dict = None):
|
|
136
|
+
"""
|
|
137
|
+
Events are triggered after database flush for integration (Kafka, etc.)
|
|
138
|
+
|
|
139
|
+
IMPORTANT: Use this simple pattern - do NOT create custom functions unless absolutely necessary.
|
|
140
|
+
Use if_condition parameter for conditional logic instead of writing custom event handlers.
|
|
134
141
|
|
|
135
142
|
Example:
|
|
136
143
|
Prompt:
|
|
@@ -146,6 +153,13 @@ class Rule:
|
|
|
146
153
|
if_condition=lambda row: row.is_complete is True,
|
|
147
154
|
with_args={"topic": "ready_to_ship"})
|
|
148
155
|
|
|
156
|
+
Args:
|
|
157
|
+
on_class: The model class to watch for changes
|
|
158
|
+
calling: Use kafka_producer.send_row_to_kafka for Kafka integration
|
|
159
|
+
if_condition: Lambda function to specify when the event should trigger
|
|
160
|
+
with_args: Dictionary with parameters like {"topic": "topic_name"}
|
|
161
|
+
"""
|
|
162
|
+
|
|
149
163
|
|
|
150
164
|
Expanded example:
|
|
151
165
|
|
|
@@ -310,5 +324,18 @@ Required (must-have) related parent constraints require an update to the data mo
|
|
|
310
324
|
Prompt: Each Item must have a valid entry in the Product table.
|
|
311
325
|
Response: product_id = Column(ForeignKey('product.id'), nullable=False)
|
|
312
326
|
|
|
327
|
+
CRITICAL: For event handling (Kafka integration, etc.), do NOT create custom event functions.
|
|
328
|
+
Use Rule.after_flush_row_event with if_condition parameter instead.
|
|
329
|
+
|
|
330
|
+
WRONG (do not do this):
|
|
331
|
+
def my_custom_kafka_function(row, old_row, logic_row):
|
|
332
|
+
# custom logic here
|
|
333
|
+
Rule.commit_row_event(on_class=Order, calling=my_custom_kafka_function)
|
|
334
|
+
|
|
335
|
+
RIGHT (do this instead):
|
|
336
|
+
Rule.after_flush_row_event(on_class=Order, calling=kafka_producer.send_row_to_kafka,
|
|
337
|
+
if_condition=lambda row: row.date_shipped is not None,
|
|
338
|
+
with_args={"topic": "order_shipping"})
|
|
339
|
+
|
|
313
340
|
logic should create python files in logic/logic_discovery,
|
|
314
341
|
and cross-check/use attribute names in database/models.py
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
from decimal import Decimal
|
|
3
|
+
from integration.kafka import kafka_producer
|
|
3
4
|
from logic_bank.exec_row_logic.logic_row import LogicRow
|
|
4
5
|
from logic_bank.extensions.rule_extensions import RuleExtension
|
|
5
6
|
from logic_bank.logic_bank import Rule
|
|
@@ -10,7 +11,10 @@ import logging
|
|
|
10
11
|
from flask import jsonify
|
|
11
12
|
|
|
12
13
|
|
|
13
|
-
"""
|
|
14
|
+
"""
|
|
15
|
+
Best practice: create logic files for each use case,
|
|
16
|
+
named for the use case (eg, check_credit.py)
|
|
17
|
+
"""
|
|
14
18
|
|
|
15
19
|
app_logger = logging.getLogger(__name__)
|
|
16
20
|
|