Skip to content

Commit 65e4ef0

Browse files
committed
Exctract documents to separate file
1 parent 45f969f commit 65e4ef0

File tree

4 files changed

+104
-89
lines changed

4 files changed

+104
-89
lines changed

docs/api/base.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@ flask_mongoengine.connection module
88

99
.. automodule:: flask_mongoengine.connection
1010

11+
flask_mongoengine.db_fields module
12+
----------------------------------
13+
14+
.. automodule:: flask_mongoengine.db_fields
15+
16+
flask_mongoengine.decorators module
17+
-----------------------------------
18+
19+
.. automodule:: flask_mongoengine.decorators
20+
21+
flask_mongoengine.documents module
22+
----------------------------------
23+
24+
.. automodule:: flask_mongoengine.documents
25+
1126
flask_mongoengine.json module
1227
-----------------------------
1328

docs/api/wtf.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@ WTF module API
33

44
This is the flask_mongoengine.wtf modules API documentation.
55

6-
flask_mongoengine.wtf.db_fields module
7-
--------------------------------------
8-
9-
.. automodule:: flask_mongoengine.wtf.db_fields
10-
116
flask_mongoengine.wtf.fields module
127
-----------------------------------
138

flask_mongoengine/__init__.py

Lines changed: 4 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import warnings
22

33
import mongoengine
4-
from flask import Flask, abort, current_app
5-
from mongoengine.errors import DoesNotExist
6-
from mongoengine.queryset import QuerySet
4+
from flask import Flask, current_app
75

8-
from flask_mongoengine import db_fields
6+
from flask_mongoengine import db_fields, documents
97
from flask_mongoengine.connection import *
108
from flask_mongoengine.json import override_json_encoder
119
from flask_mongoengine.pagination import *
@@ -80,8 +78,8 @@ def __init__(self, app=None, config=None):
8078
self.config = config
8179

8280
# Extended documents classes
83-
self.Document = Document
84-
self.DynamicDocument = DynamicDocument
81+
self.Document = documents.Document
82+
self.DynamicDocument = documents.DynamicDocument
8583

8684
if app is not None:
8785
self.init_app(app, config)
@@ -147,81 +145,3 @@ def __getattr__(self, attr_name):
147145
modified by us, and not mapped directly.
148146
"""
149147
return getattr(mongoengine, attr_name)
150-
151-
152-
class BaseQuerySet(QuerySet):
153-
"""Extends :class:`~mongoengine.queryset.QuerySet` class with handly methods."""
154-
155-
def _abort_404(self, _message_404):
156-
"""Returns 404 error with message, if message provided.
157-
158-
:param _message_404: Message for 404 comment
159-
"""
160-
abort(404, _message_404) if _message_404 else abort(404)
161-
162-
def get_or_404(self, *args, _message_404=None, **kwargs):
163-
"""Get a document and raise a 404 Not Found error if it doesn't exist.
164-
165-
:param _message_404: Message for 404 comment, not forwarded to
166-
:func:`~mongoengine.queryset.QuerySet.get`
167-
:param args: args list, silently forwarded to
168-
:func:`~mongoengine.queryset.QuerySet.get`
169-
:param kwargs: keywords arguments, silently forwarded to
170-
:func:`~mongoengine.queryset.QuerySet.get`
171-
"""
172-
try:
173-
return self.get(*args, **kwargs)
174-
except DoesNotExist:
175-
self._abort_404(_message_404)
176-
177-
def first_or_404(self, _message_404=None):
178-
"""
179-
Same as :func:`~BaseQuerySet.get_or_404`, but uses
180-
:func:`~mongoengine.queryset.QuerySet.first`, not
181-
:func:`~mongoengine.queryset.QuerySet.get`.
182-
183-
:param _message_404: Message for 404 comment, not forwarded to
184-
:func:`~mongoengine.queryset.QuerySet.get`
185-
"""
186-
return self.first() or self._abort_404(_message_404)
187-
188-
def paginate(self, page, per_page, **kwargs):
189-
"""
190-
Paginate the QuerySet with a certain number of docs per page
191-
and return docs for a given page.
192-
"""
193-
return Pagination(self, page, per_page)
194-
195-
def paginate_field(self, field_name, doc_id, page, per_page, total=None):
196-
"""
197-
Paginate items within a list field from one document in the
198-
QuerySet.
199-
"""
200-
# TODO this doesn't sound useful at all - remove in next release?
201-
item = self.get(id=doc_id)
202-
count = getattr(item, f"{field_name}_count", "")
203-
total = total or count or len(getattr(item, field_name))
204-
return ListFieldPagination(
205-
self, doc_id, field_name, page, per_page, total=total
206-
)
207-
208-
209-
class Document(mongoengine.Document):
210-
"""Abstract document with extra helpers in the queryset class"""
211-
212-
meta = {"abstract": True, "queryset_class": BaseQuerySet}
213-
214-
def paginate_field(self, field_name, page, per_page, total=None):
215-
"""Paginate items within a list field."""
216-
# TODO this doesn't sound useful at all - remove in next release?
217-
count = getattr(self, f"{field_name}_count", "")
218-
total = total or count or len(getattr(self, field_name))
219-
return ListFieldPagination(
220-
self.__class__.objects, self.pk, field_name, page, per_page, total=total
221-
)
222-
223-
224-
class DynamicDocument(mongoengine.DynamicDocument):
225-
"""Abstract Dynamic document with extra helpers in the queryset class"""
226-
227-
meta = {"abstract": True, "queryset_class": BaseQuerySet}

flask_mongoengine/documents.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
"""Extended version of :mod:`mongoengine.document`."""
2+
import mongoengine
3+
from flask import abort
4+
from mongoengine.errors import DoesNotExist
5+
from mongoengine.queryset import QuerySet
6+
7+
from flask_mongoengine.pagination import ListFieldPagination, Pagination
8+
9+
10+
class BaseQuerySet(QuerySet):
11+
"""Extends :class:`~mongoengine.queryset.QuerySet` class with handly methods."""
12+
13+
def _abort_404(self, _message_404):
14+
"""Returns 404 error with message, if message provided.
15+
16+
:param _message_404: Message for 404 comment
17+
"""
18+
abort(404, _message_404) if _message_404 else abort(404)
19+
20+
def get_or_404(self, *args, _message_404=None, **kwargs):
21+
"""Get a document and raise a 404 Not Found error if it doesn't exist.
22+
23+
:param _message_404: Message for 404 comment, not forwarded to
24+
:func:`~mongoengine.queryset.QuerySet.get`
25+
:param args: args list, silently forwarded to
26+
:func:`~mongoengine.queryset.QuerySet.get`
27+
:param kwargs: keywords arguments, silently forwarded to
28+
:func:`~mongoengine.queryset.QuerySet.get`
29+
"""
30+
try:
31+
return self.get(*args, **kwargs)
32+
except DoesNotExist:
33+
self._abort_404(_message_404)
34+
35+
def first_or_404(self, _message_404=None):
36+
"""
37+
Same as :func:`~BaseQuerySet.get_or_404`, but uses
38+
:func:`~mongoengine.queryset.QuerySet.first`, not
39+
:func:`~mongoengine.queryset.QuerySet.get`.
40+
41+
:param _message_404: Message for 404 comment, not forwarded to
42+
:func:`~mongoengine.queryset.QuerySet.get`
43+
"""
44+
return self.first() or self._abort_404(_message_404)
45+
46+
def paginate(self, page, per_page, **kwargs):
47+
"""
48+
Paginate the QuerySet with a certain number of docs per page
49+
and return docs for a given page.
50+
"""
51+
return Pagination(self, page, per_page)
52+
53+
def paginate_field(self, field_name, doc_id, page, per_page, total=None):
54+
"""
55+
Paginate items within a list field from one document in the
56+
QuerySet.
57+
"""
58+
# TODO this doesn't sound useful at all - remove in next release?
59+
item = self.get(id=doc_id)
60+
count = getattr(item, f"{field_name}_count", "")
61+
total = total or count or len(getattr(item, field_name))
62+
return ListFieldPagination(
63+
self, doc_id, field_name, page, per_page, total=total
64+
)
65+
66+
67+
class Document(mongoengine.Document):
68+
"""Abstract document with extra helpers in the queryset class"""
69+
70+
meta = {"abstract": True, "queryset_class": BaseQuerySet}
71+
72+
def paginate_field(self, field_name, page, per_page, total=None):
73+
"""Paginate items within a list field."""
74+
# TODO this doesn't sound useful at all - remove in next release?
75+
count = getattr(self, f"{field_name}_count", "")
76+
total = total or count or len(getattr(self, field_name))
77+
return ListFieldPagination(
78+
self.__class__.objects, self.pk, field_name, page, per_page, total=total
79+
)
80+
81+
82+
class DynamicDocument(mongoengine.DynamicDocument):
83+
"""Abstract Dynamic document with extra helpers in the queryset class"""
84+
85+
meta = {"abstract": True, "queryset_class": BaseQuerySet}

0 commit comments

Comments
 (0)