문서로 건너뛰기
Python

타입과 헬퍼

패키지가 그 밖에 내보내는 것들.

런타임 익스포트

익스포트설명
init, openemail공유 클라이언트를 한 번 구성한 뒤 어디서든 openemail을 import하십시오. init을 실행하지 않았다면 클라이언트가 OPENEMAIL_API_KEY로 스스로를 구성합니다.
get_client, reset_client공유 클라이언트 자체와, 다음 호출이 새 클라이언트를 만들도록 기존 것을 버리는 방법입니다. 테스트에서 케이스 사이에 필요한 것이 바로 이것입니다.
OpenEmail, create_client별도의 클라이언트입니다. OpenEmail()은 지정하지 않은 값을 환경에서 읽으며, create_client는 그 다른 이름입니다.
AsyncOpenEmail모든 메서드를 await로 호출하는 같은 클라이언트로, asyncio나 trio에서 동작합니다.
create_temp_mail, create_async_temp_mailAPI 키를 담지 않는 일회용 수신함 클라이언트와 그 비동기 버전입니다.
OpenEmailError, OpenEmailApiError, OpenEmailNetworkError 및 WebhookVerificationError패키지가 발생시키는 오류이며, 모두 OpenEmailError 아래에 있습니다. OpenEmailApiError는 파싱된 오류 응답을 body로 담고, 양식 가입이 거부되었을 때는 fields도 담습니다.
verify_webhook_signature재전송 허용 창을 둔 상수 시간 비교입니다. 파싱된 페이로드를 반환하며 실패하면 WebhookVerificationError를 발생시킵니다.
to_base64첨부 파일 바이트를 위한 Base64 변환으로, bytes, bytearray, memoryview를 받습니다.
is_api_key문자열이 oe_live_ 또는 oe_test_ 형태인지 확인합니다. 형태 검사일 뿐, 키가 아직 유효하다는 증거는 아닙니다.
is_access_token문자열이 OAuth 액세스 토큰의 형태인지 여부. 1~512자이고 oe_로 시작하지 않아야 합니다.
is_sealed, MESSAGE_ENCRYPTION_FORMATS메시지 본문이 암호문인지 여부와, 수신 처리가 지정할 수 있는 다섯 가지 봉투 형식입니다. 본문이 평문으로 도착한 두 가지 SIGNED 형식에서는 is_sealed가 false이며, 호출자가 유니온에서 직접 유도하게 두지 않고 이 함수를 함께 제공하는 이유가 여기에 있습니다.
LANGUAGES, resolve_language, language_by_code 및 is_rtl_language번들로 포함된 언어 표와, 언어 선택기에 필요한 조회 함수들입니다.
API_SCOPES키 생성 화면에서 쓸 스코프 어휘입니다.
WEBHOOK_EVENTS, WEBHOOK_SIGNATURE_HEADERS엔드포인트가 구독할 수 있는 이벤트와, 전달 요청에 담기는 헤더 이름입니다.
RULE_FIELDS, RULE_OPERATORS 및 RULE_ACTIONS규칙의 조건과 동작을 구성하는 어휘입니다.
PAGE_LIMITS대부분의 페이지 목록에서 limit의 최댓값과 기본값이며, 각각 100과 25입니다. contacts.list, audiences.list_contacts, tracking 목록은 최대 200까지 받고 기본값은 50이며, temp_mail.list_messages는 최대 50까지 받습니다.
ERROR_TYPES고정된 오류 어휘입니다.
VERSION, __version__패키지 버전입니다.
THREAD_SORTS, PEOPLE_SORTS, CONTACT_THREAD_SORTS 및 FILE_SORTS스레드, 사람, 연락처 스레드, 파일 목록을 정렬할 수 있는 순서.
FILE_KINDS, FILE_DIRECTIONS, CONTACT_BLOCK_LISTS 및 CONTACT_PHOTO_TYPES파일 목록의 필터, 워크스페이스의 두 차단 목록, 그리고 연락처 사진이 될 수 있는 이미지 형식.
BROADCAST_STATUSES, BROADCAST_RECIPIENT_FILTERS, SUPPRESSION_REASONS 및 WEBHOOK_REPLAY_ERROR_CODES브로드캐스트의 상태, 그 사본 중 무엇을 나열할지, 주소가 발송 차단된 이유, 그리고 웹훅 재전송이 거절된 이유.
PROVIDER_IMPORT_RESOURCES, PROVIDER_IMPORT_STATUSES 및 PROVIDER_IMPORT_DOMAIN_STATES제공업체 가져오기로 옮겨 올 수 있는 것, 실행의 상태, 그리고 찾아낸 각 도메인의 상태.
FILE_USAGES파일이 삭제되지 않고 남는 이유: received, sent, linked, scheduled.
CREDENTIAL_KINDS, STEP_UP_METHODS 및 STEP_UP_ERROR_CODESme.get()과 me.ping()이 설명하는 자격 증명의 종류(apiKey 또는 oauth), 인증 코드를 확인하는 방식(email 또는 totp), 그리고 인증이 실패할 때의 코드.
FORM_STATUSES, FORM_SUBMISSION_STATUSES, FORM_FIELD_TYPES, FORM_STARTER_SLUGS 및 FORM_*양식, 양식의 필드, 양식의 가입이 가지는 값을 담은 16개 집합: 상태, 필드 유형, 시작 양식, 글꼴, 너비, 그리고 답변이 거부되는 이유.
BILLING_*, BRAND_*, DNS_*, DOMAIN_* 및 그 밖의 집합그 밖의 모든 네임스페이스의 값이며, 각 집합은 담고 있는 것의 이름을 따서 붙였습니다.

타입

모든 요청과 응답에는 대응하는 타입이 있으며, 이는 TypeScript의 짝과 이름이 같은 openemail.types의 TypedDict입니다. …Resource는 API가 반환하는 것이고, …Create, …Patch, …Input, …Send는 여러분이 전달하는 것입니다. 필터와 호출별 옵션은 키워드 인자이므로, 이를 담는 TypeScript 타입(EmailListOptions 등)에는 여기서 대응하는 짝이 없습니다.

typed.py
from openemail.types import EmailSend, Page, SentEmailResource, ThreadSummaryResource message: EmailSend = {    'from': 'Acme Billing <[email protected]>',    'to': '[email protected]',    'replyTo': '[email protected]',    'subject': 'Your September invoice',    'text': 'Your invoice is attached.',} sent: SentEmailResource = client.emails.send(message)inbox: Page[ThreadSummaryResource] = client.threads.list(folder='inbox') print(sent['status'], sent['scheduledAt'], inbox['nextCursor'])

키는 보내는 쪽이든 돌아오는 쪽이든 'replyTo', 'scheduledAt', 'nextCursor' 같은 API 고유의 camelCase 필드 이름입니다. snake_case인 것은 메서드의 인자(idempotency_key=, label_ids=)뿐이며, from이라고 불렸을 인자는 emails.list와 calendar.list_events에서처럼 from_=입니다.

mypy와 pyright 모두 이 타입을 읽으므로, 철자가 틀린 키는 API에 닿기 전에 타입 검사에서 실패합니다. mypy는 본문에 대해 Extra key "replyto" for TypedDict "EmailSend", 응답에 대해 TypedDict "SentEmailResource" has no key "satus"라고 보고하고, pyright도 자기 방식의 문구로 같은 내용을 알립니다. emails.list에서의 status='sending-ish'처럼 집합에 없는 값도 같은 방식으로 실패합니다.

이 타입들은 타입 검사기를 위해 있습니다. 런타임에는 각 TypedDict가 평범한 dict이므로, import해도 비용이 들지 않고 프로그램이 실행되는 동안 아무것도 검사되지 않습니다.

  • 클라이언트: Page, ApiKeyMode, RawBody. openemail.types.client에는 AccessTokenProvider, AsyncAccessTokenProvider, HeaderValue, QueryValue가 더 있습니다.
  • 오류: ErrorType, FormFieldProblem.
  • 이메일: EmailSend, EmailTranslate, EmailResource, SentEmailResource, EmailRecipientResource, EmailEventResource, EmailStatus, EmailSource, EmailTransport, EmailTrackingSummary, EmailTranslationResource, TranslationResource, RecipientStatus, BatchItemResource, BatchResultResource.
  • 템플릿: TemplateCreate, TemplatePatch, TemplateContent, TemplatePreviewInput, TemplateSend, TemplateResource, TemplateDetailResource, TemplateVersionResource, TemplatePreviewResource, TemplateSendsResource, SentTemplateEmailResource, DeletedTemplateResource, TemplateEngine, TemplateProp, TemplateSlot, TemplateStatus, TemplateValueKind.
  • 추적: TrackingResource, TrackingSummary, TrackingRecipientResource, TrackingLinkResource, TrackingOpenResource, TrackingClickResource, TrackingStatsResource, TrackingGrain.
  • 스레드와 초안: ThreadPatch, ThreadResource, ThreadSummaryResource, UpdatedThreadResource, TrashedThreadResource, SnoozedThreadResource, DraftInput, DraftResource, DraftSummaryResource, SavedDraftResource, DeletedDraftResource.
  • 레이블, 연락처, 도메인, 주소: LabelInput, LabelColor, LabelResource, DeletedLabelResource, ContactCreate, ContactPatch, ContactSource, ContactResource, ContactDetailResource, ContactAudienceResource, ContactAudiencesSet, DeletedContactResource, PeoplePage, PersonResource, DomainPatch, DomainResource, DomainDetailResource, DomainSendingState, DomainTracking, DomainTrackingState, AddressBookPage, AddressBookResource, AddressResource, SendableDomainResource.
  • 오디언스: AudienceCreate, AudiencePatch, AudienceMemberSort, AudienceContactAdd, AudienceContactsBatch, AudienceImport, AudienceImportRow, AudienceResource, AudienceBuiltin, AudienceContactResource, AudienceMemberResource, RemovedAudienceContactResource, DeletedAudienceResource, EmptiedAudienceResource, AudienceBatchAddResource, AudienceBatchRemoveResource, AudienceImportResource, AudienceGrowthResource, AudienceGrowthTotals, AudienceGrowthSeries, AudienceGrowthBucket.
  • 브로드캐스트: BroadcastCreate, BroadcastPreviewInput, BroadcastResource, BroadcastCounts, BroadcastStatus, BroadcastPreviewResource, BroadcastRecipientResource, BroadcastRecipientContentResource, BroadcastRecipientFilter, BroadcastStatsResource, BroadcastStatsTotals, BroadcastStatsBucket.
  • 규칙: RuleCreate, RulePatch, RuleTestInput, RuleResource, RuleRunResource, RuleTestResource, DeletedRuleResource, RuleCondition, RuleConditionInput, RuleAction, RuleActionType, RuleField, RuleOperator.
  • 웹훅: WebhookCreate, WebhookPatch, WebhookResource, CreatedWebhookResource, DeletedWebhookResource, WebhookDeliveryResource, WebhookDeliveryDetailResource, WebhookDeliveryAttempt, WebhookReplayResource, WebhookReplayRefusal, WebhookReplayErrorCode, WebhookTestResource, WebhookEvent, WebhookPayload, EmailOpenedData, EmailClickedData, EmailDownloadedData, FileEventData.
  • 캘린더와 설정: CalendarOccurrenceResource, CalendarEventResource, CalendarAttendeeResource, SettingsPatch, SettingsResource.
  • 역할, 멤버, 키: RoleCreate, RolePatch, RoleResource, DeletedRoleResource, PermissionResource, MemberAdd, MemberPatch, MemberAddressGrant, MemberResource, MemberAddressResource, RemovedMemberResource, MemberAccess, KeyResource, PingResource.
  • 일회용 수신함: TempInboxCreate, TempInboxResource, CreatedTempInboxResource, DeletedTempInboxResource, TempDomainResource, TempMessageResource, TempMessagesResource, TempMessageDetailResource, DeletedTempMessageResource.
  • 공통: RecipientInput, AttachmentInput, AttachmentResource, MessageResource, MessageEncryption, MessageEncryptionFormat, TrackingRequest, TranslateOptions, SendTranslateOptions, LanguageResource, ApiScope, Permission, BuiltinRole, HitKind.
  • 액세스 토큰과 인증 코드: CredentialKind, ApiKeySelfResource, OauthTokenSelfResource, ApiKeyPingResource, OauthTokenPingResource, StepUpBegin, StepUpVerify, StepUpMethod, StepUpErrorCode, StepUpStatusResource, StepUpChallengeResource, StepUpVerifiedResource.
  • 양식: FormCreate, FormPatch, FormResource, FormDetailResource, FormDocument, FormField, FormCopy, FormStyle, FormSettings, FormSettingsInput, FormStats, FormAudience, FormStarterResource, FormStarterDetailResource, FormAnalyticsResource, FormSubmissionResource, FormAnswer, ResentFormConfirmationResource, FormSubscribeValues, FormSubscriptionResource, FormSubmittedEventData, FormConfirmedEventData.
  • 결제부터 워크스페이스까지 API가 반환하는 그 밖의 모든 것에도 같은 이름의 타입이 있습니다.

문자열 집합

값 집합은 openemail.constants에 있는 상수로, 각각 담고 있는 것의 이름을 따서 붙였고 값마다 속성이 있습니다. 예를 들어 EMAIL_STATUSES.SENT는 'sent'입니다. 모든 값을 얻으려면 집합을 순회하고, 외부에서 들어온 값은 in으로 확인하며, 개수는 len()으로 셉니다. 각 멤버는 Final로 타입이 지정되어 있으므로, mypy와 pyright는 EMAIL_STATUSES.SENT를 리터럴 'sent'로 읽고 EmailStatus가 필요한 곳이면 어디서든 받아들입니다.

constants.py
from openemail import PAGE_LIMITS, WEBHOOK_EVENTSfrom openemail.constants import EMAIL_STATUSES failed = client.emails.list(status=EMAIL_STATUSES.FAILED, limit=PAGE_LIMITS.MAX_LIMIT) print(EMAIL_STATUSES.SENT, list(EMAIL_STATUSES), len(WEBHOOK_EVENTS))print('email.opened' in WEBHOOK_EVENTS, len(failed['items']))

openemail 자체가 내보내는 상수는 108개로, VERSION, LANGUAGES, PAGE_LIMITS, PAY_AS_YOU_GO_LIMITS_CENTS, 그리고 애플리케이션이 가장 자주 쓰는 집합 104개입니다. EMAIL_STATUSES나 TEMPLATE_STATUSES 같은 나머지는 모든 집합이 있는 openemail.constants에서 import하십시오.

아직 감싸지 않은 엔드포인트

SDK 릴리스가 이미 동작하는 엔드포인트와 여러분 사이를 가로막는 일은 없어야 합니다. client.raw.request()는 경로와 키워드 인자를 받아 파싱된 본문을 반환하며, 클라이언트의 자격 증명, 기본 URL, 타임아웃, 재시도 정책이 그대로 적용됩니다.

escape_hatch.py
result = client.raw.request(    '/something-new',    method='POST',    query={'dryRun': True},    body={'name': 'Invoices'},    repeatable=True,) print(result)

GET은 다른 읽기와 마찬가지로 재시도됩니다. 그 밖의 메서드는 repeatable=True를 전달하지 않는 한 한 번만 전송되며, 이 값은 두 번 보내도 된다는 여러분의 단언입니다. query는 값이 None이거나 비어 있는 항목을 건너뛰고, api_key=와 timeout=은 다른 모든 메서드에서와 똑같이 동작합니다. AsyncOpenEmail에서는 호출을 await합니다.

경로는 / 하나로 시작해야 합니다. 그렇지 않은 경로나, 완성된 URL이 API 오리진을 벗어나는 경로는 요청을 보내기 전에 ValueError를 발생시키므로, 자격 증명이 다른 호스트에 닿는 일은 없습니다.

의도적으로 하지 않는 것

  • 요청 본문을 검증하지 않습니다. 규칙의 사본은 서버 스키마 하나뿐이며, 여기에 두 번째 사본을 두면 언젠가는 2년 전에 고정해 둔 버전에서 최신 서버라면 받아들일 주소를 거부하게 됩니다.
  • httpx, anyio, typing-extensions에만 의존하며, 그 밖에는 아무것에도 의존하지 않습니다.
  • 보낼 때는 JSON이 그대로 담을 수 없는 것만 변환합니다. 첨부 파일의 content에 있는 bytes는 base64로, datetime은 UTC 기준 ISO 8601 시각으로, date는 ISO 날짜로, set은 리스트로 바뀝니다. to, cc, bcc에 수신자가 하나뿐이면 리스트로 감쌉니다.
  • 응답의 형태를 바꾸는 것은 한 가지뿐입니다. 컬렉션의 data 배열을 봉투에서 꺼내는 것입니다. 페이지 목록은 이를 hasMore, nextCursor와 함께 items로, contacts.list_people은 hasMore, nextCursor, seen과 함께 items로, emails.send_batch는 sent, failed와 함께 items로, templates.list_sends는 total, page, pageSize와 함께 items로, temp_mail.list_messages는 hasMore, nextCursor, expiresAt과 함께 items로, addresses.list는 unrestricted, domains, hasMore, nextCursor와 함께 addresses로 돌려줍니다. imports.list_failures는 API가 보낸 그대로인 {'object': ..., 'data': [...], 'nextCursor': ...} 형태로 남는 유일한 목록입니다. 그 밖의 곳에서는 모두 평범한 리스트입니다. 안에 들어 있는 리소스는 문서화된 HTTP 형태를 그대로 유지합니다.

패키지의 패리티 검사가 이를 정직하게 지켜 줍니다. 모든 메서드를 TypeScript 짝과 나란히, 같은 인자로 그리고 모든 옵션을 지정해 실행하며, 메서드가 빠졌거나, 다른 옵션을 받거나, 다른 요청을 보내거나, 다른 값을 반환하면 실패합니다.