Home

Awesome

routrie

CI

A Python wrapper for Rust's path-tree router (path-tree repo, path-tree crate).

This is a blazingly fast HTTP URL router with support for matching path parameters and catch-all URLs.

Usage:

from routrie import Router, Param

# the generic parameter is the value being stored
# normally this will be an endpoint / route instance
router = Router(
  {
    "/users": 1,
    "/users/:id": 2,
    "/user/repo/*any": 3,
  }
)

matched = router.find("/foo-bar-baz")
assert matched is None

matched = router.find("/users/routrie")
assert matched is not None
value, params = matched
assert value == 2
assert params[0].name == "id"
assert params[0].value == "routrie"

matched = router.find("/users")
assert matched is not None
value, params = matched
assert value == 1
assert params == []

matched = router.find("/users/repos/)
assert matched is not None
value, params = matched
assert value == 3
assert params == []

matched = router.find("/users/repos/something)
assert matched is not None
value, params = matched
assert value == 3
assert params[0].name = "any"
assert params[0].value = "something"

Contributing

  1. Clone the repo.
  2. Run make init
  3. Run make test
  4. Make your changes
  5. Push and open a pull request
  6. Wait for CI to run.

If your pull request gets approved and merged, it will automatically be relased to PyPi (every commit to main is released).