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.
- api_logic_server_cli/api_logic_server.py +18 -5
- api_logic_server_cli/api_logic_server_info.yaml +3 -3
- api_logic_server_cli/cli.py +20 -16
- api_logic_server_cli/create_from_model/api_logic_server_utils.py +10 -1
- api_logic_server_cli/manager.py +24 -13
- api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md +39 -3
- api_logic_server_cli/prototypes/base/config/config.py +15 -0
- api_logic_server_cli/prototypes/base/database/alembic/alembic_run.py +98 -0
- api_logic_server_cli/prototypes/base/database/alembic/readme_alembic.md +36 -0
- api_logic_server_cli/prototypes/base/docs/training/admin_app_1_context.prompt.md +40 -0
- api_logic_server_cli/prototypes/base/integration/mcp/mcp_client_executor.py +2 -2
- api_logic_server_cli/prototypes/base/venv_setup/requirements-no-cli.txt +5 -4
- api_logic_server_cli/prototypes/basic_demo/_config.yml +8 -0
- api_logic_server_cli/prototypes/basic_demo/_layouts/redirect.html +15 -0
- api_logic_server_cli/prototypes/basic_demo/docs/system-creation-vibe.md +161 -0
- api_logic_server_cli/prototypes/basic_demo/logic/declarative-vs-procedural-comparison.html +110 -0
- api_logic_server_cli/prototypes/basic_demo/logic/procedural/declarative-vs-procedural-comparison.md +295 -0
- api_logic_server_cli/prototypes/manager/.vscode/settings.json +1 -1
- api_logic_server_cli/prototypes/manager/{run_sample.sh → samples/docker_samples/run_sample_docker.sh} +4 -4
- api_logic_server_cli/prototypes/manager/samples/docker_samples/run_web_genai.sh +5 -0
- api_logic_server_cli/prototypes/manager/samples/prompts/add_email.prompt +8 -0
- api_logic_server_cli/prototypes/manager/samples/prompts/elections.prompt +3 -0
- api_logic_server_cli/prototypes/manager/samples/prompts/emp_dept.prompt +4 -0
- api_logic_server_cli/prototypes/manager/samples/prompts/genai_demo.prompt +13 -0
- api_logic_server_cli/prototypes/manager/samples/readme_samples.md +25 -11
- api_logic_server_cli/prototypes/manager/system/app_model_editor/venv_setup/requirements-no-cli.txt +5 -4
- api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-App-Resource-Learning-Prompt.md +1 -1
- api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/package.json +1 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/venv_setup/requirements-no-cli.txt +5 -4
- api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/install-ApiLogicServer-dev.ps1 +7 -3
- api_logic_server_cli/prototypes/ont_app/ontimize_seed/package.json +2 -2
- api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/codegen.py +4 -2
- api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/main.py +25 -5
- api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen_wrapper.py +30 -10
- {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/METADATA +6 -5
- {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/RECORD +40 -111
- api_logic_server_cli/create_from_model/__pycache__/__init__.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/api_expose_api_models_creator.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/api_logic_server_utils.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/create_db_from_model.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/meta_model.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/model_creation_services.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/ont_build.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/ont_create.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/ui_admin_creator.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/uri_info.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/base/.devcontainer-option/.copilot-instructions.md +0 -178
- api_logic_server_cli/prototypes/base/database/alembic/readme.md +0 -18
- api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.pyZ +0 -73
- api_logic_server_cli/prototypes/basic_demo/customizations/database/system/SAFRSBaseX.py +0 -139
- api_logic_server_cli/prototypes/manager/run_web_genai.sh +0 -6
- 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
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/__pycache__/__init__.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/__pycache__/customize_api.cpython-312.pyc +0 -0
- 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
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/api/__pycache__/json_encoder.cpython-312.pyc +0 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/config/__pycache__/__init__.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/config/__pycache__/activate_logicbank.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/config/__pycache__/config.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/config/__pycache__/server_setup.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/__pycache__/__init__.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/__pycache__/bind_dbs.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/__pycache__/customize_models.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/__pycache__/models.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/alembic/__pycache__/env.cpython-312.pyc +0 -0
- 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
- 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
- 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
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/database/system/__pycache__/SAFRSBaseX.cpython-312.pyc +0 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/integration/system/__pycache__/FlaskKafka.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/integration/system/__pycache__/RowDictMapper.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/logic/__pycache__/declare_logic.cpython-312.pyc +0 -0
- 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
- 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
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/__pycache__/__init__.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/__pycache__/declare_security.cpython-312.pyc +0 -0
- 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
- 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
- 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
- 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
- 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
- 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
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/system/__pycache__/authentication.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/system/__pycache__/authorization.cpython-312.pyc +0 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/__pycache__/__init__.cpython-312.pyc +0 -0
- 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
- 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
- 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
- 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
- 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
- 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
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/ui/__pycache__/__init__.cpython-312.pyc +0 -0
- 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
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/venv_setup/__pycache__/py.cpython-312.pyc +0 -0
- api_logic_server_cli/sqlacodegen_wrapper/__pycache__/__init__.cpython-312.pyc +0 -0
- api_logic_server_cli/sqlacodegen_wrapper/__pycache__/sqlacodegen_wrapper.cpython-312.pyc +0 -0
- api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/__pycache__/__init__.cpython-312.pyc +0 -0
- api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/__pycache__/__init__.cpython-312.pyc +0 -0
- api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/__pycache__/codegen.cpython-312.pyc +0 -0
- {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/WHEEL +0 -0
- {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/entry_points.txt +0 -0
- {apilogicserver-15.0.47.dist-info → apilogicserver-15.0.54.dist-info}/licenses/LICENSE +0 -0
- {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
|
|
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
|
-
|
|
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
|
-
|
|
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:///
|
|
29
|
-
genai-logic create --db_url=
|
|
30
|
-
|
|
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
|
|
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
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/venv_setup/requirements-no-cli.txt
CHANGED
|
@@ -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
|
|
5
|
-
Flask-SQLAlchemy
|
|
6
|
-
SQLAlchemy-Utils
|
|
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
|
|
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';
|
|
@@ -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
|
|
5
|
-
Flask-SQLAlchemy
|
|
6
|
-
SQLAlchemy-Utils
|
|
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
|
|
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 " > .\
|
|
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-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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
|
|
48
|
-
from
|
|
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
|
-
|
|
95
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
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
|