Skip to main content

Python SDK for calling dibs, and checking for dibs, on git commit hashes

Project description

git-dibs-sdk

If you're reading this, you're already in too deep. Yes, I really made a python sdk for the useless utility that is "Git Dibs". It points at https://gitdibs.com by default.

Install

python -m pip install git-dibs-sdk

Quick Start

from git_dibs_sdk import DibsAlreadyCalledError, GitDibsClient

client = GitDibsClient()

dibs = client.get_dibs("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
if dibs is None:
    print("commit is available")
else:
    print(dibs.reserved_by, dibs.upvote_count)

try:
    created = client.call_dibs(
        commit_hash="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
        reserved_by="bb",
    )
    print(created.hash)
except DibsAlreadyCalledError as error:
    print(error)

Client Surface

from git_dibs_sdk import GitDibsClient

client = GitDibsClient(
    base_url="https://gitdibs.com",
    timeout=10.0,
)

Available methods:

  • get_dibs(commit_hash: str) -> Dibs | None
  • call_dibs(commit_hash: str, reserved_by: str) -> Dibs
  • list_recent_dibs() -> list[Dibs]
  • list_popular_dibs() -> list[Dibs]
  • search_dibs(*, query: str | None = None, after: str | None = None, limit: int | None = None) -> DibsSearchResult
  • upvote_commit(commit_hash: str, voter_fingerprint: str) -> UpvoteResult

Dibs fields:

  • hash: str Full 40-character lowercase SHA-1 commit hash. Example: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  • reserved_at_utc: str Reservation timestamp in UTC as an ISO 8601 string. Example: "2026-03-28T00:00:00.000Z"
  • reserved_by: str Alphanumeric caller name recorded by the API. Example: "AndyG"
  • upvote_count: int Current number of upvotes for the dibs entry. Example: 7

DibsSearchResult fields:

  • dibs: list[Dibs] Page of dibs results returned by the search endpoint. Example: [Dibs(...), Dibs(...)]
  • query: str | None Hex prefix used to filter results, or None when listing all dibs. Example: "deadbeef"
  • after: str | None Full 40-character cursor hash used to continue pagination, or None on the first page. Example: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  • limit: int Maximum number of results requested for the page. Example: 10
  • has_more: bool Whether another page of results exists after this one. Example: True
  • next_after: str | None Cursor to pass as after for the next page, or None when there are no more results. Example: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"

UpvoteResult fields:

  • applied: bool Whether this request added a new upvote rather than hitting an existing deduplicated vote. Example: True
  • upvote_count: int Current upvote count for the dibs entry after the request. Example: 8

Error Handling

All transport, HTTP, and response-shape failures are raised as GitDibsError subclasses.

  • DibsAlreadyCalledError: the commit is already reserved
  • GitDibsHttpError: a non-success HTTP response came back from the API

Example:

from git_dibs_sdk import DibsAlreadyCalledError, GitDibsError, GitDibsClient

client = GitDibsClient()

try:
    client.call_dibs(
        "cccccccccccccccccccccccccccccccccccccccc",
        "TestUser2",
    )
except DibsAlreadyCalledError as error:
    print(error.commit_hash, error.reserved_by)
except GitDibsError as error:
    print(f"request failed: {error}")

API Notes

This SDK matches the current Git Dibs API contract:

  • GET /api/dibs/<commit>
  • GET /api/dibs/recent
  • GET /api/dibs/popular
  • GET /api/dibs/search?q=<optional-prefix>&after=<optional-full-commit>&limit=<optional-1-to-50>
  • POST /api/dibs
  • POST /api/upvotes

Lookup returns 204 No Content when a commit is available and 200 OK with a dibs payload when it is reserved.

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

git_dibs_sdk-1.0.0.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

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

git_dibs_sdk-1.0.0-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file git_dibs_sdk-1.0.0.tar.gz.

File metadata

  • Download URL: git_dibs_sdk-1.0.0.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for git_dibs_sdk-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b7da3c3d0326cb3db5fed2169772057d4ddc8839a45842517ea6c03a0c11281f
MD5 d127bcff001fbef752a90097e039d3e1
BLAKE2b-256 f2b4c5e1c53f4757e5c50cab1cf95633311bd45a02e2840c2cd4f3cbc7e4ba34

See more details on using hashes here.

Provenance

The following attestation bundles were made for git_dibs_sdk-1.0.0.tar.gz:

Publisher: publish.yml on gieseanw/git-dibs-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file git_dibs_sdk-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: git_dibs_sdk-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for git_dibs_sdk-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0dfc7fb63a492b0780bc0d2a0215a1b7a3ffbbce8fe0a952c627e0fcda7c7a33
MD5 9e6ff0681bb64b0fc7521083bc093fb1
BLAKE2b-256 053343584e4c1868cb3a8eae402664a74584a2e3b2751ebc861879a9ef875850

See more details on using hashes here.

Provenance

The following attestation bundles were made for git_dibs_sdk-1.0.0-py3-none-any.whl:

Publisher: publish.yml on gieseanw/git-dibs-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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