ApiLogicServer 14.3.20__py3-none-any.whl → 14.3.25__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 (42) hide show
  1. api_logic_server_cli/api_logic_server.py +4 -3
  2. api_logic_server_cli/api_logic_server_info.yaml +3 -3
  3. api_logic_server_cli/cli.py +38 -0
  4. api_logic_server_cli/database/nw-gold.sqlite +0 -0
  5. api_logic_server_cli/genai/genai.py +2 -1
  6. api_logic_server_cli/genai/genai_graphics.py +165 -0
  7. api_logic_server_cli/genai/genai_logic_builder.py +2 -2
  8. api_logic_server_cli/genai/genai_svcs.py +8 -0
  9. api_logic_server_cli/prototypes/base/config/config.py +58 -30
  10. api_logic_server_cli/prototypes/base/docs/graphics/readme.md +12 -0
  11. api_logic_server_cli/prototypes/base/security/authentication_provider/keycloak/auth_provider.py +1 -1
  12. api_logic_server_cli/prototypes/base/security/declare_security.py +4 -0
  13. api_logic_server_cli/prototypes/base/ui/admin/admin_loader.py +3 -1
  14. api_logic_server_cli/prototypes/manager/README.md +30 -1
  15. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.prompt +2 -0
  16. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.response_example +68 -60
  17. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/graphics_services.py +41 -0
  18. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/html_template.jinja +76 -0
  19. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/index.html +19 -0
  20. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/sales_by_region.jinja +63 -0
  21. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/service_template_jsonapi_rpc.jinja +37 -0
  22. api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/service_template_unused.jinja +38 -0
  23. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/graphics.prompt +18 -0
  24. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/graphics_request.prompt +5 -0
  25. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/response_format.prompt +8 -0
  26. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/sqlite_inserts.prompt +2 -0
  27. api_logic_server_cli/prototypes/manager/webgenai/docker-compose.yml +27 -0
  28. api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/request copy.json +892 -0
  29. api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/request.json +6 -0
  30. api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/response.json +17 -0
  31. api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/response.yaml +59 -0
  32. api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/sales_by_category.prompt +1 -0
  33. {apilogicserver-14.3.20.dist-info → apilogicserver-14.3.25.dist-info}/METADATA +1 -1
  34. {apilogicserver-14.3.20.dist-info → apilogicserver-14.3.25.dist-info}/RECORD +38 -26
  35. {apilogicserver-14.3.20.dist-info → apilogicserver-14.3.25.dist-info}/WHEEL +1 -1
  36. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/zsqlite_inserts_iterations.prompt +0 -29
  37. api_logic_server_cli/prototypes/manager/webgenai/docker-compose-webg.yml +0 -33
  38. api_logic_server_cli/prototypes/manager/webgenai/webg_config/license.json +0 -6
  39. api_logic_server_cli/prototypes/manager/webgenai/webg_config/web_genai.txt +0 -13
  40. {apilogicserver-14.3.20.dist-info → apilogicserver-14.3.25.dist-info}/entry_points.txt +0 -0
  41. {apilogicserver-14.3.20.dist-info → apilogicserver-14.3.25.dist-info}/licenses/LICENSE +0 -0
  42. {apilogicserver-14.3.20.dist-info → apilogicserver-14.3.25.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": ""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ApiLogicServer
3
- Version: 14.3.20
3
+ Version: 14.3.25
4
4
  Author-email: Val Huber <apilogicserver@gmail.com>
5
5
  License: BSD-3-Clause
6
6
  Project-URL: Homepage, https://apilogicserver.github.io/Docs/
@@ -1,7 +1,7 @@
1
1
  api_logic_server_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- api_logic_server_cli/api_logic_server.py,sha256=5KKjpEzOu1et3fU1KLmu7EjZd3OHtE_5vsFvcz8VBkw,114363
3
- api_logic_server_cli/api_logic_server_info.yaml,sha256=r90XJrIZWQvPCnNdsPOATHPbA7JDfbSSuEds9z1rbRI,126
4
- api_logic_server_cli/cli.py,sha256=t4jyVgA1OoO2AXbgwdQP3I_ZJS1A-ZirFl18e4VU3co,80766
2
+ api_logic_server_cli/api_logic_server.py,sha256=tcJvityol77lpbKmgCCT8MbbxMecbCdVvVbZG1w77N4,114437
3
+ api_logic_server_cli/api_logic_server_info.yaml,sha256=qOetv9cos6cFUaMH72Ke_B6MgCqCeei0d3Qt6u42gNU,112
4
+ api_logic_server_cli/cli.py,sha256=J11Vxll5vmmYdc_4RtxLk3924ybINSKYluRR3Q5B-yA,82474
5
5
  api_logic_server_cli/cli_args_base.py,sha256=lr27KkOB7_WpZwTs7LgiK8LKDIHMKQkoZCTnE99BFxw,3280
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
@@ -447,7 +447,7 @@ api_logic_server_cli/database/customize_models.py,sha256=9QyFDo9mHo-VpwsVP-cXxU5
447
447
  api_logic_server_cli/database/model_using_numeric.py,sha256=PDQqndxION4LIlH9-3J9Ozc0JKbXVaITqQI2sGULkW4,1812
448
448
  api_logic_server_cli/database/new.sqlite,sha256=v9CtvF-XUjJqzvr6N7Fhm78rVCVIb4cH4WWUJGb-Z1U,16384
449
449
  api_logic_server_cli/database/nw-gold-plus.sqlite,sha256=5hM8ub6BjZPnB_35GY8UTcfCfN0TGIavEZYAUzprxlk,522240
450
- api_logic_server_cli/database/nw-gold.sqlite,sha256=BWXLeljOTNwmOUJjMZ8J3dJ_qUtn_9uj7N2d6M5b-lg,522240
450
+ api_logic_server_cli/database/nw-gold.sqlite,sha256=Z4si7owG5_LPW8gjHcrdKBOwrpnWuKvOBZe9b8MBGPU,522240
451
451
  api_logic_server_cli/database/nw-unused.sqlite,sha256=AOO0Ob_2K70MlgAFB6rbtvklGFZnNlZmwtY-fgpSD1Q,496640
452
452
  api_logic_server_cli/database/sample_ai.txt,sha256=Fdry3fbbgGV8KnE0jWdm_g4F7CaDpSfIRxVhEX9--2Y,89
453
453
  api_logic_server_cli/database/shipping.sqlite,sha256=68N8cN8oosuvEtQcAif42YjYH7ocXVbNIRAFMN1dInY,24576
@@ -468,10 +468,11 @@ api_logic_server_cli/fragments/nw_virtual_attrs.py,sha256=7hgvhnO1UcJ6OoPKCxR5bn
468
468
  api_logic_server_cli/fragments/ui_basic_web_app_runZZ.py,sha256=UllBIkKHlUE3nyDE1qtFWCA-NTE1ltYxPvVUd7lZI5U,870
469
469
  api_logic_server_cli/genai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
470
470
  api_logic_server_cli/genai/client.py,sha256=36gyz-dqxj4dJj1SGtO9NZsy9-cfnf4d7uahHimwqHk,772
471
- api_logic_server_cli/genai/genai.py,sha256=ue5gElZS22d3Ro8ECw9PrPhu3o5OKUvf47gkJqDvKBc,44247
471
+ api_logic_server_cli/genai/genai.py,sha256=zmgHh-7z-mnAnhNwMmdL4yLEzGmz_X4H_cuQEUEfI0A,44417
472
472
  api_logic_server_cli/genai/genai_fatal_excp.py,sha256=1FmDVcXVRqmG0JMVZ7l4KqMOdpff3KGZ2LPAGtw304Q,179
473
- api_logic_server_cli/genai/genai_logic_builder.py,sha256=SajdtsMIcjOAffGy0CcfaLv3WjOxfDsrHcCb3fePfpI,26078
474
- api_logic_server_cli/genai/genai_svcs.py,sha256=mGDtznw2rP7Tv8cB6K7T2_uxpd6jYEpnZctvEE2e09E,46897
473
+ api_logic_server_cli/genai/genai_graphics.py,sha256=nZ7--YBMkA08S0CeRvaXqdy0Ysn71Wz9x-FDSzzXyg4,7688
474
+ api_logic_server_cli/genai/genai_logic_builder.py,sha256=u_89UtrALIfcMtW6p0SZ78lCmwRqerA5igyY2hDvjlk,26150
475
+ api_logic_server_cli/genai/genai_svcs.py,sha256=dY39ZNpAEmkYRLFR03fgoNzB2KG4Z_aiu4TwSNiKTLs,47397
475
476
  api_logic_server_cli/genai/genai_utils.py,sha256=DTlWTnW5_2pzX4q1VG1tWqoZPVObDHR97SVe0z8Z3rs,17102
476
477
  api_logic_server_cli/genai/json2rules.py,sha256=ykoxxgZgqllzt8Ud06S-R_3QtumxXfmF5ksYC0Hh2Sk,2645
477
478
  api_logic_server_cli/model_migrator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -541,7 +542,7 @@ api_logic_server_cli/prototypes/base/api/system/opt_locking/opt_locking.py,sha25
541
542
  api_logic_server_cli/prototypes/base/api/system/opt_locking/readme.md,sha256=Ja_-d-mxHAvOFslu6jlu18HQ3CSFaaSvphHMm3YM-Z8,6760
542
543
  api_logic_server_cli/prototypes/base/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
543
544
  api_logic_server_cli/prototypes/base/config/activate_logicbank.py,sha256=pzKfXImy04zOuN1IgVzMo7vC8T_PAyeBnadKHYu7nVE,2103
544
- api_logic_server_cli/prototypes/base/config/config.py,sha256=pPaBBNV8hsnorKZ4f1hRRJnR32JFj7G_HNK5Wsu53NY,25186
545
+ api_logic_server_cli/prototypes/base/config/config.py,sha256=8ByWKcGOuwUuNxSWFgC9oZU6gBRiPGfSK0EmKwWBkgE,26572
545
546
  api_logic_server_cli/prototypes/base/config/default.env,sha256=0y-lON2wkG-71Yml_G8sZI9XkuVf8xY4RbNVUTqo9Ow,256
546
547
  api_logic_server_cli/prototypes/base/config/logging-reduced.yml,sha256=N-BDIk0t5uAmw3Of_d_ueK4jx7pxNwlYbkiDd1wjRDs,2179
547
548
  api_logic_server_cli/prototypes/base/config/logging.yml,sha256=Do1uS1EIQEuMEUUp511UfmRy9bkT6o75uHLVRJyYmjE,2268
@@ -611,6 +612,7 @@ api_logic_server_cli/prototypes/base/devops/keycloak/nginx/nginx.conf,sha256=nsp
611
612
  api_logic_server_cli/prototypes/base/devops/keycloak/unused/auth_provider.py,sha256=e8PoH9Ck4nrMe-QY99Lh0G02gzn2ubnMauFVEpNbeQ8,2771
612
613
  api_logic_server_cli/prototypes/base/devops/keycloak/unused/unused-docker-compose-keycloak.sh,sha256=YvYRD4ID8v7znslXKOlzu3hpN17h0O_zwGPkFYy1G20,353
613
614
  api_logic_server_cli/prototypes/base/devops/python-anywhere/python_anywhere_wsgi.py,sha256=xs3ZT1gg8C4tMzUW6OfOzV8dXHtUW5KVJdyyEbooPFs,3820
615
+ api_logic_server_cli/prototypes/base/docs/graphics/readme.md,sha256=GaNOkrzT_nlcrIpmmwLQtoGC6aPZnM8bSGgmc5fM8yk,402
614
616
  api_logic_server_cli/prototypes/base/docs/logic/readme.md,sha256=fIQypEQ7Ny7q385AhpwndYRBFquG6P6xpM41-zrIseE,871
615
617
  api_logic_server_cli/prototypes/base/docs/logic_suggestions/readme_logic_suggestions.md,sha256=44ibQYGOy84J4zGFaChLCOf-GU9pOBrbgBbprujMtIs,184
616
618
  api_logic_server_cli/prototypes/base/integration/kafka/kafka_consumer.py,sha256=2DOsFpYnsJ71gZzzfJweEmL-i99uCtEFU0hVwIKFGMw,1516
@@ -627,10 +629,10 @@ api_logic_server_cli/prototypes/base/logic/load_verify_rules.py,sha256=dYEb-UxqQ
627
629
  api_logic_server_cli/prototypes/base/logic/readme_declare_logic.md,sha256=ZC1a0e_tob6UNXcoPGgYEf_BPUlwpdD-bYwtNPUeORQ,7105
628
630
  api_logic_server_cli/prototypes/base/logic/logic_discovery/auto_discovery.py,sha256=m97W6DYi6ouTDuFCiU1rPq1UqzJuNnVePyOeLU33D1s,2645
629
631
  api_logic_server_cli/prototypes/base/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
630
- api_logic_server_cli/prototypes/base/security/declare_security.py,sha256=RRRvRMRR6_EsM61VbkWA-D99rNSaQTByTI06eOzRtao,1946
632
+ api_logic_server_cli/prototypes/base/security/declare_security.py,sha256=sWi-M7E-dIhvC0hmdCXnTRjHAR5eWVKCYIDCoblISm4,2281
631
633
  api_logic_server_cli/prototypes/base/security/authentication_provider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
632
634
  api_logic_server_cli/prototypes/base/security/authentication_provider/abstract_authentication_provider.py,sha256=RPPA48kdYiXx5zQ6epbfAEB1se8E10Ra9NxYRjIBShk,895
633
- api_logic_server_cli/prototypes/base/security/authentication_provider/keycloak/auth_provider.py,sha256=7z2aY7BAcy31EiGbmvGgSRLjQOooU1bM3g-bbyxdOac,10433
635
+ api_logic_server_cli/prototypes/base/security/authentication_provider/keycloak/auth_provider.py,sha256=gnk8CqhlEobRPEBTwimG6OkZhc5gP-Yba1VFlTydt2Q,10437
634
636
  api_logic_server_cli/prototypes/base/security/authentication_provider/memory/auth_provider.py,sha256=GTV9jJRbwT9QbtCKU_iR3HmaSY0-pJY9BwYkQjEnSik,4739
635
637
  api_logic_server_cli/prototypes/base/security/authentication_provider/memory/auth_provider_no_swagger.py,sha256=cuGh3SIj1dx-nOGPWCzqIIzAhXoSPSsmCPyjytp5jSY,2907
636
638
  api_logic_server_cli/prototypes/base/security/authentication_provider/sql/auth_provider.py,sha256=9Q4ua3QZ9U5eFic1aA0NJP6RF9a8Os57894ke-XEth8,4313
@@ -650,7 +652,7 @@ api_logic_server_cli/prototypes/base/test/api_logic_server_behave/reports/Behave
650
652
  api_logic_server_cli/prototypes/base/test/api_logic_server_behave/reports/Behave Logic Report Sample.md,sha256=wVNGwhF3GhVVRv7YJLjqUd2WsjFZD_IpIzRZN3xEgkI,91494
651
653
  api_logic_server_cli/prototypes/base/test/basic/server_test.py,sha256=EwJocGjKVKGjmbzPZ5we1_yYue7dHe3VpilvKuW2VBc,758
652
654
  api_logic_server_cli/prototypes/base/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
653
- api_logic_server_cli/prototypes/base/ui/admin/admin_loader.py,sha256=xHXA6AKhzDQewnSMtW1rZDwICgz4uSBMDCfM7-g9VSU,10143
655
+ api_logic_server_cli/prototypes/base/ui/admin/admin_loader.py,sha256=pg_5mcIkU_I57Mx368xXH4US77UXjdiTPnun6HOicHo,10322
654
656
  api_logic_server_cli/prototypes/base/ui/admin/authentication_admin.yaml,sha256=Y2eVLzaV8Je6QRj2Dn2AM0FxN0oMjz6QdtZ4UAVsaNk,2261
655
657
  api_logic_server_cli/prototypes/base/ui/admin/home.js,sha256=76vgvuVk1Nlen8yPn0CRYoYOYHXJrRGKuzwChseKMEs,2750
656
658
  api_logic_server_cli/prototypes/base/ui/images/Employee/andrew.jpg,sha256=LYdDqEwPeoFJP9Yxgoifh03Mhp7ds-Sp_Gtwi6CV9CU,3778
@@ -728,7 +730,7 @@ api_logic_server_cli/prototypes/genai_demo/logic/logic_discovery/auto_discovery.
728
730
  api_logic_server_cli/prototypes/genai_demo/security/declare_security.py,sha256=L3AL1bgdqIWQxdkJZcFVDOQ0XRpmeLAKqwlAYChFWKo,2108
729
731
  api_logic_server_cli/prototypes/genai_demo/ui/admin/admin.yaml,sha256=jTNWI3n3TLrjtpG8fTd7AawKr3x1Jhrft-ow6bvmCGM,3449
730
732
  api_logic_server_cli/prototypes/manager/.gitignore,sha256=xfAjNQHokbo6GuN1ghx-eml8tQIzwUczLC_YVzElndI,195
731
- api_logic_server_cli/prototypes/manager/README.md,sha256=d5IIHjZ5etTOykAwVofcfehBguSryBKUycp_FQE1gag,20638
733
+ api_logic_server_cli/prototypes/manager/README.md,sha256=tqMb4Np1Z2emoHOt1miKt7X3rZ2id7jSmCEkj1ONYIg,21518
732
734
  api_logic_server_cli/prototypes/manager/run_sample.sh,sha256=eRA-p_Snr7Pwk14wUw5mja2usEcjAKisHVhHMeSaQ68,781
733
735
  api_logic_server_cli/prototypes/manager/run_web_genai.sh,sha256=sgjB3vKhkao93Ny3VN0AQ-wonvdBcBIT3rTbyNTMoG8,136
734
736
  api_logic_server_cli/prototypes/manager/settings.txt,sha256=_jjL30jomIMxG21edDfrXYRT9Zfgr_0EdUWvcEUOnFQ,368
@@ -1191,8 +1193,8 @@ api_logic_server_cli/prototypes/manager/system/genai/examples/elections/election
1191
1193
  api_logic_server_cli/prototypes/manager/system/genai/examples/emp_depts/emp_dept.prompt,sha256=xbyhCyY7TUk7hoBKAkzRsZVBj1lP4hfXdSR4TQagXqM,109
1192
1194
  api_logic_server_cli/prototypes/manager/system/genai/examples/emp_depts/logic_notes.md,sha256=mrEBKE1OQxEqFoRLD1zYL-SeC5ITPcWEZKaumRDw7U4,100
1193
1195
  api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/create_db_models.py,sha256=QyGtjgsuYkVF5UYOn35V8ZnAdI76s-1KyM7nnGM4lPI,3588
1194
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.prompt,sha256=TTeQkOzxrA-HSrJtJ1FuEM9CsECZ2hiz4lDZLJQWhtw,783
1195
- api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.response_example,sha256=AW8V5VmeSEfGMPsTDYY77kIWqlnZ9-rpk-7OfboBiwM,8755
1196
+ api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.prompt,sha256=-dnlvkue78s8dKcmQ2zJiTOmflTn31-7do7kw94Xqo0,806
1197
+ api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.response_example,sha256=DvKfbcHjlcvURubHVS-H7UCRhA11n-zz7w15JbgYKAE,9834
1196
1198
  api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_fixup_required.json,sha256=b7SO0wkrV7DxIkW2UxmEF07wXONMwzC4UOw1ZG2cvAw,9670
1197
1199
  api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_formal.prompt,sha256=k5U0obVyjLfD2kzqiFHF6FyucTCa47BEo6gdQJp3e34,390
1198
1200
  api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_informal.prompt,sha256=u8MO_zBIDDqcx33cnBE8zjMUvkom_hJHFOb-vHVR6NA,729
@@ -5605,8 +5607,16 @@ api_logic_server_cli/prototypes/manager/system/genai/examples/time_tracking_bill
5605
5607
  api_logic_server_cli/prototypes/manager/system/genai/examples/time_tracking_billing/Invoice Made Ready.png,sha256=3FIO9vITJ5DMcUZfMYfDFdPxXgcI_L8HY7RFFFuWF4E,1321252
5606
5608
  api_logic_server_cli/prototypes/manager/system/genai/examples/time_tracking_billing/db.sqlite,sha256=hfPdf_o69yP0r1_w60hUos6VZC7tekRvGwiXsGyNzuI,32768
5607
5609
  api_logic_server_cli/prototypes/manager/system/genai/examples/time_tracking_billing/readme.md,sha256=wqRqpvrMOe2EdhWw1VDQe7TSxizFnDCLb2WlyEJpfMI,3017
5610
+ api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/graphics_services.py,sha256=jWBKGXvc_IbqPflDLxxNBKtx9NRBlkM5g50CTS1Gfm4,1398
5611
+ api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/html_template.jinja,sha256=ICZ8YV2ztYlyDrBppbnR51YS0a2n-Zi-T338FCilDI4,2679
5612
+ api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/index.html,sha256=rTl5u1AtZRIBSxK4aANBRaJK3GZOML6eiVp6Tf_2LkI,567
5613
+ api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/sales_by_region.jinja,sha256=k93hwOF2KslZEWw31wIobVPdbigsjNUkRWsjec2DdbM,1848
5614
+ api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/service_template_jsonapi_rpc.jinja,sha256=gufFC6lTDuT-Iq-Tn3iKGY4ilRFzgqhVe7j6KEDCaK0,1354
5615
+ api_logic_server_cli/prototypes/manager/system/genai/graphics_templates/service_template_unused.jinja,sha256=3z5kgSanatpfuuyW0TU5Qwz618DDE-JeoqPH9I5YToY,1361
5608
5616
  api_logic_server_cli/prototypes/manager/system/genai/learning_requests/logic_bank_api.prompt,sha256=1rBJy-rUHPx9YepSZH9niQocGbxtpbGyX2QmDxVsFd0,14489
5609
5617
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/fixup.prompt,sha256=ZdVl-0J9oi8dS_3pDTrwdtvMSpDymbArTIlSEwcjCrM,305
5618
+ api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/graphics.prompt,sha256=80dcGh3qLsGIHrYayRIg70-jqhfp3wSlZQGXvkvexdw,947
5619
+ api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/graphics_request.prompt,sha256=T8lILtS_BtOjkalJPpiziVqlHVVc2PV6nz6qikNO808,175
5610
5620
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/import.prompt,sha256=nuSDA54ii9O5O920YhmA6sqaI_k3VFw3O97jgk0PCzo,493
5611
5621
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/iteration.prompt,sha256=rnLLjC0-fYJ2VmsRTudsCoN8piusNSesbBVxtzpO7BI,178
5612
5622
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/logic_inserts.prompt,sha256=28ddHDFzM33VFWPCyhdvYLzBCASvCIhVIC4BrurEjuc,172
@@ -5614,11 +5624,10 @@ api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/logic_sugges
5614
5624
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/logic_translate.prompt,sha256=_FLGBVJsF-FzK3gfVAENt1nEwBtck63hVgAAVUADGCA,34
5615
5625
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/pre_post.prompt,sha256=GPQukgxKBE30IVByFFghhRQ8eRQFriFi8INoVc27S18,121
5616
5626
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/rebuild_test_data.prompt,sha256=BGJK_ECdfykYhCwxEzN82tUv-erGvehrpo2b5lf4RM8,2829
5617
- api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/response_format.prompt,sha256=jIjTN8XMF5fiVFlW1lEMsYUQX980GYmf6heGXAkTE5s,1093
5618
- api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/sqlite_inserts.prompt,sha256=fSoRhFEDtbXKz0PEwDaIsJA90Fmk3Y-M52B3qvG1g5E,321
5627
+ api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/response_format.prompt,sha256=4XIhxiwZQ3j0GSNLbSnJF4LnzatPHUHJCiljA2KfF3Q,1628
5628
+ api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/sqlite_inserts.prompt,sha256=RHhV9KOfmSfWhFfPztFByuXG0Pglu0DAaKA846V4EQA,357
5619
5629
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/sqlite_inserts_model_test_hints.prompt,sha256=dQcLpaZNbbGYrjsrkXcW6N31qoSye_fTNIGKF6-uxlY,1578
5620
5630
  api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/web_genai.prompt,sha256=lUigg5LZSVjwvhKnITCl6RVhwoTDk8qZassEf45g7Kk,820
5621
- api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/zsqlite_inserts_iterations.prompt,sha256=NhoxNRrLqCAInHr4-Kg-hHO01IgtVoIPCru734lyM0U,1390
5622
5631
  api_logic_server_cli/prototypes/manager/system/genai/reference/chatgpt_original.txt,sha256=JPj3OjvugQNfJpe8V8qsbDh-bcvGIN9tAK8C-PJngGM,2845
5623
5632
  api_logic_server_cli/prototypes/manager/system/genai/reference/declare_logic.py,sha256=O4Knjr56gGPF9cX3MaprfzTBLnrMb7F9BUDcrLI2__I,3348
5624
5633
  api_logic_server_cli/prototypes/manager/system/genai/reference/genai_demo_logic.txt,sha256=FSba4oWlRIxcANw3ol-HcPjKVkDLX1K4qAKSvRMOJWU,1118
@@ -5649,9 +5658,7 @@ api_logic_server_cli/prototypes/manager/system/genai/temp/create_db_models.py,sh
5649
5658
  api_logic_server_cli/prototypes/manager/system/images/copilot-clean.png,sha256=R3coCCU40UIg55fqQVAoOviiX1ERcyGqrd_EYHo6Oac,597600
5650
5659
  api_logic_server_cli/prototypes/manager/system/images/copilot.png,sha256=N8WsgqwOLD3DxkmQvpnLxx7KbMirXViUgNgumg-lbIA,1175570
5651
5660
  api_logic_server_cli/prototypes/manager/system/images/genai.png,sha256=jqC_qRwR6Y3DIfWaYnLPWKn1KF1UUezEnMeRpvRwv5s,117507
5652
- api_logic_server_cli/prototypes/manager/webgenai/docker-compose-webg.yml,sha256=Bwz_-IHzdS6frQk7HDh9DNUbgbNAQ1rm3xQgXQpFUEE,1234
5653
- api_logic_server_cli/prototypes/manager/webgenai/webg_config/license.json,sha256=I28_xdmgAVg9Mtfm3VT36pYPSWzoNPo61Hd7_GaA1Go,164
5654
- api_logic_server_cli/prototypes/manager/webgenai/webg_config/web_genai.txt,sha256=MvqQQ_bTlBpyfkbmo0BbdixsXI7Vcy4lp58qEu4Y798,400
5661
+ api_logic_server_cli/prototypes/manager/webgenai/docker-compose.yml,sha256=BXrSITWndTRAQFJyQlv5f0jfqKwF6G2Fsucg0y0cvzA,765
5655
5662
  api_logic_server_cli/prototypes/manager_docker/.devcontainer/For_VSCode.dockerfile,sha256=_RObRZ3EBDNj1_Sx26r_CysBboMvill83f8tQN1T0Do,438
5656
5663
  api_logic_server_cli/prototypes/manager_docker/.devcontainer/devcontainer.json,sha256=2Kf9UFTHKvcWewm4rIeVQ70RibwJ_S2AIz4uSD012ks,2114
5657
5664
  api_logic_server_cli/prototypes/manager_docker/.devcontainer/readme.md,sha256=-sSneMDne1fqEoox2hXUGmoO8ewgi34y7lJwGTidSpY,104
@@ -5746,6 +5753,11 @@ api_logic_server_cli/prototypes/nw/ui/images/Employee/leverling.jpg,sha256=w02cB
5746
5753
  api_logic_server_cli/prototypes/nw/ui/images/Employee/peacock.jpg,sha256=UIfxEKOKruPKNW0w17bMebIaUsa1nD2vSVfFTk7uaCs,3862
5747
5754
  api_logic_server_cli/prototypes/nw/ui/images/Employee/suyama.jpg,sha256=bp0xCJ-8EqQp_B7uR4glL6fVGxVlS10d5IHLNdw7rcA,4375
5748
5755
  api_logic_server_cli/prototypes/nw_no_cust/Tutorial.md,sha256=2ohG6joATpLXQaNT3_0lx1nBJ7Oz8A5JhCsqur7FXCg,16390
5756
+ api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/request copy.json,sha256=NEl_qRHlmsMP8PfKndkEdW9mNxzxJGygnlzZdNZF1DY,17803
5757
+ api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/request.json,sha256=3Y2SOxypg-GRUR2C6iWss7lqiBTEftvVdQwbpC271Zk,18789
5758
+ api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/response.json,sha256=4egvCQFU93Mwof0YVjpPJD_jXbyI9RFO4wOckOYd9ag,2011
5759
+ api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/response.yaml,sha256=YulqKo9dUzmCiYQzguCAUeSYk-rCGAiA5xuWS29UqkI,2033
5760
+ api_logic_server_cli/prototypes/nw_no_cust/docs/graphics/sales_by_category.prompt,sha256=iK_rWDSMt3Zmw9pKkCQqu4fysmKrUd4HmgHYEZzu_Sg,23
5749
5761
  api_logic_server_cli/prototypes/nw_no_cust/venv_setup/system_note.txt,sha256=axb89FhqhxWGgnowLLyPZHZ0iC2jNLorjmqnuq63mJU,46
5750
5762
  api_logic_server_cli/prototypes/nw_pa/$rebuild_pa.txt,sha256=kOyxrKzkzVPUmCeeD_CmX5yYVWmP9TtyvTLp4oRjM4I,1340
5751
5763
  api_logic_server_cli/prototypes/nw_pa/admin_customer_nw_pa.yaml,sha256=rVpswwM3dVjhO8649MAamUipfLuSubLh7OCdHjhlYlM,11896
@@ -6026,9 +6038,9 @@ api_logic_server_cli/tools/mini_skel/database/system/SAFRSBaseX.py,sha256=p8C7AF
6026
6038
  api_logic_server_cli/tools/mini_skel/database/system/TestDataBase.py,sha256=U02SYqThsbY5g3DX7XGaiMxjZBuOpzvtPS6RfI1WQFg,371
6027
6039
  api_logic_server_cli/tools/mini_skel/logic/declare_logic.py,sha256=fTrlHyqMeZsw_TyEXFa1VlYBL7fzjZab5ONSXO7aApo,175
6028
6040
  api_logic_server_cli/tools/mini_skel/logic/load_verify_rules.py,sha256=Rr5bySJpYCZmNPF2h-phcPJ53nAOPcT_ohZpCD93-a0,7530
6029
- apilogicserver-14.3.20.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
6030
- apilogicserver-14.3.20.dist-info/METADATA,sha256=Bm7fHzTtb9SwjqI-3lHohtBfwd3vue4zM2z6508jDMg,6469
6031
- apilogicserver-14.3.20.dist-info/WHEEL,sha256=tTnHoFhvKQHCh4jz3yCn0WPTYIy7wXx3CJtJ7SJGV7c,91
6032
- apilogicserver-14.3.20.dist-info/entry_points.txt,sha256=KiLloZJ3c_RW-nIDqBtoE0WEsQTnZ3dELwHLWi23LMA,103
6033
- apilogicserver-14.3.20.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
6034
- apilogicserver-14.3.20.dist-info/RECORD,,
6041
+ apilogicserver-14.3.25.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
6042
+ apilogicserver-14.3.25.dist-info/METADATA,sha256=qV5-nZNZ5gAP3w-ebbWliY9Hd63Td5s9J3cXW-_s-Dg,6469
6043
+ apilogicserver-14.3.25.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
6044
+ apilogicserver-14.3.25.dist-info/entry_points.txt,sha256=KiLloZJ3c_RW-nIDqBtoE0WEsQTnZ3dELwHLWi23LMA,103
6045
+ apilogicserver-14.3.25.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
6046
+ apilogicserver-14.3.25.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (77.0.1)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,29 +0,0 @@
1
-
2
- {{prompt}}
3
-
4
- Update the prior response - be sure not to lose classes and test data already created.
5
-
6
- Hints: use autonum keys (for all tables - including for link/join/junction/intersection tables), allow nulls, foreign keys, no check constraints.
7
-
8
- Be sure to create classes, never tables.
9
- Class names are singular, and first letter is capitalized.
10
-
11
- If you create sum, count or formula Logic Bank rules, then you MUST create a corresponding column in the data model.
12
-
13
- Remember that SQLite DateTime type only accepts Python datetime and date objects as input,
14
- this means you can not enter string attributes where a date or datetime object is expected.
15
-
16
- Don't install additional packages.
17
- Don't use the faker pip package.
18
-
19
- Create multiple rows of test data for each table, and follow these guidelines carefully:
20
- * Use foreign key columns instead of relationship names for the data.
21
- * Create separate objects for each test data row, not in arrays.
22
- * Be sure to initialize derived attributes for test data rows - including all sums and counts, but do not rely on Logic Bank,
23
- and do not generate db.execute statements.
24
- * Do not create arrays of test data.
25
- * Do not create a function to load test data.
26
- * Do not print the test data.
27
- * For test data, format dates as date(year, month, day).
28
-
29
- For each data model class, create a docstring describing the table, prefixed with 'description: '.
@@ -1,33 +0,0 @@
1
- # Run WebGenAI locally from docker container
2
-
3
- # Before running, update ./system/genai/webg_local/webg_config/web_genai.txt
4
- # See: https://apilogicserver.github.io/Docs/WebGenAI-CLI/#configuration
5
-
6
- # cd <manager>
7
-
8
- # docker compose -f webgenai/docker-compose-webg.yml up
9
- # docker compose -f webgenai/docker-compose-webg.yml down
10
-
11
- # if you have run docker compose up (above), you must run docker compose down to run directly:
12
-
13
- # docker run -it --rm --name webgenai -p 8282:80 --env-file ./webgenai/webg_config/web_genai.txt -v ./webgenai/webg_temp:/tmp -v ./webgenai/webg_config:/config -v ./webgenai/webg_projects:/opt/projects apilogicserver/web_genai
14
-
15
- name: webgenie
16
- services:
17
- web_genai:
18
- stdin_open: true
19
- tty: true
20
- container_name: webgenai
21
- ports:
22
- - 8282:80
23
- env_file:
24
- - ./webg_config/web_genai.txt
25
- volumes:
26
- - ./webg_temp:/tmp
27
- - ./webg_config:/config
28
- - ./webg_projects:/opt/projects
29
- image: apilogicserver/web_genai
30
- user: root
31
- environment:
32
- - GENAI_LOGIC_APIKEY=<paste license here from registration email>
33
- - APILOGICSERVER_CHATGPT_APIKEY=<sk-proj-your-openai-key-here>
@@ -1,6 +0,0 @@
1
- {
2
- "license_key": "ABCD-1234-EFGH-5678",
3
- "license_type": "PRO",
4
- "expiry": "2025-12-31",
5
- "signature": "ExPd5FL9VI6jOpDruwgBUF3knikbD9xAxNgq0Yneah0="
6
- }
@@ -1,13 +0,0 @@
1
- # App configuration
2
- APILOGICPROJECT_EXTERNAL_PORT=8282
3
- APILOGICPROJECT_PORT=5657
4
- APILOGICSERVER_CHATGPT_APIKEY=sk-proj-< your api key >
5
- #GENAI_LOGIC_APIKEY=your_api_key_from_registration_email
6
-
7
- # WebGenAI security configuration
8
- # login password for the admin user
9
- # ADMIN_PASSWORD=password
10
-
11
- # WebGenAI GitHub configuration
12
- GH_TOKEN={personal access token from github}
13
- GH_ORG=github.com/<gh-user-name>