aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/mailersend
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/mailersend')
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/__init__.py7
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/activity/__init__.py37
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/analytics/__init__.py118
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/api_quota/__init__.py25
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/base/__init__.py0
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/base/base.py45
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/domains/__init__.py128
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/email_verification/__init__.py91
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/emails/__init__.py137
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/inbound_routing/__init__.py126
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/messages/__init__.py35
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/recipients/__init__.py255
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/scheduled_messages/__init__.py47
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/sender_identities/__init__.py137
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/sms_activity/__init__.py68
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/sms_inbounds/__init__.py134
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/sms_messages/__init__.py52
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/sms_phone_numbers/__init__.py95
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/sms_recipients/__init__.py76
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/sms_sending/__init__.py43
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/sms_webhooks/__init__.py122
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/templates/__init__.py42
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/tokens/__init__.py54
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/utils/__init__.py43
-rw-r--r--.venv/lib/python3.12/site-packages/mailersend/webhooks/__init__.py135
25 files changed, 2052 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/mailersend/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/__init__.py
new file mode 100644
index 00000000..3ad21155
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/__init__.py
@@ -0,0 +1,7 @@
+"""
+MailerSend Official Python DSK
+@maintainer: Igor HrĨek (igor at mailerlite dot com)
+"""
+
+__version_info__ = ("0", "5", "8")
+__version__ = ".".join(__version_info__)
diff --git a/.venv/lib/python3.12/site-packages/mailersend/activity/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/activity/__init__.py
new file mode 100644
index 00000000..e8e8a3fe
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/activity/__init__.py
@@ -0,0 +1,37 @@
+"""
+Handles /activity endpoint
+Doc: https://developers.mailersend.com/api/v1/activity.html
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewActivity(base.NewAPIClient):
+ """
+ Instantiates the /activity endpoint object
+ """
+
+ pass
+
+ def get_domain_activity(
+ self, domain_id, page=None, limit=None, date_from=None, date_to=None, event=None
+ ):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ _data = {
+ "page": page or None,
+ "limit": limit or None,
+ "date_from": date_from or None,
+ "date_to": date_to or None,
+ "event": event or None,
+ }
+
+ request = requests.get(
+ f"{self.api_base}/activity/{domain_id}",
+ headers=self.headers_default,
+ json=_data,
+ )
+ return request.text
diff --git a/.venv/lib/python3.12/site-packages/mailersend/analytics/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/analytics/__init__.py
new file mode 100644
index 00000000..cbc436c7
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/analytics/__init__.py
@@ -0,0 +1,118 @@
+"""
+Handles /analytics endpoint
+Doc: https://developers.mailersend.com/api/v1/analytics.html
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewAnalytics(base.NewAPIClient):
+ """
+ Instantiates the /activity endpoint object
+ """
+
+ pass
+
+ def get_activity_by_date(
+ self, date_from, date_to, event, domain_id=None, group_by=None
+ ):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ _data = {
+ "date_from": date_from,
+ "date_to": date_to,
+ "event[]": event,
+ }
+
+ if domain_id is not None:
+ _data["domain_id"] = domain_id
+
+ if group_by is not None:
+ _data["group_by"] = group_by
+
+ request = requests.get(
+ f"{self.api_base}/analytics/date",
+ headers=self.headers_default,
+ params=_data,
+ )
+
+ return request.text
+
+ def get_opens_by_country(self, date_from, date_to, domain_id=None, recipients=None):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ _data = {
+ "date_from": date_from,
+ "date_to": date_to,
+ }
+
+ if domain_id is not None:
+ _data["domain_id"] = domain_id
+
+ if recipients is not None:
+ _data["recipient_id"] = recipients
+
+ request = requests.get(
+ f"{self.api_base}/analytics/country",
+ headers=self.headers_default,
+ json=_data,
+ )
+
+ return request.text
+
+ def get_opens_by_user_agent(
+ self, date_from, date_to, domain_id=None, recipients=None
+ ):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ _data = {
+ "date_from": date_from,
+ "date_to": date_to,
+ }
+
+ if domain_id is not None:
+ _data["domain_id"] = domain_id
+
+ if recipients is not None:
+ _data["recipient_id"] = recipients
+
+ request = requests.get(
+ f"{self.api_base}/analytics/ua-name",
+ headers=self.headers_default,
+ json=_data,
+ )
+
+ return request.text
+
+ def get_opens_by_reading_environment(
+ self, date_from, date_to, domain_id=None, recipients=None
+ ):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ _data = {
+ "date_from": date_from,
+ "date_to": date_to,
+ }
+
+ if domain_id is not None:
+ _data["domain_id"] = domain_id
+
+ if recipients is not None:
+ _data["recipient_id"] = recipients
+
+ request = requests.get(
+ f"{self.api_base}/analytics/ua-type",
+ headers=self.headers_default,
+ json=_data,
+ )
+
+ return request.text
diff --git a/.venv/lib/python3.12/site-packages/mailersend/api_quota/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/api_quota/__init__.py
new file mode 100644
index 00000000..fcd027b8
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/api_quota/__init__.py
@@ -0,0 +1,25 @@
+"""
+Handles /api-quota endpoint
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewApiQuota(base.NewAPIClient):
+ """
+ Instantiates the /api-quota endpoint object
+ """
+
+ pass
+
+ def get_quota(self, page=1, limit=25, verified=False):
+ query_params = {"page": page, "limit": limit, "verified": verified}
+
+ request = requests.get(
+ f"{self.api_base}/api-quota",
+ headers=self.headers_default,
+ params=query_params,
+ )
+
+ return request.text
diff --git a/.venv/lib/python3.12/site-packages/mailersend/base/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/base/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/base/__init__.py
diff --git a/.venv/lib/python3.12/site-packages/mailersend/base/base.py b/.venv/lib/python3.12/site-packages/mailersend/base/base.py
new file mode 100644
index 00000000..68d72f4f
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/base/base.py
@@ -0,0 +1,45 @@
+"""
+Base object handles connection information to the MailerSend API
+"""
+
+import os
+
+API_BASE = "https://api.mailersend.com/v1"
+API_KEY = os.environ.get("MAILERSEND_API_KEY")
+
+
+class NewAPIClient:
+ """
+ Instantiates the parent object all endpoints follow.
+ Provides necessary connection information to perform API operations.
+ """
+
+ def __init__(
+ self,
+ mailersend_api_key=API_KEY,
+ api_base=None,
+ headers_default=None,
+ headers_auth=None,
+ ):
+ """
+ NewAPIClient constructor
+ """
+
+ self.api_base = API_BASE
+ self.mailersend_api_key = mailersend_api_key
+ self.headers_auth = f"Bearer {self.mailersend_api_key}"
+ self.headers_default = {
+ "Content-Type": "application/json",
+ "X-Requested-With": "XMLHttpRequest",
+ "User-Agent": "MailerSend-Client-python-v1",
+ "Authorization": f"{self.headers_auth}",
+ }
+
+
+def generate_config_change_json_body(key, value):
+ """
+ Returns a key:value pair
+ """
+ data = {key: value}
+
+ return data
diff --git a/.venv/lib/python3.12/site-packages/mailersend/domains/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/domains/__init__.py
new file mode 100644
index 00000000..2645d491
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/domains/__init__.py
@@ -0,0 +1,128 @@
+"""
+Handles /domains endpoint
+Doc: https://developers.mailersend.com/api/v1/domains.html
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewDomain(base.NewAPIClient):
+ """
+ Instantiates the /domains endpoint object
+ """
+
+ pass
+
+ def get_domains(self):
+ """
+ Get a list of all domains
+
+ Returns the JSON response of MailerSend API
+ """
+ request = requests.get(f"{self.api_base}/domains", headers=self.headers_default)
+ return request.text
+
+ def get_domain_by_id(self, domain_id):
+ """
+ Get info on a domain by its ID
+
+ @params:
+ domain_id (str): A domain ID
+
+ Returns the JSON response of MailerSend API
+ """
+ request = requests.get(
+ f"{self.api_base}/domains/{domain_id}", headers=self.headers_default
+ )
+ return request.text
+
+ def add_domain(self, domain_data):
+ """
+ Add a domain
+
+ @params:
+ domain_data (dic): Contains key:value data needed for creating a new domain
+
+ """
+
+ request = requests.post(
+ f"{self.api_base}/domains",
+ headers=self.headers_default,
+ json=domain_data,
+ )
+ return request.text
+
+ def delete_domain(self, domain_id):
+ """
+ Delete a domain
+
+ @params:
+ domain_id (str): A domain ID
+
+ Returns the JSON response of MailerSend API
+ """
+ request = requests.delete(
+ f"{self.api_base}/domains/{domain_id}", headers=self.headers_default
+ )
+ return request.status_code
+
+ def get_recipients_for_domain(self, domain_id):
+ """
+ List all recipients for a domain
+
+ @params:
+ domain_id (str): A domain ID
+
+ Returns the JSON response of MailerSend API
+ """
+ request = requests.get(
+ f"{self.api_base}/domains/{domain_id}/recipients",
+ headers=self.headers_default,
+ )
+ return request.text
+
+ def update_domain_setting(self, domain_id, domain_data):
+ """
+ Returns the JSON response of MailerSend API
+
+ @params:
+ domain_id (str): A domain ID
+ domain_data (dict): A key:value list that contains parameters for updating domain name
+
+ """
+ request = requests.put(
+ f"{self.api_base}/domains/{domain_id}/settings",
+ headers=self.headers_default,
+ json=domain_data,
+ )
+ return request.text
+
+ def get_dns_records(self, domain_id):
+ """
+ Returns the JSON response of dns records
+
+ @params:
+ domain_id (str): A domain ID
+
+ """
+
+ request = requests.get(
+ f"{self.api_base}/domains/{domain_id}/dns-records",
+ headers=self.headers_default,
+ )
+ return request.text
+
+ def verify_domain(self, domain_id):
+ """
+ Returns the JSON response of verified domain
+
+ @params:
+ domain_id (str): A domain ID
+
+ """
+
+ request = requests.get(
+ f"{self.api_base}/domains/{domain_id}/verify", headers=self.headers_default
+ )
+ return request.text
diff --git a/.venv/lib/python3.12/site-packages/mailersend/email_verification/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/email_verification/__init__.py
new file mode 100644
index 00000000..adebad09
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/email_verification/__init__.py
@@ -0,0 +1,91 @@
+"""
+Handles /email-verification endpoint
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewEmailVerification(base.NewAPIClient):
+ """
+ Instantiates the /email-verification endpoint object
+ """
+
+ # you shall not
+ pass
+
+ def get_all_lists(self, page=1, limit=25):
+ """
+ Returns all email verification lists
+ :param page: int
+ :param limit: int
+ """
+ query_params = {"page": page, "limit": limit}
+
+ request = requests.get(
+ f"{self.api_base}/email-verification",
+ headers=self.headers_default,
+ params=query_params,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def get_list(self, email_verification_id):
+ """
+ Retrieve single email verification list
+ :type email_verification_id: object
+ """
+
+ query_params = {"email_verification_id": email_verification_id}
+
+ request = requests.get(
+ f"{self.api_base}/email-verification",
+ headers=self.headers_default,
+ params=query_params,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def create_list(self, name, emails):
+ """
+ Create email verification list
+ :param name: str
+ :param emails: list
+ :return:
+ """
+
+ data = {"name": name, "emails": emails}
+
+ request = requests.post(
+ f"{self.api_base}/email-verification",
+ headers=self.headers_default,
+ json=data,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def verify_list(self, email_verification_id):
+ """
+ Verify an email verification list
+ :type email_verification_id: str
+ """
+
+ request = requests.get(
+ f"{self.api_base}/email-verification/{email_verification_id}/verify",
+ headers=self.headers_default,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def get_list_results(self, email_verification_id):
+ """
+ Get the result for each individual email of an email verification list
+ :type email_verification_id: str
+ """
+
+ request = requests.get(
+ f"{self.api_base}/email-verification/{email_verification_id}/results",
+ headers=self.headers_default,
+ )
+
+ return f"{request.status_code}\n{request.text}"
diff --git a/.venv/lib/python3.12/site-packages/mailersend/emails/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/emails/__init__.py
new file mode 100644
index 00000000..c34f30d2
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/emails/__init__.py
@@ -0,0 +1,137 @@
+"""
+Handles /email endpoint
+Doc: https://developers.mailersend.com/api/v1/email.html
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewEmail(base.NewAPIClient):
+ """
+ Send an e-mail
+ """
+
+ pass
+
+ def set_mail_from(self, mail_from, message):
+ """
+ Appends the 'from' part on an e-mail
+ """
+ message["from"] = mail_from
+
+ def set_mail_to(self, mail_to, message):
+ """
+ Appends the 'to' part on an e-mail
+ """
+ message["to"] = mail_to
+
+ def set_subject(self, subject, message):
+ """
+ Appends the 'subject' part on an e-mail
+ """
+ message["subject"] = subject
+
+ def set_html_content(self, content, message):
+ """
+ Appends the HTML content of an e-mail
+ """
+ message["html"] = content
+
+ def set_plaintext_content(self, text, message):
+ """
+ Appends the plaintext content of an e-mail
+ """
+ message["text"] = text
+
+ def set_template(self, template_id, message):
+ """
+ Appends the 'template_id' part on an e-mail
+ """
+ message["template_id"] = template_id
+
+ def set_personalization(self, personalization, message):
+ """
+ Handles advanced personalization
+ """
+ message["personalization"] = personalization
+
+ def set_cc_recipients(self, cc_recipient, message):
+ """
+ Appends the 'cc' part on an e-mail
+ """
+ message["cc"] = cc_recipient
+
+ def set_bcc_recipients(self, bcc_recipient, message):
+ """
+ Appends the 'bcc' part on an e-mail
+ """
+ message["bcc"] = bcc_recipient
+
+ def set_tags(self, tags, message):
+ """
+ Handles e-mail tags
+ """
+ message["tags"] = tags
+
+ def set_attachments(self, attachments, message):
+ """
+ Appends an attachment on an e-mail
+ """
+ message["attachments"] = attachments
+
+ def set_reply_to(self, reply_to, message):
+ """
+ Appends 'reply to' on an e-mail
+ """
+ message["reply_to"] = reply_to
+
+ def set_in_reply_to(self, in_reply_to, message):
+ """
+ Appends 'in reply to' on an e-mail
+ """
+ message["in_reply_to"] = in_reply_to
+
+ def set_send_at(self, send_at, message):
+ """
+ Sets the 'send_at' parameter for scheduled messages
+ """
+ message["send_at"] = send_at
+
+ def send(self, message):
+ """
+ Handles e-mail sending
+
+ @params:
+ message (dict): A dict containing required parameters for mail sending
+ """
+
+ request = requests.post(
+ f"{self.api_base}/email", headers=self.headers_default, json=message
+ )
+ return f"{request.status_code}\n{request.text}"
+
+ def get_bulk_status_by_id(self, bulk_email_id):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ request = requests.get(
+ f"{self.api_base}/bulk-email/{bulk_email_id}", headers=self.headers_default
+ )
+ return request.text
+
+ def send_bulk(self, message_list):
+ """
+ Handles bulk e-mail sending
+
+ @params:
+ message_list (list): A list containing e-mail dicts
+ """
+
+ request = requests.post(
+ f"{self.api_base}/bulk-email",
+ headers=self.headers_default,
+ json=message_list,
+ )
+ return f"{request.status_code}\n{request.text}"
diff --git a/.venv/lib/python3.12/site-packages/mailersend/inbound_routing/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/inbound_routing/__init__.py
new file mode 100644
index 00000000..61a16f4e
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/inbound_routing/__init__.py
@@ -0,0 +1,126 @@
+"""
+Handles /inbound endpoint
+Doc: https://developers.mailersend.com/api/v1/inbound.html
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewInbound(base.NewAPIClient):
+ """
+ Instantiates the /inbound endpoint object
+ """
+
+ pass
+
+ def get_inbound_routes(self):
+ """
+ Get a list of all inbound routes
+
+ Returns the JSON response of MailerSend API
+ """
+ request = requests.get(f"{self.api_base}/inbound", headers=self.headers_default)
+ return f"{request.status_code}\n{request.text}"
+
+ def get_inbound_by_id(self, inbound_id):
+ """
+ Get info on an inbound route by its ID
+
+ @params:
+ inbound_id (str): An inbound route ID
+
+ Returns the JSON response of MailerSend API
+ """
+ request = requests.get(
+ f"{self.api_base}/inbound/{inbound_id}", headers=self.headers_default
+ )
+ return request.text
+
+ def update_inbound_route(self, inbound_id, options):
+ """
+ Update an inbound route
+
+ @params:
+ inbound_id (str): An inbound route ID
+ key (str): The key param to change
+ value (object): The value to update key with
+
+ Returns the JSON response of MailerSend API
+ """
+
+ request = requests.put(
+ f"{self.api_base}/inbound/{inbound_id}",
+ headers=self.headers_default,
+ json=options,
+ )
+ return f"{request.status_code}\n{request.text}"
+
+ def delete_inbound_route(self, inbound_id):
+ """
+ Returns the status code of delete inbound route operation
+
+ @params:
+ inbound_id (str): An inbound route ID
+ """
+
+ request = requests.delete(
+ f"{self.api_base}/inbound/{inbound_id}",
+ headers=self.headers_default,
+ )
+ return request.status_code
+
+ def set_name(self, name, options):
+ """
+ Appends the 'name' param of inbound route options
+ """
+ options["name"] = name
+
+ def set_domain_enabled(self, enabled, options):
+ """
+ Appends the 'domain_enabled' param of inbound route options
+ """
+ options["domain_enabled"] = enabled
+
+ def set_inbound_domain(self, domain, options):
+ """
+ Appends the 'inbound_domain' param of inbound route options
+ """
+ options["inbound_domain"] = domain
+
+ def set_catch_filter(self, content_json, options):
+ """
+ Appends the 'catch_filter' param of inbound route options
+ """
+ options["catch_filter"] = content_json
+
+ def set_match_filter(self, content_json, options):
+ """
+ Appends the 'match_filter' param of inbound route options
+ """
+ options["match_filter"] = content_json
+
+ def set_forwards(self, content_json, options):
+ """
+ Appends the 'forwards' param of inbound route options
+ """
+ options["forwards"] = content_json
+
+ def add_inbound_route(self, domain_id, options):
+ """
+ Add a new inbound route
+
+ @params:
+ domain_id (str): For which domain will inbound route be created
+ options (str): Creation options as defined in https://developers.mailersend.com/api/v1/inbound.html#add-an-inbound-route
+
+ """
+
+ options["domain_id"] = domain_id
+
+ request = requests.post(
+ f"{self.api_base}/inbound",
+ headers=self.headers_default,
+ json=options,
+ )
+ return f"{request.text}\n{request.status_code}"
diff --git a/.venv/lib/python3.12/site-packages/mailersend/messages/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/messages/__init__.py
new file mode 100644
index 00000000..8ceb3bf4
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/messages/__init__.py
@@ -0,0 +1,35 @@
+"""
+Handles /messages endpoint
+Doc: https://developers.mailersend.com/api/v1/messages.html
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewMessage(base.NewAPIClient):
+ """
+ Instantiates the /messages endpoint object
+ """
+
+ pass
+
+ def get_message_by_id(self, message_id):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ request = requests.get(
+ f"{self.api_base}/messages/{message_id}", headers=self.headers_default
+ )
+ return request.text
+
+ def get_messages(self):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ request = requests.get(
+ f"{self.api_base}/messages", headers=self.headers_default
+ )
+ return request.text
diff --git a/.venv/lib/python3.12/site-packages/mailersend/recipients/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/recipients/__init__.py
new file mode 100644
index 00000000..5761a8f1
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/recipients/__init__.py
@@ -0,0 +1,255 @@
+"""
+Handles /recipients endpoint
+Doc: https://developers.mailersend.com/api/v1/recipients.html
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewRecipient(base.NewAPIClient):
+ """
+ Instantiates the /recipients endpoint object
+ """
+
+ pass
+
+ def get_recipients(self):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ request = requests.get(
+ f"{self.api_base}/recipients", headers=self.headers_default
+ )
+ return request.text
+
+ def get_recipient_by_id(self, recipient_id):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ request = requests.get(
+ f"{self.api_base}/recipients/{recipient_id}", headers=self.headers_default
+ )
+ return request.text
+
+ def delete_recipient(self, recipient_id):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+
+ request = requests.delete(
+ f"{self.api_base}/recipients/{recipient_id}", headers=self.headers_default
+ )
+ return request.status_code
+
+ def get_recipients_from_blocklist(self, domain_id=None, limit=None, page=None):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+ message["limit"] = limit
+ message["page"] = page
+
+ request = requests.get(
+ f"{self.api_base}/suppressions/blocklist",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def get_hard_bounces(self, domain_id=None, limit=None, page=None):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+ message["limit"] = limit
+ message["page"] = page
+
+ request = requests.get(
+ f"{self.api_base}/suppressions/hard_bounces",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def get_spam_complaints(self, domain_id=None, limit=None, page=None):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+ message["limit"] = limit
+ message["page"] = page
+
+ request = requests.get(
+ f"{self.api_base}/suppressions/spam-complaints",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def get_unsubscribes(self, domain_id=None, limit=None, page=None):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+ message["limit"] = limit
+ message["page"] = page
+
+ request = requests.get(
+ f"{self.api_base}/suppressions/unsubscribes",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def add_to_blocklist(self, domain_id, recipients=None, patterns=None):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+
+ if recipients is not None:
+ message["recipients"] = recipients
+ if patterns is not None:
+ message["patterns"] = patterns
+
+ request = requests.post(
+ f"{self.api_base}/suppressions/blocklist",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def delete_from_blocklist(self, domain_id, ids=None, remove_all=False):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+
+ if ids is not None:
+ message["ids"] = ids
+ if remove_all is True:
+ message["all"] = "true"
+
+ request = requests.delete(
+ f"{self.api_base}/suppressions/blocklist",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def add_hard_bounces(self, domain_id=None, recipients=None):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+
+ if recipients is not None:
+ message["recipients"] = recipients
+
+ request = requests.post(
+ f"{self.api_base}/suppressions/hard-bounces",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def delete_hard_bounces(self, domain_id, ids=None, remove_all=False):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+
+ if ids is not None:
+ message["ids"] = ids
+ if remove_all is True:
+ message["all"] = "true"
+
+ request = requests.delete(
+ f"{self.api_base}/suppressions/hard-bounces",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def add_spam_complaints(self, domain_id=None, recipients=None):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+
+ if recipients is not None:
+ message["recipients"] = recipients
+
+ request = requests.post(
+ f"{self.api_base}/suppressions/spam-complaints",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def delete_spam_complaints(self, domain_id, ids=None, remove_all=False):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+
+ if ids is not None:
+ message["ids"] = ids
+ if remove_all is True:
+ message["all"] = "true"
+
+ request = requests.delete(
+ f"{self.api_base}/suppressions/spam-complaints",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def add_unsubscribes(self, domain_id=None, recipients=None):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+
+ if recipients is not None:
+ message["recipients"] = recipients
+
+ request = requests.post(
+ f"{self.api_base}/suppressions/unsubscribes",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
+
+ def delete_unsubscribes(self, domain_id, ids=None, remove_all=False):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+ message = {}
+ message["domain_id"] = domain_id
+
+ if ids is not None:
+ message["ids"] = ids
+ if remove_all is True:
+ message["all"] = True
+
+ request = requests.delete(
+ f"{self.api_base}/suppressions/unsubscribes",
+ headers=self.headers_default,
+ json=message,
+ )
+ return request.text
diff --git a/.venv/lib/python3.12/site-packages/mailersend/scheduled_messages/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/scheduled_messages/__init__.py
new file mode 100644
index 00000000..1971ea9e
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/scheduled_messages/__init__.py
@@ -0,0 +1,47 @@
+"""
+Handles /message-schedules endpoint
+Doc: https://developers.mailersend.com/api/v1/message-schedules.html
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewMessageSchedule(base.NewAPIClient):
+ """
+ Instantiates the /message-schedules endpoint object
+ """
+
+ pass
+
+ def get_scheduled_messages(self):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ request = requests.get(
+ f"{self.api_base}/message-schedules", headers=self.headers_default
+ )
+ return request.text
+
+ def get_scheduled_message_by_id(self, message_id):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ request = requests.get(
+ f"{self.api_base}/message-schedules/{message_id}",
+ headers=self.headers_default,
+ )
+ return request.text
+
+ def delete_scheduled_message(self, message_id):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ request = requests.delete(
+ f"{self.api_base}/message-schedules/{message_id}",
+ headers=self.headers_default,
+ )
+ return request.text
diff --git a/.venv/lib/python3.12/site-packages/mailersend/sender_identities/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/sender_identities/__init__.py
new file mode 100644
index 00000000..c6dce4d8
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/sender_identities/__init__.py
@@ -0,0 +1,137 @@
+"""
+Handles /identities endpoint
+"""
+
+import requests
+from mailersend.base import base
+
+class NewSenderIdentities(base.NewAPIClient):
+ """
+ Instantiates the /identities endpoint object
+ """
+
+ # you shall not
+ pass
+
+ def get_identities(self, domain_id=None, page=None, limit=25):
+ """
+ Get all sender identities
+
+ @params:
+ domain_id (string)
+ page (int)
+ limit (int): Min: `10`, Max: `100`, default is 25
+ """
+
+ passed_arguments = locals()
+ query_params = {}
+
+ for key, value in passed_arguments.items():
+ if key != "self" and value is not None:
+ query_params[key] = value
+
+ request = requests.get(
+ f"{self.api_base}/identities",
+ headers=self.headers_default,
+ params=query_params,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def get_identity(self, identity_id):
+ """
+ Get a single sender identity
+
+ @params:
+ identity_id (string)
+ """
+
+ request = requests.get(
+ f"{self.api_base}/identities/{identity_id}",
+ headers=self.headers_default,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def add_identitity(self, domain_id, name, email, reply_to_email=None, reply_to_name=None, add_note=False, personal_note=None):
+ """
+ Add a sender identity
+
+ @params:
+ domain_id (string)
+ name (string) - Max 191 characters
+ email (string) - Max 191 characters, unique
+ reply_to_email (string)
+ reply_to_name (string)
+ add_note (boolean)
+ personal_note (string)
+ """
+
+ data = {
+ "domain_id": domain_id,
+ "name": name,
+ "email": email
+ }
+
+ if reply_to_email != None:
+ data["reply_to_email"] = reply_to_email
+
+ if reply_to_name != None:
+ data["reply_to_name"] = reply_to_name
+
+ if add_note == True:
+ data["add_note"] = add_note
+ data["personal_note"] = personal_note
+
+ request = requests.post(
+ f"{self.api_base}/identities",
+ headers=self.headers_default,
+ json=data,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def update_identitity(self, identity_id, domain_id=None, name=None, email=None, reply_to_email=None, reply_to_name=None, add_note=False, personal_note=None):
+ """
+ Update a sender identity
+
+ @params:
+ identity_id (string)
+ domain_id (string)
+ name (string) - Max 191 characters
+ email (string) - Max 191 characters, unique
+ reply_to_email (string)
+ reply_to_name (string)
+ add_note (boolean)
+ personal_note (string)
+ """
+
+ passed_arguments = locals()
+ data = {}
+
+ for key, value in passed_arguments.items():
+ if key != "self" and key != "identity_id" and value is not None:
+ data[key] = value
+
+ request = requests.put(
+ f"{self.api_base}/identities/{identity_id}",
+ headers=self.headers_default,
+ json=data,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def delete_identity(self, identity_id):
+ """
+ Delete a sender identity
+
+ @params:
+ identity_id (string)
+ """
+
+ request = requests.delete(
+ f"{self.api_base}/identities/{identity_id}",
+ headers=self.headers_default,
+ )
+
+ return request.text \ No newline at end of file
diff --git a/.venv/lib/python3.12/site-packages/mailersend/sms_activity/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/sms_activity/__init__.py
new file mode 100644
index 00000000..afe9044c
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/sms_activity/__init__.py
@@ -0,0 +1,68 @@
+"""
+Handles /sms-activity endpoint
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewSmsActivity(base.NewAPIClient):
+ """
+ Instantiates the /sms-activity endpoint object
+ """
+
+ pass
+
+ def get_activities(
+ self,
+ sms_number_id=None,
+ date_from=None,
+ date_to=None,
+ status=[],
+ page=None,
+ limit=25,
+ ):
+ """
+ Retrieve every single data point of the activity that happened for a specific phone number.
+
+ @params:
+ sms_number_id (str)
+ date_from (int): Timestamp is assumed to be `UTC`. Must be lower than `date_to`
+ date_to (int): Timestamp is assumed to be `UTC`. Must be higher than `date_from`
+ status (dict): Possible types: `processed`,`queued`,`sent`,`delivered`, `failed`
+ page (int)
+ limit (int): Min: `10`, Max: `100`, default is 25
+ """
+
+ passed_arguments = locals()
+ query_params = {}
+
+ for key, value in passed_arguments.items():
+ if key != "self":
+ if key == "status":
+ query_params[key + "[]"] = value
+ else:
+ query_params[key] = value
+
+ request = requests.get(
+ f"{self.api_base}/sms-activity",
+ headers=self.headers_default,
+ params=query_params,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def get_activity(self, sms_message_id):
+ """
+ Get every single activity data point that happened to a specific SMS message
+
+ @params:
+ sms_message_id (str)
+ """
+
+ request = requests.get(
+ f"{self.api_base}/sms-messages/{sms_message_id}",
+ headers=self.headers_default,
+ )
+
+ return f"{request.status_code}\n{request.text}"
diff --git a/.venv/lib/python3.12/site-packages/mailersend/sms_inbounds/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/sms_inbounds/__init__.py
new file mode 100644
index 00000000..2ac3a663
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/sms_inbounds/__init__.py
@@ -0,0 +1,134 @@
+"""
+Handles /sms-inbounds endpoint
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewSmsInbounds(base.NewAPIClient):
+ """
+ Instantiates the /sms-inbounds endpoint object
+ """
+
+ # you shall not
+ pass
+
+ def get_inbound_routes(self, sms_number_id=None, enabled=True, page=1, limit=25):
+ """
+ Get a list of SMS inbound routes.
+
+ @params:
+ sms_number_id (string)
+ enabled (bool)
+ page (int)
+ limit (int)
+ """
+
+ passed_arguments = locals()
+ query_params = {}
+
+ for key, value in passed_arguments.items():
+ if key != "self":
+ if key == "enabled":
+ query_params[key] = int(value)
+ else:
+ query_params[key] = value
+
+ request = requests.get(
+ f"{self.api_base}/sms-inbounds",
+ headers=self.headers_default,
+ params=query_params,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def get_inbound_route(self, sms_inbound_id):
+ """
+ Get a single SMS inbound route.
+
+ @params:
+ sms_inbound_id (string)
+ """
+
+ request = requests.get(
+ f"{self.api_base}/sms-inbounds/{sms_inbound_id}",
+ headers=self.headers_default,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def create_inbound_route(
+ self, sms_number_id, name, forward_url, filter={}, enabled=True
+ ):
+ """
+ Add an SMS inbound route.
+
+ @params:
+ sms_number_id (string)
+ name (string)
+ forward_url (string)
+ filter (object)
+ enabled (bool)
+ """
+
+ data = {
+ "sms_number_id": sms_number_id,
+ "name": name,
+ "forward_url": forward_url,
+ "filter": filter,
+ "enabled": int(enabled),
+ }
+
+ request = requests.post(
+ f"{self.api_base}/sms-inbounds", headers=self.headers_default, json=data
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def update_inbound_route(
+ self, sms_inbound_id, name=None, forward_url=None, filter=None, enabled=None
+ ):
+ """
+ Update an inbound route.
+
+ @params:
+ sms_inbound_id (string)
+ name (string)
+ forward_url (string)
+ filter (object)
+ enabled (bool)
+ """
+
+ passed_arguments = locals()
+ data = {}
+
+ for key, value in passed_arguments.items():
+ if key != "self" and key != "sms_inbound_id" and value is not None:
+ if key == "enabled":
+ data[key] = int(value)
+ else:
+ data[key] = value
+
+ request = requests.put(
+ f"{self.api_base}/sms-inbounds/{sms_inbound_id}",
+ headers=self.headers_default,
+ json=data,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def delete_inbound_route(self, sms_inbound_id):
+ """
+ Delete an SMS inbound route.
+
+ @params:
+ sms_inbound_id (string)
+ """
+
+ request = requests.delete(
+ f"{self.api_base}/sms-inbounds/{sms_inbound_id}",
+ headers=self.headers_default,
+ )
+
+ return f"{request.status_code}\n{request.text}"
diff --git a/.venv/lib/python3.12/site-packages/mailersend/sms_messages/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/sms_messages/__init__.py
new file mode 100644
index 00000000..03db8f63
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/sms_messages/__init__.py
@@ -0,0 +1,52 @@
+"""
+Handles /sms-messages endpoint
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewSmsMessages(base.NewAPIClient):
+ """
+ Instantiates the /sms-messages endpoint object
+ """
+
+ pass
+
+ def get_messages(self, page=1, limit=25):
+ """
+ Get a list of SMS messages.
+
+ @params:
+ page (int)
+ limit (int): Min: `10`, Max: `100`, default is 25
+ """
+
+ passed_arguments = locals()
+ query_params = {}
+
+ for key, value in passed_arguments.items():
+ query_params[key] = value
+
+ request = requests.get(
+ f"{self.api_base}/sms-messages",
+ headers=self.headers_default,
+ params=query_params,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def get_message(self, sms_message_id):
+ """
+ Get a single SMS message.
+
+ @params:
+ sms_message_id (string)
+ """
+
+ request = requests.get(
+ f"{self.api_base}/sms-messages/{sms_message_id}",
+ headers=self.headers_default,
+ )
+
+ return f"{request.status_code}\n{request.text}"
diff --git a/.venv/lib/python3.12/site-packages/mailersend/sms_phone_numbers/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/sms_phone_numbers/__init__.py
new file mode 100644
index 00000000..1f47b417
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/sms_phone_numbers/__init__.py
@@ -0,0 +1,95 @@
+"""
+Handles /sms-numbers endpoint
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewSmsNumbers(base.NewAPIClient):
+ """
+ Instantiates the /sms-numbers endpoint object
+ """
+
+ pass
+
+ def get_phone_numbers(self, paused=False, page=None, limit=25):
+ """
+ Get a list of SMS phone numbers information.
+
+ @params:
+ paused (bool)
+ page (int)
+ limit (int): Min: `10`, Max: `100`, default is 25
+ """
+
+ passed_arguments = locals()
+ query_params = {}
+
+ for key, value in passed_arguments.items():
+ if key != "self":
+ if key == "paused":
+ query_params[key] = int(value)
+ else:
+ query_params[key] = value
+
+ request = requests.get(
+ f"{self.api_base}/sms-numbers",
+ headers=self.headers_default,
+ params=query_params,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def get_phone_number(self, sms_number_id):
+ """
+ Get information about a specific SMS phone number
+
+ @params:
+ sms_number_id (string)
+ """
+
+ request = requests.get(
+ f"{self.api_base}/sms-numbers/{sms_number_id}", headers=self.headers_default
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def update_phone_number(self, sms_number_id, paused=True):
+ """
+ Update a specific SMS phone number
+
+ @params:
+ sms_number_id (string)
+ paused (bool)
+ """
+
+ query_params = {"paused": int(paused)}
+ data = {"sms_number_id": sms_number_id}
+
+ request = requests.put(
+ f"{self.api_base}/sms-numbers/{sms_number_id}",
+ headers=self.headers_default,
+ params=query_params,
+ json=data,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def delete_phone_number(self, sms_number_id):
+ """
+ Delete a specific SMS phone number
+
+ @params:
+ sms_number_id (string)
+ """
+
+ data = {"sms_number_id": sms_number_id}
+
+ request = requests.delete(
+ f"{self.api_base}/sms-numbers/{sms_number_id}",
+ headers=self.headers_default,
+ json=data,
+ )
+
+ return f"{request.status_code}\n{request.text}"
diff --git a/.venv/lib/python3.12/site-packages/mailersend/sms_recipients/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/sms_recipients/__init__.py
new file mode 100644
index 00000000..ae8774f2
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/sms_recipients/__init__.py
@@ -0,0 +1,76 @@
+"""
+Handles /sms-recipients endpoint
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewSmsRecipients(base.NewAPIClient):
+ """
+ Instantiates the /sms-recipients endpoint object
+ """
+
+ pass
+
+ def get_recipients(self, status="active", sms_number_id=None, page=None, limit=25):
+ """
+ Get information about SMS recipients.
+
+ @params:
+ status (string) - Possible values are `active` and `opt_out`
+ sms_number_id (string)
+ page (int)
+ limit (int): Min: `10`, Max: `100`, default is 25
+ """
+
+ passed_arguments = locals()
+ query_params = {}
+
+ for key, value in passed_arguments.items():
+ if key != "self":
+ query_params[key] = value
+
+ request = requests.get(
+ f"{self.api_base}/sms-recipients",
+ headers=self.headers_default,
+ params=query_params,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def get_recipient(self, sms_recipient_id):
+ """
+ Get information about a specific SMS recipient.
+
+ @params:
+ sms_recipient_id (string) - Possible values are `active` and `opt_out`
+ """
+
+ request = requests.get(
+ f"{self.api_base}/sms-recipients/{sms_recipient_id}",
+ headers=self.headers_default,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def update_recipient(self, sms_recipient_id, status):
+ """
+ Update a specific SMS recipient
+
+ @params:
+ sms_recipient_id (string)
+ status (string)
+ """
+
+ query_params = {"status": status}
+ data = {"sms_recipient_id": sms_recipient_id}
+
+ request = requests.put(
+ f"{self.api_base}/sms-recipients/{sms_recipient_id}",
+ headers=self.headers_default,
+ params=query_params,
+ json=data,
+ )
+
+ return f"{request.status_code}\n{request.text}"
diff --git a/.venv/lib/python3.12/site-packages/mailersend/sms_sending/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/sms_sending/__init__.py
new file mode 100644
index 00000000..c45d09fd
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/sms_sending/__init__.py
@@ -0,0 +1,43 @@
+"""
+Handles /sms endpoint
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewSmsSending(base.NewAPIClient):
+ """
+ Instantiates the /sms endpoint object
+ """
+
+ pass
+
+ def send_sms(self, number_from, numbers_to, text, personalization=None):
+ """
+ Send SMS message to one or more recipients
+
+ Returns the JSON response of MailerSend API
+
+ @params:
+ number_from (str): Number belonging to your account in E164 format
+ numbers_to (dict): Recipient phone numbers (up to 50)
+ text (str): Message test
+ personalization: Allows using personalization in {{ var }} syntax. Can be used in the text fields
+ """
+
+ data = {
+ "from": number_from,
+ "to": numbers_to,
+ "text": text,
+ "personalization": personalization,
+ }
+
+ if personalization is None:
+ data["personalization"] = []
+
+ request = requests.post(
+ f"{self.api_base}/sms", headers=self.headers_default, json=data
+ )
+
+ return f"{request.status_code}\n{request.headers['X-SMS-Message-Id']}"
diff --git a/.venv/lib/python3.12/site-packages/mailersend/sms_webhooks/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/sms_webhooks/__init__.py
new file mode 100644
index 00000000..21070536
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/sms_webhooks/__init__.py
@@ -0,0 +1,122 @@
+"""
+Handles /sms-webhooks endpoint
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewSmsWebhooks(base.NewAPIClient):
+ """
+ Instantiates the /sms-webhooks endpoint object
+ """
+
+ # you shall not
+ pass
+
+ def get_webhooks(self, sms_number_id):
+ """
+ Get a list of SMS webhooks.
+
+ @params:
+ sms_number_id (string)
+ """
+
+ passed_arguments = locals()
+ query_params = {"sms_number_id": sms_number_id}
+
+ request = requests.get(
+ f"{self.api_base}/sms-webhooks",
+ headers=self.headers_default,
+ params=query_params,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def get_webhook(self, sms_webhook_id):
+ """
+ Get a single SMS webhook.
+
+ @params:
+ sms_webhook_id (string)
+ """
+
+ request = requests.get(
+ f"{self.api_base}/sms-webhooks/{sms_webhook_id}",
+ headers=self.headers_default,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def create_webhook(self, url, name, events, sms_number_id, enabled=True):
+ """
+ Create an SMS webhook.
+
+ @params:
+ url (string)
+ name (string)
+ events (dict)
+ enabled (bool)
+ sms_number_id (string)
+ """
+
+ data = {
+ "url": url,
+ "name": name,
+ "events": events,
+ "sms_number_id": sms_number_id,
+ "enabled": int(enabled),
+ }
+
+ request = requests.post(
+ f"{self.api_base}/sms-webhooks", headers=self.headers_default, json=data
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def update_webhook(
+ self, sms_webhook_id, url=None, name=None, events=None, enabled=None
+ ):
+ """
+ Update a single SMS Webhook.
+
+ @params:
+ sms_webhook_id (string)
+ url (string)
+ name (string)
+ events (dict)
+ enabled (bool)
+ """
+
+ passed_arguments = locals()
+ data = {}
+
+ for key, value in passed_arguments.items():
+ if key != "self" and key != "sms_webhook_id" and value is not None:
+ if key == "enabled":
+ data[key] = int(value)
+ else:
+ data[key] = value
+
+ request = requests.put(
+ f"{self.api_base}/sms-webhooks/{sms_webhook_id}",
+ headers=self.headers_default,
+ json=data,
+ )
+
+ return f"{request.status_code}\n{request.text}"
+
+ def delete_webhook(self, sms_webhook_id):
+ """
+ Delete an SMS webhook.
+
+ @params:
+ sms_webhook_id (string)
+ """
+
+ request = requests.delete(
+ f"{self.api_base}/sms-webhooks/{sms_webhook_id}",
+ headers=self.headers_default,
+ )
+
+ return f"{request.status_code}\n{request.text}"
diff --git a/.venv/lib/python3.12/site-packages/mailersend/templates/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/templates/__init__.py
new file mode 100644
index 00000000..deee93f7
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/templates/__init__.py
@@ -0,0 +1,42 @@
+"""
+Handles /templates endpoint
+Doc: https://developers.mailersend.com/api/v1/templates.html
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewTemplate(base.NewAPIClient):
+ """
+ Instantiates the /templates endpoint object
+ """
+
+ pass
+
+ def get_templates(self):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+ request = requests.get(
+ f"{self.api_base}/templates", headers=self.headers_default
+ )
+ return request.text
+
+ def get_template_by_id(self, template_id):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+ request = requests.get(
+ f"{self.api_base}/templates/{template_id}", headers=self.headers_default
+ )
+ return request.text
+
+ def delete_template(self, template_id):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+ request = requests.delete(
+ f"{self.api_base}/templates/{template_id}", headers=self.headers_default
+ )
+ return request.text
diff --git a/.venv/lib/python3.12/site-packages/mailersend/tokens/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/tokens/__init__.py
new file mode 100644
index 00000000..82954132
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/tokens/__init__.py
@@ -0,0 +1,54 @@
+"""
+Handles /tokens endpoint
+Doc: https://developers.mailersend.com/api/v1/tokens.html
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewToken(base.NewAPIClient):
+ """
+ Instantiates the /tokens endpoint object
+ """
+
+ pass
+
+ def create_token(self, token_name, token_scopes):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ _data = {"name": token_name, "scopes": token_scopes}
+
+ request = requests.post(
+ f"{self.api_base}/token", headers=self.headers_default, json=_data
+ )
+ return request.text
+
+ def update_token(self, token_id, pause=True):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ if pause:
+ _data = base.generate_config_change_json_body("status", "pause")
+ else:
+ _data = base.generate_config_change_json_body("status", "unpause")
+
+ request = requests.put(
+ f"{self.api_base}/token/{token_id}/settings",
+ headers=self.headers_default,
+ json=_data,
+ )
+ return request.text
+
+ def delete_token(self, token_id):
+ """
+ Returns a HTTP status code from the MailerSend API
+ """
+
+ request = requests.delete(
+ f"{self.api_base}/token/{token_id}/", headers=self.headers_default
+ )
+ return request.status_code
diff --git a/.venv/lib/python3.12/site-packages/mailersend/utils/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/utils/__init__.py
new file mode 100644
index 00000000..d57e2fb5
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/utils/__init__.py
@@ -0,0 +1,43 @@
+"""
+Provides helper functions to convenience devs
+"""
+
+import requests
+from mailersend.base import base
+
+
+class NewHelper(base.NewAPIClient):
+ """
+ NewHelper extends base.NewAPIClient to inherit connection details
+ """
+
+ def __init__(self):
+ """
+ NewHelper constructor
+ """
+ pass
+
+ def get_id_by_name(self, category, name):
+ """
+ Returns an ID given a category and item name from the MailerSend API
+
+ @params:
+ category (str): Can be one of "recipients", "domains"
+ name (str): Object name
+ """
+
+ request = requests.get(
+ f"{self.api_base}/{category}", headers=self.headers_default
+ )
+
+ _json_req = request.json()
+
+ category_search_asset = {"recipients": "email", "domains": "name"}
+
+ _data_block = _json_req["data"]
+
+ for data in _data_block:
+ if data[category_search_asset.get(category)] == name:
+ return data["id"]
+
+ return request.text
diff --git a/.venv/lib/python3.12/site-packages/mailersend/webhooks/__init__.py b/.venv/lib/python3.12/site-packages/mailersend/webhooks/__init__.py
new file mode 100644
index 00000000..92152b17
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/mailersend/webhooks/__init__.py
@@ -0,0 +1,135 @@
+"""
+Handles /webhooks endpoint
+Doc: https://developers.mailersend.com/api/v1/webhooks.html
+"""
+
+import requests
+from mailersend.base import base
+
+data = {}
+
+
+class NewWebhook(base.NewAPIClient):
+ """
+ Instantiates the /webhooks endpoint object
+ """
+
+ def __init__(self):
+ """
+ NewWebhook constructor
+ """
+ pass
+
+ def get_webhooks(self, domain_id):
+ """
+ Returns a JSON response from the MailerSend API
+
+ @params:
+ domain_id (str): A domain ID
+ """
+ request = requests.get(
+ f"{self.api_base}/webhooks",
+ headers=self.headers_default,
+ json={"domain_id": domain_id},
+ )
+ return request.text
+
+ def get_webhook_by_id(self, webhook_id):
+ """
+ Returns a JSON response from the MailerSend API
+
+ @params:
+ webhook_id (str): A webhook ID
+ """
+ request = requests.get(
+ f"{self.api_base}/webhooks/{webhook_id}", headers=self.headers_default
+ )
+ return request.text
+
+ def set_webhook_url(self, webhook_url):
+ """
+ Sets the webhook 'url' field
+
+ @params:
+ webhook_url (str): A webhook URL
+ """
+ data["url"] = webhook_url
+
+ def set_webhook_name(self, webhook_name):
+ """
+ Sets the webhook 'name' field
+
+ @params:
+ webhook_name (str): A webhook name
+ """
+
+ data["name"] = webhook_name
+
+ def set_webhook_events(self, events):
+ """
+ Sets the webhook 'events' field
+
+ @params:
+ events (list): A list containing valid events
+ """
+ data["events"] = events
+
+ def set_webhook_enabled(self, enabled=True):
+ """
+ Sets the webhook 'enabled' status field
+
+ @params:
+ enabled (bool): Controls webhook status
+ """
+
+ data["enabled"] = enabled
+
+ def set_webhook_domain(self, domain_id):
+ """
+ Sets the webhook 'domain_id' status field
+
+ @params:
+ domain_id (str): A valid domain ID
+ """
+
+ data["domain_id"] = domain_id
+
+ def update_webhook(self, webhook_id, key, value):
+ """
+ Updates a webhook setting
+
+ @params:
+ webhook_id (str): A valid webhook ID
+ key (str): A setting key
+ value (str): Corresponding keys value
+ """
+
+ request = requests.put(
+ f"{self.api_base}/webhooks/{webhook_id}",
+ headers=self.headers_default,
+ json={f"{key}": value},
+ )
+ return request.text
+
+ def delete_webhook(self, webhook_id):
+ """
+ Returns a JSON response from the MailerSend API
+
+ @params:
+ webhook_id (str): A valid webhook ID
+ """
+
+ request = requests.delete(
+ f"{self.api_base}/webhooks/{webhook_id}", headers=self.headers_default
+ )
+ return request.text
+
+ def create_webhook(self):
+ """
+ Returns a JSON response from the MailerSend API
+ """
+
+ request = requests.post(
+ f"{self.api_base}/webhooks", headers=self.headers_default, json=data
+ )
+ return request.text