This is a client for the DNSimple REST API. 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. This is incompatible with older versions of the library because of authentication changes. Please review the docs and tests before deploying to production.
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:
from dnsimple import DNSimple
You can provide your DNSimple credentials in one of two ways:
# Use email/password authentication: HTTP Basic
dns = DNSimple(email=YOUR_USERNAME, password=YOUR_PASSWORD)
# Use 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(email=YOUR_USERNAME, password=YOUR_PASSWORD, account_id=661)
Store you email/password or api_token credentials in a file called .dnsimple
in the current directory with the following data:
[DNSimple]
email: [email protected]
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
:
dns = DNSimple()
Just run:
domains = dns.domains()
Results appear as a Python dict:
{'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}}]
dns.domain('mikemaccana.com')
Results are the same as domains()
above, but only show the domain specified.
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'}
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:
dns.register('newdomain.com', 99)
Responses will be in a dictionary describing the newly created domain, same as the domain()
call above.
Careful with this one!
dns.delete('domain-to-die.com')
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)
Before running tests, you'll need to ensure your environment is set up correctly. Currently we do live tests against DNSimple's sandbox so you will need to set that up. This also means that running tests concurrently will cause failures.
- If you don't already have a DNSimple sandbox account, create one and make sure to have your email address, password, and API token handy.
- Copy the file
tests/.env.example
totests/.env
and supply your sandbox credentials
If you don't wish to use pyenv you will want to skip this and run tox
manually after setting up your environment
- install pyenv using homebrew or git
make test
to run all tests
Licensed under the MIT license
- Original Author Mike MacCana
- APIv2 Support Kirill Motkov
- Maintainer David Aronsohn