Skip to main content

A modern utility package for using the Podio API with Python.

Project description

turbopod

A modern utility library for easily using the Podio API with Python.

How to install

pip install turbopod

the 'tpod' command

Get your client ID und client secret from https://podio.com/settings/api

Then run the following command:

tpod init --client-id=<Podio-client-id> --client-secret=<Podio-client-secret>

This will create a hidden file called .turbopod_credentials.json in the current working directory. The access token is valid for some hours.

Accessing single Podio items

You can find die item_id of any Podio item by opening a Podio item detail view in the Webbrowser and then clicking on 'Actions' and 'Developer info':

Click on Actions

This will display among other things the item_id and the app_id:

Click on dwActions

Using the item_id you can now write a simple python programm that will read the details of one single item. Create file named get_item_data.py that contains the following Python code:

from turbopod.session import create_podio_session

ITEM_ID=123456789 # <- Replace with your own item_id.


def get_podio_item(item_id):
    # reads the access token from .turbopod_credentials.json
    podio = create_podio_session()

    # see https://developers.podio.com/doc/items/get-item-22360
    item_url = f'https://api.podio.com/item/{item_id}'

    # podio.get() works almost the same way that requests.get() works
    resp = podio.get(item_url)
    resp.raise_for_status()
    item_data = resp.json()
    return item_data


if __name__ == '__main__':
    item_data = get_podio_item(ITEM_ID)
    # print something from the item_data, then exit
    print(f"Item-ID: {item_data['item_id']}")
    print(f"Item title: {item_data['title']}")

Now run the program. The output should look like this:

$ python ./get_item_data.py
Item-ID: 123456789
Item title: Bow of boat
$ _ 

Working with higher number of Podio items

Podio has very strict API limits. Because of this, turbopod includes an option to create a 'robust' session. If you create Podio session with the robust parameter, turbopod will wait when the API limit is reached and it will also retry the request when Podio returns a '504 Gateway timeout' error.

from turbopod.session import create_podio_session

podio = create_podio_session(robust=True)

Another hurdle is pagination. To download the data of a whole Podio app, we need to get the Podio items in smaller chunks:

from turbopod.session import create_podio_session
from turbopod.helpers import iterate_resource

app_id = 987654321 # <- Enter your own app_id here.

podio = create_podio_session(robust=True)
url = f'https://api.podio.com/item/app/{app_id}/filter/'

for item in iterate_resource(client, url, 'POST', limit=250):
    print(item['item_id'])

(The limit parameter can be anything from 1 to 500. On larger Podio apps it is wise to stay below 300 and reduce the limit if you see that the Podio API returns a lot of HTTP 504 Errors.

See https://developers.podio.com/doc/items/filter-items-4496747 for more info on the filter API endpoint.

Turning a whole Podio app into a Pandas dataframe

For this example to work Pandas needs to be installed already. Often you want to get all the data from one Podio app.

import turbopod.dataframe
from turbopod.session import create_podio_session

podio = create_podio_session(robust=True)
app_id = 987654321 # <- Replace with your own app_id here.

# You need to list the fields that should be included in the dataframe
df = turbopod.dataframe.load_from_app(podio, app_id, labels=['Title', 'Description'])

# But you can also use the external_ids of the fields
df = turbopod.dataframe.load_from_app(podio, app_id, external_ids=['title‘, 'description'])

Useful links

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

turbopod-0.0.3.tar.gz (937.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

turbopod-0.0.3-py3-none-any.whl (23.3 kB view details)

Uploaded Python 3

File details

Details for the file turbopod-0.0.3.tar.gz.

File metadata

  • Download URL: turbopod-0.0.3.tar.gz
  • Upload date:
  • Size: 937.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for turbopod-0.0.3.tar.gz
Algorithm Hash digest
SHA256 20c099c28f540407fa2c90f5294133d395a4db74af86696d6e6534259a4610f3
MD5 040eb48826c30bea4f69648f330b7cb8
BLAKE2b-256 f3c94251f42e473326e15483744f3df9154bc6dcee51bc06fd780b5c3a9bae9e

See more details on using hashes here.

File details

Details for the file turbopod-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: turbopod-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 23.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for turbopod-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d2ae1a4e24a1c03cadc4e5961dfb93d63e098ceac69f3a8823b5bcb54bfd158b
MD5 c8df79b0849088bb57107aeb7d428cf7
BLAKE2b-256 9a4aa6ba6ee32bffd0e3b196253371c9562c6c60c7e1f0991d7f74d39a67d58c

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