kodexa 7.0.11351810338__tar.gz → 7.0.11483003156__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 (48) hide show
  1. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/PKG-INFO +1 -1
  2. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/model/model.py +7 -1
  3. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/model/objects.py +35 -8
  4. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/model/persistence.py +48 -0
  5. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/pyproject.toml +1 -1
  6. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/LICENSE +0 -0
  7. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/README.md +0 -0
  8. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/__init__.py +0 -0
  9. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/assistant/__init__.py +0 -0
  10. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/assistant/assistant.py +0 -0
  11. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/connectors/__init__.py +0 -0
  12. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/connectors/connectors.py +0 -0
  13. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/dataclasses/__init__.py +0 -0
  14. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/dataclasses/templates/llm_data_class.j2 +0 -0
  15. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/model/__init__.py +0 -0
  16. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/model/base.py +0 -0
  17. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/model/entities/__init__.py +0 -0
  18. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/model/entities/check_response.py +0 -0
  19. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/model/entities/product.py +0 -0
  20. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/model/entities/product_subscription.py +0 -0
  21. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/pipeline/__init__.py +0 -0
  22. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/pipeline/pipeline.py +0 -0
  23. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/platform/__init__.py +0 -0
  24. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/platform/client.py +0 -0
  25. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/platform/interaction.py +0 -0
  26. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/platform/kodexa.py +0 -0
  27. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/selectors/__init__.py +0 -0
  28. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/selectors/ast.py +0 -0
  29. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/selectors/core.py +0 -0
  30. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/selectors/lexrules.py +0 -0
  31. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/selectors/lextab.py +0 -0
  32. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/selectors/lextab.pyi +0 -0
  33. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/selectors/parserules.py +0 -0
  34. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/selectors/parserules.pyi +0 -0
  35. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/selectors/parsetab.py +0 -0
  36. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/selectors/parsetab.pyi +0 -0
  37. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/spatial/__init__.py +0 -0
  38. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/spatial/azure_models.py +0 -0
  39. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/spatial/bbox_common.py +0 -0
  40. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/spatial/table_form_common.py +0 -0
  41. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/steps/__init__.py +0 -0
  42. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/steps/common.py +0 -0
  43. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/testing/__init__.py +0 -0
  44. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/testing/test_components.py +0 -0
  45. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/testing/test_utils.py +0 -0
  46. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/training/__init__.py +0 -0
  47. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/training/train_utils.py +0 -0
  48. {kodexa-7.0.11351810338 → kodexa-7.0.11483003156}/kodexa/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kodexa
3
- Version: 7.0.11351810338
3
+ Version: 7.0.11483003156
4
4
  Summary: Python SDK for the Kodexa Platform
5
5
  Author: Austin Redenbaugh
6
6
  Author-email: austin@kodexa.com
@@ -14,7 +14,7 @@ import deepdiff
14
14
  import msgpack
15
15
  from pydantic import BaseModel, ConfigDict, Field
16
16
 
17
- from kodexa.model.objects import ContentObject, FeatureSet
17
+ from kodexa.model.objects import ContentObject, FeatureSet, DocumentTaxonValidation
18
18
 
19
19
 
20
20
  class Ref:
@@ -299,6 +299,12 @@ class ContentNode(object):
299
299
  def set_content_parts(self, content_parts):
300
300
  self.document.get_persistence().update_content_parts(self, content_parts)
301
301
 
302
+ def get_validations(self) -> list[DocumentTaxonValidation]:
303
+ return self.document.get_persistence().get_validations()
304
+
305
+ def set_validations(self, validations: list[DocumentTaxonValidation]):
306
+ self.document.get_persistence().set_validations(validations)
307
+
302
308
  def update(self):
303
309
  """
304
310
  Update this node in the document persistence
@@ -2591,13 +2591,28 @@ class TaxonConditionalFormat(BaseModel):
2591
2591
  properties: Dict[str, Any] = Field(default_factory=dict)
2592
2592
 
2593
2593
 
2594
- class TaxonRule(BaseModel):
2595
- name: Optional[str] = None
2596
- description: Optional[str] = None
2597
- rule_formula: Optional[str] = None
2598
- message_formula: Optional[str] = None
2599
- detail_formula: Optional[str] = None
2600
- exception_id: Optional[str] = None
2594
+
2595
+ class TaxonValidation(BaseModel):
2596
+
2597
+ model_config = ConfigDict(
2598
+ populate_by_name=True,
2599
+ use_enum_values=True,
2600
+ arbitrary_types_allowed=True,
2601
+ protected_namespaces=("model_config",),
2602
+ )
2603
+
2604
+ name: Optional[str] = Field(None)
2605
+ description: Optional[str] = Field(None)
2606
+ rule_formula: Optional[str] = Field(None, alias="ruleFormula")
2607
+ message_formula: Optional[str] = Field(None, alias="messageFormula")
2608
+ detail_formula: Optional[str] = Field(None, alias="detailFormula")
2609
+ exception_id: Optional[str] = Field(None, alias="exceptionId")
2610
+
2611
+
2612
+ class DocumentTaxonValidation:
2613
+ taxonomy_ref: Optional[str] = Field(None, alias="taxonomyRef")
2614
+ taxon_path: Optional[str] = Field(None, alias="taxonPath")
2615
+ rule: Optional[TaxonValidation] = None
2601
2616
 
2602
2617
 
2603
2618
  class Taxon(BaseModel):
@@ -2643,7 +2658,11 @@ class Taxon(BaseModel):
2643
2658
  properties: Optional[Dict[str, Any]] = Field(default_factory=dict)
2644
2659
  conditional_formats: Optional[List[TaxonConditionalFormat]] = Field(default_factory=list,
2645
2660
  alias="conditionalFormats")
2646
- rules: Optional[List[TaxonRule]] = Field(default_factory=list)
2661
+ validation_rules: List[TaxonValidation] = Field(
2662
+ default_factory=list,
2663
+ description="The validation rules for the taxon"
2664
+ )
2665
+
2647
2666
  cardinality: Optional[TaxonCardinality] = None
2648
2667
  path: Optional[str] = None
2649
2668
  multi_value: Optional[bool] = Field(True, alias="multiValue")
@@ -4491,6 +4510,14 @@ class UserSelection(BaseModel):
4491
4510
 
4492
4511
 
4493
4512
  class GuidanceRelationEmbedding(BaseModel):
4513
+
4514
+ model_config = ConfigDict(
4515
+ populate_by_name=True,
4516
+ use_enum_values=True,
4517
+ arbitrary_types_allowed=True,
4518
+ protected_namespaces=("model_config",),
4519
+ )
4520
+
4494
4521
  relation: Optional[str] = None
4495
4522
  model_id: Optional[str] = Field(None, alias="modelId")
4496
4523
  embedding: Optional[List[float]] = None
@@ -15,6 +15,7 @@ from kodexa.model.model import (
15
15
  ContentException,
16
16
  ModelInsight, ProcessingStep,
17
17
  )
18
+ from kodexa.model.objects import DocumentTaxonValidation
18
19
 
19
20
  logger = logging.getLogger()
20
21
 
@@ -1138,6 +1139,47 @@ class SqliteDocumentPersistence(object):
1138
1139
  if result[0] == 0:
1139
1140
  self.cursor.execute("INSERT INTO ed (obj) VALUES (?)", [sqlite3.Binary(msgpack.packb({}))])
1140
1141
 
1142
+ def __ensure_validations_table_exists(self):
1143
+ """
1144
+ Ensure the 'validations' table exists in the database.
1145
+ Creates the table if it does not exist and initializes it with an empty list.
1146
+ """
1147
+ self.cursor.execute("""
1148
+ CREATE TABLE IF NOT EXISTS validations (
1149
+ obj BLOB
1150
+ )
1151
+ """)
1152
+
1153
+ # Check if the table has any rows, if not, insert an initial empty row
1154
+ result = self.cursor.execute("SELECT COUNT(*) FROM validations").fetchone()
1155
+ if result[0] == 0:
1156
+ self.cursor.execute("INSERT INTO validations (obj) VALUES (?)", [sqlite3.Binary(msgpack.packb([]))])
1157
+
1158
+ def set_validations(self, validations: List[DocumentTaxonValidation]):
1159
+ """
1160
+ Sets the validations for the document.
1161
+
1162
+ Args:
1163
+ validations (List[DocumentTaxonValidation]): The validations to store.
1164
+ """
1165
+ self.__ensure_validations_table_exists()
1166
+ serialized_data = sqlite3.Binary(msgpack.packb([v.to_dict() for v in validations]))
1167
+ self.cursor.execute("UPDATE validations SET obj = ? WHERE rowid = 1", [serialized_data])
1168
+ self.connection.commit()
1169
+
1170
+ def get_validations(self) -> List[DocumentTaxonValidation]:
1171
+ """
1172
+ Gets the validations associated with this document.
1173
+
1174
+ Returns:
1175
+ List[DocumentTaxonValidation]: The list of validations stored in the validations table.
1176
+ """
1177
+ self.__ensure_validations_table_exists()
1178
+ result = self.cursor.execute("SELECT obj FROM validations WHERE rowid = 1").fetchone()
1179
+ if result and result[0]:
1180
+ return [DocumentTaxonValidation(**v) for v in msgpack.unpackb(result[0])]
1181
+ return []
1182
+
1141
1183
  def set_external_data(self, external_data: dict):
1142
1184
  """
1143
1185
  Sets the external data for the document.
@@ -1355,6 +1397,12 @@ class PersistenceManager(object):
1355
1397
  def set_steps(self, steps: list[ProcessingStep]):
1356
1398
  self._underlying_persistence.set_steps(steps)
1357
1399
 
1400
+ def set_validations(self, validations: list[DocumentTaxonValidation]):
1401
+ self._underlying_persistence.set_validations(validations)
1402
+
1403
+ def get_validations(self) -> list[DocumentTaxonValidation]:
1404
+ return self._underlying_persistence.get_validations()
1405
+
1358
1406
  def get_external_data(self) -> dict:
1359
1407
  """
1360
1408
  Gets the external data object associated with this document
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "kodexa"
3
- version = "7.0.011351810338"
3
+ version = "7.0.011483003156"
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"