https://github.com/klen/http-router
A simple router for HTTP applications
https://github.com/klen/http-router
http-router
Last synced: 10 months ago
JSON representation
A simple router for HTTP applications
- Host: GitHub
- URL: https://github.com/klen/http-router
- Owner: klen
- Created: 2020-11-10T14:39:51.000Z (over 5 years ago)
- Default Branch: develop
- Last Pushed: 2024-11-05T13:51:30.000Z (over 1 year ago)
- Last Synced: 2025-08-10T08:48:22.803Z (11 months ago)
- Topics: http-router
- Language: Python
- Homepage:
- Size: 267 KB
- Stars: 27
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.rst
Awesome Lists containing this project
README
HTTP Router
###########
.. _description:
**http-router** -- A simple router for HTTP applications
The library is not a HTTP framework. It's an utilite to build the frameworks.
The main goal of the library to bind targets to http routes and match them.
.. _badges:
.. image:: https://github.com/klen/http-router/workflows/tests/badge.svg
:target: https://github.com/klen/http-router/actions
:alt: Tests Status
.. image:: https://img.shields.io/pypi/v/http-router
:target: https://pypi.org/project/http-router/
:alt: PYPI Version
.. image:: https://img.shields.io/pypi/pyversions/http-router
:target: https://pypi.org/project/http-router/
:alt: Python Versions
.. _contents:
.. contents::
.. _requirements:
Requirements
=============
- python 3.9, 3.10, 3.11, 3.12, 3.13, pypy3
.. _installation:
Installation
=============
**http-router** should be installed using pip: ::
pip install http-router
Usage
=====
Create a router:
.. code:: python
from http_router import Router
# Initialize the router
router = Router(trim_last_slash=True)
Define routes:
.. code:: python
@router.route('/simple')
def simple():
return 'result from the fn'
Call the router with HTTP path and optionally method to get a match result.
.. code:: python
match = router('/simple', method='GET')
assert match, 'HTTP path is ok'
assert match.target is simple
The router supports regex objects too:
.. code:: python
import re
@router.route(re.compile(r'/regexp/\w{3}-\d{2}/?'))
def regex():
return 'result from the fn'
But the lib has a simplier interface for the dynamic routes:
.. code:: python
@router.route('/users/{username}')
def users():
return 'result from the fn'
By default this will capture characters up to the end of the path or the next
``/``.
Optionally, you can use a converter to specify the type of the argument like
``{variable_name:converter}``.
Converter types:
========= ====================================
``str`` (default) accepts any text without a slash
``int`` accepts positive integers
``float`` accepts positive floating point values
``path`` like string but also accepts slashes
``uuid`` accepts UUID strings
========= ====================================
Convertors are used by prefixing them with a colon, like so:
.. code:: python
@router.route('/orders/{order_id:int}')
def orders():
return 'result from the fn'
Any unknown convertor will be parsed as a regex:
.. code:: python
@router.route('/orders/{order_id:\d{3}}')
def orders():
return 'result from the fn'
Multiple paths are supported as well:
.. code:: python
@router.route('/', '/home')
def index():
return 'index'
Handling HTTP methods:
.. code:: python
@router.route('/only-post', methods=['POST'])
def only_post():
return 'only-post'
Submounting routes:
.. code:: python
subrouter = Router()
@subrouter.route('/items/{item}')
def items():
pass
router = Router()
router.route('/api')(subrouter)
match = router('/api/items/12', method='GET')
assert match, 'HTTP path is ok'
assert match.target is items
assert match.params == {"item": "12"}
.. _bugtracker:
Bug tracker
===========
If you have any suggestions, bug reports or
annoyances please report them to the issue tracker
at https://github.com/klen/http-router/issues
.. _contributing:
Contributing
============
Development of the project happens at: https://github.com/klen/http-router
.. _license:
License
========
Licensed under a `MIT license`_.
.. _links:
.. _klen: https://github.com/klen
.. _MIT license: http://opensource.org/licenses/MIT