Skip to main content

Python client for the Google Issue Tracker

Project description

Buganize

Python client for the Google Issue Tracker.

Table of Contents

  1. Installation
  2. Usage as a library
  3. CLI usage
  4. How it works
  5. Limitations

Installation

pip install buganize

or

pip install buganise

Usage as a library

from buganize import Buganize

or

from buganise import Buganise

Search issues

async def search():
    # Search across all public trackers (default)
    async with Buganize() as client:
        result = await client.search("status:open component:Blink", page_size=10)

        print(f"{result.total_count} total matches")
        for issue in result.issues:
            print(f"#{issue.id} [{issue.status.name}] {issue.title}")

        # Pagination
        if result.has_more:
            page2 = await client.next_page(result)
            for issue in page2.issues:
                print(f"#{issue.id} [{issue.status.name}] {issue.title}")
async def search_chromium():
    # Search only within the Chromium tracker
    async with Buganize(tracker_id="157") as client:
        result = await client.search("status:open component:Blink")

Get a single issue

async def get_issue():
    async with Buganize() as client:
        issue = await client.issue(40060244)

        print(issue.title)
        print(issue.url)  # https://issuetracker.google.com/issues/40060244
        print(issue.status.name)  # e.g. "FIXED"
        print(issue.priority.name)  # e.g. "P2"
        print(issue.os)  # e.g. ["Linux", "Mac", "Windows"]
        print(issue.cve)  # e.g. ["CVE-2024-1234"]

Batch get issues

async def batch_get():
    async with Buganize() as client:
        issues = await client.issues([40060244, 485912774, 486077869])

        for issue in issues:
            print(f"#{issue.id} - {issue.title}")

Get comments

async def get_comments():
    async with Buganize() as client:
        comments = await client.comments(486077869)

        for comment in comments:
            print(f"#{comment.comment_number} by {comment.author}")
            print(comment.body)

Get full updates

Updates include both comments and field changes (status changes, priority changes, etc.):

async def get_updates():
    async with Buganize() as client:
        result = await client.issue_updates(486077869)

        print(f"{result.total_count} total updates")

        # Just the comments, in chronological order
        for comment in result.comments:
            print(f"#{comment.comment_number}: {comment.body[:80]}")

        # All updates (newest first), including field changes
        for update in result.updates:
            if update.field_changes:
                changed = ", ".join(fc.field for fc in update.field_changes)
                print(f"  Fields changed: {changed}")
            if update.comment:
                print(f"  Comment: {update.comment.body[:80]}")

CLI usage

Run with python -m buganize <command> or just buganize <command>.

Search

# Search across all public trackers (default)
buganize search "status:open"

# Combined filters
buganize search "status:open component:Blink"

# Results per page (choices: 25, 50, 100, 250)
buganize search "type:bug" -n 100

# Fetch a total of 200 results, paginating as needed
buganize search "status:open" -l 200

Tracker selection

By default, buganize searches across all public trackers on issuetracker.google.com. Use -t/--tracker to narrow to a specific tracker:

# Search only Chromium issues
buganize -t chromium search "status:open"

# Search only Fuchsia issues
buganize -t fuchsia search "status:open"

# Use a numeric tracker ID directly
buganize -t 157 search "status:open"

Issue

buganize issue 486077869

Issues (batch)

buganize issues 40060244 485912774 486077869

Comments

buganize comments 486077869

Extra fields

By default, the table output only shows ID, Status, Priority, and Title. You can show additional columns:

# Show specific extra fields
buganize search "status:open" -f owner os milestone

# Show all available fields
buganize search "status:open" -F

# Works with issue and issues too
buganize issue 486077869 --fields cve tags labels
buganize issue 486077869 --all-fields

Available extra field names: owner, reporter, verifier, type, component, tags, ancestor_tags, labels, os, milestone, ccs, hotlists, blocking, cve, cwe, build, introduced_in, merge, merge_request, release_block, notice, flaky_test, est_days, next_action, vrp_reward, irm_link, sec_release, fixed_by, created, modified, verified, comments, stars, last_modifier.

Export

All commands support -e/--export for exporting to CSV or JSON files. Exported files are named with a timestamp (e.g. buganize-20260223_012345.csv):

buganize -e csv search "status:open" -n 50
buganize -e json issue 486077869

# Multiple formats in one command
buganize -e csv json search "status:open"

Debug logging

Use --debug to see HTTP request/response details:

buganize --debug search "status:open"

Timeout

Use --timeout to set the HTTP request timeout in seconds (default: 30):

buganize --timeout 60 search "status:open"

[!Tip] British English spelling buganise will also work.

See API Reference for details about limitations, and how the API works

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

buganize-1.0.1.tar.gz (26.4 kB view details)

Uploaded Source

Built Distribution

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

buganize-1.0.1-py3-none-any.whl (31.3 kB view details)

Uploaded Python 3

File details

Details for the file buganize-1.0.1.tar.gz.

File metadata

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

File hashes

Hashes for buganize-1.0.1.tar.gz
Algorithm Hash digest
SHA256 7ce4e0e32b91660d239536f170dd7eeca5251a0e8540dc8efc20e89b5542e260
MD5 1a051095d9719c05582bfe12985b04f8
BLAKE2b-256 408d6492f07c1c3fe3e1677228dde7d4ade0f06de6d036677fd9f7c785e243c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for buganize-1.0.1.tar.gz:

Publisher: publish-python.yml on rly0nheart/buganize

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

File details

Details for the file buganize-1.0.1-py3-none-any.whl.

File metadata

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

File hashes

Hashes for buganize-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 325ddb75d1ec3edf63cbb08cd2558567713db81ead94355067199b123622f289
MD5 856108180de2ea3b0d2410bc23b29ab1
BLAKE2b-256 aafe5d335347b0fd320501dd95f8604549aaf84cda88511f2243b868377e5646

See more details on using hashes here.

Provenance

The following attestation bundles were made for buganize-1.0.1-py3-none-any.whl:

Publisher: publish-python.yml on rly0nheart/buganize

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