Skip to main content

Unified client for GitHub, GitLab and BitBucket

Project description

GitHarbor

PyPI License Package status Daily downloads Weekly downloads Monthly downloads Distribution format Wheel availability Python version Implementation Releases Github Contributors Github Discussions Github Forks Github Issues Github Issues Github Watchers Github Stars Github Repository size Github last commit Github release date Github language count Github commits this week Github commits this month Github commits this year Package status Code style: black PyUp

Read the documentation!

GitHarbor User Guide

GitHarbor is a unified interface for interacting with Git hosting platforms. It provides a consistent API to work with repositories hosted on GitHub, GitLab, Azure DevOps, Gitea, CodeBerg and Bitbucket.

Getting Started

The main entry point is the create_repository() function which accepts a repository URL and platform-specific credentials:

from githarbor import create_repository

# GitHub repository
repo = create_repository("https://github.com/owner/repo", token="github_pat_...")

# GitLab repository
repo = create_repository("https://gitlab.com/owner/repo", token="glpat-...")

# Azure DevOps repository
repo = create_repository(
    "https://dev.azure.com/org/project/_git/repo",
    token="azure_pat"
)

[!TIP] Always use personal access tokens (PATs) for authentication. Never hardcode tokens in your source code.

Working with Repositories

Basic Repository Information

# Get repository name and default branch
print(repo.name)
print(repo.default_branch)

# Get language statistics
languages = repo.get_languages()
# Returns: {"Python": 10000, "JavaScript": 5000}

# Get recent activity statistics
activity = repo.get_recent_activity(
    days=30,
    include_commits=True,
    include_prs=True,
    include_issues=True
)

Branches and Tags

# List all branches
branches = repo.list_branches()

# Get specific branch
main_branch = repo.get_branch("main")

# List all tags
tags = repo.list_tags()

# Get specific tag
tag = repo.get_tag("v1.0.0")

# Compare branches
diff = repo.compare_branches(
    base="main",
    head="feature",
    include_commits=True,
    include_files=True,
    include_stats=True
)

Commits

# Get specific commit
commit = repo.get_commit("abcd1234")

# List commits with filters
commits = repo.list_commits(
    branch="main",
    since=datetime(2024, 1, 1),
    until=datetime(2024, 2, 1),
    author="username",
    path="src/",
    max_results=100
)

# Search commits
results = repo.search_commits(
    query="fix bug",
    branch="main",
    path="src/",
    max_results=10
)

Issues and Pull Requests

# List open issues
open_issues = repo.list_issues(state="open")

# Get specific issue
issue = repo.get_issue(123)

# List pull requests
prs = repo.list_pull_requests(state="open")  # or "closed" or "all"

# Get specific pull request
pr = repo.get_pull_request(456)

Releases

# Get latest release
latest = repo.get_latest_release(
    include_drafts=False,
    include_prereleases=False
)

# List all releases
releases = repo.list_releases(
    include_drafts=False,
    include_prereleases=True,
    limit=10
)

# Get specific release
release = repo.get_release("v1.0.0")

Repository Content

# Download single file
repo.download(
    path="README.md",
    destination="local/README.md"
)

# Download directory recursively
repo.download(
    path="src/",
    destination="local/src",
    recursive=True
)

# Iterate through files
for file_path in repo.iter_files(
    path="src/",
    ref="main",
    pattern="*.py"
):
    print(file_path)

CI/CD Workflows

# List all workflows
workflows = repo.list_workflows()

# Get specific workflow
workflow = repo.get_workflow("workflow_id")

# Get specific workflow run
run = repo.get_workflow_run("run_id")

Contributors

# Get repository contributors
contributors = repo.get_contributors(
    sort_by="commits",  # or "name" or "date"
    limit=10
)

Error Handling

GitHarbor provides specific exceptions for different error cases:

from githarbor.exceptions import (
    RepositoryNotFoundError,
    ResourceNotFoundError,
    FeatureNotSupportedError
)

try:
    repo = create_repository("https://github.com/nonexistent/repo")
except RepositoryNotFoundError:
    print("Repository does not exist")

try:
    issue = repo.get_issue(999999)
except ResourceNotFoundError:
    print("Issue does not exist")

try:
    repo.some_unsupported_method()
except FeatureNotSupportedError:
    print("This feature is not supported by this repository provider")

[!NOTE] Not all features are supported by all platforms. Operations that aren't supported will raise FeatureNotSupportedError.

[!IMPORTANT] Be mindful of API rate limits when making many requests. Consider implementing retries and delays in your code.

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

githarbor-0.4.0.tar.gz (38.3 kB view details)

Uploaded Source

Built Distribution

githarbor-0.4.0-py3-none-any.whl (44.6 kB view details)

Uploaded Python 3

File details

Details for the file githarbor-0.4.0.tar.gz.

File metadata

  • Download URL: githarbor-0.4.0.tar.gz
  • Upload date:
  • Size: 38.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.5.2

File hashes

Hashes for githarbor-0.4.0.tar.gz
Algorithm Hash digest
SHA256 160e224dfe9b15f6c048c3127b047c1a0c243c49eb21ae0e37099ec517aff22b
MD5 36c634fbb768fb350dccd70a2fe24a87
BLAKE2b-256 f28800cf234b7be71f48cc93dfea654d214c40528d8e178095fe1eb327498ad6

See more details on using hashes here.

File details

Details for the file githarbor-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for githarbor-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f21526ce0f93284807b4441d60afbcf5f01211a49c799412aebabeb9a0a4fe27
MD5 2ab7d0ed3c5ac31b050b1583ba334620
BLAKE2b-256 d68f5285c0cbf7fc054573d13b14783774a23c5fb2c5fe5f620ab1520a792c34

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page