Skip to content

Commit a9bdb6a

Browse files
authored
feat(custom-target): support optional prepare() method (#816)
1 parent a6249cf commit a9bdb6a

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

python/cocoindex/op.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,7 @@ def __call__(self, *args: Any, **kwargs: Any) -> Any:
405405
class _TargetConnectorContext:
406406
target_name: str
407407
spec: Any
408+
prepared_spec: Any
408409
key_decoder: Callable[[Any], Any]
409410
value_decoder: Callable[[Any], Any]
410411

@@ -515,9 +516,17 @@ def create_export_context(
515516
["(value)"], value_fields_schema, analyze_type_info(value_annotation)
516517
)
517518

519+
loaded_spec = _load_spec_from_engine(self._spec_cls, spec)
520+
prepare_method = getattr(self._connector_cls, "prepare", None)
521+
if prepare_method is None:
522+
prepared_spec = loaded_spec
523+
else:
524+
prepared_spec = prepare_method(loaded_spec)
525+
518526
return _TargetConnectorContext(
519527
target_name=name,
520-
spec=_load_spec_from_engine(self._spec_cls, spec),
528+
spec=loaded_spec,
529+
prepared_spec=prepared_spec,
521530
key_decoder=key_decoder,
522531
value_decoder=value_decoder,
523532
)
@@ -557,7 +566,7 @@ def _decode_mutation(
557566
context: _TargetConnectorContext, mutation: list[tuple[Any, Any | None]]
558567
) -> tuple[Any, dict[Any, Any | None]]:
559568
return (
560-
context.spec,
569+
context.prepared_spec,
561570
{
562571
context.key_decoder(key): (
563572
context.value_decoder(value) if value is not None else None

0 commit comments

Comments
 (0)