Ge0rg3 / flask-parameter-validation

Get and validate all Flask input parameters with ease.
https://pypi.org/project/Flask-Parameter-Validation/
28 stars 12 forks source link

Error in Optional Alias #51

Closed Ge0rg3 closed 2 months ago

Ge0rg3 commented 2 months ago

When a parameter is Optional, the alias attribute breaks:

@app.route("/update/<int:id>", methods=["POST"])
@ValidateParameters()
def hello(
    id: int = Route(),
    username_json: str = Optional[Json(min_str_length=5, alias="username")],
):
    print(username_json)
    return "Hello World!"

->

[2024-07-11 17:38:06,794] ERROR in app: Exception on /update/2 [POST]
Traceback (most recent call last):
  File "/home/george/miniconda3/lib/python3.12/site-packages/flask/app.py", line 1473, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/george/miniconda3/lib/python3.12/site-packages/flask/app.py", line 882, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/george/miniconda3/lib/python3.12/site-packages/flask/app.py", line 880, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/george/miniconda3/lib/python3.12/site-packages/flask/app.py", line 865, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/george/repos/flask-parameter-validation/flask_parameter_validation/parameter_validation.py", line 110, in nested_func
    validated_inputs = nested_func_helper(**kwargs)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/george/repos/flask-parameter-validation/flask_parameter_validation/parameter_validation.py", line 86, in nested_func_helper
    new_input = self.validate(expected, request_inputs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/george/repos/flask-parameter-validation/flask_parameter_validation/parameter_validation.py", line 146, in validate
    if expected_delivery_type.alias:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/george/miniconda3/lib/python3.12/typing.py", line 1185, in __getattr__
    return getattr(self.__origin__, attr)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/george/miniconda3/lib/python3.12/typing.py", line 482, in __getattr__
    raise AttributeError(item)
AttributeError: alias
smt5541 commented 2 months ago

I think this is incorrect usage. Correct usage would be:

@app.route("/update/<int:id>", methods=["POST"])
@ValidateParameters()
def hello(
    id: int = Route(),
    username_json: Optional[str] = Json(min_str_length=5, alias="username"),
):
    print(username_json)
    return "Hello World!"

Please let me know if this resolved your issue.

Ge0rg3 commented 2 months ago

Lmao my bad think I was tired 😁