Example #1
0
class DNSimple(object):
    domain = 'https://dnsimple.com'

    def __init__(self, username, password):
        self.requests = SmartRequests(self.domain, username, password)

    @simple_cached_property
    def domains(self):
        """
        Get a list of all domains in your account.
        """
        return dict([(data['domain']['name'], Domain(self, data['domain'])) for data in self.requests.json_get('/domains.json')])

    def create_domain(self, name):
        data = {
            'domain[name]': name
        }
        response = self.requests.post('/domains', data)
        if response.ok:
            uncache(self, 'domains')
            return True
        else:
            return False

    def checkdomain(self, name):
        return self.requests.json_get('/domains/%s/check' % name)
Example #2
0
 def __init__(self, username, password):
     self.requests = SmartRequests(self.domain, username, password)
Example #3
0
 def __init__(self, email, api_token):
     self.requests = SmartRequests(self.domain, email, api_token)
Example #4
0
class DNSimple(object):
    domain = 'https://dnsimple.com'

    def __init__(self, email, api_token):
        self.requests = SmartRequests(self.domain, email, api_token)

    @classmethod
    def with_auth_file(cls):
        passwordfile = try_open_file(".dnsimple")
        if not passwordfile:
            passwordfile = try_open_file(os.path.expanduser("~/.dnsimple"))
        if not passwordfile:
            logging.warning("""Could not open .dnsimple file - please provide a file .dnsimple in the current directory or in
                the home directory with the content:
                email: <dnsimple_email>
                api_token: <dnsimple API token>""")
            return

        email = re.findall(r'email:.*', passwordfile)[0].split(':')[1].strip()
        api_token = re.findall(r'api_token:.*', passwordfile)[0].split(':')[1].strip()
        return cls(email, api_token)

    @simple_cached_property
    def domains(self):
        """
        Get a list of all domains in your account.
        """
        return dict([(data['domain']['name'], Domain(self, data['domain'])) for data in self.requests.json_get('/domains')])

    def create_domain(self, name):
        data = {
            'domain[name]': name
        }
        response = self.requests.post('/domains', data)
        if response.status_code == 201:
            uncache(self, 'domains')
            return True
        else:
            logging.warn(response.content)
            return False

    def checkdomain(self, name):
        return self.requests.json_get('/domains/%s/check' % name)

    def get(self, path):
        return self.requests.json_get(path)

    def post(self, path, data):
        response = self.request.post(path, data)
        return json.loads(response.content)

    def put(self, path, data):
        response = self.request.post(path, data)
        return json.loads(response.content)

    def delete(self, path):
        response = self.requests.delete(path)
        return json.loads(response.content)

    def create_standard_domain(self, name, ip_address):
        """creates a new domain and adds 'www' and 'stage' subdomain and applies the
           Google-Mail template which setups the google mail"""
        result = self.create_domain(name)
        if not result:
            return False
        domain = self.domains.get(name)
        if not domain:
            return False
        if not domain.add_record('', 'A', ip_address):
            return False
        if not domain.add_record('www', 'CNAME', name):
            return False
        if not domain.add_record('stage', 'CNAME', name):
            return False
        return domain.apply_google_mail_template()

    def get_domain_or_warn(self, domain_name):
        domain = self.domains.get(domain_name)
        if not domain:
            logging.warn("Domain with name '%s' is unknown", domain_name)
        return domain

    def create_cname_subdomain(self, domain_name, sub_domain_name):
        domain = self.get_domain_or_warn(domain_name)
        if domain:
            return domain.add_record(sub_domain_name, 'CNAME', domain_name)
        return False

    def create_record_subdomain(self, domain_name, record_name, record_type, content):
        domain = self.get_domain_or_warn(domain_name)
        if domain:
           return domain.add_record(record_name, record_type, content)
        return False

    def delete_record_from_domain(self, domain_name, record_name):
        domain = self.get_domain_or_warn(domain_name)
        if domain:
            record = domain.get_record_by_name(record_name)
            if not record:
                logging.warn("Record with record_name %s not found", record_name)
            return record.delete().ok
        return False

    def migrate_domain_arecord_to_new_address(self, domain_name, new_ip_address):
        domain = self.get_domain_or_warn(domain_name)
        if domain:
            record = domain.get_record_by_name_and_type('', 'A')
            if not record:
                logging.warn("A-Record with no name not defined")
                return False
            return record.update(content=new_ip_address)
        return False