Skip to content

adriangb/routrie

Folders and files

NameName
Last commit message
Last commit date

Latest commit

8e6a386 · Sep 27, 2022

History

28 Commits
Sep 23, 2022
Sep 27, 2022
Sep 26, 2022
Jan 12, 2022
Jun 18, 2022
Sep 26, 2022
Sep 26, 2022
Jan 12, 2022
Jun 18, 2022
Jul 2, 2022
Sep 23, 2022
Sep 23, 2022
Jun 18, 2022
Sep 23, 2022
Sep 23, 2022

Repository files navigation

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