airbyte-cdk 0.51.6__tar.gz → 0.51.7__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (368) hide show
  1. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/PKG-INFO +1 -1
  2. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -4
  3. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +21 -6
  4. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/config/csv_format.py +64 -6
  5. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +6 -5
  6. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk.egg-info/PKG-INFO +1 -1
  7. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk.egg-info/SOURCES.txt +1 -0
  8. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/setup.py +1 -1
  9. airbyte-cdk-0.51.7/unit_tests/sources/file_based/config/test_csv_format.py +28 -0
  10. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/file_types/test_csv_parser.py +24 -2
  11. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/scenarios/csv_scenarios.py +38 -17
  12. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/LICENSE.txt +0 -0
  13. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/README.md +0 -0
  14. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/__init__.py +0 -0
  15. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/config_observation.py +0 -0
  16. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/connector.py +0 -0
  17. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/connector_builder/__init__.py +0 -0
  18. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  19. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/connector_builder/main.py +0 -0
  20. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
  21. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/connector_builder/models.py +0 -0
  22. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/destinations/__init__.py +0 -0
  23. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/destinations/destination.py +0 -0
  24. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/entrypoint.py +0 -0
  25. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/exception_handler.py +0 -0
  26. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/logger.py +0 -0
  27. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/models/__init__.py +0 -0
  28. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  29. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/models/well_known_types.py +0 -0
  30. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/py.typed +0 -0
  31. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/__init__.py +0 -0
  32. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/abstract_source.py +0 -0
  33. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/config.py +0 -0
  34. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  35. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  36. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  37. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  38. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  39. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  40. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  41. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  42. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  43. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  44. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/create_partial.py +0 -0
  45. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  46. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  47. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  48. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
  49. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  50. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  51. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  52. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  53. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  54. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  55. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  56. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  57. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  58. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  59. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  60. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  61. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  62. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/incremental/cursor.py +0 -0
  63. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  64. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  65. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  66. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  67. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  68. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  69. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  70. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  71. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  72. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  73. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  74. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  75. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  76. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  77. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/parsers/class_types_registry.py +0 -0
  78. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  79. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/parsers/default_implementation_registry.py +0 -0
  80. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  81. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  82. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +0 -0
  83. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  84. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  85. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  86. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  87. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  88. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  89. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  90. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  91. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  92. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  93. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  94. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  95. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  96. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  97. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  98. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  99. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  100. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_action.py +0 -0
  101. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_status.py +0 -0
  102. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  103. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  104. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  105. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  106. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  107. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  108. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  109. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  110. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  111. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  112. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  113. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  114. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  115. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  116. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  117. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  118. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  119. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  120. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  121. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  122. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  123. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  124. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  125. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  126. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  127. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  128. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  129. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  130. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  131. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  132. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/stream_slicers/cartesian_product_stream_slicer.py +0 -0
  133. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  134. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  135. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  136. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  137. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  138. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/types.py +0 -0
  139. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  140. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/deprecated/__init__.py +0 -0
  141. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/deprecated/base_source.py +0 -0
  142. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/deprecated/client.py +0 -0
  143. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  144. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  145. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  146. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/embedded/runner.py +0 -0
  147. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/embedded/tools.py +0 -0
  148. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  149. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  150. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  151. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  152. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  153. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  154. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  155. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  156. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  157. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  158. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  159. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  160. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  161. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  162. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  163. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  164. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  165. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  166. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  167. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  168. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  169. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  170. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  171. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  172. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  173. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  174. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  175. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  176. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  177. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  178. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  179. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/file_based/types.py +0 -0
  180. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/http_logger.py +0 -0
  181. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/message/__init__.py +0 -0
  182. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/message/repository.py +0 -0
  183. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/singer/__init__.py +0 -0
  184. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/singer/singer_helpers.py +0 -0
  185. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/singer/source.py +0 -0
  186. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/source.py +0 -0
  187. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/__init__.py +0 -0
  188. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  189. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/core.py +0 -0
  190. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  191. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/auth/__init__.py +0 -0
  192. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/auth/core.py +0 -0
  193. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/auth/oauth.py +0 -0
  194. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/auth/token.py +0 -0
  195. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  196. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  197. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/http.py +0 -0
  198. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  199. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  200. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  201. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  202. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  203. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  204. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  205. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/streams/utils/stream_helper.py +0 -0
  206. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/utils/__init__.py +0 -0
  207. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/utils/casing.py +0 -0
  208. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/utils/catalog_helpers.py +0 -0
  209. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  210. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  211. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/utils/schema_models.py +0 -0
  212. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/utils/transform.py +0 -0
  213. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/sources/utils/types.py +0 -0
  214. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/utils/__init__.py +0 -0
  215. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  216. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  217. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/utils/event_timing.py +0 -0
  218. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  219. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  220. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  221. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  222. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk/utils/traced_exception.py +0 -0
  223. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk.egg-info/dependency_links.txt +0 -0
  224. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk.egg-info/requires.txt +0 -0
  225. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/airbyte_cdk.egg-info/top_level.txt +0 -0
  226. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/pyproject.toml +0 -0
  227. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/setup.cfg +0 -0
  228. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/source_declarative_manifest/__init__.py +0 -0
  229. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/source_declarative_manifest/main.py +0 -0
  230. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/connector_builder/__init__.py +0 -0
  231. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/connector_builder/test_connector_builder_handler.py +0 -0
  232. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/connector_builder/test_message_grouper.py +0 -0
  233. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/connector_builder/utils.py +0 -0
  234. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/destinations/__init__.py +0 -0
  235. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/destinations/test_destination.py +0 -0
  236. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/singer/__init__.py +0 -0
  237. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/singer/test_singer_helpers.py +0 -0
  238. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/singer/test_singer_source.py +0 -0
  239. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/__init__.py +0 -0
  240. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/__init__.py +0 -0
  241. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/auth/__init__.py +0 -0
  242. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/auth/test_oauth.py +0 -0
  243. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/auth/test_session_token_auth.py +0 -0
  244. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/auth/test_token_auth.py +0 -0
  245. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/auth/test_token_provider.py +0 -0
  246. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/checks/__init__.py +0 -0
  247. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/checks/test_check_stream.py +0 -0
  248. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/decoders/__init__.py +0 -0
  249. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/decoders/test_json_decoder.py +0 -0
  250. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/external_component.py +0 -0
  251. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/extractors/__init__.py +0 -0
  252. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/extractors/test_dpath_extractor.py +0 -0
  253. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/extractors/test_record_filter.py +0 -0
  254. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/extractors/test_record_selector.py +0 -0
  255. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/incremental/__init__.py +0 -0
  256. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/incremental/test_datetime_based_cursor.py +0 -0
  257. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/incremental/test_per_partition_cursor.py +0 -0
  258. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/incremental/test_per_partition_cursor_integration.py +0 -0
  259. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/interpolation/__init__.py +0 -0
  260. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/interpolation/test_filters.py +0 -0
  261. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/interpolation/test_interpolated_boolean.py +0 -0
  262. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/interpolation/test_interpolated_mapping.py +0 -0
  263. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/interpolation/test_interpolated_nested_mapping.py +0 -0
  264. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/interpolation/test_interpolated_string.py +0 -0
  265. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/interpolation/test_jinja.py +0 -0
  266. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/interpolation/test_macros.py +0 -0
  267. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/parsers/__init__.py +0 -0
  268. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/parsers/test_manifest_component_transformer.py +0 -0
  269. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/parsers/test_manifest_reference_resolver.py +0 -0
  270. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py +0 -0
  271. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/parsers/testing_components.py +0 -0
  272. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/partition_routers/__init__.py +0 -0
  273. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/partition_routers/test_list_partition_router.py +0 -0
  274. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/partition_routers/test_single_partition_router.py +0 -0
  275. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/partition_routers/test_substream_partition_router.py +0 -0
  276. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/__init__.py +0 -0
  277. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  278. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  279. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_constant_backoff.py +0 -0
  280. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_exponential_backoff.py +0 -0
  281. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_header_helper.py +0 -0
  282. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_time_from_header.py +0 -0
  283. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_until_time_from_header.py +0 -0
  284. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/test_composite_error_handler.py +0 -0
  285. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/test_default_error_handler.py +0 -0
  286. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/test_http_response_filter.py +0 -0
  287. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/error_handlers/test_response_status.py +0 -0
  288. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/paginators/__init__.py +0 -0
  289. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/paginators/test_cursor_pagination_strategy.py +0 -0
  290. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py +0 -0
  291. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/paginators/test_no_paginator.py +0 -0
  292. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/paginators/test_offset_increment.py +0 -0
  293. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/paginators/test_page_increment.py +0 -0
  294. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/paginators/test_request_option.py +0 -0
  295. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/paginators/test_stop_condition.py +0 -0
  296. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/request_options/__init__.py +0 -0
  297. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py +0 -0
  298. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/test_http_requester.py +0 -0
  299. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/requesters/test_interpolated_request_input_provider.py +0 -0
  300. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/retrievers/__init__.py +0 -0
  301. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/retrievers/test_simple_retriever.py +0 -0
  302. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/schema/__init__.py +0 -0
  303. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/schema/source_test/SourceTest.py +0 -0
  304. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/schema/source_test/__init__.py +0 -0
  305. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/schema/test_default_schema_loader.py +0 -0
  306. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/schema/test_inline_schema_loader.py +0 -0
  307. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/schema/test_json_file_schema_loader.py +0 -0
  308. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/states/__init__.py +0 -0
  309. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/stream_slicers/__init__.py +0 -0
  310. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/stream_slicers/test_cartesian_product_stream_slicer.py +0 -0
  311. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/test_create_partial.py +0 -0
  312. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/test_declarative_stream.py +0 -0
  313. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/test_manifest_declarative_source.py +0 -0
  314. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/declarative/test_yaml_declarative_source.py +0 -0
  315. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/__init__.py +0 -0
  316. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/availability_strategy/__init__.py +0 -0
  317. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/availability_strategy/test_default_file_based_availability_strategy.py +0 -0
  318. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/config/__init__.py +0 -0
  319. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/config/test_abstract_file_based_spec.py +0 -0
  320. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/config/test_file_based_stream_config.py +0 -0
  321. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/file_types/__init__.py +0 -0
  322. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/file_types/test_avro_parser.py +0 -0
  323. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/file_types/test_jsonl_parser.py +0 -0
  324. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/file_types/test_parquet_parser.py +0 -0
  325. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/helpers.py +0 -0
  326. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/in_memory_files_source.py +0 -0
  327. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/scenarios/__init__.py +0 -0
  328. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/scenarios/avro_scenarios.py +0 -0
  329. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/scenarios/check_scenarios.py +0 -0
  330. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/scenarios/incremental_scenarios.py +0 -0
  331. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/scenarios/jsonl_scenarios.py +0 -0
  332. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/scenarios/parquet_scenarios.py +0 -0
  333. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/scenarios/scenario_builder.py +0 -0
  334. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/scenarios/user_input_schema_scenarios.py +0 -0
  335. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/scenarios/validation_policy_scenarios.py +0 -0
  336. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/stream/__init__.py +0 -0
  337. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/stream/test_default_file_based_cursor.py +0 -0
  338. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/stream/test_default_file_based_stream.py +0 -0
  339. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/test_file_based_stream_reader.py +0 -0
  340. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/test_scenarios.py +0 -0
  341. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/file_based/test_schema_helpers.py +0 -0
  342. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/fixtures/__init__.py +0 -0
  343. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/fixtures/source_test_fixture.py +0 -0
  344. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/message/__init__.py +0 -0
  345. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/message/test_repository.py +0 -0
  346. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/streams/__init__.py +0 -0
  347. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/streams/http/__init__.py +0 -0
  348. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/streams/http/auth/__init__.py +0 -0
  349. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/streams/http/auth/test_auth.py +0 -0
  350. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/streams/http/requests_native_auth/__init__.py +0 -0
  351. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py +0 -0
  352. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/streams/http/test_availability_strategy.py +0 -0
  353. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/streams/http/test_http.py +0 -0
  354. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/streams/test_availability_strategy.py +0 -0
  355. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/streams/test_streams_core.py +0 -0
  356. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/test_abstract_source.py +0 -0
  357. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/test_config.py +0 -0
  358. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/test_connector_state_manager.py +0 -0
  359. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/test_http_logger.py +0 -0
  360. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/test_integration_source.py +0 -0
  361. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/sources/test_source.py +0 -0
  362. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/utils/__init__.py +0 -0
  363. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/utils/test_datetime_format_inferrer.py +0 -0
  364. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/utils/test_mapping_helpers.py +0 -0
  365. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/utils/test_schema_inferrer.py +0 -0
  366. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/utils/test_secret_utils.py +0 -0
  367. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/utils/test_stream_status_utils.py +0 -0
  368. {airbyte-cdk-0.51.6 → airbyte-cdk-0.51.7}/unit_tests/utils/test_traced_exception.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 0.51.6
3
+ Version: 0.51.7
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://github.com/airbytehq/airbyte
6
6
  Author: Airbyte
@@ -1,7 +1,3 @@
1
- #
2
- # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
- #
4
-
5
1
  # generated by datamodel-codegen:
6
2
  # filename: declarative_component_schema.yaml
7
3
 
@@ -66,9 +66,7 @@ class AbstractFileBasedSpec(BaseModel):
66
66
  for format in objects_to_check["oneOf"]:
67
67
  for key in format["properties"]:
68
68
  object_property = format["properties"][key]
69
- if "allOf" in object_property and "enum" in object_property["allOf"][0]:
70
- object_property["enum"] = object_property["allOf"][0]["enum"]
71
- object_property.pop("allOf")
69
+ AbstractFileBasedSpec.move_enum_to_root(object_property)
72
70
 
73
71
  properties_to_change = ["validation_policy"]
74
72
  for property_to_change in properties_to_change:
@@ -76,7 +74,24 @@ class AbstractFileBasedSpec(BaseModel):
76
74
  if "anyOf" in property_object:
77
75
  schema["properties"]["streams"]["items"]["properties"][property_to_change]["type"] = "object"
78
76
  schema["properties"]["streams"]["items"]["properties"][property_to_change]["oneOf"] = property_object.pop("anyOf")
79
- if "allOf" in property_object and "enum" in property_object["allOf"][0]:
80
- property_object["enum"] = property_object["allOf"][0]["enum"]
81
- property_object.pop("allOf")
77
+ AbstractFileBasedSpec.move_enum_to_root(property_object)
78
+
79
+ csv_format_schemas = list(
80
+ filter(
81
+ lambda format: format["properties"]["filetype"]["default"] == "csv",
82
+ schema["properties"]["streams"]["items"]["properties"]["format"]["oneOf"],
83
+ )
84
+ )
85
+ if len(csv_format_schemas) != 1:
86
+ raise ValueError(f"Expecting only one CSV format but got {csv_format_schemas}")
87
+ csv_format_schemas[0]["properties"]["header_definition"]["oneOf"] = csv_format_schemas[0]["properties"]["header_definition"].pop(
88
+ "anyOf", []
89
+ )
90
+ csv_format_schemas[0]["properties"]["header_definition"]["type"] = "object"
82
91
  return schema
92
+
93
+ @staticmethod
94
+ def move_enum_to_root(object_property: Dict[str, Any]) -> None:
95
+ if "allOf" in object_property and "enum" in object_property["allOf"][0]:
96
+ object_property["enum"] = object_property["allOf"][0]["enum"]
97
+ object_property.pop("allOf")
@@ -4,9 +4,9 @@
4
4
 
5
5
  import codecs
6
6
  from enum import Enum
7
- from typing import Optional, Set
7
+ from typing import Any, Dict, List, Optional, Set, Union
8
8
 
9
- from pydantic import BaseModel, Field, validator
9
+ from pydantic import BaseModel, Field, ValidationError, root_validator, validator
10
10
  from typing_extensions import Literal
11
11
 
12
12
 
@@ -15,6 +15,52 @@ class InferenceType(Enum):
15
15
  PRIMITIVE_TYPES_ONLY = "Primitive Types Only"
16
16
 
17
17
 
18
+ class CsvHeaderDefinitionType(Enum):
19
+ FROM_CSV = "From CSV"
20
+ AUTOGENERATED = "Autogenerated"
21
+ USER_PROVIDED = "User Provided"
22
+
23
+
24
+ class CsvHeaderFromCsv(BaseModel):
25
+ class Config:
26
+ title = "From CSV"
27
+
28
+ header_definition_type: Literal[CsvHeaderDefinitionType.FROM_CSV.value] = CsvHeaderDefinitionType.FROM_CSV.value # type: ignore
29
+
30
+ def has_header_row(self) -> bool:
31
+ return True
32
+
33
+
34
+ class CsvHeaderAutogenerated(BaseModel):
35
+ class Config:
36
+ title = "Autogenerated"
37
+
38
+ header_definition_type: Literal[CsvHeaderDefinitionType.AUTOGENERATED.value] = CsvHeaderDefinitionType.AUTOGENERATED.value # type: ignore
39
+
40
+ def has_header_row(self) -> bool:
41
+ return False
42
+
43
+
44
+ class CsvHeaderUserProvided(BaseModel):
45
+ class Config:
46
+ title = "User Provided"
47
+
48
+ header_definition_type: Literal[CsvHeaderDefinitionType.USER_PROVIDED.value] = CsvHeaderDefinitionType.USER_PROVIDED.value # type: ignore
49
+ column_names: List[str] = Field(
50
+ title="Column Names",
51
+ description="The column names that will be used while emitting the CSV records",
52
+ )
53
+
54
+ def has_header_row(self) -> bool:
55
+ return False
56
+
57
+ @validator("column_names")
58
+ def validate_column_names(cls, v: List[str]) -> List[str]:
59
+ if not v:
60
+ raise ValueError("At least one column name needs to be provided when using user provided headers")
61
+ return v
62
+
63
+
18
64
  DEFAULT_TRUE_VALUES = ["y", "yes", "t", "true", "on", "1"]
19
65
  DEFAULT_FALSE_VALUES = ["n", "no", "f", "false", "off", "0"]
20
66
 
@@ -64,10 +110,10 @@ class CsvFormat(BaseModel):
64
110
  skip_rows_after_header: int = Field(
65
111
  title="Skip Rows After Header", default=0, description="The number of rows to skip after the header row."
66
112
  )
67
- autogenerate_column_names: bool = Field(
68
- title="Autogenerate Column Names",
69
- default=False,
70
- description="Whether to autogenerate column names if column_names is empty. If true, column names will be of the form “f0”, “f1”… If false, column names will be read from the first CSV row after skip_rows_before_header.",
113
+ header_definition: Union[CsvHeaderFromCsv, CsvHeaderAutogenerated, CsvHeaderUserProvided] = Field(
114
+ title="CSV Header Definition",
115
+ default=CsvHeaderFromCsv(),
116
+ description="How headers will be defined. `User Provided` assumes the CSV does not have a header row and uses the headers provided and `Autogenerated` assumes the CSV does not have a header row and the CDK will generate headers using for `f{i}` where `i` is the index starting from 0. Else, the default behavior is to use the header from the CSV file. If a user wants to autogenerate or provide column names for a CSV having headers, they can skip rows.",
71
117
  )
72
118
  true_values: Set[str] = Field(
73
119
  title="True Values",
@@ -113,3 +159,15 @@ class CsvFormat(BaseModel):
113
159
  except LookupError:
114
160
  raise ValueError(f"invalid encoding format: {v}")
115
161
  return v
162
+
163
+ @root_validator
164
+ def validate_optional_args(cls, values: Dict[str, Any]) -> Dict[str, Any]:
165
+ definition_type = values.get("header_definition_type")
166
+ column_names = values.get("user_provided_column_names")
167
+ if definition_type == CsvHeaderDefinitionType.USER_PROVIDED and not column_names:
168
+ raise ValidationError("`user_provided_column_names` should be defined if the definition 'User Provided'.", model=CsvFormat)
169
+ if definition_type != CsvHeaderDefinitionType.USER_PROVIDED and column_names:
170
+ raise ValidationError(
171
+ "`user_provided_column_names` should not be defined if the definition is not 'User Provided'.", model=CsvFormat
172
+ )
173
+ return values
@@ -11,7 +11,7 @@ from functools import partial
11
11
  from io import IOBase
12
12
  from typing import Any, Callable, Dict, Generator, Iterable, List, Mapping, Optional, Set
13
13
 
14
- from airbyte_cdk.sources.file_based.config.csv_format import CsvFormat, InferenceType
14
+ from airbyte_cdk.sources.file_based.config.csv_format import CsvFormat, CsvHeaderAutogenerated, CsvHeaderUserProvided, InferenceType
15
15
  from airbyte_cdk.sources.file_based.config.file_based_stream_config import FileBasedStreamConfig
16
16
  from airbyte_cdk.sources.file_based.exceptions import FileBasedSourceError, RecordParseError
17
17
  from airbyte_cdk.sources.file_based.file_based_stream_reader import AbstractFileBasedStreamReader, FileReadMode
@@ -48,11 +48,9 @@ class _CsvReader:
48
48
  with stream_reader.open_file(file, file_read_mode, config_format.encoding, logger) as fp:
49
49
  headers = self._get_headers(fp, config_format, dialect_name)
50
50
 
51
- # we assume that if we autogenerate columns, it is because we don't have headers
52
- # if a user wants to autogenerate_column_names with a CSV having headers, he can skip rows
53
51
  rows_to_skip = (
54
52
  config_format.skip_rows_before_header
55
- + (0 if config_format.autogenerate_column_names else 1)
53
+ + (1 if config_format.header_definition.has_header_row() else 0)
56
54
  + config_format.skip_rows_after_header
57
55
  )
58
56
  self._skip_rows(fp, rows_to_skip)
@@ -74,8 +72,11 @@ class _CsvReader:
74
72
  Assumes the fp is pointing to the beginning of the files and will reset it as such
75
73
  """
76
74
  # Note that this method assumes the dialect has already been registered if we're parsing the headers
75
+ if isinstance(config_format.header_definition, CsvHeaderUserProvided):
76
+ return config_format.header_definition.column_names # type: ignore # should be CsvHeaderUserProvided given the type
77
+
77
78
  self._skip_rows(fp, config_format.skip_rows_before_header)
78
- if config_format.autogenerate_column_names:
79
+ if isinstance(config_format.header_definition, CsvHeaderAutogenerated):
79
80
  headers = self._auto_generate_headers(fp, dialect_name)
80
81
  else:
81
82
  # Then read the header
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 0.51.6
3
+ Version: 0.51.7
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://github.com/airbytehq/airbyte
6
6
  Author: Airbyte
@@ -323,6 +323,7 @@ unit_tests/sources/file_based/availability_strategy/__init__.py
323
323
  unit_tests/sources/file_based/availability_strategy/test_default_file_based_availability_strategy.py
324
324
  unit_tests/sources/file_based/config/__init__.py
325
325
  unit_tests/sources/file_based/config/test_abstract_file_based_spec.py
326
+ unit_tests/sources/file_based/config/test_csv_format.py
326
327
  unit_tests/sources/file_based/config/test_file_based_stream_config.py
327
328
  unit_tests/sources/file_based/file_types/__init__.py
328
329
  unit_tests/sources/file_based/file_types/test_avro_parser.py
@@ -21,7 +21,7 @@ setup(
21
21
  name="airbyte-cdk",
22
22
  # The version of the airbyte-cdk package is used at runtime to validate manifests. That validation must be
23
23
  # updated if our semver format changes such as using release candidate versions.
24
- version="0.51.6",
24
+ version="0.51.7",
25
25
  description="A framework for writing Airbyte Connectors.",
26
26
  long_description=README,
27
27
  long_description_content_type="text/markdown",
@@ -0,0 +1,28 @@
1
+ #
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+ import unittest
6
+
7
+ import pytest
8
+ from airbyte_cdk.sources.file_based.config.csv_format import CsvHeaderAutogenerated, CsvHeaderFromCsv, CsvHeaderUserProvided
9
+ from pydantic import ValidationError
10
+
11
+
12
+ class CsvHeaderDefinitionTest(unittest.TestCase):
13
+ def test_given_user_provided_and_not_column_names_provided_then_raise_exception(self) -> None:
14
+ with pytest.raises(ValidationError):
15
+ CsvHeaderUserProvided(column_names=[])
16
+
17
+ def test_given_user_provided_and_column_names_then_config_is_valid(self) -> None:
18
+ # no error means that this test succeeds
19
+ CsvHeaderUserProvided(column_names=["1", "2", "3"])
20
+
21
+ def test_given_user_provided_then_csv_does_not_have_header_row(self) -> None:
22
+ assert not CsvHeaderUserProvided(column_names=["1", "2", "3"]).has_header_row()
23
+
24
+ def test_given_autogenerated_then_csv_does_not_have_header_row(self) -> None:
25
+ assert not CsvHeaderAutogenerated().has_header_row()
26
+
27
+ def test_given_from_csv_then_csv_has_header_row(self) -> None:
28
+ assert CsvHeaderFromCsv().has_header_row()
@@ -13,7 +13,14 @@ from unittest import TestCase, mock
13
13
  from unittest.mock import Mock
14
14
 
15
15
  import pytest
16
- from airbyte_cdk.sources.file_based.config.csv_format import DEFAULT_FALSE_VALUES, DEFAULT_TRUE_VALUES, CsvFormat, InferenceType
16
+ from airbyte_cdk.sources.file_based.config.csv_format import (
17
+ DEFAULT_FALSE_VALUES,
18
+ DEFAULT_TRUE_VALUES,
19
+ CsvFormat,
20
+ CsvHeaderAutogenerated,
21
+ CsvHeaderUserProvided,
22
+ InferenceType,
23
+ )
17
24
  from airbyte_cdk.sources.file_based.config.file_based_stream_config import FileBasedStreamConfig
18
25
  from airbyte_cdk.sources.file_based.exceptions import RecordParseError
19
26
  from airbyte_cdk.sources.file_based.file_based_stream_reader import AbstractFileBasedStreamReader, FileReadMode
@@ -278,13 +285,28 @@ class CsvReaderTest(unittest.TestCase):
278
285
  assert list(data_generator) == [{"header": "a value"}, {"header": "another value"}]
279
286
 
280
287
  def test_given_autogenerated_headers_when_read_data_then_generate_headers_with_format_fX(self) -> None:
281
- self._config_format.autogenerate_column_names = True
288
+ self._config_format.header_definition = CsvHeaderAutogenerated()
282
289
  self._stream_reader.open_file.return_value = CsvFileBuilder().with_data(["0,1,2,3,4,5,6"]).build()
283
290
 
284
291
  data_generator = self._read_data()
285
292
 
286
293
  assert list(data_generator) == [{"f0": "0", "f1": "1", "f2": "2", "f3": "3", "f4": "4", "f5": "5", "f6": "6"}]
287
294
 
295
+ def test_given_user_provided_headers_when_read_data_then_use_user_provided_headers(self) -> None:
296
+ self._config_format.header_definition = CsvHeaderUserProvided(column_names=["first", "second", "third", "fourth"])
297
+ self._stream_reader.open_file.return_value = CsvFileBuilder().with_data(["0,1,2,3"]).build()
298
+
299
+ data_generator = self._read_data()
300
+
301
+ assert list(data_generator) == [{"first": "0", "second": "1", "third": "2", "fourth": "3"}]
302
+
303
+ def test_given_len_mistmatch_on_user_provided_headers_when_read_data_then_raise_error(self) -> None:
304
+ self._config_format.header_definition = CsvHeaderUserProvided(column_names=["missing", "one", "column"])
305
+ self._stream_reader.open_file.return_value = CsvFileBuilder().with_data(["0,1,2,3"]).build()
306
+
307
+ with pytest.raises(RecordParseError):
308
+ list(self._read_data())
309
+
288
310
  def test_given_skip_rows_after_header_when_read_data_then_do_not_parse_skipped_rows(self) -> None:
289
311
  self._config_format.skip_rows_after_header = 1
290
312
  self._stream_reader.open_file.return_value = (
@@ -180,11 +180,43 @@ single_csv_scenario = (
180
180
  "default": 0,
181
181
  "type": "integer",
182
182
  },
183
- "autogenerate_column_names": {
184
- "title": "Autogenerate Column Names",
185
- "description": "Whether to autogenerate column names if column_names is empty. If true, column names will be of the form \u201cf0\u201d, \u201cf1\u201d\u2026 If false, column names will be read from the first CSV row after skip_rows_before_header.",
186
- "default": False,
187
- "type": "boolean",
183
+ "header_definition": {
184
+ "title": "CSV Header Definition",
185
+ "type": "object",
186
+ "description": "How headers will be defined. `User Provided` assumes the CSV does not have a header row and uses the headers provided and `Autogenerated` assumes the CSV does not have a header row and the CDK will generate headers using for `f{i}` where `i` is the index starting from 0. Else, the default behavior is to use the header from the CSV file. If a user wants to autogenerate or provide column names for a CSV having headers, they can skip rows.",
187
+ "default": {"header_definition_type": "From CSV"},
188
+ "oneOf": [
189
+ {
190
+ "title": "From CSV",
191
+ "type": "object",
192
+ "properties": {
193
+ "header_definition_type": {"title": "Header Definition Type", "default": "From CSV", "enum": ["From CSV"], "type": "string"},
194
+ },
195
+ },
196
+ {
197
+ "title": "Autogenerated",
198
+ "type": "object",
199
+ "properties": {
200
+ "header_definition_type": {"title": "Header Definition Type", "default": "Autogenerated", "enum": ["Autogenerated"], "type": "string"},
201
+ },
202
+ },
203
+ {
204
+ "title": "User Provided",
205
+ "type": "object",
206
+ "properties": {
207
+ "header_definition_type": {"title": "Header Definition Type", "default": "User Provided", "enum": ["User Provided"], "type": "string"},
208
+ "column_names": {
209
+ "title": "Column Names",
210
+ "description": "The column names that will be used while emitting the CSV records",
211
+ "type": "array",
212
+ "items": {
213
+ "type": "string"
214
+ },
215
+ }
216
+ },
217
+ "required": ["column_names"]
218
+ },
219
+ ]
188
220
  },
189
221
  "true_values": {
190
222
  "title": "True Values",
@@ -761,7 +793,6 @@ csv_multi_stream_scenario = (
761
793
  )
762
794
  ).build()
763
795
 
764
-
765
796
  csv_custom_format_scenario = (
766
797
  TestScenarioBuilder()
767
798
  .set_name("csv_custom_format")
@@ -868,7 +899,6 @@ csv_custom_format_scenario = (
868
899
  )
869
900
  ).build()
870
901
 
871
-
872
902
  multi_stream_custom_format = (
873
903
  TestScenarioBuilder()
874
904
  .set_name("multi_stream_custom_format_scenario")
@@ -1016,7 +1046,6 @@ multi_stream_custom_format = (
1016
1046
  )
1017
1047
  ).build()
1018
1048
 
1019
-
1020
1049
  empty_schema_inference_scenario = (
1021
1050
  TestScenarioBuilder()
1022
1051
  .set_name("empty_schema_inference_scenario")
@@ -1092,7 +1121,6 @@ empty_schema_inference_scenario = (
1092
1121
  )
1093
1122
  ).build()
1094
1123
 
1095
-
1096
1124
  schemaless_csv_scenario = (
1097
1125
  TestScenarioBuilder()
1098
1126
  .set_name("schemaless_csv_scenario")
@@ -1188,7 +1216,6 @@ schemaless_csv_scenario = (
1188
1216
  )
1189
1217
  ).build()
1190
1218
 
1191
-
1192
1219
  schemaless_csv_multi_stream_scenario = (
1193
1220
  TestScenarioBuilder()
1194
1221
  .set_name("schemaless_csv_multi_stream_scenario")
@@ -1296,7 +1323,6 @@ schemaless_csv_multi_stream_scenario = (
1296
1323
  )
1297
1324
  ).build()
1298
1325
 
1299
-
1300
1326
  schemaless_with_user_input_schema_fails_connection_check_scenario = (
1301
1327
  TestScenarioBuilder()
1302
1328
  .set_name("schemaless_with_user_input_schema_fails_connection_check_scenario")
@@ -1361,7 +1387,6 @@ schemaless_with_user_input_schema_fails_connection_check_scenario = (
1361
1387
  .set_expected_read_error(ConfigValidationError, FileBasedSourceError.CONFIG_VALIDATION_ERROR.value)
1362
1388
  ).build()
1363
1389
 
1364
-
1365
1390
  schemaless_with_user_input_schema_fails_connection_check_multi_stream_scenario = (
1366
1391
  TestScenarioBuilder()
1367
1392
  .set_name("schemaless_with_user_input_schema_fails_connection_check_multi_stream_scenario")
@@ -1446,7 +1471,6 @@ schemaless_with_user_input_schema_fails_connection_check_multi_stream_scenario =
1446
1471
  .set_expected_read_error(ConfigValidationError, FileBasedSourceError.CONFIG_VALIDATION_ERROR.value)
1447
1472
  ).build()
1448
1473
 
1449
-
1450
1474
  csv_string_can_be_null_with_input_schemas_scenario = (
1451
1475
  TestScenarioBuilder()
1452
1476
  .set_name("csv_string_can_be_null_with_input_schema")
@@ -2143,7 +2167,6 @@ csv_custom_delimiter_in_double_quotes_scenario = (
2143
2167
  )
2144
2168
  ).build()
2145
2169
 
2146
-
2147
2170
  csv_skip_before_header_scenario = (
2148
2171
  TestScenarioBuilder()
2149
2172
  .set_name("csv_skip_before_header")
@@ -2278,7 +2301,6 @@ csv_skip_after_header_scenario = (
2278
2301
  )
2279
2302
  ).build()
2280
2303
 
2281
-
2282
2304
  csv_skip_before_and_after_header_scenario = (
2283
2305
  TestScenarioBuilder()
2284
2306
  .set_name("csv_skip_before_after_header")
@@ -2363,7 +2385,7 @@ csv_autogenerate_column_names_scenario = (
2363
2385
  "validation_policy": "Emit Record",
2364
2386
  "format": {
2365
2387
  "filetype": "csv",
2366
- "autogenerate_column_names": True,
2388
+ "header_definition": {"header_definition_type": "Autogenerated"},
2367
2389
  },
2368
2390
  }
2369
2391
  ],
@@ -2556,7 +2578,6 @@ csv_custom_null_values_scenario = (
2556
2578
  )
2557
2579
  ).build()
2558
2580
 
2559
-
2560
2581
  earlier_csv_scenario = (
2561
2582
  TestScenarioBuilder()
2562
2583
  .set_name("earlier_csv_stream")
File without changes
File without changes