Python wrapper around the dotloop API.
Start by getting access and refresh tokens.
from dotloop import Authenticate
auth = Authenticate('dotloop-client-id', 'dotloop-client-secret')
url = auth.url_for_authentication('https://example.com/redirect/')
...
# code is received
with auth:
response = auth.acquire_access_and_refresh_tokens(code, 'https://example.com/redirect/')
# response is a dictionary:
# {
# "access_token": "...",
# "token_type": "Bearer",
# "refresh_token": "...",
# "expires_in": ...,
# "scope": "..."
# }
Then use the access token acquired to create a Client
object.
access_token = response['access_token']
client = Client(access_token)
From the Client
object, you can now access dotloop data.
For example, get data about all profiles
client.profile.get() # -> Dict
or get data about a specific profile
client.profile(<profile_id>).get()
or get all loops associated with a profile
client.profile(<profile_id>).loop.get()
or get all folders in a specific loop
client.profile(<profile_id>).loop(<loop_id>).folder.get()
or update a participant on a specific loop
client.profile(<profile_id>).loop(<loop_id>).participant(<participant_id>).patch(email='newemail@example.com')
All items accessible in the dotloop API follow a hierarchical structure (i.e. profiles have loops which have folders which have documents) as represented like this:
- Account
- Contact
- LoopIt
- Profile
- LoopTemplate
- Loop
- Activity
- Participant
- Detail
- TaskList
- Task
- Folder
- Document
The design of this wrapper was intended to emulate that while providing idiomatic ways of quickly accessing data. Endpoints and their HTTP methods are easily translated to python code.
Accessing
PATCH /profile/1/loop/1/folder/1
with data
{
"name": "Disclosures (renamed)"
}
translates seamlessly to
client.profile(1).loop(1).folder(1).patch(name='Disclosures (renamed)')
Note: if data keys ever have spaces then those keys can be included by unpacking a dictionary e.g.
client.profile(1).loop(1).detail.patch(**{'Property Information': {...}})
Inspiration was taken from dotloop-ruby and sendgrid-python.
- Account
- .get
- Activity
- .get
- Contact
- .delete
- .get
- .patch
- .post
- Detail
- .get
- .patch
- Document
- .get
- .post
- Folder
- .get
- .patch
- .post
- Loop
- .get
- .patch
- .post
- LoopIt
- .post
- LoopTemplate
- .get
- Participant
- .delete
- .get
- .patch
- .post
- Profile
- .get
- .patch
- .post
- Task
- .get
- TaskList
- .get
I do not work for dotloop.