giturlparse
Parse & rewrite git urls (supports GitHub, Bitbucket, FriendCode, Assembla, Gitlab …)
This is a fork of giturlparse.py with updated parsers.
Original project can be found at https://github.com/FriendCode/giturlparse.py
Installing
pip install giturlparse
Examples
Exposed attributes
platform: platform codename
host: server hostname
resource: same as host
port: URL port (only if explicitly defined in URL)
protocol: URL protocol (git, ssh, http/https)
protocols: list of protocols explicitly defined in URL
user: repository user
owner: repository owner (user or organization)
repo: repository name
name: same as repo
groups: list of groups - gitlab only
path: path to file or directory (includes the branch name) - gitlab / github only
path_raw: raw path starting from the repo name (might include platform keyword) - gitlab / github only
branch: branch name (when parseable) - gitlab / github only
username: username from <username>:<access_token>@<url> gitlab / github urls
access_token: access token from <username>:<access_token>@<url> gitlab / github urls
Parse
from giturlparse import parse
p = parse('git@bitbucket.org:AaronO/some-repo.git')
p.host, p.owner, p.repo
# => ('bitbucket.org', 'AaronO', 'some-repo')
Rewrite
from giturlparse import parse
url = 'git@github.com:Org/Private-repo.git'
p = parse(url)
p.url2ssh, p.url2https, p.url2git, p.url2http
# => ('git@github.com:Org/Private-repo.git', 'https://github.com/Org/Private-repo.git', 'git://github.com/Org/Private-repo.git', None)
URLS
Alternative URLs for same repo:
from giturlparse import parse
url = 'git@github.com:Org/Private-repo.git'
parse(url).urls
# => {
# 'ssh': 'git@github.com:Org/Private-repo.git',
# 'https': 'https://github.com/Org/Private-repo.git',
# 'git': 'git://github.com/Org/Private-repo.git'
# }
Validate
from giturlparse import parse, validate url = 'git@github.com:Org/Private-repo.git' parse(url).valid # => True # Or validate(url) # => True
Tests
python -munittest
License
Apache v2 (Check out LICENSE file)
History
0.16.0 (2026-10-13)
Bugfixes
Fix HTTP normalization and protocol rewrites for generic Git hosts. (#97)
Pin ruff version to 0.15.22 (#156)
0.15.0 (2026-06-16)
Bugfixes
Fix path and branch extraction removing every /blob/ and /tree/ occurrence instead of only the leading marker, which corrupted file paths and branch names containing those segments. (#150)
0.14.0 (2025-10-22)
Features
Allow rewriting repo and owner (#0)
0.13.0 (2025-10-22)
Features
Switch to Coveralls Github action (#88)
Bugfixes
Fix Bitbucket url parse and add bitbucket.com to recognized domains (#107)
Remove fix-encoding-pragma from pre-commit hooks as it is deprecated (#119)
0.12.0 (2023-09-24)
Features
Add github/gitlab username:access_token parse support (#21)
Migrate to bump-my-version (#79)
Bugfixes
Fix Gitlab URLs with branch (#42)
Align tox.ini with github actions (#71)
0.11.1 (2023-08-04)
Bugfixes
Remove debug print statements (#66)
0.11.0 (2023-08-03)
Features
Add parsing variable for user to gitlab parser (#47)
Add support for Python 3.8+ (#48)
Bugfixes
Update tests invocation method to avoid future breakages (#29)
Update linting tools and fix code style (#34)
Add more github use cases (#43)
Fix parsing generic git url (#46)
0.10.0 (2020-12-05)
Features
General matching improvements (#18)
Update tooling, drop python2 (#10213)
0.9.2 (2018-10-27)
Removed “s” from the base platform regex
Fix license classifier in setup.py
Update meta files
0.9.1 (2018-01-20)
First fork release
Metadata
Release files for giturlparse 0.16.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| giturlparse-0.16.0.tar.gz | 16.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| giturlparse-0.16.0-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 33.9 kB
Release files / giturlparse-0.16.0.tar.gz
| Download URL | giturlparse-0.16.0.tar.gz |
|---|---|
| Size | 16.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d84b1cc1a211273af6f6e944555cdccd3468c2c14b9564758042bcdd4d44c5ef
|
|
BLAKE2b-256 checksum How to use checksums |
cbd3a9dcec71f16f8cac1ac64e6c764eec6bac848fe96ef5d9e362bd5201c5b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Release files / giturlparse-0.16.0-py2.py3-none-any.whl
| Download URL | giturlparse-0.16.0-py2.py3-none-any.whl |
|---|---|
| Size | 17.2 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
c4812b7227991d23ada03bc06b34c001de74907a5ea6e293e087d881b348d4bc
|
|
BLAKE2b-256 checksum How to use checksums |
5970fe161143f513a7c2eb087d6b16d59f67f25df3be2f0e12e8e76d5af5da60
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Security for giturlparse 0.16.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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.