unstructured-ingest 1.2.10__tar.gz → 1.2.13__tar.gz

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.

Potentially problematic release.


This version of unstructured-ingest might be problematic. Click here for more details.

Files changed (243) hide show
  1. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/PKG-INFO +1 -1
  2. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/pyproject.toml +1 -0
  3. unstructured_ingest-1.2.13/unstructured_ingest/__version__.py +1 -0
  4. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/bedrock.py +52 -6
  5. unstructured_ingest-1.2.13/unstructured_ingest/errors_v2.py +156 -0
  6. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/milvus.py +0 -1
  7. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/sharepoint.py +35 -8
  8. unstructured_ingest-1.2.10/unstructured_ingest/__version__.py +0 -1
  9. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/.gitignore +0 -0
  10. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/LICENSE.md +0 -0
  11. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/README.md +0 -0
  12. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/__init__.py +0 -0
  13. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/README.md +0 -0
  14. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/__init__.py +0 -0
  15. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/base/__init__.py +0 -0
  16. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/base/cmd.py +0 -0
  17. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/base/dest.py +0 -0
  18. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/base/importer.py +0 -0
  19. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/base/src.py +0 -0
  20. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/cli.py +0 -0
  21. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/cmds.py +0 -0
  22. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/utils/__init__.py +0 -0
  23. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/utils/click.py +0 -0
  24. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/cli/utils/model_conversion.py +0 -0
  25. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/data_types/__init__.py +0 -0
  26. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/data_types/entities.py +0 -0
  27. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/data_types/file_data.py +0 -0
  28. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/__init__.py +0 -0
  29. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/azure_openai.py +0 -0
  30. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/huggingface.py +0 -0
  31. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/interfaces.py +0 -0
  32. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/mixedbreadai.py +0 -0
  33. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/octoai.py +0 -0
  34. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/openai.py +0 -0
  35. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/togetherai.py +0 -0
  36. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/vertexai.py +0 -0
  37. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/embed/voyageai.py +0 -0
  38. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/error.py +0 -0
  39. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/interfaces/__init__.py +0 -0
  40. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/interfaces/connector.py +0 -0
  41. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/interfaces/downloader.py +0 -0
  42. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/interfaces/indexer.py +0 -0
  43. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/interfaces/process.py +0 -0
  44. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/interfaces/processor.py +0 -0
  45. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/interfaces/upload_stager.py +0 -0
  46. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/interfaces/uploader.py +0 -0
  47. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/logger.py +0 -0
  48. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/main.py +0 -0
  49. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/otel.py +0 -0
  50. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/__init__.py +0 -0
  51. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/interfaces.py +0 -0
  52. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/otel.py +0 -0
  53. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/pipeline.py +0 -0
  54. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/steps/__init__.py +0 -0
  55. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/steps/chunk.py +0 -0
  56. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/steps/download.py +0 -0
  57. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/steps/embed.py +0 -0
  58. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/steps/filter.py +0 -0
  59. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/steps/index.py +0 -0
  60. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/steps/partition.py +0 -0
  61. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/steps/stage.py +0 -0
  62. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/steps/uncompress.py +0 -0
  63. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/pipeline/steps/upload.py +0 -0
  64. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/__init__.py +0 -0
  65. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/chunker.py +0 -0
  66. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connector_registry.py +0 -0
  67. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/__init__.py +0 -0
  68. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/airtable.py +0 -0
  69. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/assets/__init__.py +0 -0
  70. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/assets/databricks_delta_table_schema.sql +0 -0
  71. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/assets/weaviate_collection_config.json +0 -0
  72. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/astradb.py +0 -0
  73. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/azure_ai_search.py +0 -0
  74. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/chroma.py +0 -0
  75. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/confluence.py +0 -0
  76. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/couchbase.py +0 -0
  77. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/databricks/__init__.py +0 -0
  78. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/databricks/volumes.py +0 -0
  79. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/databricks/volumes_aws.py +0 -0
  80. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/databricks/volumes_azure.py +0 -0
  81. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/databricks/volumes_gcp.py +0 -0
  82. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/databricks/volumes_native.py +0 -0
  83. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/databricks/volumes_table.py +0 -0
  84. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/delta_table.py +0 -0
  85. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/discord.py +0 -0
  86. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/duckdb/__init__.py +0 -0
  87. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/duckdb/base.py +0 -0
  88. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/duckdb/duckdb.py +0 -0
  89. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/duckdb/motherduck.py +0 -0
  90. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/elasticsearch/__init__.py +0 -0
  91. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/elasticsearch/elasticsearch.py +0 -0
  92. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/elasticsearch/opensearch.py +0 -0
  93. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/fsspec/__init__.py +0 -0
  94. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/fsspec/azure.py +0 -0
  95. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/fsspec/box.py +0 -0
  96. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/fsspec/dropbox.py +0 -0
  97. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/fsspec/fsspec.py +0 -0
  98. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/fsspec/gcs.py +0 -0
  99. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/fsspec/s3.py +0 -0
  100. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/fsspec/sftp.py +0 -0
  101. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/fsspec/utils.py +0 -0
  102. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/github.py +0 -0
  103. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/gitlab.py +0 -0
  104. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/google_drive.py +0 -0
  105. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/ibm_watsonx/__init__.py +0 -0
  106. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/ibm_watsonx/ibm_watsonx_s3.py +0 -0
  107. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/jira.py +0 -0
  108. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/kafka/__init__.py +0 -0
  109. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/kafka/cloud.py +0 -0
  110. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/kafka/kafka.py +0 -0
  111. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/kafka/local.py +0 -0
  112. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/kdbai.py +0 -0
  113. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/lancedb/__init__.py +0 -0
  114. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/lancedb/aws.py +0 -0
  115. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/lancedb/azure.py +0 -0
  116. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/lancedb/cloud.py +0 -0
  117. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/lancedb/gcp.py +0 -0
  118. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/lancedb/lancedb.py +0 -0
  119. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/lancedb/local.py +0 -0
  120. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/local.py +0 -0
  121. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/mongodb.py +0 -0
  122. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/neo4j.py +0 -0
  123. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/__init__.py +0 -0
  124. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/client.py +0 -0
  125. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/connector.py +0 -0
  126. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/helpers.py +0 -0
  127. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/ingest_backoff/__init__.py +0 -0
  128. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/ingest_backoff/_common.py +0 -0
  129. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/ingest_backoff/_wrapper.py +0 -0
  130. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/ingest_backoff/types.py +0 -0
  131. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/interfaces.py +0 -0
  132. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/__init__.py +0 -0
  133. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/block.py +0 -0
  134. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/__init__.py +0 -0
  135. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/bookmark.py +0 -0
  136. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/breadcrumb.py +0 -0
  137. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/bulleted_list_item.py +0 -0
  138. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/callout.py +0 -0
  139. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/child_database.py +0 -0
  140. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/child_page.py +0 -0
  141. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/code.py +0 -0
  142. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/column_list.py +0 -0
  143. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/divider.py +0 -0
  144. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/embed.py +0 -0
  145. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/equation.py +0 -0
  146. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/file.py +0 -0
  147. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/heading.py +0 -0
  148. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/image.py +0 -0
  149. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/link_preview.py +0 -0
  150. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/link_to_page.py +0 -0
  151. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/numbered_list.py +0 -0
  152. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/paragraph.py +0 -0
  153. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/pdf.py +0 -0
  154. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/quote.py +0 -0
  155. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/synced_block.py +0 -0
  156. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/table.py +0 -0
  157. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/table_of_contents.py +0 -0
  158. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/template.py +0 -0
  159. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/todo.py +0 -0
  160. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/toggle.py +0 -0
  161. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/unsupported.py +0 -0
  162. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/blocks/video.py +0 -0
  163. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database.py +0 -0
  164. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/__init__.py +0 -0
  165. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/checkbox.py +0 -0
  166. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/created_by.py +0 -0
  167. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/created_time.py +0 -0
  168. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/date.py +0 -0
  169. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/email.py +0 -0
  170. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/files.py +0 -0
  171. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/formula.py +0 -0
  172. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/last_edited_by.py +0 -0
  173. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/last_edited_time.py +0 -0
  174. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/multiselect.py +0 -0
  175. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/number.py +0 -0
  176. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/people.py +0 -0
  177. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/phone_number.py +0 -0
  178. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/relation.py +0 -0
  179. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/rich_text.py +0 -0
  180. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/rollup.py +0 -0
  181. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/select.py +0 -0
  182. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/status.py +0 -0
  183. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/title.py +0 -0
  184. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/unique_id.py +0 -0
  185. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/url.py +0 -0
  186. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/database_properties/verification.py +0 -0
  187. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/date.py +0 -0
  188. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/file.py +0 -0
  189. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/page.py +0 -0
  190. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/parent.py +0 -0
  191. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/rich_text.py +0 -0
  192. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/notion/types/user.py +0 -0
  193. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/onedrive.py +0 -0
  194. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/outlook.py +0 -0
  195. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/pinecone.py +0 -0
  196. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/qdrant/__init__.py +0 -0
  197. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/qdrant/cloud.py +0 -0
  198. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/qdrant/local.py +0 -0
  199. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/qdrant/qdrant.py +0 -0
  200. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/qdrant/server.py +0 -0
  201. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/redisdb.py +0 -0
  202. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/salesforce.py +0 -0
  203. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/slack.py +0 -0
  204. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/sql/__init__.py +0 -0
  205. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/sql/databricks_delta_tables.py +0 -0
  206. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/sql/postgres.py +0 -0
  207. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/sql/singlestore.py +0 -0
  208. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/sql/snowflake.py +0 -0
  209. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/sql/sql.py +0 -0
  210. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/sql/sqlite.py +0 -0
  211. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/sql/vastdb.py +0 -0
  212. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/utils.py +0 -0
  213. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/vectara.py +0 -0
  214. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/weaviate/__init__.py +0 -0
  215. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/weaviate/cloud.py +0 -0
  216. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/weaviate/embedded.py +0 -0
  217. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/weaviate/local.py +0 -0
  218. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/weaviate/weaviate.py +0 -0
  219. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/zendesk/__init__.py +0 -0
  220. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/zendesk/client.py +0 -0
  221. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/connectors/zendesk/zendesk.py +0 -0
  222. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/embedder.py +0 -0
  223. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/filter.py +0 -0
  224. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/partitioner.py +0 -0
  225. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/uncompress.py +0 -0
  226. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/utils/__init__.py +0 -0
  227. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/utils/blob_storage.py +0 -0
  228. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/utils/logging/connector.py +0 -0
  229. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/processes/utils/logging/sanitizer.py +0 -0
  230. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/unstructured_api.py +0 -0
  231. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/__init__.py +0 -0
  232. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/chunking.py +0 -0
  233. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/compression.py +0 -0
  234. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/constants.py +0 -0
  235. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/data_prep.py +0 -0
  236. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/dep_check.py +0 -0
  237. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/filesystem.py +0 -0
  238. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/html.py +0 -0
  239. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/ndjson.py +0 -0
  240. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/pydantic_models.py +0 -0
  241. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/string_and_date_utils.py +0 -0
  242. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/table.py +0 -0
  243. {unstructured_ingest-1.2.10 → unstructured_ingest-1.2.13}/unstructured_ingest/utils/tls.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: unstructured_ingest
3
- Version: 1.2.10
3
+ Version: 1.2.13
4
4
  Summary: Local ETL data pipeline to get data RAG ready
5
5
  Author-email: Unstructured Technologies <devops@unstructuredai.io>
6
6
  License-Expression: Apache-2.0
@@ -143,6 +143,7 @@ test = [
143
143
  "pyarrow",
144
144
  "networkx",
145
145
  "htmlbuilder",
146
+ "office365-rest-python-client",
146
147
  ]
147
148
  # Add constraints needed for CI
148
149
  ci = [
@@ -0,0 +1 @@
1
+ __version__ = "1.2.13" # pragma: no cover
@@ -58,9 +58,22 @@ def conform_query(query: str, provider: str) -> dict:
58
58
 
59
59
 
60
60
  class BedrockEmbeddingConfig(EmbeddingConfig):
61
- aws_access_key_id: SecretStr = Field(description="aws access key id")
62
- aws_secret_access_key: SecretStr = Field(description="aws secret access key")
63
- region_name: str = Field(description="aws region name", default="us-west-2")
61
+ aws_access_key_id: SecretStr | None = Field(description="aws access key id", default=None)
62
+ aws_secret_access_key: SecretStr | None = Field(
63
+ description="aws secret access key", default=None
64
+ )
65
+ region_name: str = Field(
66
+ description="aws region name",
67
+ default_factory=lambda: (
68
+ os.getenv("BEDROCK_REGION_NAME") or
69
+ os.getenv("AWS_DEFAULT_REGION") or
70
+ "us-west-2"
71
+ )
72
+ )
73
+ endpoint_url: str | None = Field(description="custom bedrock endpoint url", default=None)
74
+ access_method: str = Field(
75
+ description="authentication method", default="credentials"
76
+ ) # "credentials" or "iam"
64
77
  embedder_model_name: str = Field(
65
78
  default="amazon.titan-embed-text-v1",
66
79
  alias="model_name",
@@ -96,6 +109,20 @@ class BedrockEmbeddingConfig(EmbeddingConfig):
96
109
  return e
97
110
 
98
111
  def run_precheck(self) -> None:
112
+ # Validate access method and credentials configuration
113
+ if self.access_method == "credentials":
114
+ if not (self.aws_access_key_id and self.aws_secret_access_key):
115
+ raise ValueError(
116
+ "Credentials access method requires aws_access_key_id and aws_secret_access_key"
117
+ )
118
+ elif self.access_method == "iam":
119
+ # For IAM, credentials are handled by AWS SDK
120
+ pass
121
+ else:
122
+ raise ValueError(
123
+ f"Invalid access_method: {self.access_method}. Must be 'credentials' or 'iam'"
124
+ )
125
+
99
126
  client = self.get_bedrock_client()
100
127
  try:
101
128
  model_info = client.list_foundation_models(byOutputModality="EMBEDDING")
@@ -113,11 +140,30 @@ class BedrockEmbeddingConfig(EmbeddingConfig):
113
140
  raise self.wrap_error(e=e)
114
141
 
115
142
  def get_client_kwargs(self) -> dict:
116
- return {
117
- "aws_access_key_id": self.aws_access_key_id.get_secret_value(),
118
- "aws_secret_access_key": self.aws_secret_access_key.get_secret_value(),
143
+ kwargs = {
119
144
  "region_name": self.region_name,
120
145
  }
146
+
147
+ if self.endpoint_url:
148
+ kwargs["endpoint_url"] = self.endpoint_url
149
+
150
+ if self.access_method == "credentials":
151
+ if self.aws_access_key_id and self.aws_secret_access_key:
152
+ kwargs["aws_access_key_id"] = self.aws_access_key_id.get_secret_value()
153
+ kwargs["aws_secret_access_key"] = self.aws_secret_access_key.get_secret_value()
154
+ else:
155
+ raise ValueError(
156
+ "Credentials access method requires aws_access_key_id and aws_secret_access_key"
157
+ )
158
+ elif self.access_method == "iam":
159
+ # For IAM, boto3 will use default credential chain (IAM roles, environment, etc.)
160
+ pass
161
+ else:
162
+ raise ValueError(
163
+ f"Invalid access_method: {self.access_method}. Must be 'credentials' or 'iam'"
164
+ )
165
+
166
+ return kwargs
121
167
 
122
168
  @requires_dependencies(
123
169
  ["boto3"],
@@ -0,0 +1,156 @@
1
+ from abc import ABC
2
+ from functools import wraps
3
+ from typing import Optional
4
+
5
+
6
+ class UnstructuredIngestError(Exception, ABC):
7
+ error_string: str
8
+ status_code: Optional[int] = None
9
+
10
+ @classmethod
11
+ def wrap(cls, f):
12
+ """
13
+ Provides a wrapper for a function that catches any exception and
14
+ re-raises it as the customer error. If the exception itself is already an instance
15
+ of the custom error, re-raises original error.
16
+ """
17
+
18
+ @wraps(f)
19
+ def wrapper(*args, **kwargs):
20
+ try:
21
+ return f(*args, **kwargs)
22
+ except BaseException as error:
23
+ if not isinstance(error, cls) and not issubclass(type(error), cls):
24
+ raise cls(cls.error_string.format(str(error))) from error
25
+ raise
26
+
27
+ return wrapper
28
+
29
+
30
+ class ConnectionError(UnstructuredIngestError):
31
+ error_string = "Connection error: {}"
32
+ status_code: Optional[int] = 400
33
+
34
+
35
+ class SourceConnectionError(ConnectionError):
36
+ error_string = "Error in getting data from upstream data source: {}"
37
+ status_code: Optional[int] = 400
38
+
39
+
40
+ class SourceConnectionNetworkError(SourceConnectionError):
41
+ error_string = "Error in connecting to upstream data source: {}"
42
+ status_code: Optional[int] = 400
43
+
44
+
45
+ class DestinationConnectionError(ConnectionError):
46
+ error_string = "Error in connecting to downstream data source: {}"
47
+ status_code: Optional[int] = 400
48
+
49
+
50
+ class EmbeddingEncoderConnectionError(ConnectionError):
51
+ error_string = "Error in connecting to the embedding model provider: {}"
52
+ status_code: Optional[int] = 400
53
+
54
+
55
+ class UserError(UnstructuredIngestError):
56
+ error_string = "User error: {}"
57
+ status_code: Optional[int] = 401
58
+
59
+
60
+ class UserAuthError(UserError):
61
+ error_string = "User authentication error: {}"
62
+ status_code: Optional[int] = 401
63
+
64
+
65
+ class RateLimitError(UserError):
66
+ error_string = "Rate limit error: {}"
67
+ status_code: Optional[int] = 429
68
+
69
+
70
+ class NotFoundError(UnstructuredIngestError):
71
+ error_string = "Not found error: {}"
72
+ status_code: Optional[int] = 404
73
+
74
+
75
+ class TimeoutError(UnstructuredIngestError):
76
+ error_string = "Timeout error: {}"
77
+ status_code: Optional[int] = 408
78
+
79
+
80
+ class ResponseError(UnstructuredIngestError):
81
+ error_string = "Response error: {}"
82
+ status_code: Optional[int] = 400
83
+
84
+
85
+ class WriteError(UnstructuredIngestError):
86
+ error_string = "Error in writing to downstream data source: {}"
87
+ status_code: Optional[int] = 400
88
+
89
+
90
+ class ProviderError(UnstructuredIngestError):
91
+ error_string = "Provider error: {}"
92
+ status_code: Optional[int] = 500
93
+
94
+
95
+ class ValueError(UnstructuredIngestError):
96
+ error_string = "Value error: {}"
97
+
98
+
99
+ class PartitionError(UnstructuredIngestError):
100
+ error_string = "Error in partitioning content: {}"
101
+
102
+
103
+ class QuotaError(UserError):
104
+ error_string = "Quota error: {}"
105
+
106
+
107
+ class MissingCategoryError(UnstructuredIngestError):
108
+ error_string = "Missing category error: {}"
109
+
110
+
111
+ class ValidationError(UnstructuredIngestError):
112
+ error_string = "Validation error: {}"
113
+
114
+
115
+ class KeyError(UnstructuredIngestError):
116
+ error_string = "Key error: {}"
117
+
118
+
119
+ class FileExistsError(UnstructuredIngestError):
120
+ error_string = "File exists error: {}"
121
+
122
+
123
+ class TypeError(UnstructuredIngestError):
124
+ error_string = "Type error: {}"
125
+
126
+
127
+ class IcebergCommitFailedException(UnstructuredIngestError):
128
+ error_string = "Failed to commit changes to the iceberg table"
129
+
130
+
131
+ recognized_errors = [
132
+ UserError,
133
+ UserAuthError,
134
+ RateLimitError,
135
+ QuotaError,
136
+ ProviderError,
137
+ NotFoundError,
138
+ TypeError,
139
+ ValueError,
140
+ FileExistsError,
141
+ TimeoutError,
142
+ KeyError,
143
+ ResponseError,
144
+ ValidationError,
145
+ PartitionError,
146
+ WriteError,
147
+ ConnectionError,
148
+ SourceConnectionError,
149
+ SourceConnectionNetworkError,
150
+ DestinationConnectionError,
151
+ EmbeddingEncoderConnectionError,
152
+ ]
153
+
154
+
155
+ def is_internal_error(e: Exception) -> bool:
156
+ return any(isinstance(e, recognized_error) for recognized_error in recognized_errors)
@@ -10,7 +10,6 @@ from unstructured_ingest.data_types.file_data import FileData
10
10
  from unstructured_ingest.error import (
11
11
  DestinationConnectionError,
12
12
  KeyError,
13
- ValueError,
14
13
  WriteError,
15
14
  )
16
15
  from unstructured_ingest.interfaces import (
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
+ import logging
4
5
  from dataclasses import dataclass
5
6
  from typing import TYPE_CHECKING, Any, AsyncIterator, Optional
6
7
 
@@ -210,7 +211,7 @@ class SharepointIndexer(OnedriveIndexer):
210
211
 
211
212
 
212
213
  class SharepointDownloaderConfig(OnedriveDownloaderConfig):
213
- pass
214
+ max_retries: int = 10
214
215
 
215
216
 
216
217
  @dataclass
@@ -219,10 +220,22 @@ class SharepointDownloader(OnedriveDownloader):
219
220
  download_config: SharepointDownloaderConfig
220
221
  connector_type: str = CONNECTOR_TYPE
221
222
 
223
+ @staticmethod
224
+ def retry_on_status_code(exc):
225
+ error_msg = str(exc).lower()
226
+ return "429" in error_msg or "activitylimitreached" in error_msg or "throttled" in error_msg
227
+
222
228
  @SourceConnectionNetworkError.wrap
223
229
  @requires_dependencies(["office365"], extras="sharepoint")
224
230
  def _fetch_file(self, file_data: FileData) -> DriveItem:
225
231
  from office365.runtime.client_request_exception import ClientRequestException
232
+ from tenacity import (
233
+ before_log,
234
+ retry,
235
+ retry_if_exception,
236
+ stop_after_attempt,
237
+ wait_exponential,
238
+ )
226
239
 
227
240
  if file_data.source_identifiers is None or not file_data.source_identifiers.fullpath:
228
241
  raise ValueError(
@@ -233,13 +246,27 @@ class SharepointDownloader(OnedriveDownloader):
233
246
  server_relative_path = file_data.source_identifiers.fullpath
234
247
  client = self.connection_config.get_client()
235
248
 
236
- try:
237
- client_site = client.sites.get_by_url(self.connection_config.site).get().execute_query()
238
- site_drive_item = self.connection_config._get_drive_item(client_site)
239
- except ClientRequestException:
240
- logger.info("Site not found")
241
- raise SourceConnectionError(f"Site not found: {self.connection_config.site}")
242
- file = site_drive_item.get_by_path(server_relative_path).get().execute_query()
249
+ @retry(
250
+ stop=stop_after_attempt(self.download_config.max_retries),
251
+ wait=wait_exponential(exp_base=2, multiplier=1, min=2, max=10),
252
+ retry=retry_if_exception(self.retry_on_status_code),
253
+ before=before_log(logger, logging.DEBUG),
254
+ reraise=True,
255
+ )
256
+ def _get_item_by_path() -> DriveItem:
257
+ try:
258
+ client_site = (
259
+ client.sites.get_by_url(self.connection_config.site).get().execute_query()
260
+ )
261
+ site_drive_item = self.connection_config._get_drive_item(client_site)
262
+ except ClientRequestException:
263
+ logger.info(f"Site not found: {self.connection_config.site}")
264
+ raise SourceConnectionError(f"Site not found: {self.connection_config.site}")
265
+ file = site_drive_item.get_by_path(server_relative_path).get().execute_query()
266
+ return file
267
+
268
+ # Call the retry-wrapped function
269
+ file = _get_item_by_path()
243
270
 
244
271
  if not file:
245
272
  raise NotFoundError(f"file not found: {server_relative_path}")
@@ -1 +0,0 @@
1
- __version__ = "1.2.10" # pragma: no cover