kodexa 7.4.416807352183__tar.gz → 7.4.417022235742__tar.gz

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 (51) hide show
  1. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/PKG-INFO +1 -1
  2. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/objects.py +1 -0
  3. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/persistence.py +39 -2
  4. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/pyproject.toml +1 -1
  5. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/LICENSE +0 -0
  6. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/README.md +0 -0
  7. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/__init__.py +0 -0
  8. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/assistant/__init__.py +0 -0
  9. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/assistant/assistant.py +0 -0
  10. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/connectors/__init__.py +0 -0
  11. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/connectors/connectors.py +0 -0
  12. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/dataclasses/__init__.py +0 -0
  13. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/dataclasses/templates/llm_data_class.j2 +0 -0
  14. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/__init__.py +0 -0
  15. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/base.py +0 -0
  16. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/entities/__init__.py +0 -0
  17. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/entities/check_response.py +0 -0
  18. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/entities/product.py +0 -0
  19. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/entities/product_group.py +0 -0
  20. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/entities/product_subscription.py +0 -0
  21. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/model.py +0 -0
  22. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/model/utils.py +0 -0
  23. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/pipeline/__init__.py +0 -0
  24. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/pipeline/pipeline.py +0 -0
  25. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/platform/__init__.py +0 -0
  26. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/platform/client.py +0 -0
  27. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/platform/interaction.py +0 -0
  28. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/platform/kodexa.py +0 -0
  29. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/platform/manifest.py +0 -0
  30. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/selectors/__init__.py +0 -0
  31. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/selectors/ast.py +0 -0
  32. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/selectors/core.py +0 -0
  33. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/selectors/lexrules.py +0 -0
  34. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/selectors/lextab.py +0 -0
  35. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/selectors/lextab.pyi +0 -0
  36. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/selectors/parserules.py +0 -0
  37. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/selectors/parserules.pyi +0 -0
  38. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/selectors/parsetab.py +0 -0
  39. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/selectors/parsetab.pyi +0 -0
  40. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/spatial/__init__.py +0 -0
  41. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/spatial/azure_models.py +0 -0
  42. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/spatial/bbox_common.py +0 -0
  43. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/spatial/table_form_common.py +0 -0
  44. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/steps/__init__.py +0 -0
  45. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/steps/common.py +0 -0
  46. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/testing/__init__.py +0 -0
  47. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/testing/test_components.py +0 -0
  48. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/testing/test_utils.py +0 -0
  49. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/training/__init__.py +0 -0
  50. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/training/train_utils.py +0 -0
  51. {kodexa-7.4.416807352183 → kodexa-7.4.417022235742}/kodexa/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: kodexa
3
- Version: 7.4.416807352183
3
+ Version: 7.4.417022235742
4
4
  Summary: Python SDK for the Kodexa Platform
5
5
  Author: Austin Redenbaugh
6
6
  Author-email: austin@kodexa.com
@@ -2625,6 +2625,7 @@ class TaxonValidation(BaseModel):
2625
2625
  detail_formula: Optional[str] = Field(None, alias="detailFormula")
2626
2626
  exception_id: Optional[str] = Field(None, alias="exceptionId")
2627
2627
  support_article_id: Optional[str] = Field(None, alias="supportArticleId")
2628
+ overridable: Optional[bool] = None
2628
2629
 
2629
2630
  class DocumentTaxonValidation(BaseModel):
2630
2631
  model_config = ConfigDict(
@@ -1172,6 +1172,36 @@ class SqliteDocumentPersistence(object):
1172
1172
  if result[0] == 0:
1173
1173
  self.cursor.execute("INSERT INTO validations (obj) VALUES (?)", [sqlite3.Binary(msgpack.packb([]))])
1174
1174
 
1175
+ def __deduplicate_document_taxon_validations(self, taxon_validations: List[DocumentTaxonValidation]) -> List[DocumentTaxonValidation]:
1176
+ """
1177
+ Deduplicate DocumentTaxonValidation objects based on taxon_path and exception_id.
1178
+
1179
+ Args:
1180
+ taxon_validations: List of DocumentTaxonValidation objects to deduplicate.
1181
+
1182
+ Returns:
1183
+ List of deduplicated DocumentTaxonValidation objects.
1184
+ """
1185
+ if taxon_validations is None or len(taxon_validations) == 0:
1186
+ return []
1187
+
1188
+ seen_keys = set()
1189
+ deduplicated = []
1190
+
1191
+ for tv in taxon_validations:
1192
+ if tv is None:
1193
+ continue
1194
+
1195
+ taxon_path = tv.taxon_path if tv.taxon_path is not None else ""
1196
+ exception_id = tv.validation.exception_id if tv.validation and tv.validation.exception_id else ""
1197
+ key = f"{taxon_path}|{exception_id}"
1198
+
1199
+ if key not in seen_keys:
1200
+ seen_keys.add(key)
1201
+ deduplicated.append(tv)
1202
+
1203
+ return deduplicated
1204
+
1175
1205
  def set_validations(self, validations: List[DocumentTaxonValidation]):
1176
1206
  """
1177
1207
  Sets the validations for the document.
@@ -1180,7 +1210,12 @@ class SqliteDocumentPersistence(object):
1180
1210
  validations (List[DocumentTaxonValidation]): The validations to store.
1181
1211
  """
1182
1212
  self.__ensure_validations_table_exists()
1183
- serialized_data = sqlite3.Binary(msgpack.packb([v.model_dump(by_alias=True) for v in validations]))
1213
+ # Handle None input
1214
+ if validations is None:
1215
+ validations = []
1216
+ # Deduplicate validations before storing
1217
+ deduplicated_validations = self.__deduplicate_document_taxon_validations(validations)
1218
+ serialized_data = sqlite3.Binary(msgpack.packb([v.model_dump(by_alias=True) for v in deduplicated_validations]))
1184
1219
  self.cursor.execute("UPDATE validations SET obj = ? WHERE rowid = 1", [serialized_data])
1185
1220
  self.connection.commit()
1186
1221
 
@@ -1194,7 +1229,9 @@ class SqliteDocumentPersistence(object):
1194
1229
  self.__ensure_validations_table_exists()
1195
1230
  result = self.cursor.execute("SELECT obj FROM validations WHERE rowid = 1").fetchone()
1196
1231
  if result and result[0]:
1197
- return [DocumentTaxonValidation.model_validate(v) for v in msgpack.unpackb(result[0])]
1232
+ validations = [DocumentTaxonValidation.model_validate(v) for v in msgpack.unpackb(result[0])]
1233
+ # Deduplicate validations before returning
1234
+ return self.__deduplicate_document_taxon_validations(validations)
1198
1235
  return []
1199
1236
 
1200
1237
  def set_external_data(self, external_data: dict, key: str = "default"):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "kodexa"
3
- version = "7.4.416807352183"
3
+ version = "7.4.417022235742"
4
4
  description = "Python SDK for the Kodexa Platform"
5
5
  authors = ["Austin Redenbaugh <austin@kodexa.com>", "Philip Dodds <philip@kodexa.com>", "Romar Cablao <rcablao@kodexa.com>", "Amadea Paula Dodds <amadeapaula@kodexa.com>"]
6
6
  readme = "README.md"