Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion sendgrid/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@
from .resources.asm_global_suppressions import ASMGlobalSuppressions
from .resources.suppressions import Suppressions
from .resources.stats import Stats
from .resources.subusers import Subusers
from .resources.whitelabel_domains import WhitelabelDomains
from .resources.whitelabel_ips import WhitelabelIPs
from .resources.ip_pools import IPPools
from .resources.ip_addresses import IPAddresses

class SendGridAPIClient(object):

Expand All @@ -35,6 +40,7 @@ def __init__(self, apikey, **opts):
self.host = opts.get('host', 'https://api.sendgrid.com')
# urllib cannot connect to SSL servers using proxies
self.proxies = opts.get('proxies', None)
self._basic = opts.get('basic', False)
self.timeout = opts.get('timeout', 10)

self.apikeys = APIKeys(self)
Expand All @@ -43,6 +49,11 @@ def __init__(self, apikey, **opts):
self.asm_global_suppressions = ASMGlobalSuppressions(self)
self.suppressions = Suppressions(self)
self.stats = Stats(self)
self.subusers = Subusers(self)
self.whitelabel_domains = WhitelabelDomains(self)
self.whitelabel_ips = WhitelabelIPs(self)
self.ip_pools = IPPools(self)
self.ips = IPAddresses(self)

@property
def apikey(self):
Expand All @@ -60,7 +71,7 @@ def _build_request(self, url, json_header=False, method='GET', data=None):
req = urllib_request.Request(url)
req.get_method = lambda: method
req.add_header('User-Agent', self.useragent)
req.add_header('Authorization', 'Bearer ' + self.apikey)
req.add_header('Authorization', ('Basic ' if self._basic else 'Bearer ') + self.apikey)
if json_header:
req.add_header('Content-Type', 'application/json')
try:
Expand Down
10 changes: 8 additions & 2 deletions sendgrid/resources/api_keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,25 +40,31 @@ def client(self):

# Get a list of active API keys
def get(self):
self.name = None
self.endpoint = self._base_endpoint
return self.client.get(self)

# Create a new API key with name (string)
def post(self, name):
self.endpoint = self._base_endpoint
data = {}
data['name'] = name

self.name = name
data['name'] = self.name
self.endpoint = self._base_endpoint
return self.client.post(self, data)

# Delete a API key
def delete(self, api_key_id):
self.name = None
self.endpoint = self._base_endpoint + "/" + api_key_id
return self.client.delete(self)

# Update a API key's name
def patch(self, api_key_id, name):
data = {}
data['name'] = name

self.name = name
data['name'] = self.name
self.endpoint = self._base_endpoint + "/" + api_key_id
return self.client.patch(self, data)
66 changes: 66 additions & 0 deletions sendgrid/resources/ip_addresses.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
try:
from urllib.parse import quote_plus
except ImportError: # Python 2
from urllib import quote_plus

class IPAddresses(object):

def __init__(self, client, **opts):
"""
Constructs SendGrid IP Pools object.

See https://sendgrid.com/docs/API_Reference/Web_API_v3/IP_Management/ip_addresses.html
"""
self._base_endpoint = '/v3/ips'
self._endpoint = '/v3/ips'
self._client = client

@property
def base_endpoint(self):
return self._base_endpoint

@property
def endpoint(self):
endpoint = self._endpoint
return endpoint

@endpoint.setter
def endpoint(self, value):
self._endpoint = value

@property
def client(self):
return self._client

def get(self):
"""
List all IP addresses
"""
self.endpoint = self._base_endpoint
return self.client.get(self)

def post(self, ip_pool, ip):
"""
Add an IP address to the specified IP Pool

:param ip_pool: str
:param ip: str
"""
data = {}
data['ip'] = ip

self.endpoint = self._base_endpoint + '/pools/' + quote_plus(ip_pool) + '/ips'
return self.client.post(self, data)

def delete(self, ip_pool, ip):
"""
Delete an IP address from the specified IP Pool

:param ip_pool: str
:param ip: str
"""
self.endpoint = (
self._base_endpoint +
'/pools/' + quote_plus(ip_pool) +
'/ips/' + quote_plus(ip))
return self.client.delete(self)
61 changes: 61 additions & 0 deletions sendgrid/resources/ip_pools.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
try:
from urllib.parse import quote_plus
except ImportError: # Python 2
from urllib import quote_plus

class IPPools(object):

def __init__(self, client, **opts):
"""
Constructs SendGrid IP Pools object.

See https://sendgrid.com/docs/API_Reference/Web_API_v3/IP_Management/ip_pools.html
"""
self._base_endpoint = '/v3/ips/pools'
self._endpoint = '/v3/ips/pools'
self._client = client

@property
def base_endpoint(self):
return self._base_endpoint

@property
def endpoint(self):
endpoint = self._endpoint
return endpoint

@endpoint.setter
def endpoint(self, value):
self._endpoint = value

@property
def client(self):
return self._client

def get(self):
"""
List all IP pools
"""
self.endpoint = self._base_endpoint
return self.client.get(self)

def post(self, name):
"""
Create a new IP pool

:param name: str
"""
data = {}
data['name'] = name

self.endpoint = self._base_endpoint
return self.client.post(self, data)

def delete(self, name):
"""
Delete an IP pool

:param name: str
"""
self.endpoint = self._base_endpoint + '/' + quote_plus(name)
return self.client.delete(self)
75 changes: 75 additions & 0 deletions sendgrid/resources/subusers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
class Subusers(object):

def __init__(self, client, **opts):
"""
Constructs SendGrid Subusers object.

https://sendgrid.com/docs/API_Reference/Web_API_v3/subusers.html
"""
self._base_endpoint = "/v3/subusers"
self._endpoint = "/v3/subusers"
self._client = client

@property
def base_endpoint(self):
return self._base_endpoint

@property
def endpoint(self):
endpoint = self._endpoint
return endpoint

@endpoint.setter
def endpoint(self, value):
self._endpoint = value

@property
def client(self):
return self._client

def get(self):
"""
Get a list of subusers
"""
self.endpoint = self._base_endpoint
return self.client.get(self)

def post(self, username, email, password, ips = []):
"""
Create a new subuser

:param username: string
:param email: string
:param password: string
:param ips: string[]
"""
data = {}
data['username'] = username
data['email'] = email
data['password'] = password
data['ips'] = ips

self.endpoint = self._base_endpoint
return self.client.post(self, data)

def delete(self, username):
"""
Delete a subuser

:param username: string
"""
self.endpoint = self._base_endpoint + "/" + username
return self.client.delete(self)

def patch(self, username, disabled):
"""
Enable/disable a subuser

:param username: string
:param disabled: bool
"""
data = {}
data['disabled'] = disabled

self.endpoint = self._base_endpoint + "/" + username
return self.client.patch(self, data)
75 changes: 75 additions & 0 deletions sendgrid/resources/whitelabel_domains.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
class WhitelabelDomains(object):

def __init__(self, client, **opts):
"""
Constructs SendGrid WhitelabelDomains object.

See https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/domains.html
"""
self._base_endpoint = '/v3/whitelabel/domains'
self._endpoint = '/v3/whitelabel/domains'
self._client = client

@property
def base_endpoint(self):
return self._base_endpoint

@property
def endpoint(self):
endpoint = self._endpoint
return endpoint

@endpoint.setter
def endpoint(self, value):
self._endpoint = value

@property
def client(self):
return self._client

def get(self):
"""
Get a list of whitelabel domains
"""
self.endpoint = self._base_endpoint
return self.client.get(self)

def post(self, domain, subdomain, username, default):
"""
Create a new whitelabel domain

:param domain: string
:param subdomain: string
:param username: string
:param default: bool
"""
data = {}
data['domain'] = domain
data['subdomain'] = subdomain
data['username'] = username
data['default'] = default

self.endpoint = self._base_endpoint
return self.client.post(self, data)

def delete(self, id):
"""
Delete a whitelabel domain

:param id: int
"""
self.endpoint = self._base_endpoint + '/' + str(id)
return self.client.delete(self)

def patch(self, id, default):
"""
Update a whitelabel domain

:param id: int
:param default: bool
"""
data = {}
data['default'] = default

self.endpoint = self._base_endpoint + '/' + str(id)
return self.client.patch(self, data)
Loading