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)
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