Python용 Azure Core 공유 클라이언트 라이브러리 - 버전 1.29.6

Azure Core는 Python SDK 클라이언트 라이브러리에 대한 공유 예외 및 모듈을 제공합니다. 이러한 라이브러리는 Python에 대한 Azure SDK 디자인 지침을 따릅니다.

클라이언트 라이브러리 개발자인 경우 자세한 내용은 클라이언트 라이브러리 개발자 참조를 참조 하세요.

소스 코드 | 패키지(Pypi) | 패키지(Conda) | API 참조 설명서

고지 사항

Python 2.7에 대한 Azure SDK Python 패키지 지원은 2022년 1월 1일에 종료되었습니다. 자세한 내용과 질문은 을 참조하세요. https://github.com/Azure/azure-sdk-for-python/issues/20691

시작

일반적으로 Azure Core를 설치할 필요가 없습니다. 를 사용하여 클라이언트 라이브러리 중 하나를 설치할 때 설치됩니다. 예를 들어 사용자 고유의 클라이언트 라이브러리를 구현하기 위해 명시적으로 설치하려는 경우 여기에서 찾을 수 있습니다.

주요 개념

Azure Core 라이브러리 예외

AzureError

AzureError는 모든 오류에 대한 기본 예외입니다.

class AzureError(Exception):
    def __init__(self, message, *args, **kwargs):
        self.inner_exception = kwargs.get("error")
        self.exc_type, self.exc_value, self.exc_traceback = sys.exc_info()
        self.exc_type = self.exc_type.__name__ if self.exc_type else type(self.inner_exception)
        self.exc_msg = "{}, {}: {}".format(message, self.exc_type, self.exc_value)  # type: ignore
        self.message = str(message)
        self.continuation_token = kwargs.get("continuation_token")
        super(AzureError, self).__init__(self.message, *args)

message 는 예외와 연결할 모든 메시지(str)입니다.

args는 예외에 포함할 추가 인수입니다.

kwargs는 예외와 함께 포함할 키워드(keyword) 인수입니다. 키워드(keyword) 오류를 사용하여 내부 예외를 전달하고 토큰 참조에 대한 continuation_token 불완전한 작업을 계속합니다.

AzureError에서 상속되는 예외는 다음과 같습니다.

ServiceRequestError

서비스에 대한 요청을 시도하는 동안 오류가 발생했습니다. 요청이 전송되지 않았습니다.

ServiceResponseError

요청이 전송되었지만 클라이언트가 응답을 이해하지 못했습니다. 연결 시간이 초과되었을 수 있습니다. 이러한 오류는 idempotent 또는 안전한 작업에 대해 다시 시도될 수 있습니다.

HttpResponseError

요청이 이루어졌고 서비스에서 성공하지 상태 코드가 수신되었습니다.

class HttpResponseError(AzureError):
    def __init__(self, message=None, response=None, **kwargs):
        self.reason = None
        self.response = response
        if response:
            self.reason = response.reason
            self.status_code = response.status_code
        self.error = self._parse_odata_body(ODataV4Format, response)  # type: Optional[ODataV4Format]
        if self.error:
            message = str(self.error)
        else:
            message = message or "Operation returned an invalid status '{}'".format(
                self.reason
            )

        super(HttpResponseError, self).__init__(message=message, **kwargs)

메시지는 HTTP 응답 오류 메시지입니다(선택 사항).

응답 은 HTTP 응답(선택 사항)입니다.

kwargs는 예외와 함께 포함할 키워드(keyword) 인수입니다.

다음 예외는 HttpResponseError에서 상속됩니다.

DecodeError

응답이 serialization 해제되는 동안 발생한 오류입니다.

IncompleteReadError

전체 메시지 본문을 받기 전에 피어가 연결을 닫으면 오류가 발생합니다.

ResourceExistsError

상태 코드 4xx를 사용하는 오류 응답입니다. 이 문제는 Azure 핵심 파이프라인에서 직접 발생하지 않습니다.

ResourceNotFoundError

일반적으로 412 응답(업데이트용) 또는 404(get/post)에 의해 트리거되는 오류 응답입니다.

ResourceModifiedError

상태 코드 4xx(일반적으로 412 충돌)를 사용하는 오류 응답입니다. 이 문제는 Azure 핵심 파이프라인에서 직접 발생하지 않습니다.

ResourceNotModifiedError

상태 코드 304를 사용하는 오류 응답입니다. 이 문제는 Azure 핵심 파이프라인에서 직접 발생하지 않습니다.

ClientAuthenticationError

상태 코드 4xx를 사용하는 오류 응답입니다. 이 문제는 Azure 핵심 파이프라인에서 직접 발생하지 않습니다.

TooManyRedirectsError

최대 리디렉션 시도 횟수에 도달할 때 발생하는 오류입니다. 리디렉션의 최대 크기는 RedirectPolicy에서 구성할 수 있습니다.

class TooManyRedirectsError(HttpResponseError):
    def __init__(self, history, *args, **kwargs):
        self.history = history
        message = "Reached maximum redirect attempts."
        super(TooManyRedirectsError, self).__init__(message, *args, **kwargs)

기록은 리디렉션된 요청을 초래한 요청/응답을 문서화하는 데 사용됩니다.

args는 예외에 포함할 추가 인수입니다.

kwargs는 예외와 함께 포함할 키워드(keyword) 인수입니다.

StreamConsumedError

의 스트림에 액세스하려고 하거나 azure.core.rest.AsyncHttpResponse 응답 스트림 azure.core.rest.HttpResponse 이 사용된 후에 오류가 발생합니다.

StreamClosedError

의 스트림에 액세스하려고 하거나 azure.core.rest.AsyncHttpResponse 응답 스트림이 azure.core.rest.HttpResponse 닫힌 후 오류가 발생합니다.

ResponseNotReadError

응답의 바이트를 먼저 읽어오기 전에 의 azure.core.rest.HttpResponse 또는 azure.core.rest.AsyncHttpResponse 에 액세스 content 하려고 하면 오류가 발생합니다.

구성

메서드를 호출할 때 kwargs 인수로 를 전달하여 일부 속성을 구성할 수 있습니다.

매개 변수 Description
headers HTTP 요청 헤더입니다.
request_id 헤더에 추가할 요청 ID입니다.
user_agent 지정된 경우 사용자 에이전트 문자열 앞에 추가됩니다.
logging_enable 를 사용하여 작업당 사용하도록 설정합니다. 기본값은 False입니다.
logger 지정된 경우 정보를 기록하는 데 사용됩니다.
response_encoding 이 서비스에 대해 알려진 경우 사용할 인코딩입니다(자동 검색을 사용하지 않도록 설정됨).
프록시 프로토콜 또는 프로토콜 및 호스트 이름을 프록시의 URL에 매핑합니다.
raw_request_hook 콜백 함수입니다. 요청에 따라 호출됩니다.
raw_response_hook 콜백 함수입니다. 응답에서 호출됩니다.
network_span_namer 범위 이름을 사용자 지정하기 위한 호출 가능입니다.
tracing_attributes 생성된 모든 범위에서 설정할 특성입니다.
permit_redirects 클라이언트에서 리디렉션을 허용하는지 여부입니다. 기본값은 True입니다.
redirect_max 허용되는 최대 리디렉션입니다. 기본값은 30입니다.
retry_total 허용할 총 재시도 횟수입니다. 다른 개수보다 우선합니다. 기본값은 10여야 합니다.
retry_connect 다시 시도할 연결 관련 오류 수입니다. 요청이 원격 서버로 전송되기 전에 발생한 오류이며, 요청을 처리하기 위해 서버를 트리거하지 않았다고 가정합니다. 기본값은 3여야 합니다.
retry_read 읽기 오류를 다시 시도할 횟수입니다. 이러한 오류는 요청이 서버로 전송된 후에 발생하므로 요청에 부작용이 있을 수 있습니다. 기본값은 3여야 합니다.
retry_status 잘못된 상태 코드에서 다시 시도할 횟수입니다. 기본값은 3여야 합니다.
retry_backoff_factor 두 번째 시도 후 시도 간에 적용할 백오프 요소입니다(대부분의 오류는 지연 없이 두 번째 시도에 의해 즉시 해결됨). 재시도 정책은 초 동안 절전 모드로 {backoff factor} * (2 ** ({number of total retries} - 1)) 설정됩니다. backoff_factor 0.1이면 재시도 사이에 [0.0s, 0.2s, 0.4s, ...]에 대해 재시도가 절전 모드로 전환됩니다. 기본값은 0.8입니다.
retry_backoff_max 최대 백오프 시간입니다. 기본값은 초(2분)입니다 120 .
retry_mode 시도 간 지연 또는 지수 지연이 수정되었습니다. 기본값은 입니다 Exponential.
시간 제한 작업에 대한 시간 제한 설정(초)이며 기본값은 s(7일)입니다 604800.
connection_timeout 연결 시간 제한에 대한 단일 부동 소수 자릿수(초)입니다. 기본값은 초입니다 300 .
read_timeout 읽기 시간 제한에 대한 단일 부동 소수 자릿수(초)입니다. 기본값은 초입니다 300 .
connection_verify SSL 인증서 확인. 기본적으로 사용하도록 설정되어 있습니다. 사용하지 않도록 설정하려면 False로 설정하거나 신뢰할 수 있는 CA 인증서가 있는 CA_BUNDLE 파일 또는 디렉터리의 경로로 설정할 수 있습니다.
connection_cert 클라이언트 쪽 인증서. 클라이언트 쪽 인증서로 사용할 로컬 인증서를 단일 파일(프라이빗 키 및 인증서 포함) 또는 두 파일 경로의 튜플로 지정할 수 있습니다.
프록시 사전 매핑 프로토콜 또는 프로토콜 및 호스트 이름을 프록시의 URL에 매핑합니다.
쿠키 와 함께 보낼 Dict 또는 CookieJar 개체입니다 Request.
connection_data_block_size 연결을 통해 전송된 데이터의 블록 크기입니다. 기본값은 4096 바이트입니다.

비동기 전송

비동기 전송은 옵트인되도록 설계되었습니다. AioHttp 는 비동기 전송의 지원되는 구현 중 하나입니다. 기본적으로 설치되지 않습니다. 별도로 설치해야 합니다.

공유 모듈

MatchConditions

MatchConditions는 일치 조건을 설명하는 열거형입니다.

class MatchConditions(Enum):
    Unconditionally = 1  # Matches any condition
    IfNotModified = 2  # If the target object is not modified. Usually it maps to etag=<specific etag>
    IfModified = 3  # Only if the target object is modified. Usually it maps to etag!=<specific etag>
    IfPresent = 4   # If the target object exists. Usually it maps to etag='*'
    IfMissing = 5   # If the target object does not exist. Usually it maps to etag!='*'

CaseInsensitiveEnumMeta

대/소문자를 구분하지 않는 열거형을 지원하는 메타클래스입니다.

from enum import Enum

from azure.core import CaseInsensitiveEnumMeta

class MyCustomEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    FOO = 'foo'
    BAR = 'bar'

Null Sentinel 값

데이터가 없는 특성을 지정하는 데 사용해야 하는 falsy sentinel 개체입니다. 이는 유선에서 로 직렬화 null 됩니다.

from azure.core.serialization import NULL

assert bool(NULL) is False

foo = Foo(
    attr=NULL
)

참여

이 프로젝트에 대한 기여와 제안을 환영합니다. 대부분의 경우 기여하려면 권한을 부여하며 실제로 기여를 사용할 권한을 당사에 부여한다고 선언하는 CLA(기여자 라이선스 계약)에 동의해야 합니다. 자세한 내용은 https://cla.microsoft.com 을 참조하세요.

끌어오기 요청을 제출하면 CLA-bot은 CLA를 제공하고 PR을 적절하게 데코레이팅해야 하는지 여부를 자동으로 결정합니다(예: 레이블, 설명). 봇에서 제공하는 지침을 따르기만 하면 됩니다. 이 작업은 CLA를 사용하여 모든 리포지토리에서 한 번만 수행하면 됩니다.

이 프로젝트는 Microsoft 오픈 소스 준수 사항을 채택했습니다. 자세한 내용은 준수 사항 FAQ를 참조하거나 opencode@microsoft.com에 추가 질문 또는 의견을 알려주세요.