diff --git a/MANIFEST.in b/MANIFEST.in index 6ceae640..43dea9ad 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,6 @@ +include MANIFEST.in include README.rst include LICENSE +include AUTHORS recursive-include docs * prune docs/_build -recursive-include tests * -recursive-exclude * *.pyc *.swp diff --git a/README.rst b/README.rst index 23caaa8a..f6866e3e 100644 --- a/README.rst +++ b/README.rst @@ -15,7 +15,7 @@ a `tutorial `_, a `user guide Installation ============ If you have `setuptools `_ -you can use ``easy_install mongoengine``. Otherwise, you can download the +you can use ``easy_install -U mongoengine``. Otherwise, you can download the source from `GitHub `_ and run ``python setup.py install``. @@ -82,6 +82,14 @@ Tests To run the test suite, ensure you are running a local instance of MongoDB on the standard port, and run ``python setup.py test``. +Community +========= +- `MongoEngine Users mailing list + `_ +- `MongoEngine Developers mailing list + `_ +- `#mongoengine IRC channel `_ + Contributing ============ The source is available on `GitHub `_ - to diff --git a/docs/changelog.rst b/docs/changelog.rst index 4b9a547f..479ea21c 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -2,6 +2,40 @@ Changelog ========= +Changes in v0.3 +=============== +- Added MapReduce support +- Added ``contains``, ``startswith`` and ``endswith`` query operators (and + case-insensitive versions that are prefixed with 'i') +- Deprecated fields' ``name`` parameter, replaced with ``db_field`` +- Added ``QuerySet.only`` for only retrieving specific fields +- Added ``QuerySet.in_bulk()`` for bulk querying using ids +- ``QuerySet``\ s now have a ``rewind()`` method, which is called automatically + when the iterator is exhausted, allowing ``QuerySet``\ s to be reused +- Added ``DictField`` +- Added ``URLField`` +- Added ``DecimalField`` +- Added ``BinaryField`` +- Added ``GenericReferenceField`` +- Added ``get()`` and ``get_or_create()`` methods to ``QuerySet`` +- ``ReferenceField``\ s may now reference the document they are defined on + (recursive references) and documents that have not yet been defined +- ``Document`` objects may now be compared for equality (equal if _ids are + equal and documents are of same type) +- ``QuerySet`` update methods now have an ``upsert`` parameter +- Added field name substitution for Javascript code (allows the user to use the + Python names for fields in JS, which are later substituted for the real field + names) +- ``Q`` objects now support regex querying +- Fixed bug where referenced documents within lists weren't properly + dereferenced +- ``ReferenceField``\ s may now be queried using their _id +- Fixed bug where ``EmbeddedDocuments`` couldn't be non-polymorphic +- ``queryset_manager`` functions now accept two arguments -- the document class + as the first and the queryset as the second +- Fixed bug where ``QuerySet.exec_js`` ignored ``Q`` objects +- Other minor fixes + Changes in v0.2.2 ================= - Fixed bug that prevented indexes from being used on ``ListField``\ s diff --git a/docs/guide/querying.rst b/docs/guide/querying.rst index 030c66c0..eba75d7d 100644 --- a/docs/guide/querying.rst +++ b/docs/guide/querying.rst @@ -85,6 +85,8 @@ expressions: * ``endswith`` -- string field ends with value * ``iendswith`` -- string field ends with value (case insensitive) +.. versionadded:: 0.3 + Limiting and skipping results ============================= Just as with traditional ORMs, you may limit the number of results returned, or diff --git a/docs/index.rst b/docs/index.rst index 6e0db8b0..a28b344c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -7,14 +7,16 @@ MongoDB. To install it, simply run .. code-block:: console - # easy_install mongoengine + # easy_install -U mongoengine The source is available on `GitHub `_. -If you are interested in contributing, join the developers' `mailing list -`_. Some of us also like to -hang out at `#mongoengine IRC channel `_. +To get help with using MongoEngine, use the `MongoEngine Users mailing list +`_ or come chat on the +`#mongoengine IRC channel `_. +If you are interested in contributing, join the developers' `mailing list +`_. .. toctree:: :maxdepth: 2 diff --git a/mongoengine/__init__.py b/mongoengine/__init__.py index 97896878..e01d31ae 100644 --- a/mongoengine/__init__.py +++ b/mongoengine/__init__.py @@ -12,7 +12,7 @@ __all__ = (document.__all__ + fields.__all__ + connection.__all__ + __author__ = 'Harry Marr' -VERSION = (0, 2, 2) +VERSION = (0, 3, 0) def get_version(): version = '%s.%s' % (VERSION[0], VERSION[1]) diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 70272552..11dc2bcb 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -343,6 +343,8 @@ class QuerySet(object): :class:`~mongoengine.queryset.MultipleObjectsReturned` or :class:`~mongoengine.queryset.DoesNotExist` exceptions if multiple or no results are found. + + .. versionadded:: 0.3 """ self.__call__(*q_objs, **query) count = self.count() @@ -360,6 +362,8 @@ class QuerySet(object): results are found. A new document will be created if the document doesn't exists; a dictionary of default values for the new document may be provided as a keyword argument called :attr:`defaults`. + + .. versionadded:: 0.3 """ defaults = query.get('defaults', {}) if 'defaults' in query: @@ -406,6 +410,8 @@ class QuerySet(object): :param object_ids: a list or tuple of ``ObjectId``\ s :rtype: dict of ObjectIds as keys and collection-specific Document subclasses as values. + + .. versionadded:: 0.3 """ doc_map = {} @@ -428,6 +434,8 @@ class QuerySet(object): def rewind(self): """Rewind the cursor to its unevaluated state. + + .. versionadded:: 0.3 """ self._cursor.rewind() @@ -470,7 +478,6 @@ class QuerySet(object): PyMongo version **>= 1.2**. .. versionadded:: 0.3 - """ from document import MapReduceDocument @@ -572,6 +579,8 @@ class QuerySet(object): post = BlogPost.objects(...).only("title") :param fields: fields to include + + .. versionadded:: 0.3 """ self._loaded_fields = [] for field in fields: diff --git a/tests/queryset.py b/tests/queryset.py index ff1d035a..c0bd8fa9 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -696,7 +696,7 @@ class QuerySetTest(unittest.TestCase): post2.save() post3.save() - self.assertEqual(BlogPost._fields['title'].name, '_id') + self.assertEqual(BlogPost._fields['title'].db_field, '_id') self.assertEqual(BlogPost._meta['id_field'], 'title') map_f = """