ApiLogicServer 14.3.25__py3-none-any.whl → 14.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. api_logic_server_cli/api_logic_server.py +4 -14
  2. api_logic_server_cli/api_logic_server_info.yaml +3 -3
  3. api_logic_server_cli/cli.py +16 -7
  4. api_logic_server_cli/create_from_model/__pycache__/create_db_from_model.cpython-312.pyc +0 -0
  5. api_logic_server_cli/create_from_model/__pycache__/ont_build.cpython-312.pyc +0 -0
  6. api_logic_server_cli/create_from_model/__pycache__/ont_create.cpython-312.pyc +0 -0
  7. api_logic_server_cli/create_from_model/create_db_from_model.py +2 -0
  8. api_logic_server_cli/create_from_model/ont_build.py +19 -14
  9. api_logic_server_cli/create_from_model/ont_create.py +5 -5
  10. api_logic_server_cli/create_from_model/safrs-react-admin-npm-build/static/.DS_Store +0 -0
  11. api_logic_server_cli/database/nw-gold-fix.sql +62 -0
  12. api_logic_server_cli/database/nw-gold.sqlite +0 -0
  13. api_logic_server_cli/{prototypes/manager/webgenai → fragments}/docker-compose.yml +1 -1
  14. api_logic_server_cli/genai/genai.py +42 -11
  15. api_logic_server_cli/genai/genai_graphics.py +252 -38
  16. api_logic_server_cli/genai/genai_svcs.py +20 -12
  17. api_logic_server_cli/manager.py +19 -10
  18. api_logic_server_cli/prototypes/.DS_Store +0 -0
  19. api_logic_server_cli/prototypes/base/.DS_Store +0 -0
  20. api_logic_server_cli/prototypes/base/.vscode/launch.json +19 -0
  21. api_logic_server_cli/prototypes/base/api/expose_api_models.py +3 -1
  22. api_logic_server_cli/prototypes/base/api_logic_server_run.py +5 -2
  23. api_logic_server_cli/prototypes/base/config/activate_logicbank.py +1 -0
  24. api_logic_server_cli/prototypes/base/config/config.py +57 -14
  25. api_logic_server_cli/prototypes/base/config/logging.yml +1 -0
  26. api_logic_server_cli/prototypes/base/config/server_setup.py +33 -1
  27. api_logic_server_cli/prototypes/base/database/test_data/readme.md +3 -1
  28. api_logic_server_cli/prototypes/base/devops/docker-standard-image/docker-compose-standard-image.yml +7 -2
  29. api_logic_server_cli/prototypes/base/docs/training/logic_bank_api.prompt +314 -0
  30. api_logic_server_cli/prototypes/base/docs/training/logic_example.py +41 -0
  31. api_logic_server_cli/prototypes/base/integration/kafka/kafka_producer.py +7 -3
  32. api_logic_server_cli/prototypes/base/integration/system/FlaskKafka.py +5 -1
  33. api_logic_server_cli/prototypes/base/ui/templates/bar_chart.jinja +64 -0
  34. api_logic_server_cli/prototypes/genai_demo/ui/admin/admin.yaml +1 -1
  35. api_logic_server_cli/prototypes/manager/README.md +26 -4
  36. api_logic_server_cli/prototypes/manager/system/genai/.DS_Store +0 -0
  37. api_logic_server_cli/prototypes/manager/system/genai/examples/.DS_Store +0 -0
  38. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/.DS_Store +0 -0
  39. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.prompt +0 -10
  40. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.response_example +32 -10
  41. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/docs/002_create_db_models.prompt +4 -4
  42. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_docs_logic/docs/003_create_db_models.response +77 -47
  43. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_informal.prompt +1 -1
  44. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/dashboard_services.jinja +83 -0
  45. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/graphics_dashboard_WIP.py +34 -0
  46. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/{graphics_services.py → graphics_services_api_xxx.py} +0 -9
  47. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/graphics_services_db.jinja +46 -0
  48. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/graphics_services_db_each_method.jinja +36 -0
  49. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/graphics.prompt +7 -3
  50. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/response_format.prompt +8 -1
  51. api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/install-ApiLogicServer-dev.ps1 +100 -0
  52. api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/install-ApiLogicServer-dev.sh +116 -0
  53. api_logic_server_cli/prototypes/manager/system/install-ApiLogicServer-dev/readme.md +7 -0
  54. api_logic_server_cli/prototypes/manager/system/style-guide.yaml +2 -2
  55. api_logic_server_cli/prototypes/manager/webgenai/README.md +6 -0
  56. api_logic_server_cli/prototypes/nw/docs/graphics/count_orders_by_category.prompt +1 -0
  57. api_logic_server_cli/prototypes/nw/docs/graphics/order_count_by_month.prompt +1 -0
  58. api_logic_server_cli/prototypes/nw/docs/graphics/request copy.json +892 -0
  59. api_logic_server_cli/prototypes/nw/docs/graphics/request.json +6 -0
  60. api_logic_server_cli/prototypes/nw/docs/graphics/response.json +17 -0
  61. api_logic_server_cli/prototypes/nw/docs/graphics/response.yaml +59 -0
  62. api_logic_server_cli/prototypes/nw/docs/graphics/sales_by_category.prompt +1 -0
  63. api_logic_server_cli/prototypes/nw/ui/admin/home.js +5 -4
  64. api_logic_server_cli/prototypes/nw/ui/app_model_custom.yaml +851 -1082
  65. api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/count_orders_by_category.prompt +1 -0
  66. api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/sales_by_employee.prompt +1 -0
  67. api_logic_server_cli/prototypes/nw_no_cust/integration/mcp/1_langchain_loader.py +19 -0
  68. api_logic_server_cli/prototypes/nw_no_cust/integration/mcp/2_gpt_mcp_prompt.txt +19 -0
  69. api_logic_server_cli/prototypes/nw_no_cust/integration/mcp/3_executor_test_agent.py +38 -0
  70. api_logic_server_cli/prototypes/nw_no_cust/integration/mcp/README.md +17 -0
  71. api_logic_server_cli/prototypes/nw_no_cust/integration/mcp/resources/curl.txt +4 -0
  72. api_logic_server_cli/prototypes/nw_no_cust/integration/mcp/resources/nw_swagger_3.yaml +16660 -0
  73. api_logic_server_cli/prototypes/nw_no_cust/integration/mcp/run_executor.py +23 -0
  74. api_logic_server_cli/prototypes/ont_app/ontimize_seed/nginx/nginx.conf +2 -2
  75. api_logic_server_cli/prototypes/ont_app/ontimize_seed/package.json +6 -6
  76. api_logic_server_cli/prototypes/ont_app/ontimize_seed/src/app/app.config.ts +2 -1
  77. api_logic_server_cli/prototypes/ont_app/ontimize_seed/src/environments/environment.prod.ts +5 -5
  78. api_logic_server_cli/prototypes/ont_app/ontimize_seed/src/environments/environment.ts +5 -5
  79. api_logic_server_cli/prototypes/ont_app/templates/app_config.jinja +1 -1
  80. api_logic_server_cli/prototypes/ont_app/templates/detail_template.html +1 -1
  81. api_logic_server_cli/prototypes/ont_app/templates/new_template.html +16 -16
  82. apilogicserver-14.4.0.dist-info/METADATA +76 -0
  83. {apilogicserver-14.3.25.dist-info → apilogicserver-14.4.0.dist-info}/RECORD +87 -56
  84. {apilogicserver-14.3.25.dist-info → apilogicserver-14.4.0.dist-info}/WHEEL +1 -1
  85. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/service_template_jsonapi_rpc.jinja +0 -37
  86. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/service_template_unused.jinja +0 -38
  87. apilogicserver-14.3.25.dist-info/METADATA +0 -167
  88. {apilogicserver-14.3.25.dist-info → apilogicserver-14.4.0.dist-info}/entry_points.txt +0 -0
  89. {apilogicserver-14.3.25.dist-info → apilogicserver-14.4.0.dist-info}/licenses/LICENSE +0 -0
  90. {apilogicserver-14.3.25.dist-info → apilogicserver-14.4.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,6 @@
1
+ [
2
+ {
3
+ "role": "user",
4
+ "content": "You are a data modelling expert and python software architect who expands on user input ideas. \n\n<responseFormat>\nclass Rule(BaseModel):\n name: str\n description: str\n use_case: str # specified use case or requirement name (use 'General' if missing)\n entity: str # the entity being constrained or derived\n code: str # logicbank rule code\n \nclass Model(BaseModel):\n classname: str\n code: str # sqlalchemy model code\n sqlite_create: str # sqlite create table statement\n description: str\n name: str\n\nclass TestDataRow(BaseModel):\n test_data_row_variable: str # the Python test data row variable\n code: str # Python code to create a test data row instance\n\nclass Graphic(BaseModel):\n sqlalchemy_query: str # sqlalchemy query using group by, returns result = { \"result\": [ (\"name\", \"value\") ] }\n sql_query: str # sql query using group by, returns result = { \"result\": [ (\"name\", \"value\") ] }\n classes_used: str # comma-delimited list of classes used in sqlalchemy_query\n name: str # suggested Python name for sqlalchemy_query\n html_code: str # create a java script app to show a bar chart from sqlalchemy_query result\n\nclass WGResult(BaseModel): # must match system/genai/prompt_inserts/response_format.prompt\n # response: str # result\n models : List[Model] # list of sqlalchemy classes in the response\n rules : List[Rule] # list rule declarations\n graphics: List[Graphic] # list of Graphic objects\n test_data: str\n test_data_rows: List[TestDataRow] # list of test data rows\n test_data_sqlite: str # test data as sqlite INSERT statements\n name: str # suggest a short name for the project\n\nFormat the response as a WGResult.\n\n</responseFormat>\n\n\nCreate WGResult Graphics for prompts like 'graph sales by region'.\n * use 'sales by region' to create a WGResult Graphic.sqlalchemy_query\n * Be sure to use class names, not table names\n * for example, using Northwind:\n # SQLAlchemy query for Sales by Category\n sales_by_category = (\n session.query(\n Category.CategoryName,\n func.sum(OrderDetail.Quantity * OrderDetail.UnitPrice * (1 - OrderDetail.Discount)).label(\"TotalSales\")\n )\n .join(Product, category.Id == Product.CategoryId)\n .join(OrderDetail, Product.Id == OrderDetail.ProductId)\n .join(Order, OrderDetail.OrderId == Order.Id)\n .filter(Order.ShippedDate.isnot(None)) # Consider only shipped orders\n .group_by(Category.CategoryName)\n .order_by(func.sum(OrderDetail.Quantity * OrderDetail.UnitPrice * (1 - OrderDetail.Discount)).desc())\n )\n\n# coding: utf-8\n\nfrom sqlalchemy import DECIMAL, DateTime # API Logic Server GenAI assist\n\nfrom sqlalchemy import Boolean, Column, DECIMAL, Date, Double, ForeignKey, ForeignKeyConstraint, Integer, String, Table, Text, text\n\nfrom sqlalchemy.orm import relationship\n\nfrom sqlalchemy.ext.declarative import declarative_base\n\n\n\n########################################################################################################################\n\n# Classes describing database for SqlAlchemy ORM, initially created by schema introspection.\n\n#\n\n# Alter this file per your database maintenance policy\n\n# See https://apilogicserver.github.io/Docs/Project-Rebuild/#rebuilding\n\n#\n\n# Created: March 25, 2025 19:54:24\n\n# Database: sqlite:////Users/val/dev/ApiLogicServer/ApiLogicServer-dev/build_and_test/ApiLogicServer/samples/nw_sample_nocust/database/db.sqlite\n\n# Dialect: sqlite\n\n#\n\n# mypy: ignore-errors\n\n########################################################################################################################\n\n \n\nfrom database.system.SAFRSBaseX import SAFRSBaseX, TestBase\n\nfrom flask_login import UserMixin\n\nimport safrs, flask_sqlalchemy, os\n\nfrom safrs import jsonapi_attr\n\nfrom flask_sqlalchemy import SQLAlchemy\n\nfrom sqlalchemy.orm import relationship\n\nfrom sqlalchemy.orm import Mapped\n\nfrom sqlalchemy.sql.sqltypes import NullType\n\nfrom typing import List\n\n\n\ndb = SQLAlchemy() \n\nBase = declarative_base() # type: flask_sqlalchemy.model.DefaultMeta\n\nmetadata = Base.metadata\n\n\n\n#NullType = db.String # datatype fixup\n\n#TIMESTAMP= db.TIMESTAMP\n\n\n\nfrom sqlalchemy.dialects.sqlite import *\n\n\n\nif os.getenv('APILOGICPROJECT_NO_FLASK') is None or os.getenv('APILOGICPROJECT_NO_FLASK') == 'None':\n\n Base = SAFRSBaseX # enables rules to be used outside of Flask, e.g., test data loading\n\nelse:\n\n Base = TestBase # ensure proper types, so rules work for data loading\n\n print('*** Models.py Using TestBase ***')\n\n\n\n\n\n\n\nclass Category(Base): # type: ignore\n\n __tablename__ = 'CategoryTableNameTest'\n\n _s_collection_name = 'Category' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n CategoryName_ColumnName = Column(String(8000))\n\n Description = Column(String(8000))\n\n Client_id = Column(Integer)\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n\n\n\n\n\n\nclass Customer(Base): # type: ignore\n\n __tablename__ = 'Customer'\n\n _s_collection_name = 'Customer' # type: ignore\n\n\n\n Id = Column(String(8000), primary_key=True)\n\n CompanyName = Column(String(8000))\n\n ContactName = Column(String(8000))\n\n ContactTitle = Column(String(8000))\n\n Address = Column(String(8000))\n\n City = Column(String(8000))\n\n Region = Column(String(8000))\n\n PostalCode = Column(String(8000))\n\n Country = Column(String(8000))\n\n Phone = Column(String(8000))\n\n Fax = Column(String(8000))\n\n Balance : DECIMAL = Column(DECIMAL)\n\n CreditLimit : DECIMAL = Column(DECIMAL)\n\n OrderCount = Column(Integer, server_default=text(\"0\"))\n\n UnpaidOrderCount = Column(Integer, server_default=text(\"0\"))\n\n Client_id = Column(Integer)\n\n allow_client_generated_ids = True\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n OrderList : Mapped[List[\"Order\"]] = relationship(back_populates=\"Customer\")\n\n\n\n\n\n\n\nclass CustomerDemographic(Base): # type: ignore\n\n __tablename__ = 'CustomerDemographic'\n\n _s_collection_name = 'CustomerDemographic' # type: ignore\n\n\n\n Id = Column(String(8000), primary_key=True)\n\n CustomerDesc = Column(String(8000))\n\n allow_client_generated_ids = True\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n\n\n\n\n\n\nclass Department(Base): # type: ignore\n\n __tablename__ = 'Department'\n\n _s_collection_name = 'Department' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n DepartmentId = Column(ForeignKey('Department.Id'))\n\n DepartmentName = Column(String(100))\n\n SecurityLevel = Column(Integer, server_default=text(\"0\"))\n\n\n\n # parent relationships (access parent)\n\n Department : Mapped[\"Department\"] = relationship(remote_side=[Id], back_populates=(\"DepartmentList\"))\n\n\n\n # child relationships (access children)\n\n DepartmentList : Mapped[List[\"Department\"]] = relationship(back_populates=\"Department\")\n\n EmployeeList : Mapped[List[\"Employee\"]] = relationship(foreign_keys='[Employee.OnLoanDepartmentId]', back_populates=\"OnLoanDepartment\")\n\n WorksForEmployeeList : Mapped[List[\"Employee\"]] = relationship(foreign_keys='[Employee.WorksForDepartmentId]', back_populates=\"WorksForDepartment\")\n\n\n\n\n\n\n\nclass Location(Base): # type: ignore\n\n __tablename__ = 'Location'\n\n _s_collection_name = 'Location' # type: ignore\n\n\n\n country = Column(String(50), primary_key=True)\n\n city = Column(String(50), primary_key=True)\n\n notes = Column(String(256))\n\n allow_client_generated_ids = True\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n OrderList : Mapped[List[\"Order\"]] = relationship(back_populates=\"Location\")\n\n\n\n\n\n\n\nclass Product(Base): # type: ignore\n\n __tablename__ = 'Product'\n\n _s_collection_name = 'Product' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n ProductName = Column(String(8000))\n\n SupplierId = Column(Integer, nullable=False)\n\n CategoryId = Column(Integer, nullable=False)\n\n QuantityPerUnit = Column(String(8000))\n\n UnitPrice : DECIMAL = Column(DECIMAL, nullable=False)\n\n UnitsInStock = Column(Integer, nullable=False)\n\n UnitsOnOrder = Column(Integer, nullable=False)\n\n ReorderLevel = Column(Integer, nullable=False)\n\n Discontinued = Column(Integer, nullable=False)\n\n UnitsShipped = Column(Integer)\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n OrderDetailList : Mapped[List[\"OrderDetail\"]] = relationship(back_populates=\"Product\")\n\n\n\n\n\n\n\nt_ProductDetails_View = Table(\n\n 'ProductDetails_View', metadata,\n\n Column('Id', Integer),\n\n Column('ProductName', String(8000)),\n\n Column('SupplierId', Integer),\n\n Column('CategoryId', Integer),\n\n Column('QuantityPerUnit', String(8000)),\n\n Column('UnitPrice', DECIMAL),\n\n Column('UnitsInStock', Integer),\n\n Column('UnitsOnOrder', Integer),\n\n Column('ReorderLevel', Integer),\n\n Column('Discontinued', Integer),\n\n Column('UnitsShipped', Integer),\n\n Column('CategoryName_ColumnName', String(8000)),\n\n Column('CategoryDescription', String(8000)),\n\n Column('SupplierName', String(8000)),\n\n Column('SupplierRegion', String(8000))\n\n)\n\n\n\n\n\nclass Region(Base): # type: ignore\n\n __tablename__ = 'Region'\n\n _s_collection_name = 'Region' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n RegionDescription = Column(String(8000))\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n\n\n\n\n\n\nclass SampleDBVersion(Base): # type: ignore\n\n __tablename__ = 'SampleDBVersion'\n\n _s_collection_name = 'SampleDBVersion' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n Notes = Column(String(800))\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n\n\n\n\n\n\nclass Shipper(Base): # type: ignore\n\n __tablename__ = 'Shipper'\n\n _s_collection_name = 'Shipper' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n CompanyName = Column(String(8000))\n\n Phone = Column(String(8000))\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n\n\n\n\n\n\nclass Supplier(Base): # type: ignore\n\n __tablename__ = 'Supplier'\n\n _s_collection_name = 'Supplier' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n CompanyName = Column(String(8000))\n\n ContactName = Column(String(8000))\n\n ContactTitle = Column(String(8000))\n\n Address = Column(String(8000))\n\n City = Column(String(8000))\n\n Region = Column(String(8000))\n\n PostalCode = Column(String(8000))\n\n Country = Column(String(8000))\n\n Phone = Column(String(8000))\n\n Fax = Column(String(8000))\n\n HomePage = Column(String(8000))\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n\n\n\n\n\n\nclass Territory(Base): # type: ignore\n\n __tablename__ = 'Territory'\n\n _s_collection_name = 'Territory' # type: ignore\n\n\n\n Id = Column(String(8000), primary_key=True)\n\n TerritoryDescription = Column(String(8000))\n\n RegionId = Column(Integer, nullable=False)\n\n allow_client_generated_ids = True\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n EmployeeTerritoryList : Mapped[List[\"EmployeeTerritory\"]] = relationship(back_populates=\"Territory\")\n\n\n\n\n\n\n\nclass Union(Base): # type: ignore\n\n __tablename__ = 'Union'\n\n _s_collection_name = 'Union' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n Name = Column(String(80))\n\n\n\n # parent relationships (access parent)\n\n\n\n # child relationships (access children)\n\n EmployeeList : Mapped[List[\"Employee\"]] = relationship(back_populates=\"Union\")\n\n\n\n\n\n\n\nclass Employee(Base): # type: ignore\n\n __tablename__ = 'Employee'\n\n _s_collection_name = 'Employee' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n LastName = Column(String(8000))\n\n FirstName = Column(String(8000))\n\n Title = Column(String(8000))\n\n TitleOfCourtesy = Column(String(8000))\n\n BirthDate = Column(String(8000))\n\n HireDate = Column(String(8000))\n\n Address = Column(String(8000))\n\n City = Column(String(8000))\n\n Region = Column(String(8000))\n\n PostalCode = Column(String(8000))\n\n Country = Column(String(8000))\n\n HomePhone = Column(String(8000))\n\n Extension = Column(String(8000))\n\n Notes = Column(String(8000))\n\n ReportsTo = Column(Integer, index=True)\n\n PhotoPath = Column(String(8000))\n\n EmployeeType = Column(String(16), server_default=text(\"Salaried\"))\n\n Salary : DECIMAL = Column(DECIMAL)\n\n WorksForDepartmentId = Column(ForeignKey('Department.Id'))\n\n OnLoanDepartmentId = Column(ForeignKey('Department.Id'))\n\n UnionId = Column(ForeignKey('Union.Id'))\n\n Dues : DECIMAL = Column(DECIMAL)\n\n Email = Column(Text)\n\n\n\n # parent relationships (access parent)\n\n OnLoanDepartment : Mapped[\"Department\"] = relationship(foreign_keys='[Employee.OnLoanDepartmentId]', back_populates=(\"EmployeeList\"))\n\n Union : Mapped[\"Union\"] = relationship(back_populates=(\"EmployeeList\"))\n\n WorksForDepartment : Mapped[\"Department\"] = relationship(foreign_keys='[Employee.WorksForDepartmentId]', back_populates=(\"WorksForEmployeeList\"))\n\n\n\n # child relationships (access children)\n\n EmployeeAuditList : Mapped[List[\"EmployeeAudit\"]] = relationship(back_populates=\"Employee\")\n\n EmployeeTerritoryList : Mapped[List[\"EmployeeTerritory\"]] = relationship(back_populates=\"Employee\")\n\n OrderList : Mapped[List[\"Order\"]] = relationship(back_populates=\"Employee\")\n\n\n\n\n\n\n\nclass EmployeeAudit(Base): # type: ignore\n\n __tablename__ = 'EmployeeAudit'\n\n _s_collection_name = 'EmployeeAudit' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n Title = Column(String)\n\n Salary : DECIMAL = Column(DECIMAL)\n\n LastName = Column(String)\n\n FirstName = Column(String)\n\n EmployeeId = Column(ForeignKey('Employee.Id'))\n\n CreatedOn = Column(Text)\n\n UpdatedOn = Column(Text)\n\n CreatedBy = Column(Text)\n\n UpdatedBy = Column(Text)\n\n\n\n # parent relationships (access parent)\n\n Employee : Mapped[\"Employee\"] = relationship(back_populates=(\"EmployeeAuditList\"))\n\n\n\n # child relationships (access children)\n\n\n\n\n\n\n\nclass EmployeeTerritory(Base): # type: ignore\n\n __tablename__ = 'EmployeeTerritory'\n\n _s_collection_name = 'EmployeeTerritory' # type: ignore\n\n\n\n Id = Column(String(8000), primary_key=True)\n\n EmployeeId = Column(ForeignKey('Employee.Id'), nullable=False)\n\n TerritoryId = Column(ForeignKey('Territory.Id'))\n\n allow_client_generated_ids = True\n\n\n\n # parent relationships (access parent)\n\n Employee : Mapped[\"Employee\"] = relationship(back_populates=(\"EmployeeTerritoryList\"))\n\n Territory : Mapped[\"Territory\"] = relationship(back_populates=(\"EmployeeTerritoryList\"))\n\n\n\n # child relationships (access children)\n\n\n\n\n\n\n\nclass Order(Base): # type: ignore\n\n __tablename__ = 'Order'\n\n _s_collection_name = 'Order' # type: ignore\n\n __table_args__ = (\n\n ForeignKeyConstraint(['Country', 'City'], ['Location.country', 'Location.city']),\n\n )\n\n\n\n Id = Column(Integer, primary_key=True)\n\n CustomerId = Column(ForeignKey('Customer.Id'), nullable=False, index=True)\n\n EmployeeId = Column(ForeignKey('Employee.Id'), nullable=False, index=True)\n\n OrderDate = Column(String(8000))\n\n RequiredDate = Column(Date)\n\n ShippedDate = Column(String(8000))\n\n ShipVia = Column(Integer)\n\n Freight : DECIMAL = Column(DECIMAL, server_default=text(\"0\"))\n\n ShipName = Column(String(8000))\n\n ShipAddress = Column(String(8000))\n\n ShipCity = Column(String(8000))\n\n ShipRegion = Column(String(8000))\n\n ShipPostalCode = Column(String(8000))\n\n ShipCountry = Column(String(8000))\n\n AmountTotal : DECIMAL = Column(DECIMAL(10, 2))\n\n Country = Column(String(50))\n\n City = Column(String(50))\n\n Ready = Column(Boolean)\n\n OrderDetailCount = Column(Integer, server_default=text(\"0\"))\n\n CloneFromOrder = Column(ForeignKey('Order.Id'))\n\n\n\n # parent relationships (access parent)\n\n Order : Mapped[\"Order\"] = relationship(remote_side=[Id], back_populates=(\"OrderList\"))\n\n Location : Mapped[\"Location\"] = relationship(back_populates=(\"OrderList\"))\n\n Customer : Mapped[\"Customer\"] = relationship(back_populates=(\"OrderList\"))\n\n Employee : Mapped[\"Employee\"] = relationship(back_populates=(\"OrderList\"))\n\n\n\n # child relationships (access children)\n\n OrderList : Mapped[List[\"Order\"]] = relationship(back_populates=\"Order\")\n\n OrderDetailList : Mapped[List[\"OrderDetail\"]] = relationship(back_populates=\"Order\")\n\n\n\n\n\n\n\nclass OrderDetail(Base): # type: ignore\n\n __tablename__ = 'OrderDetail'\n\n _s_collection_name = 'OrderDetail' # type: ignore\n\n\n\n Id = Column(Integer, primary_key=True)\n\n OrderId = Column(ForeignKey('Order.Id'), nullable=False, index=True)\n\n ProductId = Column(ForeignKey('Product.Id'), nullable=False, index=True)\n\n UnitPrice : DECIMAL = Column(DECIMAL)\n\n Quantity = Column(Integer, server_default=text(\"1\"), nullable=False)\n\n Discount = Column(Double, server_default=text(\"0\"))\n\n Amount : DECIMAL = Column(DECIMAL)\n\n ShippedDate = Column(String(8000))\n\n\n\n # parent relationships (access parent)\n\n Order : Mapped[\"Order\"] = relationship(back_populates=(\"OrderDetailList\"))\n\n Product : Mapped[\"Product\"] = relationship(back_populates=(\"OrderDetailList\"))\n\n\n\n # child relationships (access children)\n\nGraph Sales by Category"
5
+ }
6
+ ]
@@ -0,0 +1,17 @@
1
+ {
2
+ "models": [],
3
+ "rules": [],
4
+ "graphics": [
5
+ {
6
+ "sqlalchemy_query": "sales_by_region = (\n session.query(\n Region.RegionDescription,\n func.sum(OrderDetail.Quantity * OrderDetail.UnitPrice * (1 - OrderDetail.Discount)).label(\"TotalSales\")\n )\n .join(Order, Order.ShipRegion == Region.RegionDescription)\n .join(OrderDetail, OrderDetail.OrderId == Order.Id)\n .filter(Order.ShippedDate.isnot(None)) # Consider only shipped orders\n .group_by(Region.RegionDescription)\n .order_by(func.sum(OrderDetail.Quantity * OrderDetail.UnitPrice * (1 - OrderDetail.Discount)).desc())\n)",
7
+ "sql_query": "SELECT Region.RegionDescription, SUM(OrderDetail.Quantity * OrderDetail.UnitPrice * (1 - OrderDetail.Discount)) AS TotalSales\nFROM Order\nJOIN Region ON Order.ShipRegion = Region.RegionDescription\nJOIN OrderDetail ON OrderDetail.OrderId = Order.Id\nWHERE Order.ShippedDate IS NOT NULL\nGROUP BY Region.RegionDescription\nORDER BY TotalSales DESC;",
8
+ "classes_used": "Order, Region, OrderDetail",
9
+ "name": "sales_by_region_query",
10
+ "html_code": "<script src=\"https://cdn.jsdelivr.net/npm/chart.js\"></script>\n<canvas id=\"salesByRegionChart\" width=\"400\" height=\"400\"></canvas>\n<script>\n const ctx = document.getElementById('salesByRegionChart').getContext('2d');\n const data = {\n labels: [], // Populate with Region description\n datasets: [{\n label: 'Sales by Region',\n data: [], // Populate with total sales\n backgroundColor: 'rgba(75, 192, 192, 0.2)',\n borderColor: 'rgba(75, 192, 192, 1)',\n borderWidth: 1\n }]\n };\n const salesByRegionChart = new Chart(ctx, {\n type: 'bar',\n data: data,\n options: {\n scales: {\n y: {\n beginAtZero: true\n }\n }\n }\n });\n</script>"
11
+ }
12
+ ],
13
+ "test_data": "",
14
+ "test_data_rows": [],
15
+ "test_data_sqlite": "",
16
+ "name": "SalesByRegionAnalysis"
17
+ }
@@ -0,0 +1,59 @@
1
+ "graphics":
2
+ - "classes_used": |-
3
+ Order, Region, OrderDetail
4
+ "html_code": |-
5
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
6
+ <canvas id="salesByRegionChart" width="400" height="400"></canvas>
7
+ <script>
8
+ const ctx = document.getElementById('salesByRegionChart').getContext('2d');
9
+ const data = {
10
+ labels: [], // Populate with Region description
11
+ datasets: [{
12
+ label: 'Sales by Region',
13
+ data: [], // Populate with total sales
14
+ backgroundColor: 'rgba(75, 192, 192, 0.2)',
15
+ borderColor: 'rgba(75, 192, 192, 1)',
16
+ borderWidth: 1
17
+ }]
18
+ };
19
+ const salesByRegionChart = new Chart(ctx, {
20
+ type: 'bar',
21
+ data: data,
22
+ options: {
23
+ scales: {
24
+ y: {
25
+ beginAtZero: true
26
+ }
27
+ }
28
+ }
29
+ });
30
+ </script>
31
+ "name": |-
32
+ sales_by_region_query
33
+ "sql_query": |-
34
+ SELECT Region.RegionDescription, SUM(OrderDetail.Quantity * OrderDetail.UnitPrice * (1 - OrderDetail.Discount)) AS TotalSales
35
+ FROM Order
36
+ JOIN Region ON Order.ShipRegion = Region.RegionDescription
37
+ JOIN OrderDetail ON OrderDetail.OrderId = Order.Id
38
+ WHERE Order.ShippedDate IS NOT NULL
39
+ GROUP BY Region.RegionDescription
40
+ ORDER BY TotalSales DESC;
41
+ "sqlalchemy_query": |-
42
+ sales_by_region = (
43
+ session.query(
44
+ Region.RegionDescription,
45
+ func.sum(OrderDetail.Quantity * OrderDetail.UnitPrice * (1 - OrderDetail.Discount)).label("TotalSales")
46
+ )
47
+ .join(Order, Order.ShipRegion == Region.RegionDescription)
48
+ .join(OrderDetail, OrderDetail.OrderId == Order.Id)
49
+ .filter(Order.ShippedDate.isnot(None)) # Consider only shipped orders
50
+ .group_by(Region.RegionDescription)
51
+ .order_by(func.sum(OrderDetail.Quantity * OrderDetail.UnitPrice * (1 - OrderDetail.Discount)).desc())
52
+ )
53
+ "models": []
54
+ "name": |-
55
+ SalesByRegionAnalysis
56
+ "rules": []
57
+ "test_data": ""
58
+ "test_data_rows": []
59
+ "test_data_sqlite": ""
@@ -0,0 +1 @@
1
+ Graph Sales by Category
@@ -1,11 +1,12 @@
1
1
  const sla_doc =
2
2
  '<div class="MuiTypography-root jss4" style="color: rgba(0, 0, 0, 0.66)">' +
3
3
  '<div style="text-align:center">' +
4
- '<h2>Welcome to API Logic Server - Sample</h2>' +
4
+ '<h2>Welcome to GenAI-Logic/API Logic Server - Sample</h2>' +
5
5
  '</div><br>' +
6
- '<h3><a class="custom" style="color: #3f51b5;" rel="nofollow" href="https://apilogicserver.github.io/Docs/" target="_blank">API Logic Server</a> ' +
7
- 'creates <i>customizable</i> model-driven systems, instantly from your ' +
8
- '<a class="custom" style="color: #3f51b5;" rel="nofollow" href="https://apilogicserver.github.io/Docs/Sample-Database/" target="_blank">database:</a>' +
6
+ '<h3><a class="custom" style="color: #3f51b5;" rel="nofollow" href="https://www.genai-logic.com" target="_blank">GenAI-Logic</a> ' +
7
+ 'creates <i>customizable</i> systems, instantly from your ' +
8
+ '<a class="custom" style="color: #3f51b5;" rel="nofollow" href="https://apilogicserver.github.io/Docs/Sample-Database/" target="_blank">database</a> or ' +
9
+ '<a class="custom" style="color: #3f51b5;" rel="nofollow" href="https://apilogicserver.github.io/Docs/WebGenAI/" target="_blank">Natural Language prompt:</a> ' +
9
10
  '</h3>' +
10
11
  '<h4>1. Automatic Admin App</h4>' +
11
12
  '<ul>' +