NOTICE: All information contained herein is, and remains
the property of TechnoCore.
The intellectual and technical concepts contained
herein are proprietary to TechnoCore and dissemination of this information or reproduction of this material
is strictly forbidden unless prior written permission is obtained
from TechnoCore.
ObjTextFHFeatures is a Python module that processes and structures product feature descriptions from a database. It reads a raw feature string, cleans and splits it into individual features, and then updates the database with both the structured feature set and a consolidated description.
trader.meta_product or trader.product_notes tables.Feature1 to Feature15).trader.meta_product table with the structured features and a pipe-separated description string.__init__(self, db_connection: DatabaseConnection = 0, page=0)Initializes the ObjTextFHFeatures object, inheriting from ObjTextFHInstalment.
DatabaseConnection object for database operations.read_features(self, param_1)Reads, cleans, and structures the features for a given product code, then updates the database.
Import(self)Imports and processes features for all products that have feature notes but no structured description in the meta_product table.
Process(self, param_1="", ...)The main entry point for processing features for a single product.
To process and update the features for a specific product:
import ObjTextFHFeatures
# Initialize the object with a database connection
features_processor = ObjTextFHFeatures.ObjProcessText(db_connection=db)
# Process features for product code "21856"
features_processor.Process("21856")
All five statements live in ObjTextFHFeatures.yaml
(database.queries), loaded with get_queries(name).format(...):
| Query | Purpose |
|---|---|
insert_product |
ensures the meta_product row exists |
read_description |
the already-split features, if any |
read_trader_note |
the raw features note when there are none |
list_products_without_description |
the Import() work list |
update_features |
writes Feature1..15 + Description |
Applied 2026-08-16. Two points worth knowing:
update_features looks dynamic but is not. It was assembled inSql += f" Feature{r} = "), and that loop is alwaysrange(1, 16) — every one of the fifteen columns is written on"'" -> "''" replace.escape_sql() covers more than quote-doubling — the backslashinsert_product's result is now captured; it was discarded.
The reads key on Param1[0:10] while update_features keys on the
whole of Param1, so a code longer than ten characters addresses
different rows. Tagged in the source; a FullHouse data question, not a
standards one.