fastlifeweb 0.26.1__py3-none-any.whl → 0.26.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- CHANGELOG.md +4 -0
- fastlife/__init__.py +1 -2
- fastlife/components/Form.jinja +1 -1
- fastlife/domain/model/response.py +40 -0
- fastlife/testing/testclient.py +6 -1
- {fastlifeweb-0.26.1.dist-info → fastlifeweb-0.26.2.dist-info}/METADATA +1 -1
- {fastlifeweb-0.26.1.dist-info → fastlifeweb-0.26.2.dist-info}/RECORD +10 -9
- {fastlifeweb-0.26.1.dist-info → fastlifeweb-0.26.2.dist-info}/WHEEL +0 -0
- {fastlifeweb-0.26.1.dist-info → fastlifeweb-0.26.2.dist-info}/entry_points.txt +0 -0
- {fastlifeweb-0.26.1.dist-info → fastlifeweb-0.26.2.dist-info}/licenses/LICENSE +0 -0
    
        CHANGELOG.md
    CHANGED
    
    
    
        fastlife/__init__.py
    CHANGED
    
    | @@ -2,8 +2,6 @@ from importlib import metadata | |
| 2 2 |  | 
| 3 3 | 
             
            __version__ = metadata.version("fastlifeweb")
         | 
| 4 4 |  | 
| 5 | 
            -
            from fastapi import Response
         | 
| 6 | 
            -
            from fastapi.responses import RedirectResponse
         | 
| 7 5 |  | 
| 8 6 | 
             
            from .adapters.fastapi.form import form_model
         | 
| 9 7 | 
             
            from .adapters.fastapi.localizer import Localizer
         | 
| @@ -26,6 +24,7 @@ from .config import ( | |
| 26 24 | 
             
            from .domain.model.asgi import ASGIRequest, ASGIResponse
         | 
| 27 25 | 
             
            from .domain.model.form import FormModel
         | 
| 28 26 | 
             
            from .domain.model.request import GenericRequest
         | 
| 27 | 
            +
            from .domain.model.response import RedirectResponse, Response
         | 
| 29 28 | 
             
            from .domain.model.security_policy import (
         | 
| 30 29 | 
             
                Allowed,
         | 
| 31 30 | 
             
                Anonymous,
         | 
    
        fastlife/components/Form.jinja
    CHANGED
    
    
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            from collections.abc import Mapping
         | 
| 2 | 
            +
            from urllib.parse import quote
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            from starlette.background import BackgroundTask
         | 
| 5 | 
            +
            from starlette.datastructures import URL
         | 
| 6 | 
            +
            from starlette.responses import Response
         | 
| 7 | 
            +
             | 
| 8 | 
            +
             | 
| 9 | 
            +
            class RedirectResponse(Response):
         | 
| 10 | 
            +
                """
         | 
| 11 | 
            +
                A redirect response for Post/Redirect/Get pattern.
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                The starlette default value status code is 307, which means that it is used
         | 
| 14 | 
            +
                as a way to replay the same query which is definitly not the most used case
         | 
| 15 | 
            +
                in web applications.
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                This is why the redirect response here is using 303 see other which
         | 
| 18 | 
            +
                ensure a GET request will be made for the redirection.
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                A new parameter hx_redirect exists in order to set the HX-Redirect header
         | 
| 21 | 
            +
                to follow a browser redirection from an ajax query.
         | 
| 22 | 
            +
                """
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def __init__(
         | 
| 25 | 
            +
                    self,
         | 
| 26 | 
            +
                    url: str | URL,
         | 
| 27 | 
            +
                    hx_redirect: bool = False,
         | 
| 28 | 
            +
                    status_code: int = 303,
         | 
| 29 | 
            +
                    headers: Mapping[str, str] | None = None,
         | 
| 30 | 
            +
                    background: BackgroundTask | None = None,
         | 
| 31 | 
            +
                ):
         | 
| 32 | 
            +
                    super().__init__(
         | 
| 33 | 
            +
                        content=b"", status_code=status_code, headers=headers, background=background
         | 
| 34 | 
            +
                    )
         | 
| 35 | 
            +
                    self.headers["HX-Redirect" if hx_redirect else "location"] = quote(
         | 
| 36 | 
            +
                        str(url), safe=":/%#?=@[]!$&'()*+,;"
         | 
| 37 | 
            +
                    )
         | 
| 38 | 
            +
             | 
| 39 | 
            +
             | 
| 40 | 
            +
            __all__ = ["Response", "RedirectResponse"]
         | 
    
        fastlife/testing/testclient.py
    CHANGED
    
    | @@ -158,9 +158,14 @@ class WebTestClient: | |
| 158 158 | 
             
                            method = "GET"
         | 
| 159 159 | 
             
                            headers = None
         | 
| 160 160 | 
             
                            content = None
         | 
| 161 | 
            +
                        url = resp.headers.get("location")
         | 
| 162 | 
            +
                        if "HX-Redirect" in resp.headers:
         | 
| 163 | 
            +
                            # Redirection requested to the browser from an AJAX request.
         | 
| 164 | 
            +
                            url = resp.headers["HX-Redirect"]
         | 
| 165 | 
            +
                        assert url, "Redirect response without a redirection"
         | 
| 161 166 | 
             
                        return self.request(
         | 
| 162 167 | 
             
                            method=method,
         | 
| 163 | 
            -
                            url= | 
| 168 | 
            +
                            url=url,
         | 
| 164 169 | 
             
                            content=content,
         | 
| 165 170 | 
             
                            headers=headers,
         | 
| 166 171 | 
             
                            max_redirects=max_redirects - 1,
         | 
| @@ -1,5 +1,5 @@ | |
| 1 | 
            -
            CHANGELOG.md,sha256= | 
| 2 | 
            -
            fastlife/__init__.py,sha256= | 
| 1 | 
            +
            CHANGELOG.md,sha256=NqlUm-TificrXs2dKAL5-1_6i3Eo74MRksoaa0RBS1k,8830
         | 
| 2 | 
            +
            fastlife/__init__.py,sha256=Fe8JiQyKIN1WGagUGFct-QBW8-Ku5vXhc_7BkFUGcWk,2475
         | 
| 3 3 | 
             
            fastlife/adapters/__init__.py,sha256=imPD1hImpgrYkvUJRhHA5kVyGAua7VbP2WGkhSWKJT8,93
         | 
| 4 4 | 
             
            fastlife/adapters/fastapi/__init__.py,sha256=1goV1FGFP04TGyskJBLKZam4Gvt1yoAvLMNs4ekWSSQ,243
         | 
| 5 5 | 
             
            fastlife/adapters/fastapi/form.py,sha256=csxsDI6RK-g41pMwFhaVQCLDhF7dAZzgUp-VcrC3NFY,823
         | 
| @@ -49,7 +49,7 @@ fastlife/components/Button.jinja,sha256=itKU-ct45XissU33yfmTekyHsNe00fr4RQL-e9cx | |
| 49 49 | 
             
            fastlife/components/Checkbox.jinja,sha256=g62A1LR8TaN60h94pE2e5l9_eMmgnhVVE9HVCQtVVMo,748
         | 
| 50 50 | 
             
            fastlife/components/CsrfToken.jinja,sha256=mS0q-3_hAevl_waWEPaN0QAYOBzMyzl-W1PSpEHUBA0,215
         | 
| 51 51 | 
             
            fastlife/components/Details.jinja,sha256=NtQX-V3kcp1CV1GkrMkj5fc-KHPZHshWkrhXAZ8E3ms,736
         | 
| 52 | 
            -
            fastlife/components/Form.jinja,sha256= | 
| 52 | 
            +
            fastlife/components/Form.jinja,sha256=p4HNIpjDLJT0oH_Vbv6_lYV0tuG_2Xu5E2vZ-yJWrT8,2081
         | 
| 53 53 | 
             
            fastlife/components/H1.jinja,sha256=fWZtTq34qN9gwGgDF91lkypxaXvGN_OTmUY7XUHIpw0,370
         | 
| 54 54 | 
             
            fastlife/components/H2.jinja,sha256=o7Q-oR_zDtItV5A7QWfEo_LoMw6bR44YNBDQP3ao1bg,370
         | 
| 55 55 | 
             
            fastlife/components/H3.jinja,sha256=cZHJTVER1LVYWAwP3sR-23Ktbk9WYlLgLnr2Dz_0oqU,370
         | 
| @@ -1701,6 +1701,7 @@ fastlife/domain/model/asgi.py,sha256=Cz45TZOtrh2pBVZr37aJ9jpnJH9BeNHrsvk9bq1nBc0 | |
| 1701 1701 | 
             
            fastlife/domain/model/csrf.py,sha256=BUiWK-S7rVciWHO1qTkM8e_KxzpF6gGC4MMJK1v6iDo,414
         | 
| 1702 1702 | 
             
            fastlife/domain/model/form.py,sha256=JP6uumlZBYhiPxzcdxOsfsFm5BRfvkDFvlUCD6Vy8dI,3275
         | 
| 1703 1703 | 
             
            fastlife/domain/model/request.py,sha256=HgUSnUu3q18e07y57PadN3pPQwYrIZS1YEhYkBZ_Zfg,2674
         | 
| 1704 | 
            +
            fastlife/domain/model/response.py,sha256=Vsd2zYGGhH0D2DlfiKz1CX9OJZ_ZYoEv_-foMZpDFZo,1294
         | 
| 1704 1705 | 
             
            fastlife/domain/model/security_policy.py,sha256=f9SLi54vvRU-KSPJ5K0unoqYpkxIyzuZjKf2Ylwf5Rg,4796
         | 
| 1705 1706 | 
             
            fastlife/domain/model/template.py,sha256=z9oxdKme1hMPuvk7mBiKR_tuVY8TqH77aTYqMgvEGl8,876
         | 
| 1706 1707 | 
             
            fastlife/domain/model/types.py,sha256=64jJKFAi5x0e3vr8naHU1m_as0Qy8MS-s9CG0z6K1qc,381
         | 
| @@ -1730,11 +1731,11 @@ fastlife/testing/__init__.py,sha256=VpxkS3Zp3t_hH8dBiLaGFGhsvt511dhBS_8fMoFXdmU, | |
| 1730 1731 | 
             
            fastlife/testing/dom.py,sha256=q2GFrHWjwKMMTR0dsP3J-rXSxojZy8rOQ-07h2gfLKA,5869
         | 
| 1731 1732 | 
             
            fastlife/testing/form.py,sha256=diiGfVMfNt19JTNUxlnbGfcbskR3ZMpk0Y-A57vfShc,7871
         | 
| 1732 1733 | 
             
            fastlife/testing/session.py,sha256=LEFFbiR67_x_g-ioudkY0C7PycHdbDfaIaoo_G7GXQ8,2226
         | 
| 1733 | 
            -
            fastlife/testing/testclient.py,sha256= | 
| 1734 | 
            +
            fastlife/testing/testclient.py,sha256=gqgHQalhrLLZ8eveN2HeuoG9ne8CwxCm-Ll4b7jo9Xo,7249
         | 
| 1734 1735 | 
             
            fastlife/views/__init__.py,sha256=zG8gveL8e2zBdYx6_9jtZfpQ6qJT-MFnBY3xXkLwHZI,22
         | 
| 1735 1736 | 
             
            fastlife/views/pydantic_form.py,sha256=o7EUItciAGL1OSaGNHo-3BTrYAk34GuWE7zGikjiAGY,1486
         | 
| 1736 | 
            -
            fastlifeweb-0.26. | 
| 1737 | 
            -
            fastlifeweb-0.26. | 
| 1738 | 
            -
            fastlifeweb-0.26. | 
| 1739 | 
            -
            fastlifeweb-0.26. | 
| 1740 | 
            -
            fastlifeweb-0.26. | 
| 1737 | 
            +
            fastlifeweb-0.26.2.dist-info/METADATA,sha256=btOasL9jb9IiIrj9yPnrSW60e3T8Xpxy2Abu0hBBcb8,3690
         | 
| 1738 | 
            +
            fastlifeweb-0.26.2.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
         | 
| 1739 | 
            +
            fastlifeweb-0.26.2.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
         | 
| 1740 | 
            +
            fastlifeweb-0.26.2.dist-info/licenses/LICENSE,sha256=JFWuiKYRXKKMEAsX0aZp3hBcju-HYflJ2rwJAGwbCJo,1080
         | 
| 1741 | 
            +
            fastlifeweb-0.26.2.dist-info/RECORD,,
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         |