Give AlbumentationsX a star on GitHub — it powers this leaderboard

Star on GitHub

giturlparse

A Git URL parsing module (supports parsing and rewriting)

Rank: #1629Downloads: 5,685,748 (30 days)Stars: 60Forks: 28

Description

===========
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)

.. :changelog:

*******
History
*******

.. towncrier release notes start

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