ApiLogicServer 15.2.0__py3-none-any.whl → 15.2.3__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 +2 -2
- api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md +22 -0
- api_logic_server_cli/prototypes/base/docs/training/testing.md +21 -9
- api_logic_server_cli/prototypes/base/test/api_logic_server_behave/behave_logic_report.py +55 -29
- api_logic_server_cli/prototypes/base/test/api_logic_server_behave/behave_logic_report.py.bak +285 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md +35 -0
- api_logic_server_cli/prototypes/basic_demo/customizations/test/api_logic_server_behave/reports/Behave Logic Report Intro.md +35 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/training/testing.md +210 -12
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/behave_logic_report.py +13 -84
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/behave_logic_report.py.bak +282 -0
- api_logic_server_cli/prototypes/manager/system/ApiLogicServer-Internal-Dev/copilot-dev-context.md +39 -4
- api_logic_server_cli/prototypes/manager/system/app_model_editor/test/api_logic_server_behave/behave_logic_report.py +13 -75
- api_logic_server_cli/prototypes/manager/system/app_model_editor/test/api_logic_server_behave/behave_logic_report.py.bak +256 -0
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/behave_logic_report.py +13 -75
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/behave_logic_report.py.bak +256 -0
- api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md +17 -0
- api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/reports/Behave Logic Report Intro.md +17 -0
- {apilogicserver-15.2.0.dist-info → apilogicserver-15.2.3.dist-info}/METADATA +79 -8
- {apilogicserver-15.2.0.dist-info → apilogicserver-15.2.3.dist-info}/RECORD +23 -16
- api_logic_server_cli/prototypes/base/.github/.copilot-instructionsZ.mdx +0 -661
- {apilogicserver-15.2.0.dist-info → apilogicserver-15.2.3.dist-info}/WHEEL +0 -0
- {apilogicserver-15.2.0.dist-info → apilogicserver-15.2.3.dist-info}/entry_points.txt +0 -0
- {apilogicserver-15.2.0.dist-info → apilogicserver-15.2.3.dist-info}/licenses/LICENSE +0 -0
- {apilogicserver-15.2.0.dist-info → apilogicserver-15.2.3.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import requests
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
import os
|
|
4
|
+
import ast
|
|
5
|
+
import sys
|
|
6
|
+
import click
|
|
7
|
+
|
|
8
|
+
"""
|
|
9
|
+
Creates wiki file from test/behave/behave.log, with rule use.
|
|
10
|
+
|
|
11
|
+
Tips
|
|
12
|
+
* use 2 spaces (at end) for newline
|
|
13
|
+
* for tab: & emsp;
|
|
14
|
+
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
tab = " "
|
|
18
|
+
behave_debug_info = " # "
|
|
19
|
+
wiki_data = []
|
|
20
|
+
debug_scenario = "XXGood Order Custom Service"
|
|
21
|
+
|
|
22
|
+
scenario_doc_strings = {}
|
|
23
|
+
""" dict of scenario_name, array of strings """
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def remove_trailer(line: str) -> str:
|
|
27
|
+
""" remove everything after the ## """
|
|
28
|
+
end_here = line.find("\t\t##")
|
|
29
|
+
result = line[0:end_here]
|
|
30
|
+
return result
|
|
31
|
+
|
|
32
|
+
def line_spacer():
|
|
33
|
+
wiki_data.append("\n")
|
|
34
|
+
wiki_data.append(" ")
|
|
35
|
+
wiki_data.append(" ")
|
|
36
|
+
wiki_data.append("\n")
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def get_current_readme(prepend_wiki: str):
|
|
40
|
+
""" initialize wiki_data with readme up to {report_name} """
|
|
41
|
+
report_name = "Behave Logic Report"
|
|
42
|
+
with open(prepend_wiki) as readme:
|
|
43
|
+
readme_lines = readme.readlines()
|
|
44
|
+
need_spacer = True
|
|
45
|
+
for each_readme_line in readme_lines:
|
|
46
|
+
if '# ' + report_name in each_readme_line:
|
|
47
|
+
need_spacer = False
|
|
48
|
+
break
|
|
49
|
+
wiki_data.append(each_readme_line[0:-1])
|
|
50
|
+
if need_spacer:
|
|
51
|
+
line_spacer()
|
|
52
|
+
wiki_data.append(f'# {report_name}')
|
|
53
|
+
|
|
54
|
+
def get_truncated_scenario_name(scenario_name: str) -> str:
|
|
55
|
+
""" address max file length (chop at 26), illegal characters """
|
|
56
|
+
scenario_trunc = scenario_name
|
|
57
|
+
if scenario_trunc is not None and len(scenario_trunc) >= 26:
|
|
58
|
+
scenario_trunc = scenario_name[0:25]
|
|
59
|
+
scenario_trunc = f'{str(scenario_trunc).replace(" ", "_")}'
|
|
60
|
+
return scenario_trunc
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def show_logic(scenario: str, logic_logs_dir: str):
|
|
64
|
+
""" insert s{logic_logs_dir}/scenario.log into wiki_data as disclosure area """
|
|
65
|
+
scenario_trunc = get_truncated_scenario_name(scenario)
|
|
66
|
+
logic_file_name = f'{logic_logs_dir}/{scenario_trunc}.log'
|
|
67
|
+
logic_file_name_path = Path(logic_file_name)
|
|
68
|
+
if not logic_file_name_path.is_file(): # debug code
|
|
69
|
+
# wiki_data.append(f'unable to find Logic Log file: {logic_file_name}')
|
|
70
|
+
if scenario == debug_scenario:
|
|
71
|
+
print(f'RELATIVE: {logic_file_name} in {os.getcwd()}')
|
|
72
|
+
full_name = f'{os.getcwd()}/{logic_file_name}'
|
|
73
|
+
print(f'..FULL: {os.getcwd()}/{logic_file_name}')
|
|
74
|
+
logic_file_name = '{logic_logs_dir}/test.log'
|
|
75
|
+
with open(logic_file_name) as logic:
|
|
76
|
+
logic_lines = logic.readlines()
|
|
77
|
+
else:
|
|
78
|
+
logic_log = []
|
|
79
|
+
rules_used = []
|
|
80
|
+
wiki_data.append("<details markdown>")
|
|
81
|
+
wiki_data.append("<summary>Tests - and their logic - are transparent.. click to see Logic</summary>")
|
|
82
|
+
line_spacer()
|
|
83
|
+
scenario_trunc = get_truncated_scenario_name(scenario)
|
|
84
|
+
if scenario_trunc in scenario_doc_strings:
|
|
85
|
+
wiki_data.append(f'**Logic Doc** for scenario: {scenario}')
|
|
86
|
+
wiki_data.append(" ")
|
|
87
|
+
for each_doc_string_line in scenario_doc_strings[scenario_trunc]:
|
|
88
|
+
wiki_data.append(each_doc_string_line[0: -1])
|
|
89
|
+
line_spacer()
|
|
90
|
+
wiki_data.append(f'**Rules Used** in Scenario: {scenario}')
|
|
91
|
+
wiki_data.append("```")
|
|
92
|
+
with open(logic_file_name) as logic:
|
|
93
|
+
logic_lines = logic.readlines()
|
|
94
|
+
is_logic_log = True
|
|
95
|
+
for each_logic_line in logic_lines:
|
|
96
|
+
each_logic_line = remove_trailer(each_logic_line)
|
|
97
|
+
if is_logic_log:
|
|
98
|
+
if "Rules Fired" in each_logic_line:
|
|
99
|
+
is_logic_log = False
|
|
100
|
+
continue
|
|
101
|
+
else:
|
|
102
|
+
logic_log.append(each_logic_line)
|
|
103
|
+
else:
|
|
104
|
+
if 'logic_logger - INFO' in each_logic_line:
|
|
105
|
+
pass
|
|
106
|
+
break
|
|
107
|
+
wiki_data.append(each_logic_line + " ")
|
|
108
|
+
wiki_data.append("```")
|
|
109
|
+
wiki_data.append(f'**Logic Log** in Scenario: {scenario}')
|
|
110
|
+
wiki_data.append("```")
|
|
111
|
+
for each_logic_log in logic_log:
|
|
112
|
+
each_line = remove_trailer(each_logic_log)
|
|
113
|
+
wiki_data.append(each_line)
|
|
114
|
+
wiki_data.append("```")
|
|
115
|
+
wiki_data.append("</details>")
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def get_docStrings(steps_dir: str):
|
|
119
|
+
steps_dir_files = os.listdir(steps_dir)
|
|
120
|
+
indent = 4 # skip leading blanks
|
|
121
|
+
for each_steps_dir_file in steps_dir_files:
|
|
122
|
+
each_steps_dir_file_path = Path(steps_dir).joinpath(each_steps_dir_file)
|
|
123
|
+
if each_steps_dir_file_path.is_file():
|
|
124
|
+
with open(each_steps_dir_file_path) as f:
|
|
125
|
+
step_code = f.readlines()
|
|
126
|
+
# print(f'Found File: {str(each_steps_dir_file_path)}')
|
|
127
|
+
for index, each_step_code_line in enumerate(step_code):
|
|
128
|
+
if each_step_code_line.startswith('@when'):
|
|
129
|
+
comment_start = index + 2
|
|
130
|
+
if '"""' in step_code[comment_start]:
|
|
131
|
+
# print(".. found doc string")
|
|
132
|
+
doc_string_line = comment_start+1
|
|
133
|
+
doc_string = []
|
|
134
|
+
while (True):
|
|
135
|
+
if '"""' in step_code[doc_string_line]:
|
|
136
|
+
break
|
|
137
|
+
doc_string.append(step_code[doc_string_line][indent:])
|
|
138
|
+
doc_string_line += 1
|
|
139
|
+
scenario_line = doc_string_line+1
|
|
140
|
+
if 'scenario_name' not in step_code[scenario_line]:
|
|
141
|
+
print(f'\n** Warning - scenario_name not found '\
|
|
142
|
+
f'in file {str(each_steps_dir_file_path)}, '\
|
|
143
|
+
f'after line {scenario_line} -- skipped')
|
|
144
|
+
else:
|
|
145
|
+
scenario_code_line = step_code[scenario_line]
|
|
146
|
+
scenario_name_start = scenario_code_line.find("'") + 1
|
|
147
|
+
scenario_name_end = scenario_code_line[scenario_name_start+1:].find("'")
|
|
148
|
+
scenario_name = scenario_code_line[scenario_name_start:
|
|
149
|
+
scenario_name_end + scenario_name_start+1]
|
|
150
|
+
if scenario_name == debug_scenario:
|
|
151
|
+
print(f'got {debug_scenario}')
|
|
152
|
+
scenario_trunc = get_truncated_scenario_name(scenario_name)
|
|
153
|
+
# print(f'.... truncated scenario_name: {scenario_trunc} in {scenario_code_line}')
|
|
154
|
+
scenario_doc_strings[scenario_trunc] = doc_string
|
|
155
|
+
# print("that's all, folks")
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def main(behave_log: str, scenario_logs: str, wiki: str, prepend_wiki: str):
|
|
159
|
+
""" main driver """
|
|
160
|
+
get_docStrings(steps_dir="features/steps")
|
|
161
|
+
|
|
162
|
+
get_current_readme(prepend_wiki=prepend_wiki)
|
|
163
|
+
|
|
164
|
+
contents = None
|
|
165
|
+
with open(behave_log) as f:
|
|
166
|
+
contents = f.readlines()
|
|
167
|
+
|
|
168
|
+
just_saw_then = False
|
|
169
|
+
current_scenario = ""
|
|
170
|
+
for each_line in contents:
|
|
171
|
+
if just_saw_then and each_line == "\n":
|
|
172
|
+
show_logic(scenario=current_scenario, logic_logs_dir=scenario_logs)
|
|
173
|
+
just_saw_then = False
|
|
174
|
+
if each_line.startswith("Feature"):
|
|
175
|
+
wiki_data.append(" ")
|
|
176
|
+
wiki_data.append(" ")
|
|
177
|
+
each_line = "## " + each_line
|
|
178
|
+
if each_line.startswith(" Scenario"):
|
|
179
|
+
each_line = tab + each_line
|
|
180
|
+
if each_line.startswith(" Given") or \
|
|
181
|
+
each_line.startswith(" When") or \
|
|
182
|
+
each_line.startswith(" Then"):
|
|
183
|
+
if each_line.startswith(" Then"):
|
|
184
|
+
just_saw_then = True
|
|
185
|
+
each_line = tab + tab + each_line
|
|
186
|
+
|
|
187
|
+
each_line = each_line[:-1]
|
|
188
|
+
debug_loc = each_line.find(behave_debug_info)
|
|
189
|
+
if debug_loc > 0:
|
|
190
|
+
each_line = each_line[0 : debug_loc]
|
|
191
|
+
each_line = each_line.rstrip()
|
|
192
|
+
if "Scenario" in each_line:
|
|
193
|
+
current_scenario = each_line[18:]
|
|
194
|
+
wiki_data.append(" ")
|
|
195
|
+
wiki_data.append(" ")
|
|
196
|
+
wiki_data.append("### " + each_line[8:])
|
|
197
|
+
|
|
198
|
+
each_line = each_line + " " # wiki for "new line"
|
|
199
|
+
|
|
200
|
+
wiki_data.append(each_line)
|
|
201
|
+
|
|
202
|
+
with open(wiki, 'w') as rpt:
|
|
203
|
+
rpt.write('\n'.join(wiki_data))
|
|
204
|
+
wiki_full_path = Path(wiki).absolute()
|
|
205
|
+
print(f'Wiki Output: {wiki_full_path}\n\n')
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def print_args(args, msg):
|
|
210
|
+
print(msg)
|
|
211
|
+
for each_arg in args:
|
|
212
|
+
print(f' {each_arg}')
|
|
213
|
+
print(" ")
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
@click.group()
|
|
217
|
+
@click.pass_context
|
|
218
|
+
def cli(ctx):
|
|
219
|
+
"""
|
|
220
|
+
Combine behave.log and scenario_logic_logs to create Behave Logic Report
|
|
221
|
+
|
|
222
|
+
"""
|
|
223
|
+
pass
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
@cli.command("run")
|
|
227
|
+
@click.pass_context
|
|
228
|
+
@click.option('--behave_log',
|
|
229
|
+
default=f'logs/behave.log', # cwd set to test/api_logic_server_behave
|
|
230
|
+
# prompt="Log from behave test suite run [behave.log]",
|
|
231
|
+
help="Help")
|
|
232
|
+
@click.option('--scenario_logs',
|
|
233
|
+
default=f'logs/scenario_logic_logs',
|
|
234
|
+
# prompt="Logic Log directory from ",
|
|
235
|
+
help="Help")
|
|
236
|
+
@click.option('--wiki',
|
|
237
|
+
default=f'reports/Behave Logic Report.md',
|
|
238
|
+
# prompt="Log from behave test suite run [api_logic_server_behave]",
|
|
239
|
+
help="Help")
|
|
240
|
+
@click.option('--prepend_wiki',
|
|
241
|
+
default=f'reports/Behave Logic Report Intro micro.md',
|
|
242
|
+
# prompt="Log from behave test suite run [Behave Logic Report Intro]",
|
|
243
|
+
help="Help")
|
|
244
|
+
def run(ctx, behave_log: str, scenario_logs: str, wiki: str, prepend_wiki: str):
|
|
245
|
+
main(behave_log = behave_log, scenario_logs = scenario_logs, wiki = wiki, prepend_wiki = prepend_wiki)
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
if __name__ == '__main__': # debugger & python command line start here
|
|
249
|
+
# eg: python api_logic_server_cli/cli.py create --project_name=~/Desktop/test_project
|
|
250
|
+
# unix: python api_logic_server_cli/cli.py create --project_name=/home/ApiLogicProject
|
|
251
|
+
|
|
252
|
+
print(f'\nBehave Logic Report 1.1, started at {os.getcwd()}')
|
|
253
|
+
commands = sys.argv
|
|
254
|
+
if len(sys.argv) > 1:
|
|
255
|
+
print_args(commands, f'\n\nCommand Line Arguments:')
|
|
256
|
+
cli()
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## Northwind Sample
|
|
2
|
+
|
|
3
|
+
This is the sample project from API Logic Server, based on the [Northwind database](https://apilogicserver.github.io/Docs/Sample-Database/) (sqlite database located in the `database` folder - no installation required):
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
>
|
|
8
|
+
|
|
9
|
+
The sample Scenarios below were chosen to illustrate the basic patterns of using
|
|
10
|
+
rules. Open the disclosure box ("Tests - and their logic...") to see the implementation and notes.
|
|
11
|
+
|
|
12
|
+
The following report was created during test suite execution.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# Behave Logic Report
|
|
17
|
+
|
api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/reports/Behave Logic Report Intro.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## Northwind Sample
|
|
2
|
+
|
|
3
|
+
This is the sample project from API Logic Server, based on the [Northwind database](https://apilogicserver.github.io/Docs/Sample-Database/) (sqlite database located in the `database` folder - no installation required):
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
>
|
|
8
|
+
|
|
9
|
+
The sample Scenarios below were chosen to illustrate the basic patterns of using
|
|
10
|
+
rules. Open the disclosure box ("Tests - and their logic...") to see the implementation and notes.
|
|
11
|
+
|
|
12
|
+
The following report was created during test suite execution.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# Behave Logic Report
|
|
17
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ApiLogicServer
|
|
3
|
-
Version: 15.2.
|
|
3
|
+
Version: 15.2.3
|
|
4
4
|
Author-email: Val Huber <apilogicserver@gmail.com>
|
|
5
5
|
License-Expression: BSD-3-Clause
|
|
6
6
|
Project-URL: Homepage, https://www.genai-logic.com
|
|
@@ -83,7 +83,7 @@ Dynamic: license-file
|
|
|
83
83
|
[](https://pypi.python.org/pypi/apilogicserver/)
|
|
84
84
|
[](https://pypi.python.org/pypi/apilogicserver/)
|
|
85
85
|
|
|
86
|
-
**
|
|
86
|
+
**Create instant microservices from your database or natural language prompt** - working API + Admin App + Logic in 5 seconds, with 40X code reduction through declarative rules.
|
|
87
87
|
|
|
88
88
|
Create **instant microservices** (MCP-enabled API + Admin App + Business Logic) from your database or a natural language prompt:
|
|
89
89
|
|
|
@@ -121,7 +121,7 @@ python api_logic_server_run.py
|
|
|
121
121
|
- 🔐 **Security** - Row-level authorization, JWT authentication
|
|
122
122
|
- 🐳 **Docker-ready** - Pre-configured containers for deployment
|
|
123
123
|
|
|
124
|
-
**[📖
|
|
124
|
+
**[📖 8-minute video demo](https://www.youtube.com/watch?v=Z4_NJIm5rFs&t=323s)** | **[📚 Full Documentation](https://apilogicserver.github.io/Docs/)** | **[🏠 Home](https://www.genai-logic.com)**
|
|
125
125
|
|
|
126
126
|
---
|
|
127
127
|
|
|
@@ -144,16 +144,68 @@ python api_logic_server_run.py
|
|
|
144
144
|
|
|
145
145
|
---
|
|
146
146
|
|
|
147
|
-
## 💡 Use
|
|
147
|
+
## 💡 When to Use API Logic Server
|
|
148
148
|
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
### ✅ Ideal Use Cases
|
|
150
|
+
|
|
151
|
+
API Logic Server excels at **data-centric business applications** where the complexity is in multi-table calculations, constraints, and derivations:
|
|
152
|
+
|
|
153
|
+
- **🔌 Application Integration** - Instant APIs for legacy databases (modernization without rewrite)
|
|
154
|
+
- **⚡ Rapid Prototyping** - Working backend in minutes for validation
|
|
151
155
|
- **🤖 GenAI Backends** - Natural language → working microservice
|
|
152
156
|
- **🏢 Backoffice Apps** - Admin dashboards for data maintenance
|
|
153
157
|
- **🔗 Microservices** - Decompose monoliths with instant services
|
|
158
|
+
- **📊 Business Rule Automation** - Complex calculations, cascading updates, constraint checking
|
|
159
|
+
- **🔄 CRUD-Heavy Applications** - Order management, inventory, customer systems
|
|
160
|
+
- **🏛️ Legacy Modernization** - MCP-enable existing databases, create modern API layer while legacy apps continue running
|
|
161
|
+
|
|
162
|
+
**Sweet Spot:** Applications where business logic complexity >> UI complexity
|
|
163
|
+
|
|
164
|
+
### ⚠️ Not Recommended For
|
|
165
|
+
|
|
166
|
+
API Logic Server is optimized for data-centric business logic, but **less suited** for:
|
|
167
|
+
|
|
168
|
+
- **Real-time streaming systems** - Use Kafka/Flink for high-throughput event processing
|
|
169
|
+
- **Complex UI/UX interactions** - Works great as the backend, but not a UI framework
|
|
170
|
+
- **Machine learning pipelines** - Use TensorFlow/PyTorch for ML workflows
|
|
171
|
+
- **Low-level system programming** - Traditional languages better suited
|
|
172
|
+
- **Document/content management** - Use specialized CMS platforms
|
|
173
|
+
- **Simple static websites** - Overkill for basic content delivery
|
|
174
|
+
|
|
175
|
+
**For these scenarios, traditional approaches are more appropriate.** API Logic Server can still serve as the backend for hybrid architectures.
|
|
154
176
|
|
|
155
177
|
---
|
|
156
178
|
|
|
179
|
+
|
|
180
|
+
## ❓ Frequently Asked Questions
|
|
181
|
+
|
|
182
|
+
**Q: How is this different from low-code platforms (Retool, OutSystems, Hasura)?**
|
|
183
|
+
|
|
184
|
+
A: Unlike pure low-code platforms, API Logic Server generates **standard Python projects you own, extend and deploy**. Screen creation is by vibe tools rather than screen painting. Unlike API generators, it includes sophisticated multi-table logic automation (40X code reduction). **[Read detailed comparison →](https://medium.com/@valjhuber/declarative-genai-the-architecture-behind-enterprise-vibe-automation-1b8a4fe4fbd7)**
|
|
185
|
+
|
|
186
|
+
**Q: Isn't this just vendor lock-in?**
|
|
187
|
+
|
|
188
|
+
A: It's **free and open source**. The declarative rules sit on top of standard (readable, version-controlled) Python — you can always drop down to procedural code. If you ever need to migrate away, you can either keep using the rules engine (it's just a library) or replace declarative rules with equivalent procedural code using standard SQLAlchemy events.
|
|
189
|
+
|
|
190
|
+
**Q: Can I customize the generated app?**
|
|
191
|
+
|
|
192
|
+
A: **Absolutely.** You can override the UI, extend APIs, and plug in your own logic — using standard Python, SQLAlchemy, and any Vibe tool. The generated project is a starting point, not a black box. **[See customization patterns →](https://apilogicserver.github.io/Docs/Logic/)**
|
|
193
|
+
|
|
194
|
+
**Q: What happens when logic doesn't fit the declarative model?**
|
|
195
|
+
|
|
196
|
+
A: The declarative engine handles **over 95%** of typical business logic (calculations, validations, cascading updates). For complex workflows, state machines, or external integrations, you write standard Python event handlers that coexist with declarative rules. The engine calls your code at the right time — no conflict, full extensibility.
|
|
197
|
+
|
|
198
|
+
**Q: How long does it take developers to become productive?**
|
|
199
|
+
|
|
200
|
+
A: Developers can start writing rules immediately using natural language, and the DSL syntax is intuitive. Understanding the engine's optimization strategies (pruning, chaining) takes a few days of practice. **Most teams are fully productive within a week.**
|
|
201
|
+
|
|
202
|
+
**Q: What if I have questions or need help?**
|
|
203
|
+
|
|
204
|
+
A: Join our **[Discord community](https://discord.gg/fNRTTVFT)** for real-time help, check **[GitHub Discussions](https://github.com/ApiLogicServer/ApiLogicServer-src/discussions)**, or browse the **[comprehensive documentation](https://apilogicserver.github.io/Docs/)**.
|
|
205
|
+
|
|
206
|
+
**[→ More FAQs in detailed article](https://medium.com/@valjhuber/declarative-genai-the-architecture-behind-enterprise-vibe-automation-1b8a4fe4fbd7#faqs)**
|
|
207
|
+
|
|
208
|
+
---
|
|
157
209
|
## 🏗️ Architecture
|
|
158
210
|
|
|
159
211
|
```
|
|
@@ -302,11 +354,11 @@ python behave_logic_report.py
|
|
|
302
354
|
|
|
303
355
|
---
|
|
304
356
|
|
|
305
|
-
## 🎬 Video Overview (
|
|
357
|
+
## 🎬 Video Overview (8 min)
|
|
306
358
|
|
|
307
359
|
See how **Microservice Automation** creates and runs a microservice - a multi-page app and an API:
|
|
308
360
|
|
|
309
|
-
[](https://www.youtube.com/watch?v=
|
|
361
|
+
[](https://www.youtube.com/watch?v=Z4_NJIm5rFs&t=323s "Microservice Automation")
|
|
310
362
|
|
|
311
363
|
---
|
|
312
364
|
|
|
@@ -485,6 +537,25 @@ Built on the shoulders of giants:
|
|
|
485
537
|
|
|
486
538
|
---
|
|
487
539
|
|
|
540
|
+
|
|
541
|
+
## 📝 In-Depth Articles
|
|
542
|
+
|
|
543
|
+
These Medium articles provide comprehensive context on architecture, use cases, and the reasoning behind API Logic Server:
|
|
544
|
+
|
|
545
|
+
| Article | Topic | Key Insights |
|
|
546
|
+
|---------|-------|--------------|
|
|
547
|
+
| **[Welcome to GenAI-Logic](https://medium.com/@valjhuber/welcome-to-genai-logic-a610ba14bd72)** | Vision & Overview | Big picture: Does GenAI deliver business agility? Start here for context. |
|
|
548
|
+
| **[Declarative GenAI Architecture](https://medium.com/@valjhuber/declarative-genai-the-architecture-behind-enterprise-vibe-automation-1b8a4fe4fbd7)** | Technical Deep Dive | NL → DSL → Engines pattern, FrankenCode problem, **includes FAQ section** |
|
|
549
|
+
| **[Declarative Logic: Living in a Procedural World](https://medium.com/@valjhuber/declarative-logic-living-in-a-procedural-world-6c5b20552c6b)** | Architecture Philosophy | How declarative rules work in Python, the paradox resolved |
|
|
550
|
+
| **[Living With Logic in the Enterprise](https://medium.com/@valjhuber/living-with-logic-7e202782d0c5)** | Production Patterns | Debugging, testing, performance, customization in real deployments |
|
|
551
|
+
| **[Business User / IT Collaboration](https://medium.com/@valjhuber/declarative-genai-business-user-it-collaboration-c5547776ff7d)** | Team Dynamics | How logic acts as a contract between business and IT |
|
|
552
|
+
| **[Vibe an MCP Server](https://medium.com/@valjhuber/vibe-an-mcp-server-declarative-genai-logic-dec16719c004)** | MCP Integration | Creating MCP-enabled services with natural language |
|
|
553
|
+
| **[Probabilistic and Deterministic Logic](https://medium.com/@valjhuber/probabilistic-and-deterministic-logic-9a38f98d24a8)** | AI + Rules | Engineering reliability into agentic systems (AI at runtime + rules) |
|
|
554
|
+
| **[Enterprise Vibe Automation](https://medium.com/@valjhuber/enterprise-vibe-automation-b40c8f750a1d)** | GenAI Workflows | Full-stack automation from prompts |
|
|
555
|
+
|
|
556
|
+
**These articles represent significant research and real-world experience** - they address common questions, architectural decisions, and lessons learned from 40+ years of declarative technology evolution.
|
|
557
|
+
|
|
558
|
+
---
|
|
488
559
|
## 📞 Connect
|
|
489
560
|
|
|
490
561
|
- **🏠 Home:** [genai-logic.com](https://www.genai-logic.com)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
api_logic_server_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
api_logic_server_cli/api_logic_server.py,sha256
|
|
2
|
+
api_logic_server_cli/api_logic_server.py,sha256=ebZHYYBPIJWMjw5kyuVeIRPXyc4US-I3y8U_SU1Hb_0,104501
|
|
3
3
|
api_logic_server_cli/api_logic_server_info.yaml,sha256=xwH5ENyjrlv3XbKx7IaY2iaF0Cc4zHi3x7qtpEWTzBI,139
|
|
4
4
|
api_logic_server_cli/cli.py,sha256=xAqTOhq-OnXU2HEQgzsGC9yKrGcAgKUt_8b9U2bV5No,87831
|
|
5
5
|
api_logic_server_cli/cli_args_base.py,sha256=7cVM6BeizwttYAwUu1FUyuLuvWufvgt0TFeA8FI6tu0,3304
|
|
@@ -423,8 +423,7 @@ api_logic_server_cli/prototypes/base/.devcontainer-option/For_VSCode.dockerfile,
|
|
|
423
423
|
api_logic_server_cli/prototypes/base/.devcontainer-option/devcontainer.json,sha256=tk-mGd4XdmbpKUqUeGmcPMzX3RDc6am9-de8c-rFmSo,2361
|
|
424
424
|
api_logic_server_cli/prototypes/base/.devcontainer-option/readme.md,sha256=-sSneMDne1fqEoox2hXUGmoO8ewgi34y7lJwGTidSpY,104
|
|
425
425
|
api_logic_server_cli/prototypes/base/.devcontainer-option/setup.sh,sha256=pOvGjZ7jgRQzFkD93mNICmcC2y66Dexrq4bCnSSVwtU,310
|
|
426
|
-
api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md,sha256=
|
|
427
|
-
api_logic_server_cli/prototypes/base/.github/.copilot-instructionsZ.mdx,sha256=KSwjZ6Mh3lmbh0-OfFDmdTKw_C8O7OFskrcbRBCUB98,29874
|
|
426
|
+
api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md,sha256=rUxVk-srt1BXmzIkF10tlrrMvL7by5sDrpJKj84vym4,34002
|
|
428
427
|
api_logic_server_cli/prototypes/base/.idea/runConfigurations/ApiLogicServer.xml,sha256=eFzhe9NH-VNjcPWbPsRQy5o-MugJR9IWklA1Fo8wtYg,1127
|
|
429
428
|
api_logic_server_cli/prototypes/base/.idea/runConfigurations/Report_Behave_Logic.xml,sha256=I3jlEf-TPzc-1NY843v6AcQIQ8QJD3z9KvxTYSZWMtY,1306
|
|
430
429
|
api_logic_server_cli/prototypes/base/.idea/runConfigurations/Run_Behave.xml,sha256=CTzF0P4w7o4FzOi-eSpru0HczSEGtJsKqkQ7VWRyxPc,1196
|
|
@@ -535,7 +534,7 @@ api_logic_server_cli/prototypes/base/docs/training/logic_example.py,sha256=yAot6
|
|
|
535
534
|
api_logic_server_cli/prototypes/base/docs/training/react_map.prompt.md,sha256=8B9bDjk4sL1t5LzYLKjuf78UPDmhj9assRZTIOvlwN4,891
|
|
536
535
|
api_logic_server_cli/prototypes/base/docs/training/react_tree.prompt.md,sha256=Eoi4Q3H4x-PQOjonUjQ1o6xkiFtcEA_hg8tuFP-qk80,652
|
|
537
536
|
api_logic_server_cli/prototypes/base/docs/training/readme_training.md,sha256=EilDTYaDPoGCD9ef5Efs8eDn8ZNQTgGN7_QnJ4LrO2s,120
|
|
538
|
-
api_logic_server_cli/prototypes/base/docs/training/testing.md,sha256=
|
|
537
|
+
api_logic_server_cli/prototypes/base/docs/training/testing.md,sha256=embArgUMijhQbVSmBpEW9TCEXBpE9evAt7qJSOP7qmA,28556
|
|
539
538
|
api_logic_server_cli/prototypes/base/integration/kafka/kafka_consumer.py,sha256=2DOsFpYnsJ71gZzzfJweEmL-i99uCtEFU0hVwIKFGMw,1516
|
|
540
539
|
api_logic_server_cli/prototypes/base/integration/kafka/kafka_producer.py,sha256=g0nMAVfz1Y0iKJbbXfvRpdf-QUmyB4uUGZ6lyaVoXag,4470
|
|
541
540
|
api_logic_server_cli/prototypes/base/integration/kafka/kafka_readme.md,sha256=MlwykHWM2w41KzWh4vPuTnIodR8f-BQzrWpV4P1hrsI,161
|
|
@@ -576,7 +575,8 @@ api_logic_server_cli/prototypes/base/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-
|
|
|
576
575
|
api_logic_server_cli/prototypes/base/test/readme_test.md,sha256=9uvv3lR0UDNvtv-KrH82z_DWXYLElmUj0tl56MWJ2m8,17128
|
|
577
576
|
api_logic_server_cli/prototypes/base/test/api_logic_server_behave/AI-Generated-Tests-from-Rules.md,sha256=fwRmJ4VS8kZqBdpTUf_7acbXAx0ErRqZhtMpK6Rioqw,22131
|
|
578
577
|
api_logic_server_cli/prototypes/base/test/api_logic_server_behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
579
|
-
api_logic_server_cli/prototypes/base/test/api_logic_server_behave/behave_logic_report.py,sha256=
|
|
578
|
+
api_logic_server_cli/prototypes/base/test/api_logic_server_behave/behave_logic_report.py,sha256=H0F4xQR6wb2c-jTkSs91ruIEsXxlVFEZhItYA7wdFbY,12333
|
|
579
|
+
api_logic_server_cli/prototypes/base/test/api_logic_server_behave/behave_logic_report.py.bak,sha256=2rd4m5lmgMCRwEw5_ZSblyTySlMbnNPpR3Km6gsy0xY,11572
|
|
580
580
|
api_logic_server_cli/prototypes/base/test/api_logic_server_behave/behave_run.py,sha256=KvHQAlsyF2heBvoD6voAkhIVJXS1AAKaHEcw77AsD3Q,2429
|
|
581
581
|
api_logic_server_cli/prototypes/base/test/api_logic_server_behave/check_step_order.py,sha256=E0-hDVRlkC2Rgi-HiE9Sd2PCwlVwX3f13atMZX72fYg,4824
|
|
582
582
|
api_logic_server_cli/prototypes/base/test/api_logic_server_behave/features/about.feature,sha256=c7KDFyXpX_84n6JhUtGzruX-bwb1fxNyYD57ttyWpwA,414
|
|
@@ -630,6 +630,8 @@ api_logic_server_cli/prototypes/basic_demo/customizations/logic/declare_logic.py
|
|
|
630
630
|
api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/email_request.py,sha256=3UnBUBpHSThHHRLLJuV-sgRAs6sS-UCzsTjBzf0onns,1851
|
|
631
631
|
api_logic_server_cli/prototypes/basic_demo/customizations/logic/logic_discovery/simple_constraints.py,sha256=4HRLOXuLJP1eOosONeEtpA9DehxiZME0-FBKuG1RaI0,760
|
|
632
632
|
api_logic_server_cli/prototypes/basic_demo/customizations/security/declare_security.py,sha256=gbdH29cPY656lgROPm_w20Q-g6AhlIMES3wiIrqBTdk,2439
|
|
633
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md,sha256=zy5rlGweEfq5X2n6vh6ohBkPR6MX_eyJ15j0IcMzcZc,1222
|
|
634
|
+
api_logic_server_cli/prototypes/basic_demo/customizations/test/api_logic_server_behave/reports/Behave Logic Report Intro.md,sha256=UNf2_6RjMS6sFMrSa-GDydoTz5MoWN20rX6Z9_a5MB8,1258
|
|
633
635
|
api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/admin.yaml,sha256=t7NhcorYcJbox2Kk7Hb3RBWwVEyCcCzZfYx8rntE-yA,3293
|
|
634
636
|
api_logic_server_cli/prototypes/basic_demo/customizations/ui/admin/home.js,sha256=0YSOlZAyhYOm7eKSVRMspzEc_P7PO-lRaUurYGCqQ10,3371
|
|
635
637
|
api_logic_server_cli/prototypes/basic_demo/customizations/ui/reference_react_app/README.md,sha256=XZWAqxnRWxZ1yVS65g3j6etrcdxX1QDf2TZSms67Yd0,489
|
|
@@ -986,7 +988,7 @@ api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/training/
|
|
|
986
988
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/training/react_map.prompt.md,sha256=8B9bDjk4sL1t5LzYLKjuf78UPDmhj9assRZTIOvlwN4,891
|
|
987
989
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/training/react_tree.prompt.md,sha256=Eoi4Q3H4x-PQOjonUjQ1o6xkiFtcEA_hg8tuFP-qk80,652
|
|
988
990
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/training/readme_training.md,sha256=EilDTYaDPoGCD9ef5Efs8eDn8ZNQTgGN7_QnJ4LrO2s,120
|
|
989
|
-
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/training/testing.md,sha256=
|
|
991
|
+
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/training/testing.md,sha256=embArgUMijhQbVSmBpEW9TCEXBpE9evAt7qJSOP7qmA,28556
|
|
990
992
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/integration/kafka/kafka_consumer.py,sha256=2DOsFpYnsJ71gZzzfJweEmL-i99uCtEFU0hVwIKFGMw,1516
|
|
991
993
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/integration/kafka/kafka_producer.py,sha256=g0nMAVfz1Y0iKJbbXfvRpdf-QUmyB4uUGZ6lyaVoXag,4470
|
|
992
994
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/integration/kafka/kafka_readme.md,sha256=MlwykHWM2w41KzWh4vPuTnIodR8f-BQzrWpV4P1hrsI,161
|
|
@@ -1042,7 +1044,8 @@ api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/__init__.
|
|
|
1042
1044
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/readme_test.md,sha256=9uvv3lR0UDNvtv-KrH82z_DWXYLElmUj0tl56MWJ2m8,17128
|
|
1043
1045
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/AI-Generated-Tests-from-Rules.md,sha256=G09jLAapospjju7HohX_RgpKTHlit9kovgFM76XbMgo,22627
|
|
1044
1046
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1045
|
-
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/behave_logic_report.py,sha256=
|
|
1047
|
+
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/behave_logic_report.py,sha256=4pjKlLBsdzuFF-yh5VPmuoXfQHUsIuutY1_TogRRH9c,8922
|
|
1048
|
+
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/behave_logic_report.py.bak,sha256=dK0QZMi6ux3KVlwDQIht2_ww7YJHnocd4M2jtf9dvSU,11324
|
|
1046
1049
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/behave_run.py,sha256=KvHQAlsyF2heBvoD6voAkhIVJXS1AAKaHEcw77AsD3Q,2429
|
|
1047
1050
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/features/about.feature,sha256=c7KDFyXpX_84n6JhUtGzruX-bwb1fxNyYD57ttyWpwA,414
|
|
1048
1051
|
api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/features/order_processing.feature,sha256=KscQw3dUUFvXaGeZL2xs6CLtplf2-nwLH7_oDcDjumA,3077
|
|
@@ -1387,7 +1390,7 @@ api_logic_server_cli/prototypes/manager/samples/prompts/genai_demo.prompt,sha256
|
|
|
1387
1390
|
api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace,sha256=sfzw6ZW2eZHOJCKmTM3r-Kt_fE1KKArD9fk4TLI5xUY,329
|
|
1388
1391
|
api_logic_server_cli/prototypes/manager/system/readme_ssystem.md,sha256=52zXRh5KJ4GSRWyNLwzbXqKMDJmR7M6PhS71-DIUoBI,106
|
|
1389
1392
|
api_logic_server_cli/prototypes/manager/system/style-guide.yaml,sha256=JaP3NDE29k4_e9ELeLTZfnWf2L8VgS1X7hO8J_BNqJU,673
|
|
1390
|
-
api_logic_server_cli/prototypes/manager/system/ApiLogicServer-Internal-Dev/copilot-dev-context.md,sha256=
|
|
1393
|
+
api_logic_server_cli/prototypes/manager/system/ApiLogicServer-Internal-Dev/copilot-dev-context.md,sha256=bOLcRyfb5D8ta2NOfNZT22h25-gzNFlCY92o2rmfNSk,9816
|
|
1391
1394
|
api_logic_server_cli/prototypes/manager/system/ApiLogicServer-Internal-Dev/install-ApiLogicServer-dev.ps1,sha256=RBV9nGJZBkvCoH06UJ5o15Kmt5nIeLXeIvTCmpHLWXE,3433
|
|
1392
1395
|
api_logic_server_cli/prototypes/manager/system/ApiLogicServer-Internal-Dev/install-ApiLogicServer-dev.sh,sha256=zutEcQNZ1DX9gaUSRbsAcIClsy_a7inHWcb2dpcYgWY,3677
|
|
1393
1396
|
api_logic_server_cli/prototypes/manager/system/ApiLogicServer-Internal-Dev/readme.md,sha256=NSr2hEKT1XeFMzJ_x5vcbdEFZ4PJz_GobdjRg-TyLHU,206
|
|
@@ -1527,7 +1530,8 @@ api_logic_server_cli/prototypes/manager/system/app_model_editor/security/system/
|
|
|
1527
1530
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/security/system/custom_swagger.json,sha256=rq-W5pnAWKSms20TPqUw2rsXq8OJgoX7Cs1eV8xnbcU,1705
|
|
1528
1531
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1529
1532
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/test/api_logic_server_behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1530
|
-
api_logic_server_cli/prototypes/manager/system/app_model_editor/test/api_logic_server_behave/behave_logic_report.py,sha256=
|
|
1533
|
+
api_logic_server_cli/prototypes/manager/system/app_model_editor/test/api_logic_server_behave/behave_logic_report.py,sha256=T9wRh5eqGhsTIQDSawXbwg81PP9FilEDRkAd4B6nltk,8052
|
|
1534
|
+
api_logic_server_cli/prototypes/manager/system/app_model_editor/test/api_logic_server_behave/behave_logic_report.py.bak,sha256=tXH_AmStMMgObNpxtJkcZ3vPcGldTTV3iUeukdqP3DE,9969
|
|
1531
1535
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/test/api_logic_server_behave/behave_run.py,sha256=NaTK_X-9BljLQVqgIw2hB7jn-VilRB9DFRAh06TxVrE,1281
|
|
1532
1536
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/test/api_logic_server_behave/features/about.feature,sha256=c7KDFyXpX_84n6JhUtGzruX-bwb1fxNyYD57ttyWpwA,414
|
|
1533
1537
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/test/api_logic_server_behave/features/steps/about.py,sha256=Z6-JUv2-ANp04ctvEdylOXBW7PE1t9Ofhxb8UJRkJ_Y,465
|
|
@@ -2030,7 +2034,8 @@ api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_d
|
|
|
2030
2034
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/security/system/custom_swagger.json,sha256=rq-W5pnAWKSms20TPqUw2rsXq8OJgoX7Cs1eV8xnbcU,1705
|
|
2031
2035
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2032
2036
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2033
|
-
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/behave_logic_report.py,sha256=
|
|
2037
|
+
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/behave_logic_report.py,sha256=T9wRh5eqGhsTIQDSawXbwg81PP9FilEDRkAd4B6nltk,8052
|
|
2038
|
+
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/behave_logic_report.py.bak,sha256=tXH_AmStMMgObNpxtJkcZ3vPcGldTTV3iUeukdqP3DE,9969
|
|
2034
2039
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/behave_run.py,sha256=KvHQAlsyF2heBvoD6voAkhIVJXS1AAKaHEcw77AsD3Q,2429
|
|
2035
2040
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/features/about.feature,sha256=c7KDFyXpX_84n6JhUtGzruX-bwb1fxNyYD57ttyWpwA,414
|
|
2036
2041
|
api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/test/api_logic_server_behave/features/steps/about.py,sha256=Z6-JUv2-ANp04ctvEdylOXBW7PE1t9Ofhxb8UJRkJ_Y,465
|
|
@@ -2465,6 +2470,8 @@ api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/features/steps/p
|
|
|
2465
2470
|
api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/features/steps/salary_change.py,sha256=ge6XE5iR33PkpX9HyTeN63ztObl3WLFuEQze94WH9I8,5031
|
|
2466
2471
|
api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/features/steps/test_utils.py,sha256=5NTKwf0ZFXE10Q3FVIWL6VKQd8ISG_6FwSWXRBONQ70,4779
|
|
2467
2472
|
api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/features/steps/tests_successful.py,sha256=A0KRSy6JUENefYzMOgeiSYbd7NzSkPObtZ3ppxcP9js,1513
|
|
2473
|
+
api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md,sha256=vHXrAJUASJX5kv-DpxYg6nPqIWLYxdmeD4LIdMwPhyc,612
|
|
2474
|
+
api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/reports/Behave Logic Report Intro.md,sha256=vHXrAJUASJX5kv-DpxYg6nPqIWLYxdmeD4LIdMwPhyc,612
|
|
2468
2475
|
api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/wip/espression_parser.py,sha256=2W9DFZ_EtTiEms-exBdLAqiosRbWb6dn5xYGqIb4BiE,5785
|
|
2469
2476
|
api_logic_server_cli/prototypes/nw/test/api_logic_server_behave/wip/expression_parser.feature,sha256=cQmyCXCjSs_8wcvSxyf0czDOtzLPwG_zfx-M_DurGMY,1022
|
|
2470
2477
|
api_logic_server_cli/prototypes/nw/test/basic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -2849,9 +2856,9 @@ api_logic_server_cli/tools/mini_skel/database/system/SAFRSBaseX.py,sha256=p8C7AF
|
|
|
2849
2856
|
api_logic_server_cli/tools/mini_skel/database/system/TestDataBase.py,sha256=U02SYqThsbY5g3DX7XGaiMxjZBuOpzvtPS6RfI1WQFg,371
|
|
2850
2857
|
api_logic_server_cli/tools/mini_skel/logic/declare_logic.py,sha256=fTrlHyqMeZsw_TyEXFa1VlYBL7fzjZab5ONSXO7aApo,175
|
|
2851
2858
|
api_logic_server_cli/tools/mini_skel/logic/load_verify_rules.py,sha256=Rr5bySJpYCZmNPF2h-phcPJ53nAOPcT_ohZpCD93-a0,7530
|
|
2852
|
-
apilogicserver-15.2.
|
|
2853
|
-
apilogicserver-15.2.
|
|
2854
|
-
apilogicserver-15.2.
|
|
2855
|
-
apilogicserver-15.2.
|
|
2856
|
-
apilogicserver-15.2.
|
|
2857
|
-
apilogicserver-15.2.
|
|
2859
|
+
apilogicserver-15.2.3.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
|
|
2860
|
+
apilogicserver-15.2.3.dist-info/METADATA,sha256=Z-Y8Zyr4rStFTN6ivyP4FoYZiRyapwqRvt4bMuvgYUs,25085
|
|
2861
|
+
apilogicserver-15.2.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
2862
|
+
apilogicserver-15.2.3.dist-info/entry_points.txt,sha256=W9EVNvf09h8n6rJChmVj2gzxVQ6BXXZa2x3wri0lFGc,259
|
|
2863
|
+
apilogicserver-15.2.3.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
|
|
2864
|
+
apilogicserver-15.2.3.dist-info/RECORD,,
|