दस्तावेज़ पर जाएँ
Python

टाइप और हेल्पर

पैकेज और क्या export करता है।

रनटाइम एक्सपोर्ट

एक्सपोर्टयह क्या है
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_mailडिस्पोज़ेबल-इनबॉक्स क्लाइंट, जो कोई API कुंजी नहीं रखता, और उसका एसिंक जुड़वाँ।
OpenEmailError, OpenEmailApiError, OpenEmailNetworkError और WebhookVerificationErrorपैकेज जो त्रुटियाँ raise करता है, वे सब OpenEmailError के अंतर्गत आती हैं। OpenEmailApiError पार्स किए गए त्रुटि जवाब को body के रूप में रखती है, और किसी फ़ॉर्म पर साइन-अप अस्वीकार होने पर fields भी।
verify_webhook_signatureस्थिर-समय में, replay विंडो के साथ। पार्स किया हुआ payload लौटाता है और किसी भी विफलता पर WebhookVerificationError raise करता है।
to_base64attachment बाइट्स के लिए Base64, bytes, bytearray या memoryview से।
is_api_keyक्या किसी string का आकार oe_live_ या oe_test_ वाला है। यह आकार की जाँच है, इसका प्रमाण नहीं कि key अब भी काम करती है।
is_access_tokenक्या किसी string का आकार OAuth एक्सेस टोकन जैसा है: 1 से 512 अक्षर, oe_ से शुरू न होने वाला।
is_sealed, MESSAGE_ENCRYPTION_FORMATSक्या किसी संदेश की body ciphertext है, और वे पाँच envelope जिनका नाम ingest ले सकता है। दो SIGNED प्रारूपों के लिए is_sealed false है, जिनकी body साफ़ रूप में आई थी। इसीलिए यह शिप होता है, बजाय इसके कि कॉल करने वाला इसे union से खुद निकाले।
LANGUAGES, resolve_language, language_by_code और is_rtl_languageबंडल की गई भाषा तालिका, और वे lookups जो किसी भाषा चयनकर्ता को चाहिए।
API_SCOPESscope की शब्दावली, key बनाने वाली स्क्रीन के लिए।
WEBHOOK_EVENTS, WEBHOOK_SIGNATURE_HEADERSवे events जिनकी कोई endpoint सदस्यता ले सकता है, और उन header के नाम जो हर delivery लिए चलती है।
RULE_FIELDS, RULE_OPERATORS और RULE_ACTIONSवह शब्दावली जिससे किसी rule की शर्तें और actions बनते हैं।
PAGE_LIMITSज़्यादातर पेज वाली सूचियों पर सबसे बड़ी और डिफ़ॉल्ट limit: 100 और 25। contacts.list, audiences.list_contacts और tracking सूचियाँ 50 के डिफ़ॉल्ट के साथ 200 तक लेती हैं, और temp_mail.list_messages 50 तक लेता है।
ERROR_TYPESजमी हुई error शब्दावली।
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कोई broadcast कहाँ खड़ा है, उसकी कौन-सी कॉपियाँ सूचीबद्ध करनी हैं, कोई पता suppressed क्यों है, और webhook replay क्यों अस्वीकार हुआ।
PROVIDER_IMPORT_RESOURCES, PROVIDER_IMPORT_STATUSES और PROVIDER_IMPORT_DOMAIN_STATESprovider import क्या-क्या ला सकता है, कोई run कहाँ खड़ा है, और उसे मिला हर domain कहाँ खड़ा है।
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_*वे मान जो कोई फ़ॉर्म, उसके फ़ील्ड और उसके साइन-अप ले सकते हैं, सोलह सेट में: स्थितियाँ, फ़ील्ड के प्रकार, शुरुआती ढाँचे, फ़ॉन्ट, चौड़ाइयाँ, और वे कारण जिनसे कोई जवाब अस्वीकार होता है।
BILLING_*, BRAND_*, DNS_*, DOMAIN_* और बाकी सेटबाकी हर namespace के मान, हर सेट का नाम उसी पर रखा गया है जो उसमें है।

टाइप

हर अनुरोध और रिस्पॉन्स का एक type है: openemail.types में एक TypedDict, उसी नाम से जो उसके TypeScript जुड़वाँ का है। …Resource वह है जो API लौटाता है, और …Create, …Patch, …Input और …Send वे हैं जो आप पास करते हैं। फ़िल्टर और प्रति-कॉल विकल्प keyword आर्ग्युमेंट हैं, इसलिए उन्हें रखने वाले TypeScript types, जैसे 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'])

keys API के अपने camelCase फ़ील्ड नाम हैं, जैसे 'replyTo', 'scheduledAt' और 'nextCursor', आप जो भेजते हैं उसमें भी और जो वापस आता है उसमें भी। केवल मेथड के आर्ग्युमेंट snake_case में हैं (idempotency_key=, label_ids=), और जिस आर्ग्युमेंट का नाम from होता, वह from_= है, जैसे emails.list और calendar.list_events पर।

mypy और pyright दोनों इन्हें पढ़ते हैं, इसलिए ग़लत वर्तनी वाली key API तक पहुँचने के बजाय type जाँच में ही फेल हो जाती है। body के लिए mypy Extra key "replyto" for TypedDict "EmailSend" बताता है और रिस्पॉन्स के लिए TypedDict "SentEmailResource" has no key "satus", और pyright भी यही बात अपने शब्दों में कहता है। किसी सेट से बाहर का मान भी इसी तरह फेल होता है, जैसे emails.list पर status='sending-ish'।

ये आपके type checker के लिए हैं। runtime पर हर 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।
  • Broadcasts: 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 जो कुछ भी और लौटाता है, बिलिंग से लेकर वर्कस्पेस तक, उन सबके types उन्हीं नामों से मौजूद हैं।

String सेट

मानों के सेट openemail.constants में constants हैं, हर एक का नाम उसी पर रखा गया है जो उसमें है, और हर मान के लिए एक attribute है: EMAIL_STATUSES.SENT का मान 'sent' है। हर मान पाने के लिए किसी सेट पर iterate करें, बाहर से आए मान को in से जाँचें, और उन्हें len() से गिनें। हर सदस्य का type Final है, इसलिए mypy और pyright EMAIL_STATUSES.SENT को literal '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 constants export करता है: VERSION, LANGUAGES, PAGE_LIMITS, PAY_AS_YOU_GO_LIMITS_CENTS और 104 सेट, वे जिनकी किसी ऐप्लिकेशन को सबसे ज़्यादा ज़रूरत पड़ती है। बाकी, जैसे EMAIL_STATUSES और TEMPLATE_STATUSES, openemail.constants से import करें, जहाँ हर सेट रहता है।

ऐसा endpoint जिसे यह अभी नहीं लपेटता

किसी SDK रिलीज़ को कभी आपके और पहले से काम कर रहे endpoint के बीच नहीं खड़ा होना चाहिए। client.raw.request() एक path और keyword आर्ग्युमेंट लेता है और पार्स की गई body लौटाता है, जिसमें क्लाइंट का क्रेडेंशियल, base URL, timeout और retry नीति लागू होती है।

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

GET को किसी भी दूसरे read की तरह retry किया जाता है। कोई भी दूसरा HTTP method एक ही बार भेजा जाता है, जब तक आप repeatable=True पास न करें, जो आपका यह दावा है कि उसे दो बार भेजा जा सकता है। query उन मानों को छोड़ देता है जो None या ख़ाली हैं, और api_key= तथा timeout= वैसे ही काम करते हैं जैसे हर दूसरे मेथड पर। AsyncOpenEmail पर कॉल को await किया जाता है।

path एक अकेले / से शुरू होना चाहिए। इसके अलावा कुछ भी, और ऐसा path जिसका पूरा बना URL API के origin से बाहर चला जाए, अनुरोध भेजे जाने से पहले ही ValueError raise करता है, ताकि क्रेडेंशियल कभी किसी दूसरे होस्ट तक न पहुँचे।

यह जानबूझकर क्या नहीं करता

  • यह किसी request body को validate नहीं करता। नियमों की इकलौती प्रति सर्वर का schema है, और यहाँ रखी दूसरी प्रति किसी दिन ऐसा पता अस्वीकार कर देती जिसे नया सर्वर स्वीकार करता है, उस संस्करण में जिसे किसी ने दो साल पहले pin किया था।
  • यह httpx, anyio और typing-extensions पर निर्भर है, और किसी और चीज़ पर नहीं।
  • बाहर जाते समय यह सिर्फ़ उसे बदलता है जिसे JSON जैसा है वैसा नहीं ले जा सकता: attachment के content में bytes base64 बन जाते हैं, datetime UTC में एक ISO 8601 क्षण बन जाता है, date एक ISO तारीख़ और set एक list। to, cc या bcc में अकेला प्राप्तकर्ता एक list में लपेट दिया जाता है।
  • यह रिस्पॉन्स को केवल एक तरह से बदलता है: किसी संग्रह का data array उसके envelope से बाहर उठा लिया जाता है। पेज वाली सूची उसे 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': ...}। बाकी हर जगह यह सादी list है। अंदर का हर resource प्रलेखित HTTP आकार बनाए रखता है।

पैकेज की parity जाँच इसे ईमानदार रखती है। यह हर मेथड को उसके TypeScript जुड़वाँ के साथ, उन्हीं आर्ग्युमेंट के साथ और हर विकल्प सेट करके, चलाती है, और तब फेल होती है जब कोई मेथड ग़ायब हो, अलग विकल्प ले, अलग अनुरोध भेजे या अलग मान लौटाए।