Skip to main content

Client for DNSimple REST API http://developer.dnsimple.com/overview/

Project description

Python DNSimple
===============

## Introduction

This is a client for the [DNSimple REST API](https://developer.dnsimple.com/). It currently allows you to fetch existing domain info, as well as register new domains and manage domain records.

`dnsimple-python` works for both python 2 & 3.

**Note:** As of 1.0.0 this now uses [DNSimple's APIv2](https://blog.dnsimple.com/2016/12/api-v2-stable/). This has some incompatibilities with APIv1, including auth changes. Please test for breakages before use.

### Getting started

You'll need the `json` module that is included with python version 2.6 and later, or the `simplejson` module if you are using an earlier version.

`dnsimple-python` also depends on the `requests` library.

Import the module:

```python
from dnsimple import DNSimple
```

You can provide your DNSimple credentials in one of two ways:

#### Provide username/password or email/api\_token credentials programmatically:

```python
# Use username/password authentication: HTTP Basic
dns = DNSimple(username=YOUR_USERNAME, password=YOUR_PASSWORD)

# Use email/api_token credentials
dns = DNSimple(api_token=YOUR_API_TOKEN)

# If you have many accounts you can provide account_id (661 is an example)
# You can find your account id in url (https://sandbox.dnsimple.com/a/661/account)
dns = DNSimple(username=YOUR_USERNAME, password=YOUR_PASSWORD, account_id=661)
```

##### Store you username/password or email/api\_token credentials in a file called `.dnsimple` in the current directory with the following data:

```
[DNSimple]
username: email@domain.com
password: yourpassword
```

Or:

```
[DNSimple]
api_token: yourapitoken
```

Or (assuming `$DNSIMPLE_EMAIL` and `$DNSIMPLE_TOKEN` are environment variables):

```
[DNSimple]
email: %(DNSIMPLE_EMAIL)s
api_token: %(DNSIMPLE_TOKEN)s
```

You then need not provide any credentials when constructing `DNSimple`:

```python
dns = DNSimple()
```

## Domain Operations

### Check out your existing domains:

Just run:

```python
domains = dns.domains()
```

Results appear as a Python dict:

```python
{'domain': {'created_at': '2010-10-14T09:45:32Z',
'expires_at': '10/14/2011 5:45:00 AM',
'id': 999,
'last_enom_order_id': None,
'name': 'yourdomain.com',
'name_server_status': 'active',
'registrant_id': 99,
'registration_status': 'registered',
'updated_at': '2010-10-14T10:00:14Z',
'user_id': 99}},
{'domain': {'created_at': '2010-10-15T16:02:34Z',
'expires_at': '10/15/2011 12:02:00 PM',
'id': 999,
'last_enom_order_id': None,
'name': 'anotherdomain.com',
'name_server_status': 'active',
'registrant_id': 99,
'registration_status': 'registered',
'updated_at': '2010-10-15T16:30:16Z',
'user_id': 99}}]
```

### Get details for a specific domain

```python
dns.domain('mikemaccana.com')
```

Results are the same as `domains()` above, but only show the domain specified.

### Check whether a domain is available

```python
dns.check('google.com')

# Hmm, looks like I'm too late to get that one...
{u'currency': u'USD',
u'currency_symbol': u'$',
u'minimum_number_of_years': 1,
u'name': u'google.com',
u'price': u'14.00',
u'status': u'unavailable'}
```

### Register a new domain

```python
dns.register('newdomain.com')
```

This will register 'newdomain.com', automatically picking the registrant\_id from your first domain. To specify a particularly `registrant_id`, just run:

```python
dns.register('newdomain.com', 99)
```

Responses will be in a dictionary describing the newly created domain, same as the `domain()` call above.

### Delete a domain

Careful with this one!

```python
dns.delete('domain-to-die.com')
```

## Record operations

All operations on domain records are now supported:

* List records: `records(id_or_domainname)`
* Get record details: `record(id_or_domainname, record_id)`
* Add record: `add_record(id_or_domainname, data)`
* Update record: `update_record(id_or_domainname, record_id, data)`
* Delete record: `delete_record(id_or_domainname, record_id)`

## Running Tests

Before running tests, you'll need to ensure your environment is set up correctly:

1. If you don't already have a DNSimple sandbox account, [create one](https://sandbox.dnsimple.com/signup) and make sure to have your email address, password, and API token handy.
1. Ensure you have the `virtualenv` package installed (`pip install virtualenv --upgrade`) since tests are run from this isolated environment
1. Copy the file `tests/.env.example` to `tests/.env` and supply your sandbox credentials
1. From the project root, run `make test` -- this will set up your local environment with `virutalenv`, install all necessary dependencies, and run all the tests.

## License

Licensed under the [MIT license](http://www.opensource.org/licenses/mit-license.php)

## Authors

* Original Author [Mike MacCana](https://github.com/mikemaccana/)
* APIv2 Support [Kirill Motkov](https://github.com/lcd1232)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dnsimple-1.0.0.tar.gz (11.4 kB view details)

Uploaded Source

File details

Details for the file dnsimple-1.0.0.tar.gz.

File metadata

  • Download URL: dnsimple-1.0.0.tar.gz
  • Upload date:
  • Size: 11.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for dnsimple-1.0.0.tar.gz
Algorithm Hash digest
SHA256 9c8de6b2f7f6b4b311b5dee315daf6fc27d4347bd4f88a41eb18edd084603a9a
MD5 5dd6d91bc3e6e97a0d346c55fc380e8b
BLAKE2b-256 c4ba8b010be2dece86a0d78e85f7c774a76a8be13b3b96e8195d8d36a1af2fa5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page