airbyte-cdk 6.26.0.dev4101__py3-none-any.whl → 6.26.0.dev4102__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.
@@ -11,6 +11,9 @@ from pydantic.v1 import AnyUrl, BaseModel, Field
11
11
 
12
12
  from airbyte_cdk import OneOfOptionConfig
13
13
  from airbyte_cdk.sources.file_based.config.file_based_stream_config import FileBasedStreamConfig
14
+ from airbyte_cdk.sources.file_based.config.identities_based_stream_config import (
15
+ IdentitiesStreamConfig,
16
+ )
14
17
  from airbyte_cdk.sources.utils import schema_helpers
15
18
 
16
19
 
@@ -22,12 +25,17 @@ class DeliverRecords(BaseModel):
22
25
 
23
26
  delivery_type: Literal["use_records_transfer"] = Field("use_records_transfer", const=True)
24
27
 
25
- sync_metadata: bool = Field(
26
- title="Make stream sync files metadata",
27
- description="If enabled, streams will sync files metadata instead of files data.",
28
+ sync_acl_permissions: bool = Field(
29
+ title="Include ACL Permissions",
30
+ description="Joins Document allowlists to each stream.",
28
31
  default=False,
29
32
  airbyte_hidden=True,
30
33
  )
34
+ identities: Optional[IdentitiesStreamConfig] = Field(
35
+ title="Identities configuration",
36
+ description="Configuration for identities",
37
+ airbyte_hidden=True,
38
+ )
31
39
 
32
40
 
33
41
  class DeliverRawFiles(BaseModel):
@@ -0,0 +1,8 @@
1
+ from typing import Literal
2
+
3
+ from pydantic.v1 import BaseModel, Field
4
+
5
+
6
+ class IdentitiesStreamConfig(BaseModel):
7
+ name: Literal["identities"] = Field("identities", const=True, airbyte_hidden=True)
8
+ domain: str = Field(title="Domain", description="The domain of the identities.")
@@ -0,0 +1,34 @@
1
+ #
2
+ # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+ import uuid
6
+ from datetime import datetime
7
+ from enum import Enum
8
+
9
+ from pydantic.v1 import BaseModel
10
+
11
+
12
+ class RemoteFileIdentityType(Enum):
13
+ USER = "user"
14
+ GROUP = "group"
15
+
16
+
17
+ class RemoteFileIdentity(BaseModel):
18
+ id: uuid.UUID
19
+ remote_id: str
20
+ parent_id: str | None = None
21
+ name: str | None = None
22
+ description: str | None = None
23
+ email_address: str | None = None
24
+ member_email_addresses: list[str] | None = None
25
+ type: RemoteFileIdentityType
26
+ modified_at: datetime
27
+
28
+
29
+ class RemoteFilePermissions(BaseModel):
30
+ id: str
31
+ file_path: str
32
+ allowed_identity_remote_ids: list[str] | None = None
33
+ denied_identity_remote_ids: list[str] | None = None
34
+ publicly_accessible: bool = False
@@ -33,6 +33,9 @@ from airbyte_cdk.sources.file_based.config.file_based_stream_config import (
33
33
  FileBasedStreamConfig,
34
34
  ValidationPolicy,
35
35
  )
36
+ from airbyte_cdk.sources.file_based.config.identities_based_stream_config import (
37
+ IdentitiesStreamConfig,
38
+ )
36
39
  from airbyte_cdk.sources.file_based.discovery_policy import (
37
40
  AbstractDiscoveryPolicy,
38
41
  DefaultDiscoveryPolicy,
@@ -49,7 +52,11 @@ from airbyte_cdk.sources.file_based.schema_validation_policies import (
49
52
  DEFAULT_SCHEMA_VALIDATION_POLICIES,
50
53
  AbstractSchemaValidationPolicy,
51
54
  )
52
- from airbyte_cdk.sources.file_based.stream import AbstractFileBasedStream, DefaultFileBasedStream
55
+ from airbyte_cdk.sources.file_based.stream import (
56
+ AbstractFileBasedStream,
57
+ DefaultFileBasedStream,
58
+ IdentitiesStream,
59
+ )
53
60
  from airbyte_cdk.sources.file_based.stream.concurrent.adapters import FileBasedStreamFacade
54
61
  from airbyte_cdk.sources.file_based.stream.concurrent.cursor import (
55
62
  AbstractConcurrentFileBasedCursor,
@@ -157,13 +164,17 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
157
164
  errors = []
158
165
  tracebacks = []
159
166
  for stream in streams:
167
+ if isinstance(stream, IdentitiesStream):
168
+ # Probably need to check identities endpoint/api access but will skip for now.
169
+ continue
160
170
  if not isinstance(stream, AbstractFileBasedStream):
161
171
  raise ValueError(f"Stream {stream} is not a file-based stream.")
162
172
  try:
163
173
  parsed_config = self._get_parsed_config(config)
164
174
  availability_method = (
165
175
  stream.availability_strategy.check_availability
166
- if self._use_file_transfer(parsed_config) or self._sync_metadata(parsed_config)
176
+ if self._use_file_transfer(parsed_config)
177
+ or self._sync_acl_permissions(parsed_config)
167
178
  else stream.availability_strategy.check_availability_and_parsability
168
179
  )
169
180
  (
@@ -289,6 +300,13 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
289
300
  )
290
301
 
291
302
  streams.append(stream)
303
+
304
+ identities_stream_config = self._get_identities_stream_config(parsed_config)
305
+ if identities_stream_config:
306
+ identities_stream = self._make_identities_stream(
307
+ stream_config=identities_stream_config
308
+ )
309
+ streams.append(identities_stream)
292
310
  return streams
293
311
 
294
312
  except ValidationError as exc:
@@ -312,7 +330,19 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
312
330
  cursor=cursor,
313
331
  use_file_transfer=self._use_file_transfer(parsed_config),
314
332
  preserve_directory_structure=self._preserve_directory_structure(parsed_config),
315
- sync_metadata=self._sync_metadata(parsed_config),
333
+ sync_acl_permissions=self._sync_acl_permissions(parsed_config),
334
+ )
335
+
336
+ def _make_identities_stream(
337
+ self,
338
+ stream_config: IdentitiesStreamConfig,
339
+ ) -> Stream:
340
+ return IdentitiesStream(
341
+ config=stream_config,
342
+ catalog_schema=self.stream_schemas.get(stream_config.name),
343
+ stream_reader=self.stream_reader,
344
+ discovery_policy=self.discovery_policy,
345
+ errors_collector=self.errors_collector,
316
346
  )
317
347
 
318
348
  def _get_stream_from_catalog(
@@ -419,11 +449,26 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
419
449
  return True
420
450
 
421
451
  @staticmethod
422
- def _sync_metadata(parsed_config: AbstractFileBasedSpec) -> bool:
452
+ def _sync_acl_permissions(parsed_config: AbstractFileBasedSpec) -> bool:
423
453
  if (
424
454
  FileBasedSource._use_records_transfer(parsed_config)
425
- and hasattr(parsed_config.delivery_method, "sync_metadata")
426
- and parsed_config.delivery_method.sync_metadata is not None
455
+ and hasattr(parsed_config.delivery_method, "sync_acl_permissions")
456
+ and parsed_config.delivery_method.sync_acl_permissions is not None
427
457
  ):
428
- return parsed_config.delivery_method.sync_metadata
458
+ return parsed_config.delivery_method.sync_acl_permissions
429
459
  return False
460
+
461
+ @staticmethod
462
+ def _get_identities_stream_config(
463
+ parsed_config: AbstractFileBasedSpec,
464
+ ) -> Optional[IdentitiesStreamConfig]:
465
+ identities_stream_config = None
466
+ if (
467
+ FileBasedSource._sync_acl_permissions(parsed_config)
468
+ and hasattr(parsed_config.delivery_method, "identities")
469
+ and parsed_config.delivery_method.identities is not None
470
+ and isinstance(parsed_config.delivery_method.identities, IdentitiesStreamConfig)
471
+ and parsed_config.delivery_method.identities.domain
472
+ ):
473
+ identities_stream_config = parsed_config.delivery_method.identities
474
+ return identities_stream_config
@@ -155,14 +155,14 @@ class AbstractFileBasedStreamReader(ABC):
155
155
  return self.config.delivery_method.preserve_directory_structure
156
156
  return True
157
157
 
158
- def sync_metadata(self) -> bool:
158
+ def sync_acl_permissions(self) -> bool:
159
159
  if (
160
160
  self.config
161
161
  and self.use_records_transfer()
162
- and hasattr(self.config.delivery_method, "sync_metadata")
163
- and self.config.delivery_method.sync_metadata is not None
162
+ and hasattr(self.config.delivery_method, "sync_acl_permissions")
163
+ and self.config.delivery_method.sync_acl_permissions is not None
164
164
  ):
165
- return self.config.delivery_method.sync_metadata
165
+ return self.config.delivery_method.sync_acl_permissions
166
166
  return False
167
167
 
168
168
  @abstractmethod
@@ -203,25 +203,16 @@ class AbstractFileBasedStreamReader(ABC):
203
203
  absolute_file_path = path.abspath(local_file_path)
204
204
  return [file_relative_path, local_file_path, absolute_file_path]
205
205
 
206
- def get_file_metadata(self, file: RemoteFile, logger: logging.Logger) -> Dict[str, Any]:
206
+ def get_file_acl_permissions(self, file: RemoteFile, logger: logging.Logger) -> Dict[str, Any]:
207
207
  """
208
208
  This is required for connectors that will support syncing
209
- metadata from files.
209
+ ACL Permissions from files.
210
210
  """
211
211
  return {}
212
212
 
213
- def get_metadata_schema(self) -> Dict[str, Any]:
214
- """ "
215
- Base schema to emit metadata records for a file,
216
- override in stream reader implementation if the requirements
217
- are different.
218
- """
219
- return {
220
- "type": "object",
221
- "properties": {
222
- "id": {"type": "string"},
223
- "file_path": {"type": "string"},
224
- "allowed_identity_remote_ids": {"type": "array", "items": "string"},
225
- "is_public": {"type": "boolean"},
226
- },
227
- }
213
+ def load_identity_groups(self) -> Iterable[Dict[str, Any]]:
214
+ """
215
+ This is required for connectors that will support syncing
216
+ identities.
217
+ """
218
+ yield {}
@@ -23,6 +23,31 @@ file_transfer_schema = {
23
23
  "properties": {"data": {"type": "object"}, "file": {"type": "object"}},
24
24
  }
25
25
 
26
+ remote_file_permissions_schema = {
27
+ "type": "object",
28
+ "properties": {
29
+ "id": {"type": "string"},
30
+ "file_path": {"type": "string"},
31
+ "allowed_identity_remote_ids": {"type": "array", "items": {"type": "string"}},
32
+ "publicly_accessible": {"type": "boolean"},
33
+ },
34
+ }
35
+
36
+ remote_file_identity_schema = {
37
+ "type": "object",
38
+ "properties": {
39
+ "id": {"type": "string"},
40
+ "remote_id": {"type": "string"},
41
+ "parent_id": {"type": ["null", "string"]},
42
+ "name": {"type": ["null", "string"]},
43
+ "description": {"type": ["null", "string"]},
44
+ "email_address": {"type": ["null", "string"]},
45
+ "member_email_addresses": {"type": ["null", "array"]},
46
+ "type": {"type": "string"},
47
+ "modified_at": {"type": "string"},
48
+ },
49
+ }
50
+
26
51
 
27
52
  @total_ordering
28
53
  class ComparableType(Enum):
@@ -1,4 +1,5 @@
1
1
  from airbyte_cdk.sources.file_based.stream.abstract_file_based_stream import AbstractFileBasedStream
2
2
  from airbyte_cdk.sources.file_based.stream.default_file_based_stream import DefaultFileBasedStream
3
+ from airbyte_cdk.sources.file_based.stream.identities_stream import IdentitiesStream
3
4
 
4
- __all__ = ["AbstractFileBasedStream", "DefaultFileBasedStream"]
5
+ __all__ = ["AbstractFileBasedStream", "DefaultFileBasedStream", "IdentitiesStream"]
@@ -29,6 +29,7 @@ from airbyte_cdk.sources.file_based.schema_helpers import (
29
29
  SchemaType,
30
30
  file_transfer_schema,
31
31
  merge_schemas,
32
+ remote_file_permissions_schema,
32
33
  schemaless_schema,
33
34
  )
34
35
  from airbyte_cdk.sources.file_based.stream import AbstractFileBasedStream
@@ -47,7 +48,7 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
47
48
 
48
49
  FILE_TRANSFER_KW = "use_file_transfer"
49
50
  PRESERVE_DIRECTORY_STRUCTURE_KW = "preserve_directory_structure"
50
- SYNC_METADATA_KW = "sync_metadata"
51
+ SYNC_ACL_PERMISSIONS_KW = "sync_acl_permissions"
51
52
  FILES_KEY = "files"
52
53
  DATE_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
53
54
  ab_last_mod_col = "_ab_source_file_last_modified"
@@ -57,7 +58,7 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
57
58
  airbyte_columns = [ab_last_mod_col, ab_file_name_col]
58
59
  use_file_transfer = False
59
60
  preserve_directory_structure = True
60
- sync_metadata = False
61
+ sync_acl_permissions = False
61
62
 
62
63
  def __init__(self, **kwargs: Any):
63
64
  if self.FILE_TRANSFER_KW in kwargs:
@@ -66,8 +67,8 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
66
67
  self.preserve_directory_structure = kwargs.pop(
67
68
  self.PRESERVE_DIRECTORY_STRUCTURE_KW, True
68
69
  )
69
- if self.SYNC_METADATA_KW in kwargs:
70
- self.sync_metadata = kwargs.pop(self.SYNC_METADATA_KW, False)
70
+ if self.SYNC_ACL_PERMISSIONS_KW in kwargs:
71
+ self.sync_acl_permissions = kwargs.pop(self.SYNC_ACL_PERMISSIONS_KW, False)
71
72
  super().__init__(**kwargs)
72
73
 
73
74
  @property
@@ -109,8 +110,8 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
109
110
  self.ab_file_name_col: {"type": "string"},
110
111
  },
111
112
  }
112
- elif self.sync_metadata:
113
- return self.stream_reader.get_metadata_schema()
113
+ elif self.sync_acl_permissions:
114
+ return remote_file_permissions_schema
114
115
  else:
115
116
  return super()._filter_schema_invalid_properties(configured_catalog_json_schema)
116
117
 
@@ -193,9 +194,9 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
193
194
  yield stream_data_to_airbyte_message(
194
195
  self.name, record, is_file_transfer_message=True
195
196
  )
196
- elif self.sync_metadata:
197
+ elif self.sync_acl_permissions:
197
198
  try:
198
- metadata_record = self.stream_reader.get_file_metadata(
199
+ metadata_record = self.stream_reader.get_file_acl_permissions(
199
200
  file, logger=self.logger
200
201
  )
201
202
  yield stream_data_to_airbyte_message(
@@ -310,8 +311,8 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
310
311
  def _get_raw_json_schema(self) -> JsonSchema:
311
312
  if self.use_file_transfer:
312
313
  return file_transfer_schema
313
- elif self.sync_metadata:
314
- return self.stream_reader.get_metadata_schema()
314
+ elif self.sync_acl_permissions:
315
+ return remote_file_permissions_schema
315
316
  elif self.config.input_schema:
316
317
  return self.config.get_input_schema() # type: ignore
317
318
  elif self.config.schemaless:
@@ -0,0 +1,99 @@
1
+ #
2
+ # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+ import traceback
6
+ from functools import cache
7
+ from typing import Any, Iterable, List, Mapping, MutableMapping, Optional
8
+
9
+ from airbyte_protocol_dataclasses.models import SyncMode
10
+
11
+ from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, Level
12
+ from airbyte_cdk.models import Type as MessageType
13
+ from airbyte_cdk.sources.file_based.config.file_based_stream_config import PrimaryKeyType
14
+ from airbyte_cdk.sources.file_based.config.identities_based_stream_config import (
15
+ IdentitiesStreamConfig,
16
+ )
17
+ from airbyte_cdk.sources.file_based.discovery_policy import AbstractDiscoveryPolicy
18
+ from airbyte_cdk.sources.file_based.exceptions import FileBasedErrorsCollector, FileBasedSourceError
19
+ from airbyte_cdk.sources.file_based.file_based_stream_reader import AbstractFileBasedStreamReader
20
+ from airbyte_cdk.sources.file_based.schema_helpers import remote_file_identity_schema
21
+ from airbyte_cdk.sources.file_based.types import StreamSlice
22
+ from airbyte_cdk.sources.streams import Stream
23
+ from airbyte_cdk.sources.streams.checkpoint import Cursor
24
+ from airbyte_cdk.sources.streams.core import JsonSchema
25
+ from airbyte_cdk.sources.utils.record_helper import stream_data_to_airbyte_message
26
+ from airbyte_cdk.utils.traced_exception import AirbyteTracedException
27
+
28
+
29
+ class IdentitiesStream(Stream):
30
+ """
31
+ The identities stream. A full refresh stream to sync identities from a certain domain.
32
+ The stream reader manage the logic to get such data, which is implemented on connector side.
33
+ """
34
+
35
+ is_resumable = False
36
+
37
+ def __init__(
38
+ self,
39
+ config: IdentitiesStreamConfig,
40
+ catalog_schema: Optional[Mapping[str, Any]],
41
+ stream_reader: AbstractFileBasedStreamReader,
42
+ discovery_policy: AbstractDiscoveryPolicy,
43
+ errors_collector: FileBasedErrorsCollector,
44
+ ):
45
+ super().__init__()
46
+ self.config = config
47
+ self.catalog_schema = catalog_schema
48
+ self.stream_reader = stream_reader
49
+ self._discovery_policy = discovery_policy
50
+ self.errors_collector = errors_collector
51
+ self._cursor: MutableMapping[str, Any] = {}
52
+
53
+ @property
54
+ def state(self) -> MutableMapping[str, Any]:
55
+ return self._cursor
56
+
57
+ @state.setter
58
+ def state(self, value: MutableMapping[str, Any]) -> None:
59
+ """State setter, accept state serialized by state getter."""
60
+ self._cursor = value
61
+
62
+ @property
63
+ def primary_key(self) -> PrimaryKeyType:
64
+ return None
65
+
66
+ def read_records(
67
+ self,
68
+ sync_mode: SyncMode,
69
+ cursor_field: Optional[List[str]] = None,
70
+ stream_slice: Optional[StreamSlice] = None,
71
+ stream_state: Optional[Mapping[str, Any]] = None,
72
+ ) -> Iterable[Mapping[str, Any] | AirbyteMessage]:
73
+ try:
74
+ identity_groups = self.stream_reader.load_identity_groups()
75
+ for record in identity_groups:
76
+ yield stream_data_to_airbyte_message(self.name, record)
77
+ except AirbyteTracedException as exc:
78
+ # Re-raise the exception to stop the whole sync immediately as this is a fatal error
79
+ raise exc
80
+ except Exception:
81
+ yield AirbyteMessage(
82
+ type=MessageType.LOG,
83
+ log=AirbyteLogMessage(
84
+ level=Level.ERROR,
85
+ message=f"{FileBasedSourceError.ERROR_PARSING_RECORD.value} stream={self.name}",
86
+ stack_trace=traceback.format_exc(),
87
+ ),
88
+ )
89
+
90
+ @cache
91
+ def get_json_schema(self) -> JsonSchema:
92
+ return remote_file_identity_schema
93
+
94
+ @property
95
+ def name(self) -> str:
96
+ return self.config.name
97
+
98
+ def get_cursor(self) -> Optional[Cursor]:
99
+ return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: airbyte-cdk
3
- Version: 6.26.0.dev4101
3
+ Version: 6.26.0.dev4102
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  License: MIT
6
6
  Keywords: airbyte,connector-development-kit,cdk
@@ -201,20 +201,22 @@ airbyte_cdk/sources/file_based/availability_strategy/__init__.py,sha256=ddKQfUmk
201
201
  airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py,sha256=01Nd4b7ERAbp-OZo_8rrAzFXWPTMwr02SnWiN17nx8Q,2363
202
202
  airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py,sha256=j9T5TimfWFUz7nqsaj-83G3xWmDpsmeSbDnaUNmz0UM,5849
203
203
  airbyte_cdk/sources/file_based/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
204
- airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py,sha256=Dy610bcb2qedzKQ2OE08cYVQnkn7odBWcNx4sDVuy38,7129
204
+ airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py,sha256=891uAzErUPQIPqr9mdzNBdU5aXGHCFCH4X64puVzQvI,7402
205
205
  airbyte_cdk/sources/file_based/config/avro_format.py,sha256=NxTF96ewzn6HuhgodsY7Rpb-ybr1ZEWW5d4Vid64g5A,716
206
206
  airbyte_cdk/sources/file_based/config/csv_format.py,sha256=NWekkyT8dTwiVK0mwa_krQD4FJPHSDfILo8kPAg3-Vs,8006
207
207
  airbyte_cdk/sources/file_based/config/excel_format.py,sha256=9qAmTsT6SoVzNfNv0oBVkVCmiyqQuVAbfRKajjoa7Js,378
208
208
  airbyte_cdk/sources/file_based/config/file_based_stream_config.py,sha256=rkTuHpz9G8o2YEnCkOZJM2vJZt_hEE4zklHivRfx43s,4647
209
+ airbyte_cdk/sources/file_based/config/identities_based_stream_config.py,sha256=VNlY8otsCLT8nvB6drT9CO1UqDGaRqP0VeQpdCJApw8,284
209
210
  airbyte_cdk/sources/file_based/config/jsonl_format.py,sha256=cxtpz4t9_ERQyj_1Bx4DjOxuYLykWt0B02S4dWW5BgM,378
210
211
  airbyte_cdk/sources/file_based/config/parquet_format.py,sha256=XOp-7nmm_WcbGI8SjKH2fs3Mkf1H4RAOYSWeUFYAz3w,741
212
+ airbyte_cdk/sources/file_based/config/permissions.py,sha256=CmXKilhNQOfm4NFlXVBFF2pz3hIUrt3JFp5bPVerE_8,781
211
213
  airbyte_cdk/sources/file_based/config/unstructured_format.py,sha256=tIbB9Pn1HqU67ju7hEZ9dBstRrb2eojUNMsdckzbj58,3565
212
214
  airbyte_cdk/sources/file_based/discovery_policy/__init__.py,sha256=gl3ey6mZbyfraB9P3pFhf9UJp2JeTZ1SUFAopy2iBvY,301
213
215
  airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py,sha256=dCfXX529Rd5rtopg4VeEgTPJjFtqjtjzPq6LCw18Wt0,605
214
216
  airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py,sha256=-xujTidtrq6HC00WKbjQh1CZdT5LMuzkp5BLjqDmfTY,1007
215
217
  airbyte_cdk/sources/file_based/exceptions.py,sha256=WP0qkG6fpWoBpOyyicgp5YNE393VWyegq5qSy0v4QtM,7362
216
- airbyte_cdk/sources/file_based/file_based_source.py,sha256=w2Zyts8ZIcsYs5T_VzkHkgCZLQxCNb2rSIa_T0mSzso,18451
217
- airbyte_cdk/sources/file_based/file_based_stream_reader.py,sha256=3tsXmh98GiYzfFXlEeUP9sKyNvQatrFkGVG1jm1RiQU,8333
218
+ airbyte_cdk/sources/file_based/file_based_source.py,sha256=EQSua5n3OihEt95ROCmdv7pVLCZfdNn4jxJKyLvhMR0,20267
219
+ airbyte_cdk/sources/file_based/file_based_stream_reader.py,sha256=5TOUfVas5wiH7PaR5hrFfJFpbx12tAvBDLQy2xzFNJ0,8012
218
220
  airbyte_cdk/sources/file_based/file_types/__init__.py,sha256=blCLn0-2LC-ZdgcNyDEhqM2RiUvEjEBh-G4-t32ZtuM,1268
219
221
  airbyte_cdk/sources/file_based/file_types/avro_parser.py,sha256=XNx-JC-sgzH9u3nOJ2M59FxBXvtig8LN6BIkeDOavZA,10858
220
222
  airbyte_cdk/sources/file_based/file_types/csv_parser.py,sha256=QlCXB-ry3np67Q_VerQEPoWDOTcPTB6Go4ydZxY9ae4,20445
@@ -225,11 +227,11 @@ airbyte_cdk/sources/file_based/file_types/jsonl_parser.py,sha256=GwyNyxmST4RX-Xp
225
227
  airbyte_cdk/sources/file_based/file_types/parquet_parser.py,sha256=XenFg5sJ-UBnIkSmsiNJRou11NO0zZXx-RXgPHMT2NA,10487
226
228
  airbyte_cdk/sources/file_based/file_types/unstructured_parser.py,sha256=2TYOQl62FQPCa8otLbkDIk_j01EP3oWaKSfXGhCjCHg,19492
227
229
  airbyte_cdk/sources/file_based/remote_file.py,sha256=yqRz93vPe8PBXLIMJ5W5u2JRlZRhg6sBrAjn3pPjJ8A,315
228
- airbyte_cdk/sources/file_based/schema_helpers.py,sha256=Cf8FH1bDFP0qCDDfEYir_WjP4exXUnikz8hZ40y1Ek0,9601
230
+ airbyte_cdk/sources/file_based/schema_helpers.py,sha256=GJJgJPDtd0MjcB5Qt2ulqBrUT-A308loQOvoHvynUTk,10408
229
231
  airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py,sha256=FkByIyEy56x2_awYnxGPqGaOp7zAzpAoRkPZHKySI9M,536
230
232
  airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py,sha256=kjvX7nOmUALYd7HuZHilUzgJPZ-MnZ08mtvuBnt2tQ0,618
231
233
  airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py,sha256=vjTlmYT_nqzY3DbT5xem7X-bwgA9RyXHoKFqiMO2URk,1728
232
- airbyte_cdk/sources/file_based/stream/__init__.py,sha256=QPDqdgjsabOQD93dSFqHGaFS_3pIwm-chEabZHiPJi0,265
234
+ airbyte_cdk/sources/file_based/stream/__init__.py,sha256=Ib2D59Ehj3PKCfFvn_pamg_aMC1IN-XcYpWCfTw0oxg,370
233
235
  airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py,sha256=9pQh3BHYcxm8CRC8XawfmBxL8O9HggpWwCCbX_ncINE,7509
234
236
  airbyte_cdk/sources/file_based/stream/concurrent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
235
237
  airbyte_cdk/sources/file_based/stream/concurrent/adapters.py,sha256=WZ5q2uovgohauJgwfxq_LFeZ92WMZd0LoH6c5QQURPo,13931
@@ -240,7 +242,8 @@ airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_c
240
242
  airbyte_cdk/sources/file_based/stream/cursor/__init__.py,sha256=MhFB5hOo8sjwvCh8gangaymdg3EJWYt_72brFOZt068,191
241
243
  airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py,sha256=om-x3gZFPgWDpi15S9RxZmR36VHnk8sytgN6LlBQhAw,1934
242
244
  airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py,sha256=VGV7xLyBribuBMVrXtO1xqkWJD86bl7yhXtjnwLMohM,7051
243
- airbyte_cdk/sources/file_based/stream/default_file_based_stream.py,sha256=0uIIBsXsIm0rs6kKorurKE4donMVmt-oifufzW9fTJw,19443
245
+ airbyte_cdk/sources/file_based/stream/default_file_based_stream.py,sha256=SFb1UXtJtaqo-1t7hM3ahM1ZTH2k01oqX1mAJvz08Y0,19529
246
+ airbyte_cdk/sources/file_based/stream/identities_stream.py,sha256=hDb_XgfD6d42mVVMMRwUg7t3CTGOmHGVspoqjNha_Gc,3763
244
247
  airbyte_cdk/sources/file_based/types.py,sha256=INxG7OPnkdUP69oYNKMAbwhvV1AGvLRHs1J6pIia2FI,218
245
248
  airbyte_cdk/sources/http_config.py,sha256=OBZeuyFilm6NlDlBhFQvHhTWabEvZww6OHDIlZujIS0,730
246
249
  airbyte_cdk/sources/http_logger.py,sha256=l_1fk5YwdonZ1wvAsTwjj6d36fj2WrVraIAMj5jTQdM,1575
@@ -350,8 +353,8 @@ airbyte_cdk/utils/slice_hasher.py,sha256=-pHexlNYoWYPnXNH-M7HEbjmeJe9Zk7SJijdQ7d
350
353
  airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
351
354
  airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
352
355
  airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
353
- airbyte_cdk-6.26.0.dev4101.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
354
- airbyte_cdk-6.26.0.dev4101.dist-info/METADATA,sha256=ztd9x_rMyeIuYbibnSoLLvCOYA2ZY5zZpd-TkacP_S0,6004
355
- airbyte_cdk-6.26.0.dev4101.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
356
- airbyte_cdk-6.26.0.dev4101.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
357
- airbyte_cdk-6.26.0.dev4101.dist-info/RECORD,,
356
+ airbyte_cdk-6.26.0.dev4102.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
357
+ airbyte_cdk-6.26.0.dev4102.dist-info/METADATA,sha256=gtF4bkA79n-3Qpw6hYkCkH2N7t6RlXxprSdcb_wkj8c,6004
358
+ airbyte_cdk-6.26.0.dev4102.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
359
+ airbyte_cdk-6.26.0.dev4102.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
360
+ airbyte_cdk-6.26.0.dev4102.dist-info/RECORD,,