__init__.pyi 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. import sys
  2. from typing import (
  3. Any,
  4. Callable,
  5. Mapping,
  6. Sequence,
  7. overload,
  8. TypeVar,
  9. )
  10. # Because we need to type our own stuff, we have to make everything from
  11. # attr explicitly public too.
  12. from attr import __author__ as __author__
  13. from attr import __copyright__ as __copyright__
  14. from attr import __description__ as __description__
  15. from attr import __email__ as __email__
  16. from attr import __license__ as __license__
  17. from attr import __title__ as __title__
  18. from attr import __url__ as __url__
  19. from attr import __version__ as __version__
  20. from attr import __version_info__ as __version_info__
  21. from attr import assoc as assoc
  22. from attr import Attribute as Attribute
  23. from attr import AttrsInstance as AttrsInstance
  24. from attr import cmp_using as cmp_using
  25. from attr import converters as converters
  26. from attr import Converter as Converter
  27. from attr import evolve as evolve
  28. from attr import exceptions as exceptions
  29. from attr import Factory as Factory
  30. from attr import fields as fields
  31. from attr import fields_dict as fields_dict
  32. from attr import filters as filters
  33. from attr import has as has
  34. from attr import make_class as make_class
  35. from attr import NOTHING as NOTHING
  36. from attr import resolve_types as resolve_types
  37. from attr import setters as setters
  38. from attr import validate as validate
  39. from attr import validators as validators
  40. from attr import attrib, asdict as asdict, astuple as astuple
  41. from attr import NothingType as NothingType
  42. if sys.version_info >= (3, 11):
  43. from typing import dataclass_transform
  44. else:
  45. from typing_extensions import dataclass_transform
  46. _T = TypeVar("_T")
  47. _C = TypeVar("_C", bound=type)
  48. _EqOrderType = bool | Callable[[Any], Any]
  49. _ValidatorType = Callable[[Any, "Attribute[_T]", _T], Any]
  50. _CallableConverterType = Callable[[Any], Any]
  51. _ConverterType = _CallableConverterType | Converter[Any, Any]
  52. _ReprType = Callable[[Any], str]
  53. _ReprArgType = bool | _ReprType
  54. _OnSetAttrType = Callable[[Any, "Attribute[Any]", Any], Any]
  55. _OnSetAttrArgType = _OnSetAttrType | list[_OnSetAttrType] | setters._NoOpType
  56. _FieldTransformer = Callable[
  57. [type, list["Attribute[Any]"]], list["Attribute[Any]"]
  58. ]
  59. # FIXME: in reality, if multiple validators are passed they must be in a list
  60. # or tuple, but those are invariant and so would prevent subtypes of
  61. # _ValidatorType from working when passed in a list or tuple.
  62. _ValidatorArgType = _ValidatorType[_T] | Sequence[_ValidatorType[_T]]
  63. @overload
  64. def field(
  65. *,
  66. default: None = ...,
  67. validator: None = ...,
  68. repr: _ReprArgType = ...,
  69. hash: bool | None = ...,
  70. init: bool = ...,
  71. metadata: Mapping[Any, Any] | None = ...,
  72. converter: None = ...,
  73. factory: None = ...,
  74. kw_only: bool = ...,
  75. eq: bool | None = ...,
  76. order: bool | None = ...,
  77. on_setattr: _OnSetAttrArgType | None = ...,
  78. alias: str | None = ...,
  79. type: type | None = ...,
  80. ) -> Any: ...
  81. # This form catches an explicit None or no default and infers the type from the
  82. # other arguments.
  83. @overload
  84. def field(
  85. *,
  86. default: None = ...,
  87. validator: _ValidatorArgType[_T] | None = ...,
  88. repr: _ReprArgType = ...,
  89. hash: bool | None = ...,
  90. init: bool = ...,
  91. metadata: Mapping[Any, Any] | None = ...,
  92. converter: _ConverterType
  93. | list[_ConverterType]
  94. | tuple[_ConverterType]
  95. | None = ...,
  96. factory: Callable[[], _T] | None = ...,
  97. kw_only: bool = ...,
  98. eq: _EqOrderType | None = ...,
  99. order: _EqOrderType | None = ...,
  100. on_setattr: _OnSetAttrArgType | None = ...,
  101. alias: str | None = ...,
  102. type: type | None = ...,
  103. ) -> _T: ...
  104. # This form catches an explicit default argument.
  105. @overload
  106. def field(
  107. *,
  108. default: _T,
  109. validator: _ValidatorArgType[_T] | None = ...,
  110. repr: _ReprArgType = ...,
  111. hash: bool | None = ...,
  112. init: bool = ...,
  113. metadata: Mapping[Any, Any] | None = ...,
  114. converter: _ConverterType
  115. | list[_ConverterType]
  116. | tuple[_ConverterType]
  117. | None = ...,
  118. factory: Callable[[], _T] | None = ...,
  119. kw_only: bool = ...,
  120. eq: _EqOrderType | None = ...,
  121. order: _EqOrderType | None = ...,
  122. on_setattr: _OnSetAttrArgType | None = ...,
  123. alias: str | None = ...,
  124. type: type | None = ...,
  125. ) -> _T: ...
  126. # This form covers type=non-Type: e.g. forward references (str), Any
  127. @overload
  128. def field(
  129. *,
  130. default: _T | None = ...,
  131. validator: _ValidatorArgType[_T] | None = ...,
  132. repr: _ReprArgType = ...,
  133. hash: bool | None = ...,
  134. init: bool = ...,
  135. metadata: Mapping[Any, Any] | None = ...,
  136. converter: _ConverterType
  137. | list[_ConverterType]
  138. | tuple[_ConverterType]
  139. | None = ...,
  140. factory: Callable[[], _T] | None = ...,
  141. kw_only: bool = ...,
  142. eq: _EqOrderType | None = ...,
  143. order: _EqOrderType | None = ...,
  144. on_setattr: _OnSetAttrArgType | None = ...,
  145. alias: str | None = ...,
  146. type: type | None = ...,
  147. ) -> Any: ...
  148. @overload
  149. @dataclass_transform(field_specifiers=(attrib, field))
  150. def define(
  151. maybe_cls: _C,
  152. *,
  153. these: dict[str, Any] | None = ...,
  154. repr: bool = ...,
  155. unsafe_hash: bool | None = ...,
  156. hash: bool | None = ...,
  157. init: bool = ...,
  158. slots: bool = ...,
  159. frozen: bool = ...,
  160. weakref_slot: bool = ...,
  161. str: bool = ...,
  162. auto_attribs: bool = ...,
  163. kw_only: bool = ...,
  164. cache_hash: bool = ...,
  165. auto_exc: bool = ...,
  166. eq: bool | None = ...,
  167. order: bool | None = ...,
  168. auto_detect: bool = ...,
  169. getstate_setstate: bool | None = ...,
  170. on_setattr: _OnSetAttrArgType | None = ...,
  171. field_transformer: _FieldTransformer | None = ...,
  172. match_args: bool = ...,
  173. ) -> _C: ...
  174. @overload
  175. @dataclass_transform(field_specifiers=(attrib, field))
  176. def define(
  177. maybe_cls: None = ...,
  178. *,
  179. these: dict[str, Any] | None = ...,
  180. repr: bool = ...,
  181. unsafe_hash: bool | None = ...,
  182. hash: bool | None = ...,
  183. init: bool = ...,
  184. slots: bool = ...,
  185. frozen: bool = ...,
  186. weakref_slot: bool = ...,
  187. str: bool = ...,
  188. auto_attribs: bool = ...,
  189. kw_only: bool = ...,
  190. cache_hash: bool = ...,
  191. auto_exc: bool = ...,
  192. eq: bool | None = ...,
  193. order: bool | None = ...,
  194. auto_detect: bool = ...,
  195. getstate_setstate: bool | None = ...,
  196. on_setattr: _OnSetAttrArgType | None = ...,
  197. field_transformer: _FieldTransformer | None = ...,
  198. match_args: bool = ...,
  199. ) -> Callable[[_C], _C]: ...
  200. mutable = define
  201. @overload
  202. @dataclass_transform(frozen_default=True, field_specifiers=(attrib, field))
  203. def frozen(
  204. maybe_cls: _C,
  205. *,
  206. these: dict[str, Any] | None = ...,
  207. repr: bool = ...,
  208. unsafe_hash: bool | None = ...,
  209. hash: bool | None = ...,
  210. init: bool = ...,
  211. slots: bool = ...,
  212. frozen: bool = ...,
  213. weakref_slot: bool = ...,
  214. str: bool = ...,
  215. auto_attribs: bool = ...,
  216. kw_only: bool = ...,
  217. cache_hash: bool = ...,
  218. auto_exc: bool = ...,
  219. eq: bool | None = ...,
  220. order: bool | None = ...,
  221. auto_detect: bool = ...,
  222. getstate_setstate: bool | None = ...,
  223. on_setattr: _OnSetAttrArgType | None = ...,
  224. field_transformer: _FieldTransformer | None = ...,
  225. match_args: bool = ...,
  226. ) -> _C: ...
  227. @overload
  228. @dataclass_transform(frozen_default=True, field_specifiers=(attrib, field))
  229. def frozen(
  230. maybe_cls: None = ...,
  231. *,
  232. these: dict[str, Any] | None = ...,
  233. repr: bool = ...,
  234. unsafe_hash: bool | None = ...,
  235. hash: bool | None = ...,
  236. init: bool = ...,
  237. slots: bool = ...,
  238. frozen: bool = ...,
  239. weakref_slot: bool = ...,
  240. str: bool = ...,
  241. auto_attribs: bool = ...,
  242. kw_only: bool = ...,
  243. cache_hash: bool = ...,
  244. auto_exc: bool = ...,
  245. eq: bool | None = ...,
  246. order: bool | None = ...,
  247. auto_detect: bool = ...,
  248. getstate_setstate: bool | None = ...,
  249. on_setattr: _OnSetAttrArgType | None = ...,
  250. field_transformer: _FieldTransformer | None = ...,
  251. match_args: bool = ...,
  252. ) -> Callable[[_C], _C]: ...