Commit 7133848
feat(client)!: add catalog Cached* siblings + FTS5 specs (#472 Phase A)
Extends the SQLModel cache-table generator to emit Cached* siblings for
the 11 catalog entity types previously cached in the legacy single-table
CatalogCache. Phase B will wire the typed-cache sync specs and FTS5
sidecar; Phase A just lays the schema groundwork.
Generator changes (scripts/generate_pydantic_models.py):
- CACHE_TABLES gains 11 catalog entries (Variant, Product, Material,
Service, Customer, Supplier, Location1, TaxRate, Operator, Factory,
AdditionalCost) with json_columns / extra_fields / unique_columns /
flatten_parent specs as appropriate.
- New CACHE_FTS_SPECS sidecar declares per-entity FTS5 search columns;
generator emits __fts_columns__: ClassVar[tuple[str, ...]] on each
Cached* class with an entry. Lookup-only entities (Location, TaxRate,
Operator, Factory, AdditionalCost) skip FTS — get_all + difflib
fuzzy fallback covers them in Phase B.
- New CacheTableSpec.unique_columns + inject_unique_indexes pass:
rewrites Field(...) to SQLField(unique=True, index=True, ...) on
declared columns. CachedVariant.sku gets DB-level uniqueness mirroring
the legacy entity_index.sku COLLATE NOCASE constraint.
- New CacheTableSpec.flatten_parent + flatten_intermediate_inheritance
pass: inlines an intermediate non-base, non-cached parent class's
fields into the cache class body so SQLModel's column inference sees
every field (Material/Product extend InventoryItem, which has nested
list/object fields SQLModel can't auto-map). Detects child-overriding
fields like Material.type: Literal["material"] and keeps the parent's
enum-typed declaration so SQLModel doesn't choke on Literal[...].
- New _rewrite_identifiers_outside_strings helper using tokenize so
cross-cache type rewrites (Customer → CachedCustomer in type
annotations) skip string literals — descriptions like "Customer's
reference number" no longer get corrupted.
- inject_json_columns now handles bare ``name: T = Default`` field
declarations (Location1.address) plus multi-line type annotations
with inner commas (Factory.legal_address: dict[str, Any]).
Variant gets four cache-only extra_fields (parent_archived_at,
display_name, parent_name, supplier_item_codes_text) lifted from the
legacy _variant_to_cache_dict denormalization. Phase B's
attrs_postprocess hook populates them at sync time; the FTS spec
references them so the schema and search-column contract stay honest.
New public Cached* classes ship in the generated client:
- CachedVariant
- CachedProduct
- CachedMaterial
- CachedService
- CachedCustomer
- CachedSupplier
- CachedLocation (Location1 → name_override="Location")
- CachedTaxRate
- CachedOperator
- CachedFactory
- CachedAdditionalCost
Tests cover the new generator passes (inject_unique_indexes,
inject_fts_columns, flatten_intermediate_inheritance,
_rewrite_identifiers_outside_strings) plus end-to-end assertions on
the regenerated output.
Closes part of #472 (Phase A).
BREAKING CHANGE: New public Cached* classes (CachedVariant,
CachedProduct, CachedMaterial, CachedService, CachedCustomer,
CachedSupplier, CachedLocation, CachedTaxRate, CachedOperator,
CachedFactory, CachedAdditionalCost) ship in the generated client.
CachedPurchaseOrder.supplier field type changed from Supplier to
CachedSupplier (now references the cache sibling, consistent with the
typed-cache pattern).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent c845c69 commit 7133848
8 files changed
Lines changed: 1759 additions & 30 deletions
File tree
- katana_public_api_client/models_pydantic/_generated
- scripts
- tests
Lines changed: 22 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
29 | 34 | | |
30 | 35 | | |
31 | 36 | | |
| |||
100 | 105 | | |
101 | 106 | | |
102 | 107 | | |
| 108 | + | |
| 109 | + | |
103 | 110 | | |
104 | 111 | | |
105 | 112 | | |
| |||
199 | 206 | | |
200 | 207 | | |
201 | 208 | | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
202 | 213 | | |
203 | 214 | | |
204 | 215 | | |
| |||
466 | 477 | | |
467 | 478 | | |
468 | 479 | | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
469 | 484 | | |
470 | 485 | | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
471 | 489 | | |
472 | 490 | | |
473 | 491 | | |
474 | 492 | | |
| 493 | + | |
475 | 494 | | |
476 | 495 | | |
477 | 496 | | |
478 | 497 | | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
479 | 501 | | |
480 | 502 | | |
481 | 503 | | |
| |||
Lines changed: 148 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
10 | | - | |
| 9 | + | |
11 | 10 | | |
12 | 11 | | |
13 | 12 | | |
14 | 13 | | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
15 | 18 | | |
16 | 19 | | |
| 20 | + | |
| 21 | + | |
17 | 22 | | |
18 | 23 | | |
19 | 24 | | |
| |||
1125 | 1130 | | |
1126 | 1131 | | |
1127 | 1132 | | |
| 1133 | + | |
| 1134 | + | |
| 1135 | + | |
| 1136 | + | |
| 1137 | + | |
| 1138 | + | |
| 1139 | + | |
| 1140 | + | |
| 1141 | + | |
| 1142 | + | |
| 1143 | + | |
| 1144 | + | |
| 1145 | + | |
| 1146 | + | |
| 1147 | + | |
| 1148 | + | |
| 1149 | + | |
| 1150 | + | |
| 1151 | + | |
| 1152 | + | |
| 1153 | + | |
| 1154 | + | |
| 1155 | + | |
| 1156 | + | |
| 1157 | + | |
| 1158 | + | |
| 1159 | + | |
| 1160 | + | |
| 1161 | + | |
| 1162 | + | |
| 1163 | + | |
| 1164 | + | |
| 1165 | + | |
| 1166 | + | |
| 1167 | + | |
| 1168 | + | |
| 1169 | + | |
| 1170 | + | |
| 1171 | + | |
| 1172 | + | |
| 1173 | + | |
| 1174 | + | |
| 1175 | + | |
| 1176 | + | |
| 1177 | + | |
| 1178 | + | |
| 1179 | + | |
| 1180 | + | |
| 1181 | + | |
| 1182 | + | |
| 1183 | + | |
| 1184 | + | |
| 1185 | + | |
| 1186 | + | |
| 1187 | + | |
| 1188 | + | |
| 1189 | + | |
| 1190 | + | |
| 1191 | + | |
| 1192 | + | |
| 1193 | + | |
| 1194 | + | |
| 1195 | + | |
| 1196 | + | |
| 1197 | + | |
| 1198 | + | |
| 1199 | + | |
| 1200 | + | |
| 1201 | + | |
| 1202 | + | |
| 1203 | + | |
| 1204 | + | |
| 1205 | + | |
| 1206 | + | |
| 1207 | + | |
| 1208 | + | |
| 1209 | + | |
| 1210 | + | |
| 1211 | + | |
| 1212 | + | |
| 1213 | + | |
| 1214 | + | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
| 1219 | + | |
| 1220 | + | |
| 1221 | + | |
| 1222 | + | |
| 1223 | + | |
| 1224 | + | |
| 1225 | + | |
| 1226 | + | |
| 1227 | + | |
| 1228 | + | |
| 1229 | + | |
| 1230 | + | |
| 1231 | + | |
| 1232 | + | |
| 1233 | + | |
| 1234 | + | |
| 1235 | + | |
| 1236 | + | |
| 1237 | + | |
| 1238 | + | |
| 1239 | + | |
| 1240 | + | |
| 1241 | + | |
| 1242 | + | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + | |
| 1246 | + | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
| 1251 | + | |
| 1252 | + | |
| 1253 | + | |
| 1254 | + | |
| 1255 | + | |
| 1256 | + | |
| 1257 | + | |
| 1258 | + | |
| 1259 | + | |
| 1260 | + | |
| 1261 | + | |
| 1262 | + | |
| 1263 | + | |
| 1264 | + | |
| 1265 | + | |
| 1266 | + | |
| 1267 | + | |
| 1268 | + | |
| 1269 | + | |
| 1270 | + | |
| 1271 | + | |
| 1272 | + | |
| 1273 | + | |
Lines changed: 139 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
10 | | - | |
11 | 9 | | |
12 | | - | |
| 10 | + | |
13 | 11 | | |
14 | 12 | | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
15 | 17 | | |
16 | 18 | | |
| 19 | + | |
| 20 | + | |
17 | 21 | | |
18 | 22 | | |
19 | 23 | | |
| |||
656 | 660 | | |
657 | 661 | | |
658 | 662 | | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
0 commit comments