コード例 #1
0
def test_optional_list_of_str_param():
    @serde
    class Params:
        p: Optional[List[str]] = None

    params = from_url(Params, "?p=1")
    assert params.p == ["1"]
    params = from_url(Params, "")
    assert params.p is None
コード例 #2
0
def test_int_param():
    @serde
    class Params:
        p: int

    params = from_url(Params, "?p=1")
    assert params.p == 1
    with pytest.raises(InvalidPageParametersError):
        from_url(Params, "")
コード例 #3
0
def test_optional_str_param():
    @serde
    class Params:
        p: Optional[str] = None

    params = from_url(Params, "?p=1")
    assert params.p == "1"
    params = from_url(Params, "")
    assert params.p is None
コード例 #4
0
def test_list_of_str_param():
    @serde
    class Params:
        p: List[str]

    params = from_url(Params, "?p=1")
    assert params.p == ["1"]
    with pytest.raises(InvalidPageParametersError):
        from_url(Params, "")
コード例 #5
0
def test_bool_param():
    @serde
    class Params:
        p: bool

    params = from_url(Params, "?p=true")
    assert params.p is True
    params = from_url(Params, "?p=false")
    assert params.p is False
コード例 #6
0
def test_optional_list_of_float_param():
    @serde
    class Params:
        p: Optional[List[float]] = None

    params = from_url(Params, "?p=1")
    assert params.p == [1.0]
    params = from_url(Params, "")
    assert params.p is None
コード例 #7
0
def test_list_of_float_param():
    @serde
    class Params:
        p: List[float]

    params = from_url(Params, "?p=1")
    assert params.p == [1.0]
    with pytest.raises(InvalidPageParametersError):
        from_url(Params, "")
コード例 #8
0
def test_optional_float_param():
    @serde
    class Params:
        p: Optional[float] = None

    params = from_url(Params, "?p=1")
    assert isinstance(params.p, float)
    assert params.p == 1.0
    params = from_url(Params, "")
    assert params.p is None
コード例 #9
0
def test_optional_int_param():
    @serde
    class Params:
        p: Optional[int] = None

    params = from_url(Params, "?p=1")
    assert isinstance(params.p, int)
    assert params.p == 1
    params = from_url(Params, "")
    assert params.p is None
コード例 #10
0
def test_optional_bool_param():
    @serde
    class Params:
        p: Optional[bool] = None

    params = from_url(Params, "?p=true")
    assert params.p is True
    params = from_url(Params, "?p=false")
    assert params.p is False
    params = from_url(Params, "")
    assert params.p is None
コード例 #11
0
def test_ignore_unknown_flag():
    @serde
    class StrictParams:
        a: Optional[int] = None

    with pytest.raises(InvalidPageParametersError) as e:
        from_url(StrictParams, "?foo=1", ignore_unknown=False)
    assert "unexpected parameter foo" in str(e.value)

    @serde
    class NonStrictParams:
        a: Optional[int] = None

    from_url(NonStrictParams, "?foo=1")
コード例 #12
0
    def render_page(pathname: str, param_string: str, current_path_data):
        if pathname is None:
            raise PreventUpdate
        logger.debug("Attempting to render page %s", pathname)
        if pathname != "/" and pathname.endswith("/") or pathname.endswith(
                "#"):
            pathname = pathname[:-1]
        if current_path_data:
            # If nothing in the path / param_string has changed, don't actually do anything.
            # NOTE: this is kind of a hack, since sometimes we have buttons w/ href='#',
            # and we don't want to actually re-render the pages content when clicked.
            if (current_path_data["pathname"] == pathname
                    and current_path_data["param_string"] == param_string):
                raise PreventUpdate
        updated_data = {"pathname": pathname, "param_string": param_string}
        try:
            PageClass = Page.by_name(pathname)
            if PageClass.permissions:
                if not current_user.is_authenticated:
                    PageClass = Page.by_name("/login")
                    params = PageClass.Params(next_pathname=pathname,
                                              next_params=param_string)
                    return PageClass.from_params(params).render() + (
                        None, updated_data)
                if PageClass.permissions > current_user.permissions:
                    raise NotPermittedError(
                        "You do not have adequate permissions to view this page"
                    )

            params = from_url(PageClass.Params, param_string)
            return PageClass.from_params(params).render() + (None,
                                                             updated_data)
        except RegistrationError:
            return (
                [],
                [],
                [],
                dbc.Toast(f"Page {pathname} not found",
                          header="404",
                          icon="danger"),
                updated_data,
            )
        except InvalidPageParametersError as e:
            return (
                [],
                [],
                [],
                dbc.Toast(str(e), header="Bad page parameters", icon="danger"),
                updated_data,
            )
        except Exception as e:
            logger.exception(e)
            return (
                [],
                [],
                [],
                dbc.Toast(str(e), header=e.__class__.__name__, icon="danger"),
                updated_data,
            )
コード例 #13
0
def test_from_url_and_serialize():
    @serde
    class Params:
        a: int

    params = from_url(Params, "?a=1")
    assert params.a == 1
    assert params == deserialize(Params, serialize(params))