टाइप और हेल्पर
पैकेज और क्या 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_base64 | attachment बाइट्स के लिए 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_SCOPES | scope की शब्दावली, 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_STATES | provider import क्या-क्या ला सकता है, कोई run कहाँ खड़ा है, और उसे मिला हर domain कहाँ खड़ा है। |
| FILE_USAGES | कोई फ़ाइल हटाई जा सकने के बजाय क्यों रखी गई है: received, sent, linked या scheduled। |
| CREDENTIAL_KINDS, STEP_UP_METHODS और STEP_UP_ERROR_CODES | me.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, का यहाँ कोई जुड़वाँ नहीं है।
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 अपेक्षित हो वहाँ उसे स्वीकार करते हैं।
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 नीति लागू होती है।
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मेंbytesbase64 बन जाते हैं,datetimeUTC में एक ISO 8601 क्षण बन जाता है,dateएक ISO तारीख़ औरsetएक list।to,ccयाbccमें अकेला प्राप्तकर्ता एक list में लपेट दिया जाता है। - यह रिस्पॉन्स को केवल एक तरह से बदलता है: किसी संग्रह का
dataarray उसके 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 जुड़वाँ के साथ, उन्हीं आर्ग्युमेंट के साथ और हर विकल्प सेट करके, चलाती है, और तब फेल होती है जब कोई मेथड ग़ायब हो, अलग विकल्प ले, अलग अनुरोध भेजे या अलग मान लौटाए।