Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Type Hints #354

Draft
wants to merge 7 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions requirements_dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ coverage
Sphinx
pytest
pytest-cov
mypy
31 changes: 31 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,37 @@
url='https://github.com/touilleMan/umongo',
packages=['umongo', 'umongo.frameworks'],
include_package_data=True,
package_data={
'umongo': [
"py.typed",
"__init__.pyi",
"abstract.pyi",
"builder.pyi",
"data_objects.pyi",
"data_proxy.pyi",
"document.pyi",
"embedded_document.pyi",
"exceptions.pyi",
"expose_missing.pyi",
"fields.pyi",
"i18n.pyi",
"indexes.pyi",
"instance.pyi",
"marshmallow_bonus.pyi",
"mixin.pyi",
"query_wrapper.pyi",
"template.pyi",
"validate.pyi",
],
'umongo.frameworks': [
"__init__.pyi",
"mongomock.pyi",
"motor_asyncio.pyi",
"pymongo.pyi",
"tools.pyi",
"txmongo.pyi",
]
},
python_requires='>=3.7',
install_requires=requirements,
extras_require={
Expand Down
28 changes: 28 additions & 0 deletions umongo/__init__.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from . import fields as fields, validate as validate
from .data_objects import Reference as Reference
from .document import (
Document as Document,
post_dump as post_dump,
post_load as post_load,
pre_dump as pre_dump,
pre_load as pre_load,
validates_schema as validates_schema,
)
from .embedded_document import EmbeddedDocument as EmbeddedDocument
from .exceptions import (
AlreadyCreatedError as AlreadyCreatedError,
DeleteError as DeleteError,
NoneReferenceError as NoneReferenceError,
NotCreatedError as NotCreatedError,
UMongoError as UMongoError,
UnknownFieldInDBError as UnknownFieldInDBError,
UpdateError as UpdateError,
)
from .expose_missing import (
ExposeMissing as ExposeMissing,
RemoveMissingSchema as RemoveMissingSchema,
)
from .i18n import set_gettext as set_gettext
from .instance import Instance as Instance
from .mixin import MixinDocument as MixinDocument
from marshmallow import ValidationError as ValidationError, missing as missing
52 changes: 52 additions & 0 deletions umongo/abstract.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import marshmallow as ma
from .expose_missing import RemoveMissingSchema
from typing import Any, Optional
import abc

class I18nErrorDict(dict):
def __getitem__(self, name): ...

class BaseMarshmallowSchema(RemoveMissingSchema):
class Meta:
ordered: bool

class BaseSchema(ma.Schema):
MA_BASE_SCHEMA_CLS: Any
class Meta:
ordered: bool
error_messages: Any
def __init__(self, *args, **kwargs) -> None: ...
def map_to_field(self, func) -> None: ...
def as_marshmallow_schema(self): ...

class BaseField(ma.fields.Field):
default_error_messages: Any
MARSHMALLOW_ARGS_PREFIX: str
error_messages: Any
io_validate: Any
io_validate_recursive: Any
unique: Any
instance: Any
def __init__(
self,
*args,
io_validate: Optional[Any] = ...,
unique: bool = ...,
instance: Optional[Any] = ...,
**kwargs
) -> None: ...
def serialize_to_mongo(self, obj): ...
def deserialize_from_mongo(self, value): ...
def as_marshmallow_field(self): ...

class BaseValidator(ma.validate.Validator, metaclass=abc.ABCMeta):
def __init__(self, *args, **kwargs) -> None: ...

class BaseDataObject:
def is_modified(self) -> None: ...
def clear_modified(self) -> None: ...
@classmethod
def build_from_mongo(cls, data): ...
def from_mongo(self, data): ...
def to_mongo(self, update: bool = ...): ...
def dump(self): ...
35 changes: 35 additions & 0 deletions umongo/builder.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from . import fields as fields
from .abstract import BaseSchema as BaseSchema
from .data_proxy import data_proxy_factory as data_proxy_factory
from .document import (
DocumentImplementation as DocumentImplementation,
DocumentOpts as DocumentOpts,
DocumentTemplate as DocumentTemplate,
)
from .embedded_document import (
EmbeddedDocumentImplementation as EmbeddedDocumentImplementation,
EmbeddedDocumentOpts as EmbeddedDocumentOpts,
EmbeddedDocumentTemplate as EmbeddedDocumentTemplate,
)
from .exceptions import (
DocumentDefinitionError as DocumentDefinitionError,
NotRegisteredDocumentError as NotRegisteredDocumentError,
)
from .mixin import (
MixinDocumentImplementation as MixinDocumentImplementation,
MixinDocumentOpts as MixinDocumentOpts,
MixinDocumentTemplate as MixinDocumentTemplate,
)
from .template import Implementation as Implementation, Template as Template
from typing import Any

TEMPLATE_IMPLEMENTATION_MAPPING: Any
TEMPLATE_OPTIONS_MAPPING: Any

def camel_to_snake(name): ...

class BaseBuilder:
BASE_DOCUMENT_CLS: Any
instance: Any
def __init__(self, instance) -> None: ...
def build_from_template(self, template): ...
27 changes: 27 additions & 0 deletions umongo/data_objects.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from .abstract import BaseDataObject as BaseDataObject
from typing import Any, Optional, Coroutine

class List(BaseDataObject, list):
inner_field: Any
def __init__(self, inner_field, *args, **kwargs) -> None: ...
def is_modified(self): ...
def set_modified(self) -> None: ...
def clear_modified(self) -> None: ...

class Dict(BaseDataObject, dict):
key_field: Any
value_field: Any
def __init__(self, key_field, value_field, *args, **kwargs) -> None: ...
def is_modified(self): ...
def set_modified(self) -> None: ...
def clear_modified(self) -> None: ...

class Reference:
error_messages: Any
document_cls: Any
pk: Any
def __init__(self, document_cls, pk) -> None: ...
def fetch(
self, no_data: bool = ..., force_reload: bool = ...
) -> Optional[Coroutine[Any, Any, Any]]: ...
def __eq__(self, other): ...
29 changes: 29 additions & 0 deletions umongo/data_proxy.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from .abstract import BaseDataObject as BaseDataObject
from .exceptions import UnknownFieldInDBError as UnknownFieldInDBError
from typing import Any, Optional

class BaseDataProxy:
schema: Any
def __init__(self, data: Optional[Any] = ...) -> None: ...
def to_mongo(self, update: bool = ...): ...
def from_mongo(self, data) -> None: ...
def dump(self): ...
def update(self, data) -> None: ...
def load(self, data) -> None: ...
def get(self, name): ...
def set(self, name, value) -> None: ...
def delete(self, name) -> None: ...
def __eq__(self, other): ...
def get_modified_fields(self): ...
def clear_modified(self) -> None: ...
def is_modified(self): ...
def required_validate(self) -> None: ...
def items(self): ...
def keys(self): ...
def values(self): ...

class BaseNonStrictDataProxy(BaseDataProxy):
def __init__(self, data: Optional[Any] = ...) -> None: ...
def from_mongo(self, data) -> None: ...

def data_proxy_factory(basename, schema, strict: bool = ...): ...
74 changes: 74 additions & 0 deletions umongo/document.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
from .embedded_document import EmbeddedDocumentImplementation
from .template import MetaImplementation, Template
from marshmallow import (
post_dump as post_dump,
post_load as post_load,
pre_dump as pre_dump,
pre_load as pre_load,
validates_schema as validates_schema,
)
from typing import Any, Optional

class DocumentTemplate(Template): ...

Document = DocumentTemplate

class DocumentOpts:
instance: Any
template: Any
collection_name: Any
abstract: Any
indexes: Any
is_child: Any
strict: Any
offspring: Any
def __init__(
self,
instance,
template,
collection_name: Optional[Any] = ...,
abstract: bool = ...,
indexes: Optional[Any] = ...,
is_child: bool = ...,
strict: bool = ...,
offspring: Optional[Any] = ...,
) -> None: ...

class MetaDocumentImplementation(MetaImplementation):
def __init__(cls, *args, **kwargs) -> None: ...
@property
def collection(cls): ...
@property
def indexes(cls): ...

class DocumentImplementation(
EmbeddedDocumentImplementation, metaclass=MetaDocumentImplementation
):
opts: Any
is_created: bool
def __init__(self, **kwargs) -> None: ...
def __eq__(self, other): ...
def clone(self): ...
@property
def collection(self): ...
@property
def pk(self): ...
@property
def dbref(self): ...
@classmethod
def build_from_mongo(cls, data, use_cls: bool = ...): ...
def from_mongo(self, data) -> None: ...
def to_mongo(self, update: bool = ...): ...
def update(self, data) -> None: ...
def dump(self): ...
def is_modified(self): ...
def __setitem__(self, name, value) -> None: ...
def __delitem__(self, name) -> None: ...
def __setattr__(self, name, value) -> None: ...
def __delattr__(self, name) -> None: ...
def pre_insert(self) -> None: ...
def pre_update(self) -> None: ...
def pre_delete(self) -> None: ...
def post_insert(self, ret) -> None: ...
def post_update(self, ret) -> None: ...
def post_delete(self, ret) -> None: ...
45 changes: 45 additions & 0 deletions umongo/embedded_document.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from .data_objects import BaseDataObject
from .template import Implementation, Template
from typing import Any, Optional

class EmbeddedDocumentTemplate(Template): ...

EmbeddedDocument = EmbeddedDocumentTemplate

class EmbeddedDocumentOpts:
instance: Any
template: Any
abstract: Any
is_child: Any
strict: Any
offspring: Any
def __init__(
self,
instance,
template,
abstract: bool = ...,
is_child: bool = ...,
strict: bool = ...,
offspring: Optional[Any] = ...,
) -> None: ...

class EmbeddedDocumentImplementation(Implementation, BaseDataObject):
opts: Any
def __init__(self, **kwargs) -> None: ...
def __eq__(self, other): ...
def is_modified(self): ...
def clear_modified(self) -> None: ...
def required_validate(self) -> None: ...
@classmethod
def build_from_mongo(cls, data, use_cls: bool = ...): ...
def from_mongo(self, data) -> None: ...
def to_mongo(self, update: bool = ...): ...
def update(self, data): ...
def dump(self): ...
def items(self): ...
def __getitem__(self, name): ...
def __delitem__(self, name) -> None: ...
def __setitem__(self, name, value) -> None: ...
def __setattr__(self, name, value) -> None: ...
def __getattr__(self, name): ...
def __delattr__(self, name) -> None: ...
13 changes: 13 additions & 0 deletions umongo/exceptions.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class UMongoError(Exception): ...
class NoCompatibleInstanceError(UMongoError): ...
class AbstractDocumentError(UMongoError): ...
class DocumentDefinitionError(UMongoError): ...
class NoDBDefinedError(UMongoError): ...
class NotRegisteredDocumentError(UMongoError): ...
class AlreadyRegisteredDocumentError(UMongoError): ...
class UpdateError(UMongoError): ...
class DeleteError(UMongoError): ...
class AlreadyCreatedError(UMongoError): ...
class NotCreatedError(UMongoError): ...
class NoneReferenceError(UMongoError): ...
class UnknownFieldInDBError(UMongoError): ...
11 changes: 11 additions & 0 deletions umongo/expose_missing.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import marshmallow as ma
from contextlib import AbstractContextManager
from typing import Any

class ExposeMissing(AbstractContextManager):
token: Any
def __enter__(self) -> None: ...
def __exit__(self, *args, **kwargs) -> None: ...

class RemoveMissingSchema(ma.Schema):
def dump(self, *args, **kwargs): ...
Loading