Skip to main content

Python wrapper around the dotloop API.

Project description

dotloop-python

Python wrapper around the dotloop API.

Quick Start

Authenticate

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": "..."
    # }

Client

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

Design Philosophy

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.

Links

dotloop API documentation

To-Do

  • 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
  • Better typing

  • Better passing of parameters

  • Async

  • Better handling of request sessions

  • Better exception handling

  • Better documentation

  • Unit tests

import asyncio

import aiohttp
import dotloop


async def main():
  async with aiohttp.ClientSession() as s:
    async with s.post()


if __name__ == '__main__':
  main()

Disclaimer

I do not work for dotloop nor for Zillow.

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

dotloop-python-0.1.1.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

dotloop_python-0.1.1-py3-none-any.whl (21.9 kB view details)

Uploaded Python 3

File details

Details for the file dotloop-python-0.1.1.tar.gz.

File metadata

  • Download URL: dotloop-python-0.1.1.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.0+

File hashes

Hashes for dotloop-python-0.1.1.tar.gz
Algorithm Hash digest
SHA256 4567f0f3f842cad26a8fd29ef6cd2163551f2749e59167e9a8886d1a9a8c2278
MD5 8388961d37d6b9d5e3b961b32b00ac27
BLAKE2b-256 8ccc2ed66ddddf390b9a6f23b4f947385fb4968ab268272284db95c94bbdeec9

See more details on using hashes here.

File details

Details for the file dotloop_python-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: dotloop_python-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 21.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.0+

File hashes

Hashes for dotloop_python-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 694d055b82c5fdeaa850a8ee9d257bad68dec39fcf7cd9b481060e649c3f43a9
MD5 8553fd2ab9e1210be09f1766cbf58960
BLAKE2b-256 d81d9c6d2b098d2aef4fcfb4299921fc7e2c55c810435d2f4e1902543bc7af52

See more details on using hashes here.

Supported by

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