forgejo
Async Python client for the Forgejo REST API. Forgejo keeps API compatibility with Gitea, so this works against Gitea instances too.
The library covers the read-only surface needed to monitor a forge: version, account, unread notifications, repository counters, the latest Actions run, and the tip commit. It has no Home Assistant dependency — if that is what you are after, see HA-Forgejo.
Install
pip install forgejo
Requires Python 3.12+.
Use
import asyncio
from forgejo import ForgejoClient
async def main() -> None:
async with ForgejoClient("https://git.example.com", token="your-api-token") as client:
server = await client.get_version()
print(f"Forgejo {server.version}")
me = await client.get_authenticated_user()
print(f"Signed in as {me.login}")
print(f"{await client.get_new_notification_count()} unread notifications")
repo = await client.get_repository("example-user", "example-repo")
print(f"{repo.full_name}: {repo.open_issues} issues, {repo.open_pull_requests} PRs")
run = await client.get_latest_workflow_run("example-user", "example-repo")
if run is not None:
print(f"Last CI run: {run.name} -> {run.status}")
asyncio.run(main())
Bring your own session
Pass an existing aiohttp.ClientSession and the client will use it and leave it
open. This is what you want inside a larger application that already pools
connections.
async with aiohttp.ClientSession() as session:
client = ForgejoClient("https://git.example.com", token="...", session=session)
Self-signed certificates
Instances on a private network often use a certificate the system trust store does not know about.
client = ForgejoClient("https://git.internal", token="...", verify_ssl=False)
Turning verification off means the connection is encrypted but unauthenticated. Prefer installing the CA certificate where possible.
Getting a token
In the web UI: Settings → Applications → Generate New Token. Read-only scopes are enough:
read:repository— repository counters, Actions runs, commitsread:issue— issue and pull-request countsread:notification— unread notification countread:user— the account the token belongs to
Everything except get_version() needs a token.
API
| Method | Returns |
|---|---|
get_version() |
ServerInfo |
get_authenticated_user() |
User |
get_new_notification_count() |
int |
list_repositories(limit=50) |
list[Repository] |
get_repository(owner, repo) |
Repository |
get_latest_workflow_run(owner, repo) |
WorkflowRun | None |
get_latest_commit(owner, repo) |
Commit | None |
Methods return dataclasses, never raw dictionaries. None means the thing does
not exist — a repository with no workflows, or an empty repository with no
commits — which is different from an error.
Errors
All exceptions derive from ForgejoError:
ForgejoConnectionError— unreachable or timed outForgejoAuthenticationError— token rejected or missing a scopeForgejoNotFoundError— no such repository or endpointForgejoResponseError— answered, but not with usable JSON
A common cause of ForgejoResponseError is an auth proxy in front of the
instance returning its own login page with HTTP 200.
Notes on the API
open_issuesexcludes pull requests. Pull requests are counted separately inopen_pull_requests. This surprises people coming from the GitHub API, where the equivalent field includes both.- A workflow run status is only meaningful once it reaches a terminal state.
TERMINAL_RUN_STATUSESholds the set; anything else means still running, which is not the same as failing.
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file forgejo-1.0.0.tar.gz.
File metadata
- Download URL: forgejo-1.0.0.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10a30fdbee06b34ba00dcbff39bfeefa85917387675e8b9b48b577fc516c2d07
|
|
| MD5 |
e585c3af4d9fbd03ca0df840ab3e7393
|
|
| BLAKE2b-256 |
607540468708dc1db5af388619a06c037903c74dabc5d2f1706e55ffa04895cb
|
File details
Details for the file forgejo-1.0.0-py3-none-any.whl.
File metadata
- Download URL: forgejo-1.0.0-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
406aa08de6bbc2bcfa368c9442a2b31740b297608cd9679c83b9c6e933be3523
|
|
| MD5 |
930fcaef5465eb5694babacba0cd75ff
|
|
| BLAKE2b-256 |
d1658e3a6807b8aebc219ccf6da2e11fcc51952e8b9e429047fdb647630f5120
|