[Python]load_dotenv와 튜플

포동동·2023년 8월 15일
1

[Pythonic]

목록 보기
3/4

load_dotenv로 튜플 자료형을 불러올 때의 문제

aws opensearch 클라이언트를 생성하는 간단한 함수를 생성한 뒤, 도메인에 대한 정보와 계정 정보를 전달하는 코드를 작성하였다.

from dotenv import load_dotenv

def os_client(host: str, port: int, auth: tuple) :

    client = OpenSearch(
        hosts=[f"{host}:{port}"],
        http_compress=True,
        http_auth=auth,
        use_ssl=True,
        verify_certs=True
    )

    return client

if __name__ == "__main__":
    load_dotenv()

    host = os.getenv('OPENSEARCH_HOST')
    port = os.getenv('OPENSEARCH_PORT')
    auth= os.getenv('OPENSEARCH_AUTH')
    client = os_client(host, port, auth)
# .env
OPENSEARCH_HOST = '도메인 엔드포인트'
OPENSEARCH_PORT = 443
OPENSEARCH_AUTH = '(유저ID, 패스워드)'

간단한 함수였기에, 쉽게 연결될 줄 알았지만, 계속해서 opensearchpy.exceptions.AuthenticationException: AuthenticationException(401, 'Unauthorized') 에러를 뱉었다. 그래서 검색해보니, os.getenv() 로 불러온 값들은 모두 문자열로 처리되기 때문에 아예 .env에 변수를 적을 때는 string으로 적고 불러와서 다시 튜플로 묶어주는 로직이 추가로 필요했다.


따라서 아래와 같이 수정하니 문제없이 해결되었다.

if __name__ == "__main__":
    load_dotenv()

    host = os.getenv('OPENSEARCH_HOST')
    port = os.getenv('OPENSEARCH_PORT')
    auth_str = os.getenv('OPENSEARCH_AUTH')
    auth_username, auth_password = auth_str.split(':')
    auth = (auth_username, auth_password)
    client = os_client(host, port, auth)

    get_top5_keyword_graph(client)
# .env
OPENSEARCH_HOST = '도메인 엔드포인트'
OPENSEARCH_PORT = 443
OPENSEARCH_AUTH = '유저ID:패스워드'
profile
완료주의

1개의 댓글

comment-user-thumbnail
2023년 8월 15일

즐겁게 읽었습니다. 유용한 정보 감사합니다.

답글 달기