ApiLogicServer 15.0.47__py3-none-any.whl → 15.0.54__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. api_logic_server_cli/api_logic_server.py +18 -5
  2. api_logic_server_cli/api_logic_server_info.yaml +3 -3
  3. api_logic_server_cli/cli.py +20 -16
  4. api_logic_server_cli/create_from_model/api_logic_server_utils.py +10 -1
  5. api_logic_server_cli/manager.py +24 -13
  6. api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md +39 -3
  7. api_logic_server_cli/prototypes/base/config/config.py +15 -0
  8. api_logic_server_cli/prototypes/base/database/alembic/alembic_run.py +98 -0
  9. api_logic_server_cli/prototypes/base/database/alembic/readme_alembic.md +36 -0
  10. api_logic_server_cli/prototypes/base/docs/training/admin_app_1_context.prompt.md +40 -0
  11. api_logic_server_cli/prototypes/base/integration/mcp/mcp_client_executor.py +2 -2
  12. api_logic_server_cli/prototypes/base/venv_setup/requirements-no-cli.txt +5 -4
  13. api_logic_server_cli/prototypes/basic_demo/_config.yml +8 -0
  14. api_logic_server_cli/prototypes/basic_demo/_layouts/redirect.html +15 -0
  15. api_logic_server_cli/prototypes/basic_demo/docs/system-creation-vibe.md +161 -0
  16. api_logic_server_cli/prototypes/basic_demo/logic/declarative-vs-procedural-comparison.html +110 -0
  17. api_logic_server_cli/prototypes/basic_demo/logic/procedural/declarative-vs-procedural-comparison.md +295 -0
  18. api_logic_server_cli/prototypes/manager/.vscode/settings.json +1 -1
  19. api_logic_server_cli/prototypes/manager/{run_sample.sh → samples/docker_samples/run_sample_docker.sh} +4 -4
  20. api_logic_server_cli/prototypes/manager/samples/docker_samples/run_web_genai.sh +5 -0
  21. api_logic_server_cli/prototypes/manager/samples/prompts/add_email.prompt +8 -0
  22. api_logic_server_cli/prototypes/manager/samples/prompts/elections.prompt +3 -0
  23. api_logic_server_cli/prototypes/manager/samples/prompts/emp_dept.prompt +4 -0
  24. api_logic_server_cli/prototypes/manager/samples/prompts/genai_demo.prompt +13 -0
  25. api_logic_server_cli/prototypes/manager/samples/readme_samples.md +25 -11
  26. api_logic_server_cli/prototypes/manager/system/app_model_editor/venv_setup/requirements-no-cli.txt +5 -4
  27. api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-App-Resource-Learning-Prompt.md +1 -1
  28. api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/package.json +1 -0
  29. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/venv_setup/requirements-no-cli.txt +5 -4
  30. api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/install-ApiLogicServer-dev.ps1 +7 -3
  31. api_logic_server_cli/prototypes/ont_app/ontimize_seed/package.json +2 -2
  32. api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/codegen.py +4 -2
  33. api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/main.py +25 -5
  34. api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen_wrapper.py +30 -10
  35. {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/METADATA +6 -5
  36. {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/RECORD +40 -111
  37. api_logic_server_cli/create_from_model/__pycache__/__init__.cpython-312.pyc +0 -0
  38. api_logic_server_cli/create_from_model/__pycache__/api_expose_api_models_creator.cpython-312.pyc +0 -0
  39. api_logic_server_cli/create_from_model/__pycache__/api_logic_server_utils.cpython-312.pyc +0 -0
  40. api_logic_server_cli/create_from_model/__pycache__/create_db_from_model.cpython-312.pyc +0 -0
  41. api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc +0 -0
  42. api_logic_server_cli/create_from_model/__pycache__/meta_model.cpython-312.pyc +0 -0
  43. api_logic_server_cli/create_from_model/__pycache__/model_creation_services.cpython-312.pyc +0 -0
  44. api_logic_server_cli/create_from_model/__pycache__/ont_build.cpython-312.pyc +0 -0
  45. api_logic_server_cli/create_from_model/__pycache__/ont_create.cpython-312.pyc +0 -0
  46. api_logic_server_cli/create_from_model/__pycache__/ui_admin_creator.cpython-312.pyc +0 -0
  47. api_logic_server_cli/create_from_model/__pycache__/uri_info.cpython-312.pyc +0 -0
  48. api_logic_server_cli/prototypes/base/.devcontainer-option/.copilot-instructions.md +0 -178
  49. api_logic_server_cli/prototypes/base/database/alembic/readme.md +0 -18
  50. api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.pyZ +0 -73
  51. api_logic_server_cli/prototypes/basic_demo/customizations/database/system/SAFRSBaseX.py +0 -139
  52. api_logic_server_cli/prototypes/manager/run_web_genai.sh +0 -6
  53. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/__pycache__/api_logic_server_run.cpython-312.pyc +0 -0
  54. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/__pycache__/__init__.cpython-312.pyc +0 -0
  55. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/__pycache__/customize_api.cpython-312.pyc +0 -0
  56. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/__pycache__/expose_api_models.cpython-312.pyc +0 -0
  57. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/__pycache__/json_encoder.cpython-312.pyc +0 -0
  58. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/api_discovery/__pycache__/auto_discovery.cpython-312.pyc +0 -0
  59. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/api_discovery/__pycache__/new_service.cpython-312.pyc +0 -0
  60. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/api_discovery/__pycache__/newer_service.cpython-312.pyc +0 -0
  61. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/api_discovery/__pycache__/ontimize_api.cpython-312.pyc +0 -0
  62. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/api_discovery/__pycache__/system.cpython-312.pyc +0 -0
  63. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/system/__pycache__/api_utils.cpython-312.pyc +0 -0
  64. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/system/__pycache__/custom_endpoint.cpython-312.pyc +0 -0
  65. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/system/__pycache__/expression_parser.cpython-312.pyc +0 -0
  66. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/system/__pycache__/gen_csv_report.cpython-312.pyc +0 -0
  67. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/system/__pycache__/gen_pdf_report.cpython-312.pyc +0 -0
  68. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/system/opt_locking/__pycache__/opt_locking.cpython-312.pyc +0 -0
  69. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/config/__pycache__/__init__.cpython-312.pyc +0 -0
  70. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/config/__pycache__/activate_logicbank.cpython-312.pyc +0 -0
  71. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/config/__pycache__/config.cpython-312.pyc +0 -0
  72. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/config/__pycache__/server_setup.cpython-312.pyc +0 -0
  73. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/__pycache__/__init__.cpython-312.pyc +0 -0
  74. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/__pycache__/bind_dbs.cpython-312.pyc +0 -0
  75. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/__pycache__/customize_models.cpython-312.pyc +0 -0
  76. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/__pycache__/models.cpython-312.pyc +0 -0
  77. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/alembic/__pycache__/env.cpython-312.pyc +0 -0
  78. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/database_discovery/__pycache__/authentication_models.cpython-312.pyc +0 -0
  79. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/database_discovery/__pycache__/auto_discovery.cpython-312.pyc +0 -0
  80. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/db_debug/__pycache__/db_debug.cpython-312.pyc +0 -0
  81. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/system/__pycache__/SAFRSBaseX.cpython-312.pyc +0 -0
  82. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/test_data/__pycache__/alp_init.cpython-312.pyc +0 -0
  83. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/test_data/__pycache__/response2code.cpython-312.pyc +0 -0
  84. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/test_data/__pycache__/test_data_preamble.cpython-312.pyc +0 -0
  85. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/devops/keycloak/unused/__pycache__/auth_provider.cpython-312.pyc +0 -0
  86. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/devops/python-anywhere/__pycache__/python_anywhere_wsgi.cpython-312.pyc +0 -0
  87. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/integration/kafka/__pycache__/kafka_consumer.cpython-312.pyc +0 -0
  88. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/integration/kafka/__pycache__/kafka_producer.cpython-312.pyc +0 -0
  89. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/integration/n8n/__pycache__/n8n_producer.cpython-312.pyc +0 -0
  90. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/integration/system/__pycache__/FlaskKafka.cpython-312.pyc +0 -0
  91. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/integration/system/__pycache__/RowDictMapper.cpython-312.pyc +0 -0
  92. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/logic/__pycache__/declare_logic.cpython-312.pyc +0 -0
  93. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/logic/__pycache__/load_verify_rules.cpython-312.pyc +0 -0
  94. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/logic/logic_discovery/__pycache__/auto_discovery.cpython-312.pyc +0 -0
  95. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/__pycache__/__init__.cpython-312.pyc +0 -0
  96. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/__pycache__/declare_security.cpython-312.pyc +0 -0
  97. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/authentication_provider/__pycache__/__init__.cpython-312.pyc +0 -0
  98. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/authentication_provider/__pycache__/abstract_authentication_provider.cpython-312.pyc +0 -0
  99. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/authentication_provider/keycloak/__pycache__/auth_provider.cpython-312.pyc +0 -0
  100. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/authentication_provider/memory/__pycache__/auth_provider.cpython-312.pyc +0 -0
  101. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/authentication_provider/memory/__pycache__/auth_provider_no_swagger.cpython-312.pyc +0 -0
  102. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/authentication_provider/sql/__pycache__/auth_provider.cpython-312.pyc +0 -0
  103. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/system/__pycache__/authentication.cpython-312.pyc +0 -0
  104. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/system/__pycache__/authorization.cpython-312.pyc +0 -0
  105. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/__pycache__/__init__.cpython-312.pyc +0 -0
  106. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/__pycache__/__init__.cpython-312.pyc +0 -0
  107. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/__pycache__/behave_logic_report.cpython-312.pyc +0 -0
  108. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/__pycache__/behave_run.cpython-312.pyc +0 -0
  109. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/features/steps/__pycache__/about.cpython-312.pyc +0 -0
  110. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/features/steps/__pycache__/test_utils.cpython-312.pyc +0 -0
  111. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/basic/__pycache__/server_test.cpython-312.pyc +0 -0
  112. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/ui/__pycache__/__init__.cpython-312.pyc +0 -0
  113. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/ui/admin/__pycache__/admin_loader.cpython-312.pyc +0 -0
  114. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/venv_setup/__pycache__/py.cpython-312.pyc +0 -0
  115. api_logic_server_cli/sqlacodegen_wrapper/__pycache__/__init__.cpython-312.pyc +0 -0
  116. api_logic_server_cli/sqlacodegen_wrapper/__pycache__/sqlacodegen_wrapper.cpython-312.pyc +0 -0
  117. api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/__pycache__/__init__.cpython-312.pyc +0 -0
  118. api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/__pycache__/__init__.cpython-312.pyc +0 -0
  119. api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/__pycache__/codegen.cpython-312.pyc +0 -0
  120. {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/WHEEL +0 -0
  121. {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/entry_points.txt +0 -0
  122. {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/licenses/LICENSE +0 -0
  123. {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/top_level.txt +0 -0
@@ -6,32 +6,46 @@ The created `samples/nw_sample` illustrates important customization sample code
6
6
 
7
7
  ## Sqlite Sample Databases
8
8
 
9
- The `samples/db` files are symbolic links to pre-installed sqlite databases. These allow you to explore creating projects from existing databases.
9
+ The `samples/db` files are pre-installed sqlite databases. These allow you to explore creating projects from existing databases.
10
10
 
11
- For example, create Northwind like this:
11
+ For example, create Northwind and basic_demo like this:
12
12
 
13
13
  ```bash
14
14
  genai-logic create --project_name=nw --db_url=sqlite:///samples/dbs/nw.sqlite
15
- ```
16
15
 
17
- > Note: If the symbolic links are missing, it is probably due to permission issues, e.g., on windows you must run the Shell with Admin privileges. You can continue using the abbeviations instead of a standard SQLAlchemy database uri.
16
+ genai-logic create --project_name=basic_demo --db_url=sqlite:///samples/dbs/basic_demo
17
+ ```
18
18
 
19
19
  ## Database Connectivity
20
20
 
21
21
  Sample project creation commands:
22
22
 
23
23
  ```bash
24
- genai-logic create
25
- genai-logic create-and-run
26
- genai-logic create --db_url=sqlite:////Users/val/dev/todo_example/todos.db --project_name=todo
24
+ # local sqlite
27
25
  genai-logic create --db_url=sqlite:///c:\genai-logic\nw.sqlite --project_name=nw
28
- genai-logic create --db_url=sqlite:///ai.sqlite --project_name=ai --open_with=code
29
- genai-logic create --db_url=mysql+pymysql://root:p@mysql-container:3306/classicmodels --project_name=/localhost/docker_db_project
30
- genai-logic create --db_url='mssql+pyodbc://sa:Posey3861@localhost:1433/NORTHWND?driver=ODBC+Driver+18+for+SQL+Server&trusted_connection=no&Encrypt=no'
26
+ genai-logic create --db_url=sqlite:///samples/dbs/todos.sqlite --project_name=todo
27
+ genai-logic create --db_url=sqlite:////Users/val/dev/ApiLogicServer/ApiLogicServer-dev/clean/ApiLogicServer/samples/dbs/todos.sqlite --project_name=todo
28
+
29
+ # from localhost to mysql container
30
+ genai-logic create --db_url=mysql+pymysql://root:p@localhost:3306/classicmodels --project_name=docker_classicmodels
31
+ genai-logic create --db_url=mysql+pymysql://root:p@localhost:3306/Chinook --project_name=docker_chinook
32
+
33
+ # from container to mysql container replace localhost with....
34
+ genai-logic create --db_url=mysql+pymysql://root:p@mysql-container:3306/Chinook --project_name=/localhost/docker_chinook
35
+
36
+ # microsoft sql server (setup: https://apilogicserver.github.io/Docs/Install-pyodbc/)
37
+ genai-logic create --db_url='mssql+pyodbc://sa:Posey3861@localhost:1433/NORTHWND?driver=ODBC+Driver+18+for+SQL+Server&trusted_connection=no&Encrypt=no' --project-name=NORTHWND
38
+
39
+ # oracle
31
40
  genai-logic create --project_name=oracle_hr --db_url='oracle+oracledb://hr:tiger@localhost:1521/?service_name=ORCL'
41
+
42
+ # postgres
43
+ genai-logic create --db_url=postgresql://postgres:p@localhost/northwind --project-name=nw-postgres
32
44
  genai-logic create --db_url=postgresql://postgres:p@10.0.0.234/postgres
33
45
  genai-logic create --project_name=my_schema --db_url=postgresql://postgres:p@localhost/my_schema
34
- genai-logic create --db_url=postgresql+psycopg2://postgres:password@localhost:5432/postgres?options=-csearch_path%3Dmy_db_schema
46
+ genai-logic create --db_url=postgresql://postgres:password@localhost:5432/postgres?options=-csearch_path%3Dmy_db_schema
47
+
48
+ # pythonanywhere
35
49
  genai-logic create --project_name=Chinook \
36
50
  --host=ApiLogicServer.pythonanywhere.com --port= \
37
51
  --db_url=mysql+pymysql://ApiLogicServer:@ApiLogicServer.mysql.pythonanywhere-services.com/ApiLogicServer\$Chinook
@@ -1,9 +1,9 @@
1
1
  PyJWT==2.6.0
2
2
  python-dateutil==2.8.2
3
3
  six==1.16.0
4
- SQLAlchemy==1.4.29
5
- Flask-SQLAlchemy==2.5.1
6
- SQLAlchemy-Utils==0.38.2
4
+ SQLAlchemy>=2.0.0
5
+ Flask-SQLAlchemy>=3.0.0
6
+ SQLAlchemy-Utils>=0.38.2
7
7
  Werkzeug==2.2.3
8
8
  logicbankutils==0.6.0
9
9
  inflect==5.0.2
@@ -25,7 +25,8 @@ PyMySQL==1.0.2
25
25
  cryptography==36.0.1
26
26
  requests==2.27.1
27
27
  gunicorn==20.1.0
28
- psycopg2-binary==2.9.5
28
+ psycopg2-binary>=2.9.5; python_version < '3.13'
29
+ psycopg[binary]>=3.1.0; python_version >= '3.13'
29
30
  DotMap==1.3.25
30
31
  WTForms==2.3.3
31
32
  behave==1.2.6
@@ -10,7 +10,7 @@ Sample code (follow these guidelines EXACTLY):
10
10
  ```
11
11
  <sample-code>
12
12
  // begin MANDATORY imports (always generated EXACTLY)
13
- import React from 'react';
13
+ import React, { useState } from 'react';
14
14
  import { List, FunctionField, Datagrid, TextField, EmailField, DateField, NumberField } from 'react-admin';
15
15
  import { ReferenceField, ReferenceManyField } from 'react-admin';
16
16
  import { TabbedShowLayout, Tab, SimpleShowLayout, TextInput, NumberInput, DateTimeInput } from 'react-admin';
@@ -11,6 +11,7 @@
11
11
  "@testing-library/react": "^16.3.0",
12
12
  "@testing-library/user-event": "^13.5.0",
13
13
  "compare-versions": "^6.1.1",
14
+ "js-yaml": "^4.1.0",
14
15
  "keycloak-js": "^26.2.0",
15
16
  "react": "^19.1.0",
16
17
  "react-admin": "^5.8.3",
@@ -1,9 +1,9 @@
1
1
  PyJWT==2.6.0
2
2
  python-dateutil==2.8.2
3
3
  six==1.16.0
4
- SQLAlchemy==1.4.29
5
- Flask-SQLAlchemy==2.5.1
6
- SQLAlchemy-Utils==0.38.2
4
+ SQLAlchemy>=2.0.0
5
+ Flask-SQLAlchemy>=3.0.0
6
+ SQLAlchemy-Utils>=0.38.2
7
7
  Werkzeug==2.2.3
8
8
  logicbankutils==0.6.0
9
9
  inflect==5.0.2
@@ -25,7 +25,8 @@ PyMySQL==1.0.2
25
25
  cryptography==36.0.1
26
26
  requests==2.27.1
27
27
  gunicorn==20.1.0
28
- psycopg2-binary==2.9.5
28
+ psycopg2-binary>=2.9.5; python_version < '3.13'
29
+ psycopg[binary]>=3.1.0; python_version >= '3.13'
29
30
  DotMap==1.3.25
30
31
  WTForms==2.3.3
31
32
  behave==1.2.6
@@ -4,7 +4,10 @@ param(
4
4
  [String]$IDE
5
5
  )
6
6
 
7
- SRA="venv/lib/python3.12/site-packages/api_logic_server_cli/create_from_model/safrs-react-admin-npm-build"
7
+ # $SRA="venv/lib/python3.12/site-packages/api_logic_server_cli/create_from_model/safrs-react-admin-npm-build"
8
+
9
+ $venvPath = "venv\Lib\site-packages"
10
+ $SRA = Join-Path $venvPath "api_logic_server_cli\create_from_model\safrs-react-admin-npm-build"
8
11
 
9
12
  if (Test-Path -Path $SRA) {
10
13
  Write-Output " "
@@ -12,7 +15,7 @@ if (Test-Path -Path $SRA) {
12
15
  Write-Output " "
13
16
  } else {
14
17
  Write-Output " "
15
- Write-Output "Safrs React Admin (SRA) not found - please fix line above"
18
+ Write-Output "Safrs React Admin (SRA) not found - please fix line above for $SRA"
16
19
  Write-Output " "
17
20
  Exit 1
18
21
  }
@@ -28,8 +31,9 @@ if($IDE -eq "") {
28
31
  Write-Output " "
29
32
  Write-Output " IMPORTANT - create a folder, then install:"
30
33
  Write-Output " > mkdir ApiLogicServer"
34
+ Write-Output " > pip install ApiLogicServer"
31
35
  Write-Output " "
32
- Write-Output " > .\Install-ApiLogicServer-Dev [ vscode | charm | x ]"
36
+ Write-Output " > .\system\install-ApiLogicServer-dev\install-ApiLogicServer-dev.ps1 vscode"
33
37
  Write-Output " "
34
38
  Exit
35
39
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ontimize-app",
3
- "version": "15.6.0-NEXT-2",
3
+ "version": "15.6.0-NEXT-7",
4
4
  "scripts": {
5
5
  "ng": "ng",
6
6
  "start": "ng serve --port 4299",
@@ -30,7 +30,7 @@
30
30
  "@angular/router": "^15.2.10",
31
31
  "@angular/service-worker": "^15.2.10",
32
32
  "@angular/upgrade": "^15.2.10",
33
- "ontimize-web-ngx": "15.6.0-next.4",
33
+ "ontimize-web-ngx": "15.6.0-next.7",
34
34
  "ontimize-web-ngx-charts": "15.2.0-next.3",
35
35
  "ontimize-web-ngx-filemanager": "^15.1.0-next.0",
36
36
  "ontimize-web-ngx-map": "15.0.0",
@@ -8,6 +8,7 @@ from collections import defaultdict
8
8
  from importlib import import_module
9
9
  from inspect import FullArgSpec # val-311
10
10
  from keyword import iskeyword
11
+ from typing import TYPE_CHECKING
11
12
 
12
13
  import sqlalchemy
13
14
  import sqlalchemy.exc
@@ -22,7 +23,8 @@ import yaml
22
23
  import datetime
23
24
 
24
25
  # The generic ARRAY type was introduced in SQLAlchemy 1.1
25
- from api_logic_server_cli.create_from_model.model_creation_services import ModelCreationServices
26
+ if TYPE_CHECKING:
27
+ from api_logic_server_cli.create_from_model.model_creation_services import ModelCreationServices
26
28
  from api_logic_server_cli.create_from_model.meta_model import Resource, ResourceRelationship, ResourceAttribute
27
29
 
28
30
  log = logging.getLogger(__name__)
@@ -818,7 +820,7 @@ class CodeGenerator(object):
818
820
  """ not used by API Logic Server """
819
821
  self.noinflect = noinflect
820
822
  self.noclasses = noclasses
821
- self.model_creation_services = model_creation_services # type: ModelCreationServices
823
+ self.model_creation_services = model_creation_services # type: "ModelCreationServices"
822
824
  self.generate_relationships_on = "parent" # "child"
823
825
  """ FORMERLY, relns were genned ONLY on parent (== 'parent') """
824
826
  self.indentation = indentation
@@ -4,11 +4,23 @@ import argparse
4
4
  import io
5
5
  import sys
6
6
 
7
- import pkg_resources
7
+ try:
8
+ from importlib import metadata
9
+ except ImportError:
10
+ # Python < 3.8
11
+ import pkg_resources as metadata_fallback
12
+
13
+ class MetadataWrapper:
14
+ @staticmethod
15
+ def version(name):
16
+ return metadata_fallback.get_distribution(name).version
17
+
18
+ metadata = MetadataWrapper()
19
+
8
20
  from sqlalchemy.engine import create_engine
9
21
  from sqlalchemy.schema import MetaData
10
22
 
11
- from sqlacodegen_wrapper.sqlacodegen_wrapper import CodeGenerator
23
+ from .codegen import CodeGenerator
12
24
 
13
25
 
14
26
  def main(calling_args=None):
@@ -30,8 +42,11 @@ def main(calling_args=None):
30
42
  args = parser.parse_args()
31
43
 
32
44
  if args.version:
33
- version = pkg_resources.get_distribution('sqlacodegen').parsed_version
34
- print(version.public)
45
+ try:
46
+ version = metadata.version('sqlacodegen')
47
+ print(version)
48
+ except Exception:
49
+ print("sqlacodegen version unknown")
35
50
  return
36
51
  if not args.url:
37
52
  print('You must supply a url\n', file=sys.stderr)
@@ -39,7 +54,12 @@ def main(calling_args=None):
39
54
  return
40
55
 
41
56
  # Use reflection to fill in the metadata
42
- engine = create_engine(args.url)
57
+ # For Python 3.13+, force PostgreSQL URLs to use psycopg3 dialect
58
+ engine_url = args.url
59
+ if sys.version_info >= (3, 13) and engine_url.startswith('postgresql://'):
60
+ engine_url = engine_url.replace('postgresql://', 'postgresql+psycopg://', 1)
61
+
62
+ engine = create_engine(engine_url)
43
63
  try:
44
64
  # dirty hack for sqlite TODO review ApiLogicServer
45
65
  engine.execute("""PRAGMA journal_mode = OFF""")
@@ -29,6 +29,11 @@ The ctor then calls `create_resource_list`, to create the `resource_list`
29
29
 
30
30
  import sys, logging, inspect, builtins, os, argparse, tempfile, atexit, shutil, io
31
31
  import traceback
32
+ try:
33
+ from importlib.metadata import version as get_version
34
+ except ImportError:
35
+ # Python < 3.8 fallback
36
+ from importlib_metadata import version as get_version
32
37
 
33
38
  import safrs
34
39
  from sqlalchemy import CHAR, Column, DateTime, Float, ForeignKey, Index, Integer, String, TIMESTAMP, Table, Text, UniqueConstraint, text
@@ -44,17 +49,23 @@ from io import StringIO
44
49
  from sqlalchemy.engine import create_engine
45
50
  from sqlalchemy.schema import MetaData
46
51
  from flask_cors import CORS
47
- from sqlacodegen_wrapper.sqlacodegen.sqlacodegen.codegen import CodeGenerator
48
- from api_logic_server_cli.create_from_model.model_creation_services import ModelCreationServices
52
+ from .sqlacodegen.sqlacodegen.codegen import CodeGenerator
53
+ from .sqlacodegen.sqlacodegen.main import main as codegen
54
+ from typing import TYPE_CHECKING
55
+ if TYPE_CHECKING:
56
+ from api_logic_server_cli.create_from_model.model_creation_services import ModelCreationServices
49
57
  from pathlib import Path
50
58
  from shutil import copyfile
51
59
  import os, sys
52
60
  from pathlib import Path
53
61
  from os.path import abspath
54
62
  from api_logic_server_cli.cli_args_project import Project
55
- import oracledb
56
-
57
63
  log = logging.getLogger(__name__)
64
+ try:
65
+ import oracledb
66
+ except ImportError:
67
+ log.error("oracledb dll not found, Oracle support disabled")
68
+ oracledb = None
58
69
 
59
70
  MODEL_DIR = tempfile.mkdtemp() # directory where the generated models.py will be saved
60
71
  on_import = False
@@ -91,8 +102,11 @@ def get_args():
91
102
  args = parser.parse_args()
92
103
 
93
104
  if args.version:
94
- version = pkg_resources.get_distribution("sqlacodegen").parsed_version # noqa: F821
95
- log.debug(version.public)
105
+ try:
106
+ version_str = get_version("sqlacodegen")
107
+ log.debug(version_str)
108
+ except Exception:
109
+ log.debug("sqlacodegen version not found")
96
110
  exit()
97
111
  if not args.url:
98
112
  log.debug("You must supply a url\n", file=sys.stderr)
@@ -133,7 +147,7 @@ uri_info = """Examples:
133
147
  ApiLogicServer create-and-run --db_url=mssql+pyodbc://sa:Posey3861@localhost:1433/NORTHWND?driver=ODBC+Driver+17+for+SQL+Server&trusted_connection=no
134
148
  ApiLogicServer create-and-run --db_url=postgresql://postgres:p@10.0.0.234/postgres
135
149
  ApiLogicServer create --project_name=my_schema --db_url=postgresql://postgres:p@localhost/my_schema
136
- ApiLogicServer create --db_url=postgresql+psycopg2://postgres:password@localhost:5432/postgres?options=-csearch_path%3Dmy_db_schema
150
+ ApiLogicServer create --db_url=postgresql://postgres:password@localhost:5432/postgres?options=-csearch_path%3Dmy_db_schema
137
151
  ApiLogicServer create --project_name=Chinook \
138
152
  --host=ApiLogicServer.pythonanywhere.com --port= \
139
153
  --db_url=mysql+pymysql://ApiLogicServer:***@ApiLogicServer.mysql.pythonanywhere-services.com/ApiLogicServer$Chinook
@@ -199,7 +213,13 @@ def create_models_memstring(args) -> str:
199
213
 
200
214
  if os.getenv('APILOGICSERVER_ORACLE_THICK'):
201
215
  oracledb.init_oracle_client(lib_dir=os.getenv('APILOGICSERVER_ORACLE_THICK'))
202
- engine = create_engine(args.url) # type _engine.Engine
216
+
217
+ # For Python 3.13+, force PostgreSQL URLs to use psycopg3 dialect
218
+ engine_url = args.url
219
+ if sys.version_info >= (3, 13) and engine_url.startswith('postgresql://'):
220
+ engine_url = engine_url.replace('postgresql://', 'postgresql+psycopg://', 1)
221
+
222
+ engine = create_engine(engine_url) # type _engine.Engine
203
223
 
204
224
  metadata = MetaData()
205
225
  if os.getenv('APILOGICSERVER_ORACLE_THICK'):
@@ -292,7 +312,7 @@ if on_import:
292
312
  models_f.write(models)
293
313
  # atexit.register(lambda : shutil.rmtree(MODEL_DIR))
294
314
 
295
- import models
315
+ import models # type: ignore # dynamically created module
296
316
 
297
317
 
298
318
  def start_api(HOST="0.0.0.0", PORT=5000):
@@ -338,7 +358,7 @@ if __name__ == "__main__":
338
358
 
339
359
 
340
360
 
341
- def create_models_py(model_creation_services: ModelCreationServices, abs_db_url: str, project_directory: str):
361
+ def create_models_py(model_creation_services: "ModelCreationServices", abs_db_url: str, project_directory: str):
342
362
  """
343
363
  Create `models.py` (using sqlacodegen, via this wrapper at create_models_py() ).
344
364
 
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ApiLogicServer
3
- Version: 15.0.47
3
+ Version: 15.0.54
4
4
  Author-email: Val Huber <apilogicserver@gmail.com>
5
- License: BSD-3-Clause
5
+ License-Expression: BSD-3-Clause
6
6
  Project-URL: Homepage, https://www.genai-logic.com
7
7
  Project-URL: Docs, https://apilogicserver.github.io/Docs/Doc-Home/
8
8
  Project-URL: Source, https://github.com/ApiLogicServer/ApiLogicServer-src
@@ -11,8 +11,8 @@ Keywords: Flask,SQLAlchemy,Rules,WebApp,Microservice,ReactAdmin,Angular
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Environment :: Web Environment
13
13
  Classifier: Intended Audience :: Developers
14
- Classifier: License :: OSI Approved :: BSD License
15
14
  Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3.13
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.10
@@ -39,7 +39,7 @@ Requires-Dist: itsdangerous==2.1.2
39
39
  Requires-Dist: Jinja2==3.1.5
40
40
  Requires-Dist: MarkupSafe==2.1.3
41
41
  Requires-Dist: six==1.16.0
42
- Requires-Dist: SQLAlchemy==2.0.15
42
+ Requires-Dist: SQLAlchemy>=2.0.39
43
43
  Requires-Dist: Werkzeug==2.3.3
44
44
  Requires-Dist: safrs>=3.1.7
45
45
  Requires-Dist: Flask-Admin==1.5.7
@@ -55,7 +55,8 @@ Requires-Dist: PyMySQL==1.0.3
55
55
  Requires-Dist: oracledb==2.1.2
56
56
  Requires-Dist: requests==2.31.0
57
57
  Requires-Dist: gunicorn==20.1.0
58
- Requires-Dist: psycopg2-binary==2.9.9
58
+ Requires-Dist: psycopg2-binary>=2.9.5; python_version < "3.13"
59
+ Requires-Dist: psycopg[binary]>=3.1.0; python_version >= "3.13"
59
60
  Requires-Dist: dotmap==1.3.25
60
61
  Requires-Dist: WTForms==2.3.3
61
62
  Requires-Dist: behave==1.2.6