Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,4 @@ target/
### Project Specific ###
.dnsimple
.env
env
7 changes: 5 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
language: python

python:
- "2.7"
- "3.4"
- "3.5"
- "3.6"

install:
- pip install -r requirements.txt
- make ci-setup

script:
- py.test tests
- make ci-test
25 changes: 13 additions & 12 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
.DEFAULT_GOAL := setup

ci:
py.test tests
setup:
test -e env || virtualenv env
./env/bin/pip install -r requirements.txt --upgrade
./env/bin/python setup.py develop

test: setup
test -f tests/.env || { echo "Set up your env file before running tests"; exit 1; }
./env/bin/py.test tests

env: env/bin/activate
ci-setup:
pip install -r requirements.txt --upgrade

env/bin/activate: requirements.txt
test -d env || virtualenv env; \
./env/bin/pip install -r requirements.txt --upgrade;
ci-test:
py.test tests

dnsimple.egg-info/SOURCES.txt: env
./env/bin/python setup.py develop

setup: dnsimple.egg-info/SOURCES.txt
deploy:
rm dist/*
python setup.py sdist
twine upload dist/*

.PHONY: test
151 changes: 0 additions & 151 deletions README.markdown

This file was deleted.

174 changes: 174 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
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)
6 changes: 0 additions & 6 deletions circle.yml

This file was deleted.

2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from dnsimple import dnsimple

with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'README.markdown'), 'r') as readme_file:
with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'README.md'), 'r') as readme_file:
readme = readme_file.read()

setup(
Expand Down
Loading