Source code for langchain_community.document_loaders.s3_directory
from __future__ import annotations
from typing import TYPE_CHECKING, List, Optional, Union
from langchain_core.documents import Document
from langchain_community.document_loaders.base import BaseLoader
from langchain_community.document_loaders.s3_file import S3FileLoader
if TYPE_CHECKING:
import botocore
[docs]class S3DirectoryLoader(BaseLoader):
"""从`Amazon AWS S3`目录加载。"""
[docs] def __init__(
self,
bucket: str,
prefix: str = "",
*,
region_name: Optional[str] = None,
api_version: Optional[str] = None,
use_ssl: Optional[bool] = True,
verify: Union[str, bool, None] = None,
endpoint_url: Optional[str] = None,
aws_access_key_id: Optional[str] = None,
aws_secret_access_key: Optional[str] = None,
aws_session_token: Optional[str] = None,
boto_config: Optional[botocore.client.Config] = None,
):
"""初始化使用存储桶和键名。
:param bucket: S3存储桶的名称。
:param prefix: S3键的前缀。默认为""。
:param region_name: 与客户端关联的区域的名称。
客户端与单个区域关联。
:param api_version: 要使用的API版本。默认情况下,botocore在创建客户端时将使用最新的API版本。只有在要使用客户端的先前API版本时才需要指定此参数。
:param use_ssl: 是否使用SSL。默认情况下使用SSL。
请注意,并非所有服务都支持非SSL连接。
:param verify: 是否验证SSL证书。
默认情况下会验证SSL证书。您可以提供以下值:
* False - 不验证SSL证书。仍将使用SSL(除非use_ssl为False),但不会验证SSL证书。
* path/to/cert/bundle.pem - CA证书捆绑包的文件名,用于使用。如果要使用与botocore使用的不同CA证书捆绑包,则可以指定此参数。
:param endpoint_url: 用于构建客户端的完整URL。通常,botocore在与服务通信时会自动构建适当的URL。您可以指定完整的URL(包括"http/https"方案)以覆盖此行为。如果提供了此值,则将忽略``use_ssl``。
:param aws_access_key_id: 创建客户端时要使用的访问密钥。这是完全可选的,如果未提供,则会自动使用会话配置的凭据。只有在要覆盖用于此特定客户端的凭据时才需要提供此参数。
:param aws_secret_access_key: 创建客户端时要使用的秘密密钥。与上述aws_access_key_id的语义相同。
:param aws_session_token: 创建客户端时要使用的会话令牌。与上述aws_access_key_id的语义相同。
:type boto_config: botocore.client.Config
:param boto_config: 高级boto3客户端配置选项。如果在客户端配置中指定了一个值,则其值将优先于环境变量和配置值,但不会优先于显式传递给该方法的值。如果在会话上设置了默认配置对象,则在创建客户端时使用的配置对象将是使用此调用提供的配置调用``merge()``后的结果。
"""
self.bucket = bucket
self.prefix = prefix
self.region_name = region_name
self.api_version = api_version
self.use_ssl = use_ssl
self.verify = verify
self.endpoint_url = endpoint_url
self.aws_access_key_id = aws_access_key_id
self.aws_secret_access_key = aws_secret_access_key
self.aws_session_token = aws_session_token
self.boto_config = boto_config
[docs] def load(self) -> List[Document]:
"""加载文档。"""
try:
import boto3
except ImportError:
raise ImportError(
"Could not import boto3 python package. "
"Please install it with `pip install boto3`."
)
s3 = boto3.resource(
"s3",
region_name=self.region_name,
api_version=self.api_version,
use_ssl=self.use_ssl,
verify=self.verify,
endpoint_url=self.endpoint_url,
aws_access_key_id=self.aws_access_key_id,
aws_secret_access_key=self.aws_secret_access_key,
aws_session_token=self.aws_session_token,
config=self.boto_config,
)
bucket = s3.Bucket(self.bucket)
docs = []
for obj in bucket.objects.filter(Prefix=self.prefix):
# Skip directories
if obj.size == 0 and obj.key.endswith("/"):
continue
loader = S3FileLoader(
self.bucket,
obj.key,
region_name=self.region_name,
api_version=self.api_version,
use_ssl=self.use_ssl,
verify=self.verify,
endpoint_url=self.endpoint_url,
aws_access_key_id=self.aws_access_key_id,
aws_secret_access_key=self.aws_secret_access_key,
aws_session_token=self.aws_session_token,
boto_config=self.boto_config,
)
docs.extend(loader.load())
return docs