Skip to content

Commit

Permalink
SNI connection class
Browse files Browse the repository at this point in the history
  • Loading branch information
by-cx committed Aug 30, 2018
1 parent 526bcfd commit 91ac2d2
Show file tree
Hide file tree
Showing 5 changed files with 230 additions and 109 deletions.
4 changes: 3 additions & 1 deletion Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ python_version = "3.6"
[dev-packages]

[packages]
apache-libcloud = "*"
apache-libcloud = "==1.0.0"
pytest = "*"
requests-mock = "*"
pytest-cov = "*"
certifi = "*"
requests = "*"
39 changes: 22 additions & 17 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

62 changes: 62 additions & 0 deletions libcloud_dnsimple_v2_driver/connection.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import requests


class LibCloudRequest(object):
host = None
response = None
object = {}
user_id = ""
key = ""

def __init__(self, user_id, key, secure=True, host=None, port=None,
url=None, timeout=None, proxy_url=None,
backoff=None, retry_delay=None):
self.timeout = timeout
self.user_id = user_id
self.key = key
self.host = "{}://{}".format("https" if secure else "http", host)

def request(self, action, params=None, data=None, headers=None,
method='GET', raw=False):
headers["Accept-Encoding"] = "plain"
self.response = requests.request(
method=method.lower(),
url="".join([self.host, action]),
data=data,
headers=headers,
timeout=self.timeout,
verify=0,
allow_redirects=1,
stream=raw,
)
if self.response.text:
self.object = self.response.json()
else:
self.object = {}
return self

def getresponse(self):
return self

def getheaders(self): # pragma: no cover
if "content-encoding" in self.response.headers:
del self.response.headers["content-encoding"]
return self.response.headers

@property
def status(self):
return self.response.status_code

@property
def reason(self):
return None if self.response.status_code > 400 else self.response.text

def connect(self): # pragma: no cover
pass

def read(self):
return self.response.content

def close(self): # pragma: no cover
# return connection back to pool
self.response.close()
33 changes: 29 additions & 4 deletions libcloud_dnsimple_v2_driver/dnsimple.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
"""
DNSimple v2 DNS Driver
"""
from libcloud.common.base import ConnectionUserAndKey

from libcloud_dnsimple_v2_driver.connection import LibCloudRequest

__all__ = [
'DNSimpleV2DNSDriver'
Expand All @@ -30,18 +31,32 @@
from libcloud.dns.types import RecordType
from libcloud.dns.base import DNSDriver, Zone, Record


DEFAULT_ZONE_TTL = 3600


class DNSimpleV2DNSConnection(ConnectionUserAndKey):
class DNSimpleV2DNSConnection(LibCloudRequest):
"""
user_id: put account ID, you can find it here: https://dnsimple.com/a/<ACCOUNT_ID>/account
key: API token taken from the admin interface
"""

host = 'api.dnsimple.com'
# api_host = 'api.sandbox.dnsimple.com'
# port = 443
responseCls = DNSimpleDNSResponse
user_id = None
key = None

# def __init__(self, key, secret, **kwargs):
# super().__init__(self.api_host, self.port, **kwargs)
# self.user_id = key
# self.key = secret

def request(self, action, params=None, data=None, headers=None,
method='GET', raw=False):
if not headers:
headers = {}
self.add_default_headers(headers)
return super().request(action, params=params, data=data, headers=headers, method=method, raw=raw)

def add_default_headers(self, headers):
"""
Expand All @@ -58,7 +73,9 @@ def add_default_headers(self, headers):
class DNSimpleV2DNSDriver(DNSDriver):
type = "DNSimpleV2"
name = 'DNSimpleV2'
host = 'api.dnsimple.com'
website = 'https://dnsimple.com/'

connectionCls = DNSimpleV2DNSConnection

RECORD_TYPE_MAP = {
Expand All @@ -79,6 +96,14 @@ class DNSimpleV2DNSDriver(DNSDriver):
RecordType.URL: 'URL'
}

def __init__(self, key, secret=None, secure=True, **kwargs):
super().__init__(key, secret, secure, self.host, 443, **kwargs)

# def _ex_connection_class_kwargs(self):
# kwargs = super()._ex_connection_class_kwargs()
# kwargs["port"] = 443
# return kwargs

def iterate_zones(self):
"""
Return a list of zones.
Expand Down
Loading

0 comments on commit 91ac2d2

Please sign in to comment.