--- /dev/null
+import datetime
+from collections.abc import Iterable, Sequence
+from typing import Callable, NoReturn, Type
+from typing_extensions import Literal
+
+from google.cloud.ndb import exceptions, key as key_module, query as query_module, tasklets as tasklets_module
+
+Key = key_module.Key
+Rollback = exceptions.Rollback
+BlobKey: object
+GeoPt: object
+
+class KindError(exceptions.BadValueError): ...
+class InvalidPropertyError(exceptions.Error): ...
+
+BadProjectionError = InvalidPropertyError
+
+class UnprojectedPropertyError(exceptions.Error): ...
+class ReadonlyPropertyError(exceptions.Error): ...
+class ComputedPropertyError(ReadonlyPropertyError): ...
+class UserNotFoundError(exceptions.Error): ...
+
+class _NotEqualMixin:
+ def __ne__(self, other: object) -> bool: ...
+
+DirectionT = Literal["asc", "desc"]
+
+class IndexProperty(_NotEqualMixin):
+ def __new__(cls, name: str, direction: DirectionT) -> IndexProperty: ...
+ @property
+ def name(self) -> str: ...
+ @property
+ def direction(self) -> DirectionT: ...
+ def __eq__(self, other: object) -> bool: ...
+ def __hash__(self) -> int: ...
+
+class Index(_NotEqualMixin):
+ def __new__(cls, kind: str, properties: list[IndexProperty], ancestor: bool) -> Index: ...
+ @property
+ def kind(self) -> str: ...
+ @property
+ def properties(self) -> list[IndexProperty]: ...
+ @property
+ def ancestor(self) -> bool: ...
+ def __eq__(self, other) -> bool: ...
+ def __hash__(self) -> int: ...
+
+class IndexState(_NotEqualMixin):
+ def __new__(cls, definition, state, id): ...
+ @property
+ def definition(self): ...
+ @property
+ def state(self): ...
+ @property
+ def id(self): ...
+ def __eq__(self, other) -> bool: ...
+ def __hash__(self) -> int: ...
+
+class ModelAdapter:
+ def __new__(cls, *args, **kwargs) -> ModelAdapter: ...
+
+def make_connection(*args, **kwargs) -> NoReturn: ...
+
+class ModelAttribute: ...
+
+class _BaseValue(_NotEqualMixin):
+ b_val: object = ...
+ def __init__(self, b_val) -> None: ...
+ def __eq__(self, other) -> bool: ...
+ def __hash__(self) -> int: ...
+
+class Property(ModelAttribute):
+ def __init__(
+ self,
+ name: str | None = ...,
+ indexed: bool | None = ...,
+ repeated: bool | None = ...,
+ required: bool | None = ...,
+ default: object | None = ...,
+ choices: Iterable[object] | None = ...,
+ validator: Callable[[Property], object] | None = ...,
+ verbose_name: str | None = ...,
+ write_empty_list: bool | None = ...,
+ ) -> None: ...
+ def __eq__(self, value: object) -> query_module.FilterNode: ... # type: ignore[override]
+ def __ne__(self, value: object) -> query_module.FilterNode: ... # type: ignore[override]
+ def __lt__(self, value: object) -> query_module.FilterNode: ...
+ def __le__(self, value: object) -> query_module.FilterNode: ...
+ def __gt__(self, value: object) -> query_module.FilterNode: ...
+ def __ge__(self, value: object) -> query_module.FilterNode: ...
+ def IN(self, value: Iterable[object]) -> query_module.DisjunctionNode | query_module.FilterNode | query_module.FalseNode: ...
+ def __neg__(self) -> query_module.PropertyOrder: ...
+ def __pos__(self) -> query_module.PropertyOrder: ...
+ def __set__(self, entity: Model, value: object) -> None: ...
+ def __delete__(self, entity: Model) -> None: ...
+
+class ModelKey(Property):
+ def __init__(self) -> None: ...
+ def __get__(self, entity: Model, unused_cls: Type[Model] | None = ...) -> key_module.Key | list[key_module.Key] | None: ...
+
+class BooleanProperty(Property):
+ def __get__(self, entity: Model, unused_cls: Type[Model] | None = ...) -> bool | list[bool] | None: ...
+
+class IntegerProperty(Property):
+ def __get__(self, entity: Model, unused_cls: Type[Model] | None = ...) -> int | list[int] | None: ...
+
+class FloatProperty(Property):
+ def __get__(self, entity: Model, unused_cls: Type[Model] | None = ...) -> float | list[float] | None: ...
+
+class _CompressedValue(bytes):
+ z_val: bytes = ...
+ def __init__(self, z_val: bytes) -> None: ...
+ def __eq__(self, other: object) -> bool: ...
+ def __hash__(self) -> NoReturn: ...
+
+class BlobProperty(Property):
+ def __init__(
+ self,
+ name: str | None = ...,
+ compressed: bool | None = ...,
+ indexed: bool | None = ...,
+ repeated: bool | None = ...,
+ required: bool | None = ...,
+ default: bytes | None = ...,
+ choices: Iterable[bytes] | None = ...,
+ validator: Callable[[Property], object] | None = ...,
+ verbose_name: str | None = ...,
+ write_empty_list: bool | None = ...,
+ ) -> None: ...
+ def __get__(self, entity: Model, unused_cls: Type[Model] | None = ...) -> bytes | list[bytes] | None: ...
+
+class CompressedTextProperty(BlobProperty):
+ def __init__(self, *args, **kwargs) -> None: ...
+
+class TextProperty(Property):
+ def __new__(cls, *args, **kwargs): ...
+ def __init__(self, *args, **kwargs) -> None: ...
+ def __get__(self, entity: Model, unused_cls: Type[Model] | None = ...) -> str | list[str] | None: ...
+
+class StringProperty(TextProperty):
+ def __init__(self, *args, **kwargs) -> None: ...
+
+class GeoPtProperty(Property): ...
+class PickleProperty(BlobProperty): ...
+
+class JsonProperty(BlobProperty):
+ def __init__(
+ self,
+ name: str | None = ...,
+ compressed: bool | None = ...,
+ json_type: type | None = ...,
+ indexed: bool | None = ...,
+ repeated: bool | None = ...,
+ required: bool | None = ...,
+ default: object | None = ...,
+ choices: Iterable[object] | None = ...,
+ validator: Callable[[Property], object] | None = ...,
+ verbose_name: str | None = ...,
+ write_empty_list: bool | None = ...,
+ ) -> None: ...
+
+class User:
+ def __init__(self, email: str | None = ..., _auth_domain: str | None = ..., _user_id: str | None = ...) -> None: ...
+ def nickname(self) -> str: ...
+ def email(self): ...
+ def user_id(self) -> str | None: ...
+ def auth_domain(self) -> str: ...
+ def __hash__(self) -> int: ...
+ def __eq__(self, other: object) -> bool: ...
+ def __lt__(self, other: object) -> bool: ...
+
+class UserProperty(Property):
+ def __init__(
+ self,
+ name: str | None = ...,
+ auto_current_user: bool | None = ...,
+ auto_current_user_add: bool | None = ...,
+ indexed: bool | None = ...,
+ repeated: bool | None = ...,
+ required: bool | None = ...,
+ default: bytes | None = ...,
+ choices: Iterable[bytes] | None = ...,
+ validator: Callable[[Property], object] | None = ...,
+ verbose_name: str | None = ...,
+ write_empty_list: bool | None = ...,
+ ) -> None: ...
+
+class KeyProperty(Property):
+ def __init__(
+ self,
+ name: str | None = ...,
+ kind: Type[Model] | str | None = ...,
+ indexed: bool | None = ...,
+ repeated: bool | None = ...,
+ required: bool | None = ...,
+ default: key_module.Key | None = ...,
+ choices: Iterable[key_module.Key] | None = ...,
+ validator: Callable[[Property, key_module.Key], bool] | None = ...,
+ verbose_name: str | None = ...,
+ write_empty_list: bool | None = ...,
+ ) -> None: ...
+
+class BlobKeyProperty(Property): ...
+
+class DateTimeProperty(Property):
+ def __init__(
+ self,
+ name: str | None = ...,
+ auto_now: bool | None = ...,
+ auto_now_add: bool | None = ...,
+ tzinfo: datetime.tzinfo | None = ...,
+ indexed: bool | None = ...,
+ repeated: bool | None = ...,
+ required: bool | None = ...,
+ default: datetime.datetime | None = ...,
+ choices: Iterable[datetime.datetime] | None = ...,
+ validator: Callable[[Property, object], bool] | None = ...,
+ verbose_name: str | None = ...,
+ write_empty_list: bool | None = ...,
+ ) -> None: ...
+
+class DateProperty(DateTimeProperty): ...
+class TimeProperty(DateTimeProperty): ...
+
+class StructuredProperty(Property):
+ def __init__(self, model_class: type, name: str | None = ..., **kwargs) -> None: ...
+ def __getattr__(self, attrname): ...
+ def IN(self, value: Iterable[object]) -> query_module.DisjunctionNode | query_module.FalseNode: ...
+
+class LocalStructuredProperty(BlobProperty):
+ def __init__(self, model_class: Type[Model], **kwargs) -> None: ...
+
+class GenericProperty(Property):
+ def __init__(self, name: str | None = ..., compressed: bool = ..., **kwargs) -> None: ...
+
+class ComputedProperty(GenericProperty):
+ def __init__(
+ self,
+ func: Callable[[Model], object],
+ name: str | None = ...,
+ indexed: bool | None = ...,
+ repeated: bool | None = ...,
+ verbose_name: str | None = ...,
+ ) -> None: ...
+
+class MetaModel(type):
+ def __init__(cls, name: str, bases, classdict) -> None: ...
+
+class Model(_NotEqualMixin, metaclass=MetaModel):
+ key: ModelKey = ...
+ def __init__(_self, **kwargs) -> None: ...
+ def __hash__(self) -> NoReturn: ...
+ def __eq__(self, other: object) -> bool: ...
+ @classmethod
+ def gql(cls: Type[Model], query_string: str, *args, **kwargs) -> query_module.Query: ...
+ def put(self, **kwargs): ...
+ def put_async(self, **kwargs) -> tasklets_module.Future: ...
+ @classmethod
+ def query(cls: Type[Model], *args, **kwargs) -> query_module.Query: ...
+ @classmethod
+ def allocate_ids(
+ cls: Type[Model],
+ size: int | None = ...,
+ max: int | None = ...,
+ parent: key_module.Key | None = ...,
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options=...,
+ ) -> tuple[key_module.Key, key_module.Key]: ...
+ @classmethod
+ def allocate_ids_async(
+ cls: Type[Model],
+ size: int | None = ...,
+ max: int | None = ...,
+ parent: key_module.Key | None = ...,
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options=...,
+ ) -> tasklets_module.Future: ...
+ @classmethod
+ def get_by_id(
+ cls: Type[Model],
+ id: int | str | None,
+ parent: key_module.Key | None = ...,
+ namespace: str | None = ...,
+ project: str | None = ...,
+ app: str | None = ...,
+ read_consistency: Literal["EVENTUAL"] | None = ...,
+ read_policy: Literal["EVENTUAL"] | None = ...,
+ transaction: bytes | None = ...,
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options=...,
+ ) -> tasklets_module.Future: ...
+ @classmethod
+ def get_by_id_async(
+ cls: Type[Model],
+ id: int | str,
+ parent: key_module.Key | None = ...,
+ namespace: str | None = ...,
+ project: str | None = ...,
+ app: str | None = ...,
+ read_consistency: Literal["EVENTUAL"] | None = ...,
+ read_policy: Literal["EVENTUAL"] | None = ...,
+ transaction: bytes | None = ...,
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options=...,
+ ) -> Model | None: ...
+ @classmethod
+ def get_or_insert(
+ cls: Type[Model],
+ name: str,
+ parent: key_module.Key | None = ...,
+ namespace: str | None = ...,
+ project: str | None = ...,
+ app: str | None = ...,
+ read_consistency: Literal["EVENTUAL"] | None = ...,
+ read_policy: Literal["EVENTUAL"] | None = ...,
+ transaction: bytes | None = ...,
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options=...,
+ **kw_model_args,
+ ) -> Model: ...
+ @classmethod
+ def get_or_insert_async(
+ cls: Type[Model],
+ name: str,
+ parent: key_module.Key | None = ...,
+ namespace: str | None = ...,
+ project: str | None = ...,
+ app: str | None = ...,
+ read_consistency: Literal["EVENTUAL"] | None = ...,
+ read_policy: Literal["EVENTUAL"] | None = ...,
+ transaction: bytes | None = ...,
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options=...,
+ **kw_model_args,
+ ) -> tasklets_module.Future: ...
+ def populate(self, **kwargs) -> None: ...
+ def has_complete_key(self) -> bool: ...
+ def to_dict(
+ self,
+ include: list[object] | tuple[object, object] | set[object] | None = ...,
+ exclude: list[object] | tuple[object, object] | set[object] | None = ...,
+ ): ...
+
+class Expando(Model):
+ def __getattr__(self, name: str): ...
+ def __setattr__(self, name: str, value) -> None: ...
+ def __delattr__(self, name: str) -> None: ...
+
+def get_multi_async(
+ keys: Sequence[Type[key_module.Key]],
+ read_consistency: Literal["EVENTUAL"] | None = ...,
+ read_policy: Literal["EVENTUAL"] | None = ...,
+ transaction: bytes | None = ...,
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options: object | None = ...,
+) -> list[Type[tasklets_module.Future]]: ...
+def get_multi(
+ keys: Sequence[Type[key_module.Key]],
+ read_consistency: Literal["EVENTUAL"] | None = ...,
+ read_policy: Literal["EVENTUAL"] | None = ...,
+ transaction: bytes | None = ...,
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options: object | None = ...,
+) -> list[Type[Model] | None]: ...
+def put_multi_async(
+ entities: list[Type[Model]],
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options: object | None = ...,
+) -> list[tasklets_module.Future]: ...
+def put_multi(
+ entities: list[Model],
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options: object | None = ...,
+) -> list[key_module.Key]: ...
+def delete_multi_async(
+ keys: list[key_module.Key],
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options: object | None = ...,
+) -> list[tasklets_module.Future]: ...
+def delete_multi(
+ keys: Sequence[key_module.Key],
+ retries: int | None = ...,
+ timeout: float | None = ...,
+ deadline: float | None = ...,
+ use_cache: bool | None = ...,
+ use_global_cache: bool | None = ...,
+ global_cache_timeout: int | None = ...,
+ use_datastore: bool | None = ...,
+ use_memcache: bool | None = ...,
+ memcache_timeout: int | None = ...,
+ max_memcache_items: int | None = ...,
+ force_writes: bool | None = ...,
+ _options: object | None = ...,
+) -> list[None]: ...
+def get_indexes_async(**options: object) -> NoReturn: ...
+def get_indexes(**options: object) -> NoReturn: ...