Metadata-Version: 2.1
Name: fastapi-extended-route
Version: 0.1.0
Summary: A small utility for FastAPI Router.
Home-page: https://github.com/aminalaee/fastapi_extended_route
Author: Amin Alaee
Author-email: mohammadamin.alaee@gmail.com
License: BSD
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Python: >=3.7
Description-Content-Type: text/markdown

# Opinionated FastAPI Extended Route

A small utility for FastAPI/Starlette Route and Request to address the following:

- `Request.url_for` doesn't allow adding `query parameters` at the moment.
- `URL` objects can't have multiple keys like `/?key=value&key=anothervalue`.

With the following changes:

- Make `Request.url_for` to match path parameters and use unmatched params for query parameters.
- Provide a custom `Route` which has a new `Request` type.
- Allow `URL` object to add multiple keys in `query params`.
- ...

Example:

```python
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse

from fastapi_extended_route import Request, Route

def index(request: Request) -> PlainTextResponse:
    url = request.url_for("index", key=value)
    # url == "http://testserver/?key=value"
    return PlainTextResponse(url)

app = FastAPI(
    routes=[Route("/", index, name="index")],
)
```

As you can see the only change is to use `Route` from the package and
the new `Request` object will have a customized `url_for` method which
handles both path parameters and query parameters.

If/when these options are available in Starlette/FastAPI, this is no longer needed.


