ApiLogicServer 15.1.0__py3-none-any.whl → 15.1.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.
@@ -8,13 +8,15 @@ ApiLogicServer CLI: given a database url, create [and run] customizable ApiLogic
8
8
  * api/expose_api_models.py for a safrs api - using introspected models.py
9
9
  * Special provisions for NW Sample, to show customizations.
10
10
  * See end for key_module_map() quick links
11
- ;
11
+
12
12
  Called from api_logic_server_cli.py, by instantiating the ProjectRun object.
13
13
  '''
14
14
 
15
- __version__ = "15.01.00" # last public release: 15.00.65
15
+ __version__ = "15.01.03" # last public release: 15.00.65
16
16
  recent_changes = \
17
17
  f'\n\nRecent Changes:\n' +\
18
+ "\t08/17/2024 - 15.01.03: LogicBanl 01.30, with fix for copy_children[19] \n"\
19
+ "\t08/13/2024 - 15.01.02: Id vs ID in codegen (parent_accessor_from_fk: [#100]), pyodbc fix in blt \n"\
18
20
  "\t08/09/2024 - 15.01.00: improved vibe instructions \n"\
19
21
  "\t08/06/2024 - 15.00.65: instructions for custom API endpoints, behave testing \n"\
20
22
  "\t07/20/2024 - 15.00.52: Python 3.13 compatibility fixes - psycopg2→psycopg3, SQLAlchemy 2.0+, pkg_resources→importlib.metadata. mgr dbs \n"\
@@ -1,3 +1,3 @@
1
- last_created_date: August 06, 2025 17:34:43
2
- last_created_project_name: ../../../servers/basic_demo
3
- last_created_version: 15.00.65
1
+ last_created_date: August 13, 2025 16:33:18
2
+ last_created_project_name: /Users/val/dev/ApiLogicServer/ApiLogicServer-dev/org_git/ApiLogicServer-src/../../build_and_test/ApiLogicServer/airport10_multi_reln
3
+ last_created_version: 15.01.02
@@ -848,7 +848,7 @@ class ModelCreationServices(object):
848
848
  resource_attribute = ResourceAttribute(each_attribute=each_attribute,
849
849
  resource=resource, resource_class=resource_class)
850
850
  resource.compute_primary_key(metadata=self.metadata, resource_class=resource_class)
851
- for rel_name, rel in resource_class._s_relationships.items():
851
+ for rel_name, rel in resource_class._s_relationships.items(): # no property Staff1
852
852
  # relation = {}
853
853
  # relation["direction"] = "toone" if rel.direction == MANYTOONE else "tomany"
854
854
  if rel.direction == ONETOMANY: # process only parents of this child
@@ -1,4 +1,4 @@
1
- # API Logic Server - Auto-Generated Microservice
1
+ # GenAI-Logic API Logic Server - Auto-Generated Microservice
2
2
 
3
3
  **🎯 What's Automatically Created:**
4
4
  - ✅ **Admin Web App** - Multi-page React app at `http://localhost:5656`
@@ -463,7 +463,9 @@ class ManyToOneRelationship(Relationship):
463
463
 
464
464
  if child_cls in ['Flight', 'Employee', 'TabGroup', 'CharacterClass'] and \
465
465
  parent_cls in ['Airport', 'Department', 'Entity', 'Class']:
466
- debug_stop = "interesting breakpoint" # Launch config 8... -- Create servers/airport from MODEL
466
+ debug_stop = "interesting breakpoint"
467
+ # Launch config 8... -- Create servers/airport from MODEL
468
+ # Launch config 5... -- Create OUKashrusSystem (Id *and* ID)
467
469
  column_names = _get_column_names(constraint)
468
470
  colname = column_names[0]
469
471
  tablename = constraint.elements[0].column.table.name
@@ -473,11 +475,11 @@ class ManyToOneRelationship(Relationship):
473
475
  if len(column_names) > 1 : # multi-column - use tablename
474
476
  self.preferred_name = inflect_engine.singular_noun(tablename) or tablename
475
477
  else: # single column - use column name but without '_id'
476
- if ( colname.endswith('_id') or colname.endswith('_Id') ): # eg arrival_airport_id
478
+ if ( colname.endswith('_id') or colname.endswith('_Id') or colname.endswith('_ID') ): # eg arrival_airport_id
477
479
  self.preferred_name = colname[:-3]
478
480
  parent_accessor_from_fk = True
479
481
  pass # TODO - alert: can "lowercase" parent accessor (see classic models employee )
480
- elif ( colname.endswith('id') or colname.endswith('Id') ): # eg WorksForDepartmentId
482
+ elif ( colname.endswith('id') or colname.endswith('Id') or colname.endswith('ID') ): # eg WorksForDepartmentId
481
483
  self.preferred_name = colname[:-2]
482
484
  parent_accessor_from_fk = True
483
485
  else:
@@ -494,7 +496,7 @@ class ManyToOneRelationship(Relationship):
494
496
  # Handle self referential relationships
495
497
  if child_cls == parent_cls:
496
498
  # self.preferred_name = 'parent' if not colname.endswith('_id') else colname[:-3]
497
- if colname.endswith("id") or colname.endswith("Id"):
499
+ if colname.endswith("id") or colname.endswith("Id")or colname.endswith("ID"):
498
500
  self.preferred_name = colname[:-2]
499
501
  else:
500
502
  self.preferred_name = "parent" # hmm, why not just table name
@@ -531,6 +533,7 @@ class ManyToOneRelationship(Relationship):
531
533
 
532
534
  if multi_reln_count > 0: # disambiguate multi_reln between same 2 tables (tricky!)
533
535
  # key cases are nw (Dept/Employee) and ai/airport (Flight/Airport) and app_model_editor (Entity/TabGroup)
536
+ # https://apilogicserver.github.io/Docs/Data-Model-Classes/#multi-reln
534
537
  if parent_accessor_from_fk:
535
538
  pass # parent_accessor_name is already unique (eg, Employee.WorksForDepartment)
536
539
  self.child_accessor_name += str(multi_reln_count)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ApiLogicServer
3
- Version: 15.1.0
3
+ Version: 15.1.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
@@ -48,7 +48,7 @@ Requires-Dist: Flask-Login==0.6.2
48
48
  Requires-Dist: Flask-OpenID==1.3.0
49
49
  Requires-Dist: python-dotenv==0.15.0
50
50
  Requires-Dist: email-validator==1.1.1
51
- Requires-Dist: LogicBank>=1.20.26
51
+ Requires-Dist: LogicBank>=1.30.00
52
52
  Requires-Dist: cryptography==36.0.1
53
53
  Requires-Dist: rsa
54
54
  Requires-Dist: PyMySQL==1.0.3
@@ -1,6 +1,6 @@
1
1
  api_logic_server_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- api_logic_server_cli/api_logic_server.py,sha256=vyq0s5oHFG1wtkQ-dvvBRetrzuUxBrehF0upGnlfScw,104006
3
- api_logic_server_cli/api_logic_server_info.yaml,sha256=codSmeCvbx6BYgXBMYDFYrKxch-aImth3kxpwYOCHoo,130
2
+ api_logic_server_cli/api_logic_server.py,sha256=zp0DJWBVUPPrSLj8Ftn_tbC3_0ouZx54jeIVmHckt54,104196
3
+ api_logic_server_cli/api_logic_server_info.yaml,sha256=1nZB5njl0Ug0abJz_PQft7Jb9K6UVkkp3anYY0goMd8,235
4
4
  api_logic_server_cli/cli.py,sha256=tlFXb3c9X1RzJttSNjVW-6L5gwGgC2MK7HGWFZXA-QQ,87355
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
@@ -14,7 +14,7 @@ api_logic_server_cli/create_from_model/api_logic_server_utils.py,sha256=H0t_hpN6
14
14
  api_logic_server_cli/create_from_model/create_db_from_model.py,sha256=2H7slGnk39XOSnvL7vxrg6Ewx4bxeBJBgLo8fcXHTB4,4382
15
15
  api_logic_server_cli/create_from_model/dbml.py,sha256=m1yRnes5DXPMQrFBFJM2CuDhIfVFywSM6nDX7k19BLU,11573
16
16
  api_logic_server_cli/create_from_model/meta_model.py,sha256=bzkpaC0ePrxpAPiJGh5GbSrZ7N-DETL5eW6-LxcmOZs,5885
17
- api_logic_server_cli/create_from_model/model_creation_services.py,sha256=B86ljgUR98H_dCaxqiw-flrbvc05-XXtkC5It2BSezs,41479
17
+ api_logic_server_cli/create_from_model/model_creation_services.py,sha256=zzulZ91qWfhtIkdF3yDxoXKxRaZZDrbXzPwp6s9RHxg,41501
18
18
  api_logic_server_cli/create_from_model/ont_build.py,sha256=YRZutNtIFCuc1r73jSHJbDPtLTQZLoStCM9ShWyKG4g,67063
19
19
  api_logic_server_cli/create_from_model/ont_create.py,sha256=Zj9kGaJ_zWJ_0sdgbWKRhJOvlkI_Ktce3M7B5ZQ5_6o,16750
20
20
  api_logic_server_cli/create_from_model/ui_admin_creator.py,sha256=j1hZuHn70c4NA7l0zXH_PbcwH79FQPgkZh1qF_6sLyU,38071
@@ -414,7 +414,7 @@ api_logic_server_cli/prototypes/allocation/logic/declare_logic.py,sha256=Wqk1kpu
414
414
  api_logic_server_cli/prototypes/allocation/test/test.sh,sha256=ndw_D7IOFTEUZxbcOL5Y-spvF8pJCe8OOSroqBfjXPM,645
415
415
  api_logic_server_cli/prototypes/base/.gitignore,sha256=PAO98cVvjgAL_mvXCMS_Vfk7bT2Vd1-j9a8_nB2qxqs,190
416
416
  api_logic_server_cli/prototypes/base/api_logic_server_run.py,sha256=j4a0jwPn-USqkFrCiFI34TcCTHxNOnPAW-IwMtFGWcw,7074
417
- api_logic_server_cli/prototypes/base/readme.md,sha256=sh6S1RQbTNDssRK_EsLt_KRWRMTBJ7QxsCTMoLaAmzY,12672
417
+ api_logic_server_cli/prototypes/base/readme.md,sha256=FLj9PfIwBp_OBpx19MxhVgVC1Uh7_9C7WjPJTC4jZC0,12684
418
418
  api_logic_server_cli/prototypes/base/readme_project.md,sha256=sGJuNF_Qt5ripZBXfTi0OmoV4fUxe7ySxrqcKs7DwOk,1186
419
419
  api_logic_server_cli/prototypes/base/requirements.txt,sha256=we6X5fRBJVqN8SacwV7oPDtGk5IAiNbUDbUwCGHkCrc,107
420
420
  api_logic_server_cli/prototypes/base/run.ps1,sha256=lrZgw8SEntPam3ZYKVzsRo7rOKSGWqgO7qUNJ3CbP44,801
@@ -2734,7 +2734,7 @@ api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/setup.cfg,sha256=BmOXcaPR0F
2734
2734
  api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/setup.py,sha256=ekn0wq_leWEKgpvijFLI881EVokkaZZhfmZYSQIZquo,196
2735
2735
  api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/tox.ini,sha256=mVlmM_uI-7K4pLs-jBfu8ZOQpHwQj8fh7LogvwjXJyE,440
2736
2736
  api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2737
- api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/codegen.py,sha256=UPpZ8xySLZNwEC53nIuBbf93yY_lA0S3AhUNZWU2hLM,77569
2737
+ api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/codegen.py,sha256=3AwjNnHNuBG8sdvIM5Utwss_KbzUnmxoLUc0ydxbOeE,77820
2738
2738
  api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/main.py,sha256=BX0gX5e9n5MSzE2tr3O3yRmWuv55mjDI3Z2JSACrUd4,3840
2739
2739
  api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/als_safrs_310/delete_log.txt,sha256=gMkXWPBkd-jEb-P7UA8WkCnV8tAccBL-IhT41Jz5TRw,16390
2740
2740
  api_logic_server_cli/sqlacodegen_wrapper/sqlacodegen/sqlacodegen/als_safrs_310/notes.txt,sha256=6KP8dOvdWsIGrpRmaueXbo_ZpD-6Edz-pOfTE80cScA,3991
@@ -2769,9 +2769,9 @@ api_logic_server_cli/tools/mini_skel/database/system/SAFRSBaseX.py,sha256=p8C7AF
2769
2769
  api_logic_server_cli/tools/mini_skel/database/system/TestDataBase.py,sha256=U02SYqThsbY5g3DX7XGaiMxjZBuOpzvtPS6RfI1WQFg,371
2770
2770
  api_logic_server_cli/tools/mini_skel/logic/declare_logic.py,sha256=fTrlHyqMeZsw_TyEXFa1VlYBL7fzjZab5ONSXO7aApo,175
2771
2771
  api_logic_server_cli/tools/mini_skel/logic/load_verify_rules.py,sha256=Rr5bySJpYCZmNPF2h-phcPJ53nAOPcT_ohZpCD93-a0,7530
2772
- apilogicserver-15.1.0.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
2773
- apilogicserver-15.1.0.dist-info/METADATA,sha256=KSSsH4tuaUl3Zf4lP6etihhtEZiVSCVHR_wSRk5MP8U,6652
2774
- apilogicserver-15.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
2775
- apilogicserver-15.1.0.dist-info/entry_points.txt,sha256=W9EVNvf09h8n6rJChmVj2gzxVQ6BXXZa2x3wri0lFGc,259
2776
- apilogicserver-15.1.0.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
2777
- apilogicserver-15.1.0.dist-info/RECORD,,
2772
+ apilogicserver-15.1.3.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
2773
+ apilogicserver-15.1.3.dist-info/METADATA,sha256=r3GOiWkMsdgKriIk3qDTyB1nvmZ9PtWFiH2XG9ALpjo,6652
2774
+ apilogicserver-15.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
2775
+ apilogicserver-15.1.3.dist-info/entry_points.txt,sha256=W9EVNvf09h8n6rJChmVj2gzxVQ6BXXZa2x3wri0lFGc,259
2776
+ apilogicserver-15.1.3.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
2777
+ apilogicserver-15.1.3.dist-info/RECORD,,