1"""
 2Type stubs for typed password fields.
 3
 4These stubs tell type checkers that field constructors return primitive types,
 5enabling typed model definitions like:
 6    password: str = types.PasswordField()
 7
 8At runtime, these are Field instances (descriptors), but type checkers see the primitives.
 9
10The return type is conditional on allow_null:
11- allow_null=False (default) returns str
12- allow_null=True returns str | None
13"""
14
15from collections.abc import Callable, Sequence
16from typing import Any, Literal, overload
17
18# PasswordField extends CharField with password-specific hashing
19@overload
20def PasswordField(
21    *,
22    required: bool = True,
23    allow_null: Literal[True],
24    default: Any = ...,
25    choices: Any = None,
26    validators: Sequence[Callable[..., Any]] = (),
27    error_messages: dict[str, str] | None = None,
28) -> str | None: ...
29@overload
30def PasswordField(
31    *,
32    required: bool = True,
33    allow_null: Literal[False] = False,
34    default: Any = ...,
35    choices: Any = None,
36    validators: Sequence[Callable[..., Any]] = (),
37    error_messages: dict[str, str] | None = None,
38) -> str: ...