from kodexa_document import Document
from kodexa_document.accessors import DataObjectInput, DataAttributeInput
with Document() as doc:
root = doc.create_node("document", "Invoice #12345")
doc.content_node = root
with doc.batch_transaction() as tx:
# Create a data object (returns immediately with a temporary record)
invoice = tx.data_objects.create(DataObjectInput(
path="/invoice"
))
# Add attributes using the temporary ID
tx.data_attributes.create(invoice['id'], DataAttributeInput(
tag="vendor-name",
string_value="Acme Corp",
confidence=0.95
))
tx.data_attributes.create(invoice['id'], DataAttributeInput(
tag="total-amount",
decimal_value=1234.56,
confidence=0.92
))
# Create child objects
for desc, amount in [("Widget A", 100.0), ("Widget B", 250.0)]:
line_item = tx.data_objects.create(DataObjectInput(
parent_id=invoice['id'],
path="/invoice/line-item"
))
tx.data_attributes.create(line_item['id'], DataAttributeInput(
tag="description",
string_value=desc,
confidence=0.90
))
tx.data_attributes.create(line_item['id'], DataAttributeInput(
tag="amount",
decimal_value=amount,
confidence=0.90
))
print(f"Queued {tx.operation_count} operations")
# All operations are committed atomically when exiting the context
# Verify the results
objects = doc.data_objects.get_all()
print(f"Created {len(objects)} data objects")