
    Ng                     j    d dl Z d dlZd dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZ  G d de	          ZdS )    N)AnyListOptional)Document)
BaseLoader)UnstructuredFileLoaderc                   ^    e Zd ZdZ	 	 	 ddededededee         d	dfd
Zd	e	e
         fdZdS )OBSFileLoaderz Load from the `Huawei OBS file`.N bucketkeyclientendpointconfigreturnc                    	 ddl m} n# t          $ r t          d          w xY w|s|st          d          |st	                      }|                    d          r ||d          }nH ||                    d          |                    d	          |                    d
          |          }t          ||          st          d          || _        || _	        || _
        dS )a=
  Initialize the OBSFileLoader with the specified settings.

        Args:
            bucket (str): The name of the OBS bucket to be used.
            key (str): The name of the object in the OBS bucket.
            client (ObsClient, optional): An instance of the ObsClient to connect to OBS.
            endpoint (str, optional): The endpoint URL of your OBS bucket. This parameter is mandatory if `client` is not provided.
            config (dict, optional): The parameters for connecting to OBS, provided as a dictionary. This parameter is ignored if `client` is provided. The dictionary could have the following keys:
                - "ak" (str, optional): Your OBS access key (required if `get_token_from_ecs` is False and bucket policy is not public read).
                - "sk" (str, optional): Your OBS secret key (required if `get_token_from_ecs` is False and bucket policy is not public read).
                - "token" (str, optional): Your security token (required if using temporary credentials).
                - "get_token_from_ecs" (bool, optional): Whether to retrieve the security token from ECS. Defaults to False if not provided. If set to True, `ak`, `sk`, and `token` will be ignored.

        Raises:
            ValueError: If the `esdk-obs-python` package is not installed.
            TypeError: If the provided `client` is not an instance of ObsClient.
            ValueError: If `client` is not provided, but `endpoint` is missing.

        Note:
            Before using this class, make sure you have registered with OBS and have the necessary credentials. The `ak`, `sk`, and `endpoint` values are mandatory unless `get_token_from_ecs` is True or the bucket policy is public read. `token` is required when using temporary credentials.

        Example:
            To create a new OBSFileLoader with a new client:
            ```
            config = {
                "ak": "your-access-key",
                "sk": "your-secret-key"
            }
            obs_loader = OBSFileLoader("your-bucket-name", "your-object-key", config=config)
            ```

            To create a new OBSFileLoader with an existing client:
            ```
            from obs import ObsClient

            # Assuming you have an existing ObsClient object 'obs_client'
            obs_loader = OBSFileLoader("your-bucket-name", "your-object-key", client=obs_client)
            ```

            To create a new OBSFileLoader without an existing client:
            ```
            obs_loader = OBSFileLoader("your-bucket-name", "your-object-key", endpoint="your-endpoint-url")
            ```
        r   )	ObsClientzfCould not import esdk-obs-python python package. Please install it with `pip install esdk-obs-python`.z.Either OBSClient or endpoint must be provided.get_token_from_ecsECS)serversecurity_provider_policyaksktoken)access_key_idsecret_access_keysecurity_tokenr   zClient must be ObsClient typeN)obsr   ImportError
ValueErrordictget
isinstance	TypeErrorr   r   r   )selfr   r   r   r   r   r   s          i/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/document_loaders/obs_file.py__init__zOBSFileLoader.__init__   s0   h	%%%%%%% 	 	 	H  	
  	 S !QRRR  zz.// "(USSS""(**T"2"2&,jj&6&6#)::g#6#6#	   &),, 	=;<<<s   	 #c                 ~   t          j                    5 }| d| j         d| j         }t	          j        t          j                            |          d           | j        	                    | j        | j        |           t          |          }|                                cddd           S # 1 swxY w Y   dS )zLoad documents./T)exist_ok)
bucketName	objectKeydownloadFileN)tempfileTemporaryDirectoryr   r   osmakedirspathdirnamer   r-   r   load)r%   temp_dir	file_pathloaders       r&   r4   zOBSFileLoader.load_   s    (** 	!h#>>dk>>DH>>IK	22TBBBBK$$;$( %    ,I66F;;==	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   BB22B69B6)Nr   N)__name__
__module____qualname____doc__strr   r   r!   r'   r   r   r4        r&   r
   r
      s        ** !%M MM M 	M
 M M 
M M M M^
!d8n 
! 
! 
! 
! 
! 
!r>   r
   )r0   r.   typingr   r   r   langchain_core.documentsr   )langchain_community.document_loaders.baser   1langchain_community.document_loaders.unstructuredr   r
   r=   r>   r&   <module>rC      s    
			  & & & & & & & & & & - - - - - - @ @ @ @ @ @ T T T T T T\! \! \! \! \!J \! \! \! \! \!r>   