Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

53 rader
1.7 KiB

  1. from typing import Any, Callable, Iterable, Type, TypeVar
  2. from starlette.datastructures import URL as URL # noqa: F401
  3. from starlette.datastructures import Address as Address # noqa: F401
  4. from starlette.datastructures import FormData as FormData # noqa: F401
  5. from starlette.datastructures import Headers as Headers # noqa: F401
  6. from starlette.datastructures import QueryParams as QueryParams # noqa: F401
  7. from starlette.datastructures import State as State # noqa: F401
  8. from starlette.datastructures import UploadFile as StarletteUploadFile
  9. class UploadFile(StarletteUploadFile):
  10. @classmethod
  11. def __get_validators__(cls: Type["UploadFile"]) -> Iterable[Callable[..., Any]]:
  12. yield cls.validate
  13. @classmethod
  14. def validate(cls: Type["UploadFile"], v: Any) -> Any:
  15. if not isinstance(v, StarletteUploadFile):
  16. raise ValueError(f"Expected UploadFile, received: {type(v)}")
  17. return v
  18. class DefaultPlaceholder:
  19. """
  20. You shouldn't use this class directly.
  21. It's used internally to recognize when a default value has been overwritten, even
  22. if the overridden default value was truthy.
  23. """
  24. def __init__(self, value: Any):
  25. self.value = value
  26. def __bool__(self) -> bool:
  27. return bool(self.value)
  28. def __eq__(self, o: object) -> bool:
  29. return isinstance(o, DefaultPlaceholder) and o.value == self.value
  30. DefaultType = TypeVar("DefaultType")
  31. def Default(value: DefaultType) -> DefaultType:
  32. """
  33. You shouldn't use this function directly.
  34. It's used internally to recognize when a default value has been overwritten, even
  35. if the overridden default value was truthy.
  36. """
  37. return DefaultPlaceholder(value) # type: ignore