|
|
|
@ -7,6 +7,7 @@ from __future__ import absolute_import, division, print_function, \ |
|
|
|
from requests import HTTPError, Session, post |
|
|
|
from collections import defaultdict |
|
|
|
import logging |
|
|
|
import string |
|
|
|
|
|
|
|
from ..record import Create, Record |
|
|
|
from .base import BaseProvider |
|
|
|
@ -39,6 +40,16 @@ def add_quotes(s): |
|
|
|
return '"{}"'.format(s) |
|
|
|
|
|
|
|
|
|
|
|
def escape_semicolon(s): |
|
|
|
assert s |
|
|
|
return string.replace(s, ';', '\;') |
|
|
|
|
|
|
|
|
|
|
|
def unescape_semicolon(s): |
|
|
|
assert s |
|
|
|
return string.replace(s, '\;', ';') |
|
|
|
|
|
|
|
|
|
|
|
class RackspaceProvider(BaseProvider): |
|
|
|
SUPPORTS_GEO = False |
|
|
|
TIMEOUT = 5 |
|
|
|
@ -162,15 +173,15 @@ class RackspaceProvider(BaseProvider): |
|
|
|
_data_for_CNAME = _data_for_single |
|
|
|
_data_for_PTR = _data_for_single |
|
|
|
|
|
|
|
# def _data_for_quoted(self, rrset): |
|
|
|
# return { |
|
|
|
# 'type': rrset[0]['type'], |
|
|
|
# 'values': [strip_quotes(r['data']) for r in rrset], |
|
|
|
# 'ttl': rrset[0]['ttl'] |
|
|
|
# } |
|
|
|
def _data_for_textual(self, rrset): |
|
|
|
return { |
|
|
|
'type': rrset[0]['type'], |
|
|
|
'values': [escape_semicolon(r['data']) for r in rrset], |
|
|
|
'ttl': rrset[0]['ttl'] |
|
|
|
} |
|
|
|
|
|
|
|
_data_for_SPF = _data_for_multiple |
|
|
|
_data_for_TXT = _data_for_multiple |
|
|
|
_data_for_SPF = _data_for_textual |
|
|
|
_data_for_TXT = _data_for_textual |
|
|
|
|
|
|
|
def _data_for_MX(self, rrset): |
|
|
|
values = [] |
|
|
|
@ -304,17 +315,16 @@ class RackspaceProvider(BaseProvider): |
|
|
|
_record_for_CNAME = _record_for_named |
|
|
|
_record_for_PTR = _record_for_named |
|
|
|
|
|
|
|
# @staticmethod |
|
|
|
# def _record_for_quoted(record, value): |
|
|
|
# return { |
|
|
|
# 'name': record.fqdn, |
|
|
|
# 'type': record._type, |
|
|
|
# 'data': add_quotes(value), |
|
|
|
# 'ttl': max(record.ttl, 300), |
|
|
|
# } |
|
|
|
|
|
|
|
_record_for_SPF = _record_for_single |
|
|
|
_record_for_TXT = _record_for_single |
|
|
|
@staticmethod |
|
|
|
def _record_for_textual(record, value): |
|
|
|
return { |
|
|
|
'name': record.fqdn, |
|
|
|
'type': record._type, |
|
|
|
'data': unescape_semicolon(value), |
|
|
|
'ttl': max(record.ttl, 300), |
|
|
|
} |
|
|
|
_record_for_SPF = _record_for_textual |
|
|
|
_record_for_TXT = _record_for_textual |
|
|
|
|
|
|
|
@staticmethod |
|
|
|
def _record_for_MX(record, value): |
|
|
|
|