You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					59 lines
				
				2.4 KiB
			
		
		
			
		
	
	
					59 lines
				
				2.4 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								from typing import Any, Callable, List, Optional, Sequence
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from fastapi.security.base import SecurityBase
							 | 
						||
| 
								 | 
							
								from pydantic.fields import ModelField
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class SecurityRequirement:
							 | 
						||
| 
								 | 
							
								    def __init__(
							 | 
						||
| 
								 | 
							
								        self, security_scheme: SecurityBase, scopes: Optional[Sequence[str]] = None
							 | 
						||
| 
								 | 
							
								    ):
							 | 
						||
| 
								 | 
							
								        self.security_scheme = security_scheme
							 | 
						||
| 
								 | 
							
								        self.scopes = scopes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Dependant:
							 | 
						||
| 
								 | 
							
								    def __init__(
							 | 
						||
| 
								 | 
							
								        self,
							 | 
						||
| 
								 | 
							
								        *,
							 | 
						||
| 
								 | 
							
								        path_params: Optional[List[ModelField]] = None,
							 | 
						||
| 
								 | 
							
								        query_params: Optional[List[ModelField]] = None,
							 | 
						||
| 
								 | 
							
								        header_params: Optional[List[ModelField]] = None,
							 | 
						||
| 
								 | 
							
								        cookie_params: Optional[List[ModelField]] = None,
							 | 
						||
| 
								 | 
							
								        body_params: Optional[List[ModelField]] = None,
							 | 
						||
| 
								 | 
							
								        dependencies: Optional[List["Dependant"]] = None,
							 | 
						||
| 
								 | 
							
								        security_schemes: Optional[List[SecurityRequirement]] = None,
							 | 
						||
| 
								 | 
							
								        name: Optional[str] = None,
							 | 
						||
| 
								 | 
							
								        call: Optional[Callable[..., Any]] = None,
							 | 
						||
| 
								 | 
							
								        request_param_name: Optional[str] = None,
							 | 
						||
| 
								 | 
							
								        websocket_param_name: Optional[str] = None,
							 | 
						||
| 
								 | 
							
								        http_connection_param_name: Optional[str] = None,
							 | 
						||
| 
								 | 
							
								        response_param_name: Optional[str] = None,
							 | 
						||
| 
								 | 
							
								        background_tasks_param_name: Optional[str] = None,
							 | 
						||
| 
								 | 
							
								        security_scopes_param_name: Optional[str] = None,
							 | 
						||
| 
								 | 
							
								        security_scopes: Optional[List[str]] = None,
							 | 
						||
| 
								 | 
							
								        use_cache: bool = True,
							 | 
						||
| 
								 | 
							
								        path: Optional[str] = None,
							 | 
						||
| 
								 | 
							
								    ) -> None:
							 | 
						||
| 
								 | 
							
								        self.path_params = path_params or []
							 | 
						||
| 
								 | 
							
								        self.query_params = query_params or []
							 | 
						||
| 
								 | 
							
								        self.header_params = header_params or []
							 | 
						||
| 
								 | 
							
								        self.cookie_params = cookie_params or []
							 | 
						||
| 
								 | 
							
								        self.body_params = body_params or []
							 | 
						||
| 
								 | 
							
								        self.dependencies = dependencies or []
							 | 
						||
| 
								 | 
							
								        self.security_requirements = security_schemes or []
							 | 
						||
| 
								 | 
							
								        self.request_param_name = request_param_name
							 | 
						||
| 
								 | 
							
								        self.websocket_param_name = websocket_param_name
							 | 
						||
| 
								 | 
							
								        self.http_connection_param_name = http_connection_param_name
							 | 
						||
| 
								 | 
							
								        self.response_param_name = response_param_name
							 | 
						||
| 
								 | 
							
								        self.background_tasks_param_name = background_tasks_param_name
							 | 
						||
| 
								 | 
							
								        self.security_scopes = security_scopes
							 | 
						||
| 
								 | 
							
								        self.security_scopes_param_name = security_scopes_param_name
							 | 
						||
| 
								 | 
							
								        self.name = name
							 | 
						||
| 
								 | 
							
								        self.call = call
							 | 
						||
| 
								 | 
							
								        self.use_cache = use_cache
							 | 
						||
| 
								 | 
							
								        # Store the path to be able to re-generate a dependable from it in overrides
							 | 
						||
| 
								 | 
							
								        self.path = path
							 | 
						||
| 
								 | 
							
								        # Save the cache key at creation to optimize performance
							 | 
						||
| 
								 | 
							
								        self.cache_key = (self.call, tuple(sorted(set(self.security_scopes or []))))
							 |