airbyte-cdk 6.26.0.dev4105__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.
@@ -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 self._use_file_transfer(parsed_config)
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 self._sync_acl_permissions(parsed_config):
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=self._use_file_transfer(parsed_config),
328
- preserve_directory_structure=self._preserve_directory_structure(parsed_config),
329
- sync_acl_permissions=self._sync_acl_permissions(parsed_config),
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.use_file_transfer()
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 sync_acl_permissions(self) -> bool:
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
- return {}
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
- yield {}
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
- SYNC_ACL_PERMISSIONS_KW = "sync_acl_permissions"
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
- sync_acl_permissions = False
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.SYNC_ACL_PERMISSIONS_KW in kwargs:
71
- self.sync_acl_permissions = kwargs.pop(self.SYNC_ACL_PERMISSIONS_KW, False)
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.sync_acl_permissions:
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,23 +194,26 @@ 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.sync_acl_permissions:
197
+ elif self.use_permissions_transfer:
198
198
  try:
199
- metadata_record = self.stream_reader.get_file_acl_permissions(
199
+ permissions_record = self.stream_reader.get_file_acl_permissions(
200
200
  file, logger=self.logger
201
201
  )
202
+ permissions_record = self.transform_record(
203
+ permissions_record, file, file_datetime_string
204
+ )
202
205
  yield stream_data_to_airbyte_message(
203
- self.name, metadata_record, is_file_transfer_message=False
206
+ self.name, permissions_record, is_file_transfer_message=False
204
207
  )
205
208
  except Exception as e:
206
209
  self.logger.error(
207
- f"Failed to retrieve metadata for file {file.uri}: {str(e)}"
210
+ f"Failed to retrieve permissions for file {file.uri}: {str(e)}"
208
211
  )
209
212
  yield AirbyteMessage(
210
213
  type=MessageType.LOG,
211
214
  log=AirbyteLogMessage(
212
215
  level=Level.ERROR,
213
- message=f"Error retrieving metadata: stream={self.name} file={file.uri}",
216
+ message=f"Error retrieving files permissions: stream={self.name} file={file.uri}",
214
217
  stack_trace=traceback.format_exc(),
215
218
  ),
216
219
  )
@@ -311,7 +314,7 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
311
314
  def _get_raw_json_schema(self) -> JsonSchema:
312
315
  if self.use_file_transfer:
313
316
  return file_transfer_schema
314
- elif self.sync_acl_permissions:
317
+ elif self.use_permissions_transfer:
315
318
  return remote_file_permissions_schema
316
319
  elif self.config.input_schema:
317
320
  return self.config.get_input_schema() # type: ignore
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: airbyte-cdk
3
- Version: 6.26.0.dev4105
3
+ Version: 6.26.0.dev4107
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  License: MIT
6
6
  Keywords: airbyte,connector-development-kit,cdk
@@ -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=s8SKkU0xWcA44ZFGvmGCoBjhfwUewIM13voAKtm5494,7232
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=4zaMKFcNBvHKJsymSXhpBLE1uW9ea9lua8-EV_2_Yrg,19362
218
- airbyte_cdk/sources/file_based/file_based_stream_reader.py,sha256=5xcCnTd_zaMVBL1Xp215JAiyNQBf4wAs_WwVgcLi2l4,8036
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=SFb1UXtJtaqo-1t7hM3ahM1ZTH2k01oqX1mAJvz08Y0,19529
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.dev4105.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
356
- airbyte_cdk-6.26.0.dev4105.dist-info/METADATA,sha256=oXTY1ZOH5cuzacDgoXEf5pcBYTfKAChqCyN0qmYsxCc,6004
357
- airbyte_cdk-6.26.0.dev4105.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
358
- airbyte_cdk-6.26.0.dev4105.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
359
- airbyte_cdk-6.26.0.dev4105.dist-info/RECORD,,
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