airbyte-cdk 6.26.0.dev4106__py3-none-any.whl → 6.26.0.dev4107__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.
- airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +18 -11
- airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +51 -0
- airbyte_cdk/sources/file_based/file_based_source.py +11 -54
- airbyte_cdk/sources/file_based/file_based_stream_reader.py +15 -31
- airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +7 -7
- {airbyte_cdk-6.26.0.dev4106.dist-info → airbyte_cdk-6.26.0.dev4107.dist-info}/METADATA +1 -1
- {airbyte_cdk-6.26.0.dev4106.dist-info → airbyte_cdk-6.26.0.dev4107.dist-info}/RECORD +10 -10
- airbyte_cdk/sources/file_based/config/permissions.py +0 -34
- {airbyte_cdk-6.26.0.dev4106.dist-info → airbyte_cdk-6.26.0.dev4107.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.26.0.dev4106.dist-info → airbyte_cdk-6.26.0.dev4107.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.26.0.dev4106.dist-info → airbyte_cdk-6.26.0.dev4107.dist-info}/entry_points.txt +0 -0
@@ -14,6 +14,23 @@ from airbyte_cdk.sources.file_based.config.file_based_stream_config import FileB
|
|
14
14
|
from airbyte_cdk.sources.utils import schema_helpers
|
15
15
|
|
16
16
|
|
17
|
+
class DeliverPermissions(BaseModel):
|
18
|
+
class Config(OneOfOptionConfig):
|
19
|
+
title = "Replicate Permissions ACL"
|
20
|
+
description = "Sends one identity stream and one for more permissions (ACL) streams to the destination. This data can be used in downstream systems to recreate permission restrictions mirroring the original source."
|
21
|
+
discriminator = "delivery_type"
|
22
|
+
|
23
|
+
delivery_type: Literal["use_permissions_transfer"] = Field(
|
24
|
+
"use_permissions_transfer", const=True
|
25
|
+
)
|
26
|
+
|
27
|
+
include_identities_stream: bool = Field(
|
28
|
+
title="Include Identity Stream",
|
29
|
+
description="This data can be used in downstream systems to recreate permission restrictions mirroring the original source",
|
30
|
+
default=True,
|
31
|
+
)
|
32
|
+
|
33
|
+
|
17
34
|
class DeliverRecords(BaseModel):
|
18
35
|
class Config(OneOfOptionConfig):
|
19
36
|
title = "Replicate Records"
|
@@ -22,16 +39,6 @@ class DeliverRecords(BaseModel):
|
|
22
39
|
|
23
40
|
delivery_type: Literal["use_records_transfer"] = Field("use_records_transfer", const=True)
|
24
41
|
|
25
|
-
sync_acl_permissions: bool = Field(
|
26
|
-
title="Include ACL Permissions",
|
27
|
-
description="Joins Document allowlists to each stream.",
|
28
|
-
default=False,
|
29
|
-
airbyte_hidden=True,
|
30
|
-
)
|
31
|
-
domain: Optional[str] = Field(
|
32
|
-
title="Domain", description="The domain of the identities.", airbyte_hidden=True
|
33
|
-
)
|
34
|
-
|
35
42
|
|
36
43
|
class DeliverRawFiles(BaseModel):
|
37
44
|
class Config(OneOfOptionConfig):
|
@@ -75,7 +82,7 @@ class AbstractFileBasedSpec(BaseModel):
|
|
75
82
|
order=10,
|
76
83
|
)
|
77
84
|
|
78
|
-
delivery_method: Union[DeliverRecords, DeliverRawFiles] = Field(
|
85
|
+
delivery_method: Union[DeliverRecords, DeliverRawFiles, DeliverPermissions] = Field(
|
79
86
|
title="Delivery Method",
|
80
87
|
discriminator="delivery_type",
|
81
88
|
type="object",
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
from airbyte_cdk.sources.file_based.config.abstract_file_based_spec import AbstractFileBasedSpec
|
6
|
+
|
7
|
+
|
8
|
+
def use_file_transfer(parsed_config: AbstractFileBasedSpec) -> bool:
|
9
|
+
return (
|
10
|
+
hasattr(parsed_config.delivery_method, "delivery_type")
|
11
|
+
and parsed_config.delivery_method.delivery_type == "use_file_transfer"
|
12
|
+
)
|
13
|
+
|
14
|
+
|
15
|
+
def preserve_directory_structure(parsed_config: AbstractFileBasedSpec) -> bool:
|
16
|
+
"""
|
17
|
+
Determines whether to preserve directory structure during file transfer.
|
18
|
+
|
19
|
+
When enabled, files maintain their subdirectory paths in the destination.
|
20
|
+
When disabled, files are flattened to the root of the destination.
|
21
|
+
|
22
|
+
Args:
|
23
|
+
parsed_config: The parsed configuration containing delivery method settings
|
24
|
+
|
25
|
+
Returns:
|
26
|
+
True if directory structure should be preserved (default), False otherwise
|
27
|
+
"""
|
28
|
+
if (
|
29
|
+
use_file_transfer(parsed_config)
|
30
|
+
and hasattr(parsed_config.delivery_method, "preserve_directory_structure")
|
31
|
+
and parsed_config.delivery_method.preserve_directory_structure is not None
|
32
|
+
):
|
33
|
+
return parsed_config.delivery_method.preserve_directory_structure
|
34
|
+
return True
|
35
|
+
|
36
|
+
|
37
|
+
def use_permissions_transfer(parsed_config: AbstractFileBasedSpec) -> bool:
|
38
|
+
return (
|
39
|
+
hasattr(parsed_config.delivery_method, "delivery_type")
|
40
|
+
and parsed_config.delivery_method.delivery_type == "use_permissions_transfer"
|
41
|
+
)
|
42
|
+
|
43
|
+
|
44
|
+
def include_identities_stream(parsed_config: AbstractFileBasedSpec) -> bool:
|
45
|
+
if (
|
46
|
+
use_permissions_transfer(parsed_config)
|
47
|
+
and hasattr(parsed_config.delivery_method, "include_identities_stream")
|
48
|
+
and parsed_config.delivery_method.include_identities_stream is not None
|
49
|
+
):
|
50
|
+
return parsed_config.delivery_method.include_identities_stream
|
51
|
+
return False
|
@@ -33,6 +33,12 @@ 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.validate_config_transfer_modes import (
|
37
|
+
include_identities_stream,
|
38
|
+
preserve_directory_structure,
|
39
|
+
use_file_transfer,
|
40
|
+
use_permissions_transfer,
|
41
|
+
)
|
36
42
|
from airbyte_cdk.sources.file_based.discovery_policy import (
|
37
43
|
AbstractDiscoveryPolicy,
|
38
44
|
DefaultDiscoveryPolicy,
|
@@ -172,8 +178,7 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
|
|
172
178
|
parsed_config = self._get_parsed_config(config)
|
173
179
|
availability_method = (
|
174
180
|
stream.availability_strategy.check_availability
|
175
|
-
if
|
176
|
-
or self._sync_acl_permissions(parsed_config)
|
181
|
+
if use_file_transfer(parsed_config) or use_permissions_transfer(parsed_config)
|
177
182
|
else stream.availability_strategy.check_availability_and_parsability
|
178
183
|
)
|
179
184
|
(
|
@@ -300,7 +305,7 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
|
|
300
305
|
|
301
306
|
streams.append(stream)
|
302
307
|
|
303
|
-
if
|
308
|
+
if include_identities_stream(parsed_config):
|
304
309
|
identities_stream = self._make_identities_stream()
|
305
310
|
streams.append(identities_stream)
|
306
311
|
return streams
|
@@ -324,9 +329,9 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
|
|
324
329
|
validation_policy=self._validate_and_get_validation_policy(stream_config),
|
325
330
|
errors_collector=self.errors_collector,
|
326
331
|
cursor=cursor,
|
327
|
-
use_file_transfer=
|
328
|
-
preserve_directory_structure=
|
329
|
-
|
332
|
+
use_file_transfer=use_file_transfer(parsed_config),
|
333
|
+
preserve_directory_structure=preserve_directory_structure(parsed_config),
|
334
|
+
use_permissions_transfer=use_permissions_transfer(parsed_config),
|
330
335
|
)
|
331
336
|
|
332
337
|
def _make_identities_stream(
|
@@ -403,51 +408,3 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
|
|
403
408
|
"`input_schema` and `schemaless` options cannot both be set",
|
404
409
|
model=FileBasedStreamConfig,
|
405
410
|
)
|
406
|
-
|
407
|
-
@staticmethod
|
408
|
-
def _use_file_transfer(parsed_config: AbstractFileBasedSpec) -> bool:
|
409
|
-
use_file_transfer = (
|
410
|
-
hasattr(parsed_config.delivery_method, "delivery_type")
|
411
|
-
and parsed_config.delivery_method.delivery_type == "use_file_transfer"
|
412
|
-
)
|
413
|
-
return use_file_transfer
|
414
|
-
|
415
|
-
@staticmethod
|
416
|
-
def _use_records_transfer(parsed_config: AbstractFileBasedSpec) -> bool:
|
417
|
-
use_records_transfer = (
|
418
|
-
hasattr(parsed_config.delivery_method, "delivery_type")
|
419
|
-
and parsed_config.delivery_method.delivery_type == "use_records_transfer"
|
420
|
-
)
|
421
|
-
return use_records_transfer
|
422
|
-
|
423
|
-
@staticmethod
|
424
|
-
def _preserve_directory_structure(parsed_config: AbstractFileBasedSpec) -> bool:
|
425
|
-
"""
|
426
|
-
Determines whether to preserve directory structure during file transfer.
|
427
|
-
|
428
|
-
When enabled, files maintain their subdirectory paths in the destination.
|
429
|
-
When disabled, files are flattened to the root of the destination.
|
430
|
-
|
431
|
-
Args:
|
432
|
-
parsed_config: The parsed configuration containing delivery method settings
|
433
|
-
|
434
|
-
Returns:
|
435
|
-
True if directory structure should be preserved (default), False otherwise
|
436
|
-
"""
|
437
|
-
if (
|
438
|
-
FileBasedSource._use_file_transfer(parsed_config)
|
439
|
-
and hasattr(parsed_config.delivery_method, "preserve_directory_structure")
|
440
|
-
and parsed_config.delivery_method.preserve_directory_structure is not None
|
441
|
-
):
|
442
|
-
return parsed_config.delivery_method.preserve_directory_structure
|
443
|
-
return True
|
444
|
-
|
445
|
-
@staticmethod
|
446
|
-
def _sync_acl_permissions(parsed_config: AbstractFileBasedSpec) -> bool:
|
447
|
-
if (
|
448
|
-
FileBasedSource._use_records_transfer(parsed_config)
|
449
|
-
and hasattr(parsed_config.delivery_method, "sync_acl_permissions")
|
450
|
-
and parsed_config.delivery_method.sync_acl_permissions is not None
|
451
|
-
):
|
452
|
-
return parsed_config.delivery_method.sync_acl_permissions
|
453
|
-
return False
|
@@ -13,6 +13,11 @@ from typing import Any, Dict, Iterable, List, Optional, Set
|
|
13
13
|
from wcmatch.glob import GLOBSTAR, globmatch
|
14
14
|
|
15
15
|
from airbyte_cdk.sources.file_based.config.abstract_file_based_spec import AbstractFileBasedSpec
|
16
|
+
from airbyte_cdk.sources.file_based.config.validate_config_transfer_modes import (
|
17
|
+
include_identities_stream,
|
18
|
+
preserve_directory_structure,
|
19
|
+
use_file_transfer,
|
20
|
+
)
|
16
21
|
from airbyte_cdk.sources.file_based.remote_file import RemoteFile
|
17
22
|
|
18
23
|
|
@@ -128,41 +133,18 @@ class AbstractFileBasedStreamReader(ABC):
|
|
128
133
|
|
129
134
|
def use_file_transfer(self) -> bool:
|
130
135
|
if self.config:
|
131
|
-
use_file_transfer
|
132
|
-
hasattr(self.config.delivery_method, "delivery_type")
|
133
|
-
and self.config.delivery_method.delivery_type == "use_file_transfer"
|
134
|
-
)
|
135
|
-
return use_file_transfer
|
136
|
-
return False
|
137
|
-
|
138
|
-
def use_records_transfer(self) -> bool:
|
139
|
-
if self.config:
|
140
|
-
use_records_transfer = (
|
141
|
-
hasattr(self.config.delivery_method, "delivery_type")
|
142
|
-
and self.config.delivery_method.delivery_type == "use_records_transfer"
|
143
|
-
)
|
144
|
-
return use_records_transfer
|
136
|
+
return use_file_transfer(self.config)
|
145
137
|
return False
|
146
138
|
|
147
139
|
def preserve_directory_structure(self) -> bool:
|
148
140
|
# fall back to preserve subdirectories if config is not present or incomplete
|
149
|
-
if
|
150
|
-
self.
|
151
|
-
and self.config
|
152
|
-
and hasattr(self.config.delivery_method, "preserve_directory_structure")
|
153
|
-
and self.config.delivery_method.preserve_directory_structure is not None
|
154
|
-
):
|
155
|
-
return self.config.delivery_method.preserve_directory_structure
|
141
|
+
if self.config:
|
142
|
+
return preserve_directory_structure(self.config)
|
156
143
|
return True
|
157
144
|
|
158
|
-
def
|
159
|
-
if
|
160
|
-
self.config
|
161
|
-
and self.use_records_transfer()
|
162
|
-
and hasattr(self.config.delivery_method, "sync_acl_permissions")
|
163
|
-
and self.config.delivery_method.sync_acl_permissions is not None
|
164
|
-
):
|
165
|
-
return self.config.delivery_method.sync_acl_permissions
|
145
|
+
def include_identities_stream(self) -> bool:
|
146
|
+
if self.config:
|
147
|
+
return include_identities_stream(self.config)
|
166
148
|
return False
|
167
149
|
|
168
150
|
@abstractmethod
|
@@ -203,16 +185,18 @@ class AbstractFileBasedStreamReader(ABC):
|
|
203
185
|
absolute_file_path = path.abspath(local_file_path)
|
204
186
|
return [file_relative_path, local_file_path, absolute_file_path]
|
205
187
|
|
188
|
+
@abstractmethod
|
206
189
|
def get_file_acl_permissions(self, file: RemoteFile, logger: logging.Logger) -> Dict[str, Any]:
|
207
190
|
"""
|
208
191
|
This is required for connectors that will support syncing
|
209
192
|
ACL Permissions from files.
|
210
193
|
"""
|
211
|
-
|
194
|
+
...
|
212
195
|
|
196
|
+
@abstractmethod
|
213
197
|
def load_identity_groups(self, logger: logging.Logger) -> Iterable[Dict[str, Any]]:
|
214
198
|
"""
|
215
199
|
This is required for connectors that will support syncing
|
216
200
|
identities.
|
217
201
|
"""
|
218
|
-
|
202
|
+
...
|
@@ -48,7 +48,7 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
|
|
48
48
|
|
49
49
|
FILE_TRANSFER_KW = "use_file_transfer"
|
50
50
|
PRESERVE_DIRECTORY_STRUCTURE_KW = "preserve_directory_structure"
|
51
|
-
|
51
|
+
PERMISSIONS_TRANSFER_KW = "use_permissions_transfer"
|
52
52
|
FILES_KEY = "files"
|
53
53
|
DATE_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
|
54
54
|
ab_last_mod_col = "_ab_source_file_last_modified"
|
@@ -58,7 +58,7 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
|
|
58
58
|
airbyte_columns = [ab_last_mod_col, ab_file_name_col]
|
59
59
|
use_file_transfer = False
|
60
60
|
preserve_directory_structure = True
|
61
|
-
|
61
|
+
use_permissions_transfer = False
|
62
62
|
|
63
63
|
def __init__(self, **kwargs: Any):
|
64
64
|
if self.FILE_TRANSFER_KW in kwargs:
|
@@ -67,8 +67,8 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
|
|
67
67
|
self.preserve_directory_structure = kwargs.pop(
|
68
68
|
self.PRESERVE_DIRECTORY_STRUCTURE_KW, True
|
69
69
|
)
|
70
|
-
if self.
|
71
|
-
self.
|
70
|
+
if self.PERMISSIONS_TRANSFER_KW in kwargs:
|
71
|
+
self.use_permissions_transfer = kwargs.pop(self.PERMISSIONS_TRANSFER_KW, False)
|
72
72
|
super().__init__(**kwargs)
|
73
73
|
|
74
74
|
@property
|
@@ -110,7 +110,7 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
|
|
110
110
|
self.ab_file_name_col: {"type": "string"},
|
111
111
|
},
|
112
112
|
}
|
113
|
-
elif self.
|
113
|
+
elif self.use_permissions_transfer:
|
114
114
|
return remote_file_permissions_schema
|
115
115
|
else:
|
116
116
|
return super()._filter_schema_invalid_properties(configured_catalog_json_schema)
|
@@ -194,7 +194,7 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
|
|
194
194
|
yield stream_data_to_airbyte_message(
|
195
195
|
self.name, record, is_file_transfer_message=True
|
196
196
|
)
|
197
|
-
elif self.
|
197
|
+
elif self.use_permissions_transfer:
|
198
198
|
try:
|
199
199
|
permissions_record = self.stream_reader.get_file_acl_permissions(
|
200
200
|
file, logger=self.logger
|
@@ -314,7 +314,7 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
|
|
314
314
|
def _get_raw_json_schema(self) -> JsonSchema:
|
315
315
|
if self.use_file_transfer:
|
316
316
|
return file_transfer_schema
|
317
|
-
elif self.
|
317
|
+
elif self.use_permissions_transfer:
|
318
318
|
return remote_file_permissions_schema
|
319
319
|
elif self.config.input_schema:
|
320
320
|
return self.config.get_input_schema() # type: ignore
|
@@ -201,21 +201,21 @@ 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=
|
204
|
+
airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py,sha256=hYJaJt3dEsE7V1yFS5ICHwOxyw3LLF7j6_rxQ8i0Vuo,7667
|
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
209
|
airbyte_cdk/sources/file_based/config/jsonl_format.py,sha256=cxtpz4t9_ERQyj_1Bx4DjOxuYLykWt0B02S4dWW5BgM,378
|
210
210
|
airbyte_cdk/sources/file_based/config/parquet_format.py,sha256=XOp-7nmm_WcbGI8SjKH2fs3Mkf1H4RAOYSWeUFYAz3w,741
|
211
|
-
airbyte_cdk/sources/file_based/config/permissions.py,sha256=CmXKilhNQOfm4NFlXVBFF2pz3hIUrt3JFp5bPVerE_8,781
|
212
211
|
airbyte_cdk/sources/file_based/config/unstructured_format.py,sha256=tIbB9Pn1HqU67ju7hEZ9dBstRrb2eojUNMsdckzbj58,3565
|
212
|
+
airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py,sha256=xE1wRp9z8sPKiICKJHgmWdk6ubf0dY0DX-GtK1wN5KQ,1860
|
213
213
|
airbyte_cdk/sources/file_based/discovery_policy/__init__.py,sha256=gl3ey6mZbyfraB9P3pFhf9UJp2JeTZ1SUFAopy2iBvY,301
|
214
214
|
airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py,sha256=dCfXX529Rd5rtopg4VeEgTPJjFtqjtjzPq6LCw18Wt0,605
|
215
215
|
airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py,sha256=-xujTidtrq6HC00WKbjQh1CZdT5LMuzkp5BLjqDmfTY,1007
|
216
216
|
airbyte_cdk/sources/file_based/exceptions.py,sha256=WP0qkG6fpWoBpOyyicgp5YNE393VWyegq5qSy0v4QtM,7362
|
217
|
-
airbyte_cdk/sources/file_based/file_based_source.py,sha256=
|
218
|
-
airbyte_cdk/sources/file_based/file_based_stream_reader.py,sha256=
|
217
|
+
airbyte_cdk/sources/file_based/file_based_source.py,sha256=MMmPaISE7rQq1n23oOOwZH_x0alO9M0wDEORlNXI3NY,17513
|
218
|
+
airbyte_cdk/sources/file_based/file_based_stream_reader.py,sha256=XALJBMJ7betOItjObcthkFsL93ydBJx-WPNuS94f-9g,7232
|
219
219
|
airbyte_cdk/sources/file_based/file_types/__init__.py,sha256=blCLn0-2LC-ZdgcNyDEhqM2RiUvEjEBh-G4-t32ZtuM,1268
|
220
220
|
airbyte_cdk/sources/file_based/file_types/avro_parser.py,sha256=XNx-JC-sgzH9u3nOJ2M59FxBXvtig8LN6BIkeDOavZA,10858
|
221
221
|
airbyte_cdk/sources/file_based/file_types/csv_parser.py,sha256=QlCXB-ry3np67Q_VerQEPoWDOTcPTB6Go4ydZxY9ae4,20445
|
@@ -241,7 +241,7 @@ airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_c
|
|
241
241
|
airbyte_cdk/sources/file_based/stream/cursor/__init__.py,sha256=MhFB5hOo8sjwvCh8gangaymdg3EJWYt_72brFOZt068,191
|
242
242
|
airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py,sha256=om-x3gZFPgWDpi15S9RxZmR36VHnk8sytgN6LlBQhAw,1934
|
243
243
|
airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py,sha256=VGV7xLyBribuBMVrXtO1xqkWJD86bl7yhXtjnwLMohM,7051
|
244
|
-
airbyte_cdk/sources/file_based/stream/default_file_based_stream.py,sha256=
|
244
|
+
airbyte_cdk/sources/file_based/stream/default_file_based_stream.py,sha256=AF_fgHB_1pUAKgVWhjZLi3PMkIBdXlgT2Dl21XM_TcA,19740
|
245
245
|
airbyte_cdk/sources/file_based/stream/identities_stream.py,sha256=kHFaBn4Wsqi8PYI2z7_aGsjMPA5A4UoPrSMnKfxP4SA,3644
|
246
246
|
airbyte_cdk/sources/file_based/types.py,sha256=INxG7OPnkdUP69oYNKMAbwhvV1AGvLRHs1J6pIia2FI,218
|
247
247
|
airbyte_cdk/sources/http_config.py,sha256=OBZeuyFilm6NlDlBhFQvHhTWabEvZww6OHDIlZujIS0,730
|
@@ -352,8 +352,8 @@ airbyte_cdk/utils/slice_hasher.py,sha256=-pHexlNYoWYPnXNH-M7HEbjmeJe9Zk7SJijdQ7d
|
|
352
352
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
|
353
353
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
354
354
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
355
|
-
airbyte_cdk-6.26.0.
|
356
|
-
airbyte_cdk-6.26.0.
|
357
|
-
airbyte_cdk-6.26.0.
|
358
|
-
airbyte_cdk-6.26.0.
|
359
|
-
airbyte_cdk-6.26.0.
|
355
|
+
airbyte_cdk-6.26.0.dev4107.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
356
|
+
airbyte_cdk-6.26.0.dev4107.dist-info/METADATA,sha256=Dyv0dT4s3MD7a-AnBJQ_7wKk7YlSIRPbvWAX2L94jMU,6004
|
357
|
+
airbyte_cdk-6.26.0.dev4107.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
358
|
+
airbyte_cdk-6.26.0.dev4107.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
|
359
|
+
airbyte_cdk-6.26.0.dev4107.dist-info/RECORD,,
|
@@ -1,34 +0,0 @@
|
|
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
|
File without changes
|
File without changes
|
{airbyte_cdk-6.26.0.dev4106.dist-info → airbyte_cdk-6.26.0.dev4107.dist-info}/entry_points.txt
RENAMED
File without changes
|