|
|
@ -126,14 +126,14 @@ def get_parameterless_sub_dependant(*, depends: params.Depends, path: str) -> De |
|
|
assert callable(depends.dependency), ( |
|
|
assert callable(depends.dependency), ( |
|
|
"A parameter-less dependency must have a callable dependency" |
|
|
"A parameter-less dependency must have a callable dependency" |
|
|
) |
|
|
) |
|
|
use_security_scopes: List[str] = [] |
|
|
own_oauth_scopes: List[str] = [] |
|
|
if isinstance(depends, params.Security) and depends.scopes: |
|
|
if isinstance(depends, params.Security) and depends.scopes: |
|
|
use_security_scopes.extend(depends.scopes) |
|
|
own_oauth_scopes.extend(depends.scopes) |
|
|
return get_dependant( |
|
|
return get_dependant( |
|
|
path=path, |
|
|
path=path, |
|
|
call=depends.dependency, |
|
|
call=depends.dependency, |
|
|
scope=depends.scope, |
|
|
scope=depends.scope, |
|
|
security_scopes=use_security_scopes, |
|
|
own_oauth_scopes=own_oauth_scopes, |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -232,7 +232,8 @@ def get_dependant( |
|
|
path: str, |
|
|
path: str, |
|
|
call: Callable[..., Any], |
|
|
call: Callable[..., Any], |
|
|
name: Optional[str] = None, |
|
|
name: Optional[str] = None, |
|
|
security_scopes: Optional[List[str]] = None, |
|
|
own_oauth_scopes: Optional[List[str]] = None, |
|
|
|
|
|
parent_oauth_scopes: Optional[List[str]] = None, |
|
|
use_cache: bool = True, |
|
|
use_cache: bool = True, |
|
|
scope: Union[Literal["function", "request"], None] = None, |
|
|
scope: Union[Literal["function", "request"], None] = None, |
|
|
) -> Dependant: |
|
|
) -> Dependant: |
|
|
@ -240,19 +241,18 @@ def get_dependant( |
|
|
call=call, |
|
|
call=call, |
|
|
name=name, |
|
|
name=name, |
|
|
path=path, |
|
|
path=path, |
|
|
security_scopes=security_scopes, |
|
|
|
|
|
use_cache=use_cache, |
|
|
use_cache=use_cache, |
|
|
scope=scope, |
|
|
scope=scope, |
|
|
|
|
|
own_oauth_scopes=own_oauth_scopes, |
|
|
|
|
|
parent_oauth_scopes=parent_oauth_scopes, |
|
|
) |
|
|
) |
|
|
|
|
|
current_scopes = (parent_oauth_scopes or []) + (own_oauth_scopes or []) |
|
|
path_param_names = get_path_param_names(path) |
|
|
path_param_names = get_path_param_names(path) |
|
|
endpoint_signature = get_typed_signature(call) |
|
|
endpoint_signature = get_typed_signature(call) |
|
|
signature_params = endpoint_signature.parameters |
|
|
signature_params = endpoint_signature.parameters |
|
|
if isinstance(call, SecurityBase): |
|
|
if isinstance(call, SecurityBase): |
|
|
use_scopes: List[str] = [] |
|
|
|
|
|
if isinstance(call, (OAuth2, OpenIdConnect)): |
|
|
|
|
|
use_scopes = security_scopes or use_scopes |
|
|
|
|
|
security_requirement = SecurityRequirement( |
|
|
security_requirement = SecurityRequirement( |
|
|
security_scheme=call, scopes=use_scopes |
|
|
security_scheme=call, scopes=current_scopes |
|
|
) |
|
|
) |
|
|
dependant.security_requirements.append(security_requirement) |
|
|
dependant.security_requirements.append(security_requirement) |
|
|
for param_name, param in signature_params.items(): |
|
|
for param_name, param in signature_params.items(): |
|
|
@ -275,17 +275,16 @@ def get_dependant( |
|
|
f'The dependency "{dependant.call.__name__}" has a scope of ' |
|
|
f'The dependency "{dependant.call.__name__}" has a scope of ' |
|
|
'"request", it cannot depend on dependencies with scope "function".' |
|
|
'"request", it cannot depend on dependencies with scope "function".' |
|
|
) |
|
|
) |
|
|
use_security_scopes = security_scopes or [] |
|
|
sub_own_oauth_scopes: List[str] = [] |
|
|
if isinstance(param_details.depends, params.Security): |
|
|
if isinstance(param_details.depends, params.Security): |
|
|
if param_details.depends.scopes: |
|
|
if param_details.depends.scopes: |
|
|
use_security_scopes = use_security_scopes + list( |
|
|
sub_own_oauth_scopes = list(param_details.depends.scopes) |
|
|
param_details.depends.scopes |
|
|
|
|
|
) |
|
|
|
|
|
sub_dependant = get_dependant( |
|
|
sub_dependant = get_dependant( |
|
|
path=path, |
|
|
path=path, |
|
|
call=param_details.depends.dependency, |
|
|
call=param_details.depends.dependency, |
|
|
name=param_name, |
|
|
name=param_name, |
|
|
security_scopes=use_security_scopes, |
|
|
own_oauth_scopes=sub_own_oauth_scopes, |
|
|
|
|
|
parent_oauth_scopes=current_scopes, |
|
|
use_cache=param_details.depends.use_cache, |
|
|
use_cache=param_details.depends.use_cache, |
|
|
scope=param_details.depends.scope, |
|
|
scope=param_details.depends.scope, |
|
|
) |
|
|
) |
|
|
@ -611,7 +610,7 @@ async def solve_dependencies( |
|
|
path=use_path, |
|
|
path=use_path, |
|
|
call=call, |
|
|
call=call, |
|
|
name=sub_dependant.name, |
|
|
name=sub_dependant.name, |
|
|
security_scopes=sub_dependant.security_scopes, |
|
|
parent_oauth_scopes=sub_dependant.oauth_scopes, |
|
|
scope=sub_dependant.scope, |
|
|
scope=sub_dependant.scope, |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
@ -693,7 +692,7 @@ async def solve_dependencies( |
|
|
values[dependant.response_param_name] = response |
|
|
values[dependant.response_param_name] = response |
|
|
if dependant.security_scopes_param_name: |
|
|
if dependant.security_scopes_param_name: |
|
|
values[dependant.security_scopes_param_name] = SecurityScopes( |
|
|
values[dependant.security_scopes_param_name] = SecurityScopes( |
|
|
scopes=dependant.security_scopes |
|
|
scopes=dependant.oauth_scopes |
|
|
) |
|
|
) |
|
|
return SolvedDependency( |
|
|
return SolvedDependency( |
|
|
values=values, |
|
|
values=values, |
|
|
|