ApiLogicServer 14.3.0__py3-none-any.whl → 14.3.7__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.
- {ApiLogicServer-14.3.0.dist-info → ApiLogicServer-14.3.7.dist-info}/METADATA +2 -2
- {ApiLogicServer-14.3.0.dist-info → ApiLogicServer-14.3.7.dist-info}/RECORD +46 -43
- api_logic_server_cli/api_logic_server.py +2 -1
- api_logic_server_cli/api_logic_server_info.yaml +3 -3
- api_logic_server_cli/cli.py +5 -2
- api_logic_server_cli/create_from_model/__pycache__/ont_build.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/ont_build.py +1 -1
- api_logic_server_cli/genai/genai.py +4 -0
- api_logic_server_cli/genai/genai_svcs.py +2 -0
- api_logic_server_cli/manager.py +20 -16
- api_logic_server_cli/prototypes/base/api/system/expression_parser.py +10 -4
- api_logic_server_cli/prototypes/base/integration/kafka/kafka_producer.py +32 -8
- api_logic_server_cli/prototypes/base/integration/system/RowDictMapper.py +33 -16
- api_logic_server_cli/prototypes/base/logic/declare_logic.py +1 -0
- api_logic_server_cli/prototypes/base/logic/load_verify_rules.py +2 -1
- api_logic_server_cli/prototypes/genai_demo/api/customize_api.py +9 -11
- api_logic_server_cli/prototypes/genai_demo/database/.DS_Store +0 -0
- api_logic_server_cli/prototypes/genai_demo/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/genai_demo/database/models.py +52 -42
- api_logic_server_cli/prototypes/genai_demo/integration/row_dict_maps/OrderB2B.py +4 -6
- api_logic_server_cli/prototypes/genai_demo/integration/row_dict_maps/__pycache__/OrderB2B.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/genai_demo/integration/row_dict_maps/row_dict_maps_readme.md +3 -0
- api_logic_server_cli/prototypes/genai_demo/logic/__pycache__/declare_logic.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/genai_demo/logic/__pycache__/load_verify_rules.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/genai_demo/logic/declare_logic.py +57 -69
- api_logic_server_cli/prototypes/genai_demo/logic/load_verify_rules.py +216 -0
- api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/__pycache__/__init__.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/__pycache__/auto_discovery.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/__pycache__/error_testing.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/auto_discovery.py +52 -0
- api_logic_server_cli/prototypes/genai_demo/logic/readme_declare_logic.md +172 -0
- api_logic_server_cli/prototypes/genai_demo/security/__pycache__/declare_security.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/genai_demo/ui/admin/admin.yaml +86 -53
- api_logic_server_cli/prototypes/manager/.vscode/launch.json +1 -1
- api_logic_server_cli/prototypes/manager/README.md +1 -1
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.prompt +4 -1
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.response_example +15 -8
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_informal.prompt +3 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/time_tracking_billing/readme.md +58 -5
- api_logic_server_cli/prototypes/manager/system/genai/learning_requests/logic_bank_api.prompt +15 -1
- api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/__pycache__/codegen.cpython-312.pyc +0 -0
- api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/codegen.py +2 -1
- api_logic_server_cli/prototypes/genai_demo/database/chatgpt/__pycache__/copilot_models.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/genai_demo/database/chatgpt/__pycache__/sample_ai_models.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/genai_demo/database/chatgpt/sample_ai.chatgpt +0 -16
- api_logic_server_cli/prototypes/genai_demo/database/chatgpt/sample_ai.sql +0 -66
- api_logic_server_cli/prototypes/genai_demo/database/chatgpt/sample_ai.sqlite +0 -0
- api_logic_server_cli/prototypes/genai_demo/database/chatgpt/sample_ai_items.sqlite +0 -0
- api_logic_server_cli/prototypes/genai_demo/database/chatgpt/sample_ai_models.py +0 -156
- api_logic_server_cli/prototypes/genai_demo/database/chatgpt/sample_ai_models.sqlite +0 -0
- api_logic_server_cli/prototypes/genai_demo/logic/cocktail-napkin.jpg +0 -0
- {ApiLogicServer-14.3.0.dist-info → ApiLogicServer-14.3.7.dist-info}/LICENSE +0 -0
- {ApiLogicServer-14.3.0.dist-info → ApiLogicServer-14.3.7.dist-info}/WHEEL +0 -0
- {ApiLogicServer-14.3.0.dist-info → ApiLogicServer-14.3.7.dist-info}/entry_points.txt +0 -0
- {ApiLogicServer-14.3.0.dist-info → ApiLogicServer-14.3.7.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: ApiLogicServer
|
|
3
|
-
Version: 14.3.
|
|
3
|
+
Version: 14.3.7
|
|
4
4
|
Author-email: Val Huber <apilogicserver@gmail.com>
|
|
5
5
|
License: BSD-3-Clause
|
|
6
6
|
Project-URL: Homepage, https://apilogicserver.github.io/Docs/
|
|
@@ -47,7 +47,7 @@ Requires-Dist: Flask-Login==0.6.2
|
|
|
47
47
|
Requires-Dist: Flask-OpenID==1.3.0
|
|
48
48
|
Requires-Dist: python-dotenv==0.15.0
|
|
49
49
|
Requires-Dist: email-validator==1.1.1
|
|
50
|
-
Requires-Dist: LogicBank>=1.20.
|
|
50
|
+
Requires-Dist: LogicBank>=1.20.25
|
|
51
51
|
Requires-Dist: cryptography==36.0.1
|
|
52
52
|
Requires-Dist: rsa
|
|
53
53
|
Requires-Dist: PyMySQL==1.0.3
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
api_logic_server_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
api_logic_server_cli/api_logic_server.py,sha256=
|
|
3
|
-
api_logic_server_cli/api_logic_server_info.yaml,sha256=
|
|
4
|
-
api_logic_server_cli/cli.py,sha256
|
|
2
|
+
api_logic_server_cli/api_logic_server.py,sha256=AL3BHfSSZ40jzh7EcNUWynpYo0ixmtS-lJVHzVif4fs,113711
|
|
3
|
+
api_logic_server_cli/api_logic_server_info.yaml,sha256=JXXiH8MEgR5BYHT5fDepm1rtq6Mz7Ig5xuW2pUvzkXE,116
|
|
4
|
+
api_logic_server_cli/cli.py,sha256=IIz3frEJiZSi1q0HtRxLl7i-R4ABhPDqlBa7LTI6vcw,80765
|
|
5
5
|
api_logic_server_cli/cli_args_base.py,sha256=lr27KkOB7_WpZwTs7LgiK8LKDIHMKQkoZCTnE99BFxw,3280
|
|
6
6
|
api_logic_server_cli/cli_args_project.py,sha256=I5no_fGRV_ZsK3SuttVDAaQYI4Q5zCjx6LojGkM024w,4645
|
|
7
7
|
api_logic_server_cli/extended_builder.py,sha256=EhtXGAt_RrDR2tCtgvc2U82we7fr-F6pP-e6HS6dQWQ,13867
|
|
8
8
|
api_logic_server_cli/logging.yml,sha256=isWhKviFwJwYgjIUejfhUxcMli2zEbZeQbEvVhNk_4Y,1812
|
|
9
|
-
api_logic_server_cli/manager.py,sha256=
|
|
9
|
+
api_logic_server_cli/manager.py,sha256=j-nA8YYTkikp20xfJOcF7nmIe2rqJudW-bm1kN4xf4E,9966
|
|
10
10
|
api_logic_server_cli/create_from_model/.DS_Store,sha256=1LosUM11cnBvrMg9HziX_s4ehi93Q0Hl93FjOayxN2g,6148
|
|
11
11
|
api_logic_server_cli/create_from_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
12
|
api_logic_server_cli/create_from_model/api_expose_api_models_creator.py,sha256=V-u3Hm404doztw66YuD2A043RCFmtw5QF5tMioC_1b0,7900
|
|
@@ -15,7 +15,7 @@ api_logic_server_cli/create_from_model/create_db_from_model.py,sha256=CvXVH-DEl8
|
|
|
15
15
|
api_logic_server_cli/create_from_model/dbml.py,sha256=IV9eG1bib10zTPFYyJNeFPveE0gNrt-NoPZCQHF74BM,8695
|
|
16
16
|
api_logic_server_cli/create_from_model/meta_model.py,sha256=ERf7tSgnSJSeRMVyggkdg-lvORQZSbfK0KMpL63qSEY,5837
|
|
17
17
|
api_logic_server_cli/create_from_model/model_creation_services.py,sha256=B86ljgUR98H_dCaxqiw-flrbvc05-XXtkC5It2BSezs,41479
|
|
18
|
-
api_logic_server_cli/create_from_model/ont_build.py,sha256=
|
|
18
|
+
api_logic_server_cli/create_from_model/ont_build.py,sha256=OeKY_CyaiKklDt8ZStCxfBmpe2FVZq-JOV6YnpGqM-s,60131
|
|
19
19
|
api_logic_server_cli/create_from_model/ont_create.py,sha256=98J17zc-T9Bml5G_kr3zkUfgopmggae0g3wXep_DpJw,13794
|
|
20
20
|
api_logic_server_cli/create_from_model/ui_admin_creator.py,sha256=j1hZuHn70c4NA7l0zXH_PbcwH79FQPgkZh1qF_6sLyU,38071
|
|
21
21
|
api_logic_server_cli/create_from_model/uri_info.py,sha256=WiDw7hRcidz9hasodQ6O2ZJnUMfhHeydueQ8HXzPXlc,2395
|
|
@@ -26,7 +26,7 @@ api_logic_server_cli/create_from_model/__pycache__/create_db_from_model.cpython-
|
|
|
26
26
|
api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc,sha256=E4oR4UFDjW7Z7SCfo-USc7vUVfwQFma1O_qldAT7L7c,8952
|
|
27
27
|
api_logic_server_cli/create_from_model/__pycache__/meta_model.cpython-312.pyc,sha256=Ylu_fwSC4BHfTr4xzXCfyY6ChXu9seDx_LphGw_Tl6Y,7133
|
|
28
28
|
api_logic_server_cli/create_from_model/__pycache__/model_creation_services.cpython-312.pyc,sha256=ZItAlFMbjQopl5EJ5zVKvSMweEczeky1o2uKewW-aus,36599
|
|
29
|
-
api_logic_server_cli/create_from_model/__pycache__/ont_build.cpython-312.pyc,sha256=
|
|
29
|
+
api_logic_server_cli/create_from_model/__pycache__/ont_build.cpython-312.pyc,sha256=TDNj_xZu8dpfTeYTPxUi-J4zyNPNifUz-YfWLmOjm_E,68547
|
|
30
30
|
api_logic_server_cli/create_from_model/__pycache__/ont_create.cpython-312.pyc,sha256=M9PIKa6_15c-il2FKP-fqeCGse_tbof3mvg_ZVlPy4I,14478
|
|
31
31
|
api_logic_server_cli/create_from_model/__pycache__/ui_admin_creator.cpython-312.pyc,sha256=dW3OP8i2imShiMvCVxfTu5w5t4renKVrIuATDSvDs9k,38555
|
|
32
32
|
api_logic_server_cli/create_from_model/__pycache__/uri_info.cpython-312.pyc,sha256=_xZHwvPJzehSzH-ueuTKwNqNLTJfUMDwYl5ddYNTxRM,2728
|
|
@@ -471,9 +471,9 @@ api_logic_server_cli/fragments/nw_virtual_attrs.py,sha256=7hgvhnO1UcJ6OoPKCxR5bn
|
|
|
471
471
|
api_logic_server_cli/fragments/ui_basic_web_app_runZZ.py,sha256=UllBIkKHlUE3nyDE1qtFWCA-NTE1ltYxPvVUd7lZI5U,870
|
|
472
472
|
api_logic_server_cli/genai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
473
473
|
api_logic_server_cli/genai/client.py,sha256=36gyz-dqxj4dJj1SGtO9NZsy9-cfnf4d7uahHimwqHk,772
|
|
474
|
-
api_logic_server_cli/genai/genai.py,sha256=
|
|
474
|
+
api_logic_server_cli/genai/genai.py,sha256=keMPTu4n8UbHQyz7jCvB3XynZCl6XlLBryJ9UAMFcLk,59095
|
|
475
475
|
api_logic_server_cli/genai/genai_logic_builder.py,sha256=VkgOG0s17sdt-ElQmfTRuMCUnQLtxtyaH8Qfr0x1TrE,23552
|
|
476
|
-
api_logic_server_cli/genai/genai_svcs.py,sha256=
|
|
476
|
+
api_logic_server_cli/genai/genai_svcs.py,sha256=1J1LyzLpcjEBLYPsdqYzqR_6HvS5A69olD4v9B9fbYE,45989
|
|
477
477
|
api_logic_server_cli/genai/genai_utils.py,sha256=DKhIb0P-7Ps1a1jIXyDOlTT8DwXn4-c7LRrV83GgnC8,17128
|
|
478
478
|
api_logic_server_cli/genai/json2rules.py,sha256=ykoxxgZgqllzt8Ud06S-R_3QtumxXfmF5ksYC0Hh2Sk,2645
|
|
479
479
|
api_logic_server_cli/model_migrator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -537,7 +537,7 @@ api_logic_server_cli/prototypes/base/api/api_discovery/ontimize_api.py,sha256=_g
|
|
|
537
537
|
api_logic_server_cli/prototypes/base/api/api_discovery/system.py,sha256=Cv4qtnEG5s6vtk2alHmPAvwKlbtlHsd3Ugse_YKIk7Q,3345
|
|
538
538
|
api_logic_server_cli/prototypes/base/api/system/api_utils.py,sha256=cCwujmQRE3gb6756GAVlypx7r30eH_-aZzo-hi3BNTU,5812
|
|
539
539
|
api_logic_server_cli/prototypes/base/api/system/custom_endpoint.py,sha256=191JrBIhRM1-gjCdJhfy0VFTZtMHoGXIIXcwEGAPbeI,49786
|
|
540
|
-
api_logic_server_cli/prototypes/base/api/system/expression_parser.py,sha256=
|
|
540
|
+
api_logic_server_cli/prototypes/base/api/system/expression_parser.py,sha256=4kPnwihBTP-APE5xQ8_5M9lK8cd_z6z783GFY47-8eM,28008
|
|
541
541
|
api_logic_server_cli/prototypes/base/api/system/gen_csv_report.py,sha256=GDAFJV3v1phmjLDE-vfvp8jgZnu2R6sTdQ6UWgdk64c,1410
|
|
542
542
|
api_logic_server_cli/prototypes/base/api/system/gen_pdf_report.py,sha256=gOe5mSYbh17q94UDh_YQI4qUr7jjck7UfnTNe7CEXhA,8783
|
|
543
543
|
api_logic_server_cli/prototypes/base/api/system/opt_locking/opt_locking.py,sha256=ib-hb-ZLZ7P7XbyQ08teUKM_p-5WMAmo0Cyjao2GA9o,6432
|
|
@@ -620,16 +620,16 @@ api_logic_server_cli/prototypes/base/devops/python-anywhere/python_anywhere_wsgi
|
|
|
620
620
|
api_logic_server_cli/prototypes/base/docs/logic/readme.md,sha256=s0s5FIF0TVPfinEPdNNSUy9f2HJwGQQdJ1h3xrJm3lA,590
|
|
621
621
|
api_logic_server_cli/prototypes/base/docs/logic_suggestions/readme_logic_suggestions.md,sha256=44ibQYGOy84J4zGFaChLCOf-GU9pOBrbgBbprujMtIs,184
|
|
622
622
|
api_logic_server_cli/prototypes/base/integration/kafka/kafka_consumer.py,sha256=2DOsFpYnsJ71gZzzfJweEmL-i99uCtEFU0hVwIKFGMw,1516
|
|
623
|
-
api_logic_server_cli/prototypes/base/integration/kafka/kafka_producer.py,sha256=
|
|
623
|
+
api_logic_server_cli/prototypes/base/integration/kafka/kafka_producer.py,sha256=F1aft-9N3IdoASQWexAGWz9c1eKnPsE4u5SP2rRSfQc,4182
|
|
624
624
|
api_logic_server_cli/prototypes/base/integration/kafka/kafka_readme.md,sha256=MlwykHWM2w41KzWh4vPuTnIodR8f-BQzrWpV4P1hrsI,161
|
|
625
625
|
api_logic_server_cli/prototypes/base/integration/n8n/N8N_WebHook_from_ApiLogicServer.json,sha256=s9JuoF9gLiuNZAD0dTVdnwQpORQHe0TseyPNVDe048w,10606
|
|
626
626
|
api_logic_server_cli/prototypes/base/integration/n8n/n8n_producer.py,sha256=loaF5AalPS2-7OJqSDi5Dnn_GyJG6dqiHxPzmLSB8j0,4869
|
|
627
627
|
api_logic_server_cli/prototypes/base/integration/n8n/n8n_readme.md,sha256=1ncnSAVI6_E3kIh8lU7xphi1xxUZI65MknK517N87wQ,2381
|
|
628
628
|
api_logic_server_cli/prototypes/base/integration/row_dict_maps/row_dict_maps_readme.md,sha256=5tOPwErjkcCQONrNcaGsttEwybxCIq-5j45dkOcDh1Q,206
|
|
629
629
|
api_logic_server_cli/prototypes/base/integration/system/FlaskKafka.py,sha256=_UsIUrQ022B7IzEPGRw6GgkUeWtvKHPBe2OSpFF8pEw,3203
|
|
630
|
-
api_logic_server_cli/prototypes/base/integration/system/RowDictMapper.py,sha256=
|
|
631
|
-
api_logic_server_cli/prototypes/base/logic/declare_logic.py,sha256=
|
|
632
|
-
api_logic_server_cli/prototypes/base/logic/load_verify_rules.py,sha256=
|
|
630
|
+
api_logic_server_cli/prototypes/base/integration/system/RowDictMapper.py,sha256=DSdmeAQZZ_wUWHHiSS_6ZgeTKIuEycNlgX140l3fnSE,19986
|
|
631
|
+
api_logic_server_cli/prototypes/base/logic/declare_logic.py,sha256=vglpAfVRM3QONLDbWIXcZrXTSttO8vUpwLbSJ51Fmw0,3290
|
|
632
|
+
api_logic_server_cli/prototypes/base/logic/load_verify_rules.py,sha256=dYEb-UxqQ5N08ry22I04vtFy8JtQe2pL7Jw8gR8nGu4,7742
|
|
633
633
|
api_logic_server_cli/prototypes/base/logic/readme_declare_logic.md,sha256=CFC13f9Z4rTkNiRoJTBEz3A2F_yRThOj-HrHDsSdKsw,6630
|
|
634
634
|
api_logic_server_cli/prototypes/base/logic/logic_discovery/auto_discovery.py,sha256=m97W6DYi6ouTDuFCiU1rPq1UqzJuNnVePyOeLU33D1s,2645
|
|
635
635
|
api_logic_server_cli/prototypes/base/logic/logic_discovery/__pycache__/__init__.cpython-312.pyc,sha256=5--1medTaKN83y-D_iv9EPiLD2uja_Q0r5ZkxX_pJM4,199
|
|
@@ -726,30 +726,33 @@ api_logic_server_cli/prototypes/fiddle/1. Learn APIs using Flask SqlAlchemy/data
|
|
|
726
726
|
api_logic_server_cli/prototypes/fiddle/1. Learn APIs using Flask SqlAlchemy/database/logging.yml,sha256=GIRd1gxe-Em7GpKRg8wTYg-Aq71QuEeA1rD9RV7iB18,1400
|
|
727
727
|
api_logic_server_cli/prototypes/fiddle/1. Learn APIs using Flask SqlAlchemy/database/models.py,sha256=eeVAXGs_PN8bmYzIao0-kbZv5Mbham49zWUmHloAMWc,11945
|
|
728
728
|
api_logic_server_cli/prototypes/fiddle/1. Learn APIs using Flask SqlAlchemy/test/server_test.py,sha256=XWmMCqixRy7aP47rpNEOjv_4NxSi7z-8yYjtqkShLE8,786
|
|
729
|
-
api_logic_server_cli/prototypes/genai_demo/api/customize_api.py,sha256=
|
|
730
|
-
api_logic_server_cli/prototypes/genai_demo/database
|
|
731
|
-
api_logic_server_cli/prototypes/genai_demo/database/
|
|
732
|
-
api_logic_server_cli/prototypes/genai_demo/database/
|
|
733
|
-
api_logic_server_cli/prototypes/genai_demo/
|
|
734
|
-
api_logic_server_cli/prototypes/genai_demo/database/chatgpt/sample_ai.sqlite,sha256=XbMAvWKnaG5bsicsA05-0wgd0PowZs7x3t15Qh7_wP0,24576
|
|
735
|
-
api_logic_server_cli/prototypes/genai_demo/database/chatgpt/sample_ai_items.sqlite,sha256=HGz9KW-r8yVz3c52Gsffxsm9DfNK1bWKMxfN2xFgZ20,24576
|
|
736
|
-
api_logic_server_cli/prototypes/genai_demo/database/chatgpt/sample_ai_models.py,sha256=EBu8nJt9bg-QJN1GG0eP4evsJeU7hvoOU8Aby17q1no,5567
|
|
737
|
-
api_logic_server_cli/prototypes/genai_demo/database/chatgpt/sample_ai_models.sqlite,sha256=xVXgtMoEsivbm0BrrMgsSh5t6V-3EKDRvHp0SobgmSk,20480
|
|
738
|
-
api_logic_server_cli/prototypes/genai_demo/database/chatgpt/__pycache__/copilot_models.cpython-312.pyc,sha256=kLUaHzeceWOfGTBdTCKN1gaEcyyUkYi2DTLstnL7HGk,1266
|
|
739
|
-
api_logic_server_cli/prototypes/genai_demo/database/chatgpt/__pycache__/sample_ai_models.cpython-312.pyc,sha256=Ss6fsPgoYUnKlUXm0QF3K2vOJGt3GAItskz8-dPRZYs,5899
|
|
740
|
-
api_logic_server_cli/prototypes/genai_demo/integration/row_dict_maps/OrderB2B.py,sha256=TXhhw54Iyp2mf629rDT8elawOc2q-VNfUaumYBaRAto,1236
|
|
729
|
+
api_logic_server_cli/prototypes/genai_demo/api/customize_api.py,sha256=u7XRsUaXF1C8yBtUlJU_WtvsbdwEUv9u8hRe63i5YoQ,7342
|
|
730
|
+
api_logic_server_cli/prototypes/genai_demo/database/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
|
731
|
+
api_logic_server_cli/prototypes/genai_demo/database/db.sqlite,sha256=zwG7ZsymnCAftk4qSeGv8N5ttJJaIoBdKq4oGsiaIoY,28672
|
|
732
|
+
api_logic_server_cli/prototypes/genai_demo/database/models.py,sha256=5XfE4-nn-FGvNHfIDZ3BbYiQiQScgiJ5wwPnY7Nrn5g,4303
|
|
733
|
+
api_logic_server_cli/prototypes/genai_demo/integration/row_dict_maps/OrderB2B.py,sha256=dJrATC4f4TOnUqF-U0swIZ3Y_TV5STk18pkeRSpBf1k,1180
|
|
741
734
|
api_logic_server_cli/prototypes/genai_demo/integration/row_dict_maps/OrderShipping.py,sha256=4wM45eRNkDNl7vcX689VSR7BgdKvae5hD26L8XZYGfc,1197
|
|
742
|
-
api_logic_server_cli/prototypes/genai_demo/
|
|
743
|
-
api_logic_server_cli/prototypes/genai_demo/
|
|
735
|
+
api_logic_server_cli/prototypes/genai_demo/integration/row_dict_maps/row_dict_maps_readme.md,sha256=5tOPwErjkcCQONrNcaGsttEwybxCIq-5j45dkOcDh1Q,206
|
|
736
|
+
api_logic_server_cli/prototypes/genai_demo/integration/row_dict_maps/__pycache__/OrderB2B.cpython-312.pyc,sha256=GAhE6t6Hd1OshSdpG7T10GapxWgU4lM95n7zd2jwN6Q,1955
|
|
737
|
+
api_logic_server_cli/prototypes/genai_demo/logic/declare_logic.py,sha256=_YUZsl6B6WHV4f9R-obOKniDtdYNCxfd5vJpLLdRXgw,4930
|
|
738
|
+
api_logic_server_cli/prototypes/genai_demo/logic/load_verify_rules.py,sha256=TWqzJ_KWX_QvpxWQv4ujqc487W1P9ZglrciSLor_NHA,7681
|
|
739
|
+
api_logic_server_cli/prototypes/genai_demo/logic/readme_declare_logic.md,sha256=CFC13f9Z4rTkNiRoJTBEz3A2F_yRThOj-HrHDsSdKsw,6630
|
|
740
|
+
api_logic_server_cli/prototypes/genai_demo/logic/__pycache__/declare_logic.cpython-312.pyc,sha256=heB0NPW04Ede5hY4x-lF8_Hj2TtfYSQrBSEaDOUEiuw,6990
|
|
741
|
+
api_logic_server_cli/prototypes/genai_demo/logic/__pycache__/load_verify_rules.cpython-312.pyc,sha256=fgiC8DnQdbIBl40QfKjDXUHtBgQcoGpUASgF7Da5rZQ,11198
|
|
742
|
+
api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/auto_discovery.py,sha256=m97W6DYi6ouTDuFCiU1rPq1UqzJuNnVePyOeLU33D1s,2645
|
|
743
|
+
api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/__pycache__/__init__.cpython-312.pyc,sha256=5--1medTaKN83y-D_iv9EPiLD2uja_Q0r5ZkxX_pJM4,199
|
|
744
|
+
api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/__pycache__/auto_discovery.cpython-312.pyc,sha256=khoFnahoi-hIONmyzvMoui7d6QAT1WcBtRHr1no6f_U,3252
|
|
745
|
+
api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/__pycache__/error_testing.cpython-312.pyc,sha256=NQKJ0pHsE53Nwmob8c03X_vkSV-MP_mj-1VFmJ3kRs0,2225
|
|
744
746
|
api_logic_server_cli/prototypes/genai_demo/security/declare_security.py,sha256=L3AL1bgdqIWQxdkJZcFVDOQ0XRpmeLAKqwlAYChFWKo,2108
|
|
745
|
-
api_logic_server_cli/prototypes/genai_demo/
|
|
747
|
+
api_logic_server_cli/prototypes/genai_demo/security/__pycache__/declare_security.cpython-312.pyc,sha256=6D4oMs3K6SAUIOdTg2nTodmAg0HyFA1SyoJTeJYgAUs,2264
|
|
748
|
+
api_logic_server_cli/prototypes/genai_demo/ui/admin/admin.yaml,sha256=jTNWI3n3TLrjtpG8fTd7AawKr3x1Jhrft-ow6bvmCGM,3449
|
|
746
749
|
api_logic_server_cli/prototypes/manager/.DS_Store,sha256=v0WHl9kV19fTkhSl1TOZkl0d_KnhnIhXNpgTNdFVSpY,6148
|
|
747
750
|
api_logic_server_cli/prototypes/manager/.gitignore,sha256=xfAjNQHokbo6GuN1ghx-eml8tQIzwUczLC_YVzElndI,195
|
|
748
|
-
api_logic_server_cli/prototypes/manager/README.md,sha256=
|
|
751
|
+
api_logic_server_cli/prototypes/manager/README.md,sha256=d5IIHjZ5etTOykAwVofcfehBguSryBKUycp_FQE1gag,20638
|
|
749
752
|
api_logic_server_cli/prototypes/manager/settings.txt,sha256=_jjL30jomIMxG21edDfrXYRT9Zfgr_0EdUWvcEUOnFQ,368
|
|
750
753
|
api_logic_server_cli/prototypes/manager/.vscode/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
|
751
754
|
api_logic_server_cli/prototypes/manager/.vscode/ApiLogicServer.code-workspace,sha256=HFycZhs0k5fXLxEZF-FBSA2S_JRDIYtVOhqb9743hH4,296
|
|
752
|
-
api_logic_server_cli/prototypes/manager/.vscode/launch.json,sha256=
|
|
755
|
+
api_logic_server_cli/prototypes/manager/.vscode/launch.json,sha256=fhXbuJvpxEaBuN868v2NcgZCyZQD-hzIbIgdF2jLgAc,32515
|
|
753
756
|
api_logic_server_cli/prototypes/manager/.vscode/settings.json,sha256=wQgpFvviPbZCmsf02UgrJSGAz7g3i4chDZ_AdSIOr5Y,625
|
|
754
757
|
api_logic_server_cli/prototypes/manager/system/.DS_Store,sha256=r4gY37tWmhc60MVHeHWD-ZbqQBPlXqcC7xX2NhV42AA,6148
|
|
755
758
|
api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace,sha256=19Acdi2ZvX5U_IMokLiVaKkIMwsSxgbw5YjaRMpBAAI,333
|
|
@@ -1211,11 +1214,11 @@ api_logic_server_cli/prototypes/manager/system/genai/examples/emp_depts/emp_dept
|
|
|
1211
1214
|
api_logic_server_cli/prototypes/manager/system/genai/examples/emp_depts/logic_notes.md,sha256=mrEBKE1OQxEqFoRLD1zYL-SeC5ITPcWEZKaumRDw7U4,100
|
|
1212
1215
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/.DS_Store,sha256=zQYgpeXOUqrfba9eGY89I8y4TzyXt6KeFI8mi4jUJFk,6148
|
|
1213
1216
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/create_db_models.py,sha256=QyGtjgsuYkVF5UYOn35V8ZnAdI76s-1KyM7nnGM4lPI,3588
|
|
1214
|
-
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.prompt,sha256=
|
|
1215
|
-
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.response_example,sha256=
|
|
1217
|
+
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.prompt,sha256=OwdxIKDO60meoYFLuA4b2W3727npv5g7gp6xdSoVa-A,771
|
|
1218
|
+
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.response_example,sha256=AW8V5VmeSEfGMPsTDYY77kIWqlnZ9-rpk-7OfboBiwM,8755
|
|
1216
1219
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_fixup_required.json,sha256=b7SO0wkrV7DxIkW2UxmEF07wXONMwzC4UOw1ZG2cvAw,9670
|
|
1217
1220
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_formal.prompt,sha256=V8QdPiytwb1jqWeo6fZvaoPE5OkPTJZ2KsKrvo17f7k,432
|
|
1218
|
-
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_informal.prompt,sha256=
|
|
1221
|
+
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_informal.prompt,sha256=OwdxIKDO60meoYFLuA4b2W3727npv5g7gp6xdSoVa-A,771
|
|
1219
1222
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_informal_rules_only.prompt,sha256=rR-ZCr3knseA9ButjkZ80hxhy-Rxw5FbvVEbEXImo58,521
|
|
1220
1223
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_no_logic.prompt,sha256=IIsO4mxLpKccSoIE1dMNsQQ2efhhCpFnAcoGtbcHv50,95
|
|
1221
1224
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/__pycache__/create_db_models.cpython-312.pyc,sha256=GuOEED9cvP4Q9M73S2zAdHybuhe8W36kb1j5HRZb5YU,5578
|
|
@@ -5841,8 +5844,8 @@ api_logic_server_cli/prototypes/manager/system/genai/examples/students_classes_i
|
|
|
5841
5844
|
api_logic_server_cli/prototypes/manager/system/genai/examples/time_tracking_billing/002_create_db_models.prompt,sha256=FnOEtrNZzX0PLcq9LvLCJyp7b4RDCO14v-Q5nmu8hVM,7008
|
|
5842
5845
|
api_logic_server_cli/prototypes/manager/system/genai/examples/time_tracking_billing/003_create_db_models.response,sha256=-VGUaPaa-KR9ES2PCZpzJc3svOKuPdPXDVwP-tboXuw,27513
|
|
5843
5846
|
api_logic_server_cli/prototypes/manager/system/genai/examples/time_tracking_billing/db.sqlite,sha256=hfPdf_o69yP0r1_w60hUos6VZC7tekRvGwiXsGyNzuI,32768
|
|
5844
|
-
api_logic_server_cli/prototypes/manager/system/genai/examples/time_tracking_billing/readme.md,sha256=
|
|
5845
|
-
api_logic_server_cli/prototypes/manager/system/genai/learning_requests/logic_bank_api.prompt,sha256=
|
|
5847
|
+
api_logic_server_cli/prototypes/manager/system/genai/examples/time_tracking_billing/readme.md,sha256=tbqT3IhKI9tTaTC_Wr4WbOjcWuFd22WOKjLXssm5cGs,3019
|
|
5848
|
+
api_logic_server_cli/prototypes/manager/system/genai/learning_requests/logic_bank_api.prompt,sha256=kIDGOhfHBPqOcMUPIEEDYfPPB-Aw9IQFAqg5d9MLIPo,15012
|
|
5846
5849
|
api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
|
5847
5850
|
api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/fixup.prompt,sha256=ZdVl-0J9oi8dS_3pDTrwdtvMSpDymbArTIlSEwcjCrM,305
|
|
5848
5851
|
api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/import.prompt,sha256=nuSDA54ii9O5O920YhmA6sqaI_k3VFw3O97jgk0PCzo,493
|
|
@@ -6224,10 +6227,10 @@ api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/setup.py,sha256=ekn0wq_leWE
|
|
|
6224
6227
|
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/tox.ini,sha256=mVlmM_uI-7K4pLs-jBfu8ZOQpHwQj8fh7LogvwjXJyE,440
|
|
6225
6228
|
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/__pycache__/__init__.cpython-312.pyc,sha256=TCTs9PqY75qnKtNXXWS41XVG_wGzHyRQ2eA3IWNY-Ss,237
|
|
6226
6229
|
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6227
|
-
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/codegen.py,sha256=
|
|
6230
|
+
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/codegen.py,sha256=p3MnTFVGE7vIzE2DqfWvoG43tJE9frkXjzODXA9UQeE,77486
|
|
6228
6231
|
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/main.py,sha256=_kSzjbpJRgQURKP391SdIjYJOzBuyADEIP0qSSu8Nv0,3252
|
|
6229
6232
|
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/__pycache__/__init__.cpython-312.pyc,sha256=KHmbHH1vUKhS8pIGx1wyXxO6iwO9X3znNZROjYUzTnI,249
|
|
6230
|
-
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/__pycache__/codegen.cpython-312.pyc,sha256=
|
|
6233
|
+
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/__pycache__/codegen.cpython-312.pyc,sha256=4hnUU0c1-SbhvP6ElD5usSEzhc2UJCxdct0jC9iz7d0,81261
|
|
6231
6234
|
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/als_safrs_310/delete_log.txt,sha256=gMkXWPBkd-jEb-P7UA8WkCnV8tAccBL-IhT41Jz5TRw,16390
|
|
6232
6235
|
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/als_safrs_310/notes.txt,sha256=6KP8dOvdWsIGrpRmaueXbo_ZpD-6Edz-pOfTE80cScA,3991
|
|
6233
6236
|
api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/als_safrs_310/nw-schema.txt,sha256=mxZHTNBEH2-0Sf0NbS53DmX6_BmD2a3xz1nEhatXc_A,7159
|
|
@@ -6260,9 +6263,9 @@ api_logic_server_cli/tools/mini_skel/database/system/SAFRSBaseX.py,sha256=p8C7AF
|
|
|
6260
6263
|
api_logic_server_cli/tools/mini_skel/database/system/TestDataBase.py,sha256=U02SYqThsbY5g3DX7XGaiMxjZBuOpzvtPS6RfI1WQFg,371
|
|
6261
6264
|
api_logic_server_cli/tools/mini_skel/logic/declare_logic.py,sha256=fTrlHyqMeZsw_TyEXFa1VlYBL7fzjZab5ONSXO7aApo,175
|
|
6262
6265
|
api_logic_server_cli/tools/mini_skel/logic/load_verify_rules.py,sha256=Rr5bySJpYCZmNPF2h-phcPJ53nAOPcT_ohZpCD93-a0,7530
|
|
6263
|
-
ApiLogicServer-14.3.
|
|
6264
|
-
ApiLogicServer-14.3.
|
|
6265
|
-
ApiLogicServer-14.3.
|
|
6266
|
-
ApiLogicServer-14.3.
|
|
6267
|
-
ApiLogicServer-14.3.
|
|
6268
|
-
ApiLogicServer-14.3.
|
|
6266
|
+
ApiLogicServer-14.3.7.dist-info/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
|
|
6267
|
+
ApiLogicServer-14.3.7.dist-info/METADATA,sha256=ONKOg5Hc2ykoNZafJvCHg0J1ldjhVamsZgEPrl5ETSk,6446
|
|
6268
|
+
ApiLogicServer-14.3.7.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
6269
|
+
ApiLogicServer-14.3.7.dist-info/entry_points.txt,sha256=KiLloZJ3c_RW-nIDqBtoE0WEsQTnZ3dELwHLWi23LMA,103
|
|
6270
|
+
ApiLogicServer-14.3.7.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
|
|
6271
|
+
ApiLogicServer-14.3.7.dist-info/RECORD,,
|
|
@@ -12,9 +12,10 @@ ApiLogicServer CLI: given a database url, create [and run] customizable ApiLogic
|
|
|
12
12
|
Called from api_logic_server_cli.py, by instantiating the ProjectRun object.
|
|
13
13
|
'''
|
|
14
14
|
|
|
15
|
-
__version__ = "14.03.
|
|
15
|
+
__version__ = "14.03.07"
|
|
16
16
|
recent_changes = \
|
|
17
17
|
f'\n\nRecent Changes:\n' +\
|
|
18
|
+
"\t02/05/2024 - 14.03.07: webg SendWhen \n"\
|
|
18
19
|
"\t01/31/2024 - 14.03.00: Issue 76: exp ending in right paren, Issue 74: Multi-db fix, extended default options, if-based Nat Lang formulas \n"\
|
|
19
20
|
"\t01/29/2024 - 14.02.34: save docs/response.json to fix bad rules for IS_GENAI_DEMO, LogicBank 1.20.23 (all defaults) \n"\
|
|
20
21
|
"\t01/26/2024 - 14.02.31: genai_logic fail-safe, Issue 74: Multi-db fix, support models named Rule, wg logic discovery, if formula \n"\
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
last_created_date:
|
|
2
|
-
last_created_project_name:
|
|
3
|
-
last_created_version: 14.
|
|
1
|
+
last_created_date: February 04, 2025 14:41:01
|
|
2
|
+
last_created_project_name: genai_demo_
|
|
3
|
+
last_created_version: 14.03.05
|
api_logic_server_cli/cli.py
CHANGED
|
@@ -216,10 +216,13 @@ def main(ctx):
|
|
|
216
216
|
@click.option('--clean/--no-clean', "clean",
|
|
217
217
|
default=False, is_flag=True,
|
|
218
218
|
help="Overlay existing manager (projects retained)")
|
|
219
|
+
@click.option('--samples/--no-samples', "samples",
|
|
220
|
+
default=True, is_flag=True,
|
|
221
|
+
help="Create sample projects")
|
|
219
222
|
@click.option('--open-manager/--no-open-manager', "open_manager",
|
|
220
223
|
default=True, is_flag=True,
|
|
221
224
|
help="Overlay existing manager (projects retained)")
|
|
222
|
-
def create_start_manager(ctx, open_with, clean: click.BOOL = True,
|
|
225
|
+
def create_start_manager(ctx, open_with, clean: click.BOOL = True, samples: click.BOOL = True,
|
|
223
226
|
volume: str = "ApiLogicServer", open_manager: click.BOOL = True):
|
|
224
227
|
"""
|
|
225
228
|
Create and Manage API Logic Projects.
|
|
@@ -227,7 +230,7 @@ def create_start_manager(ctx, open_with, clean: click.BOOL = True,
|
|
|
227
230
|
# print(f'start sees volume={volume}')
|
|
228
231
|
from api_logic_server_cli.manager import create_manager
|
|
229
232
|
create_manager(clean=clean, open_with=open_with, api_logic_server_path=get_api_logic_server_path(),
|
|
230
|
-
volume=volume, open_manager=open_manager)
|
|
233
|
+
volume=volume, open_manager=open_manager, samples=samples)
|
|
231
234
|
|
|
232
235
|
|
|
233
236
|
@main.command("about")
|
|
Binary file
|
|
@@ -600,7 +600,7 @@ class OntBuilder(object):
|
|
|
600
600
|
and len(tg["fks"]) == 1 \
|
|
601
601
|
and not exclude:
|
|
602
602
|
col_type = next((col.type for col in entity.columns if col.name == col_var["name"]), None)
|
|
603
|
-
if col_type and col_var["type"]
|
|
603
|
+
if col_type and col_var["type"].lower().split("(")[0] in ["bigint", "int","integer", "numeric","decimal"]:
|
|
604
604
|
tab_name, tab_var = self.get_tab_attrs(entity=entity, parent_entity=parent_entity, fk_tab=tg)
|
|
605
605
|
return self.table_cell_render.render(tab_var)
|
|
606
606
|
|
|
@@ -185,6 +185,10 @@ class GenAI(object):
|
|
|
185
185
|
with open(genai_demo_response_path, 'r') as response_file:
|
|
186
186
|
response_dict = json.load(response_file)
|
|
187
187
|
log.debug(f'.. used standard genai_demo response: {genai_demo_response_path}')
|
|
188
|
+
genai_demo_response_path = Path('system/genai/temp/response.json')
|
|
189
|
+
with open(genai_demo_response_path, 'w') as response_file:
|
|
190
|
+
json.dump(response_dict, response_file, indent=4)
|
|
191
|
+
|
|
188
192
|
else: # for retry from corrected response... eg system/genai/temp/chatgpt_retry.response
|
|
189
193
|
self.resolved_model = "(n/a: model not used for repaired response)"
|
|
190
194
|
log.debug(f'\nUsing [corrected] response from: {self.project.genai_repaired_response}')
|
|
@@ -193,6 +193,8 @@ def get_code_update_logic_file(rule_list: List[DotMap], logic_file_path: Path =
|
|
|
193
193
|
pass
|
|
194
194
|
elif 'Rule.constraint' in each_line:
|
|
195
195
|
pass
|
|
196
|
+
elif 'Rule.after_flush_row_event' in each_line:
|
|
197
|
+
pass
|
|
196
198
|
elif 'Rule.allocate' in each_line:
|
|
197
199
|
pass
|
|
198
200
|
elif 'Rule.calculate' in each_line:
|
api_logic_server_cli/manager.py
CHANGED
|
@@ -11,14 +11,14 @@ from pathlib import Path
|
|
|
11
11
|
import api_logic_server_cli.api_logic_server as PR
|
|
12
12
|
|
|
13
13
|
def create_manager(clean: bool, open_with: str, api_logic_server_path: Path,
|
|
14
|
-
volume: str = "", open_manager: bool = True):
|
|
14
|
+
volume: str = "", open_manager: bool = True, samples: bool = True):
|
|
15
15
|
"""Implements als start to create manager - called from api_logic_server_cli/cli.py
|
|
16
16
|
|
|
17
17
|
create Manager at os.getcwd(), including:
|
|
18
18
|
|
|
19
19
|
1. .vscode, readme
|
|
20
20
|
2. System folder (GenAI sample prompts / responses, others TBD)
|
|
21
|
-
3. pre-created samples
|
|
21
|
+
3. pre-created samples (optional)
|
|
22
22
|
|
|
23
23
|
Example, from CLI in directory containing a `venv` (see https://apilogicserver.github.io/Docs/Manager/):
|
|
24
24
|
als start
|
|
@@ -122,21 +122,25 @@ def create_manager(clean: bool, open_with: str, api_logic_server_path: Path,
|
|
|
122
122
|
except: # do NOT fail
|
|
123
123
|
pass # just fall back to using the pip-installed version
|
|
124
124
|
|
|
125
|
-
if
|
|
126
|
-
|
|
125
|
+
if not samples:
|
|
126
|
+
shutil.rmtree(to_dir.joinpath(f'{docker_volume}system/app_model_editor'))
|
|
127
|
+
shutil.rmtree(to_dir.joinpath(f'{docker_volume}system/genai/examples/genai_demo/wg_dev_merge'))
|
|
127
128
|
else:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
129
|
+
if project.is_docker:
|
|
130
|
+
log.debug(f" tutorial not created for docker\n\n")
|
|
131
|
+
else:
|
|
132
|
+
tutorial_project = PR.ProjectRun(command="tutorial",
|
|
133
|
+
project_name='./samples',
|
|
134
|
+
db_url="",
|
|
135
|
+
execute=False,
|
|
136
|
+
open_with="NO_AUTO_OPEN"
|
|
137
|
+
)
|
|
138
|
+
tutorial_project = tutorial_project.tutorial(msg="Creating:") ##, create='tutorial')
|
|
139
|
+
|
|
140
|
+
samples_project = PR.ProjectRun(command= "create", project_name=f'{docker_volume}samples/nw_sample', db_url='nw+', open_with="NO_AUTO_OPEN")
|
|
141
|
+
log.setLevel(mgr_save_level)
|
|
142
|
+
log.disabled = False # todo why was it reset?
|
|
143
|
+
samples_project = PR.ProjectRun(command= "create", project_name=f'{docker_volume}samples/nw_sample_nocust', db_url='nw', open_with="NO_AUTO_OPEN")
|
|
140
144
|
log.info('')
|
|
141
145
|
log.setLevel(mgr_save_level)
|
|
142
146
|
log.disabled = False
|
|
@@ -153,18 +153,24 @@ def fixup_sort(clz, data):
|
|
|
153
153
|
continue
|
|
154
154
|
return sort
|
|
155
155
|
def fixup_data(data, sqltypes):
|
|
156
|
+
new_data = None
|
|
156
157
|
if data:
|
|
158
|
+
new_data = {}
|
|
157
159
|
for key, value in data.items():
|
|
160
|
+
new_data[key] = value
|
|
158
161
|
if sqltypes and key in sqltypes and isinstance(value, str):
|
|
159
162
|
if sqltypes[key] in [-5,2,4,5,-6]: #BIGINT, TINYINT, INT, SMALLINT, INTEGER
|
|
160
|
-
|
|
163
|
+
if new_data[key].isdigit():
|
|
164
|
+
new_data[key] = int(value)
|
|
165
|
+
else:
|
|
166
|
+
del new_data[key]
|
|
161
167
|
elif sqltypes[key] in [6]: #DECIMAL
|
|
162
|
-
|
|
168
|
+
new_data[key] = Decimal(value)
|
|
163
169
|
if sqltypes and key in sqltypes and sqltypes[key] in [91,93] and isinstance(value, int): #DATE, TIMESTAMP
|
|
164
170
|
from datetime import datetime
|
|
165
171
|
fmt = "%Y-%m-%d" if sqltypes[key] == 91 else "%Y-%m-%d %H:%M:%S"
|
|
166
|
-
|
|
167
|
-
return
|
|
172
|
+
new_data[key] = datetime.fromtimestamp(value / 1000) #.strftime(fmt)
|
|
173
|
+
return new_data
|
|
168
174
|
|
|
169
175
|
def _parseFilter(filter: dict, sqltypes: any):
|
|
170
176
|
# {filter":{"@basic_expression":{"lop":"BALANCE","op":"<=","rop":35000}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""
|
|
2
2
|
|
|
3
|
-
Version
|
|
3
|
+
Version 2.0
|
|
4
4
|
|
|
5
5
|
Invoked at server start (api_logic_server_run.py -> config/setup.py)
|
|
6
6
|
|
|
@@ -47,8 +47,23 @@ def kafka_producer():
|
|
|
47
47
|
producer = Producer(conf)
|
|
48
48
|
logger.debug(f'\nKafka producer connected')
|
|
49
49
|
|
|
50
|
+
from sqlalchemy.inspection import inspect
|
|
50
51
|
|
|
51
|
-
def
|
|
52
|
+
def get_primary_key(logic_row: LogicRow):
|
|
53
|
+
""" Return primary key for row, if it exists
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
logic_row (LogicRow): The SQLAlchemy row object
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
dict: A dictionary with primary key column names and their values
|
|
60
|
+
"""
|
|
61
|
+
primary_key_columns = inspect(logic_row.row).mapper.primary_key
|
|
62
|
+
primary_key = {column.name: getattr(logic_row.row, column.name) for column in primary_key_columns}
|
|
63
|
+
return primary_key
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def send_kafka_message(kafka_topic: str, kafka_key: str = None, msg: str="", json_root_name: str = "",
|
|
52
67
|
logic_row: LogicRow = None, row_dict_mapper: RowDictMapper = None, payload: dict = None):
|
|
53
68
|
""" Send Kafka message regarding logic_row, mapped by row_dict_mapper
|
|
54
69
|
|
|
@@ -80,18 +95,27 @@ def send_kafka_message(kafka_topic: str, kafka_key: str, msg: str="", json_root_
|
|
|
80
95
|
else:
|
|
81
96
|
root_name = logic_row.name
|
|
82
97
|
|
|
98
|
+
if kafka_key is None:
|
|
99
|
+
kafka_key = get_primary_key(logic_row)
|
|
100
|
+
|
|
101
|
+
log_msg = msg if msg != "" else f"Sending {root_name} to Kafka topic '{kafka_topic}'"
|
|
102
|
+
|
|
83
103
|
json_string = jsonify({f'{root_name}': row_obj_dict}).data.decode('utf-8')
|
|
84
|
-
log_msg =
|
|
104
|
+
log_msg = log_msg
|
|
85
105
|
if producer: # enabled in config/config.py?
|
|
86
106
|
try:
|
|
87
107
|
producer.produce(value=json_string, topic="order_shipping", key=kafka_key)
|
|
88
108
|
if logic_row:
|
|
89
|
-
logic_row.log(
|
|
109
|
+
logic_row.log(log_msg)
|
|
90
110
|
except KafkaException as ke:
|
|
91
111
|
logger.error("kafka_producer#send_kafka_message error: {ke}")
|
|
92
112
|
else:
|
|
93
|
-
log_msg += "
|
|
113
|
+
log_msg += " [Note: **Kafka not enabled** ]"
|
|
94
114
|
if logic_row is not None:
|
|
95
|
-
logic_row.log(f'
|
|
96
|
-
|
|
97
|
-
|
|
115
|
+
logic_row.log(f'{log_msg}')
|
|
116
|
+
logger.debug(f'\n\n{log_msg}\n{json_string}')
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def send_row_to_kafka(row: object, old_row: object, logic_row: LogicRow, with_args: dict):
|
|
120
|
+
if logic_row.row.date_shipped is not None:
|
|
121
|
+
send_kafka_message(logic_row=logic_row, kafka_topic=with_args["topic"])
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from database import models
|
|
2
2
|
from flask import request, jsonify
|
|
3
3
|
import sqlalchemy as sqlalchemy
|
|
4
|
-
from sqlalchemy import Column
|
|
4
|
+
from sqlalchemy import Column, inspect
|
|
5
5
|
from sqlalchemy.ext.declarative import declarative_base
|
|
6
6
|
from flask_sqlalchemy.model import DefaultMeta
|
|
7
7
|
from sqlalchemy.ext.hybrid import hybrid_property
|
|
@@ -276,8 +276,7 @@ class RowDictMapper():
|
|
|
276
276
|
parent_lookup_list.append(self.parent_lookups)
|
|
277
277
|
for each_parent_lookup in parent_lookup_list:
|
|
278
278
|
self._parent_lookup_from_child(child_row_dict = row_dict,
|
|
279
|
-
|
|
280
|
-
parent_class = each_parent_lookup[0],
|
|
279
|
+
parent_lookup = each_parent_lookup,
|
|
281
280
|
child_row = sql_alchemy_row,
|
|
282
281
|
session = session)
|
|
283
282
|
|
|
@@ -354,27 +353,31 @@ class RowDictMapper():
|
|
|
354
353
|
|
|
355
354
|
def _parent_lookup_from_child(self, child_row_dict: dict, child_row: object,
|
|
356
355
|
session: object,
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
""" Used from child -- parent_lookups
|
|
356
|
+
parent_lookup: tuple[DefaultMeta, list[tuple[Column, str]]]):
|
|
357
|
+
""" Used from child -- parent_lookups (e,g, B2B Product)
|
|
360
358
|
|
|
361
359
|
Args:
|
|
362
|
-
child_row_dict (dict):
|
|
363
|
-
child_row (object):
|
|
364
|
-
|
|
365
|
-
|
|
360
|
+
child_row_dict (dict): the incoming payload
|
|
361
|
+
child_row (object): row
|
|
362
|
+
parent_lookup (tuple[DefaultMeta, list[tuple[Column, str]]]): parent class, list of attrs/json keys
|
|
363
|
+
session (object): SqlAlchemy session
|
|
364
|
+
|
|
365
|
+
Example lookup_fields (genai_demo/OrderB2B.py):
|
|
366
|
+
parent_lookup = ( models.Customer, [(models.Customer.name, 'Account')] )
|
|
367
|
+
parent_class: parent_lookups[0] Customer)
|
|
368
|
+
lookup_fields: parent_lookups[1] [(models.Customer.name, 'Account')]
|
|
366
369
|
|
|
367
370
|
Raises:
|
|
368
|
-
ValueError:
|
|
369
|
-
ValueError: _description_
|
|
371
|
+
ValueError: eg, missing parent
|
|
370
372
|
"""
|
|
371
|
-
|
|
373
|
+
parent_class = parent_lookup[0]
|
|
374
|
+
lookup_fields = parent_lookup[1]
|
|
372
375
|
query = session.query(parent_class)
|
|
373
376
|
|
|
374
377
|
if parent_class.__name__ in ['Product', 'Customer']:
|
|
375
378
|
logging.debug(f'_parent_lookup_from_child {parent_class.__name__}' )
|
|
376
|
-
for each_lookup_param_field in lookup_fields:
|
|
377
|
-
attr_name = each_lookup_param_field
|
|
379
|
+
for each_lookup_param_field in lookup_fields: # e.g, (models.Customer.name, 'Account')
|
|
380
|
+
attr_name = each_lookup_param_field # <col_def> <filter-val>
|
|
378
381
|
if isinstance(each_lookup_param_field, tuple):
|
|
379
382
|
col_def = each_lookup_param_field[0]
|
|
380
383
|
attr_name = each_lookup_param_field[1]
|
|
@@ -394,6 +397,20 @@ class RowDictMapper():
|
|
|
394
397
|
raise ValueError('Lookup failed: missing parent', child_row, parent_class.__name__, str(child_row_dict))
|
|
395
398
|
|
|
396
399
|
parent_row = parent_rows[0]
|
|
397
|
-
|
|
400
|
+
|
|
401
|
+
# find parent accessor - usually parent_class.__name__, unless fk is lower case (B2bOrders)
|
|
402
|
+
mapper = inspect(child_row).mapper
|
|
403
|
+
parent_accessor = None
|
|
404
|
+
for each_attribute in mapper.attrs: # find parent accessors
|
|
405
|
+
if isinstance(each_attribute, sqlalchemy.orm.relationships.RelationshipProperty):
|
|
406
|
+
if each_attribute.argument == parent_class.__name__:
|
|
407
|
+
if parent_accessor is None:
|
|
408
|
+
parent_accessor = each_attribute.key
|
|
409
|
+
else:
|
|
410
|
+
raise ValueError(f'Parent accessor not unique: {parent_accessor}') # TODO - multiple parents
|
|
411
|
+
if parent_accessor is None:
|
|
412
|
+
raise ValueError(f'Parent accessor not found: {parent_class.__name__}')
|
|
413
|
+
|
|
414
|
+
setattr(child_row, parent_accessor, parent_row)
|
|
398
415
|
|
|
399
416
|
return
|
|
@@ -8,6 +8,7 @@ import database.models as models
|
|
|
8
8
|
import api.system.opt_locking.opt_locking as opt_locking
|
|
9
9
|
from security.system.authorization import Grant, Security
|
|
10
10
|
from logic.load_verify_rules import load_verify_rules
|
|
11
|
+
import integration.kafka.kafka_producer as kafka_producer
|
|
11
12
|
import logging
|
|
12
13
|
|
|
13
14
|
app_logger = logging.getLogger(__name__)
|
|
@@ -26,6 +26,7 @@ declare_logic_message = "ALERT: *** No Rules Yet ***" # printed in api_logic_s
|
|
|
26
26
|
rule_import_template = """
|
|
27
27
|
from logic_bank.logic_bank import Rule
|
|
28
28
|
from database.models import *
|
|
29
|
+
import integration.kafka.kafka_producer as kafka_producer
|
|
29
30
|
|
|
30
31
|
def init_rule():
|
|
31
32
|
{rule_code}
|
|
@@ -213,4 +214,4 @@ def load_verify_rules():
|
|
|
213
214
|
app_logger.warning(f"{Fore.RED}Failed to load active exported rules: {exc}{Style.RESET_ALL}")
|
|
214
215
|
|
|
215
216
|
root_logger.removeHandler(file_handler)
|
|
216
|
-
|
|
217
|
+
|
|
@@ -5,8 +5,8 @@ from flask import request, jsonify
|
|
|
5
5
|
from safrs import jsonapi_rpc
|
|
6
6
|
from database import models
|
|
7
7
|
import integration.system.RowDictMapper as row_dict_mapper
|
|
8
|
-
from integration.row_dict_maps.OrderShipping import OrderShipping
|
|
9
|
-
from integration.row_dict_maps.OrderB2B import OrderB2B
|
|
8
|
+
# from integration.row_dict_maps.OrderShipping import OrderShipping
|
|
9
|
+
from integration.row_dict_maps.OrderB2B import OrderB2B # TODO - how to drive; B2B...
|
|
10
10
|
|
|
11
11
|
# called by api_logic_server_run.py, to customize api (new end points, services).
|
|
12
12
|
# separate from expose_api_models.py, to simplify merge if project recreated
|
|
@@ -140,15 +140,13 @@ class ServicesEndPoint(safrs.JABase):
|
|
|
140
140
|
""" # yaml creates Swagger description
|
|
141
141
|
args :
|
|
142
142
|
order:
|
|
143
|
-
Account: "
|
|
143
|
+
Account: "Alice"
|
|
144
144
|
Notes: "Please Rush"
|
|
145
145
|
Items :
|
|
146
|
-
- ProductName: "
|
|
146
|
+
- ProductName: "Product 1"
|
|
147
147
|
QuantityOrdered: 1
|
|
148
|
-
- ProductName: "
|
|
148
|
+
- ProductName: "Product 2"
|
|
149
149
|
QuantityOrdered: 2
|
|
150
|
-
- ProductName: "Green Apples"
|
|
151
|
-
QuantityOrdered: 3
|
|
152
150
|
---
|
|
153
151
|
|
|
154
152
|
Note attribute alias, Lookup automation in OrderB2B
|
|
@@ -159,19 +157,19 @@ class ServicesEndPoint(safrs.JABase):
|
|
|
159
157
|
$(venv) ApiLogicServer login --user=admin --password=p
|
|
160
158
|
$(venv) ApiLogicServer curl "'POST' 'http://localhost:5656/api/ServicesEndPoint/OrderB2B'" --data '
|
|
161
159
|
{"meta": {"args": {"order": {
|
|
162
|
-
"Account": "
|
|
160
|
+
"Account": "Alice",
|
|
163
161
|
"Notes": "Please Rush",
|
|
164
162
|
"Items": [
|
|
165
163
|
{
|
|
166
|
-
"ProductName": "
|
|
164
|
+
"ProductName": "Product 1",
|
|
167
165
|
"QuantityOrdered": 1
|
|
168
166
|
},
|
|
169
167
|
{
|
|
170
|
-
"ProductName": "
|
|
168
|
+
"ProductName": "Product 2",
|
|
171
169
|
"QuantityOrdered": 2
|
|
172
170
|
},
|
|
173
171
|
{
|
|
174
|
-
"ProductName": "
|
|
172
|
+
"ProductName": "Green Apples",
|
|
175
173
|
"QuantityOrdered": 2
|
|
176
174
|
}
|
|
177
175
|
]
|
|
Binary file
|
|
Binary file
|