airbyte_cdk.sources.file_based.config.validate_config_transfer_modes

 1#
 2# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
 3#
 4
 5from airbyte_cdk.sources.file_based.config.abstract_file_based_spec import (
 6    AbstractFileBasedSpec,
 7    DeliverRawFiles,
 8)
 9from airbyte_cdk.sources.specs.transfer_modes import DeliverPermissions
10
11DELIVERY_TYPE_KEY = "delivery_type"
12DELIVERY_TYPE_PERMISSION_TRANSFER_MODE_VALUE = "use_permissions_transfer"
13DELIVERY_TYPE_FILES_TRANSFER_MODE_VALUE = "use_file_transfer"
14PRESERVE_DIRECTORY_STRUCTURE_KEY = "preserve_directory_structure"
15INCLUDE_IDENTITIES_STREAM_KEY = "include_identities_stream"
16
17
18def use_file_transfer(parsed_config: AbstractFileBasedSpec) -> bool:
19    """Returns `True` if the configuration uses file transfer mode."""
20    return (
21        hasattr(parsed_config.delivery_method, DELIVERY_TYPE_KEY)
22        and parsed_config.delivery_method.delivery_type == DELIVERY_TYPE_FILES_TRANSFER_MODE_VALUE
23    )
24
25
26def preserve_directory_structure(parsed_config: AbstractFileBasedSpec) -> bool:
27    """
28    Determines whether to preserve directory structure during file transfer.
29
30    When enabled, files maintain their subdirectory paths in the destination.
31    When disabled, files are flattened to the root of the destination.
32
33    Args:
34        parsed_config: The parsed configuration containing delivery method settings
35
36    Returns:
37        True if directory structure should be preserved (default), False otherwise
38    """
39    if (
40        use_file_transfer(parsed_config)
41        and hasattr(parsed_config.delivery_method, PRESERVE_DIRECTORY_STRUCTURE_KEY)
42        and isinstance(parsed_config.delivery_method, DeliverRawFiles)
43    ):
44        return parsed_config.delivery_method.preserve_directory_structure
45    return True
46
47
48def use_permissions_transfer(parsed_config: AbstractFileBasedSpec) -> bool:
49    """
50    Determines whether to use permissions transfer to sync ACLs and Identities
51
52    Args:
53        parsed_config: The parsed configuration containing delivery method settings
54
55    Returns:
56        True if permissions transfer should be enabled, False otherwise
57    """
58    return (
59        hasattr(parsed_config.delivery_method, DELIVERY_TYPE_KEY)
60        and parsed_config.delivery_method.delivery_type
61        == DELIVERY_TYPE_PERMISSION_TRANSFER_MODE_VALUE
62    )
63
64
65def include_identities_stream(parsed_config: AbstractFileBasedSpec) -> bool:
66    """
67    There are scenarios where user may not have access to identities but still is valuable to get ACLs
68
69    Args:
70        parsed_config: The parsed configuration containing delivery method settings
71
72    Returns:
73        True if we should include Identities stream.
74    """
75    if (
76        use_permissions_transfer(parsed_config)
77        and hasattr(parsed_config.delivery_method, INCLUDE_IDENTITIES_STREAM_KEY)
78        and isinstance(parsed_config.delivery_method, DeliverPermissions)
79    ):
80        return parsed_config.delivery_method.include_identities_stream
81    return False
DELIVERY_TYPE_KEY = 'delivery_type'
DELIVERY_TYPE_PERMISSION_TRANSFER_MODE_VALUE = 'use_permissions_transfer'
DELIVERY_TYPE_FILES_TRANSFER_MODE_VALUE = 'use_file_transfer'
PRESERVE_DIRECTORY_STRUCTURE_KEY = 'preserve_directory_structure'
INCLUDE_IDENTITIES_STREAM_KEY = 'include_identities_stream'
def use_file_transfer( parsed_config: airbyte_cdk.sources.file_based.AbstractFileBasedSpec) -> bool:
19def use_file_transfer(parsed_config: AbstractFileBasedSpec) -> bool:
20    """Returns `True` if the configuration uses file transfer mode."""
21    return (
22        hasattr(parsed_config.delivery_method, DELIVERY_TYPE_KEY)
23        and parsed_config.delivery_method.delivery_type == DELIVERY_TYPE_FILES_TRANSFER_MODE_VALUE
24    )

Returns True if the configuration uses file transfer mode.

def preserve_directory_structure( parsed_config: airbyte_cdk.sources.file_based.AbstractFileBasedSpec) -> bool:
27def preserve_directory_structure(parsed_config: AbstractFileBasedSpec) -> bool:
28    """
29    Determines whether to preserve directory structure during file transfer.
30
31    When enabled, files maintain their subdirectory paths in the destination.
32    When disabled, files are flattened to the root of the destination.
33
34    Args:
35        parsed_config: The parsed configuration containing delivery method settings
36
37    Returns:
38        True if directory structure should be preserved (default), False otherwise
39    """
40    if (
41        use_file_transfer(parsed_config)
42        and hasattr(parsed_config.delivery_method, PRESERVE_DIRECTORY_STRUCTURE_KEY)
43        and isinstance(parsed_config.delivery_method, DeliverRawFiles)
44    ):
45        return parsed_config.delivery_method.preserve_directory_structure
46    return True

Determines whether to preserve directory structure during file transfer.

When enabled, files maintain their subdirectory paths in the destination. When disabled, files are flattened to the root of the destination.

Arguments:
  • parsed_config: The parsed configuration containing delivery method settings
Returns:

True if directory structure should be preserved (default), False otherwise

def use_permissions_transfer( parsed_config: airbyte_cdk.sources.file_based.AbstractFileBasedSpec) -> bool:
49def use_permissions_transfer(parsed_config: AbstractFileBasedSpec) -> bool:
50    """
51    Determines whether to use permissions transfer to sync ACLs and Identities
52
53    Args:
54        parsed_config: The parsed configuration containing delivery method settings
55
56    Returns:
57        True if permissions transfer should be enabled, False otherwise
58    """
59    return (
60        hasattr(parsed_config.delivery_method, DELIVERY_TYPE_KEY)
61        and parsed_config.delivery_method.delivery_type
62        == DELIVERY_TYPE_PERMISSION_TRANSFER_MODE_VALUE
63    )

Determines whether to use permissions transfer to sync ACLs and Identities

Arguments:
  • parsed_config: The parsed configuration containing delivery method settings
Returns:

True if permissions transfer should be enabled, False otherwise

def include_identities_stream( parsed_config: airbyte_cdk.sources.file_based.AbstractFileBasedSpec) -> bool:
66def include_identities_stream(parsed_config: AbstractFileBasedSpec) -> bool:
67    """
68    There are scenarios where user may not have access to identities but still is valuable to get ACLs
69
70    Args:
71        parsed_config: The parsed configuration containing delivery method settings
72
73    Returns:
74        True if we should include Identities stream.
75    """
76    if (
77        use_permissions_transfer(parsed_config)
78        and hasattr(parsed_config.delivery_method, INCLUDE_IDENTITIES_STREAM_KEY)
79        and isinstance(parsed_config.delivery_method, DeliverPermissions)
80    ):
81        return parsed_config.delivery_method.include_identities_stream
82    return False

There are scenarios where user may not have access to identities but still is valuable to get ACLs

Arguments:
  • parsed_config: The parsed configuration containing delivery method settings
Returns:

True if we should include Identities stream.