ApiLogicServer 15.0.32__py3-none-any.whl → 15.0.35__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 +6 -4
- api_logic_server_cli/api_logic_server_info.yaml +3 -3
- api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc +0 -0
- api_logic_server_cli/create_from_model/__pycache__/ont_create.cpython-312.pyc +0 -0
- api_logic_server_cli/fragments/docker-compose.yml +1 -0
- api_logic_server_cli/manager.py +8 -5
- api_logic_server_cli/prototypes/manager/README.md +106 -92
- api_logic_server_cli/prototypes/manager/samples/dbs/readme_samples.md +9 -1
- api_logic_server_cli/prototypes/manager/samples/readme_samples.md +1 -1
- api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/README.md +4 -5
- api_logic_server_cli/prototypes/manager/system/readme_ssystem.md +2 -0
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/README.md +9 -3
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Customer.js +145 -24
- {apilogicserver-15.0.32.dist-info → apilogicserver-15.0.35.dist-info}/METADATA +1 -1
- {apilogicserver-15.0.32.dist-info → apilogicserver-15.0.35.dist-info}/RECORD +19 -18
- {apilogicserver-15.0.32.dist-info → apilogicserver-15.0.35.dist-info}/WHEEL +0 -0
- {apilogicserver-15.0.32.dist-info → apilogicserver-15.0.35.dist-info}/entry_points.txt +0 -0
- {apilogicserver-15.0.32.dist-info → apilogicserver-15.0.35.dist-info}/licenses/LICENSE +0 -0
- {apilogicserver-15.0.32.dist-info → apilogicserver-15.0.35.dist-info}/top_level.txt +0 -0
|
@@ -12,10 +12,11 @@ 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__ = "15.00.
|
|
15
|
+
__version__ = "15.00.35" # last public release: 15.00.25 (15.00.12)
|
|
16
16
|
recent_changes = \
|
|
17
17
|
f'\n\nRecent Changes:\n' +\
|
|
18
|
-
"\
|
|
18
|
+
"\t07/01/2024 - 15.00.35: minor bug in mgr symlink creation, nw cards \n"\
|
|
19
|
+
"\t06/30/2024 - 15.00.33: Tech Preview: genai-logic genai-add-app --vibe, bug [96, 97] \n"\
|
|
19
20
|
"\t06/10/2024 - 15.00.12: MCP Security, win fixes for readme, graphics quotes \n"\
|
|
20
21
|
"\t06/08/2024 - 15.00.10: MCP, optional shortening of stacktrace lines, bugfix[92] \n"\
|
|
21
22
|
"\t05/16/2024 - 14.05.00: safrs 3.1.7, running mcp preview \n"\
|
|
@@ -100,6 +101,7 @@ if debug_value is not None:
|
|
|
100
101
|
logging.getLogger('sqlacodegen_wrapper.sqlacodegen.sqlacodegen.codegen').setLevel(logging.DEBUG)
|
|
101
102
|
logging.getLogger('api_logic_server_cli.sqlacodegen_wrapper.sqlacodegen_wrapper').setLevel(logging.DEBUG)
|
|
102
103
|
logging.getLogger('create_from_model.model_creation_services').setLevel(logging.DEBUG)
|
|
104
|
+
logging.getLogger('api_logic_server_cli.manager').setLevel(logging.DEBUG)
|
|
103
105
|
|
|
104
106
|
|
|
105
107
|
# log.debug("Patch to enable import of outer directories")
|
|
@@ -779,7 +781,7 @@ def fix_build_docker_image(msg, project: Project):
|
|
|
779
781
|
|
|
780
782
|
def start_open_with(project: Project):
|
|
781
783
|
""" Creation complete. Opening {open_with} at {project_name} """
|
|
782
|
-
log.info(f'\
|
|
784
|
+
log.info(f'\n✅ Creation complete - Opening {project.open_with} at {project.project_name}')
|
|
783
785
|
log.debug(".. See the readme for install / run instructions")
|
|
784
786
|
if project.is_docker:
|
|
785
787
|
log.info("... docker unable to start IDE - please run manager on local host")
|
|
@@ -1684,7 +1686,7 @@ from database import <project.bind_key>_models
|
|
|
1684
1686
|
log.info(f' exit # exit the Docker container ')
|
|
1685
1687
|
log.info(f' code {docker_project_name} # e.g., open VSCode on created project\n')
|
|
1686
1688
|
else:
|
|
1687
|
-
log.info(f'\
|
|
1689
|
+
log.info(f'\n✅ Project created at: {str(self.project_directory_path)}\n')
|
|
1688
1690
|
|
|
1689
1691
|
# log.info(f' $ ApiLogicServer run # Run created API and Admin App, or\n')
|
|
1690
1692
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
last_created_date: June
|
|
2
|
-
last_created_project_name: /
|
|
3
|
-
last_created_version: 15.00.
|
|
1
|
+
last_created_date: June 30, 2025 16:42:30
|
|
2
|
+
last_created_project_name: samples/nw_sample_nocust
|
|
3
|
+
last_created_version: 15.00.34
|
|
Binary file
|
|
Binary file
|
api_logic_server_cli/manager.py
CHANGED
|
@@ -46,15 +46,18 @@ def create_manager(clean: bool, open_with: str, api_logic_server_path: Path,
|
|
|
46
46
|
|
|
47
47
|
Side Effects:
|
|
48
48
|
Creates a symbolic link from 'cli_path/database/basic_demo.sqlite' to 'mgr_path/samples/dbs/basic_demo'.
|
|
49
|
-
Prints a confirmation message upon successful creation.
|
|
50
49
|
|
|
51
|
-
Raises:
|
|
52
|
-
OSError: If the symbolic link cannot be created (e.g., due to permissions or existing link).
|
|
53
50
|
"""
|
|
54
51
|
|
|
55
52
|
# create symbolic link - thanks https://www.geeksforgeeks.org/python/python-os-symlink-method/
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
try:
|
|
54
|
+
os.symlink(cli_path.parent / 'database/basic_demo.sqlite', mgr_path / 'samples/dbs/basic_demo.sqlite')
|
|
55
|
+
os.symlink(cli_path.parent / 'database/nw-gold.sqlite', mgr_path / 'samples/dbs/nw.sqlite')
|
|
56
|
+
os.symlink(cli_path.parent / 'database/Chinook_Sqlite.sqlite', mgr_path / 'samples/dbs/chinook.sqlite')
|
|
57
|
+
os.symlink(cli_path.parent / 'database/classicmodels.sqlite', mgr_path / 'samples/dbs/classicmodels.sqlite')
|
|
58
|
+
log.debug("✅ Manager Creation - SymLink created: samples/dbs/")
|
|
59
|
+
except Exception as e:
|
|
60
|
+
log.debug(f"❌ Manager Creation - SymLink creation failed: {str(e)}")
|
|
58
61
|
|
|
59
62
|
|
|
60
63
|
log = logging.getLogger(__name__)
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Welcome
|
|
3
3
|
Description: Instant mcp-enabled microservices, standard projects, declarative business logic
|
|
4
|
-
Source: docs//Sample-Basic-Tour
|
|
5
|
-
version info: 15.01.
|
|
4
|
+
Source: docs//Sample-Basic-Tour.md
|
|
5
|
+
version info: 15.01.35 (07/01/2025) installed version
|
|
6
6
|
Used: Manager Readme
|
|
7
|
-
Instructions: Copy in Sample-Basic-Demo (Replace "
|
|
7
|
+
Instructions: Copy in Sample-Basic-Demo (Replace "This illustrates" up to "Explore GenAI CLI")
|
|
8
8
|
---
|
|
9
9
|
<style>
|
|
10
|
-
-typeset h1,
|
|
11
|
-
-content__button {
|
|
10
|
+
.md-typeset h1,
|
|
11
|
+
.md-content__button {
|
|
12
12
|
display: none;
|
|
13
13
|
}
|
|
14
14
|
</style>
|
|
@@ -19,7 +19,7 @@ Instructions: Copy in Sample-Basic-Demo (Replace "We'll illustrate" up to "Explo
|
|
|
19
19
|
|
|
20
20
|
2. ***Customize*** with **Declarative Rules** and Python in your IDE, standard container deployment
|
|
21
21
|
|
|
22
|
-
You are in the [API Logic Server Manager](
|
|
22
|
+
You are in the [API Logic Server Manager](Manager.md). This is a good place to manage projects, create notes and resources, etc.
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
|
|
@@ -27,7 +27,7 @@ You are in the [API Logic Server Manager](https://apilogicserver.github.io/Docs/
|
|
|
27
27
|
|
|
28
28
|
**Evaluation Guide:** click on the disclosure buttons, below.
|
|
29
29
|
|
|
30
|
-
This illustrates basic [GenAI-Logic](https://www.genai-logic.com/product/key-features) operation:
|
|
30
|
+
This illustrates basic [GenAI-Logic](https://www.genai-logic.com/product/key-features){:target="_blank" rel="noopener"} operation:
|
|
31
31
|
|
|
32
32
|
1. Creating projects from new or existing databases, providing a MCP-enabled API and an Admin App
|
|
33
33
|
2. Adding declarative logic and security, and
|
|
@@ -36,12 +36,16 @@ This illustrates basic [GenAI-Logic](https://www.genai-logic.com/product/key-fea
|
|
|
36
36
|
|
|
37
37
|
The entire process takes 20 minutes; usage notes:
|
|
38
38
|
|
|
39
|
-
* Important: look for **readme files** in created projects
|
|
40
|
-
* You may find it more convenient to view this [in your Browser](
|
|
39
|
+
* Important: look for **readme files** in created projects
|
|
40
|
+
* You may find it more convenient to view this [in your Browser](Sample-Basic-Tour.md)
|
|
41
|
+
* A slide show summary is available [on our Web Site](https://www.genai-logic.com/product/tour){:target="_blank" rel="noopener"}
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+
|
|
41
45
|
|
|
42
46
|
|
|
43
47
|
|
|
44
|
-
## 1.
|
|
48
|
+
## 1. Create and Run
|
|
45
49
|
|
|
46
50
|
API Logic Server can create projects from existing databases, or use GenAI to create projects with new databases. Let's see how.
|
|
47
51
|
|
|
@@ -51,17 +55,17 @@ API Logic Server can create projects from existing databases, or use GenAI to cr
|
|
|
51
55
|
Create the project - use the CLI (**Terminal > New Terminal**), :
|
|
52
56
|
|
|
53
57
|
```bash
|
|
54
|
-
$
|
|
58
|
+
$ genai-logic create --project_name=basic_demo --db_url=basic_demo
|
|
55
59
|
```
|
|
56
60
|
|
|
57
|
-
> Note: the `db_url` value is [an abbreviation](https://apilogicserver.github.io/Docs/Data-Model-Examples/) for a test database provided as part of the installation. You would normally supply a SQLAlchemy URI to your existing database.
|
|
61
|
+
> Note: the `db_url` value is [an abbreviation](https://apilogicserver.github.io/Docs/Data-Model-Examples/){:target="_blank" rel="noopener"} for a test database provided as part of the installation. You would normally supply a SQLAlchemy URI to your existing database, e.g. <br>`genai-logic create --project_name=basic_demo --db_url=sqlite:///samples/dbs/basic_demo.sqlite`.
|
|
58
62
|
|
|
59
63
|
|
|
60
64
|
<details markdown>
|
|
61
65
|
|
|
62
66
|
<summary> The database is Customer, Orders, Items and Product</summary>
|
|
63
67
|
|
|
64
|
-

|
|
65
69
|
|
|
66
70
|
</details>
|
|
67
71
|
<br>
|
|
@@ -71,41 +75,38 @@ $ ApiLogicServer create --project_name=basic_demo --db_url=basic_demo
|
|
|
71
75
|
|
|
72
76
|
You can create a project *and a new database* from a prompt using GenAI, either by:
|
|
73
77
|
|
|
74
|
-
* [WebGenAI - in the Browser, via pubic website](
|
|
75
|
-
* [GenAI - in the Browser, via docker](
|
|
76
|
-
* [GenAI CLI](
|
|
78
|
+
* [WebGenAI - in the Browser, via pubic website](WebGenAI.md){:target="_blank" rel="noopener"}, or
|
|
79
|
+
* [GenAI - in the Browser, via docker](WebGenAI-install.md){:target="_blank" rel="noopener"}, or
|
|
80
|
+
* [GenAI CLI](WebGenAI-CLI.md){:target="_blank" rel="noopener"}
|
|
77
81
|
|
|
78
82
|
Here we use the GenAI CLI:
|
|
79
83
|
|
|
80
84
|
1. If you have signed up (see *Get an OpenAI Key*, below), this will create and open a project called `genai_demo` from `genai_demo.prompt` (available in left Explorer pane):
|
|
81
85
|
|
|
82
86
|
```bash
|
|
83
|
-
|
|
87
|
+
genai-logic genai --using=system/genai/examples/genai_demo/genai_demo.prompt --project-name=genai_demo
|
|
84
88
|
```
|
|
85
89
|
|
|
86
90
|
2. ***Or,*** you can simulate the process (no signup) using:
|
|
87
91
|
|
|
88
92
|
```bash
|
|
89
|
-
|
|
90
|
-
als genai --repaired-response=system/genai/examples/genai_demo/genai_demo.response_example --project-name=genai_demo
|
|
91
|
-
|
|
93
|
+
genai-logic genai --repaired-response=system/genai/examples/genai_demo/genai_demo.response_example --project-name=genai_demo
|
|
92
94
|
```
|
|
93
95
|
|
|
94
|
-
For background on how it works, [click here](Sample-Genai#how-does-it-work).
|
|
96
|
+
For background on how it works, [click here](Sample-Genai.md#how-does-it-work){:target="_blank" rel="noopener"}.
|
|
95
97
|
|
|
96
98
|
|
|
97
99
|
|
|
98
|
-
## 2. Working Software Now
|
|
99
100
|
|
|
100
101
|
### Open in your IDE and Run
|
|
101
102
|
|
|
102
103
|
You can open with VSCode, and run it as follows:
|
|
103
104
|
|
|
104
|
-
1. **
|
|
105
|
+
1. **Start the Server:** F5 (also described in the Appendix).
|
|
105
106
|
|
|
106
|
-
|
|
107
|
+
* Your virtual environment is automatically configured in most cases; see the Appendix (Procedures / Detail Procedures) if that's not working.
|
|
107
108
|
|
|
108
|
-
|
|
109
|
+
2. **Start the Admin App:** either use the links provided in the IDE console, or click [http://localhost:5656/](http://localhost:5656/). The Admin App screen shown below should appear in your Browser.
|
|
109
110
|
|
|
110
111
|
The sections below explore the system that has been created (which would be similar for your own database).
|
|
111
112
|
<br><br>
|
|
@@ -118,7 +119,7 @@ The system creates an API with end points for each table, with filtering, sortin
|
|
|
118
119
|
|
|
119
120
|
<summary>See the Swagger </summary>
|
|
120
121
|
|
|
121
|
-

|
|
122
123
|
</details>
|
|
123
124
|
<br>
|
|
124
125
|
|
|
@@ -131,39 +132,54 @@ You can click Customer Alice, and see their Orders, and Items.
|
|
|
131
132
|
<details markdown>
|
|
132
133
|
|
|
133
134
|
<summary>See the Admin App </summary>
|
|
134
|
-

|
|
135
136
|
</details>
|
|
136
137
|
|
|
137
|
-
<br>
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
## 2. Custom UI: GenAI, Vibe
|
|
140
140
|
|
|
141
|
-
|
|
141
|
+
The app above is suitable for collaborative iteration to nail down the requirements, and back office data maintenance. It's also easy to make simple customizations, using the yaml file.
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
* 1 CLI command to create a project from an existing database
|
|
143
|
+
For more custom apps, you get complete control by generating app source code, which you can then customize in your IDE, e.g. using Vibe Natural Language:
|
|
145
144
|
|
|
146
|
-
|
|
145
|
+
```bash
|
|
146
|
+
# create react source (requires OpenAI key)
|
|
147
|
+
genai-logic genai-add-app --vibe
|
|
148
|
+
cd react-app
|
|
149
|
+
npm install
|
|
150
|
+
npm start
|
|
151
|
+
```
|
|
147
152
|
|
|
148
|
-
|
|
153
|
+
And you are ready to Vibe:
|
|
149
154
|
|
|
150
|
-
*
|
|
155
|
+
* Instead of creating data mockups, you have a **running API server with real data**
|
|
156
|
+
* Instead of starting from scratch, you have a **running multi-page app**
|
|
157
|
+
* And, you'll have projects that are **architecturally correct:** shared logic, enforced in the server, available for both User Interfaces and services.
|
|
158
|
+
* Then, use you favorite Vibe tools with your running API
|
|
151
159
|
|
|
152
|
-
|
|
153
|
-
|
|
160
|
+
<br>
|
|
161
|
+
|
|
162
|
+
```txt title='Customize using Natural Language'
|
|
163
|
+
Update the Customer list to provide users an option to see results in a list, or in cards
|
|
154
164
|
```
|
|
155
165
|
|
|
156
|
-
|
|
166
|
+

|
|
167
|
+
|
|
168
|
+
<br>
|
|
169
|
+
|
|
170
|
+
## 3. MCP-Ready APIs
|
|
171
|
+
|
|
172
|
+
Your project is MCP-ready - this will run a simple query *List customers with credit_limit > 1000* (we'll explore more interesting examples below, including provisions for user input):
|
|
157
173
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
174
|
+
```bash
|
|
175
|
+
python integration/mcp/mcp_client_executor.py
|
|
176
|
+
```
|
|
161
177
|
|
|
162
|
-
|
|
178
|
+

|
|
163
179
|
|
|
164
180
|
<br>
|
|
165
181
|
|
|
166
|
-
##
|
|
182
|
+
## 4. Declare Logic And Security
|
|
167
183
|
|
|
168
184
|
While API/MCP/UI automation is a great start, it's **critical to enforce logic and security.** You do this in your IDE. Here's how.
|
|
169
185
|
|
|
@@ -181,8 +197,8 @@ To add customizations, in a terminal window for your project:
|
|
|
181
197
|
**2. Add Customizations**
|
|
182
198
|
|
|
183
199
|
```bash
|
|
184
|
-
|
|
185
|
-
|
|
200
|
+
genai-logic add-cust
|
|
201
|
+
genai-logic add-auth --db_url=auth
|
|
186
202
|
```
|
|
187
203
|
|
|
188
204
|
|
|
@@ -221,7 +237,7 @@ Observe you now see fewer customers, since user `s1` has role `sales`. This rol
|
|
|
221
237
|
|
|
222
238
|
* The logging in the lower panel, to assist in debugging by showing which Grants (`+ Grant:`) are applied:
|
|
223
239
|
|
|
224
|
-

|
|
225
241
|
|
|
226
242
|
</details>
|
|
227
243
|
|
|
@@ -244,7 +260,7 @@ To see logic in action:
|
|
|
244
260
|
Observe the rules firing in the console log - see Logic In Action, below.
|
|
245
261
|
|
|
246
262
|
<br>
|
|
247
|
-
> 💡 Logic: Multi-table Derivations and Constraint Declarative Rules.<br>  Declarative Rules are 40X More Concise than procedural code.<br>  For more information, [click here](
|
|
263
|
+
> 💡 Logic: Multi-table Derivations and Constraint Declarative Rules.<br>  Declarative Rules are 40X More Concise than procedural code.<br>  For more information, [click here](Logic-Why.md){:target="_blank" rel="noopener"}.
|
|
248
264
|
|
|
249
265
|
<br>
|
|
250
266
|
|
|
@@ -252,9 +268,9 @@ Observe the rules firing in the console log - see Logic In Action, below.
|
|
|
252
268
|
|
|
253
269
|
<summary>See Logic In Action </summary>
|
|
254
270
|
|
|
255
|
-
<br>[Declare logic](Logic#declaring-rules) with WebGenAI, or in your IDE using code completion or Natural Language:
|
|
271
|
+
<br>[Declare logic](Logic.md#declaring-rules){:target="_blank" rel="noopener"} with WebGenAI, or in your IDE using code completion or Natural Language:
|
|
256
272
|
|
|
257
|
-

|
|
258
274
|
|
|
259
275
|
**a. Chaining**
|
|
260
276
|
|
|
@@ -262,13 +278,13 @@ The screenshot below shows our logic declarations, and the logging for inserting
|
|
|
262
278
|
|
|
263
279
|
Note that it's a `Multi-Table Transaction`, as indicated by the indentation. This is because - like a spreadsheet - **rules automatically chain, *including across tables.***
|
|
264
280
|
|
|
265
|
-

|
|
266
282
|
|
|
267
283
|
**b. 40X More Concise**
|
|
268
284
|
|
|
269
285
|
The 5 spreadsheet-like rules represent the same logic as 200 lines of code, [shown here](https://github.com/valhuber/LogicBank/wiki/by-code). That's a remarkable 40X decrease in the backend half of the system.
|
|
270
286
|
|
|
271
|
-
> 💡 No FrankenCode<br>Note the rules look like syntactically correct requirements. They are not turned into piles of unmanageable "frankencode" - see [models not frankencode](https://www.genai-logic.com/faqs#h.3fe4qv21qtbs).
|
|
287
|
+
> 💡 No FrankenCode<br>Note the rules look like syntactically correct requirements. They are not turned into piles of unmanageable "frankencode" - see [models not frankencode](https://www.genai-logic.com/faqs#h.3fe4qv21qtbs){:target="_blank" rel="noopener"}.
|
|
272
288
|
|
|
273
289
|
<br><br>
|
|
274
290
|
|
|
@@ -292,56 +308,50 @@ Optionally, you can use the Behave TDD approach to define tests, and the Rules R
|
|
|
292
308
|
|
|
293
309
|
|
|
294
310
|
|
|
295
|
-
### Logic
|
|
311
|
+
### MCP: Logic, User Interface
|
|
296
312
|
|
|
297
313
|
Logic is automatically executed in your MCP-enabled API. For example, consider the following MCP orchestration:
|
|
298
314
|
|
|
299
|
-
|
|
300
|
-
List the orders date_shipped is null and CreatedOn before 2023-07-14,
|
|
301
|
-
and send a discount email (subject: 'Discount Offer') to the customer for each one.
|
|
302
|
-
```
|
|
315
|
+

|
|
303
316
|
|
|
304
|
-
When sending email, we require business rules to ensure it respects the opt-out policy:
|
|
305
317
|
|
|
306
|
-
|
|
318
|
+
When sending email, we require ***business rules*** to ensure it respects the opt-out policy:
|
|
307
319
|
|
|
308
|
-
|
|
320
|
+

|
|
309
321
|
|
|
310
|
-
|
|
322
|
+
The server is automatically mcp-enabled, but we might also want an mcp user-interface client:
|
|
311
323
|
|
|
312
|
-
|
|
324
|
+
**1. Stop the Server**
|
|
313
325
|
|
|
314
|
-
|
|
326
|
+
**2. Create an MCP Client Executor like this:**
|
|
315
327
|
|
|
316
|
-
```
|
|
317
|
-
|
|
328
|
+
```
|
|
329
|
+
genai-logic genai-add-mcp-client
|
|
318
330
|
```
|
|
319
331
|
|
|
320
|
-
3.
|
|
321
|
-
|
|
322
|
-
You can do this in the command line, or via the admin app.
|
|
332
|
+
**3. Restart the Server**
|
|
323
333
|
|
|
324
|
-
|
|
325
|
-
python integration/mcp/mcp_client_executor.py mcp
|
|
326
|
-
```
|
|
334
|
+
<br>
|
|
327
335
|
|
|
328
|
-
|
|
336
|
+
With the server running, test it like this:
|
|
329
337
|
|
|
330
|
-
|
|
338
|
+
1. **Test MCP**
|
|
331
339
|
|
|
332
|
-
|
|
340
|
+
You can do this in the command line, or via the admin app.
|
|
333
341
|
|
|
334
|
-
```bash
|
|
335
|
-
|
|
342
|
+
```bash title='MCP from the command line'
|
|
343
|
+
python integration/mcp/mcp_client_executor.py mcp
|
|
336
344
|
```
|
|
337
345
|
|
|
346
|
+
Or, use the **Admin App:** (shown above), and follow step 4 on the Home page to see a Business-User-friendly example.
|
|
347
|
+
|
|
338
348
|
<br>
|
|
339
349
|
|
|
340
|
-
For more on MCP, [click here](
|
|
350
|
+
For more on MCP, [click here](Integration-MCP.md){:target="_blank" rel="noopener"}.
|
|
341
351
|
|
|
342
352
|
<br>
|
|
343
353
|
|
|
344
|
-
##
|
|
354
|
+
## 5. Iterate with Rules and Python
|
|
345
355
|
|
|
346
356
|
Not only are spreadsheet-like rules 40X more concise, they meaningfully simplify maintenance. Let's take an example:
|
|
347
357
|
|
|
@@ -377,10 +387,12 @@ To add this iteration, repeat the process above - in a terminal window for your
|
|
|
377
387
|
**2. Add Iteration**
|
|
378
388
|
|
|
379
389
|
```bash
|
|
380
|
-
|
|
381
|
-
|
|
390
|
+
genai-logic add-cust
|
|
391
|
+
genai-logic rebuild-from-database --db_url=sqlite:///database/db.sqlite
|
|
382
392
|
```
|
|
383
393
|
|
|
394
|
+
* You can ignore the warning regarding *'mcp-SysMcp' - not present*
|
|
395
|
+
|
|
384
396
|
**3. Set the breakpoint as shown in the screenshot below**
|
|
385
397
|
|
|
386
398
|
**4. Test: Start the Server, login as Admin**
|
|
@@ -389,7 +401,7 @@ als rebuild-from-database --db_url=sqlite:///database/db.sqlite
|
|
|
389
401
|
|
|
390
402
|
At the breakpoint, observe you can use standard debugger services to debug your logic (examine `Item` attributes, step, etc).
|
|
391
403
|
|
|
392
|
-

|
|
393
405
|
|
|
394
406
|
|
|
395
407
|
|
|
@@ -435,16 +447,20 @@ Of course, we all know that all businesses the world over depend on the `hello w
|
|
|
435
447
|
|
|
436
448
|
* and, for database access, SQLAlchemy. Note all updates from custom APIs also enforce your logic.
|
|
437
449
|
|
|
450
|
+
Explore the custom API in `api/api_discovery/order_b2b.py`, and test it using swagger:
|
|
451
|
+
|
|
452
|
+

|
|
453
|
+
|
|
438
454
|
|
|
439
455
|
|
|
440
456
|
### Messaging With Kafka
|
|
441
457
|
|
|
442
|
-
Along with APIs, messaging is another technology commonly employed for application integration. See the screenshot below; for more information, see [Sample Integration](Sample-Integration#produce-ordershipping-message).
|
|
458
|
+
Along with APIs, messaging is another technology commonly employed for application integration. See the screenshot below; for more information, see [Sample Integration](Sample-Integration.md#produce-ordershipping-message){:target="_blank" rel="noopener"}.
|
|
443
459
|
|
|
444
|
-

|
|
445
461
|
|
|
446
462
|
|
|
447
|
-
##
|
|
463
|
+
## 6. Deploy Containers: No Fees
|
|
448
464
|
|
|
449
465
|
API Logic Server also creates scripts for deployment. While these are ***not required at this demo,*** this means you can enable collaboration with Business Users:
|
|
450
466
|
|
|
@@ -452,9 +468,7 @@ API Logic Server also creates scripts for deployment. While these are ***not re
|
|
|
452
468
|
2. Upload to Docker Hub, and
|
|
453
469
|
3. Deploy for agile collaboration.
|
|
454
470
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
<br>
|
|
471
|
+
|
|
458
472
|
|
|
459
473
|
# Explore GenAI CLI
|
|
460
474
|
|
|
@@ -508,9 +522,9 @@ Verify it's operating properly:
|
|
|
508
522
|
|
|
509
523
|
2. Your created project is opened in your IDE, ready to execute and customize.
|
|
510
524
|
|
|
511
|
-
a. Review `Tutorial`, Explore Customizations.
|
|
525
|
+
a. Review `Tutorial.md`, Explore Customizations.
|
|
512
526
|
|
|
513
|
-

|
|
514
528
|
|
|
515
529
|
</details>
|
|
516
530
|
</br>
|
|
@@ -851,7 +865,7 @@ Enforce the Check Credit requirement (do not generate check constraints):
|
|
|
851
865
|
5. Store the Items.UnitPrice as a copy from Product.UnitPrice
|
|
852
866
|
```
|
|
853
867
|
|
|
854
|
-

|
|
855
869
|
</details>
|
|
856
870
|
|
|
857
871
|
<br>
|
|
@@ -1038,11 +1052,11 @@ Codespaces enables you to run in the cloud: VSCode via your Browser, courtesy Gi
|
|
|
1038
1052
|
|
|
1039
1053
|
__1. Open your project on GitHub__
|
|
1040
1054
|
|
|
1041
|
-

|
|
1042
1056
|
|
|
1043
1057
|
__2. Open it in Codespaces (takes a minute or 2):__
|
|
1044
1058
|
|
|
1045
|
-

|
|
1046
1060
|
|
|
1047
1061
|
> You will now see your project - running in VSCode, _in the Browser._ But that's just what you _see..._
|
|
1048
1062
|
|
|
@@ -1056,7 +1070,7 @@ __3. Start the Server and open the App in the Browser__
|
|
|
1056
1070
|
|
|
1057
1071
|
* Use the pre-defined Launch Configuration
|
|
1058
1072
|
|
|
1059
|
-

|
|
1060
1074
|
|
|
1061
1075
|
|
|
1062
1076
|
We think you'll find Codespaces pretty amazing - check it out!
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
See https://apilogicserver.github.io/Docs/Data-Model-Examples/
|
|
2
2
|
|
|
3
|
-
These files are symbolic links to pre-installed sqlite databases.
|
|
3
|
+
These files are symbolic links to pre-installed sqlite databases. These allow you to explore creating projects from existing databases.
|
|
4
|
+
|
|
5
|
+
For example, create Northwind like this:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
genai-logic create --project_name=nw --db_url=sqlite:///samples/dbs/nw.sqlite
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
> 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.
|
api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/README.md
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
# Getting Started with Genai-Logic react
|
|
1
|
+
# Getting Started with Genai-Logic react apps
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
GenAI-Logic created this app (`genai-logic genai-add-app`) [(docs here)](https://apilogicserver.github.io/Docs/Admin-Vibe/), typically from `ui/admin/admin.yaml`.
|
|
4
4
|
|
|
5
|
-
GenAI-Logic (`als genai-app`) then [created this project](https://apilogicserver.github.io/Docs/Admin-Vibe/).
|
|
6
|
-
|
|
7
|
-
<br>
|
|
8
5
|
|
|
9
6
|
# To run the app:
|
|
10
7
|
|
|
11
8
|
```bash
|
|
9
|
+
# security for react apps in progress, disable for now...
|
|
10
|
+
genai-logic add-auth --provider-type=None
|
|
12
11
|
cd ui/react-admin
|
|
13
12
|
npm install
|
|
14
13
|
npm start
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
# Getting Started with Genai-Logic react
|
|
1
|
+
# Getting Started with Genai-Logic react apps
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
GenAI-Logic (`genai-logic genai-add-app`) [docs here](https://apilogicserver.github.io/Docs/Admin-Vibe/), from `ui/admin/admin.yaml`.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
We then *Vibed it* to add cards:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
Update the Customer list to provide users an option to see results in a list, or in cards
|
|
9
|
+
```
|
|
6
10
|
|
|
7
11
|
<br>
|
|
8
12
|
|
|
9
13
|
# To run the app:
|
|
10
14
|
|
|
11
15
|
```bash
|
|
16
|
+
# security for react apps in progress, disable for now...
|
|
17
|
+
genai-logic add-auth --provider-type=None
|
|
12
18
|
cd ui/react-admin
|
|
13
19
|
npm install
|
|
14
20
|
npm start
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
// begin MANDATORY imports (always generated EXACTLY)
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { List,
|
|
4
|
-
import {
|
|
5
|
-
import { TabbedShowLayout, Tab, SimpleShowLayout, TextInput, NumberInput
|
|
6
|
-
import {
|
|
7
|
-
import { Filter, Pagination,
|
|
8
|
-
import { EditButton, DeleteButton,
|
|
9
|
-
import { Grid, Typography, Box, Divider, Button } from '@mui/material';
|
|
10
|
-
import { useRecordContext, useRedirect,
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
|
+
import { List, Datagrid, TextField, DateField, NumberField } from 'react-admin';
|
|
4
|
+
import { ReferenceManyField } from 'react-admin';
|
|
5
|
+
import { TabbedShowLayout, Tab, SimpleShowLayout, TextInput, NumberInput } from 'react-admin';
|
|
6
|
+
import { SimpleForm, Show, Edit, Create } from 'react-admin';
|
|
7
|
+
import { Filter, Pagination, BooleanInput, Labeled } from 'react-admin';
|
|
8
|
+
import { EditButton, DeleteButton, ShowButton } from 'react-admin';
|
|
9
|
+
import { Grid, Typography, Box, Divider, Button, Card, CardContent, CardActions, ToggleButton, ToggleButtonGroup } from '@mui/material';
|
|
10
|
+
import { useRecordContext, useRedirect, useListContext, required } from 'react-admin';
|
|
11
11
|
import AddIcon from '@mui/icons-material/Add';
|
|
12
|
+
import ViewListIcon from '@mui/icons-material/ViewList';
|
|
13
|
+
import ViewModuleIcon from '@mui/icons-material/ViewModule';
|
|
14
|
+
import LocationOnIcon from '@mui/icons-material/LocationOn';
|
|
15
|
+
import PersonIcon from '@mui/icons-material/Person';
|
|
16
|
+
import AccountBalanceWalletIcon from '@mui/icons-material/AccountBalanceWallet';
|
|
12
17
|
// end mandatory imports
|
|
13
18
|
|
|
14
19
|
const CustomerFilter = (props) => (
|
|
@@ -18,21 +23,135 @@ const CustomerFilter = (props) => (
|
|
|
18
23
|
</Filter>
|
|
19
24
|
);
|
|
20
25
|
|
|
21
|
-
// Customer
|
|
22
|
-
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
// Customer Card View Component
|
|
27
|
+
const CustomerCard = ({ record }) => (
|
|
28
|
+
<Card sx={{
|
|
29
|
+
minWidth: 300,
|
|
30
|
+
maxWidth: 350,
|
|
31
|
+
height: 280,
|
|
32
|
+
margin: 1,
|
|
33
|
+
display: 'flex',
|
|
34
|
+
flexDirection: 'column',
|
|
35
|
+
transition: 'transform 0.2s, box-shadow 0.2s',
|
|
36
|
+
'&:hover': {
|
|
37
|
+
transform: 'translateY(-2px)',
|
|
38
|
+
boxShadow: 3
|
|
39
|
+
}
|
|
40
|
+
}}>
|
|
41
|
+
<CardContent sx={{ flexGrow: 1, pb: 1 }}>
|
|
42
|
+
<Typography variant="h6" component="div" sx={{
|
|
43
|
+
mb: 2,
|
|
44
|
+
fontWeight: 'bold',
|
|
45
|
+
color: 'primary.main',
|
|
46
|
+
overflow: 'hidden',
|
|
47
|
+
textOverflow: 'ellipsis',
|
|
48
|
+
whiteSpace: 'nowrap'
|
|
49
|
+
}}>
|
|
50
|
+
{record.CompanyName}
|
|
51
|
+
</Typography>
|
|
52
|
+
|
|
53
|
+
<Box sx={{ mb: 1.5, display: 'flex', alignItems: 'center', gap: 1 }}>
|
|
54
|
+
<PersonIcon color="action" fontSize="small" />
|
|
55
|
+
<Typography variant="body2" color="text.secondary">
|
|
56
|
+
{record.ContactName || 'No contact name'}
|
|
57
|
+
</Typography>
|
|
58
|
+
</Box>
|
|
59
|
+
|
|
60
|
+
<Box sx={{ mb: 1.5, display: 'flex', alignItems: 'center', gap: 1 }}>
|
|
61
|
+
<LocationOnIcon color="action" fontSize="small" />
|
|
62
|
+
<Typography variant="body2" color="text.secondary">
|
|
63
|
+
{record.City ? `${record.City}, ${record.Country || ''}` : record.Country || 'No location'}
|
|
64
|
+
</Typography>
|
|
65
|
+
</Box>
|
|
66
|
+
|
|
67
|
+
<Box sx={{ mb: 2, display: 'flex', alignItems: 'center', gap: 1 }}>
|
|
68
|
+
<AccountBalanceWalletIcon color="action" fontSize="small" />
|
|
69
|
+
<Typography variant="body1" sx={{ fontWeight: 'medium' }}>
|
|
70
|
+
{record.Balance ? `$${record.Balance.toLocaleString()}` : '$0.00'}
|
|
71
|
+
</Typography>
|
|
72
|
+
</Box>
|
|
73
|
+
</CardContent>
|
|
74
|
+
|
|
75
|
+
<CardActions sx={{ pt: 0, pb: 2, px: 2, justifyContent: 'space-between' }}>
|
|
76
|
+
<ShowButton record={record} size="small" />
|
|
77
|
+
<Box>
|
|
78
|
+
<EditButton record={record} size="small" sx={{ mr: 1 }} />
|
|
79
|
+
<DeleteButton record={record} size="small" />
|
|
80
|
+
</Box>
|
|
81
|
+
</CardActions>
|
|
82
|
+
</Card>
|
|
34
83
|
);
|
|
35
84
|
|
|
85
|
+
// Customer Grid View Component
|
|
86
|
+
const CustomerGridView = () => {
|
|
87
|
+
const { data, isLoading } = useListContext();
|
|
88
|
+
|
|
89
|
+
if (isLoading) return <div>Loading...</div>;
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<Grid container spacing={2} sx={{ mt: 1 }}>
|
|
93
|
+
{data?.map(record => (
|
|
94
|
+
<Grid item key={record.id} xs={12} sm={6} md={4} lg={3}>
|
|
95
|
+
<CustomerCard record={record} />
|
|
96
|
+
</Grid>
|
|
97
|
+
))}
|
|
98
|
+
</Grid>
|
|
99
|
+
);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// View Toggle Component
|
|
103
|
+
const ViewToggle = ({ viewMode, setViewMode }) => (
|
|
104
|
+
<Box sx={{ mb: 2, display: 'flex', justifyContent: 'flex-end' }}>
|
|
105
|
+
<ToggleButtonGroup
|
|
106
|
+
value={viewMode}
|
|
107
|
+
exclusive
|
|
108
|
+
onChange={(event, newViewMode) => {
|
|
109
|
+
if (newViewMode !== null) {
|
|
110
|
+
setViewMode(newViewMode);
|
|
111
|
+
}
|
|
112
|
+
}}
|
|
113
|
+
aria-label="view mode"
|
|
114
|
+
size="small"
|
|
115
|
+
>
|
|
116
|
+
<ToggleButton value="list" aria-label="list view">
|
|
117
|
+
<ViewListIcon />
|
|
118
|
+
</ToggleButton>
|
|
119
|
+
<ToggleButton value="cards" aria-label="card view">
|
|
120
|
+
<ViewModuleIcon />
|
|
121
|
+
</ToggleButton>
|
|
122
|
+
</ToggleButtonGroup>
|
|
123
|
+
</Box>
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
// Customer List
|
|
127
|
+
export const CustomerList = (props) => {
|
|
128
|
+
const [viewMode, setViewMode] = useState('list');
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<List
|
|
132
|
+
filters={<CustomerFilter />}
|
|
133
|
+
{...props}
|
|
134
|
+
sort={{ field: 'CompanyName', order: 'ASC' }}
|
|
135
|
+
pagination={<Pagination rowsPerPageOptions={[5, 10, 25]} showFirstLastButtons />}
|
|
136
|
+
>
|
|
137
|
+
<ViewToggle viewMode={viewMode} setViewMode={setViewMode} />
|
|
138
|
+
{viewMode === 'list' ? (
|
|
139
|
+
<Datagrid rowClick="show">
|
|
140
|
+
<TextField source="CompanyName" label="Company Name" />
|
|
141
|
+
<TextField source="ContactName" label="Contact Name" />
|
|
142
|
+
<TextField source="City" label="City" />
|
|
143
|
+
<TextField source="Country" label="Country" />
|
|
144
|
+
<NumberField source="Balance" label="Balance" options={{ style: 'currency', currency: 'USD' }} />
|
|
145
|
+
<EditButton />
|
|
146
|
+
<DeleteButton />
|
|
147
|
+
</Datagrid>
|
|
148
|
+
) : (
|
|
149
|
+
<CustomerGridView />
|
|
150
|
+
)}
|
|
151
|
+
</List>
|
|
152
|
+
);
|
|
153
|
+
};
|
|
154
|
+
|
|
36
155
|
// Customer Show
|
|
37
156
|
export const CustomerShow = (props) => (
|
|
38
157
|
<Show {...props}>
|
|
@@ -185,9 +304,11 @@ export const CustomerEdit = (props) => (
|
|
|
185
304
|
</Edit>
|
|
186
305
|
);
|
|
187
306
|
|
|
188
|
-
|
|
307
|
+
const CustomerResource = {
|
|
189
308
|
list: CustomerList,
|
|
190
309
|
show: CustomerShow,
|
|
191
310
|
create: CustomerCreate,
|
|
192
311
|
edit: CustomerEdit,
|
|
193
|
-
};
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
export default CustomerResource;
|
|
@@ -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=
|
|
2
|
+
api_logic_server_cli/api_logic_server.py,sha256=9gboaumvl-5UJv8Zmv5BrC8tkIR0GwCy0GX97HQn2TU,97700
|
|
3
|
+
api_logic_server_cli/api_logic_server_info.yaml,sha256=gpPea9643Mcrcf7HqGbQA7XzuAKGV5wRyC7ESuC9XQA,125
|
|
4
4
|
api_logic_server_cli/cli.py,sha256=3GdpAcaXsMeuMnWa-jx7tpi0x6OjIRoau4BeVT-Pw3A,87286
|
|
5
5
|
api_logic_server_cli/cli_args_base.py,sha256=7cVM6BeizwttYAwUu1FUyuLuvWufvgt0TFeA8FI6tu0,3304
|
|
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=vuBoOQVCr04NX2fnKIPmAvutn8FgWcsmpo1pELjDxtE,2228
|
|
9
|
-
api_logic_server_cli/manager.py,sha256=
|
|
9
|
+
api_logic_server_cli/manager.py,sha256=lbCD15To3c1sNorp9eYdfXPKqfGAuetlgrGxJK0yuHs,12626
|
|
10
10
|
api_logic_server_cli/add_cust/add_cust.py,sha256=yi_6qoiBm19K1u5VNhDW-KaTVcnsU-uTQ8-GYioojMI,14034
|
|
11
11
|
api_logic_server_cli/create_from_model/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
|
12
12
|
api_logic_server_cli/create_from_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -24,11 +24,11 @@ api_logic_server_cli/create_from_model/__pycache__/__init__.cpython-312.pyc,sha2
|
|
|
24
24
|
api_logic_server_cli/create_from_model/__pycache__/api_expose_api_models_creator.cpython-312.pyc,sha256=3wtCiVHOjOgIonZOgnCsF2p01zcXIapx1_Tq2LwzY6Q,6989
|
|
25
25
|
api_logic_server_cli/create_from_model/__pycache__/api_logic_server_utils.cpython-312.pyc,sha256=Y3Ry1U5mQC023zgJom1I4JSQDY4Z4UmTKo7ohMmXUNg,28904
|
|
26
26
|
api_logic_server_cli/create_from_model/__pycache__/create_db_from_model.cpython-312.pyc,sha256=5eE8pIEa-OoUOk0xn_b78cCc9dSmxjTMn3HGJbxbFY4,4799
|
|
27
|
-
api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc,sha256=
|
|
27
|
+
api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc,sha256=Pi7d7fjCa8B22CfY4hkGfDJCW1M7__B5Fg33Xl0NWZQ,12722
|
|
28
28
|
api_logic_server_cli/create_from_model/__pycache__/meta_model.cpython-312.pyc,sha256=BH5Cflj8YKf0CVkHpIZ_3eBbHXhwIWbwsrzM7DsEikE,7098
|
|
29
29
|
api_logic_server_cli/create_from_model/__pycache__/model_creation_services.cpython-312.pyc,sha256=_pJPTvkJL22Eu1BWM48VfXcyapD366OnXBqHGn-wtO0,36462
|
|
30
30
|
api_logic_server_cli/create_from_model/__pycache__/ont_build.cpython-312.pyc,sha256=Hni6k7GidAkkz-YO2kvmQOMYdCdCWvGWxX3HIPjj1eE,75285
|
|
31
|
-
api_logic_server_cli/create_from_model/__pycache__/ont_create.cpython-312.pyc,sha256=
|
|
31
|
+
api_logic_server_cli/create_from_model/__pycache__/ont_create.cpython-312.pyc,sha256=JKEAYMTNNDxmIp345o-zhBwuzfn7F2aV8S4PIxXWvvg,16655
|
|
32
32
|
api_logic_server_cli/create_from_model/__pycache__/ui_admin_creator.cpython-312.pyc,sha256=7lvvAHZDgxZcQWdf9oY4I8wyWPNZAv2leuVMsYmaNWY,38389
|
|
33
33
|
api_logic_server_cli/create_from_model/__pycache__/uri_info.cpython-312.pyc,sha256=oXtt-zINPCIGtb1xpwtaHwUQPt4AYo8tkIlN0Fe5EkI,2718
|
|
34
34
|
api_logic_server_cli/create_from_model/safrs-react-admin-npm-build/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
|
@@ -469,7 +469,7 @@ api_logic_server_cli/fragments/db_typesZZ.txt,sha256=NoPSsxl86kDW91D7Jskbpe7C-Jy
|
|
|
469
469
|
api_logic_server_cli/fragments/declare_logic.py,sha256=a7wXI5JyMyIMZqUNOXDswBeJZVjN3OvOv76rvR08CxI,2844
|
|
470
470
|
api_logic_server_cli/fragments/declare_logic_begin.py,sha256=n1aIILmMCEahgkKedNdFjSskIa_VF66BZfuL8E6G83o,735
|
|
471
471
|
api_logic_server_cli/fragments/declare_logic_end.py,sha256=J_vF8Vks_jKRAOwSFv_KRW9wmG3-ay0ByRsajGcbm4w,2192
|
|
472
|
-
api_logic_server_cli/fragments/docker-compose.yml,sha256=
|
|
472
|
+
api_logic_server_cli/fragments/docker-compose.yml,sha256=efI8C9EfBFnBUduz4TNQJb1e3nB_YQVKEfAqnV8OQZA,834
|
|
473
473
|
api_logic_server_cli/fragments/mcp_admin.yml,sha256=FxzJeZEf9aTtjbC3oamZZRCrSDD7CgFKSlii7cVYTJc,214
|
|
474
474
|
api_logic_server_cli/fragments/modelsZZ.py,sha256=EDWnf4gyOoenPn5OuQyWWa2GJVMiw4YKHUtUd9QX994,12053
|
|
475
475
|
api_logic_server_cli/fragments/nw_virtual_attrs.py,sha256=7hgvhnO1UcJ6OoPKCxR5bn71zZEe7gsk4odtoswqKj8,888
|
|
@@ -810,16 +810,17 @@ api_logic_server_cli/prototypes/genai_demo/logic/readme_declare_logic.md,sha256=
|
|
|
810
810
|
api_logic_server_cli/prototypes/genai_demo/security/declare_security.py,sha256=L3AL1bgdqIWQxdkJZcFVDOQ0XRpmeLAKqwlAYChFWKo,2108
|
|
811
811
|
api_logic_server_cli/prototypes/genai_demo/ui/admin/admin.yaml,sha256=vMpr6to6g-h9gSuhxfpTeDMw5_R_eUKbV7qXzMEvIyk,3446
|
|
812
812
|
api_logic_server_cli/prototypes/manager/.gitignore,sha256=xfAjNQHokbo6GuN1ghx-eml8tQIzwUczLC_YVzElndI,195
|
|
813
|
-
api_logic_server_cli/prototypes/manager/README.md,sha256=
|
|
813
|
+
api_logic_server_cli/prototypes/manager/README.md,sha256=9hoALg3YpHMrLiYj22qc77jvOU8aagrEuHbXGYV2Kr8,38617
|
|
814
814
|
api_logic_server_cli/prototypes/manager/run_sample.sh,sha256=eRA-p_Snr7Pwk14wUw5mja2usEcjAKisHVhHMeSaQ68,781
|
|
815
815
|
api_logic_server_cli/prototypes/manager/run_web_genai.sh,sha256=sgjB3vKhkao93Ny3VN0AQ-wonvdBcBIT3rTbyNTMoG8,136
|
|
816
816
|
api_logic_server_cli/prototypes/manager/settings.txt,sha256=_jjL30jomIMxG21edDfrXYRT9Zfgr_0EdUWvcEUOnFQ,368
|
|
817
817
|
api_logic_server_cli/prototypes/manager/.vscode/ApiLogicServer.code-workspace,sha256=g062GyCFJ9XfuzVAfxk8Qsl5kWAB_v5Z1AQ3dzpcHMw,294
|
|
818
818
|
api_logic_server_cli/prototypes/manager/.vscode/launch.json,sha256=alh_fiuqMjY-uIk4ghfwyMs3y-U2dYr1W6rS9ncpNEY,33491
|
|
819
819
|
api_logic_server_cli/prototypes/manager/.vscode/settings.json,sha256=wQgpFvviPbZCmsf02UgrJSGAz7g3i4chDZ_AdSIOr5Y,625
|
|
820
|
-
api_logic_server_cli/prototypes/manager/samples/readme_samples.md,sha256=
|
|
821
|
-
api_logic_server_cli/prototypes/manager/samples/dbs/readme_samples.md,sha256=
|
|
820
|
+
api_logic_server_cli/prototypes/manager/samples/readme_samples.md,sha256=JyUOm5mcmLXtBCE30OFzfZaSCw7k_PKLZmGNanS4fwc,171
|
|
821
|
+
api_logic_server_cli/prototypes/manager/samples/dbs/readme_samples.md,sha256=FvxzBqR00Kgc5Z76JOslHju6HYmsYOwkoARe_U-dnY0,570
|
|
822
822
|
api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace,sha256=g062GyCFJ9XfuzVAfxk8Qsl5kWAB_v5Z1AQ3dzpcHMw,294
|
|
823
|
+
api_logic_server_cli/prototypes/manager/system/readme_ssystem.md,sha256=52zXRh5KJ4GSRWyNLwzbXqKMDJmR7M6PhS71-DIUoBI,106
|
|
823
824
|
api_logic_server_cli/prototypes/manager/system/style-guide.yaml,sha256=JaP3NDE29k4_e9ELeLTZfnWf2L8VgS1X7hO8J_BNqJU,673
|
|
824
825
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/.gitignore,sha256=07msA6EiXJT_unwoat2B8vI6ANcIn9E-ntgIpQZj7g0,477
|
|
825
826
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/api_logic_server_run.py,sha256=vf9Jc2vAz5npI6pD4kLNNdFTkqK8rO4erA03-k_mkcY,6363
|
|
@@ -1264,7 +1265,7 @@ api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/
|
|
|
1264
1265
|
api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-config-prompt.md,sha256=fyP8X1q9tM3i6bTVioa7ieM_aTUfk4GPo08aOWZ60-0,932
|
|
1265
1266
|
api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-json-api-model-prompt.md,sha256=5Zp9q_lpY225qceQ3UhF4Fyd-85hDKkD-r3BWYmcs6Y,2890
|
|
1266
1267
|
api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/.DS_Store,sha256=AnV79PLm6F_E6PkLoTv-GaJZpUGP_xdRkNEqrAYGYuE,6148
|
|
1267
|
-
api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/README.md,sha256=
|
|
1268
|
+
api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/README.md,sha256=h7ePuwOqn3jv7YkjM4ruaP5rpYBmr_4Q3NChhb8pVJ4,452
|
|
1268
1269
|
api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/README_create_react_app.md,sha256=cOr7x6X9RmqjITtafhsqQTg8vl1Ob8X0WC78WL21CdE,3359
|
|
1269
1270
|
api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/package-lock.json,sha256=dG1s4WtUFp0ZhVWGwp_Ocv-Ii2c92Xb4FWqHFc0m7KU,698058
|
|
1270
1271
|
api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/package.json,sha256=6_nHZ8UzSaDWUPv6DyGJ3QAO392tc2rc8JPOp7V7gz4,1114
|
|
@@ -1990,7 +1991,7 @@ api_logic_server_cli/prototypes/nw/ui/images/Employee/leverling.jpg,sha256=w02cB
|
|
|
1990
1991
|
api_logic_server_cli/prototypes/nw/ui/images/Employee/peacock.jpg,sha256=UIfxEKOKruPKNW0w17bMebIaUsa1nD2vSVfFTk7uaCs,3862
|
|
1991
1992
|
api_logic_server_cli/prototypes/nw/ui/images/Employee/suyama.jpg,sha256=bp0xCJ-8EqQp_B7uR4glL6fVGxVlS10d5IHLNdw7rcA,4375
|
|
1992
1993
|
api_logic_server_cli/prototypes/nw/ui/reference_react_app/.DS_Store,sha256=AnV79PLm6F_E6PkLoTv-GaJZpUGP_xdRkNEqrAYGYuE,6148
|
|
1993
|
-
api_logic_server_cli/prototypes/nw/ui/reference_react_app/README.md,sha256=
|
|
1994
|
+
api_logic_server_cli/prototypes/nw/ui/reference_react_app/README.md,sha256=y4qGb4ZgovIFEzPyq18AbQjnpeYF8RrlCxsRTTwYujk,565
|
|
1994
1995
|
api_logic_server_cli/prototypes/nw/ui/reference_react_app/README_create_react_app.md,sha256=cOr7x6X9RmqjITtafhsqQTg8vl1Ob8X0WC78WL21CdE,3359
|
|
1995
1996
|
api_logic_server_cli/prototypes/nw/ui/reference_react_app/compile-errors.txt,sha256=HIYSnI2VW_Lz1MNCCw3TxZoeXFtuhpvxEDgDGY0A544,30782
|
|
1996
1997
|
api_logic_server_cli/prototypes/nw/ui/reference_react_app/package-lock.json,sha256=IzEHCLrrRzluTL-bw_d_u57dKsn8a9feoY2BKx7DjRc,699130
|
|
@@ -2006,7 +2007,7 @@ api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/App.js,sha256=cGZB
|
|
|
2006
2007
|
api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/App.test.js,sha256=93hGkxlLhlfRv3DDfqcPSi1pTEVm7EFVCo5lDrYAqqQ,246
|
|
2007
2008
|
api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Category.js,sha256=Nx1ILnyLn-QlHsBlEAVq-W_YIu0rJT8ERDPNmLTQMWo,5964
|
|
2008
2009
|
api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Config.js,sha256=c2H9MMc3h2STlHPfjFRnu1FR-drNTRKzC8zVeZk7UkI,15025
|
|
2009
|
-
api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Customer.js,sha256=
|
|
2010
|
+
api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Customer.js,sha256=yY97oX1RIYVhe2ERtkrT0CXNniYg5mQcknUvKG88deQ,12358
|
|
2010
2011
|
api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/CustomerDemographic.js,sha256=teJ2S5rLK1Ojp9meKhETE_bwU4lGvdu2q-hkpZ0Djd8,4109
|
|
2011
2012
|
api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Department.js,sha256=S0ZaSEZuZ1XeiCEfeKmOlj-4QVHzOUG19rIw3QM4lVE,5739
|
|
2012
2013
|
api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Employee.js,sha256=XMBcUfQL1wG1P6wAPTpmJArnJWwHgSlXYV8Z5I8xhsw,10053
|
|
@@ -2338,9 +2339,9 @@ api_logic_server_cli/tools/mini_skel/database/system/SAFRSBaseX.py,sha256=p8C7AF
|
|
|
2338
2339
|
api_logic_server_cli/tools/mini_skel/database/system/TestDataBase.py,sha256=U02SYqThsbY5g3DX7XGaiMxjZBuOpzvtPS6RfI1WQFg,371
|
|
2339
2340
|
api_logic_server_cli/tools/mini_skel/logic/declare_logic.py,sha256=fTrlHyqMeZsw_TyEXFa1VlYBL7fzjZab5ONSXO7aApo,175
|
|
2340
2341
|
api_logic_server_cli/tools/mini_skel/logic/load_verify_rules.py,sha256=Rr5bySJpYCZmNPF2h-phcPJ53nAOPcT_ohZpCD93-a0,7530
|
|
2341
|
-
apilogicserver-15.0.
|
|
2342
|
-
apilogicserver-15.0.
|
|
2343
|
-
apilogicserver-15.0.
|
|
2344
|
-
apilogicserver-15.0.
|
|
2345
|
-
apilogicserver-15.0.
|
|
2346
|
-
apilogicserver-15.0.
|
|
2342
|
+
apilogicserver-15.0.35.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
|
|
2343
|
+
apilogicserver-15.0.35.dist-info/METADATA,sha256=k1D532uFIu6R6GTCkp7CRQFq8tdNenp3KCk-EX3pL1s,6553
|
|
2344
|
+
apilogicserver-15.0.35.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
2345
|
+
apilogicserver-15.0.35.dist-info/entry_points.txt,sha256=W9EVNvf09h8n6rJChmVj2gzxVQ6BXXZa2x3wri0lFGc,259
|
|
2346
|
+
apilogicserver-15.0.35.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
|
|
2347
|
+
apilogicserver-15.0.35.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|