Skip to main content

isik

Everyday Python utilities, and a set of Django and Django REST Framework building blocks: base models with history tracking, per-host feedback and tag models attached without hand-written migrations, scoped permissions, serializer and viewset mixins, and HTTP exceptions you can raise from anywhere.

Install

pip install isik              # isik.common only - no dependencies
pip install isik[django]      # isik.django.apps, isik.django.http_exceptions
pip install isik[drf]         # isik.django.drf - brings the django extra with it
pip install isik[celery]      # isik.django.celery - brings the django extra with it
pip install isik[cli]         # isik.cli - click and questionary
pip install isik[all]         # everything, sentry/tiptap/templated_fields/cli included

Requires Python 3.11+. The django and drf extras assume PostgreSQL: BaseModel's timestamps and history tracking run on database triggers (django-pgtrigger, django-pghistory), so add pgtrigger and pghistory to INSTALLED_APPS. Bring your own database driver (psycopg or psycopg2); isik doesn't choose one for you.

Documentation

The full index is docs/INDEX.md.

  • isik.common - caching, concurrency, error handling, functional helpers, typed settings from environment variables
  • isik.cli - settings declared once as class attributes, given by option, environment variable or answer to a question, checked to be reachable all three ways
  • isik.django.apps - BaseModel, history tracking, and the votes()/comments()/notes()/bookmarks()/tags() makers
  • Idempotency keys - Idempotency-Key on DRF views: a retry replays the first response instead of doing the work twice
  • Preconditions - ETag / If-Match on DRF views: a write made against an older version is refused instead of overwriting the newer one
  • isik.django.drf - permissions (guarding, django_permission, ...), request policies on any view, serializer and viewset mixins, filters, pagination
  • isik.django.celery - a task base whose history rows name whoever caused the task, not nobody
  • isik.django.http_exceptions - raise an HTTP status directly instead of threading responses back up the call stack
  • isik.sentry - Sentry-reporting exception suppression
  • Translations - every user-facing string is translatable, through Django's catalogs or stdlib gettext

Plain Python, and worth knowing about in a Django project

A Django project's imports all start with isik.django, so isik.common.utils is easy to never see. It needs no Django and these come up in Django code constantly:

  • first_of(iterable, default=None, pred=None) / not_none - the first item, or the first one matching a predicate, without a next(...) and a StopIteration to handle.
  • with_attrs(**attrs) - set attributes on a function as a decorator (short_description, boolean on an admin method).
  • returns(value) / raises(exception) / noop / identity - small callables for defaults and hooks.
  • Exemption - an opt-out that names the rule it skips and says why, held to a minimum length and listed by rule (manage.py exemptions): NoHelpText(reason="why").
  • TransformExceptions / SuppressAndRun - turn one exception into another, or run something when one is swallowed.

See isik.common for all of it.

What changed in each release: CHANGELOG.md.

License

MIT

Metadata

Release files for isik 0.36.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for isik 0.36.0
File Size Uploaded Provenance Actions
isik-0.36.0.tar.gz 786.5 kB With provenance Details for isik-0.36.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for isik 0.36.0
File Interpreter ABI Platform Actions
isik-0.36.0-py3-none-any.whl Python 3 none any Details for isik-0.36.0-py3-none-any.whl

Total release size: 1.1 MB

Release files / isik-0.36.0.tar.gz

Download URL isik-0.36.0.tar.gz
Size 786.5 kB
Tags Source
SHA-256 checksum
How to use checksums
241528084f893b18f6dae4cbbf6261a736744170432bbda8659731f2cb16b571
BLAKE2b-256 checksum
How to use checksums
ce22ea03cd2bd5c0e129a1fb46861657971f95d386fccc45321e71c4aed6af39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / isik-0.36.0-py3-none-any.whl

Download URL isik-0.36.0-py3-none-any.whl
Size 302.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6aff5e0fe410158046b84fcb01f6eda0cffd0d603df428fd2e5cccb1458979d6
BLAKE2b-256 checksum
How to use checksums
13a8cfc8f48e7df0658bfe6d14217e8c0541d0a359d2e6cdc8a7dec6b031ff06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Security for isik 0.36.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for isik-0.36.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.36.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page