diff --git a/mongoengine/__init__.py b/mongoengine/__init__.py index d2e26ebf..fb43a484 100644 --- a/mongoengine/__init__.py +++ b/mongoengine/__init__.py @@ -1,23 +1,35 @@ +# Import submodules so that we can expose their __all__ import connection -from connection import * import document -from document import * import errors -from errors import * import fields -from fields import * import queryset -from queryset import * import signals + +# Import everything from each submodule so that it can be accessed via +# mongoengine, e.g. instead of `from mongoengine.connection import connect`, +# users can simply use `from mongoengine import connect`, or even +# `from mongoengine import *` and then `connect('testdb')`. +from connection import * +from document import * +from errors import * +from fields import * +from queryset import * from signals import * -__all__ = (list(document.__all__) + fields.__all__ + connection.__all__ + - list(queryset.__all__) + signals.__all__ + list(errors.__all__)) + +__all__ = (list(document.__all__) + list(fields.__all__) + + list(connection.__all__) + list(queryset.__all__) + + list(signals.__all__) + list(errors.__all__)) + VERSION = (0, 10, 7) def get_version(): + """Return the VERSION as a string, e.g. for VERSION == (0, 10, 7), + return '0.10.7'. + """ if isinstance(VERSION[-1], basestring): return '.'.join(map(str, VERSION[:-1])) + VERSION[-1] return '.'.join(map(str, VERSION)) diff --git a/mongoengine/base/__init__.py b/mongoengine/base/__init__.py index e8d4b6ad..e69de29b 100644 --- a/mongoengine/base/__init__.py +++ b/mongoengine/base/__init__.py @@ -1,8 +0,0 @@ -from mongoengine.base.common import * -from mongoengine.base.datastructures import * -from mongoengine.base.document import * -from mongoengine.base.fields import * -from mongoengine.base.metaclasses import * - -# Help with backwards compatibility -from mongoengine.errors import * diff --git a/mongoengine/base/common.py b/mongoengine/base/common.py index 3a966c79..814f755d 100644 --- a/mongoengine/base/common.py +++ b/mongoengine/base/common.py @@ -1,13 +1,14 @@ from mongoengine.errors import NotRegistered -__all__ = ('ALLOW_INHERITANCE', 'get_document', '_document_registry') +__all__ = ('get_document', '_document_registry') -ALLOW_INHERITANCE = False +ALLOW_INHERITANCE = False # TODO is this really necessary? _document_registry = {} def get_document(name): + """Get a document class by name.""" doc = _document_registry.get(name, None) if not doc: # Possible old style name diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index 965e2572..9d69efd6 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -11,13 +11,9 @@ import pymongo from mongoengine import signals from mongoengine.base.common import ALLOW_INHERITANCE, get_document -from mongoengine.base.datastructures import ( - BaseDict, - BaseList, - EmbeddedDocumentList, - SemiStrictDict, - StrictDict -) +from mongoengine.base.datastructures import (BaseDict, BaseList, + EmbeddedDocumentList, + SemiStrictDict, StrictDict) from mongoengine.base.fields import ComplexBaseField from mongoengine.common import _import_class from mongoengine.errors import (FieldDoesNotExist, InvalidDocumentError, diff --git a/mongoengine/base/fields.py b/mongoengine/base/fields.py index f6d24877..9b75fff2 100644 --- a/mongoengine/base/fields.py +++ b/mongoengine/base/fields.py @@ -12,8 +12,8 @@ from mongoengine.base.datastructures import ( from mongoengine.common import _import_class from mongoengine.errors import ValidationError -__all__ = ("BaseField", "ComplexBaseField", - "ObjectIdField", "GeoJsonBaseField") +__all__ = ('BaseField', 'ComplexBaseField', 'ObjectIdField', + 'GeoJsonBaseField') UPDATE_OPERATORS = set(['set', 'unset', 'inc', 'dec', 'pop', 'push', diff --git a/mongoengine/dereference.py b/mongoengine/dereference.py index c16028d2..11d3dbe6 100644 --- a/mongoengine/dereference.py +++ b/mongoengine/dereference.py @@ -1,14 +1,14 @@ from bson import DBRef, SON -from .base import ( - BaseDict, BaseList, EmbeddedDocumentList, - TopLevelDocumentMetaclass, get_document -) -from .connection import get_db -from .document import Document, EmbeddedDocument -from .fields import DictField, ListField, MapField, ReferenceField -from .python_support import txt_type -from .queryset import QuerySet +from mongoengine.base.common import get_document +from mongoengine.base.datastructures import (BaseDict, BaseList, + EmbeddedDocumentList) +from mongoengine.base.metaclasses import TopLevelDocumentMetaclass +from mongoengine.connection import get_db +from mongoengine.document import Document, EmbeddedDocument +from mongoengine.fields import DictField, ListField, MapField, ReferenceField +from mongoengine.python_support import txt_type +from mongoengine.queryset import QuerySet class DeReference(object): diff --git a/mongoengine/document.py b/mongoengine/document.py index 2bfe8c39..3092e003 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -6,16 +6,12 @@ import pymongo from pymongo.read_preferences import ReadPreference from mongoengine import signals -from mongoengine.base import ( - ALLOW_INHERITANCE, - BaseDict, - BaseDocument, - BaseList, - DocumentMetaclass, - EmbeddedDocumentList, - TopLevelDocumentMetaclass, - get_document -) +from mongoengine.base.common import ALLOW_INHERITANCE, get_document +from mongoengine.base.document import BaseDocument +from mongoengine.base.datastructures import (BaseDict, BaseList, + EmbeddedDocumentList) +from mongoengine.base.metaclasses import (DocumentMetaclass, + TopLevelDocumentMetaclass) from mongoengine.common import _import_class from mongoengine.connection import DEFAULT_CONNECTION_NAME, get_db from mongoengine.context_managers import switch_collection, switch_db diff --git a/mongoengine/fields.py b/mongoengine/fields.py index c4300810..1a9bc497 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -25,13 +25,16 @@ try: except ImportError: Int64 = long -from .base import (BaseDocument, BaseField, ComplexBaseField, GeoJsonBaseField, - ObjectIdField, get_document) -from .connection import DEFAULT_CONNECTION_NAME, get_db -from .document import Document, EmbeddedDocument -from .errors import DoesNotExist, ValidationError -from .python_support import PY3, StringIO, bin_type, str_types, txt_type -from .queryset import DO_NOTHING, QuerySet +from mongoengine.base.common import get_document +from mongoengine.base.document import BaseDocument +from mongoengine.base.fields import (BaseField, ComplexBaseField, + GeoJsonBaseField, ObjectIdField) +from mongoengine.connection import DEFAULT_CONNECTION_NAME, get_db +from mongoengine.document import Document, EmbeddedDocument +from mongoengine.errors import DoesNotExist, ValidationError +from mongoengine.python_support import (PY3, StringIO, bin_type, str_types, + txt_type) +from mongoengine.queryset import DO_NOTHING, QuerySet try: from PIL import Image, ImageOps @@ -39,7 +42,7 @@ except ImportError: Image = None ImageOps = None -__all__ = [ +__all__ = ( 'StringField', 'URLField', 'EmailField', 'IntField', 'LongField', 'FloatField', 'DecimalField', 'BooleanField', 'DateTimeField', 'ComplexDateTimeField', 'EmbeddedDocumentField', 'ObjectIdField', @@ -50,7 +53,8 @@ __all__ = [ 'FileField', 'ImageGridFsProxy', 'ImproperlyConfigured', 'ImageField', 'GeoPointField', 'PointField', 'LineStringField', 'PolygonField', 'SequenceField', 'UUIDField', 'MultiPointField', 'MultiLineStringField', - 'MultiPolygonField', 'GeoJsonBaseField'] + 'MultiPolygonField', 'GeoJsonBaseField' +) RECURSIVE_REFERENCE_CONSTANT = 'self' diff --git a/mongoengine/queryset/__init__.py b/mongoengine/queryset/__init__.py index c8fa09db..d4fd4e61 100644 --- a/mongoengine/queryset/__init__.py +++ b/mongoengine/queryset/__init__.py @@ -1,11 +1,22 @@ from mongoengine.errors import (DoesNotExist, InvalidQueryError, MultipleObjectsReturned, NotUniqueError, OperationError) -from mongoengine.queryset.field_list import * -from mongoengine.queryset.manager import * -from mongoengine.queryset.queryset import * -from mongoengine.queryset.transform import * -from mongoengine.queryset.visitor import * +from mongoengine.queryset.field_list import QueryFieldList +from mongoengine.queryset.manager import queryset_manager, QuerySetManager +from mongoengine.queryset.queryset import (QuerySet, QuerySetNoCache, + DO_NOTHING, NULLIFY, CASCADE, + DENY, PULL) +#from mongoengine.queryset.transform import query, update +from mongoengine.queryset.visitor import Q + + +__all__ = ( + 'QuerySet', 'QuerySetNoCache', 'Q', 'queryset_manager', 'QuerySetManager', + 'QueryFieldList', 'DO_NOTHING', 'NULLIFY', 'CASCADE', 'DENY', 'PULL', + + # Errors that might be related to a queryset, mostly here for backward + # compatibility + 'DoesNotExist', 'InvalidQueryError', 'MultipleObjectsReturned', + 'NotUniqueError', 'OperationError', +) -__all__ = (field_list.__all__ + manager.__all__ + queryset.__all__ + - transform.__all__ + visitor.__all__) diff --git a/mongoengine/signals.py b/mongoengine/signals.py index 64828448..a892dec0 100644 --- a/mongoengine/signals.py +++ b/mongoengine/signals.py @@ -1,7 +1,5 @@ -# -*- coding: utf-8 -*- - -__all__ = ['pre_init', 'post_init', 'pre_save', 'pre_save_post_validation', - 'post_save', 'pre_delete', 'post_delete'] +__all__ = ('pre_init', 'post_init', 'pre_save', 'pre_save_post_validation', + 'post_save', 'pre_delete', 'post_delete') signals_available = False try: @@ -34,6 +32,7 @@ except ImportError: temporarily_connected_to = _fail del _fail + # the namespace for code signals. If you are not mongoengine code, do # not put signals in here. Create your own namespace instead. _signals = Namespace() diff --git a/tests/document/instance.py b/tests/document/instance.py index 6114a024..0ab1caca 100644 --- a/tests/document/instance.py +++ b/tests/document/instance.py @@ -1,7 +1,4 @@ # -*- coding: utf-8 -*- -import sys -sys.path[0:0] = [""] - import bson import os import pickle @@ -16,12 +13,12 @@ from tests.fixtures import (PickleEmbedded, PickleTest, PickleSignalsTest, PickleDynamicEmbedded, PickleDynamicTest) from mongoengine import * +from mongoengine.base.common import get_document, _document_registry +from mongoengine.connection import get_db from mongoengine.errors import (NotRegistered, InvalidDocumentError, InvalidQueryError, NotUniqueError, FieldDoesNotExist, SaveConditionError) from mongoengine.queryset import NULLIFY, Q -from mongoengine.connection import get_db -from mongoengine.base import get_document from mongoengine.context_managers import switch_db, query_counter from mongoengine import signals @@ -411,7 +408,6 @@ class InstanceTest(unittest.TestCase): # Mimic Place and NicePlace definitions being in a different file # and the NicePlace model not being imported in at query time. - from mongoengine.base import _document_registry del(_document_registry['Place.NicePlace']) def query_without_importing_nice_place(): diff --git a/tests/fields/fields.py b/tests/fields/fields.py index 0ff95c5a..7ae0faae 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -1,11 +1,7 @@ # -*- coding: utf-8 -*- -import sys - import six from nose.plugins.skip import SkipTest -sys.path[0:0] = [""] - import datetime import unittest import uuid @@ -29,8 +25,9 @@ except ImportError: from mongoengine import * from mongoengine.connection import get_db -from mongoengine.base import _document_registry +from mongoengine.base.common import _document_registry from mongoengine.base.datastructures import BaseDict, EmbeddedDocumentList +from mongoengine.base.fields import BaseField from mongoengine.errors import NotRegistered, DoesNotExist from mongoengine.python_support import PY3, b, bin_type @@ -3555,8 +3552,6 @@ class FieldTest(unittest.TestCase): Ensure that tuples remain tuples when they are inside a ComplexBaseField """ - from mongoengine.base import BaseField - class EnumField(BaseField): def __init__(self, **kwargs):