airbyte-cdk 6.41.9__py3-none-any.whl → 6.42.0__py3-none-any.whl

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.
@@ -117,5 +117,30 @@ def resolve_manifest(source: ManifestDeclarativeSource) -> AirbyteMessage:
117
117
  return error.as_airbyte_message()
118
118
 
119
119
 
120
+ def full_resolve_manifest(source: ManifestDeclarativeSource) -> AirbyteMessage:
121
+ try:
122
+ manifest = {**source.resolved_manifest}
123
+ streams = manifest.get("streams", [])
124
+ for stream in streams:
125
+ stream["dynamic_stream_name"] = None
126
+ streams.extend(source.dynamic_streams)
127
+ manifest["streams"] = streams
128
+ return AirbyteMessage(
129
+ type=Type.RECORD,
130
+ record=AirbyteRecordMessage(
131
+ data={"manifest": manifest},
132
+ emitted_at=_emitted_at(),
133
+ stream="full_resolve_manifest",
134
+ ),
135
+ )
136
+ except AirbyteTracedException as exc:
137
+ return exc.as_airbyte_message()
138
+ except Exception as exc:
139
+ error = AirbyteTracedException.from_exception(
140
+ exc, message=f"Error full resolving manifest: {str(exc)}"
141
+ )
142
+ return error.as_airbyte_message()
143
+
144
+
120
145
  def _emitted_at() -> int:
121
146
  return ab_datetime_now().to_epoch_millis()
@@ -12,6 +12,7 @@ from airbyte_cdk.connector import BaseConnector
12
12
  from airbyte_cdk.connector_builder.connector_builder_handler import (
13
13
  TestReadLimits,
14
14
  create_source,
15
+ full_resolve_manifest,
15
16
  get_limits,
16
17
  read_stream,
17
18
  resolve_manifest,
@@ -81,6 +82,8 @@ def handle_connector_builder_request(
81
82
  catalog is not None
82
83
  ), "`test_read` requires a valid `ConfiguredAirbyteCatalog`, got None."
83
84
  return read_stream(source, config, catalog, state, limits)
85
+ elif command == "full_resolve_manifest":
86
+ return full_resolve_manifest(source)
84
87
  else:
85
88
  raise ValueError(f"Unrecognized command {command}.")
86
89
 
@@ -3766,6 +3766,13 @@ definitions:
3766
3766
  type:
3767
3767
  type: string
3768
3768
  enum: [DynamicDeclarativeStream]
3769
+ name:
3770
+ title: Name
3771
+ description: The dynamic stream name.
3772
+ type: string
3773
+ default: ""
3774
+ example:
3775
+ - "Tables"
3769
3776
  stream_template:
3770
3777
  title: Stream Template
3771
3778
  description: Reference to the stream template.
@@ -106,6 +106,7 @@ class ManifestDeclarativeSource(DeclarativeSource):
106
106
  AlwaysLogSliceLogger() if emit_connector_builder_messages else DebugSliceLogger()
107
107
  )
108
108
 
109
+ self._config = config or {}
109
110
  self._validate_source()
110
111
 
111
112
  @property
@@ -116,6 +117,12 @@ class ManifestDeclarativeSource(DeclarativeSource):
116
117
  def message_repository(self) -> MessageRepository:
117
118
  return self._message_repository
118
119
 
120
+ @property
121
+ def dynamic_streams(self) -> List[Dict[str, Any]]:
122
+ return self._dynamic_stream_configs(
123
+ manifest=self._source_config, config=self._config, with_dynamic_stream_name=True
124
+ )
125
+
119
126
  @property
120
127
  def connection_checker(self) -> ConnectionChecker:
121
128
  check = self._source_config["check"]
@@ -348,13 +355,16 @@ class ManifestDeclarativeSource(DeclarativeSource):
348
355
  return stream_configs
349
356
 
350
357
  def _dynamic_stream_configs(
351
- self, manifest: Mapping[str, Any], config: Mapping[str, Any]
358
+ self,
359
+ manifest: Mapping[str, Any],
360
+ config: Mapping[str, Any],
361
+ with_dynamic_stream_name: Optional[bool] = None,
352
362
  ) -> List[Dict[str, Any]]:
353
363
  dynamic_stream_definitions: List[Dict[str, Any]] = manifest.get("dynamic_streams", [])
354
364
  dynamic_stream_configs: List[Dict[str, Any]] = []
355
365
  seen_dynamic_streams: Set[str] = set()
356
366
 
357
- for dynamic_definition in dynamic_stream_definitions:
367
+ for dynamic_definition_index, dynamic_definition in enumerate(dynamic_stream_definitions):
358
368
  components_resolver_config = dynamic_definition["components_resolver"]
359
369
 
360
370
  if not components_resolver_config:
@@ -393,6 +403,11 @@ class ManifestDeclarativeSource(DeclarativeSource):
393
403
  # Ensure that each stream is created with a unique name
394
404
  name = dynamic_stream.get("name")
395
405
 
406
+ if with_dynamic_stream_name:
407
+ dynamic_stream["dynamic_stream_name"] = dynamic_definition.get(
408
+ "name", f"dynamic_stream_{dynamic_definition_index}"
409
+ )
410
+
396
411
  if not isinstance(name, str):
397
412
  raise ValueError(
398
413
  f"Expected stream name {name} to be a string, got {type(name)}."
@@ -2489,6 +2489,9 @@ class HttpComponentsResolver(BaseModel):
2489
2489
 
2490
2490
  class DynamicDeclarativeStream(BaseModel):
2491
2491
  type: Literal["DynamicDeclarativeStream"]
2492
+ name: Optional[str] = Field(
2493
+ "", description="The dynamic stream name.", example=["Tables"], title="Name"
2494
+ )
2492
2495
  stream_template: DeclarativeStream = Field(
2493
2496
  ..., description="Reference to the stream template.", title="Stream Template"
2494
2497
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 6.41.9
3
+ Version: 6.42.0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -7,8 +7,8 @@ airbyte_cdk/config_observation.py,sha256=7SSPxtN0nXPkm4euGNcTTr1iLbwUL01jy-24V1H
7
7
  airbyte_cdk/connector.py,sha256=bO23kdGRkl8XKFytOgrrWFc_VagteTHVEF6IsbizVkM,4224
8
8
  airbyte_cdk/connector_builder/README.md,sha256=Hw3wvVewuHG9-QgsAq1jDiKuLlStDxKBz52ftyNRnBw,1665
9
9
  airbyte_cdk/connector_builder/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
10
- airbyte_cdk/connector_builder/connector_builder_handler.py,sha256=BntqkP63RBPvGCtB3CrLLtYplfSlBR42kwXyyk4YGas,4268
11
- airbyte_cdk/connector_builder/main.py,sha256=ubAPE0Oo5gjZOa-KMtLLJQkc8_inUpFR3sIb2DEh2No,3722
10
+ airbyte_cdk/connector_builder/connector_builder_handler.py,sha256=nifmVvtl_CEwlKwzsCZQ6YALXaRoGOF0XfBCiFUfjJE,5168
11
+ airbyte_cdk/connector_builder/main.py,sha256=YnOgXuY9O2SwAtrbhzoOTI8oN8tGERJWQdnl1Bm5HOw,3839
12
12
  airbyte_cdk/connector_builder/models.py,sha256=9pIZ98LW_d6fRS39VdnUOf3cxGt4TkC5MJ0_OrzcCRk,1578
13
13
  airbyte_cdk/connector_builder/test_reader/__init__.py,sha256=iTwBMoI9vaJotEgpqZbFjlxRcbxXYypSVJ9YxeHk7wc,120
14
14
  airbyte_cdk/connector_builder/test_reader/helpers.py,sha256=Iczn-_iczS2CaIAunWwyFcX0uLTra8Wh9JVfzm1Gfxo,26765
@@ -71,7 +71,7 @@ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=uhy0dRkA
71
71
  airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
72
72
  airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
73
73
  airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
74
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=Nvtm2TXNpzJ3sUEgqvnp7GnGUwM4yWgyh2D1F863cUU,152972
74
+ airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=twYvmNco0B7R8N5QXcTc1tbqWFB_7b-_i149LJbMss8,153129
75
75
  airbyte_cdk/sources/declarative/declarative_source.py,sha256=nF7wBqFd3AQmEKAm4CnIo29CJoQL562cJGSCeL8U8bA,1531
76
76
  airbyte_cdk/sources/declarative/declarative_stream.py,sha256=dCRlddBUSaJmBNBz1pSO1r2rTw8AP5d2_vlmIeGs2gg,10767
77
77
  airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=JHb_0d3SE6kNY10mxA5YBEKPeSbsWYjByq1gUQxepoE,953
@@ -109,12 +109,12 @@ airbyte_cdk/sources/declarative/interpolation/interpolated_string.py,sha256=CQkH
109
109
  airbyte_cdk/sources/declarative/interpolation/interpolation.py,sha256=9IoeuWam3L6GyN10L6U8xNWXmkt9cnahSDNkez1OmFY,982
110
110
  airbyte_cdk/sources/declarative/interpolation/jinja.py,sha256=UQeuS4Vpyp4hlOn-R3tRyeBX0e9IoV6jQ6gH-Jz8lY0,7182
111
111
  airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=HQKHKnjE17zKoPn27ZpTpugRZZQSaof4GVzUUZaV2eE,5081
112
- airbyte_cdk/sources/declarative/manifest_declarative_source.py,sha256=bgrVP227hsiPJO6QeZy0v1kmdjrjQM63dlDTaI0pAC8,18300
112
+ airbyte_cdk/sources/declarative/manifest_declarative_source.py,sha256=kFfyVpX-babuF4YzUHm7xfx_3M4M-GwJsrOWuez1z9Q,18894
113
113
  airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
114
  airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=iemy3fKLczcU0-Aor7tx5jcT6DRedKMqyK7kCOp01hg,3924
115
115
  airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
116
116
  airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
117
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=8ljLhODbBlMxacuKZzlWwmNeGkb6oqfKBVZA70Cg7gE,108248
117
+ airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=nzQqJjBo8wFUF9gqF9E52zDsEDQGpG46aWylViTcAJU,108372
118
118
  airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
119
119
  airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=nlVvHC511NUyDEEIRBkoeDTAvLqKNp-hRy8D19z8tdk,5941
120
120
  airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=Rir9_z3Kcd5Es0-LChrzk-0qubAsiK_RSEnLmK2OXm8,553
@@ -359,9 +359,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
359
359
  airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
360
360
  airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
361
361
  airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
362
- airbyte_cdk-6.41.9.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
363
- airbyte_cdk-6.41.9.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
364
- airbyte_cdk-6.41.9.dist-info/METADATA,sha256=qmik5GNMcO8EPPPAj8zSqWBv5gapQW_mqfZBg7sr7nw,6071
365
- airbyte_cdk-6.41.9.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
366
- airbyte_cdk-6.41.9.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
367
- airbyte_cdk-6.41.9.dist-info/RECORD,,
362
+ airbyte_cdk-6.42.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
363
+ airbyte_cdk-6.42.0.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
364
+ airbyte_cdk-6.42.0.dist-info/METADATA,sha256=Do1C-KGBA_TXQYaWqFyP6SqinuRcCeV-PVUd5pGdHvc,6071
365
+ airbyte_cdk-6.42.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
366
+ airbyte_cdk-6.42.0.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
367
+ airbyte_cdk-6.42.0.dist-info/RECORD,,