blog Personal API Overview

Tags:
django celery python

I have long been inspired by Aaron Pareki and his pk3 tool for his website. With some searching, one can find other kinds of personal management systems on GitHub or other developers writing about their own personal api with links to other examples. As a developer myself, I have my own personal API that I am able to add to as wanted.

In the interest of choosing boring technology my personal api is powered primarily by django and celery .

Published Modules

While I have more modules I plan to clean up and publish in the future, I have split out a few that I also use in other projects. At some point I need to provide better documentation for many of these and some screenshots.

django-zakka

django-zakka is my collection of helpers that I have pulled out so that I can reuse across various projects. The two most useful are my zakka.http module that wraps requests to apply a consistent user agent to outgoing requests, and my zakka.conrib.celery that adds a tasks cli command to list and manually run any Celery task and re-adds the perodic_task decorator that was removed from older versions of Celery.

django-mqtt

django-mqtt is a module I wrote to connect mqtt and django. This adds a mqtt server command that connects to an mqtt broker and can then trigger actions in Django.

django-timeboxed

django-timeboxed is a module in development to help with time boxing tasks. This lets me set a timer for various tasks to help me keep focused. I have written some other modules, like a macos status bar app, to interface with it, but I need to do more cleanup before I publish everything.

Other Modules

Using django-admin startapp, it is easy to create a new module for splitting up some of my code. Splitting it up this way, makes it easier to split out if I think it will be more useful to other projects, or remove if it stops being useful.

django-latest

This is a module I hope to publish soon (with a better name as well). This is a module I use to track the last time I did some kind of chore. I can set a period such as daily/weekly/monthly, and then click a checkin button any time I do that task.

Home Dashboard

While I use Home Assistant for some things, it is often much easier for me to write a custom dashboard in Django, and then query out to other data sources that I need.

  • Dashboard Page - I have an overview dashboard showing a list of due tasks from django-latest in addition to a few other links.
  • Today Page - A list of all checkins from django-latest for today
  • Cat - Since I have a cat, I have a page specifically for checkins related to taking care of her.
  • Room Pages - I also have a page for each room in my apartment, that lists related django-timebox favorites or related django-latest trackers.

Development Dashboard

Recently I have also started a development dashboard that queries my forgejo instance or todoist account to generate pages for that.

Advantages of a Personal API

Having a personal api, it is now trivial to write a quick celery job for processing reports, a quick django view, for any kind of dashboard view, and a long term, (mostly) low stress project that I can always hack on. Using Forgejo , I push Webhooks into my deployment system, so that I can automatically deploy on push, and get notifications as soon as the deployment finishes. I also use the free version of sentry to keep track of errors.